From 5db737deb3cf4ed720e3082b7d8b11cf83486600 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Wed, 27 May 2026 15:32:13 -0400 Subject: [PATCH 01/21] feat: impeccable setup and landing page --- .env.example | 1 + .gitignore | 6 + .impeccable/design.json | 269 + DESIGN.md | 223 + PRODUCT.md | 33 + alchemy.run.ts | 45 + apps/landing/.gitignore | 24 + apps/landing/.vscode/extensions.json | 4 + apps/landing/.vscode/launch.json | 11 + apps/landing/README.md | 43 + apps/landing/astro.config.mjs | 14 + apps/landing/package.json | 23 + apps/landing/public/favicon.ico | Bin 0 -> 655 bytes apps/landing/public/favicon.svg | 9 + apps/landing/public/icon.png | Bin 0 -> 166667 bytes apps/landing/src/pages/index.astro | 288 + apps/landing/src/styles/global.css | 1249 +++++ apps/landing/tsconfig.json | 5 + package.json | 9 +- packages/benchmarks/package.json | 2 +- packages/benchmarks/vitest.config.ts | 6 +- packages/cli/package.json | 4 +- packages/cli/vitest.config.ts | 6 +- packages/core/package.json | 4 +- packages/core/vitest.config.ts | 6 +- packages/opencode/package.json | 2 +- packages/opencode/vitest.config.ts | 6 +- packages/pi/package.json | 2 +- packages/pi/vitest.config.ts | 6 +- pnpm-lock.yaml | 7449 ++++++++++++++++++++------ pnpm-workspace.yaml | 2 + tsconfig.json | 3 +- 32 files changed, 8014 insertions(+), 1740 deletions(-) create mode 100644 .env.example create mode 100644 .impeccable/design.json create mode 100644 DESIGN.md create mode 100644 PRODUCT.md create mode 100644 alchemy.run.ts create mode 100644 apps/landing/.gitignore create mode 100644 apps/landing/.vscode/extensions.json create mode 100644 apps/landing/.vscode/launch.json create mode 100644 apps/landing/README.md create mode 100644 apps/landing/astro.config.mjs create mode 100644 apps/landing/package.json create mode 100644 apps/landing/public/favicon.ico create mode 100644 apps/landing/public/favicon.svg create mode 100644 apps/landing/public/icon.png create mode 100644 apps/landing/src/pages/index.astro create mode 100644 apps/landing/src/styles/global.css create mode 100644 apps/landing/tsconfig.json diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..b5eb8ee --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +ALCHEMY_STATE_TOKEN= diff --git a/.gitignore b/.gitignore index 0e60e9c..6a7c5eb 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,9 @@ benchmark-results/ # Playwright .playwright-mcp/ .playwright-cli/ + +# alchemy +.alchemy + +.env* +!.env.example diff --git a/.impeccable/design.json b/.impeccable/design.json new file mode 100644 index 0000000..275aac4 --- /dev/null +++ b/.impeccable/design.json @@ -0,0 +1,269 @@ +{ + "schemaVersion": 2, + "generatedAt": "2026-05-27T00:00:00.000Z", + "title": "Design System: Caplets", + "extensions": { + "colorMeta": { + "ember": { + "role": "primary", + "displayName": "Ember Signal", + "canonical": "#E0582F", + "tonalRamp": [ + "oklch(18% 0.055 35)", + "oklch(28% 0.085 35)", + "oklch(40% 0.12 35)", + "oklch(52% 0.15 35)", + "oklch(62% 0.155 35)", + "oklch(74% 0.11 35)", + "oklch(86% 0.06 35)", + "oklch(95% 0.025 35)" + ] + }, + "parchment": { + "role": "tertiary", + "displayName": "Parchment Surface", + "canonical": "#F6E8C8", + "tonalRamp": [ + "oklch(18% 0.018 82)", + "oklch(29% 0.025 82)", + "oklch(41% 0.03 82)", + "oklch(55% 0.035 82)", + "oklch(68% 0.04 82)", + "oklch(80% 0.045 82)", + "oklch(89% 0.035 82)", + "oklch(96% 0.02 82)" + ] + }, + "charred-ink": { + "role": "primary", + "displayName": "Charred Ink", + "canonical": "#1F2018", + "tonalRamp": [ + "oklch(14% 0.012 100)", + "oklch(22% 0.014 100)", + "oklch(32% 0.016 100)", + "oklch(44% 0.018 100)", + "oklch(58% 0.018 100)", + "oklch(72% 0.014 100)", + "oklch(86% 0.01 100)", + "oklch(95% 0.006 100)" + ] + }, + "linen": { + "role": "neutral", + "displayName": "Linen Field", + "canonical": "#FBF7EC", + "tonalRamp": [ + "oklch(16% 0.01 85)", + "oklch(27% 0.012 85)", + "oklch(40% 0.014 85)", + "oklch(54% 0.016 85)", + "oklch(68% 0.018 85)", + "oklch(82% 0.018 85)", + "oklch(91% 0.014 85)", + "oklch(98% 0.008 85)" + ] + }, + "paper": { + "role": "neutral", + "displayName": "Paper Panel", + "canonical": "#FFF8EA", + "tonalRamp": [ + "oklch(17% 0.01 82)", + "oklch(30% 0.012 82)", + "oklch(44% 0.014 82)", + "oklch(58% 0.016 82)", + "oklch(72% 0.018 82)", + "oklch(85% 0.018 82)", + "oklch(93% 0.014 82)", + "oklch(98% 0.008 82)" + ] + }, + "ash": { + "role": "neutral", + "displayName": "Ash Rule", + "canonical": "#E3D8C0", + "tonalRamp": [ + "oklch(17% 0.01 78)", + "oklch(29% 0.012 78)", + "oklch(42% 0.014 78)", + "oklch(56% 0.016 78)", + "oklch(70% 0.018 78)", + "oklch(82% 0.018 78)", + "oklch(91% 0.012 78)", + "oklch(96% 0.006 78)" + ] + }, + "muted-olive": { + "role": "secondary", + "displayName": "Muted Olive", + "canonical": "#686B4E", + "tonalRamp": [ + "oklch(17% 0.025 110)", + "oklch(27% 0.035 110)", + "oklch(38% 0.045 110)", + "oklch(50% 0.05 110)", + "oklch(62% 0.045 110)", + "oklch(74% 0.035 110)", + "oklch(86% 0.022 110)", + "oklch(95% 0.01 110)" + ] + } + }, + "typographyMeta": { + "display": { + "displayName": "Display", + "purpose": "Page titles, onboarding headings, and major empty-state statements." + }, + "headline": { + "displayName": "Headline", + "purpose": "Section introductions and major panel headings." + }, + "title": { + "displayName": "Title", + "purpose": "Card titles, form groups, toolbar headings, and table group labels." + }, + "body": { + "displayName": "Body", + "purpose": "Explanatory text, descriptions, and documentation-adjacent prose." + }, + "label": { + "displayName": "Label", + "purpose": "Buttons, chips, capability IDs, state labels, and terse navigation labels." + } + }, + "shadows": [ + { + "name": "overlay-low", + "value": "0 18px 50px rgba(31, 32, 24, 0.14)", + "purpose": "Only for popovers, command palettes, and disclosure panels that must float above the map." + } + ], + "motion": [ + { + "name": "ease-out-quart", + "value": "cubic-bezier(0.25, 1, 0.5, 1)", + "purpose": "Default easing for hover, focus, and disclosure state changes." + }, + { "name": "state-fast", "value": "150ms", "purpose": "Fast control feedback." }, + { + "name": "state-standard", + "value": "200ms", + "purpose": "Disclosure and panel state changes." + } + ], + "breakpoints": [ + { "name": "sm", "value": "640px" }, + { "name": "md", "value": "768px" }, + { "name": "lg", "value": "1024px" }, + { "name": "xl", "value": "1280px" } + ] + }, + "components": [ + { + "name": "Primary Button", + "kind": "button", + "refersTo": "button-primary", + "description": "Primary action control with rare ember hover state and visible keyboard focus.", + "html": "", + "css": ".ds-btn-primary { background: #1F2018; color: #F6E8C8; border: 1px solid #1F2018; border-radius: 10px; padding: 10px 14px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace; font-size: 12px; font-weight: 600; letter-spacing: 0.035em; transition: background-color 180ms cubic-bezier(0.25, 1, 0.5, 1), color 180ms cubic-bezier(0.25, 1, 0.5, 1), transform 180ms cubic-bezier(0.25, 1, 0.5, 1); } .ds-btn-primary:hover { background: #E0582F; color: #FFF8EA; transform: translateY(-1px); } .ds-btn-primary:focus-visible { outline: 2px solid #E0582F; outline-offset: 2px; } .ds-btn-primary:active { transform: translateY(0); }" + }, + { + "name": "Secondary Button", + "kind": "button", + "refersTo": "button-secondary", + "description": "Inspection and navigation action for lower-risk product flows.", + "html": "", + "css": ".ds-btn-secondary { background: #FFF8EA; color: #1F2018; border: 1px solid #E3D8C0; border-radius: 10px; padding: 10px 14px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace; font-size: 12px; font-weight: 600; letter-spacing: 0.035em; transition: background-color 180ms cubic-bezier(0.25, 1, 0.5, 1), border-color 180ms cubic-bezier(0.25, 1, 0.5, 1); } .ds-btn-secondary:hover { background: #F6E8C8; border-color: #1F2018; } .ds-btn-secondary:focus-visible { outline: 2px solid #E0582F; outline-offset: 2px; }" + }, + { + "name": "Capability Chip", + "kind": "chip", + "refersTo": "chip-neutral", + "description": "Compact backend, operation, or status label.", + "html": "MCP", + "css": ".ds-chip { display: inline-flex; align-items: center; gap: 6px; background: #F6E8C8; color: #1F2018; border: 1px solid #E3D8C0; border-radius: 14px; padding: 5px 9px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace; font-size: 12px; font-weight: 600; letter-spacing: 0.035em; } .ds-chip::before { content: ''; width: 6px; height: 6px; border-radius: 999px; background: #E0582F; }" + }, + { + "name": "Capability Card", + "kind": "card", + "refersTo": "capability-card", + "description": "Signature bounded region for one capability domain and its next inspection steps.", + "html": "
caplets_context7

Context7 Documentation

Fetch current library and framework documentation before using version-sensitive APIs.

search_toolsget_toolcall_tool
", + "css": ".ds-capability-card { background: #FFF8EA; color: #1F2018; border: 1px solid #E3D8C0; border-radius: 14px; padding: 18px; max-width: 360px; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif; } .ds-capability-card h3 { margin: 8px 0 6px; font-size: 16px; line-height: 1.3; letter-spacing: -0.01em; } .ds-capability-card p { margin: 0; color: #686B4E; font-size: 14px; line-height: 1.5; } .ds-card-kicker, .ds-card-actions span { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace; font-size: 12px; font-weight: 600; letter-spacing: 0.035em; } .ds-card-kicker { color: #E0582F; } .ds-card-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 14px; } .ds-card-actions span { border: 1px solid #E3D8C0; border-radius: 999px; padding: 4px 7px; background: #F6E8C8; }" + }, + { + "name": "Search Input", + "kind": "input", + "refersTo": "input-search", + "description": "Focused inspection field for searching tools, resources, and operation names.", + "html": "", + "css": ".ds-search-label { display: grid; gap: 6px; color: #686B4E; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace; font-size: 12px; font-weight: 600; letter-spacing: 0.035em; } .ds-search-input { width: 260px; background: #FFF8EA; color: #1F2018; border: 1px solid #E3D8C0; border-radius: 10px; padding: 10px 12px; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif; font-size: 15px; line-height: 1.4; transition: border-color 180ms cubic-bezier(0.25, 1, 0.5, 1), background-color 180ms cubic-bezier(0.25, 1, 0.5, 1); } .ds-search-input::placeholder { color: #686B4E; } .ds-search-input:focus-visible { outline: 2px solid #E0582F; outline-offset: 2px; border-color: #1F2018; background: #FBF7EC; }" + }, + { + "name": "Top Navigation", + "kind": "nav", + "refersTo": "nav-top", + "description": "Compact map wayfinding for docs, plugins, and capability setup sections.", + "html": "", + "css": ".ds-nav { display: inline-flex; align-items: center; gap: 6px; background: #FFF8EA; border: 1px solid #E3D8C0; border-radius: 14px; padding: 5px; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif; } .ds-nav a { color: #686B4E; text-decoration: none; border-radius: 10px; padding: 8px 10px; font-size: 14px; font-weight: 600; transition: background-color 180ms cubic-bezier(0.25, 1, 0.5, 1), color 180ms cubic-bezier(0.25, 1, 0.5, 1); } .ds-nav a:hover { background: #F6E8C8; color: #1F2018; } .ds-nav a:focus-visible { outline: 2px solid #E0582F; outline-offset: 2px; } .ds-nav .ds-nav-active { background: #1F2018; color: #F6E8C8; }" + } + ], + "narrative": { + "northStar": "The Tool Cartographer", + "overview": "Caplets is a map for agent capability space. The interface should make many backends feel legible without flattening their differences. It uses warm technical surfaces, compact labels, and restrained ember accents to help users orient, inspect, and act.\n\nThe system is product-first: precise, calm, capable. It should feel like an expert tool that has already sorted the sprawl into useful regions. Avoid theatrical intelligence. Avoid visual fog. Every surface should answer one of three questions: what capability is this, what can I inspect next, and what is safe to call.\n\nThe physical scene is a developer reviewing an agent setup at a desk during focused work, with docs, terminal output, and a browser open side by side. The theme stays light and warm because this surface is read for long stretches, compared with documentation, and used during configuration rather than incident response.", + "keyCharacteristics": [ + "Warm light surfaces with ink-like text and a rare ember accent.", + "Tonal layering instead of decorative shadows.", + "Compact product typography with monospace reserved for labels, tool names, command fragments, and schema snippets.", + "Capability cards that feel like map regions and audited records, not marketing cards.", + "State-rich interactions with visible focus, non-color-only status cues, and reduced-motion-safe transitions." + ], + "rules": [ + { + "name": "The Rare Ember Rule", + "body": "Ember is a signal, not atmosphere. Keep it below 10% of any product surface; if everything glows orange, nothing is selected.", + "section": "colors" + }, + { + "name": "The No Pure Extremes Rule", + "body": "Never use pure black or pure white. All neutrals must carry a warm tint so product screens remain readable and owned by Caplets.", + "section": "colors" + }, + { + "name": "The Machine-Text Rule", + "body": "Monospace is reserved for things a user might copy, inspect, or route through an agent. Never use monospace as a vibe.", + "section": "typography" + }, + { + "name": "The Compact Confidence Rule", + "body": "Product text should be smaller and denser than a marketing page, but never cramped. If a line needs more than two clauses, rewrite it.", + "section": "typography" + }, + { + "name": "The Flat Map Rule", + "body": "Surfaces are flat at rest. A capability card earns attention through hierarchy, content, and state, not a drop shadow.", + "section": "elevation" + }, + { + "name": "The Border As Structure Rule", + "body": "Borders separate scan regions and focus areas. They are never colored side stripes, and they never become decoration.", + "section": "elevation" + } + ], + "dos": [ + "Do use ember as a rare signal for selected states, primary actions, and important status markers.", + "Do keep capability cards flat at rest with paper surfaces, ash borders, and precise content hierarchy.", + "Do reserve monospace for tool names, command fragments, schemas, operation names, and IDs.", + "Do make every state accessible through text, icon, shape, or focus treatment in addition to color.", + "Do write compact UI copy that helps the next decision: inspect, search, list, call, configure, or fix." + ], + "donts": [ + "Don't use generic SaaS cream: beige landing pages, vague AI productivity promises, identical rounded card grids, hero metrics, or decorative gradients.", + "Don't use neon devtool dark: hacker-dashboard cosplay, glowing terminal aesthetics, saturated cyber palettes, or default dark-mode theatrics.", + "Don't use raw configuration documentation as the interface. Config details are inspectable, not the whole product surface.", + "Don't use colored side-stripe borders on cards, callouts, alerts, or list items. Use full borders, background tone, icons, or labels instead.", + "Don't use gradient text, decorative glassmorphism, bounce motion, or orchestrated page-load choreography." + ] + } +} diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..25b3682 --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,223 @@ +--- +name: Caplets +description: Capability cards for coding agents, precise progressive disclosure for sprawling tool stacks. +colors: + ember: "#E0582F" + parchment: "#F6E8C8" + charred-ink: "#1F2018" + linen: "#FBF7EC" + paper: "#FFF8EA" + ash: "#E3D8C0" + muted-olive: "#686B4E" + danger: "#B33A2E" + success: "#3F7A52" +typography: + display: + fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" + fontSize: "2rem" + fontWeight: 650 + lineHeight: 1.08 + letterSpacing: "-0.035em" + headline: + fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" + fontSize: "1.5rem" + fontWeight: 650 + lineHeight: 1.15 + letterSpacing: "-0.025em" + title: + fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" + fontSize: "1rem" + fontWeight: 620 + lineHeight: 1.3 + letterSpacing: "-0.01em" + body: + fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" + fontSize: "0.9375rem" + fontWeight: 450 + lineHeight: 1.55 + letterSpacing: "normal" + label: + fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace" + fontSize: "0.75rem" + fontWeight: 600 + lineHeight: 1.25 + letterSpacing: "0.035em" +rounded: + xs: "4px" + sm: "6px" + md: "10px" + lg: "14px" +spacing: + xs: "4px" + sm: "8px" + md: "12px" + lg: "18px" + xl: "28px" +components: + button-primary: + backgroundColor: "{colors.charred-ink}" + textColor: "{colors.parchment}" + typography: "{typography.label}" + rounded: "{rounded.md}" + padding: "10px 14px" + button-primary-hover: + backgroundColor: "{colors.ember}" + textColor: "{colors.paper}" + typography: "{typography.label}" + rounded: "{rounded.md}" + padding: "10px 14px" + button-secondary: + backgroundColor: "{colors.paper}" + textColor: "{colors.charred-ink}" + typography: "{typography.label}" + rounded: "{rounded.md}" + padding: "10px 14px" + chip-neutral: + backgroundColor: "{colors.parchment}" + textColor: "{colors.charred-ink}" + typography: "{typography.label}" + rounded: "{rounded.lg}" + padding: "5px 9px" + capability-card: + backgroundColor: "{colors.paper}" + textColor: "{colors.charred-ink}" + rounded: "{rounded.lg}" + padding: "18px" +--- + +# Design System: Caplets + +## 1. Overview + +**Creative North Star: "The Tool Cartographer"** + +Caplets is a map for agent capability space. The interface should make many backends feel legible without flattening their differences. It uses warm technical surfaces, compact labels, and restrained ember accents to help users orient, inspect, and act. + +The system is product-first: precise, calm, capable. It should feel like an expert tool that has already sorted the sprawl into useful regions. Avoid theatrical intelligence. Avoid visual fog. Every surface should answer one of three questions: what capability is this, what can I inspect next, and what is safe to call. + +The physical scene is a developer reviewing an agent setup at a desk during focused work, with docs, terminal output, and a browser open side by side. The theme stays light and warm because this surface is read for long stretches, compared with documentation, and used during configuration rather than incident response. + +**Key Characteristics:** + +- Warm light surfaces with ink-like text and a rare ember accent. +- Tonal layering instead of decorative shadows. +- Compact product typography with monospace reserved for labels, tool names, command fragments, and schema snippets. +- Capability cards that feel like map regions and audited records, not marketing cards. +- State-rich interactions with visible focus, non-color-only status cues, and reduced-motion-safe transitions. + +## 2. Colors + +The palette is charred ink, parchment, and ember: warm enough to avoid default developer grayscale, restrained enough to preserve product trust. + +### Primary + +- **Ember Signal**: The primary accent from existing README badges. Use it for primary action emphasis, selected states, important status markers, and the smallest wayfinding details. It must stay rare. +- **Charred Ink**: The main text and high-emphasis control color. Use it instead of pure black so dense UI stays warm and less brittle. + +### Secondary + +- **Muted Olive**: A quiet secondary cue for metadata, inactive map regions, and neutral categorization. Use it when ember would imply action or urgency. + +### Tertiary + +- **Parchment Surface**: The brand-tinted neutral used for chips, badges, secondary panels, and documentation-adjacent blocks. + +### Neutral + +- **Linen Field**: The main application background, a tinted neutral for long reading and configuration work. +- **Paper Panel**: The raised tonal surface for cards, inputs, popovers, and focused content blocks. +- **Ash Rule**: The border and divider color. Use it as a quiet structural line, never as decoration. + +### Named Rules + +**The Rare Ember Rule.** Ember is a signal, not atmosphere. Keep it below 10% of any product surface; if everything glows orange, nothing is selected. + +**The No Pure Extremes Rule.** Never use pure black or pure white. All neutrals must carry a warm tint so product screens remain readable and owned by Caplets. + +## 3. Typography + +**Display Font:** Inter, with system sans fallbacks +**Body Font:** Inter, with system sans fallbacks +**Label/Mono Font:** System monospace stack + +**Character:** The type system is practical and exact. Sans-serif carries the product surface; monospace appears only where the content is machine-facing: tool names, command snippets, schema keys, capability IDs, and compact labels. + +### Hierarchy + +- **Display** (650, 2rem, 1.08): Page titles, onboarding headings, and major empty-state statements. Use sparingly. +- **Headline** (650, 1.5rem, 1.15): Section introductions and major panel headings. +- **Title** (620, 1rem, 1.3): Card titles, form groups, toolbar headings, and table group labels. +- **Body** (450, 0.9375rem, 1.55): Explanatory text, descriptions, and documentation-adjacent prose. Cap prose at 65 to 75 characters per line. +- **Label** (600, 0.75rem, 0.035em): Buttons, chips, capability IDs, state labels, and terse navigation labels. + +### Named Rules + +**The Machine-Text Rule.** Monospace is reserved for things a user might copy, inspect, or route through an agent. Never use monospace as a vibe. + +**The Compact Confidence Rule.** Product text should be smaller and denser than a marketing page, but never cramped. If a line needs more than two clauses, rewrite it. + +## 4. Elevation + +Caplets uses tonal layering, not ambient shadow. Depth is conveyed through background shifts, thin ash borders, spacing, and state changes. Shadows are reserved for overlays that must float above the map, such as command palettes, popovers, and focused disclosure panels. + +### Named Rules + +**The Flat Map Rule.** Surfaces are flat at rest. A capability card earns attention through hierarchy, content, and state, not a drop shadow. + +**The Border As Structure Rule.** Borders separate scan regions and focus areas. They are never colored side stripes, and they never become decoration. + +## 5. Components + +### Buttons + +- **Shape:** Tactile and calm, with a medium curve (10px radius). +- **Primary:** Charred ink background with parchment text, compact monospace label, and 10px 14px padding. Ember appears on hover or selected action states, not as the default fill everywhere. +- **Hover / Focus:** Use 150 to 200 ms color and transform transitions with an ease-out curve. Focus uses a visible ember outline plus offset, never color alone. +- **Secondary / Ghost:** Paper or transparent backgrounds with ash borders. Use secondary buttons for inspection and navigation actions. + +### Chips + +- **Style:** Parchment background, charred ink text, compact monospace label, and a 14px pill radius. +- **State:** Selected chips may use ember text or a charred ink fill. Disabled chips must lower contrast through tone and include text or icon state, not color alone. + +### Cards / Containers + +- **Corner Style:** Calm rounded panels (14px radius) for capability cards and content blocks. +- **Background:** Paper panels on a linen field. Parchment panels are reserved for secondary context, examples, and metadata blocks. +- **Shadow Strategy:** No shadow at rest. Use tonal separation and ash borders. +- **Border:** One-pixel ash border. Side-stripe borders are prohibited. +- **Internal Padding:** Use 18px for standard cards, 28px for explanatory panels, and 12px for dense inspection rows. + +### Inputs / Fields + +- **Style:** Paper background, ash border, charred ink text, 10px radius, and body typography. +- **Focus:** Ember outline with 2px offset and a subtle paper-to-linen tonal shift. +- **Error / Disabled:** Errors use danger plus text labels. Disabled fields use parchment surface, muted olive text, and no pointer affordance. + +### Navigation + +- **Style:** Compact labels with clear active state, using charred ink for current location and muted olive for inactive items. Top-level nav should feel like map wayfinding, not a marketing navbar. +- **Hover / Active:** Hover may shift text to charred ink and add a parchment background. Active states combine tone, text weight, and an accessible label or icon. +- **Mobile Treatment:** Collapse navigation structurally into grouped sections or a command palette. Do not hide core actions behind decorative menus. + +### Capability Card + +A capability card is the signature component. It should lead with the capability name, a compact type or backend chip, and a concise description. Disclosure actions such as `search_tools`, `list_tools`, and `get_tool` should appear as ordered next steps. The card should feel like a region on a map: bounded, labeled, and easy to inspect. + +## 6. Do's and Don'ts + +### Do: + +- **Do** use ember as a rare signal for selected states, primary actions, and important status markers. +- **Do** keep capability cards flat at rest with paper surfaces, ash borders, and precise content hierarchy. +- **Do** reserve monospace for tool names, command fragments, schemas, operation names, and IDs. +- **Do** make every state accessible through text, icon, shape, or focus treatment in addition to color. +- **Do** write compact UI copy that helps the next decision: inspect, search, list, call, configure, or fix. + +### Don't: + +- **Don't** use generic SaaS cream: beige landing pages, vague AI productivity promises, identical rounded card grids, hero metrics, or decorative gradients. +- **Don't** use neon devtool dark: hacker-dashboard cosplay, glowing terminal aesthetics, saturated cyber palettes, or default dark-mode theatrics. +- **Don't** use raw configuration documentation as the interface. Config details are inspectable, not the whole product surface. +- **Don't** use colored side-stripe borders on cards, callouts, alerts, or list items. Use full borders, background tone, icons, or labels instead. +- **Don't** use gradient text, decorative glassmorphism, bounce motion, or orchestrated page-load choreography. diff --git a/PRODUCT.md b/PRODUCT.md new file mode 100644 index 0000000..59663aa --- /dev/null +++ b/PRODUCT.md @@ -0,0 +1,33 @@ +# Product + +## Register + +product + +## Users + +Caplets serves developers working with coding agents and tool ecosystems. The primary audience is split between agent power users who run many MCP servers, APIs, and local tools, and tool builders who package focused capability domains for agents or teams. Users are usually in a technical workflow: configuring integrations, inspecting available capabilities, debugging setup, or helping an agent choose the right tool without flooding context. + +## Product Purpose + +Caplets turns sprawling tool stacks into focused capability cards for coding agents. It exists to reduce context bloat, improve tool discovery, preserve downstream capability fidelity, and make heterogeneous backends feel like one coherent progressive-disclosure interface. Success looks like agents choosing the right capability quickly, users trusting what is exposed and hidden, and builders being able to package tools without writing bespoke agent integration code. + +## Brand Personality + +Precise, calm, capable. Caplets should feel like an expert developer tool that has already done the hard sorting work. The voice is compact, direct, and technically credible. It can be clever about the capability-card metaphor, but it should never become cute at the expense of clarity. + +## Anti-references + +Avoid generic SaaS cream: beige landing pages, vague AI productivity promises, identical rounded card grids, hero metrics, and decorative gradients. Also avoid neon devtool dark: hacker-dashboard cosplay, glowing terminal aesthetics, saturated cyber palettes, and default dark-mode theatrics. Caplets should not look like raw configuration documentation pasted into a UI, but it also should not hide important mechanics behind marketing fog. + +## Design Principles + +1. Progressive disclosure is the product: show the capability first, then reveal detail only when it helps the next decision. +2. Earn trust through exactness: names, schemas, statuses, errors, and source metadata should feel stable, inspectable, and unsurprising. +3. Reduce cognitive load without reducing truth: simplify navigation and scanning while preserving complete downstream semantics when users need them. +4. Familiar patterns are leverage: use standard developer-tool affordances so users can stay focused on the agent workflow. +5. Quiet confidence beats spectacle: visual polish should clarify structure and state, not perform intelligence. + +## Accessibility & Inclusion + +Use a pragmatic developer-tool accessibility baseline: full keyboard navigation, visible focus states, screen-reader-friendly labels, non-color-only status cues, readable contrast, and reduced-motion support. Interfaces should remain usable for color-blind users and for developers scanning dense technical output under time pressure. diff --git a/alchemy.run.ts b/alchemy.run.ts new file mode 100644 index 0000000..bd4aed5 --- /dev/null +++ b/alchemy.run.ts @@ -0,0 +1,45 @@ +import alchemy from "alchemy"; +import { Astro } from "alchemy/cloudflare"; +import { GitHubComment } from "alchemy/github"; +import { CloudflareStateStore } from "alchemy/state"; + +const baseDomain = "caplets.dev"; + +const app = await alchemy("caplets", { + stateStore: (scope) => new CloudflareStateStore(scope), + password: process.env.ALCHEMY_PASSWORD!, +}); + +const landingPageDomain = app.stage === "prod" ? baseDomain : `${app.stage}.${baseDomain}`; +export const landingPage = await Astro("landing-page", { + assets: "apps/landing/dist", + cwd: "apps/landing", + dev: { + command: "pnpm run dev" + (process.env.SSH_CONNECTION ? " --host 0.0.0.0" : ""), + }, + domains: [landingPageDomain], +}); + +console.log({ + "Landing Page URL": landingPage.url, +}); + +if (process.env.PULL_REQUEST) { + await GitHubComment("preview-comment", { + owner: "your-username", + repository: "your-repo", + issueNumber: Number(process.env.PULL_REQUEST), + body: `## 🚀 Preview Deployed + +Your changes have been deployed to a preview environment: + +**🌐 Landing Page:** ${landingPage.url} + +Built from commit ${process.env.GITHUB_SHA?.slice(0, 7)} + ++--- +🤖 This comment updates automatically with each push.`, + }); +} + +await app.finalize(); diff --git a/apps/landing/.gitignore b/apps/landing/.gitignore new file mode 100644 index 0000000..16d54bb --- /dev/null +++ b/apps/landing/.gitignore @@ -0,0 +1,24 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# jetbrains setting folder +.idea/ diff --git a/apps/landing/.vscode/extensions.json b/apps/landing/.vscode/extensions.json new file mode 100644 index 0000000..22a1505 --- /dev/null +++ b/apps/landing/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/apps/landing/.vscode/launch.json b/apps/landing/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/apps/landing/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/apps/landing/README.md b/apps/landing/README.md new file mode 100644 index 0000000..692b11c --- /dev/null +++ b/apps/landing/README.md @@ -0,0 +1,43 @@ +# Astro Starter Kit: Minimal + +```sh +pnpm create astro@latest -- --template minimal +``` + +> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! + +## 🚀 Project Structure + +Inside of your Astro project, you'll see the following folders and files: + +```text +/ +├── public/ +├── src/ +│ └── pages/ +│ └── index.astro +└── package.json +``` + +Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. + +There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. + +Any static assets, like images, can be placed in the `public/` directory. + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :--------------------- | :----------------------------------------------- | +| `pnpm install` | Installs dependencies | +| `pnpm dev` | Starts local dev server at `localhost:4321` | +| `pnpm build` | Build your production site to `./dist/` | +| `pnpm preview` | Preview your build locally, before deploying | +| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` | +| `pnpm astro -- --help` | Get help using the Astro CLI | + +## 👀 Want to learn more? + +Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). diff --git a/apps/landing/astro.config.mjs b/apps/landing/astro.config.mjs new file mode 100644 index 0000000..c904e10 --- /dev/null +++ b/apps/landing/astro.config.mjs @@ -0,0 +1,14 @@ +// @ts-check +import { defineConfig } from "astro/config"; + +import tailwindcss from "@tailwindcss/vite"; + +// https://astro.build/config +export default defineConfig({ + devToolbar: { + enabled: false, + }, + vite: { + plugins: [tailwindcss()], + }, +}); diff --git a/apps/landing/package.json b/apps/landing/package.json new file mode 100644 index 0000000..c350624 --- /dev/null +++ b/apps/landing/package.json @@ -0,0 +1,23 @@ +{ + "name": "@caplets/landing", + "version": "0.0.1", + "private": true, + "type": "module", + "scripts": { + "astro": "astro", + "build": "astro build", + "dev": "astro dev", + "preview": "astro preview", + "typecheck": "astro check" + }, + "dependencies": { + "@astrojs/check": "^0.9.9", + "@tailwindcss/vite": "^4.3.0", + "astro": "^6.3.8", + "tailwindcss": "^4.3.0", + "typescript": "^6.0.3" + }, + "engines": { + "node": ">=22.12.0" + } +} diff --git a/apps/landing/public/favicon.ico b/apps/landing/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7f48a94d16071d6c8d06478c7458ab12e675019c GIT binary patch literal 655 zcmV;A0&x9_P)Rl-XF(A`bsas&GH{e7U1}Ri zJr5jR8B2*Jd6$=$AqgTM2o2FV$WZ9|#jJ3mmpEs{jB0ps@*Kxv}=RB|IJih8Z&fqwCG`%bN0000#bW%=J zQ=IH#a_&L{B{_6Lu_3m>0bMN%+@aOmN_3G~H^8EGi>+bXO=;-|Z`uFnf==AdP z{Oj-S=ltmI=<4`LcLE*&009F@L_t(|+I`d4ZUZ3@1<*Uo7H^LoCw6-8z4wsbd;b4l zA}zMFtOw2mLX6O5Mgl}(5P=uOM4%=tnuHiuAp%(G<c=npm$Fz%eL + + + diff --git a/apps/landing/public/icon.png b/apps/landing/public/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4eebda4b695d4da4b27c3ab8a78ac27779353b97 GIT binary patch literal 166667 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

c;->vwF={ zM-{`Y9?iuaLpoCyB(Gd+BCf9WW8Ap8yFS-vNw;H4{ z{XgzDGW3CS+MEK<-N5M?5baN6SoB?;P};nMZQ2=O4WKF)=Wm}>Aj#i;k^S=?u2gj* z+dNy%m^{sezx3?vNLaciuZkQf8ZGtADQG7yF;C#T>00pXS|dIJB{-2wx+*JEg=sN# z{Ke#CSmPZkLd@}yn`K(yt7{`8hcmied|d6&F?UuAH`G|U9u@INPLC6=zG1O%IM#%I z$axhUqs>I{kD~>U?x;BPH&qowVS;xG_L%w96j%+iKOP1c4`1e%Y z$hgUv_Rufm5yQp%fqs_ct@J(Yz^ZAaV6@H<$BD$aB3pyGB`34%R241Sh)@x-#MMC6 zous$vcdHY`9{VqGjtYTeTK~@j$USYQBh+frHIfb?rqXXhFS_WCz4IaNRxQDS#}n># zlU97xy*^&ksCHF%o{U(pzCt1OSuRM_1$XJCjb^U=LgkcpK=N+``vkg9iKkhQ*IOlT zQ(g>~#jl}=ZJ`8)BORtffAGIZ)um)06E_q)V|-kTf>0jYk^g zV%HMq5NQOE)TB-%k2lk}*k+7|MC|)|e0dgkYJ6X46iKS4aGxlRA2Plk`}8nAy?EOO z;Tykb!7Z)s%UCa^al5{apqNE2eR7^;rG(tpIOPd@*6s1Ub5=~l?|7zMsdwSX^u2xL-^PmdeG-*%5+L?F&;c-ZG$!VeKqcAsmmRwM2$ax*W21ZB_LK5*a!b4!m$f*Qb^2jTMY*O81g_tpm2o`ONPA{7YOsTutb3;#pToV4UFz zuSSNG7|V8w&80ry^JTGc{ z^bU(Kh5zD*mHw-#^PN#0>H-VzoXWLH)ZKBD7|Z#&bMpvK zKFKVw<${$NawWuN*~{?%th^t0LOEAfm?fEB&sCgnW5<32OOb@`<{7D&;R1R%B->E+ zlI6tb$1W;%Nhg5lLxYAsY;82Y=Roqrdx>UCeTxZU*GHy#E|@# zt%YKGQyrOb2IX)9t7RpIO+yiZac1v}n^{F6{OD4s=!f4ZF1~|~K$6O(e_a`utnW`A z6?g&@%t=hm&IGsfKy|uAZV~7J!_M5u7eJl+$UxWgkSLP6AMV{;OL4NqZmpCiuBzD7 zMpzMXG6nO2*PtbEf+4*IKAi$+xlP*rttT(sGoow;!$BEb<9;dfR0dhi%JPL?N_ zn5TBUGMl`9h#on4YPcXH#M1j2x74z!>)>%UK}le3djc04@O`bL&?*LH(=X;E7_%%B z=++`|pVD*wjH`chRi=v*6b?ZgPkt94vX$<_P;nGhKDES2!X`VGPn2mrX02L_OifAT zQSs@Wa^QJuRhqF&R14j z;w6Sk`5p`#C30IYx;(G-6RIbXN!3o!Z6tP_GhgEj$(@{`06E`jsTp^fcC!V!d--N7 zR-FB0%kC$NLJHQVDTCh!3xbd}EC~5JPy9#!vd=cZrxoXv`d3X7*yY@ z@RCa|&l9AJKj+AZBG(LB8D^-O%izE+vb)L`Xu&}?KkKvwh|BHB{rNu&xdP}Vi|J>Uj_e;kfb4?5yb zF1Mgi?2Sfb~>4ke@t8W-u!$HDG6TILKSRK=L6ia&MlHC+^C~SV1tgntm4kIt}Mw8 zh_n(%MO!@Ah4vuD{}F~P!~zP(D?CSm(psY4`WWB%QU!gxwQZ60)>@gtC~uZHW&mO| zf zjUJ>qe&e^ua&!91;n-b!UKvm$0rG#ox?3!Xb|BbeCm^?C7R15q{^ek>6?#s;u6J}K zerPb-Em-x=jrGi@1<5iS=X%epZ#1ccyGp?HL@1~gGDUm5rVv8e9a@!ac zG64H1oIx&QBtcc2TgtVkH!H&S{X9FrhPpwO8GIV+FsR2#=!OcKm6xHf09=?LL52-{ zx6(|PTC=f)n>v^&+DvD?6y1W=Vlo|pd~-X$=3e5jL#D|Gw-7IymjWl}P2ulN3j5i2Dr4+ALvZ6C5zXTcW!V zXj*}r1qL-k4U0ACnNW5s^l3FKs5vl<=X#I4Cw@N> z9VLo3KgU~H6Nh}MD|&R=r2RG%P2QBJ{z?`Qm<9rpYyF}nZjheuAZIYu&<-JC$06{2 zEVBCT=vRrWITl7^9rJ>6feJjLA2Ru2r)A`Y8Ff_pM_G{Fi=OaG^5A}AimWI$ff6%* zE>W=#nci5s;*su#gzKuzLvpU17%VGWJLc#AwH^2yuwyE6R-x?nW{Y`g?wY);K|YY~4ks&LPuYo@}4)okuA_Po6RL zA|r~PW|y+Oh(I^2edU44PAHhz*g?0D^{kFyCk~RsF2<*ff0!<(V+2R>jyTKRumh$w zbGMed0TPiNmZm6Q7S9p@pi2||13;y#8Y|^iLCu#gmY-V<72&0ZwXQA+RX$53b!BNM@}$_kSk*< z2_%urmRhOqzK{H-8Kzf?cAN=v@5@tj!#W(29WhcglROYDGm=Zdk-&ntf)12bs&`E# zwQMA`rzO!_J~sM*eF!ZO4pvnTI1pExMo)_QHIF40MVnnm2aPU#4<+J*Ij8#FO=UHY z-<~c-noA5Z2!L@Y^S;a%McnL4S1Milr+_inywY$=HV%0n&WiA%xFeO?OI<-%VHYMHE#K>_Nb28E-snLAwFLYDw&LJsXu;OJM?tq^|VmI_! z31q)@&QwazS?U2nZt}IUL zM@$MQpnGGFi`451xem9dm@wx0d zPC;xJ0AVjufrGS`PIoh}P!my4DNe^6HpHt?j|-X8ZsX?|Ag?dknW*Tlq$nCqST4#E z?37o{u0k8t+E$otrQxZ8#y60t$n)v+xr(8*-%?~_B} zM~+pdIkG7$49>=6Pl}7_1>TV?NLYuZGfm;0ss`jk37O{frsSoEfXN4c1hK=|%LVI- z1;6=LseNNItv}HCTSja9^e>M!d~d4TT~3!hJu_^o6dm6FattZ>KjrgGZ~mNO(@Wo+GY0Qfioxp|NO=Q{@AeP|x$yw0oUn z?3AKP-1sEOS`g>Em({F8UkcO<>-|oD4JjqUS{@$(aJO7q%pNO(4kc36P4UH-5k%Rz zV!1qf(I?yIE;W55RnV$m-WK&1c*sGp>;Jt190teN9fJ0k75{#6z~NYapVz~J(B_lZ z=S?&SQxPM_foyUqvS8-;7eXv?mA0=~zGmp`?G_#ajd>KMH=p5J>03u>mtP->DFNoH2nTKSZd=G+CfQ$vuNqOp6nABsnb%JZ|Fj6f<+I z%qyPg&7Zo9Q7?_qcCu+ibw&toRIguff|7{Fjlphe^M2V>Nm13(Jt%jqu~LjiX|qKW zNcR3n6wk|i_#I@Ts&-ROl|zPVjr8Ya59aHO-moM^(`_Cyhdyp!@k5hQ3N@-%T)-Rg za<_X8Exx|%`=HCzZChqoh7H5RXF5StzqX!KRpAOlH=!}^VhbIH)01Q*dXAGA^_&;& zkDHBfKQYWOJ1)oli;ol7nAer(Ec~@~T@*$PvT^eGDD<|1*&`u)riT_S8AR~jq#zd< zZMBM(fl{czemge)v_W|db#T`Au^q2y(N508j#DXVBffo^#jWQqY_g=Q=yMTyo zR3!++HV^7r->>`V$CZ>5N*yeAQK26@#N6!6v1v^zKZPneHO17XRu8FI+cIY3d-^wc z494hmCzmkF>Sn!4S#14P6zKm6%~1cg{nX&F874UAX&*!aXH`(5Lgp_B;NL&x-1PJX z@Xa{^X8-JK$xX8rRvZgDpT|%LNX{yj{YKNw%LrHm- z9#6bA=2FsJ;;^L_A)lyu=hE-r!0%0s=BnaeqAu^I{6sJJe^hWVduW~^^zCl za3$YA7Tgc-W^6rdpR8E0T;*VD83YLcbPX3Jl6zxXZ zj2HjAErA4Lluk5!1?77h6jgG4D}!k@ZnjKY&Z4#EXnX;DWI&|kt*DC_aX_scy8~L5 zQQ1_Miba=}WjiE>t4F;tnb`SdGnUthzi%_byR%YNB72&$mq?RrE`*FWOn~PMYv0VH zJXpe6q7=RZ44LYQxuy#jaXEzQ=)y~Q9I&%pFEOrEXW;sBQ6@fM`q=o4m5`=-t0$~! zGqGFkEq4pnrsN_NOu&GuBLBNo+hSgX5@ytL?++5uj`8>yYa|;Rn>oL?i-zs{DoTN? zrCPC_qys$lzMV%=b z+7M5w4z*uXVz>2T8||NIWXOt z^SPb&ydM0^VM6`mFzYZ(&^)KTF5kodBZcs(_ehX1-Qj~=)8djO z@dYZkRu~MjC7%oQErK9}y+tWXe_GQ{!-{O$_&#G6B3<~n#74j_qBI2c@ER#r@K^?klofI8yDEt{)Fd{r-^2n`A3we8(S8K5sV42epyxAwzdUIQ!MzMq z#$z=6Xnol8ju=8)bMXrm{dDb(3{_Hpieq*7REwm|DdL`f=hAZs^x98|v4+9tZWI%I z@pJ9|AoSkJ?r~(k@EpeUOU1)~IJxu4AIuXWBSV!631EBN>+M7{zdW%6=z<%iF@5{C zROK)wZGcL?b?zRhToNq{I|@u)3O}k)S60hWyg1UcoIsdFmtKV358N4)C>7YRRdPL^ zSwyw0wgD==RI#BbI!*2$G1AJJ2(B|NOE&S1e{lstE5-kyl_lBf?<}{Rr@`)N9Z>ba zZc2{ZB9Id^(xRuxP?&8Y0{){}m(+-?H9b?<`6+@GW5W()luYH9BW%!9jKGB`n_b6cnWEwFOf8O zpo8T(_Oe>OXQZm9A#!YtSiVojyNyS^?>pv=&n@A(#!XkAdQ0iL^Bw{25q@yZCDgWS zLhnMq3N!Dha557zGut0}QljVfF8IEQxben*cBchv_tY>QKWs;Lde;`;j9`ayEjo4m z+ZCbhI4+lV$(cs6iZ`=r!UUK%n5ibpi$xG#+gV)8pN1}I#=xj#GE_dUk%EpAtnm{U z_+xx9F;G1zn2{5wDNH4swG8)^WUrz(l^cc4FEsj@KZy&sgHT4x3BZ}^B7cZUEkEfd zY+Mo6-Ui1|;zL2{Z zBu=hIq4Z>3wW(d@{3$lTd&H&IuS7uWdfe&~#YvUbvrxF2WMUm&g3wVq|5a}Z=Z{#f zU|BUZ5^+DrRBA;zD(UgdgWOjo3~sv>XQQItJ;#xdt+Y*N!E-+%3=Nwj5in*Qc6~;Z zD&VHy((!^?IiR8W_ThKjGT)a-c^OdA>Qgxdv^m^u@lDZITmv_=D74zendO0|b`_E6 zARI#Rp%N%CArXpTH#hx0yM^f24?1K33li&la&Czo&qpN9rlOsnW-ypp;lWUE4JgF1 z3G=JyV53P7r1g<1H9ho_w_SXcm7$=cUr3)>lj2@SVO-pKLXy*)#K4a}WdqJtyvjbf z@YGK)8FY*tS9s*%jjU+5Z-WcoS&vT$qZQtI1FIE4J4=MR;72+n23wYIs|MYe{>`~Y#sh)cf@|N-$9uctK@g(Z zWj{5m4uPsir9l0n&MKQ~NRY3A&X2;`gdboxZ>^QJqrj-+hzBdHgY!xzbxfCiEXj0f z7YWv$mJvS7MMWGzmvW}Nu{VOVn*7=+bXkMCejZnCc*5p2CG=*HkROTWQ3XbHbYr`= zlmB*`&cy5z4P&9g_lwDEJRXB@E^kuqrD*xGYtOFpaf-1s73clkY?DSo;M?8RDmiFy zU}SwmP;xSRr+@K+y&C;h1gVX>Wj>!nS~0HUt5RLyAff+^%pd?V3-at+WLO8 z1$h5s40m0D4I2bCm()g<(ofcsGFlPT>k_RN+_; z1ux}llT?}o0A|{Xc?Wj<-$cc7Nj{oy7f_mCg9<;Fs{!64*F;pe&3Rd+Sl&*cTjsl7 zt|B)~RCZQ9OkP@xR?@MJj24vFhRZ9JSdcxaIEJMii%zcB<&TKv>h zuLN18_!FBP|FpqeF35?sy@AvRTPi-y}-A~s}RH!xL}`O}M?}x&53Z>$D+(x! z#Sf{wLIH_CisPV{A2muZrWV|e9$+*6j7R9K^@_O))<*_2l236d`}`owm4pN|k8w~q zklR!&3e+JqxW>WP5HHa2plUN)@LV=FKgvZ}HxqO!m1VJ4%!+6Y2u=XYB|5$)6J-ME z49D0f>bvu#mkV>J9i(s@B|xEv8M{uGW4G=Xg{`+vSX&(Aw+&dk)%TN(Cz0vQO^^{X zvc6fC42Rkeg~NsnM}h=9+?38bUL2F;^H3s31L@vi;ncprJ65ru<_9^>mwPj{VQL^5 z6)MB-TGLp|HNxO#b{gHH45YWCAgL8TcL~r!c&W4b=DDq}@U4>gsvzaNRikpg8A*7- zCb6pBqUZQkg}bfIpI1;)7xF)%otBu4Y`<}OBOFM`=l7o!_%~s4H&McW->;Cfp1rkY zCXs<-_~Q_CgICUrc+u`T^2WbQ%RWH{XXjH!;WM{Ed(={KsHbxKwFaRSeLy%ap3_l>W3B{GyD1 z8D6I?QJy36TY8X#3>g5VAx#Z9V43Z4v_4fPf_kH_1FA4pt2}t0<`u-0fZqowp0O)P zzJ2*VfmIN}T463&(7d0j5yV`i=^*zIl2BxgnBQrqCN=a^atds2F3y>pgvSZ_YKouE^b2l& zMGsCkBl4?_4THIpv2ee5yW&{$Jrc_1vOJw`!8k8oqf%L`{T}oKOXIf*y^!bTa=fZJ z5#q+j^m~Oi0f$ECU$qzE9}>`rz6&Kloj+|bJI!#*zOnmH>|*tO z=;zpKG$_7Z?-*dCg5B#Yi*gc5rX#&9%?p$i#d%L3jcv?xhk>UV2$OVRVtE^a=T0p_ zQ$mm~52A*~Q*tlfkQK#j;$euiAgZVj<1;u8#JeKQzR^mi0Dbjvau8*qBVXZw3YMMx68_Svf z<%Cff!T|4W^sZcaoGAAMrbreRv`nC$woT1X& z1+yrOYb2$qV-Mdu#)Ww627Z_Gyh8)(fpicnr~wBdJuClt?c>ANLWP&0W50(A-xr{s z$BYZekePWMo^$Im?Ki)^b>Dtg%`ZLfkT$}?bv-Ew7j#n=nO19nDgx-YhQh;=A#zai z!=fCk;4pzvRW17d@KZ^zFZfBDvUnbdpX^*mHyTGG&`g znzkm_O|2qmL66I1NMkFZYiqsJE7SQk?78JkY2&4kL#C0)Pi&Qz%Cko(XfbpDl`O{p zTg^NT@#uYGTZa z?L{EweNh!yU?3rKe*S%5GIjz=c$1E)Le~Tl79MxhoQAN;+J1Ce5T-NWJVD@YX!nX% z-+sL99wy>i^W(8=x%*>bsjSLha>x|=nWIpGnCqrTMhgxM9=5oF_uKI_tPS2;{_#fb zb5N|u(%#wosEfkOF{W~fUkC6vV&`-9W{&q;hnt?q^eFjtz)3r)>|fKPd^ryRM83bp zClWqXTXRX`7J^Un=^hFSBhtp5IF1p3HvM}KW7|~`^CQWfhsb!(m9Pw64r7IhQ%^7# zw@IWYeP(*d+ii568u2vqhi%1XWOq4z*TYWMHyW+FPKNM`vs4jaxVf|8zR-l6sq5eR zQE9RNP|;8!frdOUM|22h1T5>Qck}5;3n{$_7o2})r*wm@aC5Ora`_((1-!) zwDo~Ab?ye4^;2y2@zJ-))4Q=YwT{~9Ax$HM`K1B8BA>7L%q4CWo*sQ$3pOE{w}l@U62t^yptt9$eUdgDQqXgA&G}bs%6Z;=ye`|6TZt`E%o9GD)p+(#wRGRV70fWrHK{Y2 zVao^CCT3Y{Z*F)Y6wytq5K~F1w>p{R)r~G~W9n@P;&7~*!O`xo9#-1rS zqXBi9{)x~RvTnS9p#LhLM1Ob3dEfky+8D8?D>0K6$eVsiA~EM-#1QY&hTpnvu09EB zUv4|``WxY`L`-{!;&FPw^T8F|@4YnGt{OoUA7fB} zieD4|F;?cSe`7*Y+Pm{J*n+W6DKDXBlb5pF|6UD?SWcJ*E8U@^vZJXwp94=K+i zhZjyfj+^NBn5vRCKsROO0R9vdEnO9udCNZUR;c1QbUpA(yPt_T(nN0!?>_x-1dp(d zLbSPhxb>=PvaWWS^S*2S{DctC(e% zkK8MutcUu@h9AKM2Uf=f&o;*{!Fj^}IKPVdv8$^-D{w6m+3*2;?s@kWXloF|wapRH z?Sa5i>OrJy)SxquO_R^w%Igp1IGOhA+pTe*H`}C&#h{iDy_;0uenQlLmTHOedxVYI zxZc1Gjs8`V;tc4V89Evg9dl5croW-CQQou?U|7vkBrTr6%7hj5?OcNFInn7QHM;R0 zHfBC=&)aXqNjV%07{%+>9$0`^pR6CSK*XTkp(K747zv_1Z7pm(Hr*m@s?>GW9j#hW zNcY1QRQzgKWx|y^w9YQ5oHGTZl7+^=(WS9RBUo|ebS9cI2I9r8|NHrN|CVKANV(g3 z?7pN#Y-a$8T)Z*(J%Iv%w(0jur{k%lp2y+W-k^S>HWP)S%J+Q6DRKFPMYD1Ys>iYL zw5KbWpr8eTE*J@&=M1L-twXLUm3ipX1$sJ^NG_y?B$sA=E5cf?b9C$$XPr+SY#~AI z8cjhLUV3R9sG=Hv>b*3mL~Z3f)70}v-_Kz7T|K_YJ*cYiACWvG&IjKGax*HK7hM%0 zT@7tqS6+=4rhkF=DIhMiVm8c*+w+UQ-2Y0MZ3(NA8mFG}5={`EjQ2G1j z0z^t@9`LX|LPxw;cQ4cgx_Co>&hdJfpYU!zYN42#uI*pQQba}gjf8dUP7X=cY+-j$ z^zve%bt7~AY@0FR<;YPaAE5)%iX*GZElJi~{ci)syW&_c$(EwktGs$Bk4(Y1J{GPHE(X41ZyI1EJ0VcT z&128a@^H{Za!i-bu{-QBV&1J~-z0<|#o&B>i)5F6Yf=8VzLdu1V;t9yLcUQXq>i`JA+MXOuDd^<91IZ-m+gqw zzmelh&TLG-56dr17W9>^P(;yz_>E>jLmN~}PAzcEvPu_vS*eyNmL6R&=-IY_F^Q~-C|mE+v~ z3lOh&zqVI}Suu^B1=Z7{SZpE=)6Bik@PZthYsDy&D={_)U}L&ZvQ1OQ39IkTQGDSd zSKS6Htk#PC>ja9T7cxwK;6(z0ruCtR`nl4PxcxQdrF%{{@7PO-2P&Zkxn#g$q7VuB zEs^#_7)IkNS5|XS5aKO;)*as-J%*%~U%xE^>t_9A!I|iPidhtwo@3_>o8kKDgoi7FHeOqimXKj9P zCvtWHLTf{b5&yx==a|nG=j@yJS)X3J4{PxM{cxb(4q>uctl&T{E-q&DYNj#!XvnaG z3K%d##s?oyw5yCzko9&>j9VG-6;N};My%kiaA%DPgP)GAnFR572#cl&m*_c@Gt%>F zL0SZr1Wpiw;k62Ut9LS`zV+@_itbV@Yv>EzD=CrKK_QHj59IJAkwQVrv}?_43%(m~ zFjnF8nGh>5<-&te?KENz4Eq@Dx`ap^9;Eti3Il0cAWVZjIO=zY{?cvgz~CQO9K-{!HU`yBf+)ztTZsqDJ2Ga@%HCYbAw?Q7)kmc9ZO zY`u?l0b6h1XT)|t#R5$U)WEoh9N#g`1b^JLMdot9C133l(E>Z;>c(2Sln(aL3Fw%u z#C}#3fb*w`v2pUpO|ho;TQ=u)=w}p_Zu`rgHP`F-&I8a?S~)Edjy>FCZxkllaw3^exp0Q_bLGmG!-YgVUA*kCT)ir1CD;PTS?{jR71@+ z4BDJ~iK8@U&XY^Awnkin=6;=fY2;e`2XPH?bAV@do zano~m141)7DryM&@1&9S7>oO|J9jiWQ>`*hBSC@#FA#N-@><8$MvoS62+4}?{(^lS zHeEpQOgo@Zh$*Xe_*HHh(S`Jq4BE5t9^YK6f|Hn7%|D_w27}bK=h93g{#oM)5~qVW z^343(FsqQL$U(PTq-HqYulsmOkIexxy|fGSphQ(ad83G0J9!U0)zrP!(Q*63JN=ub z^MadxgXKd7Osk;j$rNJ9gS!3TU)rjHRkG=0rqiK57>05{%AatnSvb(0VER`3UFt)a zWb^T!`mLhv`Fv7D7@ihbj*=I+L-kD>qj-k>eFCEwSzAR_&k1K;M_0J5517Yv-P9bP zMXy$^Rvhh~T$%0UzYeCAJke&;6bH&2A)fg;hND7TSi2^D3Dq88$qOmS)z<*(T$Br3 zZDHt-C;bOd;;1WC9NKVjkM|GN+Hn;v*o#zZ+sZ1og=Ih?@m`p~e~Z^cU_0+cw*-lF zW}!8kb6*$BF`J_UhteMa_xpR-TY!00?!^W6>hgNVyj@=oC~}N_1Ap&>k0PwF1v2`> zJ2&~Y-7G=t2y&=~l9FJ`H0}{c?hO^ilE4{RuCx5olxebw-Kyq0$ZT~UIr_QCK!Ou> z6=}z-g(U~=_gyA7VMDY&LGPTvC%zGiqi+BMLm2WBxgfdSGCEOAe2Og|O5vB5yBrad zz6LB&TEQMhKoB6bc7(Tbjq759Im*m`Ws(@b3qp~?Vxf2hA`9YB1 zA70Zjz+`9wID{n8O}7A>+074)SIRBBr!wn;G03Wqr{b(OBlCib4TJNy zPJEw-T`j|0%h}JRGFW#% zi&~ds8qpk{5qwjgsGkk`Qoks?Jf15U9NF8+2~i4|BvuZoUAF_yi?oiA(;{*$Q=)N_ z@EDM)K4d^(bJOKrP1n*f(9@IDb(g6McdqT!;Jxf#^RlLH$8R(S)+@_PH;|Dl9=Z`M zNrDzu5I0M*9@4hjw@AzQ(n(K_`-}iW$q!Gs=H8-VO?JJf%>{j!zciiE=4K@Eagt@c z^saLzf1{8!d0GW?-SanU-C-|je@>my_2YWI$Qy2Jt|B>s%G9!A&C8}C=#vs;G_cd{ z93m)^x#`SBYgAA(-5z(x#?|k4D{d{xnR52_VQDK24{C4(&45G5FZV(%fpBDyDt#+@ z=t(o~MDqJV);iza-(&6t(t3Qr{{_EHsZr&l z*_msVUIdS+rnf+2?pxC-PRB!7%I*7hWjnN-Q6M`OR^>fHas{$zR7%=bg>>9jEG}~} zRpScz`E!A-vq^P!p3U3?Th1bOz1hZ`}1=z=WPD(7oPH5UQDlAUCpy! zJ2FKFPm~eiN!X5!phAT$q%Z6JVyGskf-0-VTAi!pSW1AfpsdhuaiG}+jYf)shwNf5 zctIjIiuM@ZP>BRVmi1eQ=sPT$$uPOYIl*%#GIeKtsN|R(d_!Xd=dhy=ll`38`H{h_gW5p~2Y@-Hd2OKE%rXRBwO1!(=Lw`?81 zrp|KMd*nV6>hv;pR?8*-mbBN9HcWQQ7P14_v&| z{?fNk{$VL#_!Pz|5N?l|SD&f>(TskDe?Ht;cfBW(;Ite$rR!%iw zQ~?DiN^QBEr&E3JVT~z&xNpcx6bln~2T(qQMDW3)Wqbq(RJBkv+EDW8%^qSG!VE{P zCu3cJ1ebMw&-D%9ukf*5?DZS-32Sx2NdM-(3nCwLg_cM`8lqEGbHmDl{q0o<;U^D& zG1xB?A3`AxK%9~-JceJnqpaW&PyZa*JOgZf9bxOivdulW`}*D|BWKW`xM;SQhP|xm zI0y_AJgx4D-PpowA2E{#0$DkBGg1RFBJ|Dd&wF!mo=JKUDC- z06Bh?g6x~9_g7m4JXEM#03;i{y)jk&T+q_38u^O$QIrr;ryh=V3Szh!?8>@Q2X#@FWd^YlM1;i331}>b z%b669d27@?V&g3-6UI{zpdy{HIlrC)3=z^roLwSk(5m;d%>H!fBM{o`>wIvO zM8(LLoDEhBciq@BXRmf$Q(L|PFs+_)hqU?Y*^LG=viQOp1rG?nElscE&YTS398i3_ zg>GJDG^zr?F0M;4V4opRyUgrH75)m%8ZiQ7QEXvGOr7mnR;B>l>n`B662{XFC$1)4 zKRSV9CG@|sk_tWUfo)}lOWON&9;NI4FK6porSGpL2T8~Fug@)d66tt}V60h|D27oH z!hBl{A2spb5H%#h@c@WM@=U`8fnSoZB6$QpsteXk^-+=Ric%qtqd`pN?%D6&QE{}1 zE~Mba6>ctpYl>!3gc(-l1+PcBlJes7BuPd3=89UXa6u9ICkZ*7zKJP!)&3%-v8~nw zSuPmV`12!_@a~6_9_j_}EqNxeBW4R;&5~#^N8M5f z#2c$1YqKg5f&uz7ga;$|hZcT!z90z(SdfwGoDHJ63T8{rbew#bnP6?lS3Ev_WLY4E ztJqV(af22HL)2eks9u#!DWR_Ccj2Wm-1MvgcNRo zFvqPQ4U~W@O=ZfS(wBhxDW#56f73S!dn%^NXkhAZcHG>!-SbO~O5p)KpTEsy=1bK#qiZ?S| zX@?dflipq(@9G53jy-Hkzdh6B%eN&J*yOTwa{0-@AE4H zbp^nXupxaEP2dS^#IO>M5*}QFT;!eGsZZ+-5Yl8et#;;Hg^GLF0Z{q&$~&( z&?C-^=^v0phPTxsyHe~hA;VbTzO|G4_?tiAJ z<*IsD(9&-2{h2tS65R+kYPv>GWISN^b76Lv!aJ^D8_Wtv^t>_(xK#ZYdzio1`_;OC zDw9=w%jHmX%k{7Glgsb_NTq_=AH7|5o`+aSrO3h?TCnE7I!66B!76{nvpZQcEd(j1 zA3=1weh0~Iiys39X~(gF<|d8c>p`=^E)k+svXJ#9)YFhhWV9hpgd?<{OWh9d=w={* z`7p`RYr}@l1}AjSw9-#CEZ!5>Z?tx#vBt4+=)i}f#+GBvUw04sFGMjBlFaiyI*z*5 zQuHmQ>(j*m2qw5(m|)??nzB7rDjPs!IicyYLCXx*7=-frXjIU|<)RPE8OZGs3`@=} zvqxxs@p}%|gXlH{hA1X;+m-b#g~{}_biSWz`Orx9e{5^iX%-nolS$jLDMMBH1$NeJ z>Wacqh5^TDJ>=CKPPd-As*m(L^dSU}`_RwVVZGlwQ~fFNGvp75C*{yj@E+a$Yo#3pkfgYw;!78e&%Y%Hm}b}@f3 zY3gO2=`{nnJpZH|%`A|Tb{+(7x9Xc-?Ev6i0|)!<$=h|sdF!RTm~&?*SZYqMCKVF7 zcpD?ZgLEmgyN7)(Ri`Qg8K3{V0ZC;7jFv(!j!z+qFx`H~QIR_p7L{vgjTY~^Fs*XM z7I(3ek43LMEO`?k^yP$=QRouoPw(SNisIyJ*^%;7s+*sAjBVm0+b9=2qzsmPjxU+} zk4uuz5-CS_a&^Tp!FqAYhKa;{2kL6mAZ8uqte}%r5RwqHXwB8awK>*~4JDNkB-@H3 z7o$y=n-0UOv=IJ0f>mQW?NlwC-+{+3zr;T#`;wdd+LhsF8Z%N@#c=C74IvYWOY}A057zxui<+ zwNnHB3Sk%j;Q`@6!y>>&{ID!ry>fxAW?_kZUBGl5{HiE* zxBp5m=jU5T4*U2fS_UhY%f4*`1CzKB)L-TzLm6CLVYk{w2~kT{jNdRj5`eFEG#=z= zx*S{WSX;#ZC4&zd(yx~=?OSml@;F(O3>i|MtpP?|CUlJ*FGSp-?21pp#)7^qUX45V}4kEA?Yb)6|`W<3q4Ay4-wZ zj!7Z|Zg=~c4OfsF(mc@#3<&nF#%XI4q1*0WBUf4_BFAG=1@*6=rl=d@mEalmmRd3W zXGU2yl#rd(xgw@wMi;{z9hbgFR}0i%3Py`#l##K8byc;mS5jBgW?1>Faw)gNYeejB zjX6#d$=I-$FolXuVuS)r%KL4Vz*SbvISaM^0?z+Dtu;^uir_3#Qzx_6in?xme|ca3 zTTlo7PC94WHx4Tsn?<&w^~=i=`1FfAe7(ZVn@v(*Kyvv7$PA=MD0qKN^`n#JDxmV@ zNy%~P;KhTc%204&hZC{K&{GWXvXtnWm<>(2h1bYU=cC~@;QnFzX>(pT7#J?D1i-aa zOC1?+tpEVbQnF8_1ZFj3IKy}oL^8t0caqBkROk_)u-+Dc7oT6I4BFnN#@~?wZW*C& zZ|wCIG1VaKNuROC5z6yR{194nMFj-ks!2k04R}M$CYYHL1iICXplz`N1%z4;Le;bD z8=CB~^i+5bYl|oP$oJhVIH`Df6=Are&@Lkd%Y{sfgeng&jMjiR{bUwISTK904_HW@V^#2F^prgI#Y5>S z3_w7nrxjJjIj+HUj!p5Hp>_h{XV%?s9;q$etdh---D6C{`t8(6#^$=Y*Bn$^%}L zm!)=~9?Ov6s7x>+wr{bMD%kNjI?63H*>WN!w>vD)o*klev;QI0mxW z0;qyx#?;qR_NMq^#j=;iL^Hr98p?OHvgggaeddm_&hlGgX+%QBfRJQvQ z9M_=`UQRSlq!vNheH@E~Y2ClwYX{Kx=3TiG*?=mzrJ*L%Fw+BtPU| z{2`&7V02qd;{ozuNa})v89wC%B=uHKzdRIv)GCG|A!R*?MNONrT9B8PdG~9BpebNO ziUa}eu)Wdp{eNpT{z7(-oEBQ+Ds}@zNr64X12y=DHgEkQBiSXt8gyHoH8&E}G>@$? zIAeqK@^mI1gvBF zFvVDU6+>g^Pf1T5a-3*?2QDXU|DmbZA$Xs*0^@g+&Rti+?tg*q{P4fZHs+2yQ@f9I zRiGtj{s7Iu3?Y)(K|88(dIo8+9P~kYymRvHsB5_GDCQmNQ;h!@Hku2u5(VTC47o}r zgGn0OkI-z`GkB-5A2&j;E;#~~ZJa9K9v1!M6m$dj34a_RNVhYJAwKNXUBnxQFsgDsZmY^NPvRA@>*;263OrSbqFv3_WCd0D+CLb6JU zFf2G=EWfl-0<>Y0Q?u|i-UDh_yYvT6iN#OXrzj9DjB)H`9rcP|r3CRPl0&XMiR?_? z?gTBF;@_Y~VG~Uyj8u)yrG?9P9CQ#<>4LYBtc(|c&U3s1|J~kP3SvG=u)vERvzxtL z|I27Vw)xATH>LL2RL=JJql>oWLLC)&Ub$5gKwrak&{;ZzbIkv#+LBsaM-nyR|2!SSH!0~3h};vY)tJo%!!4wMjb`U# zKH_{RlIJvs7K=SRZZ-EIxh62oAJ+^y#Q$;N6p*&|0FpSU%5Z?KOee)>vhw* z%_j%~%B`P40vQvzFG?r@Z2G8sC}K5NvvUeEKb6UFX>aW~0fk>4XAvFuFkP&B2`Jf4 zFHP!pxAEoq8VyAk%KS6fOOkpdgiz9p=o@m%!&wc5g+#~=J!A!} zTxj~>9zO2`nu!95-_U}7*Xb7oMlk)0zPR@}BNzU>mzs9QFx*@X5e0_&+Tc<2*u@LE zScaAR?W3;EWDw}#2M~K#wVv}*Wo8EQ#3A_@I|-~iDq6=#NR~8~(`Z2egzNaxEcZPT zzI@HLP!o(NHlX|DngH5p4IHd_OmWm+8+Ef zMUF&3cWaM~#F)NJ3|5K)C9U4mtYiA%gR!p5fm#u^rcL0mHL#MQ+^^If&^ zg;QZt;1rkW#e_IoZ0*OWy-_-jRwgGa6Dj|Z3KwggTbU}pxXs~-4~2gcKJS5282g5c zhIctiP!zrKS!hJFrgUy)HmLEwQ{oda6+lKRcK##&1!SfKg)<;t^i0au@qpYU&9Qpm;6dO!Gu2MxY?0H+TU2y|2a$w!_!^F)BOf-ea&)r{#a4O z{Qy8{76L^UV4p|yR&o3wGcEQ+K7ql?MVwi5~#u0&JMz-IsYS!h2%FloO81!v{yXG}C zn3TdJhtJ-4gtUxB7h>UbHcO`ejsoR=uyjXX3_AWyFYc^A&Su3o}C*N+#Cxj_;^2$+eiAue6GQz}MoS%ur1F;p#2xR43cxJxlb@-x}N zYuALwipBhQgLl@qS_02>1F0^?gq*pCu+nI>JYSEhO&U2x;xAu(zK9C&D#XrL65bor z+e_9okIMb(dPx*9Kqq_xVQa6S!S&#C%A^kGsBe8P>PA|HOSJgQP(gbnS_UF zHcz?+>XyMZuNUqBl|G$BHPBa{k;Tbsa>JDD$pSLp+WJAm7ZutckgzSY3u)i&PcT1X z-kPx@<(GaP&M8?!O_!wVrMkhrlDz&ZSQjt^rK z{Tt$xR=7aFQ)K>`$VKXrY+p;KTOI|xEE+1zwE0;^(Q|bP{^})hWj)oB|J{jLuI>6Ry4Hzni7 zLjvnOf58st@LOc9-Ox8|N>eUPjf!1_29w+tnY@>79}#0;fpnMNXk+g};<0^sl^KC^ z3BjS?Oy!1f28pzaj7I#0hv-A_A9gl+&5t(AWaonsS3`5aRd8`FMtvik7?ee?((2c^5l^5t2XHb^4D(Zh5ajey2 zv*Hdkn+L{mB-vR>@^cy4xVg6nizH@zsQ8DlG!QiU1jIk%Z?67`S2aR&@dHbkO5NY8 zdJ!MJHFVgKiRNnh-m6C`&IJ?WBKxdGv{p;|08#nyz>{~ss$G1F3KYi$=lz#t98F3X zTt_$OiNGPzlwFK#V;disXpTrt3;8300 zW_6jBi8kHdO$OJz(iv(^o&pJ0x8v1G#3~@=ahGL(nP)?R`7P8KF9qZaw61(y@*lP& ztWgL{2(%ieSVA;R=w-Q^uRk~f{~Q`$Pk*(WEC7RW5a}jAYz=qBg5t_` zt-&tyP`IB<_};G6_%Q1)>d5a9yPuzKt2^ZLV8~N>2=e_-v=@H9Y@Y+fTrq;49l5U< z@LM3Emp@-dNqiE_GYK_uj-}3YU>vgn2_D4uxe*e?emYQoPuB$CO`KwLzZp?35Uo7C zgWn#{xmR4IBe(hnm2fTu~zc%B+h zj`H|^ckb~T*jwIPjTTV_$m3rIp$u&ew%TO{{D0$>?a z4xZlvVOn3+QdTcyJG(eVO;Q-5Thx_~1tn|Vm*|l#TDR#i3ebB< zQlK(R6jfx#>ruW?!L?zf)ls$ZyM=nu z433VvgvkSWc`PxCWM7PkfZpzaACRhbu|W}?<+6SE1W%ABNN@;_Q^ZUfUt^S|@Is=o z7vlF3QeaHKQsp=|x@t5~A`+K;FYCwg2$I#+XOMrLNzOVt*gi`$cGilLt2oA^>e0gr zv}54-{*M75jKxP6SO+fwjA_bx#C7llmaM?r_0`+d1&NkBWhRHK8^KZkDBL|LvE;*OxU8EV z)PEQ!bRf-(_fQ35Y+0sI}akX4cLwVDd|q zky9A2XgG0rf=a)(7^|B?uRxw!sJd*JWvYF(JZPm~aC!h~C#dh^r#a>9agdTWV>QYO zX*tN32GcfkInG$8|DEE}lQ7i@iGYevaKWvCfBMY&70QVUx?*fCRoU1bWd&oadbn7q`?I_f|3+PHFkkQnQ8b^ zGpG{}R$24ZFn_xG@+ax9))MaDHn1O?k?orzmCeQPeUJs{Jp8-v+7j&|a2=#zt!PY_ z#uuB~+si}c@f9G7t_o*}h6ouNOF&|=z+1G#z*)}Qa7!OUy%0^l-$FOoww^+j)HY=< zyrLTeM5RpJ@Zo49zebU<==E6A!56xfO!m|toK;adj5Scp(J#3DAgTGbTd|&P`$sZ3 zMdR@bb0P z4h3hWF)oo2bFCWK?qctMSEsKDDth76aI^SjfiB7#_K!Y56^-mD%qZu;C?UX=BdOZV z*51*G457i@*AK0w`K@}xy0WO7mL9ePF8=Sqzvkb;Ki}{C4F##={^IIm2WN71=DKI- zA3*33ZZQgs9?33@jD*7&GWCjL@C(Mv)mH?}n@J89yp6tqDPkk>K4`W2{A~941r045 zYpu)0s~;xAWT!8UZh)WYL2^;wk1Rzb~7r#9Q>P1;xoaM zH$PX&n|j+F`aL5t^E!nYfmvH{{|a4{9`bJViE}Td!K@>6RzXSoiU{P8f;gD1MxZOa zZBDcmSfd#KYIGhif4Um|_#L-7xl{jEmD}|{;WzSs!tbJ~7R852>$wwpW78URk--@| z+dsU7xO%`ge<%u?Pd0k^&`XA1a{f+?7&fpdxkKi;iKiahcf4-289<2jgKt1_`OS#m z^8N5G^bXJaiKmjnLPIO0kf&B*RG^oT1+Qm6n_KV*)QFBS2PF{CB5XLo7_E3dj-%rJ z3+q!AB2YF|<^gK<6YyGw)8cb1z!8#1pd-%xT1z*RG!#dUV;@3};dpNvLEFI;r4V8% zdfnG7+clLe+6P-~oG-87IfZZ{EV`#>d2EKpun@tY8lF3Mb;mKiATrUSCHkpSm=se` z(u4YCOpVHa)=7$zhz@y9q+h~$v+LIV6_+-dM9X>U@^f9kNRTaqL`xsCmnJt^KoJOE zb1>r;w)4!~*f?SGrX}S2ktTCFR>`!h#NvOEbju5pqc)*1#pYOQOluOe)NgbgcAyO! zN_RCwC@pEILD^d;ILd6UDzku^VV(-W=m6p%z_}Lv-`O8W6LMzrlB#1z()zj5zfuec zl!yI=Z<;)N>6G^9Zgv$9}Zaa1Z?I)7H#eR<&t9@|0Fwfi4Ur-98Fm!ZNJxcYt*h`l9 zf3Dzl2|oKoNcd?Cp%yGd7cV@7o;LBAQ7N>E6EH~lfZgLsV}Zqp0=U_ zr3BpOuqbfVB!3*U&n>%s?^bP}r&ukO<{V*LR4{Ga>j@Q@6{ighI&uz%Z{J7D< zU(`(P6jb=kEO2M)EB0At{Q@T=K|D9yw;o-AS4Zz02=BXbpuq~&pZ!w{X1d!lsEkue zMuHtI29!h_j$~Klfk=0>5?Sy)m4@2{U8|J_Tnd)bs?>^BWQ5#n!nz5;(b<%R<-@Ts z`DcqEcder`f9EjQqK0`dX9>&ib?~{G<;YkF>%-Ct8!e0C5q}>$uz!t2f!2~>+~IU5 z{w{g5>Any`GaLA~pIe_B-k)P#$1q&C>{FZ`VGmA^COur`j-XcgO8qK3ex3JK{$;~l zXDu<|-(xDKYbHu*_>jwYFe<)#;;Xa7yI>EE#hU(E&tNL36sIUuUN66bbu)|z=*mGl zy3P89ML14vg*EktgN=;w?o`t^b55_w_!{ff>~A|Lnen?3 z@-+`II$7U4yG7ge_Sw5Vo==eEhNLukq~mTlDE`ln4$x1Gw2pw-$$L}?aZierm9D30 z*C0@RaeXzf_!h?QIG5eZ3X>5op90R&RXZbOu9_RY;gch!5LIf6El0b*dfa~oaX5++ z-qsTP>*|{imAF@BK%)}>0Sd3}w$2M8>W_jhr-yyA)eUu^S)hRiAGH8RNl82D#uDf9 zY~g4)sOHxUmN4kR_d!(JdC^&EqA4!md*LkU5qf>0-i|Oc^+RB z(}y;BB5kTrQH23wjmBH#J?=6-(0XstYy8GH3&Op*A|+OM#YB3g_wRRpuOkGUP1cEs zJ4N>*DyoU0S50mjDaN-5bwosUvlXziq7R42V#befP;cQgqF&Wh(iCLqDZxsow3ssWZDVq~!lIabY3Cl-bjotXjC2n-`AhXfG zERp9*>m)w6I}zR_-C*}BuCzNH^?UmF>H~RPY2%*j*X^C2zX;})>4%fa_KUjoAX^=t zXU+z~>JOHsRLC*nye=G-ml-G~s#ai$?84RSUv<{UK2!qN6!$Cdn2(2260b8}FT+2>SbK|X|=9cdX5DdE*uV0Qi2dHs2Bg4_mnWt|4=%P;j4oyE_+(;E(Yl8 zI+sCQUsSmgG#A2y8NbbL9l|k*d~pl0OR*vX2dErmeucyW*oUAsC--2(9;pDKzGZrt z$plW_YOahsWpQI|$cNEFyom-JcO(=QmFa1(9y=x`L7mKk>!^DH8DFiLP)(CE(ZRRF zcK2EcQ65*~a75O1SE0{ej_DoufNNx@6iFSa`+f(JB7+4PJx|7Qcbl1>tQh*#lsA~K z=X~D+>oYXC#URXJ>kDjaM7ur?=ctQ^NIT!8FP}?p_e5Zb^+ZYZ!^scBGDlrR>MG=B z!y=^wU**hcPBp0Asd_h%&wtA;<&T&>+c>@%d{R%ae(xKP4{>48mVO8nxm|z`XvDxs zwP&C6tZ^(MrYu2hu;NKd`zYW1NJw4`cn&uG%K$|E#{l#Xvb7eq_B>TMVnCzV(saZ~Vi@vN`x|BX^o1azXqNB^w(`s>vhe z2~DN|A<3H}2Vh9IUe4Plvr?k$nb#zuS9{e=m7>_zM8zLn+7+{ za){2dmhm~c=+Jf&EZ}0Mk#z>EQwO51C^YYv2krQHA#)4&MG3YuokavAF_Mvns7}@9 zx9<1KE(=JechWy04`tkr?Wz@j+bHt?=CRn%Kfpp|-}>|ohX3n^i;d!S)Ae@ded|j7 zoY3X`w{xtatgf$TWZ>YG^+D4i#c~67MHi@5XXJZPpcqkJ^!c$DPU?E@k^($~nc}i2~!(5Jl!gL!Z0gl*e^dCmUefY4b~MEK`|C9w#li zYbYX zmEl9eO-|*cEt1kRwnvNVNKQW_E~4rQn)nOlP4M5BgJ7O-;Kj2U05~2J?M<-;{9)U02t_RosH)QyGS7ks|jmvtzy^N%Qm65JF$*DBaP%8 zNVg$feU7_EO30sSBZ3Ubb!%bOR{Q0|4SF%)1jIo0-E`>%*gG&{`~H~%&MS4>eR31{ z7~APx^)D{+fJBD=xf7uD#gM?T7ltZVGAJ46XdE1n%e;@%%K4opr~Y0SG_9U*I|3Pp zHYi!KX?8%$#F4$KMs_&Mm95w)B^fNXb!^KHkAP^Vt5#03>Q44+~ReY z2(Q;Us|4Wi%5wadyG^+MAo=+w{5d4uaYKQi?aqk3x?0e&!I=*`?9Pki3c-ivD>J0N zyXo*!WuGvvi_FWD)!#4cMqm;f@R;hUWf>TUI!ohJN0Tucq>1mVx+Hut0Cy9p$p#lm zuP03DnpCU&Y+!y|&LD z<+noW&tC0SF3+^d?5)Cy3Q5I!SbppZNRwcQLmRTIe0G+ z!AFf7OXyn4To1VwpT*Jq1$d68p0c^^&!U&41X@ph_!Jr{bNA1D!e{7!a22s-uIpFc z9eKSzE6-(Rf$d8DG209;n(RO8kktU0He~{X*>Xe&9;WhfegZ@3yYkhAATOh}7KiiO z6t8r&;pehI#<7(H^qzW(G@el!1$L`M@h{MtdH6`;=^V(E@G~Sphc0S&q@EvLA05n@ zD=RttFvPefRu{P>g0CW?pIkhUpvL8($pPz8p>{rIXi`i1P(jS(RE4*s83iHMerxMpmwv;ZALsO%~(G z&@OTWNdPkIv*j#_TaNvfh*Sr_e!|Sz(-irluqf0+G3etdm7tM#JU$41n}N9lDTJl` zG7lE;5NHo!=YSNg`+ad$igBR~VG)gMZy71=q0jGket99hQPhM9&VxVdIX5)68X~8I z6|eWl{Z)&rH+YA`pUA7WBZ^J8$D7NF310yr%<&Y3;gkEogAlcX`jxvX-|szOV~+S` z0*?oTa(-0Y!8^6ClB$XxLiSoh_~rdhmX=5kgYZ!n3<0^u$JOJ_4+~J+=*5xR&Up6U zk691kH=MIhQXa(qQ|te;f5+t@q&8CdeXM!qxz+Zc>KL2xuVi)e#hXw;a_4T$W&Mg-w>r3Sb)$FKmi-$2)a3CRLP!0hA>&R9K!`2S<-8^h}G z|G&4@(!#Q9)zZmYwr$(CZ7(g`wq47%&2zF{tNv&E{;vDFADsv1+53FXn=i;U>W~FC z+=p8@W#w~!`xcD-)KmawN5DTuHbp6>N*o@VdR_`!7!t1uEh`$SSw1dtY&SZlzYR>Q zTxSQO$kqHhA;yVNiO-}NK)+|Y4ONYO92(dE=Dd3RHAVqZ)$oh5DV2uxi5X?0&<`lX zFk?7MMCzC+(AKC}a+1MJ%#{oGE1U4Aq74Byy$`=Y2-kPRUyYgr>wU062xh=tp6fD& z;XtRwNEmAZ4k6p;-;Z70_xBH8P}(Ms#l`0@L)BgzD}-xo4Z;x6j*4}pB6E_&?o-TK zctp{^OhJ-F%a^}HZu=yDC)OrCOCnWXS(YS)hOYDBF)uh+WLEDqK??Jmtf^dCn4i^0 zMb7)i1+2cNjC<=mXS`RAf9PXM-+rlqfaEc*vqg~C|9e{dkNoW=M?`rGJUyzv1zr@4 zog3JtFqu5gX&AV;LU^$@Le{eRk6b!W^&yrDN@6FUn?$BSQ-h)7 z3s=gMvKzHRy5?7PB?Hify1Gjl99hIQ;- zVaL!(fn5MSh`X?LxR|JW&*RyR%keMHcG%)W)uWG}>a*@|1ypcpNu&duTkUd^Xcr2r z7|ZK2KLsY+TU*uL&^T*@W0e>(=CcL1xsM+EGA_j><$JE>d&Y9xmdw>j_z8SS58v%S zYo7VyvuD$Fu`_qua#97(5u{Oj4sGfg0Aq`yK&aURlyitsG&F21O;Z}qlxXzrjwfyo zKQQMl!69pUTL`kn?)x~Qt7RZp1&R4d&P&3A1*bBc@hk!<3LghB5M4t3jtqEQ?MTEO zWFR0iE3@xH$1dr(B1l(99FvP%xjR8n_5nyvVuv^euG@(dmhu6y1aU~@F_7&t7Ex-7Xzts>O_3GUTkd6^1=dFWWQ;Q-fLxi_ytS;WpW%4K z4qlyf4QvJLyd~|Z5jJX`5b~Y&l~PVt&ecDF3akrOp_jsBM@NMc>K}%Y?gSdAd>%*Q zzHX)SeOC0zqSgPC?udl{-dx@GjvJ%nobto0Kpw9$b*K{U2FC}tsEdc#;F(36I*78b z6e^Jb`B{1@2uo3I8T1d{KF_m=r<~e z?_4YchmH`&kuY*Gq-?!~9!Cb$J)s7a5{2wv9|1(0g3>EX%1e`%pLZq_k10s?%ODV? zU37=0lxoT2)TERN@_eNaF#@ATv209Mkug zg0hq`Cxh!I;)qXhnmP}Nr*zY3>dD;gxThJYVpCiYkM3it`$f`H$I0Fg*Mnf1*Vd1 z*BNNPxJ+TF>b_Wt?7~D@Tif0l9o0ip)t=M|@L|Jd^T;+x9AO*j<{1i>rma>H<*?jG z^xKmfEn`>y-0>Rm((kDlKKlZ|7=I7|2}^)i%HW;yKib6=|IjUzSB|_0hs$aB?MwDs zLRH$yVN3s2@6>Z7;dKbF&ssJ?=NkuDZH?yPJ}k5XcaO1}94%`7*4G>vA`34!FN>%Q zU0R4{KB-FblyeHr?LZJqv=ABTVdfzR$Em8TZkg($3B90 z`rCB0&bkDaypnt!e1tA_tt1obP0X~veJ?dp?}SpWMkubFwpT(;A=WFg+A4}bNEDW{ zYgkHDMX)~;&kvwO4Qt~~Y7!jbT)S|7Btz+9a#t)cX!xFME2wgolMps%s=RNv0R7YZ z!)UpdvG~m}PY6W16!aIygeqTn^R1LE_o;ylpJ%pd`kxKU>jj}Q)^i9;Utb5wHyy-h zaCGm69=vXCJ5SbetGYen&DdwzLZsU74L4ij&bY?BhmBz*kA|%BGd8KVPtAJ_WQA!7 z^}WMjOt8`o7CB!6da2uOJW`p^{a>q%;D?0@2{?#jx5LW#wLFP40L=2{k_0{B{KJf5uIh_ys+W%FF zJWLt7=sfQ3I%DDi?se~;1|rQ(K7oPoHYm@}5Toe7oXE?CMhABv4e?Y^onQ+^j3nOt zr*j>qpqY$mBdLnzyopcPnD7AlKM3iHKgeV|8#>F0hVh7AR>bhlfk?R{FxaiDs@fYh zHR(Bv5nXo_TN9c-Dr@pnsJ8vmwsLW%A`~Q5S)7FwGLEY*=q>kYezlE8@zb=>Ew`|G zscE8{p!}6PN|PK3NB3eVqcdS-cwTJ8ImwW_-BdzO`2_(yF*}vS;0wCY3ejm{B@Uh5$mMS@g%cnK zm9F6F1)h9-OL34eXgd3>Fv$ZMU$l(&%oVkB{TJ*KD)>)Y0ugGZmO#{FBYpE)R%YF2 zjen`+uP3q3o9~}?Rj(Dy&fE56u$)Kh-|omT5K5*W?&enY^D{lEQb`=qly1qrQkvlQ zRRb&CL$rRSg?Xq}Pk8B(Yj(QiM#%}6N^=_-eXD(EDiOtxRp5lON~v_A2M(F_(>|4> z&AKg$wWY=lvTHPrzMcN3lr*(X*^xIKLDLlZoz|-rM)tUvl-W4Ie2o`v;N_mHUvz5#df{xg}V@seRi#TaJV9w}QEA{!*Nb5~q#5-o3oee_)-oO0e zn%LtXf1GsZ+xUi?>(QmxMP`Nb4t=L}38uC1n@-Xmovv_ufDj_7ACy>8Wd)K%nhvt7h$>o-t*W0=#viOgm3Gnyn9HxuUnh{Bx(=Ukp3#N@jN}8 z1KT%!>9ifs78+V><$If#nXF4t>}14*U77KIr=^hGs7eWq18;FwhZ@U1iBpPZJ)(Y` z;m>f*$gdeV@`+z2`P56r8I|QcZ^tMp;vSgGkf@2bRCAS~CTOw;& z^Q-eJT)?_haf}+mADt+9KuB59-(te!E75mNsWO_4K#9NWcBjLRxw~x3H0pL5+Pt*7o9t8DpcJY3^pxUHZ6&R)vZ|VPs7q`#B z3h_77TU}kwss2+(_vgs>y{`Kv_#de?`tAx__x6tNt=so@Q5C=K_$xlUL&_j&1}q!O z4z@o^jXYV#FuM&rA{UH1+DCi2I2t}GbmQQ{-%d!R3JQ9F>|Ekj7<*E6Fq}1wNXBcA zoDkWJ_Fx=C0IgJ3hm9Hh>tOBOH9m% z_LQ!Ia;$DQsdR_!Jf#!-P$QP;Z@$&5*BfkOtFhhcLo^R6ER@K<-;6`T zd~_+AldP+4rH$sfKNT}D$lzs@SUYBc*OUJVKC#K6Ev#?;%DTzW%>E-e)&6|$BLD{e z1B0vILCLR=vhTgsK1b0o+KzWKM}EonQpX>NNv7z@k$!RTYI%w}m&7@1D9c01Xn=tz zso30_MDG#vC8ZIO=(_MSO$hJs9fHH(ekJkmX?|w)Zqa}PEvr`*@KC4{ z@wTw4%mQfT5$wQvX>OoyZYtvka@T-l1)@Dj0Sm~1al~=Kdfg>1w zzl9*?&d}0IF+>tPa^`s47C?u<-22#Q`%J9`ml*ok&8l11?Bg$ z6h~8?u%d+dE67+MboIgb&{?$9;%WTSmBTie3>x|?)cZfDJ7|O=b6tSR>blx=ve(tY z+W{fh8;!2x^a8j8TPFNhlb#8)I*wl-HeK(JEvvKemVul5VMg1qMWo|Yo*F5W0M3@3 z1e3%#=f_XYG@OQbtxl9k-|j#HRUjqJ#yq%)^5NFIFn0J(tMB2qA7Isu9I(!TO3s_? z6|#!d;KeZLy`cXRlqZN>TL8f}k%%(h+`!?Fsca=px505KockSQARROwr+HYQ+1pdz ze@w4hH5Xf!VG*pY-9-etW@DBTX`gFh__Ig?BA%TBE~~CsqKYKqV3l zj~yfDP8Jb2&(E4aMeiIe`?#Z7jjUX9UB&}&V9KnfXKH{i&ZA1+_6{Ju*sc9kNp$Mx z(SIe3>==B&ER-*)lscVBh`Uddm^m>{*EFaSt_KZ+IO9~3iej&>!b%DHHjj?J`tQ7w z^H1ka>l5F?dMNL~V)36pH&s5m|1^5D+-5M}qmsMMrET4TxnLsbP9@Fi+FE)>46=ZR zq#IHhN(QR%4D>`}yD(5MsAr~Qo0w7z&W z2jg&d-Q);0Kx!kNo{|sqDiH7XizB|}=QIS|xu2FVP=G!K=ZfaU-mnomVh||s+zY>4 zVYxVy(DzxY=3P05d3;}xn`c*U&U{%zA&}}5M^mMkl_9M;z13`Ucpz6t)cTudl0l61 zSAbC_&X8T^NL$J!X8vN0gxbhIQk~gIx@lFy6n12+trzW6CKCnx_G92$f z8l%J$o7Wbrh-=IlNr*SY)+wM?BCGeO1P$YvvN+nw+@CRo+F6jpO?Nv6`O z(r+cG+OjvKQYp_pn(;lPz*uDp82~zMQT(Omi)~CTL=(k$)(yD73~f9HW3}xE^jaSO zuA(_;5d{SHDEcG)H=nZF&v_1?!PeVaY(96zI&YG?_XF84sC^DGGTH2+xP5ZNwGH@9 z96v}Bz1?CHMkgf~YlGs#uY$3^o2paf^fH&PuFQEl)yv%Ar`6qguLCWjhwDOS&kp$+8 z1>Q>!)_>g3SJ&@Y;2TtWUyI=2f!Grk{3YV-PRWodscu+iV6#EP z?1vq~oAmBmLS4^)16qq+M$7Au=UZO4%gc?2E#J4pnLg%AzA>Phz?4}ABHee?2#W=C z75zAL0S~%Rrrk|5Y-O`0rv-{#YWBWkR!-y45ZUlArH;lEeCtF=PstU%C5YxFzF-u!`yx5R70@Wi5%ka9syd0;K43yljgj>ZdSr6%g+xgQ?WkJB|& zY-iurqt6N4;pi^~|0HA?|5GO$@r$nm9nO&47EO63-P$dJH-CiLPY3VM+1_WkTh}*S z@N=b=o_qT(`;Y@GO*ZTFYO_%=eP40YhmzZkTKoY*Ni#F^iYoZkLId&ffcRLmvVae% zqa!Kz-y*+RS*jpl1&c1;Up>GxVD1+{W5`LvBgb)LCu-q>zB%hm7JMbb2wPhQBFE{m z$g7|heVTgqT&~hc9H@#M92K!T&X)D0`JSi<_58=1P{<{!x0n=WAQYx$9aFIX~tZ%fhCw zc>rT=JLZb)_@ny-(Si@R;}+I@MR-u+936f_EH6KHB|}CTPpjs=ZNpR;nupKl%*7eD z9s2In#a&Iy3?96&kFh4cY`vblr;m1NhZiA%{53??xcRWjr?VxR%#l;)8(&7$4Pj2WehmUs z?oClh4}aeL!l$r5clmnW!htfmuUCL3u`Hdh`< zLDu0f_i>*%l?}|>l&B!>+5hBni>xNexN55bepNUl<_V5$u)IsW8iCgWqW=~+S_`+pYQ_-oBfOR?XRWGwjJ56yK~gYi9V-&uo7KY42gT`=X%bbn1mb! z=ZXEhB~z&FqZlCye1_wg(UI!DW;x{gUl9GMteI+tZPogDsbQ2XMrBIkKTfIac3WOW zwOZmlRh;=BbH`%|b;6Sqx$j_0;jOC|)E6jQor5$rpAKR0?C)>Q%Y1qnzHbUgqextO zYA%|cOx&qiF>|6YU@zxt=qFrNzgZF`X(ib|p7`|z=6Pw9#2Q!g z=3AFav#^oE1rS2PfKdz+j&KFP?2m$gHgQW?pnMO8c`_vFiC6iMa#O4Ck5?PorN{`t zm>QNIJAo)flOf*|e~ZPZIjYr#Pos!5FgJ z4YDgHPr`)&93exf|KxSd{Zm8G${iPG`fdlimcV|GhKT>>_=Bk8?6;=o?gQ?QT7FSP zYs!@*PXd$3wh*h3~PlN7*-eIR3Ra33k}j9sDy+v{m6LsHJfzE0ISbcd%J6mf$x`@81-AZgA)fI`|V%N-GV27qz=Q5EP_j50x6b1|FBEAy^J{HW9`gQ$@NS0 znF*EWh?gn-$~45{+f#TOSu!rMGzRm7#+l1Yg1WoH*TJYc=;xj$o?mvYWl#u}6)JHd zPcnKC^d*>A=nhfG?&wFPcY&m}!Q=)k>BBLI`!CkKt#^Z`uP`hyMXpAgrHipg-B9m3 zYa^s^rr(%?p&XGO?>wRtEE5w)7&8eBlAtGx@1P8^VfpQifeaQ_CfBv(A}1ZSFPRqE zz&>1*tB^>|u0|H3neDEz!~AWqkD!C4OMthl(MRIswsQt{E|>cS<#P5 zwAjDq_xR2Es|+vIi>Dl;45;ZLKlUrut>=Enk>OKtt{m`>sL@K;_b(%-$ht(SCqLiGAo>?e*9#9tpQ^wo8A-E z2t90EQ;(0Dq|S2okPjskTEr$mTt{$Xu;^WxEf0^uh!|0((`IH~vR}Wat#wnFaP+X< zPlF*+e~_WJpw0aDxAQOgN1aQiNJ$0LoWL(L=BWhfeR#_U=%OU-%44cL>?Ivu|I8*4gjMF$&&iOagg=f*nk zR_DyHyJ4KfEx1@W#&E|9uh$!iL065I4YiTS51V&g0-_;E3*Cyi8(%9Om_8SH2yoQ7 z604DpE+IQ&`Ba8drl66^W&-KWdW*g>0GIkaq(0JU9#9#nmW2h~f&84D(Qj}xVrI-P zguatcc>EeM8YkEI>UCGv$Z67kt(Cc1p%(uo)&w0EhV=Lm+46#V4mAzYXZSTCoL%7# zKeg^}pwYM!z$@>)UqJ=U(cr1u)_bUZ)9s&zy99Wuh#~$5r?`jarKEeFmwg0pNdhKq zvdNM21_q%J`U1kBaRu0FxZ%G=3|M`kvr@Q6l8fvq$!6(ZD9~0)k}nST9p{AUYcq^gWR)@{Xx>lWkbDvlYbFCW;-!nQ4MvDTi&QMP(K1 zggpF>yAb5Xu_*+JeYtflf9o=mEK}u|N>SH#mJlY3$ZvsOtsXwafr2YaN*b}Okka*@ z74p?9trC{R-+Fgz6s5ncj@?Pdh_Po33Vod6;AOb^Q%>x$WbH=QAyJt3V_@IeOw@ZQ zS2j6c=@mg0GS&g4-jYTJhX+0JLj@yODS&JS=N253wb(oP;@%Co`q>^+kHwzMy?*d@L}xLzKjwDd6$tV+ej$G_w+Bv z;m+BS3KTVh%XQd5eWBh2T2qVFZ*2h)te$Mc77nqkWH857WyWP2y+jAc^6+1t z*aRT^YEMGFr5i7fJ7@W3MtrDi#7FPR;DH(g!G^P|V<2|!4-(=iC^B#i0EweSgWNvUVWbvqP9bI)q!7_A!3E-DTXBT zXESBqK20CiG}yoOSne8eWW(Fi3UCQT0csv*}j% z-GUO)5^r5W9De~p0o%pwNM^yPx>1s@4UMj;x(r6MD*lbqH$2Ywu7ZV&ussNB6DFt? zT!6KkFd_oW@@K%k3VH0~Qbn3!=S-C#pGKVDuC(uJUOoC~OGsWl2Hx|!K8e@dLSx%P zd4~Wx6&WnFdAYHQ^Qdv1uyqDTLQR{(6r(Ng_vj83jSygV^gLr&Jo%Hm z#+B^L2Se{7G9U<4_G{^mi2F%Vx}*__cf@cpd4(9Rb9LsfZRew7`{c#b2Cv%&D|d%? z^pC$DZLKWqePeOoZ3&oX3ry@06<379m|FMmvB#$|cs@8MWmsc|lZmvgn^(fS{A915uF z>`)PPd+~i{T@D8T2CsS?fs~ZiZu+NKjZrC*>*q(!Tt+A_Iv!Y z3Cp<{uqLsg`CI)Ns~Ojhj)T}aW*busChQ=QaPD@`$;W)RaX3LGs|f6BWZlsPQpq94 z6?YQ5ffCud_lVi)adlBysCDdSn8rb^SU`7&$`qH9@rO+6HpYSstLz*Lh6e>Q;I-dO zX`xCWJm8x4j81h!uu*H`{BKY2RsP>?iWWl3QyigR>UM?hnaTHr{Ox4y?d-n_6&N%1 zo@VhVv)kMEXpc;t{qD4&BeWkVn2o)q#qynd6rl(ChA%=;IDmpVTV#3D(Y*PJlnjxG{k zO0`hCMZ4Y4=AT7|5=~i&@-%umhJd%BhKoHxhhA7zW0fqZ=obm7xsj zw9AlEE-Ug-7M!~aJBXDvv^nFsi?Ujfsu}iNY}lM6ak)DCSyoQ3hh?!yX(&=7IzOMJ zIm(jyZ%YYcc2@p;`|@@%uSm)yJ4&Hm<^78gGoVy}y^LEc!6f2qdN2`?y^-ll`*K4o z3vG^Aw_n>`kPAU zb)Rwa7c43IAHYoOS+7W64`(PY%d0Q`(3SU)iYlv3^oHrjyH=<1-0M3DzMMpM%(-N2g??rjIg4m8 zF6GfzFH3}wS0^GLEA5*Gg>BC;N`zW?&m@J^)U7hzbc}eW^^M|xR6ix7Jl7SWRQh3R zB_LnF`-OI;Z80cm=fi*w6J*x%kEbpbF!!O;8{qio4@bWiQ45wRA76Ab%WRxOky55D z(GlpmxWe}`(?FJH@d6wB#;v&^qteoH5FDMLO7W`v*tNwa?6!q!)^yT+4ya+g=S;?qPmmB;{3U1=(IH3J&E{JihEW1_^A(% z;=r%3-YB{>D#>_4qEcS3`V%%*1#6}KcOgp-zeeJQ(cfqU%k6c_(gKS+mnt_0C%C^> zO5_s7@JpruM2T|;5$w`IM^ZX}FK7R`;kHWUNvCSx4sQVVyn27{-?Sm@vH#e0mA7{A$H6Zlpw_IHJdI2Rim|Jq1E zzD+-4&|I|&BVXvm18G%q`efdC2S9;5CIHP>;|I=RttIzrgzKS9p?gKD^o+H+=gNL4 z*J{~jHXe;yV#~0pEP#0Xy@q71#^}Zb_y0d~vC58nY_r8aqvT#kbgxqvui5`yjU^%e z#!u%@TWGe^fi_`_t?4*i+r+-D3CQ3%dxo-5jnyPXj$L-zm>gmKtnR3TjQYjgd>khh zwI!~N$N2ao`*X)lu+&fe=e%$J@STnv-0@Z7RkCHdYkStKkh-&}A1Wl!ijDYl-e9P{ z87#;gqB)XUkHJw=d_q$egIoRKcAX>arO_*5ElazlA#JMcr}oqNooTGM^sI@iLhhOH zmVe=WQU=*y{^d!&#H8Xh145(xunn)>aGoEJ9i63>Nmgne5>p)i8ZSmL=kWV*^LS^k z0mmfyogRI)#InbmYFVoIYJ1kF`cZM;EciWm^pqUsbW2iIZbljlU>-?rpll+rqlD=u z0%5?eamr99N$x4kxnWj~7=~rh8<)YmTxPepS$&CZ1>)gy47NUT{LKg5p8SrRS~WH$ z(8IOyFStDIKia!-us)WU*x~a@RpCJM)=o$l2y{wmLnG zN7fI~TR8#}^*1GsQMve8Xh+T@RAu5OoI|cg&7rxko*wV=CRSHlK?(V8!K(Yv;&39J2L6Up|EsFR{ASl1ck9k1dE4CXCdR z`DdW_{?J5MFFdJ#sG~6nWABkO;*@Hz31OR?QcSn6^2?*1P<`c{SCS%12$%iDIFA;i zJm#%Yx`=b4QmZqmWTm;hI&m4h`|vP!Huxs(!V=V-v_J-`=$F=dV_?8+o+wj2yQ_oF ziA{gVa~D@ws>O$JhaY+0+RPkMcUg4aedjq)xyveymnr6?T7ePz@lidBc+D@b*N-^Q z@6Zh$`67lNKk1`57FLAnc#tMcZp+H+J-B)qT@5rW8&P(w2}in_%h z#xon)iR0G!w2@jZYcvR3#Qc{Dr5#8XID^Jr!H zGO4Xxi_)eI`!)bt{B?sfk~MuGqBZr^gB{pnnQ4s#;5{u3vZPZ7gi;ec8|b!eT1yv$ zZ;E4>R3@uK&Si$1>nhE?mCdgZRfQji4BGbQdFL!`!{`s)KpQMl_S9)ZEY9WmZJMX- zgXVlKT0FXeh#pr7`@o>$R^X;yMYnyYsMn=t4JU-)&XrBw;t`5Amx%XRl4_a;x{{(c zZXsW13Ug5hYE^RJMo+E{(K!{DGW>Kz{WAzcWx;V=(qB_Yhs;@5;}por#zkjUf+d83 zGYw1fWvmIw*zmXM#P3=nNq@Ii?um=F7j3Va&esmKXp9(Z+mg*Ec3WLh?mk4cPi+o| zDv0M$bR;PdCL;9E<6z_1;X1VV_$aqiU~H?k}v#rmPX!m`Tt@gvHhxfy# z;2vtNSqqAwpkSObAnw{MsuClvvHWlq%!>AF?4sM6msZACcC$Zd7Z{zv)wtcPNxn{S zI9=o=Im|grYTiP$i(p*G%%Lh0ku@uS<00xwQpqY&B1Oz2UaSi zFx7A#-j3l(<6H)8`dQ1RsIPClMU3n|7yDQZ_GnGzN|t{8ieA4pdzJF6=Cn4?aqM3H ztAQ6G@=c;cz*w(Voe2&!8fv%g%)Na!_s3q2UR5f^1838MPp7R84)-vl+d*zq(|hSi zWzA9ADQ{}>g}pJLRmIX1qLI?2O39ja+k>{5lkUvHmmaKZoH(Wb!f_l_7i`Qqg&@WY zEmMF3EbB6`*-R;GtE~^&Jn3>>@4t6mag>Q1s%9AxJXl6AM~;N9&m2fXS-5^7r|YyI z+tD$7Y|V;jbx2Wt`}rA52pn=rO363{4E3Y|+3wR|-&f^(mvq0U+`kXrO7{=b zLxtx1(JKjbK7&&DKw>VI4l^F5aiNXU27QGl|4eJ<`H{^EQ>!kT4}fR7G6&F5IXW3SoC#cXHhd;0s|3!=;S2&!wj1eT_m$b8qHWv@jKjoAr@p zk+hLDR@P-5JWsDevoGvz(!3}(@YCuN!39=zQ_@|S_;?SgNEj-rkre4G0D+J27eLlSOb z@4bX$s0g6(JHq3HJ>Rwx3}jIoK0ekZ0viu77_LW)#|)qQgm$yK*;i@~FSP4C_vzMO zlc<8jgMMjaGlwtVHDLAJ@7+A)nWbTN3DfAN{(oVr`=6z17} zQPRlMnn^6Snb8C^a9(uLy;L`{r+ZErT=Y1_S5 zg><^X>R`l}{WDiMakwsbI0UePTQ8FDEVx)1Wa;V&Q0YvhYRPN2Y6uLxp0M{62vh1v zr8*w@5TP&JZc)|zsTwclZb8UdRjUJ(mxlr?o zacx>f=j?9lQ4zQM%dnFKPP(%G+~$Y<(wc}KWtGgR2T1W?8WHy8)6z*mMkv2yYJv)< zFwo#B?XU|%fl?1Z_;Al|r8DiI{~?O4t3y;J5PEMnaQ|6 z4Lk9$Yj7^`HVd}GHMbKEJZQbV^akO&KWPA7fh0xCD#h?smtLFPb!XF+sIx4q3l8oN z<$8#0A_44rn-){kX`%$h*-gYY-Xo-CAV1N{zuDyoC|3r-@oEX@;`?IDn z>Nfclep+`&`M8&}Cerlj;2PvvZaONiLat`UJBO-~7_E(Cx3}4?=pBId5S6w3`Quz8k4B1Y7m8{$jZ^|i^%>U?|E z=4i(oeN{_u$JgkB9%D`JrTOg}=A1ZhWsTPtu0t+h9Baf-c}Hc(!*ZfPOD|HUZRD5R zqOJkAI;^mV0?$Iwy~^@k$UG49R^>a0`veb7Cvi0jQhIr}}BoNfz{0TG=H{uA&vThENKTCYF1#tG&#Fsy`) z+C@mHgj1I@V_JN6jM}tlLQBXkJ=(w~N8%PHqrbk$`VTxx{U6`4(mT=Vi#S~?Yuhw5&$BJ?sK zM>gddUv-@8VDi{aug6-h_5s^RDOqr7wWUl8Y&4|=sAJH19^LR>md12HoYiko>+O^- zm0f*V!vK2_Olb1fzyJ16v0_%NmMBD_B(6(nEF;xm4MLW$O0wAK#~@S3!s?QiXISzn z%kaG2TEQ4{#9>aD+m1q8<I2X&Ru$2D3^&@$(Q$Mw}XX3=SXaS zhLh5?S<%rJRk2pi>XHFB0f+$a+}>H{325RtDB!{u%=Ou;sr^_%9Jr2^J=2jdhS9)rPlg^lpf z==X;&>R}d8bWA|oK}9EM>sPI`ApL0`M6HLMvXQsr>dE**i(W6ju$lL?x7Rc62G&%{ zgfN74V3tj#`xM8s%#>3z4im)$mqd>iyYw-FC7fj9?99hA8d^0kYFi;9o(zzhY-4X} z7N9#GT8Ct=5@4$h?G0@t*PG!gJC|cINJ#*Yy`A>v$-ehzd-g23e40Pv*lepRK5xr- zj@G?e6Zpw_DEFXESV%iMz+12%$U2t+lUE!-J4J$n9Mv)N8Yo4TG8Sn#4bB4CU&lXw z5h#|l%o>W}ItbNyx_Eyi&(1pg@v%4roCz-Qy8aN_cHdMX*{rqQBn5^d4#ka(42LKf z#SO@jMp7G3R8?n2w2G9sm9Uq1ltNX|BhEW)yH($SN;#-PyP0UoowB%<0H8Z4OKwHeVU zHqeA#9d-TOwj{apxe!(&VyO1D&4pCu0neqn)u8?QqwbeV8c4d0CgN&c_6f1Qia;zRW+98zgcu2 zFDW~kZ)B2p1zcxj63@`?0?)jqHbzvQ+Y&Lh?t_uiO9hYaQ3t5HT~Av(YASbAPeaTL z7chCYICR%8otet$IneNm?OiUfLJ(tKK6s~(%u;VM6D-yk+^hyVfl;ePGyJA zHM(=>S`q_{!2HzBvKC4zmm-O0kKV-6C2rx8nHy_UUnu;Cti9ECt=33A{Z4KOzq`*d z!GJactsmaOYkoJr)CUdpDZaIz${*B{nrEziw;1T|h|VO%$H?oNA53{BJPS={gJ$|yeJulS zn1aQ4_{k0Qkd0+?bg>d>W6WfpV_DNY7l-pxryAQDf54$T4r!soXGB0c{tlQaO|xX) zwO7^hIPZSnj>zm~*K1m^TzH%iH0^fXc%JZ8uD)3DdK`B986zu{#o~)x4zElsnW%!f zjFu>I69Z3K*wgu$Gk-y}H7#GxTH!DQJucZ+u6@HOA8++`UHT!^7I-I2sdP-kbYxSE z_Ge!ntGe9um8q0E6~LG3^3>C#^^)3y|L&1R`B|V+)#Z97Uy1gv*aV_{)FW-ZeuMc? z>Q?ok;BAkC;_?)cK?PpJLnTS!CS_!f2V9B8B5OVvrH(GS~4(xSzoxeq8FV{H_b)OQl zvoX3{+A*(ke+f;?)iN%@o;OyvZ#^6Os1gO9;!{rM)5OdQFB7s ztDl5QbPqD3@utcYM$blTSLsm6g^sFanx9p zqo!l7c?!`gYA%YJhmg>aAP6GK-RZgau66HP_w)Vo?-y%zy?gIx{O#X<_Vd2c^lcSU zL|o~=%%0CZ!JY1^aqFPH`WuU+*1Bo;^OBCgOY?S2*eI*~kN;GxxVx_BdS(zU#`mVC z)5aCnyp#QAv*8>^K?-ROz9S1X<)QyyG8`~vn66)W;i{+=s!`>6)%jByQXg0-q`ziO&a{Ad37iQ)L2 z0?tBD>AQeby|Cpl^Nh8&$n_kzm%%Japn@0N8c#1Kl}?s&acvK6j2ft$ErbqsQupVY z0~S8dfmdOIwR^Pf?YwV@ie}pLuNDTc`=h=Re_|Iu!*lN?tn|r4({CQJ(b|X%xizJp zoa2J#`1zNH@KuvWRY!fy=yEJM=Ss<6eD!56MVF}0zHgTn2}-#-S#Pvpqx^Q-3~^uJ zsix)Ok~j0447%h;l{Q^fGF;V1!S7@Q-C4*im5sG=RBsmXlujldXr8FRrbq*#q+6mR7Z!7 zg2Iin zQbo&G*Q_`Thd=ML^Uqb5cf~e29a`n@O>A08&f#Zx1|c1A_PtP$;+SL@yR?)ScxceR zCPP0$p$U`Dtq&nFT~)MeaDe|vu{NjBl;6tdPxIT`F*NM?^CCLkJ(NU)M}mFikQ>AK zTu3pWHv{?BKaUD@RH|lS{Anc&FdQIywygoN}hLCgpmeUxD|hF?XHd#{O|FWR8J$B0AZ@53j#Tg!dIG$LScK z661ejG+5Yvqw%h4Ebm?CH{9mENGN;5ciQHxXBMe< zbfllGozvn2qhK^zCK(;%+#Uyt0Qbb`1C1vWDjshsPvv3>F9MNIsjS0()KJ6wI;x~O zx_{~rN-%z(AN?k(UL7x-s6C(Y8>VS|D5b{fafb0UzV;#~o(q{Thx~OoUvBDiqQXvy zFhW1U;L)Rm)%XyYs2GQVqG;kPp*PAfb#*>_orF(IBb{CjAy!=ip88C%24xNNSU`rS z$MK&6avM$3O&}_wLP>`HMr-G6HvI0D|zBA zL0B&`l{MiFNboN^Cg~HB{dSYYwry;qAo{T~8`QDA(@=dAb+FaWDreNIe*g){e-L=T zSl`*4;^;-9@i(?Ru4D%c`)5H=1_NO0tQRE|m3=1p7kqaHYr=C-O1QR?q!Sw*6BE<4 z->O7=UaA7@5ET!Qw>D2#;ZidaRNq81SRb9M*v3s;Tfn{hKVMoBfS|-~*G5TtNp*E+ z(sZr5<|%x*y)bx;51FIX*{pkkQn7HbD5KVNyjMF1esJPPwTStDGUjQ1VZ$lCEIqoi zY}pn&I25RBAIuLn(h$6s<>hn#@s4ax`Dr^e7iaK?zAf%0k~#Tn#ssL*NzO zx-s}ZQ}gPU%^^Rb0kKP5BgdD|FD3zQUYxxzSpllHxC&L#h4-PoWz1xS288x3ZW2+p zpT8NDMRl}*4R>}XGOhsR z*`6bK9FaRN|D_T04z{-YL&pUEptY6GDyC)|>w|NJ0RPmobiW=X_M8dm&z1B4sR| zCotuD?Hm-|{A)cOK_RMHdbGIHz75lN$#CT#;`%e`<5tBC>YdHP&DV}4e4kIRhGTEb zvV9RLjE?Emh8dyORA(AAjzt(tCx_7v4KpB>Hjq6^MC!-M%H}03($&-Mt=V(zwLyPY z2$z{+2#6KP*Dl`jc!avMaXU!5+)XDINS2*R8IFnDVxf$QR*zweWc7>~9%Y+Xa%^An z)#k0z4Bh4%Eai67CvSz#ZgEz)mTYxt;Mz*B(Fp2PN%xUeXH{5SIjzcDomLW5BZ z58501u}HQ6hFb5JOU2bI(bqpY__(R8dUtF)y;2E(s?d|AH{!BVeUzQ*)k&67m=}OL z#Qz4-gF-iM-&<&1-Osvie(h4cw$CWr5?E-x?~H6bF3<-F@am{C3VTwCX#IPYv2&|A z1ZDq3AkKI`(KQdKVapTn%m)5Tcz1cI@P4%yb|ONf@oI3MCkJHv2etX!JsFs?w`@(y zEi5Oi00IOAp9@_$O-E!HOKqIr8&@L1_xAtQR~zWtIx)u>m(=@1&}2~)WXizf;IxVA zPMzgU((G2=!oj8no$*6Y0aVqT!ZDUg5sFT!`OIIs8h*ZKg%j$zQphb{2oj}SCBWE< zf+p+#%mTd+|LQs(xQtgS00(15F*|n!fWxQr?Kl=M*7fi{5bqjd3+RgTm~R|qrU&~y zAcpCz8ohv(jYCscdnzKsp0QA0Q!B3CieInHbMs@``CYEIV^}2t4H4-@*^OI zYn*r|TsY*7FFP$1o_r6?oj)RokT!&& zNw;CtEY;V&R{%n$!)JVOmJJ>Ye5tyHDpTo(DvQ7VF3096P>>?*D1Hekm<|sbc?w4! zy`dTpu|NZ%0Mv4h3ge#+&$A{K7Fcj7mlzGO2(SVCnEx!ICq9Ar=Dk=w7s-ftzg z$(1<_F0AgzF0pzV8Z)iQ{!n-DFXD$I;+|3{V?I=a`oo$aeQ%qCH7E;Bhfx7)b-}`5 zoCedH$@;Qvo+k=Yv;eHR&jf%Ex`$etwjKANR``CvOH0_gP$i0bPHAC3UeeXLU+Xg% z^9YRjvmnLJ&Q4g-eSZI?AE6O`@IkR^<|DM7Y*dg5BT;+K+oPP&@* zG*;OpSJBscexzb?HsB7!ZACc^?hAb8*WyBIxR5K|X{=81u`1!`B@w1Wh1`|_U$MwZ zl1+g(2eh~X@O*pvVW&pBJ2m3>5{D!uumx;@QeE~>Oc%OD`tU2c^P@%vsU~Oe5cDW# zfxmrOUJ1n*k}2R$QnGlS{g@-e5hQYQ0W;&h7)OJ_sOA06^dC>7fi#mL)W}>R{>$+x zhQ&Ip9d69IHNo5~gBrv0p~G$bVYv3=sgEj9_<2ISYC2|vYo;~ zk7}HhCkOED0W;QBiq)*Bz)>GVZ%OQ zEltIgF8N&gO76i|t@Dg$4JJ@Hwiw_WxxH1weYQ@j288!ggmig_z&kq*Tg8QFbWPsO=UBn0-6A%33netFY# zaNuAS&`HstlCz@1?t+b8wtf;}c_dFk%%WxbL699YACB9J#*tnl_4W0;&ne9x9ZtFp z*hprxLTeQ87TR$Z0c?0c!!4$h@Kf?zpn4FB94e8&UL?7pD7ykohcZu|tX+bh{^8{q! zOarz6{)GhPxmo`nwMP2NWqZ?8cqse{6G$fA%FzdOHpR`GmH+eM7+i)pawR?*+hZ#G7>5;>&OeEKSo zzWazxk+!)>aZ|^uz>mJlr(ssaoLiqlP>&WE4lk)XSS29Pdkew{O~LL|)(by>5a>AZ zg#+K+&CwGXpQV8!Or>vx&>QLNjv&cx+sgppSc>4$c)~&pJs*ob&&8F5KbI%){>ob4 znfH)FPqwROZ1l)T^#ShYBI7t~^CY^VAv?e)tXq^!OxE*RsKlw~vLLnZE3gsp%8wq#j@fp+MYZ zW1)sw$SUUhG?GzeVn(8g8UuwabVnY^hWt_vnp8ZI;L@RW@kg z91zR~4Nj?&Ozq_{$93|83I72Gt}U}E z)Ak$Y!yMKlY$(p>vFDS7-zDLhIL4k0Li5qp&295b$?;7n8m?`)&B^(wW3(r7TzMwRA&O<{fH2hb%tn)s>$shJ%%y%UHV%iZZVC|BRY7y(Q6 zjLFb&RE_;ZnK0}_5fPEM8XRZ9GO4y4;g#G;!dik{alGex9Mf$=KHziFZh9}g0Nm)1 z{18DT9Xd^761}(hIq$wW07-FhS9v?vf6q!++$7h>1O{H6I-ZJ(Y@kH~MjiMo^UUGr zJIIDP7zh0iU-Ev>6Sy5Ghl4Jb?-gf7u<6+MPh8H$IIec7f_Op&y>zml97@tZ+i+db=Z;s#Nuox7waPiK9cU8g# z|5Skz9<&B|1P1;l-F)yd6&^JGH28%Nbel;gb7#zu+Yc97Y5mFP&vR7}%dV!du7N06 z%&0HJ3m2OC?e_%|Yjcj~6Q!##mbclU;sy|LG8pG&ab~mNgmyj`7Z{Qe36##pr@64K4zeN3fp$o&Lmzhl~YB`w00*oNwiNWv$9WM6av*b4I&*NVk8`J_t5 zjh79_;?)W3LiDZWO@=wps5k+vGz`vyUvN@0q9X59dn5EYY%PE~g7qGg6VW{V>0QaW zf#dz^$dM!z*APp`M~Wqa@tK#gw}9Dx{gzXmTfF{mbEGDRttePaKuBD;o^H-}sr1uJ z-t5M;LsJdH80l6GQS78I^nQzZsv&&KWbD@?!YG)H871Kq*1(^b<4iZdH^T~*L%V94 zzI&M-e_Mc0A6UGo#seP7yr_!Y)Uyeld)P?t{I<6A*#bL+>rQ4>7G+u;W3p!@h&*e2 z-3ycfK7qT&bs?&)V}I3YFgA>dYwRY#f7RFWUZFHf#7{iCS-G(cs_%LE#--K^gF_4(N01IGt`-8&vt)*lu%rd^_72 zwkm>ZatVG2yhUc7zXCpWp=gCwVfgq~|IMeg?ZJUEC@~E@Ly49fJG11TN7d1L#-r?yaGN&<{`Rk$8XuXPLRhJQ`R3F*XqaiaaBkD<1;Ap`Jt_?bJwVPF#v`A-8j` zpEhi-S7Xan2wu;yKXD7nPy>KHAG9`0K@q027V3kCJ1cbJ#n?QB!D1Q4;)T&BC+D_2 zuMJtY7VVT5s~zSGU7FueF-f4AK<7SPwBMe%;&!K9T^C)N5pv40aa^Nmtr?n^7m(oT+XoMWxcVLQZ z1jNM^I4Sdv(CuljyW&8{1OBYqp18&qol|D&P!(7yaD}-S?kABocHR;^!Uzd$LeB>4 zGBZ=XK_DfA9@UQ7iAyMH#9pC!yW3MMucm8DS4ag!2OehmZ54?t^oVz&Hm-^uJgYOZHCm;ZICUX{-To=&9)vN|L)f*}* zQ{|79KCpI_bAe%1fOiy2B*G%2BJBo2hMY$&#!kb_XDLb1r>R6}Tpx802zmxQrWT@G6hpzV9xf|Of4zT$<-?f^;FK9Z{fN6%M=^ib`w{4abV zNe2*!!op!kpaeD_!01-xxO^!-g-0~tKYc6%DnQ!{X%h!NgW=MN(cJy%QZeIMzPGryCxxyxk2O({? z)xu(3`zNuEr+<00$LgS|n6`-3I3S8}qOE}0LX1H6IunO;gDGl+s>>>Y|J-bj;4@{x zod=dHer0$&-B1$Vpdbw+%^I6pBd09s)SW20tLBTpIKrFD)e>e24QDaO04*4^Ic-$o zVM|7L32;{ckUZNvsI^Jj8YWO?S{2)4n`DkgOOJquy?l8N1z<#DlpC z%YcMIqT02#A)= z#tDu0UUPZ(>?^!h-kD!>7ElRC0`37xi5K1%*Ag5&^CB-VPuX>q&ujZ7UJc*ZW3yjG zxhWV}0dzmlZ1@X~lwlNGA~1MP!Ef&mCunRO+ABy0aV-xp6SJ-fsp+y<=jilhp4Tcj zZ+q5dU)8j0%2*yyLrMP4x){hzmCB78gSjB;9P0g3@`N87$E%EQEVj=!@b#htF3vw(2cC z+6Z$LjrZHC!4x9GI+LX`J0~Y9Rq!A6 z1bs$a=^L-+7*codv)xwuD;PVpifIb#EHY5v{X$e$2vQcdI5|}z@aPJg=QEIz9r-DS zl-x12if(|Ub>eP*(lzFqya<#2B&4#aC?GYKSH=Ef1@&~O$FjK0l{_RdoP|Ak?%cVq_2Q~%pJ5fk zEP2?H{JO^~q8XBD**xbc%ey) z$5+^HgG(XkQ9+6>`}+E?bTn^-0anY@viIwm?>o^$XG7xBC1X>aa|8i{!kMST{kLU8 zWoLHEPTUG_W)?HDIJ0R(eiV;`xXY@9U`{~+(D1V+6wD130p=QRJ}Qt{sdB|yaPTjW z_0cY`i9UHOx*l&s%ZQT>92eq1gzCM}1vC9UXT4{=oq@5&c#(@0-KURMt%LXd#C+~= z-qAkk4Gp{kx;dE#e~jMO=ts^+-xp7lwBdHnZWlIrTfg%WAfpE3BY6_Np?01C=ehb1 zt1{p89V<;ucZWTa`&>JjT~#n-Eiy`Io;TkpBd7|rCn;TzclZjH60mtNsJ?lo| zTq}mB`{uiwT?SF#l_5cK=6ru_{$2UxWs)JF0_A|Vo4gI37$r~UP?zJRt*ASct|BGP zQ|pjmJm3T*zV?k=MYnG|C4)2m#{{A^XQI%h%W=KE+M2$I9HVX)Pc$=$a@LH->Z4@) z$oEqv)1=IQanAO#$PONwGJqjAn`P7)Xdn1a!o2{D?A^y~vZ;1T;|p(_wuT$s7q(xz zs|p_N5a&3BR03TTM8(8JgqgE43-Y!(;y?S&dBta1+eAfPulDVItxVfpW%@{31HVz5 zQysKdTBcz%wc`pxaPh0r*(I=BIUoP2QK3;son|AnRv{0TqQFl^c*=Hj2qmCLz86{i z7T=%6V1>j$V*`Y1evTbo9og8wWfXHQju!-YMYOSV6&idu(gd?|OrAjRViM-4STMWo zAFgcPB)*mnp+?dy_!0>%&()ta6+B6&iOAhjyZ~w*BS#&QrroEpkn#htJG_VX;vY^L z@(ISS_NR6C$qz>ZaM{bQ$LEmk@j1c!iS6VsExcN%zK0)HnDJ5ekKZwxeROCNs)SYy z;EMB?!RfktsWU2n#3f8LEuu-*NdT$^4H*!-m2Sz*=1mLxU%_v)MMXy0O@XMLj^**f z^^M7x`%Ux}zpedV?i?1lozTcLdG$Rj?)7|S2^SYa)tj#4zd7wUS2-7q2nr;%vt=54 zMcLcg-T2w0>+~{|!3xCoEWKYbGkW(vFV{=C@4|*@U0Yj^nVi@}5-wQ$w!v=mjdQmD z_>{zONMC8~a8Nht;XI?Z%lOPjIM)5~n#peEu^g(6RQ9c~1AzMtI?fV(mCtxbsCkk zd?sLVF%%rq`S*n`Hj_G@N2qed3&w&QWpGa~EGj12pNe>3EC7+?Kn$!sDZR1&!f)hq zgm~dUM%SwYw><&!DyK=C3-qT+!JF;6YV?KxKjHx|M=kfs55Z_`VJN${Gpc{vKR!jF z#tBlJSw+}{zG--GJ!fUpCJOPXG%YQDxR=ElpAer=U%Hr}um9=OiUT>~x8Zy>_h*0X z7}1^QebCN{kr&nzINdpXAhvtcD>78)oxRxJpDkB){vnHWnrLCzsA{6?r{`8fv5m>B?wN_#=r*!N0GW#e_(k0aphsm{X z-y)*4d;DL;Cv3ue*S<_7-LtpU=8Pu_@~a9&CB6dn+@y=S8LvPpuOJ&$pCL~1UX5n8 zT>_qfdOU9Pe%lv85>Tp?fkF=_W^ZGmVNBoSYoL4gqTr=iKpo8LT$CfDq9j1!qsj{H zGSa6N7ilVOp%8-G+S*!=yKpX7MFHkJz4c`aJl(gmw6ru96&aakT2uFrA)m!9g%l~m z<|B56P|qpOkedh&(W&TYmz6^Y`NP=H4vwy%kaIO*_h`i z?hhh$lfaFmYiKTbQ%r&`ZV<6TgS|*enXQ7;>N;SX@(|G4MMrZYlw|+ zr!GAaObSRN9p|LHL)0Cl)ZF!X;segGh&GMYk^3(vhctuj68!(ULGwzy+iF2gH+1}& z|7qQcakPvWA3E>rGfT$(qnG{-krHmZLaAR{8}b{fn=8>FXU|Y)rlW}3LFw_)u*6>R z1doO7L6M#Po3frWp__yUe+Lgyxr4u6RN%Q|W2Q$+B2>!ARF(L=sl)X4S8XEOeTvxa zbuVCW@i1`X_irnJc0TgdrTG2fc%l!|=MY^VGH<`ar`>-Y0rr34lZLoGfSwmCUIgwciCw|`py^h*b^P4F<$7u|Nd)%|61U` z7Wl6P{(o7ZLtvl5`kfl{pVetn2oU0$ua=pw!ymqmx9q(g!5`>`>wibis> zw{9rjx^Y87R`!;xYz(hd|Nk+-9pUiQ3HkpXaG;wS00#W_zgO^m>h9>{`-i*d|2; literal 0 HcmV?d00001 diff --git a/apps/landing/src/pages/index.astro b/apps/landing/src/pages/index.astro new file mode 100644 index 0000000..519373b --- /dev/null +++ b/apps/landing/src/pages/index.astro @@ -0,0 +1,288 @@ +--- +import "../styles/global.css"; + +const capabilityCards = [ + { + name: "Context7", + kind: "MCP", + copy: "Current framework docs without loading every operation up front.", + ops: ["get_caplet", "search_tools", "get_tool", "call_tool"], + }, + { + name: "Repo CLI", + kind: "CLI", + copy: "Curated local commands exposed as safe, inspectable agent actions.", + ops: ["list_tools", "get_tool", "call_tool"], + }, + { + name: "GitHub", + kind: "MCP", + copy: "Issues, pull requests, branches, and review workflows behind one card.", + ops: ["search_tools", "get_tool", "call_tool"], + }, +]; + +const backends = ["MCP", "OpenAPI", "GraphQL", "HTTP", "CLI"]; +const integrations = ["Claude Code", "Codex", "OpenCode", "Pi", "Any MCP client"]; + +const proofPoints = [ + { + eyebrow: "Progressive disclosure", + title: "One capability first. Details only when useful.", + copy: "Agents see compact domain cards, then inspect tools, schemas, resources, prompts, and calls inside the selected capability.", + }, + { + eyebrow: "Lossless routing", + title: "Downstream results stay intact.", + copy: "Caplets forwards tool results without flattening away structured content, images, resource links, or downstream error state.", + }, + { + eyebrow: "Operational safety", + title: "Config failures are visible and redacted.", + copy: "Backend checks, source metadata, timeouts, auth status, and safe errors make setup inspectable without leaking secrets.", + }, +]; + +const installSteps = [ + "pnpm add -g caplets", + "caplets init", + "caplets add mcp docs --command npx --arg -y --arg @upstash/context7-mcp", + "caplets serve", +]; +--- + + + + + + + + + + Caplets, capability cards for coding agents + + + +

+ +
+
+
+

Capability cards for coding agents

+

Give every tool stack a map.

+

+ Caplets wraps MCP servers, APIs, local commands, and remote services behind focused + cards. Agents choose a capability domain first, then inspect only the operations they + need. +

+ +
+
+
Backends
+
{backends.join(" · ")}
+
+
+
Clients
+
{integrations.join(" · ")}
+
+
+
+ +
+
+ + caplets.tools/list +
+ + +
+ {capabilityCards.map((card, index) => ( +
+
+ {card.kind} + 0{index + 1} +
+

{card.name}

+

{card.copy}

+
    + {card.ops.map((op) =>
  • {op}
  • )} +
+
+ ))} +
+
+ selected route + context7.call_tool(arguments) +

Exact schemas stay scoped to the chosen capability.

+
+
+
+ +
+
+

The wall of tools problem

+

Flat tool lists make agents guess before they understand.

+
+
+
+

Before

+

Every downstream operation arrives at once.

+ +
+
+

After

+

Agents inspect a capability path one step at a time.

+
    +
  1. Choosegithub
  2. +
  3. Inspectsearch_tools
  4. +
  5. Resolveget_tool
  6. +
  7. Invokecall_tool
  8. +
+
+
+
+ +
+
+

Built for real agent workflows

+

A compact surface that still tells the truth.

+
+
+ {proofPoints.map((point) => ( +
+

{point.eyebrow}

+

{point.title}

+

{point.copy}

+
+ ))} +
+
+ +
+
+

Native where it helps

+

Use Caplets from the agent you already run.

+
+
    + {integrations.map((name) =>
  • {name}
  • )} +
+
+ +
+
+

Start with one capability

+

Install, add a backend, serve the map.

+

+ Caplets can run as a universal MCP server, a native Pi or OpenCode tool layer, or a remote + HTTP service for shared environments. +

+
+
+
+ +
+
    + {installSteps.map((step) => ( +
  1. {step}
  2. + ))} +
+
+
+
+ +
+

Caplets turns sprawling tool setups into focused capability cards.

+ npm package +
+ + + diff --git a/apps/landing/src/styles/global.css b/apps/landing/src/styles/global.css new file mode 100644 index 0000000..7795a71 --- /dev/null +++ b/apps/landing/src/styles/global.css @@ -0,0 +1,1249 @@ +@import "tailwindcss"; + +:root { + color-scheme: light; + --ember: oklch(62% 0.155 35); + --ember-deep: oklch(51% 0.145 35); + --parchment: oklch(91% 0.035 82); + --charred-ink: oklch(24% 0.018 100); + --night-ink: oklch(18% 0.014 100); + --night-panel: oklch(22% 0.016 100); + --night-line: oklch(38% 0.024 82); + --night-text: oklch(93% 0.026 82); + --night-muted: oklch(82% 0.03 82); + --linen: oklch(97% 0.012 85); + --paper: oklch(98% 0.014 82); + --ash: oklch(86% 0.018 78); + --ash-strong: oklch(76% 0.025 78); + --olive: oklch(48% 0.045 110); + --success: oklch(50% 0.09 145); + --danger: oklch(48% 0.13 31); + --focus: oklch(62% 0.155 35 / 0.72); + --font-sans: + Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; + --ease-out: cubic-bezier(0.25, 1, 0.5, 1); + --ease-expo: cubic-bezier(0.16, 1, 0.3, 1); + --scroll-progress: 0; + --route-resolve: 0; + --pointer-x: 0.5; + --pointer-y: 0.45; + --content: min(1180px, calc(100vw - 32px)); +} + +* { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; + background: var(--linen); + color: var(--charred-ink); +} + +body { + margin: 0; + min-width: 320px; + font-family: var(--font-sans); + font-size: 1rem; + line-height: 1.55; + background: + radial-gradient(circle at 16% 8%, oklch(91% 0.05 42 / 0.8), transparent 30rem), + linear-gradient(90deg, oklch(88% 0.018 82 / 0.26) 1px, transparent 1px), + linear-gradient(0deg, oklch(88% 0.018 82 / 0.24) 1px, transparent 1px), var(--linen); + background-size: + auto, + 44px 44px, + 44px 44px, + auto; + overflow-x: hidden; + text-rendering: optimizeLegibility; + font-kerning: normal; +} + +body::before { + content: ""; + position: fixed; + inset: 0; + pointer-events: none; + background: linear-gradient(90deg, transparent, oklch(98% 0.014 82 / 0.55), transparent); + mix-blend-mode: multiply; + z-index: -1; +} + +img, +svg { + display: block; + max-width: 100%; +} +a { + color: inherit; +} + +@supports (animation-timeline: view()) { + .proof-item, + .ordered-flow li, + .terminal li { + animation-timeline: view(); + animation-range: entry 8% cover 32%; + } +} + +:focus-visible { + outline: 3px solid var(--focus); + outline-offset: 3px; +} + +.skip-link { + position: fixed; + left: 1rem; + top: 1rem; + z-index: 20; + transform: translateY(-140%); + border-radius: 10px; + background: var(--charred-ink); + color: var(--parchment); + padding: 0.75rem 1rem; + font-weight: 700; + transition: transform 160ms var(--ease-out); +} + +.skip-link:focus { + transform: translateY(0); +} + +.site-header { + width: var(--content); + margin: 18px auto 0; + min-height: 64px; + display: grid; + grid-template-columns: minmax(170px, 1fr) auto minmax(170px, 1fr); + align-items: center; + gap: 12px; + padding: 8px; + border: 1px solid var(--ash); + border-radius: 20px; + background: oklch(98% 0.014 82 / 0.9); + backdrop-filter: blur(16px); + position: sticky; + top: 12px; + z-index: 10; + box-shadow: 0 12px 40px oklch(24% 0.018 100 / 0.06); + animation: header-dock 620ms var(--ease-expo) both; +} + +.brand-mark, +.top-nav, +.header-action, +.button { + text-decoration: none; +} + +.brand-mark { + display: inline-flex; + align-items: center; + gap: 10px; + padding: 8px 10px; + border-radius: 12px; + font-weight: 720; + letter-spacing: -0.025em; +} + +.brand-mark img { + width: 32px; + height: 32px; + border-radius: 10px; + background: var(--charred-ink); + object-fit: cover; +} + +.top-nav { + display: inline-flex; + gap: 3px; + padding: 5px; + border: 1px solid var(--ash); + border-radius: 16px; + background: linear-gradient(180deg, var(--paper), var(--linen)); +} + +.top-nav a, +.header-action { + min-height: 42px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 11px; + padding: 0 13px; + color: var(--olive); + font-size: 0.875rem; + font-weight: 760; + transition: + color 180ms var(--ease-out), + background-color 180ms var(--ease-out), + transform 180ms var(--ease-out), + border-color 180ms var(--ease-out); +} + +.top-nav a { + gap: 8px; +} + +.top-nav a span { + color: var(--ember-deep); + font-family: var(--font-mono); + font-size: 0.68rem; + letter-spacing: 0.045em; +} + +.top-nav a:hover, +.header-action:hover { + background: var(--parchment); + color: var(--charred-ink); + transform: translateY(-1px); +} + +.header-actions { + justify-self: end; + display: inline-flex; + gap: 8px; + align-items: center; +} + +.header-action { + border: 1px solid var(--ash); + background: var(--paper); + color: var(--charred-ink); +} + +.header-action.muted { + color: var(--olive); + background: transparent; +} + +.icon-link { + width: 46px; + padding: 0; +} + +.icon-link svg { + width: 22px; + height: 22px; + fill: currentColor; +} + +main { + display: grid; + gap: clamp(74px, 10vw, 142px); +} + +.hero { + width: var(--content); + margin: clamp(42px, 7vw, 84px) auto 0; + display: grid; + grid-template-columns: minmax(0, 0.92fr) minmax(420px, 1.08fr); + align-items: center; + gap: clamp(28px, 5vw, 72px); + min-height: 92vh; + view-timeline-name: --hero-scroll; + view-timeline-axis: block; +} + +.hero-copy { + max-width: 670px; + animation: hero-copy-rise 780ms var(--ease-expo) 80ms both; +} + +.kicker, +.panel-label, +.proof-eyebrow, +.chip, +.card-index, +dt { + font-family: var(--font-mono); + font-size: 0.75rem; + font-weight: 700; + letter-spacing: 0.055em; +} + +.kicker { + width: fit-content; + margin: 0 0 18px; + color: var(--ember-deep); + text-transform: uppercase; +} + +h1, +h2, +h3, +p { + margin-top: 0; +} + +h1 { + max-width: 10ch; + margin-bottom: 24px; + font-size: clamp(4rem, 12vw, 9.5rem); + line-height: 0.82; + letter-spacing: -0.085em; + text-wrap: balance; + animation: title-lockup 840ms var(--ease-expo) 140ms both; +} + +.hero-lede { + max-width: 63ch; + margin-bottom: 28px; + color: var(--olive); + font-size: clamp(1.05rem, 1.4vw, 1.24rem); + line-height: 1.56; + text-wrap: pretty; +} + +.hero-actions { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin-bottom: 34px; +} + +.button { + min-height: 46px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 12px; + padding: 0 16px; + font-family: var(--font-mono); + font-size: 0.78rem; + font-weight: 750; + letter-spacing: 0.035em; + transition: + transform 180ms var(--ease-out), + background-color 180ms var(--ease-out), + border-color 180ms var(--ease-out), + color 180ms var(--ease-out); +} + +.button.primary { + border: 1px solid var(--charred-ink); + background: var(--charred-ink); + color: var(--parchment); +} + +.button.secondary { + border: 1px solid var(--ash); + background: var(--paper); + color: var(--charred-ink); +} + +.button:hover { + transform: translateY(-2px); +} +.button:active { + transform: translateY(0) scale(0.985); +} +.button.primary:hover { + background: var(--ember); + border-color: var(--ember); + color: var(--paper); +} +.button.secondary:hover { + background: var(--parchment); + border-color: var(--charred-ink); +} + +.hero-facts { + display: grid; + gap: 10px; + margin: 0; +} + +.hero-facts div { + display: grid; + grid-template-columns: 86px 1fr; + gap: 16px; + align-items: baseline; + padding-top: 10px; + border-top: 1px solid var(--ash); +} + +dt { + color: var(--ember-deep); + text-transform: uppercase; +} +dd { + margin: 0; + color: var(--olive); + font-size: 0.94rem; +} + +.map-stage { + min-height: clamp(520px, 58vw, 660px); + position: relative; + isolation: isolate; + border: 1px solid color-mix(in oklch, var(--ash), var(--ember) calc(var(--route-resolve) * 46%)); + border-radius: 32px; + background: + radial-gradient( + circle at calc(var(--pointer-x) * 100%) calc(var(--pointer-y) * 100%), + oklch(72% 0.14 35 / 0.26), + transparent 15rem + ), + radial-gradient(circle at 75% 18%, oklch(70% 0.12 35 / 0.16), transparent 17rem), + linear-gradient(135deg, var(--paper), var(--linen)); + overflow: hidden; + transform: perspective(1200px) rotateX(calc((var(--pointer-y) - 0.5) * -3deg)) + rotateY(calc((var(--pointer-x) - 0.5) * 4deg)) translateY(calc(var(--route-resolve) * -18px)); + transform-style: preserve-3d; + transition: + border-color 180ms var(--ease-out), + transform 220ms var(--ease-out), + background 220ms var(--ease-out); + animation: map-stage-enter 820ms var(--ease-expo) 260ms both; +} + +.map-stage::before { + content: ""; + position: absolute; + inset: 56px 0 0; + background: + linear-gradient(90deg, oklch(78% 0.02 78 / 0.35) 1px, transparent 1px), + linear-gradient(0deg, oklch(78% 0.02 78 / 0.33) 1px, transparent 1px); + background-size: 58px 58px; + mask-image: linear-gradient(to bottom, transparent, black 12%, black 82%, transparent); + z-index: -2; +} + +.map-stage::after { + content: ""; + position: absolute; + width: 420px; + height: 420px; + right: -150px; + bottom: -160px; + border: 1px solid var(--ash); + border-radius: 50%; + background: repeating-radial-gradient( + circle, + transparent 0 28px, + oklch(78% 0.02 78 / 0.38) 29px 30px + ); + z-index: -1; +} + +.map-toolbar { + height: 56px; + display: flex; + align-items: center; + gap: 10px; + padding: 0 18px; + border-bottom: 1px solid var(--ash); + color: var(--olive); + font-family: var(--font-mono); + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0.035em; +} + +.status-dot { + width: 10px; + height: 10px; + border-radius: 999px; + background: var(--success); + box-shadow: 0 0 0 5px oklch(50% 0.09 145 / 0.12); +} + +.route-field { + position: absolute; + inset: 72px 14px 92px; + width: calc(100% - 28px); + height: calc(100% - 164px); + pointer-events: none; +} + +.route { + fill: none; + stroke: var(--ember); + stroke-width: 2; + stroke-linecap: round; + opacity: 0.68; +} + +.route-backbone { + stroke-dasharray: 10 14; + animation: route-drift 18s linear infinite; +} + +.route-two { + stroke: var(--olive); + animation-duration: 24s; + opacity: 0.45; +} +.route-three { + stroke: var(--charred-ink); + animation-duration: 20s; + opacity: 0.28; +} + +.route-draw { + stroke-width: 4; + stroke-dasharray: 1; + stroke-dashoffset: calc(1 - var(--route-resolve)); + opacity: calc(0.2 + var(--route-resolve) * 0.78); + filter: drop-shadow(0 0 10px oklch(62% 0.155 35 / 0.36)); + transition: + stroke-dashoffset 80ms linear, + opacity 160ms var(--ease-out); +} + +.route-draw-two { + stroke: var(--olive); + transition-delay: 40ms; +} +.route-draw-three { + stroke: var(--charred-ink); + transition-delay: 80ms; +} + +.capability-grid { + position: absolute; + inset: 86px 22px 132px; +} + +.capability-card { + position: absolute; + width: min(272px, calc(100% - 28px)); + border: 1px solid var(--ash); + border-radius: 20px; + background: oklch(98% 0.014 82 / 0.94); + padding: 18px; + animation: card-enter 760ms var(--ease-expo) both; + animation-delay: calc(380ms + var(--i) * 110ms); + transition: + transform 220ms var(--ease-out), + border-color 220ms var(--ease-out), + background-color 220ms var(--ease-out); +} + +.capability-card:hover { + transform: translateY(-4px) translateZ(18px); + border-color: var(--ember); + background: var(--paper); +} + +.card-1 { + left: 5%; + top: calc(3% + var(--route-resolve) * 7%); +} +.card-2 { + right: calc(4% + var(--route-resolve) * 7%); + top: 24%; +} +.card-3 { + left: calc(16% + var(--route-resolve) * 13%); + bottom: calc(var(--route-resolve) * 8%); +} + +.cartography-compass { + position: absolute; + width: 168px; + height: 168px; + right: 38px; + top: 84px; + opacity: calc(0.12 + var(--route-resolve) * 0.34); + transform: rotate(calc(var(--route-resolve) * 42deg)) + scale(calc(0.88 + var(--route-resolve) * 0.2)); + pointer-events: none; + transition: + opacity 180ms var(--ease-out), + transform 260ms var(--ease-out); +} + +.cartography-compass span { + position: absolute; + inset: 50% auto auto 50%; + width: 1px; + height: 82px; + background: linear-gradient(to bottom, var(--ember), transparent); + transform-origin: top; +} + +.cartography-compass span:nth-child(1) { + transform: rotate(0deg); +} +.cartography-compass span:nth-child(2) { + transform: rotate(120deg); +} +.cartography-compass span:nth-child(3) { + transform: rotate(240deg); +} + +.card-topline { + display: flex; + justify-content: space-between; + gap: 12px; + align-items: center; + margin-bottom: 12px; +} + +.chip { + display: inline-flex; + align-items: center; + gap: 7px; + border: 1px solid var(--ash); + border-radius: 999px; + background: var(--parchment); + padding: 5px 8px; + color: var(--charred-ink); +} + +.chip::before { + content: ""; + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--ember); +} + +.card-index { + color: var(--olive); +} + +.capability-card h2 { + margin-bottom: 6px; + font-size: 1.25rem; + line-height: 1.12; + letter-spacing: -0.035em; +} + +.capability-card p { + margin-bottom: 14px; + color: var(--olive); + font-size: 0.9rem; + line-height: 1.45; +} + +.capability-card ul { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin: 0; + padding: 0; + list-style: none; +} + +.capability-card li { + border: 1px solid var(--ash); + border-radius: 999px; + background: var(--linen); + padding: 4px 7px; + font-family: var(--font-mono); + font-size: 0.68rem; + font-weight: 650; + color: var(--charred-ink); +} + +.inspect-panel { + position: absolute; + right: 22px; + bottom: 22px; + left: 22px; + display: grid; + grid-template-columns: auto 1fr; + gap: 8px 18px; + align-items: center; + border: 1px solid var(--night-line); + border-radius: 18px; + background: var(--night-ink); + color: var(--night-text); + padding: 14px 16px; +} + +.panel-label { + color: oklch(86% 0.08 35); + text-transform: uppercase; +} + +.inspect-panel code { + justify-self: end; + font-family: var(--font-mono); + font-size: 0.88rem; +} + +.inspect-panel p { + grid-column: 1 / -1; + margin: 0; + color: var(--night-muted); + font-size: 0.88rem; +} + +.problem, +.proof, +.integrations, +.install, +.site-footer { + width: var(--content); + margin-inline: auto; +} + +.problem, +.proof, +.integrations, +.install, +.proof-item, +.integration-strip li, +.terminal li { + opacity: 0; + transform: translateY(22px); +} + +.problem.is-visible, +.proof.is-visible, +.integrations.is-visible, +.install.is-visible, +.proof-item.is-visible, +.integration-strip li.is-visible, +.terminal li.is-visible { + opacity: 1; + transform: translateY(0); + transition: + opacity 560ms var(--ease-expo), + transform 560ms var(--ease-expo), + border-color 160ms linear; + transition-delay: calc(var(--reveal-index, 0) * 45ms); +} + +.problem { + margin-top: calc(var(--route-resolve) * -34px); + transition: margin-top 120ms linear; +} + +.problem .section-heading { + transform: translateY(calc((1 - var(--route-resolve)) * 22px)); + opacity: calc(0.72 + var(--route-resolve) * 0.28); + transition: + transform 120ms linear, + opacity 120ms linear; +} + +.dense-list { + transform: translateX(calc(var(--route-resolve) * -10px)); + opacity: calc(1 - var(--route-resolve) * 0.16); + transition: + transform 120ms linear, + opacity 120ms linear; +} + +.ordered-flow { + transform: translateX(calc(var(--route-resolve) * 10px)); + border-color: color-mix(in oklch, var(--ash), var(--ember) calc(var(--route-resolve) * 42%)); + transition: + transform 120ms linear, + border-color 120ms linear; +} + +.section-heading { + display: grid; + grid-template-columns: minmax(180px, 0.4fr) minmax(0, 0.8fr); + gap: clamp(18px, 4vw, 56px); + align-items: start; + margin-bottom: 28px; +} + +.section-heading.narrow { + max-width: 760px; + grid-template-columns: 1fr; + gap: 0; +} + +.section-heading h2, +.install h2, +.integrations h2 { + margin: 0; + font-size: clamp(2.2rem, 5vw, 5.4rem); + line-height: 0.95; + letter-spacing: -0.065em; + text-wrap: balance; +} + +.comparison { + display: grid; + grid-template-columns: 0.95fr 1.05fr; + gap: 18px; +} + +.dense-list, +.ordered-flow, +.proof-item, +.integrations, +.install { + border: 1px solid var(--ash); + border-radius: 26px; + background: var(--paper); +} + +.dense-list, +.ordered-flow { + min-height: 390px; + padding: clamp(20px, 3vw, 34px); +} + +.dense-list h3, +.ordered-flow h3, +.proof-item h3 { + margin-bottom: 8px; + font-size: 1.35rem; + letter-spacing: -0.035em; +} + +.dense-list p, +.ordered-flow p, +.proof-item p, +.install-copy p, +.site-footer p { + color: var(--olive); +} + +.tool-noise { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(92px, 1fr)); + gap: 7px; + margin-top: 26px; + max-height: 250px; + overflow: hidden; + mask-image: linear-gradient(to bottom, black 58%, transparent); +} + +.tool-noise span { + border: 1px solid var(--ash); + border-radius: 999px; + background: var(--linen); + padding: 7px 8px; + color: oklch(54% 0.035 110 / 0.72); + font-family: var(--font-mono); + font-size: 0.72rem; +} + +.ordered-flow ol { + display: grid; + gap: 12px; + margin: 26px 0 0; + padding: 0; + list-style: none; + counter-reset: flow; +} + +.ordered-flow li { + counter-increment: flow; + display: grid; + grid-template-columns: auto 1fr auto; + align-items: center; + gap: 14px; + border: 1px solid var(--ash); + border-radius: 16px; + background: var(--linen); + padding: 12px; +} + +.ordered-flow li::before { + content: counter(flow, decimal-leading-zero); + display: grid; + place-items: center; + width: 36px; + height: 36px; + border-radius: 12px; + background: var(--charred-ink); + color: var(--parchment); + font-family: var(--font-mono); + font-size: 0.72rem; + font-weight: 750; +} + +.ordered-flow span { + font-family: var(--font-mono); + color: var(--ember-deep); + font-size: 0.82rem; + font-weight: 700; +} + +.proof-list { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 18px; +} + +.proof-item { + padding: 24px; +} + +.proof-eyebrow { + margin-bottom: 38px; + color: var(--ember-deep); + text-transform: uppercase; +} + +.proof-item p:last-child { + margin-bottom: 0; +} + +.integrations { + display: grid; + grid-template-columns: 0.8fr 1fr; + gap: clamp(20px, 4vw, 56px); + align-items: end; + padding: clamp(24px, 4vw, 46px); + background: var(--night-ink); + color: var(--night-text); +} + +.integrations .kicker { + color: oklch(86% 0.08 35); +} + +.integration-strip { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: 10px; + margin: 0; + padding: 0; + list-style: none; +} + +.integration-strip li { + border: 1px solid var(--night-line); + border-radius: 999px; + padding: 10px 12px; + color: var(--night-text); + background: oklch(28% 0.018 100); + font-family: var(--font-mono); + font-size: 0.78rem; + font-weight: 700; +} + +.install { + display: grid; + grid-template-columns: minmax(0, 0.8fr) minmax(360px, 1fr); + gap: clamp(22px, 4vw, 54px); + align-items: center; + padding: clamp(22px, 4vw, 42px); +} + +.install-copy p { + max-width: 56ch; + margin-bottom: 0; +} + +.terminal { + overflow: hidden; + border: 1px solid var(--night-line); + border-radius: 20px; + background: var(--night-ink); + color: var(--night-text); +} + +.terminal-bar { + display: flex; + gap: 7px; + padding: 14px; + border-bottom: 1px solid var(--night-line); + background: var(--night-panel); +} + +.terminal-bar span { + width: 10px; + height: 10px; + border-radius: 50%; + background: var(--ember); +} + +.terminal-bar span:nth-child(2) { + background: var(--night-muted); +} +.terminal-bar span:nth-child(3) { + background: oklch(72% 0.12 145); +} + +.terminal ol { + margin: 0; + padding: 12px 0 18px; + list-style: none; + counter-reset: term; +} + +.terminal li { + counter-increment: term; + display: grid; + grid-template-columns: 46px 1fr; + gap: 12px; + padding: 10px 18px; + font-family: var(--font-mono); + font-size: 0.86rem; +} + +.terminal li::before { + content: counter(term, decimal-leading-zero); + color: oklch(82% 0.08 35); +} + +.terminal code { + white-space: pre-wrap; + overflow-wrap: anywhere; +} + +.site-footer { + display: flex; + justify-content: space-between; + gap: 18px; + padding: 42px 0 54px; + color: var(--olive); +} + +.site-footer p { + margin: 0; +} +.site-footer a { + font-weight: 750; + color: var(--charred-ink); +} + +@keyframes header-dock { + from { + opacity: 0; + transform: translateY(-16px) scale(0.985); + } + to { + opacity: 1; + transform: translateY(0) scale(1); + } +} + +@keyframes hero-copy-rise { + from { + opacity: 0; + transform: translateY(24px); + filter: blur(8px); + } + to { + opacity: 1; + transform: translateY(0); + filter: blur(0); + } +} + +@keyframes title-lockup { + from { + opacity: 0; + transform: translateY(18px) scale(0.975); + letter-spacing: -0.12em; + } + to { + opacity: 1; + transform: translateY(0) scale(1); + letter-spacing: -0.085em; + } +} + +@keyframes map-stage-enter { + from { + opacity: 0; + transform: perspective(1200px) translateY(28px) rotateX(4deg) scale(0.985); + filter: blur(10px) saturate(0.8); + } + to { + opacity: 1; + transform: perspective(1200px) rotateX(calc((var(--pointer-y) - 0.5) * -3deg)) + rotateY(calc((var(--pointer-x) - 0.5) * 4deg)) translateY(calc(var(--route-resolve) * -18px)); + filter: blur(0) saturate(1); + } +} + +@keyframes route-drift { + to { + stroke-dashoffset: -240; + } +} + +@keyframes card-enter { + from { + opacity: 0; + transform: translateY(18px) scale(0.98); + } + to { + opacity: 1; + transform: translateY(0) scale(1); + } +} + +@media (max-width: 980px) { + .site-header { + grid-template-columns: 1fr; + align-items: stretch; + } + + .brand-mark { + justify-self: center; + } + + .top-nav { + width: 100%; + justify-content: space-between; + order: 3; + } + + .top-nav a { + flex: 1; + } + + .header-actions { + justify-self: stretch; + display: grid; + grid-template-columns: 1fr 1fr; + } + + .header-action { + width: 100%; + } + + .hero, + .comparison, + .integrations, + .install { + grid-template-columns: 1fr; + } + + .hero { + margin-top: 42px; + } + + h1 { + max-width: 11ch; + } + + .map-stage { + min-height: 620px; + } + + .proof-list { + grid-template-columns: 1fr; + } + + .integration-strip { + justify-content: flex-start; + } +} + +@media (max-width: 720px) { + :root { + --content: min(100vw - 24px, 1180px); + } + + .site-header { + margin-top: 10px; + top: 8px; + } + + .brand-mark span { + display: inline; + } + + .site-header { + border-radius: 18px; + padding: 7px; + } + + .top-nav { + gap: 4px; + padding: 4px; + } + + .top-nav a, + .header-action { + min-height: 42px; + padding-inline: 8px; + font-size: 0.82rem; + } + + .top-nav a span { + display: none; + } + + h1 { + font-size: clamp(3.6rem, 18vw, 5.8rem); + } + + .hero-facts div, + .section-heading, + .inspect-panel { + grid-template-columns: 1fr; + } + + .map-stage { + min-height: 770px; + border-radius: 24px; + } + + .capability-grid { + position: relative; + inset: auto; + display: grid; + gap: 12px; + padding: 18px; + } + + .capability-card { + position: relative; + inset: auto; + width: 100%; + } + + .route-field { + opacity: 0.35; + } + + .inspect-panel { + right: 18px; + bottom: 18px; + left: 18px; + } + + .inspect-panel code { + justify-self: start; + } + + .dense-list, + .ordered-flow, + .proof-item, + .integrations, + .install { + border-radius: 20px; + } + + .site-footer { + flex-direction: column; + } +} + +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } + + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } + + .problem, + .proof, + .integrations, + .install, + .proof-item, + .integration-strip li, + .terminal li { + opacity: 1 !important; + transform: none !important; + } +} diff --git a/apps/landing/tsconfig.json b/apps/landing/tsconfig.json new file mode 100644 index 0000000..8bf91d3 --- /dev/null +++ b/apps/landing/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +} diff --git a/package.json b/package.json index ef7c974..8345cf1 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "private": true, "type": "module", "scripts": { + "alchemy:dev": "alchemy dev", + "alchemy:deploy": "alchemy deploy", + "alchemy:destroy": "alchemy destroy", "clean": "turbo clean", "build": "turbo build", "build:watch": "turbo build:watch", @@ -28,12 +31,14 @@ }, "devDependencies": { "@changesets/cli": "^2.31.0", + "@cloudflare/workers-types": "^4.20260526.1", "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260526.1", + "@typescript/native-preview": "7.0.0-dev.20260527.1", + "alchemy": "0.93.9", "husky": "^9.1.7", "oxfmt": "^0.52.0", "oxlint": "^1.67.0", - "rolldown": "^1.0.2", + "rolldown": "^1.0.3", "tsx": "^4.22.3", "turbo": "^2.9.14", "typescript": "^6.0.3", diff --git a/packages/benchmarks/package.json b/packages/benchmarks/package.json index 1094962..ee6ffb5 100644 --- a/packages/benchmarks/package.json +++ b/packages/benchmarks/package.json @@ -17,7 +17,7 @@ }, "devDependencies": { "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260526.1", + "@typescript/native-preview": "7.0.0-dev.20260527.1", "caplets": "workspace:*", "typescript": "^6.0.3", "vitest": "^4.1.7" diff --git a/packages/benchmarks/vitest.config.ts b/packages/benchmarks/vitest.config.ts index 18ea2ce..8fb6f2d 100644 --- a/packages/benchmarks/vitest.config.ts +++ b/packages/benchmarks/vitest.config.ts @@ -1,7 +1,3 @@ import { defineConfig } from "vitest/config"; -export default defineConfig({ - resolve: { - tsconfigPaths: true, - }, -}); +export default defineConfig({}); diff --git a/packages/cli/package.json b/packages/cli/package.json index ee27114..da0bb04 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -46,8 +46,8 @@ }, "devDependencies": { "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260526.1", - "rolldown": "^1.0.2", + "@typescript/native-preview": "7.0.0-dev.20260527.1", + "rolldown": "^1.0.3", "typescript": "^6.0.3", "vitest": "^4.1.7" }, diff --git a/packages/cli/vitest.config.ts b/packages/cli/vitest.config.ts index 18ea2ce..8fb6f2d 100644 --- a/packages/cli/vitest.config.ts +++ b/packages/cli/vitest.config.ts @@ -1,7 +1,3 @@ import { defineConfig } from "vitest/config"; -export default defineConfig({ - resolve: { - tsconfigPaths: true, - }, -}); +export default defineConfig({}); diff --git a/packages/core/package.json b/packages/core/package.json index 0b3b7d3..e7340ff 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -66,8 +66,8 @@ }, "devDependencies": { "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260526.1", - "rolldown": "^1.0.2", + "@typescript/native-preview": "7.0.0-dev.20260527.1", + "rolldown": "^1.0.3", "typescript": "^6.0.3", "vitest": "^4.1.7" }, diff --git a/packages/core/vitest.config.ts b/packages/core/vitest.config.ts index 18ea2ce..8fb6f2d 100644 --- a/packages/core/vitest.config.ts +++ b/packages/core/vitest.config.ts @@ -1,7 +1,3 @@ import { defineConfig } from "vitest/config"; -export default defineConfig({ - resolve: { - tsconfigPaths: true, - }, -}); +export default defineConfig({}); diff --git a/packages/opencode/package.json b/packages/opencode/package.json index a0a61bd..6cbbf14 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -39,7 +39,7 @@ "devDependencies": { "@types/node": "^25.9.1", "@typescript/native-preview": "7.0.0-dev.20260527.1", - "rolldown": "^1.0.2", + "rolldown": "^1.0.3", "typescript": "^6.0.3", "vitest": "^4.1.7" }, diff --git a/packages/opencode/vitest.config.ts b/packages/opencode/vitest.config.ts index 18ea2ce..8fb6f2d 100644 --- a/packages/opencode/vitest.config.ts +++ b/packages/opencode/vitest.config.ts @@ -1,7 +1,3 @@ import { defineConfig } from "vitest/config"; -export default defineConfig({ - resolve: { - tsconfigPaths: true, - }, -}); +export default defineConfig({}); diff --git a/packages/pi/package.json b/packages/pi/package.json index 1ab1c3f..dfab6ad 100644 --- a/packages/pi/package.json +++ b/packages/pi/package.json @@ -39,7 +39,7 @@ "devDependencies": { "@types/node": "^25.9.1", "@typescript/native-preview": "7.0.0-dev.20260527.1", - "rolldown": "^1.0.2", + "rolldown": "^1.0.3", "typescript": "^6.0.3", "vitest": "^4.1.7" }, diff --git a/packages/pi/vitest.config.ts b/packages/pi/vitest.config.ts index 18ea2ce..8fb6f2d 100644 --- a/packages/pi/vitest.config.ts +++ b/packages/pi/vitest.config.ts @@ -1,7 +1,3 @@ import { defineConfig } from "vitest/config"; -export default defineConfig({ - resolve: { - tsconfigPaths: true, - }, -}); +export default defineConfig({}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ceeaeed..34884ab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,202 +1,3 @@ ---- -lockfileVersion: '9.0' - -importers: - - .: - configDependencies: {} - packageManagerDependencies: - '@pnpm/exe': - specifier: ^11.0.9 - version: 11.0.9 - pnpm: - specifier: ^11.0.9 - version: 11.0.9 - -packages: - - '@pnpm/exe@11.0.9': - resolution: {integrity: sha512-d5sY2jBLVWCC+MrPCgqbDHacmkPwqIjpoBKfczbjzaaNSBN62P6k1SS6R3t4xXlJ2k83HVk9/xgk2OuPJRXpUw==} - hasBin: true - - '@pnpm/linux-arm64@11.0.9': - resolution: {integrity: sha512-Kh2gPz1EffY44XFyJsWjWnzzCGn8C5K4tF242JOhlHyxN/O8qKw0nQ8jqkIhP9W9Rinl3W0Yk5cIeVGweq+bCQ==} - cpu: [arm64] - os: [linux] - - '@pnpm/linux-x64@11.0.9': - resolution: {integrity: sha512-jM9UFB9RpV56O30X0F+nyDDX76VBAwfo1LPpTrGFTEh4kVakPi9ypH6NXZG5yBugjOmG7vlQEl3n4EaPzKYuxA==} - cpu: [x64] - os: [linux] - - '@pnpm/linuxstatic-arm64@11.0.9': - resolution: {integrity: sha512-vPP+OnxrZAvhOIdYhK+t99QwbXBnq9WH71Yl3IXPoU398s1zWWDBRNU3YiOBgzLCLaRLFdSxGzzzu9W4xja8CQ==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@pnpm/linuxstatic-x64@11.0.9': - resolution: {integrity: sha512-zIv1jal59mOU0vd0X2D8AIuKTE1Qng5Aului7zYADjscokSEjnYlJMwjgEOZlaIm4Mj+nX/inUosvVqVTNMoIA==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@pnpm/macos-arm64@11.0.9': - resolution: {integrity: sha512-kIZcdmwwtfrydWNFOvTV2lr8PKCO7lLwunGm2ApsxJt+r92PxTg22hBS3+bOK/9QaAQRQWmgncjq3a/fqKVt3A==} - cpu: [arm64] - os: [darwin] - - '@pnpm/win-arm64@11.0.9': - resolution: {integrity: sha512-9yfujTV0CYQl5lsbVCm78mNqrx1wsEK3NhFaX0mC3QQirAuoGOnR2us0OpZZ5lwprmUWVNvKh9Qsi0p1iA3LMg==} - cpu: [arm64] - os: [win32] - - '@pnpm/win-x64@11.0.9': - resolution: {integrity: sha512-HMdWkllT0sjsvXw9EDRBA4p2vz06iEUhlD0Q+/66stevlffj9F8X9sAONsjz4AvoDhn8YTnsE+9oEOBJxgFZmg==} - cpu: [x64] - os: [win32] - - '@reflink/reflink-darwin-arm64@0.1.19': - resolution: {integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@reflink/reflink-darwin-x64@0.1.19': - resolution: {integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@reflink/reflink-linux-arm64-gnu@0.1.19': - resolution: {integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@reflink/reflink-linux-arm64-musl@0.1.19': - resolution: {integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@reflink/reflink-linux-x64-gnu@0.1.19': - resolution: {integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@reflink/reflink-linux-x64-musl@0.1.19': - resolution: {integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@reflink/reflink-win32-arm64-msvc@0.1.19': - resolution: {integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@reflink/reflink-win32-x64-msvc@0.1.19': - resolution: {integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@reflink/reflink@0.1.19': - resolution: {integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==} - engines: {node: '>= 10'} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - pnpm@11.0.9: - resolution: {integrity: sha512-NM6C5ngCM8+crYaFApqPgdLgYZbFqbrZiHn3QklAxoF8TkUk+304uFU87tSLl1i4668avTYAwjLEyM9zZghvOA==} - engines: {node: '>=22.13'} - hasBin: true - -snapshots: - - '@pnpm/exe@11.0.9': - dependencies: - '@reflink/reflink': 0.1.19 - detect-libc: 2.1.2 - optionalDependencies: - '@pnpm/linux-arm64': 11.0.9 - '@pnpm/linux-x64': 11.0.9 - '@pnpm/linuxstatic-arm64': 11.0.9 - '@pnpm/linuxstatic-x64': 11.0.9 - '@pnpm/macos-arm64': 11.0.9 - '@pnpm/win-arm64': 11.0.9 - '@pnpm/win-x64': 11.0.9 - - '@pnpm/linux-arm64@11.0.9': - optional: true - - '@pnpm/linux-x64@11.0.9': - optional: true - - '@pnpm/linuxstatic-arm64@11.0.9': - optional: true - - '@pnpm/linuxstatic-x64@11.0.9': - optional: true - - '@pnpm/macos-arm64@11.0.9': - optional: true - - '@pnpm/win-arm64@11.0.9': - optional: true - - '@pnpm/win-x64@11.0.9': - optional: true - - '@reflink/reflink-darwin-arm64@0.1.19': - optional: true - - '@reflink/reflink-darwin-x64@0.1.19': - optional: true - - '@reflink/reflink-linux-arm64-gnu@0.1.19': - optional: true - - '@reflink/reflink-linux-arm64-musl@0.1.19': - optional: true - - '@reflink/reflink-linux-x64-gnu@0.1.19': - optional: true - - '@reflink/reflink-linux-x64-musl@0.1.19': - optional: true - - '@reflink/reflink-win32-arm64-msvc@0.1.19': - optional: true - - '@reflink/reflink-win32-x64-msvc@0.1.19': - optional: true - - '@reflink/reflink@0.1.19': - optionalDependencies: - '@reflink/reflink-darwin-arm64': 0.1.19 - '@reflink/reflink-darwin-x64': 0.1.19 - '@reflink/reflink-linux-arm64-gnu': 0.1.19 - '@reflink/reflink-linux-arm64-musl': 0.1.19 - '@reflink/reflink-linux-x64-gnu': 0.1.19 - '@reflink/reflink-linux-x64-musl': 0.1.19 - '@reflink/reflink-win32-arm64-msvc': 0.1.19 - '@reflink/reflink-win32-x64-msvc': 0.1.19 - - detect-libc@2.1.2: {} - - pnpm@11.0.9: {} - ---- lockfileVersion: '9.0' settings: @@ -210,12 +11,18 @@ importers: '@changesets/cli': specifier: ^2.31.0 version: 2.31.0(@types/node@25.9.1) + '@cloudflare/workers-types': + specifier: ^4.20260526.1 + version: 4.20260526.1 '@types/node': specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260526.1 - version: 7.0.0-dev.20260526.1 + specifier: 7.0.0-dev.20260527.1 + version: 7.0.0-dev.20260527.1 + alchemy: + specifier: 0.93.9 + version: 0.93.9(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0))(workerd@1.20260526.1) husky: specifier: ^9.1.7 version: 9.1.7 @@ -226,8 +33,8 @@ importers: specifier: ^1.67.0 version: 1.67.0 rolldown: - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.0.3 + version: 1.0.3 tsx: specifier: ^4.22.3 version: 4.22.3 @@ -239,7 +46,25 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) + + apps/landing: + dependencies: + '@astrojs/check': + specifier: ^0.9.9 + version: 0.9.9(prettier@3.8.3)(typescript@6.0.3) + '@tailwindcss/vite': + specifier: ^4.3.0 + version: 4.3.0(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) + astro: + specifier: ^6.3.8 + version: 6.3.8(@types/node@25.9.1)(aws4fetch@1.0.20)(jiti@2.7.0)(lightningcss@1.32.0)(rollup@4.60.4)(tsx@4.22.3)(yaml@2.9.0) + tailwindcss: + specifier: ^4.3.0 + version: 4.3.0 + typescript: + specifier: ^6.0.3 + version: 6.0.3 packages/benchmarks: dependencies: @@ -254,8 +79,8 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260526.1 - version: 7.0.0-dev.20260526.1 + specifier: 7.0.0-dev.20260527.1 + version: 7.0.0-dev.20260527.1 caplets: specifier: workspace:* version: link:../cli @@ -264,7 +89,7 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) packages/cli: dependencies: @@ -279,17 +104,17 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260526.1 - version: 7.0.0-dev.20260526.1 + specifier: 7.0.0-dev.20260527.1 + version: 7.0.0-dev.20260527.1 rolldown: - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.0.3 + version: 1.0.3 typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) packages/core: dependencies: @@ -298,7 +123,7 @@ importers: version: 12.1.0(openapi-types@12.1.3) '@hono/mcp': specifier: ^0.3.0 - version: 0.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(hono-rate-limiter@0.5.3(hono@4.12.23))(hono@4.12.23)(zod@4.4.3) + version: 0.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(hono-rate-limiter@0.5.3(hono@4.12.23)(unstorage@1.17.5(aws4fetch@1.0.20)))(hono@4.12.23)(zod@4.4.3) '@hono/node-server': specifier: ^2.0.4 version: 2.0.4(hono@4.12.23) @@ -331,17 +156,17 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260526.1 - version: 7.0.0-dev.20260526.1 + specifier: 7.0.0-dev.20260527.1 + version: 7.0.0-dev.20260527.1 rolldown: - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.0.3 + version: 1.0.3 typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) packages/opencode: dependencies: @@ -350,7 +175,7 @@ importers: version: link:../core '@opencode-ai/plugin': specifier: '>=1' - version: 1.14.48 + version: 1.15.10 devDependencies: '@types/node': specifier: ^25.9.1 @@ -359,14 +184,14 @@ importers: specifier: 7.0.0-dev.20260527.1 version: 7.0.0-dev.20260527.1 rolldown: - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.0.3 + version: 1.0.3 typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) packages/pi: dependencies: @@ -375,10 +200,10 @@ importers: version: link:../core '@earendil-works/pi-coding-agent': specifier: '*' - version: 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) + version: 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) '@earendil-works/pi-tui': specifier: '*' - version: 0.74.0 + version: 0.75.5 devDependencies: '@types/node': specifier: ^25.9.1 @@ -387,14 +212,14 @@ importers: specifier: 7.0.0-dev.20260527.1 version: 7.0.0-dev.20260527.1 rolldown: - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.0.3 + version: 1.0.3 typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) packages: @@ -423,6 +248,47 @@ packages: peerDependencies: openapi-types: '>=7' + '@astrojs/check@0.9.9': + resolution: {integrity: sha512-A5UW8uIuErLWEoRQvzgXpO1gTjUFtK8r7nU2Z7GewAMxUb7bPvpk11qaKKgxqXlHJWlAvaaxy+Xg28A6bmQ1Tg==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 || ^6.0.0 + + '@astrojs/compiler@2.13.1': + resolution: {integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==} + + '@astrojs/compiler@4.0.0': + resolution: {integrity: sha512-eouss7G8ygdZqHuke033VMcVw5HTZUu+PXd/h06DGDUg/jt5btPYPqh66ENWw/mU78rBrf/oeC4oqoBwMtDMNA==} + + '@astrojs/internal-helpers@0.9.1': + resolution: {integrity: sha512-1pWuARqYom/TzuU3+0ZugsTrKlUydWKuULmDqSMTuonY+9IRDUEGKX/8PXQ1nBxRq3w85uGtd9q9SXfqEldMIQ==} + + '@astrojs/language-server@2.16.10': + resolution: {integrity: sha512-87VQ/5GSdHlRnUA+hGuerYyIGAj+9RbZmATyuKLEUePinUXhQ5YkRnRrHhOD9sSi5JOErLjrLkHnfZFEvGrV8w==} + hasBin: true + peerDependencies: + prettier: ^3.0.0 + prettier-plugin-astro: '>=0.11.0' + peerDependenciesMeta: + prettier: + optional: true + prettier-plugin-astro: + optional: true + + '@astrojs/markdown-remark@7.1.2': + resolution: {integrity: sha512-caXZ4Dc2St2dW8luEg22GlP0gupLdztCTQE4EzZOxW1pqWXz9mbeJEuHUkgDYcKWW8tjIHkydYDhWLVoxJ327Q==} + + '@astrojs/prism@4.0.2': + resolution: {integrity: sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==} + engines: {node: '>=22.12.0'} + + '@astrojs/telemetry@3.3.2': + resolution: {integrity: sha512-j8DNruA8ors99Al39RYZPJK4DC1bKkoNm93mAMuBhY9TCNC4R8n1q7ovFnJ5qhGh5Lsh7pa1gpQVpYpsJPeTHQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@astrojs/yaml2ts@0.2.4': + resolution: {integrity: sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==} + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -440,148 +306,178 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-bedrock-runtime@3.1045.0': - resolution: {integrity: sha512-aPC6gAz9uKRiwfnKB7peTs6yD0FpSzmVnSkx0f2QtJfosFM6J6KtBvR1lMKby050K4C4PAyEScwA5YTsGfTcGA==} + '@aws-sdk/client-bedrock-runtime@3.1048.0': + resolution: {integrity: sha512-u+NT61JZEkRFtpL0CAw1N1dwxnaLgwVXQl/zjJxTGgLyS/jTIdg2SdoEoCTHxgDyCnqa1HEi9QOoE9/pYRNpOQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.974.8': - resolution: {integrity: sha512-njR2qoG6ZuB0kvAS2FyICsFZJ6gmCcf2X/7JcD14sUvGDm26wiZ5BrA6LOiUxKFEF+IVe7kdroxyE00YlkiYsw==} + '@aws-sdk/client-cognito-identity@3.1054.0': + resolution: {integrity: sha512-B3R1BnF9MtyAyIhI875geixK4SJ1dXwWjf8McBMyMkctaXdvGx5O4YD7MPxGPtbmExrW4tDp6h4wQbDJDLZumw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.34': - resolution: {integrity: sha512-XT0jtf8Fw9JE6ppsQeoNnZRiG+jqRixMT1v1ZR17G60UvVdsQmTG8nbEyHuEPfMxDXEhfdARaM/XiEhca4lGHQ==} + '@aws-sdk/core@3.974.13': + resolution: {integrity: sha512-+Y5/4tHki0uYgyx8eun146DegRVQBpdKGK5RbV0FTKJPpaKTchvqVxrrRFK6Wk0JksO4iAZKw3eqxGEIwtO98w==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.36': - resolution: {integrity: sha512-DPoGWfy7J7RKxvbf5kOKIGQkD2ek3dbKgzKIGrnLuvZBz5myU+Im/H6pmc14QcnFbqHMqxvtWSgRDSJW3qXLQg==} + '@aws-sdk/core@3.974.14': + resolution: {integrity: sha512-ppamm04uoj3hhNO5IlQSs5D6rWX1fWkzcn6a4pZrojk8Y6ObY9wzLDdT/Eq3gv6O9hOebi9tYTNB8b8fQj9XJw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.38': - resolution: {integrity: sha512-oDzUBu2MGJFgoar05sPMCwSrhw44ASyccrHzj66vO69OZqi7I6hZZxXfuPLC8OCzW7C+sU+bI73XHij41yekgQ==} + '@aws-sdk/credential-provider-cognito-identity@3.972.37': + resolution: {integrity: sha512-f8ZRPoATqSVS1LW19KwiWn2/BSTdylXPznAjDI2r7d3+RT880/yRT9uBQhPE+Ba986LiMRvg1AhmFYDwNLk/0A==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.38': - resolution: {integrity: sha512-g1NosS8qe4OF++G2UFCM5ovSkgipC7YYor5KCWatG0UoMSO5YFj9C8muePlyVmOBV/WTI16Jo3/s1NUo/o1Bww==} + '@aws-sdk/credential-provider-env@3.972.39': + resolution: {integrity: sha512-29wX9zpAvEt1vcj0psha+y6ygBHy2V/S72mp6e7q0KARLWXq+pwE/lR6qGkwknQvruh52lXvlqZIga8Hdxkucw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.39': - resolution: {integrity: sha512-HEswDQyxUtadoZ/bJsPPENHg7R0Lzym5LuMksJeHvqhCOpP+rtkDLKI4/ZChH4w3cf5kG8n6bZuI8PzajoiqMg==} + '@aws-sdk/credential-provider-env@3.972.40': + resolution: {integrity: sha512-jjT0p0Y7KZtcvExYiPCLJnqM9lkXDV1KBEg/13OE2DXv/9batzlyJHVKUEnRNJccY0O2Sul17E1su38CgdBhGQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.34': - resolution: {integrity: sha512-T3IFs4EVmVi1dVN5RciFnklCANSzvrQd/VuHY9ThHSQmYkTogjcGkoJEr+oNUPQZnso52183088NqysMPji1/Q==} + '@aws-sdk/credential-provider-http@3.972.41': + resolution: {integrity: sha512-IA3CQTjtJkb6u1H4mE4936c8OPBMa9Jggtwe8U2Mqw/vvb/tZ5Ebd0mcZcX0uKWQhOyYo/+qNIwkV5Xh+FeJJA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.38': - resolution: {integrity: sha512-5ZxG+t0+3Q3QPh8KEjX6syskhgNf7I0MN7oGioTf6Lm1NTjfP7sIcYGNsthXC2qR8vcD3edNZwCr2ovfSSWuRA==} + '@aws-sdk/credential-provider-http@3.972.42': + resolution: {integrity: sha512-+3fsKtWybe5BjKEUA3/07oh7Ayfd82IED2+gyyaVfS/4PU78E3TaOQxSGOJ1t7Imefoidw/ne9QA7apX8wEnJg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.38': - resolution: {integrity: sha512-lYHFF30DGI20jZcYX8cm6Ns0V7f1dDN6g/MBDLTyD/5iw+bXs3yBr2iAiHDkx4RFU5JgsnZvCHYKiRVPRdmOgw==} + '@aws-sdk/credential-provider-ini@3.972.43': + resolution: {integrity: sha512-4mzII+3mZEVXXE1xzrLQrCJL7/r62A63bA6SVzZoNL5rqCJghpf+xgGltVrIBBs0n+mOZBKrQl2tRREtvZ5l6A==} engines: {node: '>=20.0.0'} - '@aws-sdk/eventstream-handler-node@3.972.14': - resolution: {integrity: sha512-m4X56gxG76/CKfxNVbOFuYwnAZcHgS6HOH8lgp15HoGHIAVTcZfZrXvcYzJFOMLEJgVn+JHBu6EiNV+xSNXXFg==} + '@aws-sdk/credential-provider-ini@3.972.44': + resolution: {integrity: sha512-gZFw5wBefCIPg9vpT+gV5FdhfNKhYTVDZa1IsZCcn3SRoYUOJ/E05vwIogkJoonqBL0ttBGi5vhthX7xceekRg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-eventstream@3.972.10': - resolution: {integrity: sha512-QUqLs7Af1II9X4fCRAu+EGHG3KHyOp4RkuLhRKoA3NuFlh6TL8i+zXBl8w2LUxqm44B/Kom45hgSlwA1SpTsXQ==} + '@aws-sdk/credential-provider-login@3.972.43': + resolution: {integrity: sha512-HG7kQCwXtbv3oBV61Ins0oNX8KKyvrMqqRkb6ZiAfQHbMuHaiNaEb2KnpKLPkNpqImSBK82UkVE/kaY6IfWikA==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-host-header@3.972.10': - resolution: {integrity: sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg==} + '@aws-sdk/credential-provider-login@3.972.44': + resolution: {integrity: sha512-QqEGHfQeZgUDqh7zpqHufrZ8T644ELEWvB+4gUdewLyRw4IRF+6CJqeQuRWqucZdQzoQeMh7fNAD9BWxFAdNig==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-logger@3.972.10': - resolution: {integrity: sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==} + '@aws-sdk/credential-provider-node@3.972.44': + resolution: {integrity: sha512-sDaBIT0yrNNIPfvlsiTCmANm07zKju+ipWODjEXgZlsjMeIJR3LVp7RDyAOzUoAsTbDfYKDWp+i5WrFiQP6rmQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-recursion-detection@3.972.11': - resolution: {integrity: sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ==} + '@aws-sdk/credential-provider-node@3.972.45': + resolution: {integrity: sha512-3YCv52ExXIRz3LAVNysevd+s7akSpg9dl39v9LJ7dOQH+s5rHi3jMZYQyxwMmglxQGMuzYRfQ0o1VSP2UOlIRw==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.37': - resolution: {integrity: sha512-Km7M+i8DrLArVzrid1gfxeGhYHBd3uxvE77g0s5a52zPSVosxzQBnJ0gwWb6NIp/DOk8gsBMhi7V+cpJG0ndTA==} + '@aws-sdk/credential-provider-process@3.972.39': + resolution: {integrity: sha512-2k/amBifLd75eXNwgvPw/2lKYSQ3NhvHQgkVKVjfUq13/eJ3JRtHmznuFenn74OK3sSfp4SMy1YB2w+UVXoKqA==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.38': - resolution: {integrity: sha512-iz+B29TXcAZsJpwB+AwG/TTGA5l/VnmMZ2UxtiySOZjI6gCdmviXPwdgzcmuazMy16rXoPY4mYCGe7zdNKfx5A==} + '@aws-sdk/credential-provider-process@3.972.40': + resolution: {integrity: sha512-cXaozlgJCOwmE6D7x4npcPdyk7kiFZdrGjN3D6tXXtItJJMNGPafDfAJn4YQmciMooG/X+b0Y6RTqdVVMx26jg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-websocket@3.972.16': - resolution: {integrity: sha512-86+S9oCyRVGzoMRpQhxkArp7kD2K75GPmaNevd9B6EyNhWoNvnCZZ3WbgN4j7ZT+jvtvBCGZvI2XHsWZJ+BRIg==} - engines: {node: '>= 14.0.0'} + '@aws-sdk/credential-provider-sso@3.972.43': + resolution: {integrity: sha512-LPc3+Y4vhH1T4x6CMqwCM6hk5+SRf/Lwmgm8INm95wxTtIRHcMwQUVkDzWu4Iw/RSncxYM2BC01OrYbxOPZvyg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-sso@3.972.44': + resolution: {integrity: sha512-YePoj5kQuPmE0MHnyftXCfsO8ZSBd2kDr50XEIUrdejSbGFlayYvUuCohdb8drhGhPm6b65o7H1eC26EZhwUvA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.972.43': + resolution: {integrity: sha512-wQtL34lUD/09VXjwAUo2T+I3aEXRDxMB3DKmTJL/Zj0Gi6sLDTrVhae1XVt01yzkquOWajI/sZW72JGDZ1ciTw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.972.44': + resolution: {integrity: sha512-Ys/JJe++8Z2Y5meR1taMBaVcrGBA0/XsVTQR+qOKZbdNyg+8Jlv5rYZSwh8SqEHY00goSOZy7PHzZ2rLNQxDLg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-providers@3.1054.0': + resolution: {integrity: sha512-/tK0QmOL1vUqOgqRMLTJlvHRAp+7GTfdPgrfgD5T0WBmExdlaFsVwzR7mUQlmYoY8mExqoRH4UEt2I3snsMLrg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/eventstream-handler-node@3.972.17': + resolution: {integrity: sha512-WFwdNcjchKZr7jKYgGimUZO8sSKQF/le7GGqgeCzz/lHozInE6b0gFJ1YMr8NaIeAoWJwgtrF7RE4/qMgosAdQ==} + engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.997.6': - resolution: {integrity: sha512-WBDnqatJl+kGObpfmfSxqnXeYTu3Me8wx8WCtvoxX3pfWrrTv8I4WTMSSs7PZqcRcVh8WeUKMgGFjMG+52SR1w==} + '@aws-sdk/middleware-eventstream@3.972.13': + resolution: {integrity: sha512-ECfsw7mf6G/sxNbKbGE3/h1xeIArY/yRI1IjDGYkLgDIankh+aDOtDRSr40LVlIHGL9+jEH1cVuxmbJ8NLL/1A==} engines: {node: '>=20.0.0'} - '@aws-sdk/region-config-resolver@3.972.13': - resolution: {integrity: sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A==} + '@aws-sdk/middleware-websocket@3.972.21': + resolution: {integrity: sha512-yr+5+C7v9R55sAJ89A55Wrm7wIKPVn5cm6J3Hztnd5s/iwEUKxyJqCnIxJu4fVXgG9XBQD1Jc4rsWC1ozahJjA==} + engines: {node: '>= 14.0.0'} + + '@aws-sdk/nested-clients@3.997.11': + resolution: {integrity: sha512-nWXXJ1r/r8N2Gw1pWolRgED38/A9A8DHR2ETWIv220zh4PZHcybbR4hUVWWktmNXTRHzDJwRluapHn0rZxuoqA==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.996.25': - resolution: {integrity: sha512-+CMIt3e1VzlklAECmG+DtP1sV8iKq25FuA0OKpnJ4KA0kxUtd7CgClY7/RU6VzJBQwbN4EJ9Ue6plvqx1qGadw==} + '@aws-sdk/nested-clients@3.997.12': + resolution: {integrity: sha512-Js2VYaCM269feB0cs0cGmlIhdOgT9aMqzdBx68lCy6kVCYfzr0T36ovUFDvfUmatkuBeyBJhCwaLBh7P8meH5Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1041.0': - resolution: {integrity: sha512-Th7kPI6YPtvJUcdznooXJMy+9rQWjmEF81LxaJssngBzuysK4a/x+l8kjm1zb7nYsUPbndnBdUnwng/3PLvtGw==} + '@aws-sdk/signature-v4-multi-region@3.996.28': + resolution: {integrity: sha512-qs9z5LqXO/CZC2Lg9SGKpoLU8Rhi+m2pFKZqfO9pytX1clc0katqtsDNupJxFy0xT9wsZSPzM2v1y+/H/zfp5Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1045.0': - resolution: {integrity: sha512-/o4qcty0DmQola0DBniRVeBakYY6ALOvKEFo1AtJpTmMn/cJ+Fk3RWGe5ieT/f/eYbHG9k5E7poKge/E+WGv4Q==} + '@aws-sdk/signature-v4-multi-region@3.996.29': + resolution: {integrity: sha512-Few9FoQqOt/0KSvZYP+qdW0dfOhfQ9N+gl2UUDvCPW6mkPKHli9LMbKxWj+wZ5zKPaOoqxuR3Hhy3OTpndkfSw==} engines: {node: '>=20.0.0'} - '@aws-sdk/types@3.973.8': - resolution: {integrity: sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==} + '@aws-sdk/token-providers@3.1048.0': + resolution: {integrity: sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-arn-parser@3.972.3': - resolution: {integrity: sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==} + '@aws-sdk/token-providers@3.1052.0': + resolution: {integrity: sha512-QqZNB3so7UIDxZtroc85TQaLVxdZRFm0eWM1CSR2N+b06as9TOrilvrlTZuj3guYlxMs6yLOgGxnklJ5qMYtTw==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-endpoints@3.996.8': - resolution: {integrity: sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g==} + '@aws-sdk/token-providers@3.1054.0': + resolution: {integrity: sha512-hG9YKApmZOw+drJ9Nuoaf/OvC8e5W1+3eoLeN5p2uVCZRWsv27teIS0b4kiH6Sfv3WMmamqYJxmE2WMwyp/L/A==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-format-url@3.972.10': - resolution: {integrity: sha512-DEKiHNJVtNxdyTeQspzY+15Po/kHm6sF0Cs4HV9Q2+lplB63+DrvdeiSoOSdWEWAoO2RcY1veoXVDz2tWxWCgQ==} + '@aws-sdk/types@3.973.9': + resolution: {integrity: sha512-kuBfgQVdcz5Bmapc4A13YbpVw/pXkesfhetcFYwbntqas8sF41OHyd4o28+/TG2ZQdHBsv90Lsu5y6oitvYCdg==} engines: {node: '>=20.0.0'} '@aws-sdk/util-locate-window@3.965.5': resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-user-agent-browser@3.972.10': - resolution: {integrity: sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g==} - - '@aws-sdk/util-user-agent-node@3.973.24': - resolution: {integrity: sha512-ZWwlkjcIp7cEL8ZfTpTAPNkwx25p7xol0xlKoWVVf22+nsjwmLcHYtTPjIV1cSpmB/b6DaK4cb1fSkvCXHgRdw==} + '@aws-sdk/xml-builder@3.972.25': + resolution: {integrity: sha512-GH+Kjz4nPKWKHnsiQpnhP1MJdTGIcK4rAka6tzakgjjUkVgNsmPeEbbRAf09SzS1hjGu6duGHCBsxYke0BhHjQ==} engines: {node: '>=20.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - '@aws-sdk/xml-builder@3.972.22': - resolution: {integrity: sha512-PMYKKtJd70IsSG0yHrdAbxBr+ZWBKLvzFZfD3/urxgf6hXVMzuU5M+3MJ5G67RpOmLBu1fAUN65SbWuKUCOlAA==} + '@aws-sdk/xml-builder@3.972.26': + resolution: {integrity: sha512-cDbrqvDS73whl6YAPSPq0U6whzG6UWI9PuWh0wrUuGoZexhWEqhdunbukV7iBoaWnFV1AODutM5hOD6rtn439g==} engines: {node: '>=20.0.0'} '@aws/lambda-invoke-store@0.2.4': resolution: {integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==} engines: {node: '>=18.0.0'} - '@babel/runtime@7.29.2': - resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/runtime@7.29.7': resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} - '@borewit/text-codec@0.2.2': - resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@capsizecss/unpack@4.0.0': + resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==} + engines: {node: '>=18'} '@changesets/apply-release-plan@7.1.1': resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} @@ -638,23 +534,141 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - '@earendil-works/pi-agent-core@0.74.0': - resolution: {integrity: sha512-6GMR7/wwjEJ1EsXLWEz03QOWin4AMrJ/AZoMpgm5DJ6GHsF6q6GOhQbj5Zip4dow3vo/TmBAVqM+vmGfrjGAFQ==} - engines: {node: '>=20.0.0'} + '@clack/core@1.3.1': + resolution: {integrity: sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==} + engines: {node: '>= 20.12.0'} - '@earendil-works/pi-ai@0.74.0': - resolution: {integrity: sha512-7M7qcrZY/KEkH4wFkX3eqzvmKru4O88wezNKoN0KD2m4aAOmp9tdW2xCmUgSTSWlKB7b2Xw9QtAgrzHtg6t6iw==} - engines: {node: '>=20.0.0'} + '@clack/prompts@1.4.0': + resolution: {integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==} + engines: {node: '>= 20.12.0'} + + '@cloudflare/kv-asset-handler@0.5.0': + resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} + engines: {node: '>=22.0.0'} + + '@cloudflare/unenv-preset@2.16.1': + resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} + peerDependencies: + unenv: 2.0.0-rc.24 + workerd: '>1.20260305.0 <2.0.0-0' + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/unenv-preset@2.7.7': + resolution: {integrity: sha512-HtZuh166y0Olbj9bqqySckz0Rw9uHjggJeoGbDx5x+sgezBXlxO6tQSig2RZw5tgObF8mWI8zaPvQMkQZtAODw==} + peerDependencies: + unenv: 2.0.0-rc.21 + workerd: ^1.20250927.0 + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/workerd-darwin-64@1.20260424.1': + resolution: {integrity: sha512-yFR1XaJbSDLg/qbwtrYaU2xwFXatIPKR5nrMQCN1q/m6+Qe/j6r+kCnFEvOJjMZOm9iCKsE6Qly5clgl4u32qw==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-64@1.20260526.1': + resolution: {integrity: sha512-/pR3GH3gfv0PUp7DjI8v0aAIDOqFwibq4bg5xT7TZgcVdBV/cJQWckdXCMqiRtHiawLwogUX00EIOINkYJ1Zqg==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20260424.1': + resolution: {integrity: sha512-LqWKcE7x/9KyC2iQvKPeb20hKST3dYXDZlYTvFymgR1DfLS0OFOCzVGTloVNd7WqvK4SkdzBYfxo7QMIAeBK0w==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20260526.1': + resolution: {integrity: sha512-rcyu0iANYfaiezKh3Mcao1O4IIgVfQldxduiL5TZT1sP0NIeRY4YReSTrzPxNnXxSYaIqaqRHMcHbUM/ic4knA==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20260424.1': + resolution: {integrity: sha512-YlEBFbAYZHe/ylzl8WEYQEU/jr+0XMqXaST2oBk5oVjksdb1NGuJaggluCdZAzuJJ8UqdTmyhY5u/qrasbiFWA==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-64@1.20260526.1': + resolution: {integrity: sha512-5EZAEnlLwa9oGJRo8Nd3iY5Wcd9ROGNNG90xNIGp8MEjj8v2jTn42NC47fCZKFdnLj3+S+vWEhu1x0GVJnALjA==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20260424.1': + resolution: {integrity: sha512-qJ0X0m6cL8fWDUPDg8K4IxYZXNJI6XbeOihqjnqKbAClrjdPDn8VUSd+z2XiCQ5NylMtMrpa/skC9UfaR6mh8g==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20260526.1': + resolution: {integrity: sha512-X/YBQXeXFeCN7QTStoWrATEBc9WKl7PIqkw/dQkjyJ72gh3rkLe0+Xkzp3wO7gtxTDQMa7NPGy1W4+sdMf8q1g==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20260424.1': + resolution: {integrity: sha512-tZ7Z9qmYNAP6z1/+8r/zKbk8F8DZmpmwNzMeN+zkde2Wnhfr3FBqOkJXT/5zmli8HPoWrIXxSiyqcNDMy8V2Zg==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cloudflare/workerd-windows-64@1.20260526.1': + resolution: {integrity: sha512-R+tqpFFdcfZIljx8fIW9rj9fRTtDgfoA2yonsfAGa6e8snrmr+38mdFHtkRC0D3UyZpn/hOtmXiUBfdX2gMR7Q==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cloudflare/workers-types@4.20260526.1': + resolution: {integrity: sha512-pQZBjD7p6C5R1ZPkSywA2yiZnL/LVfqdPKLQLdbEItro4ekmMuGXQv72vHkHIT3GeZmEgZktMA0JoWn2fBKmXw==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@earendil-works/pi-agent-core@0.75.5': + resolution: {integrity: sha512-LHygOgsW2pgXKb3IkXkOAeZPovHr9VF+EixgXVsDNuB4jmhEOXgshy/zksZ7slkUAx10OQ9W1Ed/2jsnhd1NqA==} + engines: {node: '>=22.19.0'} + + '@earendil-works/pi-ai@0.75.5': + resolution: {integrity: sha512-zf1F5kXk1pqZeFShXOqq9ibUk8QdtRoLCDPAjO+hj44e3EUs9/GFO2qnhTC5+JA2uwVCx+WCNe1PiCjlBYWm5w==} + engines: {node: '>=22.19.0'} hasBin: true - '@earendil-works/pi-coding-agent@0.74.0': - resolution: {integrity: sha512-Q5GikbB5vRBrsrrf/uvet53rPSQ1sn5I5mO+l7sIobdXYpS04/X2oOc2UHFm90fNdkl3yU+ANTZL0zOtHbnqRw==} - engines: {node: '>=20.6.0'} + '@earendil-works/pi-coding-agent@0.75.5': + resolution: {integrity: sha512-O3CCQDYy28D4uwtP6zZkdEwzHN6X22v49Sb0+SZTC7x37V/YfmogrWPiaFoWeoc2hmdKhSATI7ZAK5bQbJG5NA==} + engines: {node: '>=22.19.0'} hasBin: true - '@earendil-works/pi-tui@0.74.0': - resolution: {integrity: sha512-1aIfXZp7D/z+1VlZX8BZcs6pgO8rjmil7kwyhctNDsWvce3Yfl8GVgu4eq+I0Mjhr8Cj+ipBiv9CLIzdoyCOIQ==} - engines: {node: '>=20.0.0'} + '@earendil-works/pi-tui@0.75.5': + resolution: {integrity: sha512-LkXUM1/49pvzzeI39Y5wjBMlgafcCf67HCLhB9Z7yuXHy4XgT+VqxWcZVW5hBdhQsHZd0znjJotfGH1BzxMfiA==} + engines: {node: '>=22.19.0'} + + '@emmetio/abbreviation@2.3.3': + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} + + '@emmetio/css-abbreviation@2.1.8': + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} + + '@emmetio/css-parser@0.4.1': + resolution: {integrity: sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==} + + '@emmetio/html-matcher@1.3.0': + resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} + + '@emmetio/scanner@1.0.4': + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} + + '@emmetio/stream-reader-utils@0.1.0': + resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} + + '@emmetio/stream-reader@2.2.0': + resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -665,156 +679,624 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.28.0': resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.28.0': - resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.28.0': - resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] os: [android] - '@esbuild/android-x64@0.28.0': - resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.28.0': + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.28.0': + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.28.0': + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.28.0': resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.28.0': resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.28.0': resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.28.0': resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.28.0': resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.28.0': resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.28.0': resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.28.0': resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.28.0': resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.28.0': resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.28.0': resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.28.0': resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.28.0': resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.28.0': resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.28.0': resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.28.0': resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.28.0': resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.28.0': resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.28.0': resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.28.0': resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.28.0': resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.28.0': resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} engines: {node: '>=18'} @@ -850,6 +1332,162 @@ packages: peerDependencies: hono: ^4 + '@iarna/toml@2.2.5': + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -859,81 +1497,101 @@ packages: '@types/node': optional: true + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@mariozechner/clipboard-darwin-arm64@0.3.2': - resolution: {integrity: sha512-uBf6K7Je1ihsgvmWxA8UCGCeI+nbRVRXoarZdLjl6slz94Zs1tNKFZqx7aCI5O1i3e0B6ja82zZ06BWrl0MCVw==} + '@mariozechner/clipboard-darwin-arm64@0.3.6': + resolution: {integrity: sha512-HjaisYCAbHi/1+N1yDAQHc8ZXGffufIUT5NSOSVR3f3AuMDusxTtnbK8tZ7JFDkShua1oNGZoNwQHsc8MPtE0Q==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@mariozechner/clipboard-darwin-universal@0.3.2': - resolution: {integrity: sha512-mxSheKTW2U9LsBdXy0SdmdCAE5HqNS9QUmpNHLnfJ+SsbFKALjEZc5oRrVMXxGQSirDvYf5bjmRyT0QYYonnlg==} + '@mariozechner/clipboard-darwin-universal@0.3.6': + resolution: {integrity: sha512-8BWtPjOtJOJoykml3w0fx0zRrfWP31mXrJwfoA7xzNprkZw1uolCNfgmjDiVBseoKjp16EGITz7bN+61qn8dWA==} engines: {node: '>= 10'} os: [darwin] - '@mariozechner/clipboard-darwin-x64@0.3.2': - resolution: {integrity: sha512-U1BcVEoidvwIp95+HJswSW+xr28EQiHR7rZjH6pn8Sja5yO4Yoe3yCN0Zm8Lo72BbSOK/fTSq0je7CJpaPCspg==} + '@mariozechner/clipboard-darwin-x64@0.3.6': + resolution: {integrity: sha512-p9syiZD1kU4I+1ya7f7g+zD1GiUvR8fdlRlNmgsZNWlyjtc8rlV2EjTLd/35x1LsdBq020GVvtzp0ZmPgBI09Q==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@mariozechner/clipboard-linux-arm64-gnu@0.3.2': - resolution: {integrity: sha512-BsinwG3yWTIjdgNCxsFlip7LkfwPk+ruw/aFCXHUg/fb5XC/Ksp+YMQ7u0LUtiKzIv/7LMXgZInJQH6gxbAaqQ==} + '@mariozechner/clipboard-linux-arm64-gnu@0.3.6': + resolution: {integrity: sha512-5JFf5rGofrm+V29HNF+wLthXphHdQpMbKDUYJ5tML6/Z5DLlLOV/9Ak4kDPtYyZ+Dzf+kAusE0VsFg4+tfP1IA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@mariozechner/clipboard-linux-arm64-musl@0.3.2': - resolution: {integrity: sha512-0/Gi5Xq2V6goXBop19ePoHvXsmJD9SzFlO3S+d6+T2b+BlPcpOu3Oa0wTjl+cZrLAAEzA86aPNBI+VVAFDFPKw==} + '@mariozechner/clipboard-linux-arm64-musl@0.3.6': + resolution: {integrity: sha512-JlVjxxw0GbGC0djXYWRIqyteO3J1KZ/QG3udlEFaOD5TLOM1FnmXXAPDQBqr+aBVr720ef9K00dirYnJ0LDCtw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@mariozechner/clipboard-linux-riscv64-gnu@0.3.2': - resolution: {integrity: sha512-2AFFiXB24qf0zOZsxI1GJGb9wQGlOJyN6UwoXqmKS3dpQi/l6ix30IzDDA4c4ZcCcx4D+9HLYXhC1w7Sov8pXA==} + '@mariozechner/clipboard-linux-riscv64-gnu@0.3.6': + resolution: {integrity: sha512-4t8BUi5zZ+L77otFQVnVSlaTyAX4TVk9EqQm4syMrEQp96trFEHEwwNHcNEBGzYv5+K7mxay50TthYkz47OWzQ==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] libc: [glibc] - '@mariozechner/clipboard-linux-x64-gnu@0.3.2': - resolution: {integrity: sha512-v6fVnsn7WMGg73Dab8QMwyFce7tzGfgEixKgzLP8f1GJqkJZi5zO4k4FOHzSgUufgLil63gnxvMpjWkgfeQN7A==} + '@mariozechner/clipboard-linux-x64-gnu@0.3.6': + resolution: {integrity: sha512-trtPwcNLW37irwQCJLtCxLw757jjJZk3TSnY/MU9bhtWtA3K9b/eLW0e4RGhUXDoFRds9opNWWaUDuFLa8dm0w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@mariozechner/clipboard-linux-x64-musl@0.3.2': - resolution: {integrity: sha512-xVUtnoMQ8v2JVyfJLKKXACA6avdnchdbBkTsZs8BgJQo29qwCp5NIHAUO8gbJ40iaEGToW5RlmVk2M9V0HsHEw==} + '@mariozechner/clipboard-linux-x64-musl@0.3.6': + resolution: {integrity: sha512-WfnzIvOCCWQiN0MmltCEo6cLceUDbYe+I7xyFZjaps5A+2Op/M2CY7Rey+C4ucQhrvmpoHmTSFgY9ODWk7snoA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@mariozechner/clipboard-win32-arm64-msvc@0.3.2': - resolution: {integrity: sha512-AEgg95TNi8TGgak2wSXZkXKCvAUTjWoU1Pqb0ON7JHrX78p616XUFNTJohtIon3e0w6k0pYPZeCuqRCza/Tqeg==} + '@mariozechner/clipboard-win32-arm64-msvc@0.3.6': + resolution: {integrity: sha512-+8+1aHYsBPUjmW3otmWlg+Hijt0iJvoBBs5e0mxFeUd4gDaKMB8Bn6x7c6KVtscg7E5j5NFXnwQqNSIAO4p8zQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@mariozechner/clipboard-win32-x64-msvc@0.3.2': - resolution: {integrity: sha512-tGRuYpZwDOD7HBrCpyRuhGnHHSCknELvqwKKUG4JSfSB7JIU7LKRh6zx6fMUOQd8uISK35TjFg5UcNih+vJhFA==} + '@mariozechner/clipboard-win32-x64-msvc@0.3.6': + resolution: {integrity: sha512-S4xfPmERC8ZkiLHe3vekZCjdDwNEETCuvCgQK2kP6/TnvmUkq1y2Pk+DjM4t8uh9KMX9bH4zs5ePcKa8GTXmfg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@mariozechner/clipboard@0.3.5': - resolution: {integrity: sha512-D3F+UrU9CR7roJt0zDLp6Oc+4/KlLDIrN4frH+6V90SJNW2KKUec1oCQIPaaDjCqeOsQyX9dyqYbImIQIM45PA==} + '@mariozechner/clipboard@0.3.6': + resolution: {integrity: sha512-MXdtr+6+ntlIVHdrZYuZNQydu6o8yZswFJ2Ln81j2O/Y9B/LDHvEaIm95xWNPkjGTWriSOeLnQJRFs6dYb60bg==} engines: {node: '>= 10'} '@mistralai/mistralai@2.2.1': @@ -949,33 +1607,33 @@ packages: '@cfworker/json-schema': optional: true - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': - resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': + resolution: {integrity: sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==} cpu: [arm64] os: [darwin] - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': - resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': + resolution: {integrity: sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==} cpu: [x64] os: [darwin] - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': - resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': + resolution: {integrity: sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==} cpu: [arm64] os: [linux] - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': - resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': + resolution: {integrity: sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==} cpu: [arm] os: [linux] - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': - resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': + resolution: {integrity: sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==} cpu: [x64] os: [linux] - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': - resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': + resolution: {integrity: sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==} cpu: [x64] os: [win32] @@ -1000,12 +1658,70 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@opencode-ai/plugin@1.14.48': - resolution: {integrity: sha512-pb2ywByzn4i35WWJquEYyb8lDC/ph1PLXT+heucJN6Y9U/oeSw98JQV93IG7M6BUBks6MKD3DGDJdQfyD6x0rA==} + '@octokit/auth-token@5.1.2': + resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} + engines: {node: '>= 18'} + + '@octokit/core@6.1.6': + resolution: {integrity: sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==} + engines: {node: '>= 18'} + + '@octokit/endpoint@10.1.4': + resolution: {integrity: sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==} + engines: {node: '>= 18'} + + '@octokit/graphql@8.2.2': + resolution: {integrity: sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@24.2.0': + resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} + + '@octokit/openapi-types@25.1.0': + resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} + + '@octokit/plugin-paginate-rest@11.6.0': + resolution: {integrity: sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-request-log@5.3.1': + resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-rest-endpoint-methods@13.5.0': + resolution: {integrity: sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==} + engines: {node: '>= 18'} peerDependencies: - '@opentui/core': '>=0.2.6' - '@opentui/keymap': '>=0.2.6' - '@opentui/solid': '>=0.2.6' + '@octokit/core': '>=6' + + '@octokit/request-error@6.1.8': + resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==} + engines: {node: '>= 18'} + + '@octokit/request@9.2.4': + resolution: {integrity: sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==} + engines: {node: '>= 18'} + + '@octokit/rest@21.1.1': + resolution: {integrity: sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==} + engines: {node: '>= 18'} + + '@octokit/types@13.10.0': + resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} + + '@octokit/types@14.1.0': + resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} + + '@opencode-ai/plugin@1.15.10': + resolution: {integrity: sha512-V2p7CvpBtKWB+FID7Dl1y0Ci02zUT40A9b2RD9R9BOiuD8ZcKhHWov+irN0xVJA0Eg6OhEBfA0lPKRn1FNKPlw==} + peerDependencies: + '@opentui/core': '>=0.2.15' + '@opentui/keymap': '>=0.2.15' + '@opentui/solid': '>=0.2.15' peerDependenciesMeta: '@opentui/core': optional: true @@ -1014,14 +1730,14 @@ packages: '@opentui/solid': optional: true - '@opencode-ai/sdk@1.14.48': - resolution: {integrity: sha512-wKM86jCzV/ZApyWrdm3uP8XdWcS0LMbu3FV+OWz1ChiGGg1wiIWNGMJs5CY8/QX2/rUuZrd1Q1DqvdamZ0zLeg==} + '@opencode-ai/sdk@1.15.10': + resolution: {integrity: sha512-CUhpmMGGOqzvPnNNjjWmEIodAfP6Qnuki2ChIUKWYF7UImZ4zUcMZnzO5BtUxu/Ni1P8qzWxDioXs+7aIZQEhA==} - '@oxc-project/types@0.128.0': - resolution: {integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==} + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} - '@oxc-project/types@0.132.0': - resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} '@oxfmt/binding-android-arm-eabi@0.52.0': resolution: {integrity: sha512-17EMSJnQ9g+upVHrAUYDMfH5lvRKQ9Nvg8WtEoH72oDr1VpWz+7/o3tD97U1EToen2YAQ/68JmtDYkQUi20dfQ==} @@ -1267,6 +1983,19 @@ packages: cpu: [x64] os: [win32] + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} + + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} + + '@poppinss/exception@1.2.3': + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -1276,17 +2005,17 @@ packages: '@protobufjs/codegen@2.0.5': resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + '@protobufjs/eventemitter@1.1.1': + resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + '@protobufjs/fetch@1.1.1': + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} '@protobufjs/float@1.0.2': resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - '@protobufjs/inquire@1.1.1': - resolution: {integrity: sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==} + '@protobufjs/inquire@1.1.2': + resolution: {integrity: sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==} '@protobufjs/path@1.1.2': resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} @@ -1297,378 +2026,439 @@ packages: '@protobufjs/utf8@1.1.1': resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} - '@rolldown/binding-android-arm64@1.0.0-rc.18': - resolution: {integrity: sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + '@rolldown/binding-android-arm64@1.0.3': + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.3': + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.3': + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.3': + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.3': + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.3': + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.3': + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.60.4': + resolution: {integrity: sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==} + cpu: [arm] os: [android] - '@rolldown/binding-android-arm64@1.0.2': - resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-android-arm64@4.60.4': + resolution: {integrity: sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.18': - resolution: {integrity: sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-arm64@1.0.2': - resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-darwin-arm64@4.60.4': + resolution: {integrity: sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.18': - resolution: {integrity: sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.2': - resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-darwin-x64@4.60.4': + resolution: {integrity: sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.18': - resolution: {integrity: sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + '@rollup/rollup-freebsd-arm64@4.60.4': + resolution: {integrity: sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==} + cpu: [arm64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.2': - resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-freebsd-x64@4.60.4': + resolution: {integrity: sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18': - resolution: {integrity: sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-arm-gnueabihf@4.60.4': + resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} cpu: [arm] os: [linux] + libc: [glibc] - '@rolldown/binding-linux-arm-gnueabihf@1.0.2': - resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-arm-musleabihf@4.60.4': + resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} cpu: [arm] os: [linux] + libc: [musl] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18': - resolution: {integrity: sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-arm64-gnu@4.60.4': + resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.0.2': - resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-arm64-musl@4.60.4': + resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} cpu: [arm64] os: [linux] - libc: [glibc] + libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18': - resolution: {integrity: sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + '@rollup/rollup-linux-loong64-gnu@4.60.4': + resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} + cpu: [loong64] os: [linux] - libc: [musl] + libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.2': - resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + '@rollup/rollup-linux-loong64-musl@4.60.4': + resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} + cpu: [loong64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18': - resolution: {integrity: sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-ppc64-gnu@4.60.4': + resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.0.2': - resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-ppc64-musl@4.60.4': + resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} cpu: [ppc64] os: [linux] - libc: [glibc] + libc: [musl] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18': - resolution: {integrity: sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] + '@rollup/rollup-linux-riscv64-gnu@4.60.4': + resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} + cpu: [riscv64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.2': - resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] + '@rollup/rollup-linux-riscv64-musl@4.60.4': + resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} + cpu: [riscv64] os: [linux] - libc: [glibc] + libc: [musl] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18': - resolution: {integrity: sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + '@rollup/rollup-linux-s390x-gnu@4.60.4': + resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} + cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.2': - resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-x64-gnu@4.60.4': + resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.18': - resolution: {integrity: sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-x64-musl@4.60.4': + resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-musl@1.0.2': - resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-openbsd-x64@4.60.4': + resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} cpu: [x64] - os: [linux] - libc: [musl] - - '@rolldown/binding-openharmony-arm64@1.0.0-rc.18': - resolution: {integrity: sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] + os: [openbsd] - '@rolldown/binding-openharmony-arm64@1.0.2': - resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-openharmony-arm64@4.60.4': + resolution: {integrity: sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.18': - resolution: {integrity: sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-wasm32-wasi@1.0.2': - resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18': - resolution: {integrity: sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-win32-arm64-msvc@4.60.4': + resolution: {integrity: sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.2': - resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + '@rollup/rollup-win32-ia32-msvc@4.60.4': + resolution: {integrity: sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==} + cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18': - resolution: {integrity: sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-win32-x64-gnu@4.60.4': + resolution: {integrity: sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==} cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.2': - resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-win32-x64-msvc@4.60.4': + resolution: {integrity: sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.18': - resolution: {integrity: sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@rolldown/pluginutils@1.0.1': - resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@shikijs/core@4.1.0': + resolution: {integrity: sha512-jLJtSJeuFffqX6/inRE1zqU5aFv2hrszvYgq3OjbAgFRZiWv7abKMDdQzYxuSDfmUPQozZvI/kuy6VMTvnvqTQ==} + engines: {node: '>=20'} - '@silvia-odwyer/photon-node@0.3.4': - resolution: {integrity: sha512-bnly4BKB3KDTFxrUIcgCLbaeVVS8lrAkri1pEzskpmxu9MdfGQTy8b8EgcD83ywD3RPMsIulY8xJH5Awa+t9fA==} + '@shikijs/engine-javascript@4.1.0': + resolution: {integrity: sha512-YquhawCUgaBfhsS72e2Y/dI59gCBNPHu3fEO/tvLaXrTssxZrY5ddjtNLTwndrMgPo8b3IscE+xoICDzpTmlFQ==} + engines: {node: '>=20'} - '@smithy/config-resolver@4.5.1': - resolution: {integrity: sha512-abXk3LhODsvRHsk0ZS9ztrg/fZatTa9Z/z4pgx65YSLR+rY6kvUG/1IgcDKEUciR8MfdnkT5oPeHJTy/HhzDIQ==} - engines: {node: '>=18.0.0'} + '@shikijs/engine-oniguruma@4.1.0': + resolution: {integrity: sha512-axLpjVs45YBvvINa+dJF+NPW+KtFkNXsFr4SDw2BMj9GdeMnGxVB9PQb2xXlJYovslt/nz6giedAyOANkfc7hg==} + engines: {node: '>=20'} - '@smithy/core@3.24.1': - resolution: {integrity: sha512-3mT7o4qQyUWttYnVK3A0Z/u3Xha3E81tXn32Tz6vjZiUXhBrkEivpw1hBYfh84iFF9CSzkBU9Y1DJ3Q6RQ231g==} - engines: {node: '>=18.0.0'} - deprecated: Deprecated due to bug in browser bundling instructions https://github.com/smithy-lang/smithy-typescript/issues/2025 + '@shikijs/langs@4.1.0': + resolution: {integrity: sha512-nwOMruEkbgdZfQ/b8CgpNBVOpvG1k0N5tbmgiFeqsan401+x3ILqlzZJowSla4Agmq4hG2Uf2wh5jLTEhR8VSg==} + engines: {node: '>=20'} - '@smithy/credential-provider-imds@4.3.1': - resolution: {integrity: sha512-0S/acwHnqX4WrjXzhdiDRxsG2s9SC0cpPIK9nZ1R6UOHd+j7uL28+4bHu22urbLk2TVw3fkp6na/+fkUt/pLNQ==} - engines: {node: '>=18.0.0'} + '@shikijs/primitive@4.1.0': + resolution: {integrity: sha512-zx2/2Uwj2q9X3KSyYREEhXO23xBw5WUhP4orK2lE4r+t9JGITmEe0JH+wPmJhqHpOT2bRRs6lAL945+LDvOAGw==} + engines: {node: '>=20'} - '@smithy/eventstream-codec@4.3.1': - resolution: {integrity: sha512-yS8AiJM3Kf7LR+lZyUilUyjdJGksAqxfSC3C9k3d1OCrAvWjpMlsJ+rW9cIslZJM4AtWh2UAqgZUWTtMeMdtDQ==} - engines: {node: '>=18.0.0'} + '@shikijs/themes@4.1.0': + resolution: {integrity: sha512-emCcTnUM7yO2wltYbaxm+yLvcCI4+h8XBKc4KmJ7EZUXoSGjcCHifkI//R4OFit9ewpg7H2/9tjOuXrT2v/Knw==} + engines: {node: '>=20'} - '@smithy/eventstream-serde-browser@4.3.1': - resolution: {integrity: sha512-X7MyI1fu8M84IPKk49kO4kb27Mqp6un9/0o/MsA1ngZ5OxxWKGUxPS3S/AJ9q1cPVTSGmRcbaGNfGUSsflTJkg==} - engines: {node: '>=18.0.0'} + '@shikijs/types@4.1.0': + resolution: {integrity: sha512-3EQWX54fMpniOrDblzAhiwiJwpiTMW6+B9DWyUd9ska483tbayFYuw47UxwuPknI31bKnySfVQ/QW+jFL4rFdA==} + engines: {node: '>=20'} - '@smithy/eventstream-serde-config-resolver@4.4.1': - resolution: {integrity: sha512-JZGbSXaBk7JY8VPzsh66ksJ0nTWXbApduFDkA/pEl3aTm2EoAiUZE1Iltp6c+X1bB8kxPQW0mHDfVdYCpWTOzg==} - engines: {node: '>=18.0.0'} + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@smithy/eventstream-serde-node@4.3.1': - resolution: {integrity: sha512-6Cn4xTNVxn9PWTHSbvf8zmcDhQW8lrLE1Xq5CJgmX6wEvdjS2S0KuE79Aiznv/jx51jpFJ98OuWyE+Bt+oG1MQ==} - engines: {node: '>=18.0.0'} + '@silvia-odwyer/photon-node@0.3.4': + resolution: {integrity: sha512-bnly4BKB3KDTFxrUIcgCLbaeVVS8lrAkri1pEzskpmxu9MdfGQTy8b8EgcD83ywD3RPMsIulY8xJH5Awa+t9fA==} + + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} + engines: {node: '>=18'} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} - '@smithy/fetch-http-handler@5.4.1': - resolution: {integrity: sha512-r7bN6spQ+caZC8AnyvSxkRUb57zt2jhhRw3Z+2Ez8hjq6coIikDBFUUI/+CQ1xx9K6eX1Gx6wUKo4ylU66TIqw==} + '@smithy/core@3.24.4': + resolution: {integrity: sha512-3UNRKEyQyAgVgM0LGlerCLm+ChZWZ1GPfde+jBEW6bm6bSBGU1p0EbblaUV3unbhwvidjLA5Zs3sOs7mnZwvAw==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.3.1': - resolution: {integrity: sha512-u0/zo11mg7yNneoYgTkH4sXwSmcBpbl49o4UNCtQ7hYsXxynsN25KYHmXzqi7TPk5HQL5klGnpU5koOY0O+9hw==} + '@smithy/credential-provider-imds@4.3.4': + resolution: {integrity: sha512-vKW0MEFRU4Y3MkVZUkpJm+g9qyPGLCXhc0YLggUdSdBB4g7IaSSsCE75P9rBXyWHrXY1UYSQUl8/DwsTR7QciA==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.3.1': - resolution: {integrity: sha512-cLmwtDoulyZvRepAfyV+3rx5oMvuh51dbE+6En3vGC09j3uVSRt1U4oguNu32ub3soGX0oYtBs8E7S2Q4SxTqg==} + '@smithy/fetch-http-handler@5.4.4': + resolution: {integrity: sha512-qM7AUKI4G6d7lNgaZD3lA1tWSolh5r6gcixfTZAPstVURfjIbvreVTPz+994M0yC3HbX4YYhDRgr31Xy3XwWOQ==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/middleware-content-length@4.3.1': - resolution: {integrity: sha512-l4BUIP+wljW/Ar+0/QcGdmElI9lalrywfzNijXMBG34Z510FRzPyrDLx/blNTZOAm0C4Mvx5t/bf760CZo1ajg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.5.1': - resolution: {integrity: sha512-qtqu5TS+8Y18ZDkJoiXN5AMW1G4JAg1+xytzpsUvIR5a4EUsgd5HQg12lekEHWpm2TDUmOgg+hBaHK7dvyWdkA==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.6.1': - resolution: {integrity: sha512-eTaQhxs0rfUuAkL2MSKrH8DTO7YCeAgrdN0B2/RAeuHmXQ+x52dk5qUBsi/jtcqe5LxItgq5AG5tI6Cp8c0sow==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.3.1': - resolution: {integrity: sha512-t7YtUe076zWVypVmy1rX91oKi2TFJCkpfFpfMhJFpEIRPP0iL9JxjeSyFQ+1bF45JUfDzOzslUJa150WcSrBug==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.3.1': - resolution: {integrity: sha512-1jKwiKZxCMQNqmp4uVPYA6r+MLGjEtH07gnOUdPgbnjuOIrl/0JY/ICdpQtFgeBsQ/Up01gnSv8GYEL0fb8yvg==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.4.1': - resolution: {integrity: sha512-q7tDJEJXcaSG/8TVpu2f2l9bzxTzDM9geWmltbzsY6Hfh3yiuXXTpLIO8+zwYASPPVFaTJpdKwjSSjdoDoccgw==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.7.1': - resolution: {integrity: sha512-BdEYko85f/ldp68uH8XEyIvo810xFk6eyPH81SRggTOApYHWA+Xu7B2EzLuHbe37WVLaUA7F1fWR3/zBeme2WA==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.3.1': - resolution: {integrity: sha512-3NHoqVBhzpY2b4YBx9AqyKC4C8nnEjl5FyKuxrCjvnjinG0ODj+yg1xX360nNahT6wghYjSw1SooCt3kIdnqIA==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.4.1': - resolution: {integrity: sha512-8irPNCQgYxcSFp1aGcnDNFkTwSA+xPUaFq9V/v1+JXWu8sKr5b3cFmg2kBTkjkvypDmGeNffuNu0x5iqw1NoAw==} + '@smithy/node-config-provider@4.4.4': + resolution: {integrity: sha512-mD/K1A5WrTZh6I23x1ScYo3K7/+Ujvp/zvLtaZT+xkDeXksWAQ/fKp60SudeUHUHQe/3Q3rgnfedJDqnxSKdpA==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.3.1': - resolution: {integrity: sha512-toyi8sXPWDNoVH6yK7sXJ9dm5uxw2tWLCHzPy/t16Fvl62Es4vXQXzlilyNaw+DqFwxSlrFClh0rGLPUF2p9Lg==} + '@smithy/node-http-handler@4.7.3': + resolution: {integrity: sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.5.1': - resolution: {integrity: sha512-FKoKxVzdFPhyynFI+SPTWrgOP60fZ4l1UwukWYj4eyhpSmEI7MJ6p58hawIIt9bwp+aek9NEm8Zika7E+GEoeg==} + '@smithy/node-http-handler@4.7.4': + resolution: {integrity: sha512-HIeF+1vrDGzPkkv39Hj2vlHSXHY3p958jd/8ZnePIY6+ZOsQX8coyEUKO5yQu4r0bQIVsbpotVIrXXwyycMStQ==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.4.1': - resolution: {integrity: sha512-728lZZEWYWubBESrfntNslZQYDKRlJDY4dcDnYbL50+gu35pGPLblu4S0/RH/RDLF6me1M87ECHsHELGL7dA/Q==} + '@smithy/signature-v4@5.4.4': + resolution: {integrity: sha512-e5UtkMvsatzBfbeBZjEOt0k0Z3BEsjTFL/n6fdO5vtBLe67tdy0dX7xw2DU7uZ3acwoHyeCqpU2Fzb7pxwHb6Q==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.13.1': - resolution: {integrity: sha512-IcznNM8Qd9u1X3oflp12tkzyOB4HbT+sfYWlWiyEysgNzSHoWcHUUsTT4y1jjDjtVuuVVQbYks+g1kVd7u1eGQ==} + '@smithy/types@4.14.2': + resolution: {integrity: sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw==} engines: {node: '>=18.0.0'} - '@smithy/types@4.14.1': - resolution: {integrity: sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==} - engines: {node: '>=18.0.0'} + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} - '@smithy/url-parser@4.3.1': - resolution: {integrity: sha512-tuelFlF2PZR/wogFC58NIrPOv+Zna4N1+3kA161/33D1Gbwvl6Nh4WsAsW05ZyPp0O6CMGsdbb0S2b/qVjRMCw==} - engines: {node: '>=18.0.0'} + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} - '@smithy/util-base64@4.4.1': - resolution: {integrity: sha512-fTHiwW2xbiRiWzfSk4IGAr3gNZCH4fuRYqt8+IuarsP/YON35576iVdePraZ6yJlFxlCL0eMec3/F7xYqoKzlg==} - engines: {node: '>=18.0.0'} + '@speed-highlight/core@1.2.15': + resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==} - '@smithy/util-body-length-browser@4.3.1': - resolution: {integrity: sha512-1scg5t4nV3hV7CZs996/XHb80aDZ5YotH4NcvkW/w/rHj+cSz0aCIzwz8aUNKB4nCDPSHRCbrKoj+TvycYefmw==} - engines: {node: '>=18.0.0'} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@smithy/util-body-length-node@4.3.1': - resolution: {integrity: sha512-VRC8MKVPKrgUYThTA7ughcKMfjW6/X92H0wXGJoda0Apw4O5xbXL0GMLz40DTWlsb5hh2iItk6+XL72uJdxYcw==} - engines: {node: '>=18.0.0'} + '@tailwindcss/node@4.3.0': + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} + '@tailwindcss/oxide-android-arm64@4.3.0': + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] - '@smithy/util-config-provider@4.3.1': - resolution: {integrity: sha512-lw6L5GF5+W19vO6o3fZwRT2cXEG+8b2LH0b9ppjDT6nIxjUgmljEQGninx5XorylwKZZ4XLVABeroJ8oaF9RmQ==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-darwin-arm64@4.3.0': + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] - '@smithy/util-defaults-mode-browser@4.4.1': - resolution: {integrity: sha512-1rA7w+LjK1WJClsffC81Z/ZtjFt22QsKhBjUYEnZsGVS2nOTfOENKBzdg4SxhdwFvBCjcbpjscUfXOPwE3UHWQ==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-darwin-x64@4.3.0': + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] - '@smithy/util-defaults-mode-node@4.3.1': - resolution: {integrity: sha512-1fk1wfQHBenQD5NitVKOFgW0wsISYAFPIXGyStJWAeCtMyRhgHYvtJxBk2rwGWA0L5QX6oM6yeHSLKPFMk59ww==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-freebsd-x64@4.3.0': + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] - '@smithy/util-endpoints@3.5.1': - resolution: {integrity: sha512-yORYzJD5zoGbSDkAACr0dIjDiSEA3X8h8lggDENl1dkKpCG0TQIoItPBqtvuJHzFFjRXumcoH+/09xIuixGyCw==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] - '@smithy/util-hex-encoding@4.3.1': - resolution: {integrity: sha512-j6dAIaXfj2nsvv/sN9+fi7e/AJxBHgBoIdNjmQjp9jlii72rEniUGQkipnkHMP2XUKHx5q0B1iv0xQEG1AsLBA==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] - '@smithy/util-middleware@4.3.1': - resolution: {integrity: sha512-SRRMDcIgVXVhVbxviBaSZbuWuVW3jD08wv4ESV0V2oiw0Mki8TPVQ5IxwD3MvSTPg52QYsRP+JoMw5WdUdeWAg==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] - '@smithy/util-retry@4.4.1': - resolution: {integrity: sha512-qkgWgwn1xw0GoY9Ea/B6FrYSPfHA0zyOtJkokwxZuvucRf2+2lfTut6adi4e4Y7LEAaxsFG7r6i05mtDCxbHKA==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] - '@smithy/util-stream@4.6.1': - resolution: {integrity: sha512-GjZfEft0M0V3n2YM/LGkr5LeLd8gxHUIzW0rUz6VtTtlAq245GxHlJghvoPEjJHKTj255iHFAiA4IsIdK40Ueg==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] - '@smithy/util-utf8@4.3.1': - resolution: {integrity: sha512-FtRrSnriXtOs4+J8/y9SbQ1xmN71hrOsN/YJr5PQQj5nR1l7YNkGS/TEk4gr0WN7gyrUqw8/RFaYVjI18732ZA==} - engines: {node: '>=18.0.0'} - - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - - '@tokenizer/inflate@0.4.1': - resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} - engines: {node: '>=18'} + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@tailwindcss/oxide@4.3.0': + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} + engines: {node: '>= 20'} - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@tailwindcss/vite@4.3.0': + resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 '@turbo/darwin-64@2.9.14': resolution: {integrity: sha512-t7QiPflaEyBE4oayeZtSmu4mEfjgIrcNlNNl1z1dmIVPqEdtA7+CfTf8d7KXsOGPh6aNgWjKxyvQg9uGfDQF+A==} @@ -1706,24 +2496,36 @@ packages: '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/mime-types@2.1.4': - resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@25.9.0': - resolution: {integrity: sha512-AOQwYUNolgy3VosiRqXrACUXTN8nJUtPl7FJXMqZVyxiiCLhQuG3jXKvCS1ALr+Y2OmZhzzLVlYPEqJaiqkaJQ==} - '@types/node@25.9.1': resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} @@ -1733,103 +2535,56 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260526.1': - resolution: {integrity: sha512-7kxHwV+zjANOeDn236ob/2nZy72slfid0ukGd0ApVRmDfG3iob4YEO8TuDet1RxNClis+k9l6zaPBJkujczzkA==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [darwin] - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-bDi6FJ644n3uKdp/ZI7j50ChVyGOsrJrkwihQb6x3yByFQkTINLu3e6ZkY+HveQ2Zw2vy9SGN8E7b3A5iSOO0A==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260526.1': - resolution: {integrity: sha512-V2RY5nKkNyBQMK39lCdG//VvCVwKhibQBhuelIm8TR4P2EduhJHB42ftr6lEVgZjW03qlrAEE/FWwTV6Wku2vA==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-r6GXrTdalXZu1/b5goMpAe+efZvOfwdE45gl8Tti3fckP9icK3xdiN+VnNi0RL2/c2L86RyN8nGxihaCHGCKbw==} engines: {node: '>=16.20.0'} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260526.1': - resolution: {integrity: sha512-IVDSXjEyKgfa1SvwWux77cdb6W4ReycvLM9hYiJv42vzDJRt3g+H4LmaI6Ng+0Lq5syylzpVhJe4nh3logUsag==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [linux] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-QJAFyPJgJqJVLbVPHl5xL7FCn3HNPLdpEm8l7KBgiYpltLhU1p/LJ3iN0XpFRAhq9ojWbZebo8t/h8MX35QjTQ==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260526.1': - resolution: {integrity: sha512-gEctrS100iZEwZgrJYuVN4pPW922CcozDneNwJkQld3zmFfSeGRLzj9oXCzP1JbMLq2np+DYrIkJ5ErPF1mwlA==} - engines: {node: '>=16.20.0'} - cpu: [arm] - os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260527.1': resolution: {integrity: sha512-BlfQBatMkZHi3o+atxoUW0czGJNjo9cpO1BoQeB3gxZ7D/cDZHYHmKFSSRx8UxMktwP5k5lPxi0wgA3Ic2mQyQ==} engines: {node: '>=16.20.0'} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260526.1': - resolution: {integrity: sha512-3t4r52PTZgRh+dO0me8o4GCPj3PEixtIEC1vqmQxR/JjDunLn4YOFwfDLyNWEflOxauPRKV5pWkSpd6HiBsZfw==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-UFB7ZdK2/vIIi62nfn3JhyGV7qR/qXjKPQaPVXwzCvaPieTZcsNsALjKU0W5WHThyi+5p3U7O3dGE7n6P4q4Yw==} engines: {node: '>=16.20.0'} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260526.1': - resolution: {integrity: sha512-0uR0M92lNwpgOyGBk+eZAAFuCsa3lc2l3IkvGWMo3fkD+eIBb8NwaqIhKpQ9VGvr6xfjJ3uf210j0Vxhl4HcLQ==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [win32] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-rp/q9+9H77JQvepC/UpDP8CdeTGSGyhp9BVbmFwqUV2NhMHPldfys3ihY7OQdoVBgWIKQyxEHB+FTr8Z7kre1Q==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260526.1': - resolution: {integrity: sha512-UvwEPV9tDgV8GAWkp5Kmq2LRKUlhwtrl0PUpMDOKInaXAndMtUCOQ+aFqd015jPmfNPKs84BRQoQYXyeaHVJDw==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-864Pq4qoDcacUJhs2/kQplyfwNO0APUmx1k8qUaJt2P9ZGF0Pu++afJi7OagImHMiEQcmigjmZPuOodOk5YmqQ==} engines: {node: '>=16.20.0'} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260526.1': - resolution: {integrity: sha512-ys/rYFNEVb4LZ7zUFxWZ6iv5gnIW29WRv3L9+hJKfAF3d/ekI76B4Ej4dU7odNCFiX85sCotljzq8N0QyruuoA==} - engines: {node: '>=16.20.0'} - hasBin: true - '@typescript/native-preview@7.0.0-dev.20260527.1': resolution: {integrity: sha512-j81qKiwCPgMEjtk8uDLP+TDW60l6mugoJ7SNzfHWv1PJ6bUjIAHuag4P1jSLm1IpKuMuB3TTi4f61n7TJi8Jog==} engines: {node: '>=16.20.0'} hasBin: true + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + '@vitest/expect@4.1.7': resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} @@ -1859,6 +2614,32 @@ packages: '@vitest/utils@4.1.7': resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} + '@volar/kit@2.4.28': + resolution: {integrity: sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==} + peerDependencies: + typescript: '*' + + '@volar/language-core@2.4.28': + resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} + + '@volar/language-server@2.4.28': + resolution: {integrity: sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==} + + '@volar/language-service@2.4.28': + resolution: {integrity: sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==} + + '@volar/source-map@2.4.28': + resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} + + '@volar/typescript@2.4.28': + resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + + '@vscode/emmet-helper@2.11.0': + resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} + + '@vscode/l10n@0.0.18': + resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} @@ -1886,6 +2667,63 @@ packages: ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + alchemy@0.93.9: + resolution: {integrity: sha512-suneExNJ0sziKP7xBLesOBFx/E6esousqKiIroKIML+4IQ6S8H0nhrt9i9j0fEZA0Z+BFE+H8qNG2mGzqIDtXg==} + hasBin: true + peerDependencies: + '@astrojs/cloudflare': ^12.6.4 + '@aws-sdk/client-dynamodb': ^3.0.0 + '@aws-sdk/client-iam': ^3.0.0 + '@aws-sdk/client-lambda': ^3.0.0 + '@aws-sdk/client-s3': ^3.0.0 + '@aws-sdk/client-sesv2': ^3.0.0 + '@aws-sdk/client-sqs': ^3.0.0 + '@aws-sdk/client-ssm': ^3.0.0 + '@aws-sdk/client-sts': ^3.0.0 + '@cloudflare/vite-plugin': ^1.21.2 + '@coinbase/cdp-sdk': ^0.10.0 + '@libsql/client': ^0.15.12 + '@opennextjs/cloudflare': ^1.6.5 + astro: ^5.13.2 + rwsdk: ^1.0.0-beta.51 + stripe: ^18.5.0 + vite: '>=6.0.0' + peerDependenciesMeta: + '@astrojs/cloudflare': + optional: true + '@aws-sdk/client-dynamodb': + optional: true + '@aws-sdk/client-iam': + optional: true + '@aws-sdk/client-lambda': + optional: true + '@aws-sdk/client-s3': + optional: true + '@aws-sdk/client-sesv2': + optional: true + '@aws-sdk/client-sqs': + optional: true + '@aws-sdk/client-ssm': + optional: true + '@aws-sdk/client-sts': + optional: true + '@cloudflare/vite-plugin': + optional: true + '@coinbase/cdp-sdk': + optional: true + '@libsql/client': + optional: true + '@opennextjs/cloudflare': + optional: true + astro: + optional: true + rwsdk: + optional: true + stripe: + optional: true + vite: + optional: true + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1902,8 +2740,13 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -1911,6 +2754,13 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -1919,9 +2769,23 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} + astro@6.3.8: + resolution: {integrity: sha512-xH2UA8Z17IS+JaqSlSkBor7jO6gd7zXTLdmu06nKpfpDDJFbi/7KZEy3NDmWxmier+6XrCZ9Z4aitO8jhC9oiA==} + engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true + + aws4fetch@1.0.20: + resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} @@ -1930,9 +2794,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - basic-ftp@5.3.1: - resolution: {integrity: sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==} - engines: {node: '>=10.0.0'} + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} @@ -1941,13 +2804,22 @@ packages: bignumber.js@9.3.1: resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + body-parser@2.2.2: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} @@ -1956,12 +2828,13 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -1977,6 +2850,9 @@ packages: call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -1989,16 +2865,37 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} - cli-highlight@2.1.11: - resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} - engines: {node: '>=8.0.0', npm: '>=5.0.0'} - hasBin: true + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -2007,10 +2904,21 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + commander@14.0.3: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} + common-ancestor-path@2.0.0: + resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} + engines: {node: '>= 18'} + content-disposition@1.1.0: resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} engines: {node: '>=18'} @@ -2026,6 +2934,9 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-es@1.2.3: + resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} + cookie-signature@1.2.2: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} @@ -2034,6 +2945,13 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.6: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} @@ -2042,14 +2960,32 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2059,14 +2995,35 @@ packages: supports-color: optional: true - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2075,6 +3032,12 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff@8.0.4: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} @@ -2083,33 +3046,167 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + drizzle-orm@0.45.2: + resolution: {integrity: sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=4' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' + '@neondatabase/serverless': '>=0.10.0' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1.13' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/sql.js': '*' + '@upstash/redis': '>=1.34.7' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=14.0.0' + gel: '>=2' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@libsql/client-wasm': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/sql.js': + optional: true + '@upstash/redis': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + gel: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + prisma: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - effect@4.0.0-beta.59: - resolution: {integrity: sha512-xyUDLeHSe8d6lWGOvR6Fgn2HL6gYeTZ/S4Jzk9uc4ZUxMPPsNZlNXrvk0C7/utQFzeX7uAWcVnG2BjbA0SRoAA==} + effect@4.0.0-beta.66: + resolution: {integrity: sha512-4arEr62cziFa8BBVDUwJCJJmaVepXf/kRg7KtC0h8+bufngscrHbwWFhr9c+HonwOF+31U3iD3xUJmw9KzX7Dw==} + + emmet@2.4.11: + resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + enhanced-resolve@5.22.0: + resolution: {integrity: sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A==} + engines: {node: '>=10.13.0'} enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2125,6 +3222,21 @@ packages: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.28.0: resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} engines: {node: '>=18'} @@ -2137,31 +3249,28 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + eventsource-parser@3.0.8: resolution: {integrity: sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ==} engines: {node: '>=18.0.0'} @@ -2170,6 +3279,10 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} + expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} @@ -2184,21 +3297,22 @@ packages: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - fast-check@4.8.0: resolution: {integrity: sha512-GOJ158CUMnN6cSahsv4+ExARvIDuzzinFjkp0E9WtiBa5zcVeLozVkWaE4IzFcc+Y48Wp1EDlUZsXRyAztQcSg==} engines: {node: '>=12.17.0'} + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2206,22 +3320,35 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} + fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + fast-xml-builder@1.2.0: resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} - fast-xml-parser@5.7.2: - resolution: {integrity: sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==} + fast-xml-parser@5.7.3: + resolution: {integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==} + hasBin: true + + fast-xml-parser@5.8.0: + resolution: {integrity: sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==} hasBin: true fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2235,9 +3362,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - file-type@21.3.4: - resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} - engines: {node: '>=20'} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -2250,10 +3377,29 @@ packages: find-my-way-ts@0.1.6: resolution: {integrity: sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==} + find-process@2.1.1: + resolution: {integrity: sha512-SrQDx3QhlmHM90iqn9rdjCQcw/T+WlpOkHFsjoRgB+zTpDfltNA1VSNYeYELwhUTJy12UFxqjWhmhOrJc+o4sA==} + hasBin: true + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} + flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + + fontace@0.4.1: + resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==} + + fontkitten@1.0.3: + resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} + engines: {node: '>=20'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -2306,18 +3452,26 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} - get-uri@6.0.5: - resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} - engines: {node: '>= 14'} + get-tsconfig@5.0.0-beta.4: + resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} + engines: {node: '>=20.20.0'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + glob@13.0.6: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} @@ -2345,6 +3499,9 @@ packages: resolution: {integrity: sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + h3@1.15.11: + resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2357,6 +3514,36 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -2377,6 +3564,15 @@ packages: resolution: {integrity: sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==} engines: {node: ^20.17.0 || >=22.9.0} + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -2393,6 +3589,10 @@ packages: resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} hasBin: true + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} @@ -2402,9 +3602,6 @@ packages: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2413,6 +3610,9 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -2428,6 +3628,19 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-docker@4.0.0: + resolution: {integrity: sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==} + engines: {node: '>=20'} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2440,24 +3653,51 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -2486,21 +3726,40 @@ packages: json-schema-typed@8.0.2: resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + jsonc-parser@2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + jwa@2.0.1: resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} - koffi@2.16.2: - resolution: {integrity: sha512-owU0MRwv6xkrVqCd+33uw6BaYppkTRXbO/rVdJNI2dvZG0gzyRhYwW25eWtc5pauwK8TGh3AbkFONSezdykfSA==} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} kubernetes-types@1.30.0: resolution: {integrity: sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==} + libsodium-wrappers@0.8.4: + resolution: {integrity: sha512-mu8aAWucZjTB5O/BtGXtW4e1agy7uHxNYG7zPthmmD1jU43LCDmSWZLN4JhflbdPXj3yDO4lxM1O9hLDgIOXDw==} + + libsodium@0.8.4: + resolution: {integrity: sha512-lMcYaRi0zcs7tarATsQUYC7rstliIXZuoq0c6zXSgNtSNtdvBgkSegjWhpMJAXzKX3SUSwIp7+zEsob+j3LuRw==} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -2582,40 +3841,181 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.5.0: + resolution: {integrity: sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==} + engines: {node: 20 || >=22} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - lru-cache@11.3.6: - resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==} - engines: {node: 20 || >=22} + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - marked@15.0.12: - resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} - engines: {node: '>= 18'} - hasBin: true + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} @@ -2629,10 +4029,24 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} + miniflare@4.20260424.0: + resolution: {integrity: sha512-B6MKBBd5TJ19daUc3Ae9rWctn1nDA/VCXykXfCsp9fTxyfGxnZY27tJs1caxgE9MWEMMKGbGHouqVtgKbKGxmw==} + engines: {node: '>=18.0.0'} + hasBin: true + + miniflare@4.20260526.0: + resolution: {integrity: sha512-JYQ7jPZZWoaaj9jWHb8Ucp6Cu2SbDVqIsAJhumqdzzLkkfq0pYkDeino/sZfW1ixJWPjv/C44zjm9gVJC2izCA==} + engines: {node: '>=22.0.0'} + hasBin: true + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} @@ -2641,22 +4055,26 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msgpackr-extract@3.0.3: - resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + msgpackr-extract@3.0.4: + resolution: {integrity: sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==} hasBin: true msgpackr@1.11.12: resolution: {integrity: sha512-RBdJ1Un7yGlXWajrkxcSa93nvQ0w4zBf60c0yYv7YtBelP8H2FA7XsfBbMHtXKXUMUxH7zV3Zuozh+kUQWhHvg==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + multipasta@0.2.7: resolution: {integrity: sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2666,15 +4084,25 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} - netmask@2.1.1: - resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} - engines: {node: '>= 0.4.0'} + neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} + + neverthrow@8.2.0: + resolution: {integrity: sha512-kOCT/1MCPAxY5iUV3wytNFUMUolzuwd/VF/1KCx7kf6CutrOsTie+84zTGTpgQycjvfLdBBdvBvFLqFD2c0wkQ==} + engines: {node: '>=18'} + + nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2683,6 +4111,20 @@ packages: resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} hasBin: true + node-mock-http@1.0.4: + resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -2694,6 +4136,12 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -2701,6 +4149,16 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + openai@6.26.0: resolution: {integrity: sha512-zd23dbWTjiJ6sSAX6s0HrCZi41JwTA1bQVs0wLQPZ2/5o2gxOJA5wh7yOAUgwYybfhDXyhwlpeQf7Mlgx8EOCA==} hasBin: true @@ -2753,6 +4211,10 @@ packages: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} + p-limit@7.3.0: + resolution: {integrity: sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==} + engines: {node: '>=20'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -2761,33 +4223,43 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} + p-queue@9.3.0: + resolution: {integrity: sha512-7NED7xhQ74Ngp4JP/2e0VZHp7vSWfJfqeiR92jPgxsz6m0Se4P03YoTKa9dDXyZ3r6P616gUXttrB6nnHYKang==} + engines: {node: '>=20'} + p-retry@4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} package-manager-detector@0.2.11: resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} - parse5-htmlparser2-tree-adapter@6.0.1: - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - parse5@5.1.1: - resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} - parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} @@ -2796,6 +4268,9 @@ packages: partial-json@0.1.7: resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2808,10 +4283,21 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@8.4.2: resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} @@ -2822,8 +4308,8 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + piccolore@0.1.3: + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2853,27 +4339,36 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + engines: {node: '>=14'} + hasBin: true + + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - protobufjs@7.5.8: - resolution: {integrity: sha512-dvpCIeLPbXZS/Ete7yLaO7RenOdken2NHKykBXbsaGxZT0UTltcarBciw+A78SRQs9iMAAVpsYA+l8b1hTePIA==} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + protobufjs@7.6.1: + resolution: {integrity: sha512-4K0myLaWL5EteuSAro91EGFgcfVgxb64Jx+7oDAY6GOkXD4M69yuSEljNcInGVCA5sOPxmZ/EqDLj2x0Q0+Ygg==} engines: {node: '>=12.0.0'} proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - pump@3.0.4: - resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} - pure-rand@8.4.0: resolution: {integrity: sha512-IoM8YF/jY0hiugFo/wOWqfmarlE6J0wc6fDK1PhftMk7MGhVZl88sZimmqBBFomLOCSmcCCpsfj7wXASCpvK9A==} @@ -2887,6 +4382,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -2899,6 +4397,60 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-smartypants@3.0.2: + resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} + engines: {node: '>=16.0.0'} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + request-light@0.5.8: + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} + + request-light@0.7.0: + resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -2911,6 +4463,21 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + + retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + + retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + + retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -2923,29 +4490,60 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.0.0-rc.18: - resolution: {integrity: sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg==} + rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.0.2: - resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} - engines: {node: ^20.19.0 || >=22.12.0} + rollup@4.60.4: + resolution: {integrity: sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rosie-skills-darwin-arm64@0.6.4: + resolution: {integrity: sha512-rn1s5hqFKcxeiDEWWoFa1hdGPshR8TkwHLzy/cBavb9XJNAaUxbe3oQ78W9sQkRHAgRyzJYyk9tw68Qrdnizgg==} + cpu: [arm64] + os: [darwin] + + rosie-skills-freebsd-x64@0.6.4: + resolution: {integrity: sha512-SxCRduPBMtfjkQ+q56Yw9OLA3PyaqoALzt7kER7IDKuUVfM2O/1w8sa5xhTDiCvWkZJixnH5d5Ya6KT+/Mwcng==} + cpu: [x64] + os: [freebsd] + + rosie-skills-linux-x64@0.6.4: + resolution: {integrity: sha512-D9Y9mfu7goB0s0X59uU3hcFeUTef3VbpCIDwFMzyvJrAq3XhRACWBDMHQsHlyWdHxTXPX/ILyW65RXyrJlgqng==} + cpu: [x64] + os: [linux] + + rosie-skills@0.6.4: + resolution: {integrity: sha512-ojfhSiQRdZ2QyWbmKAHOSAUbaLYrTc5zIH7mS1jKoP8KCFSQddwVhMyFqldckTeybTfW3zNcsZzyOTzGTN1SBA==} + engines: {node: '>=18'} hasBin: true router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} + semver@7.8.1: resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} engines: {node: '>=10'} @@ -2959,9 +4557,16 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2970,6 +4575,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@4.1.0: + resolution: {integrity: sha512-l/ABZPUR5v70jI10EzqfMS/I96vjSGv2y0ihUV+WYFzv0EfvW4s54m0Lg8wCrrL+2IkwBzFTuxkZjPf8b2NX9Q==} + engines: {node: '>=20'} + side-channel-list@1.0.1: resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} @@ -2996,29 +4605,23 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.9: - resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + smol-toml@1.6.1: + resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} + engines: {node: '>= 18'} source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} @@ -3040,6 +4643,16 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3052,31 +4665,47 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strnum@2.3.0: resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} - strtok3@10.3.5: - resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + svgo@4.0.1: + resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} + engines: {node: '>=16'} + hasBin: true + + tailwindcss@4.3.0: + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyclip@0.1.12: + resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==} + engines: {node: ^16.14.0 || >= 17.3.0} + tinyexec@1.2.2: resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==} engines: {node: '>=18'} @@ -3101,14 +4730,16 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - token-types@6.1.2: - resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} - engines: {node: '>=14.16'} - toml@4.1.1: resolution: {integrity: sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw==} engines: {node: '>=20'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-algebra@2.0.0: resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} @@ -3131,25 +4762,83 @@ packages: typebox@1.1.38: resolution: {integrity: sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA==} + typesafe-path@0.2.2: + resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} + + typescript-auto-import-cache@0.3.6: + resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} + typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - uint8array-extras@1.5.0: - resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} - engines: {node: '>=18'} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + ultrahtml@1.6.0: + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} undici-types@7.24.6: resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} - undici@7.25.0: - resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==} + undici@7.24.8: + resolution: {integrity: sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==} engines: {node: '>=20.18.1'} + undici@8.3.0: + resolution: {integrity: sha512-TkUDgb6tl7KOGZ+7e8E3d2FYgUQgF6z5YypqjWmixVQSQERFcVrVg0ySADm2LVLRh5ljAaHTCR5Fmz3Q34rB7Q==} + engines: {node: '>=22.19.0'} + + unenv@2.0.0-rc.21: + resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==} + + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unifont@0.7.4: + resolution: {integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + universal-user-agent@7.0.3: + resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -3158,18 +4847,82 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unstorage@1.17.5: + resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6 || ^7 || ^8 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1 || ^2 || ^3 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@13.0.2: resolution: {integrity: sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==} hasBin: true - uuid@14.0.0: - resolution: {integrity: sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==} - hasBin: true - vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + vfile-matter@5.0.1: resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==} @@ -3179,16 +4932,15 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@8.0.11: - resolution: {integrity: sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==} + vite@7.3.3: + resolution: {integrity: sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 - esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 + lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' @@ -3199,14 +4951,12 @@ packages: peerDependenciesMeta: '@types/node': optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true jiti: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true sass-embedded: @@ -3222,6 +4972,14 @@ packages: yaml: optional: true + vitefu@1.1.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + vitest@4.1.7: resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -3263,29 +5021,176 @@ packages: jsdom: optional: true + volar-service-css@0.0.70: + resolution: {integrity: sha512-K1qyOvBpE3rzdAv3e4/6Rv5yizrYPy5R/ne3IWCAzLBuMO4qBMV3kSqWzj6KUVe6S0AnN6wxF7cRkiaKfYMYJw==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-emmet@0.0.70: + resolution: {integrity: sha512-xi5bC4m/VyE3zy/n2CXspKeDZs3qA41tHLTw275/7dNWM/RqE2z3BnDICQybHIVp/6G1iOQj5c1qXMgQC08TNg==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-html@0.0.70: + resolution: {integrity: sha512-eR6vCgMdmYAo4n+gcT7DSyBQbwB8S3HZZvSagTf0sxNaD4WppMCFfpqWnkrlGStPKMZvMiejRRVmqsX9dYcTvQ==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-prettier@0.0.70: + resolution: {integrity: sha512-Z6BCFSpGVCd8BPAsZ785Kce1BGlWd5ODqmqZGVuB14MJvrR4+CYz6cDy4F+igmE1gMifqfvMhdgT8Aud4M5ngg==} + peerDependencies: + '@volar/language-service': ~2.4.0 + prettier: ^2.2 || ^3.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + prettier: + optional: true + + volar-service-typescript-twoslash-queries@0.0.70: + resolution: {integrity: sha512-IdD13Z9N2Bu8EM6CM0fDV1E69olEYGHDU25X51YXmq8Y0CmJ2LNj6gOiBJgpS5JGUqFzECVhMNBW7R0sPdRTMQ==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-typescript@0.0.70: + resolution: {integrity: sha512-l46Bx4cokkUedTd74ojO5H/zqHZJ8SUuyZ0IB8JN4jfRqUM3bQFBHoOwlZCyZmOeO0A3RQNkMnFclxO4c++gsg==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-yaml@0.0.70: + resolution: {integrity: sha512-0c8bXDBeoATF9F6iPIlOuYTuZAC4c+yi0siQo920u7eiBJk8oQmUmg9cDUbR4+Gl++bvGP4plj3fErbJuPqdcQ==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + vscode-css-languageservice@6.3.10: + resolution: {integrity: sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==} + + vscode-html-languageservice@5.6.2: + resolution: {integrity: sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==} + + vscode-json-languageservice@4.1.8: + resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} + engines: {npm: '>=7.0.0'} + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-nls@5.2.0: + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + which-pm-runs@1.1.0: + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + workerd@1.20260424.1: + resolution: {integrity: sha512-oKsB0Xo/mfkYMdSACoS06XZg09VUK4rXwHfF/1t3P++sMbwzf4UHQvMO57+zxpEB2nVrY/ZkW0bYFGq4GdAFSQ==} + engines: {node: '>=16'} + hasBin: true + + workerd@1.20260526.1: + resolution: {integrity: sha512-IHzymht98p10JH1zzwdCpbViAqw97HrwKl7+KfZeASFMsYSrIsAULWdPn0LRC5FTUzBpamLNyKCCKxbgXHgRHQ==} + engines: {node: '>=16'} hasBin: true + wrangler@4.95.0: + resolution: {integrity: sha512-vgXzFVSCdUbeCadgVXvu8fK5tzNm8T9W+7lriyGWZMx0B1+CAdr4d8JTlZszHfgjypRAHmAxb49etZGIRD9pgg==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20260526.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3296,29 +5201,60 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml-naming@0.1.0: resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} engines: {node: '>=16.0.0'} + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + yaml-language-server@1.20.0: + resolution: {integrity: sha512-qhjK/bzSRZ6HtTvgeFvjNPJGWdZ0+x5NREV/9XZWFjIGezew2b4r5JPy66IfOhd5OA7KeFwk1JfmEbnTvev0cA==} + hasBin: true + + yaml@2.7.1: + resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} + engines: {node: '>= 14'} + hasBin: true + yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + youch-core@0.3.3: + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} zod-to-json-schema@3.25.2: resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} @@ -3331,6 +5267,9 @@ packages: zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@anthropic-ai/sdk@0.91.1(zod@4.4.3)': @@ -3358,10 +5297,96 @@ snapshots: call-me-maybe: 1.0.2 openapi-types: 12.1.3 + '@astrojs/check@0.9.9(prettier@3.8.3)(typescript@6.0.3)': + dependencies: + '@astrojs/language-server': 2.16.10(prettier@3.8.3)(typescript@6.0.3) + chokidar: 4.0.3 + kleur: 4.1.5 + typescript: 6.0.3 + yargs: 17.7.2 + transitivePeerDependencies: + - prettier + - prettier-plugin-astro + + '@astrojs/compiler@2.13.1': {} + + '@astrojs/compiler@4.0.0': {} + + '@astrojs/internal-helpers@0.9.1': + dependencies: + picomatch: 4.0.4 + + '@astrojs/language-server@2.16.10(prettier@3.8.3)(typescript@6.0.3)': + dependencies: + '@astrojs/compiler': 2.13.1 + '@astrojs/yaml2ts': 0.2.4 + '@jridgewell/sourcemap-codec': 1.5.5 + '@volar/kit': 2.4.28(typescript@6.0.3) + '@volar/language-core': 2.4.28 + '@volar/language-server': 2.4.28 + '@volar/language-service': 2.4.28 + muggle-string: 0.4.1 + tinyglobby: 0.2.16 + volar-service-css: 0.0.70(@volar/language-service@2.4.28) + volar-service-emmet: 0.0.70(@volar/language-service@2.4.28) + volar-service-html: 0.0.70(@volar/language-service@2.4.28) + volar-service-prettier: 0.0.70(@volar/language-service@2.4.28)(prettier@3.8.3) + volar-service-typescript: 0.0.70(@volar/language-service@2.4.28) + volar-service-typescript-twoslash-queries: 0.0.70(@volar/language-service@2.4.28) + volar-service-yaml: 0.0.70(@volar/language-service@2.4.28) + vscode-html-languageservice: 5.6.2 + vscode-uri: 3.1.0 + optionalDependencies: + prettier: 3.8.3 + transitivePeerDependencies: + - typescript + + '@astrojs/markdown-remark@7.1.2': + dependencies: + '@astrojs/internal-helpers': 0.9.1 + '@astrojs/prism': 4.0.2 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + js-yaml: 4.1.1 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + retext-smartypants: 6.2.0 + shiki: 4.1.0 + smol-toml: 1.6.1 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/prism@4.0.2': + dependencies: + prismjs: 1.30.0 + + '@astrojs/telemetry@3.3.2': + dependencies: + ci-info: 4.4.0 + dset: 3.1.4 + is-docker: 4.0.0 + is-wsl: 3.1.1 + which-pm-runs: 1.1.0 + + '@astrojs/yaml2ts@0.2.4': + dependencies: + yaml: 2.9.0 + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.8 + '@aws-sdk/types': 3.973.9 tslib: 2.8.1 '@aws-crypto/sha256-browser@5.2.0': @@ -3369,7 +5394,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.8 + '@aws-sdk/types': 3.973.9 '@aws-sdk/util-locate-window': 3.965.5 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -3377,7 +5402,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.8 + '@aws-sdk/types': 3.973.9 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -3386,404 +5411,392 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.973.8 + '@aws-sdk/types': 3.973.9 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-bedrock-runtime@3.1045.0': + '@aws-sdk/client-bedrock-runtime@3.1048.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.974.8 - '@aws-sdk/credential-provider-node': 3.972.39 - '@aws-sdk/eventstream-handler-node': 3.972.14 - '@aws-sdk/middleware-eventstream': 3.972.10 - '@aws-sdk/middleware-host-header': 3.972.10 - '@aws-sdk/middleware-logger': 3.972.10 - '@aws-sdk/middleware-recursion-detection': 3.972.11 - '@aws-sdk/middleware-user-agent': 3.972.38 - '@aws-sdk/middleware-websocket': 3.972.16 - '@aws-sdk/region-config-resolver': 3.972.13 - '@aws-sdk/token-providers': 3.1045.0 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-endpoints': 3.996.8 - '@aws-sdk/util-user-agent-browser': 3.972.10 - '@aws-sdk/util-user-agent-node': 3.973.24 - '@smithy/config-resolver': 4.5.1 - '@smithy/core': 3.24.1 - '@smithy/eventstream-serde-browser': 4.3.1 - '@smithy/eventstream-serde-config-resolver': 4.4.1 - '@smithy/eventstream-serde-node': 4.3.1 - '@smithy/fetch-http-handler': 5.4.1 - '@smithy/hash-node': 4.3.1 - '@smithy/invalid-dependency': 4.3.1 - '@smithy/middleware-content-length': 4.3.1 - '@smithy/middleware-endpoint': 4.5.1 - '@smithy/middleware-retry': 4.6.1 - '@smithy/middleware-serde': 4.3.1 - '@smithy/middleware-stack': 4.3.1 - '@smithy/node-config-provider': 4.4.1 - '@smithy/node-http-handler': 4.7.1 - '@smithy/protocol-http': 5.4.1 - '@smithy/smithy-client': 4.13.1 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.3.1 - '@smithy/util-base64': 4.4.1 - '@smithy/util-body-length-browser': 4.3.1 - '@smithy/util-body-length-node': 4.3.1 - '@smithy/util-defaults-mode-browser': 4.4.1 - '@smithy/util-defaults-mode-node': 4.3.1 - '@smithy/util-endpoints': 3.5.1 - '@smithy/util-middleware': 4.3.1 - '@smithy/util-retry': 4.4.1 - '@smithy/util-stream': 4.6.1 - '@smithy/util-utf8': 4.3.1 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/credential-provider-node': 3.972.44 + '@aws-sdk/eventstream-handler-node': 3.972.17 + '@aws-sdk/middleware-eventstream': 3.972.13 + '@aws-sdk/middleware-websocket': 3.972.21 + '@aws-sdk/token-providers': 3.1048.0 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/fetch-http-handler': 5.4.4 + '@smithy/node-http-handler': 4.7.3 + '@smithy/types': 4.14.2 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.974.8': - dependencies: - '@aws-sdk/types': 3.973.8 - '@aws-sdk/xml-builder': 3.972.22 - '@smithy/core': 3.24.1 - '@smithy/node-config-provider': 4.4.1 - '@smithy/property-provider': 4.3.1 - '@smithy/protocol-http': 5.4.1 - '@smithy/signature-v4': 5.4.1 - '@smithy/smithy-client': 4.13.1 - '@smithy/types': 4.14.1 - '@smithy/util-base64': 4.4.1 - '@smithy/util-middleware': 4.3.1 - '@smithy/util-retry': 4.4.1 - '@smithy/util-utf8': 4.3.1 + + '@aws-sdk/client-cognito-identity@3.1054.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.974.14 + '@aws-sdk/credential-provider-node': 3.972.45 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/fetch-http-handler': 5.4.4 + '@smithy/node-http-handler': 4.7.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.34': + '@aws-sdk/core@3.974.13': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.3.1 - '@smithy/types': 4.14.1 + '@aws-sdk/types': 3.973.9 + '@aws-sdk/xml-builder': 3.972.25 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/core': 3.24.4 + '@smithy/signature-v4': 5.4.4 + '@smithy/types': 4.14.2 + bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.36': - dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@smithy/fetch-http-handler': 5.4.1 - '@smithy/node-http-handler': 4.7.1 - '@smithy/property-provider': 4.3.1 - '@smithy/protocol-http': 5.4.1 - '@smithy/smithy-client': 4.13.1 - '@smithy/types': 4.14.1 - '@smithy/util-stream': 4.6.1 + '@aws-sdk/core@3.974.14': + dependencies: + '@aws-sdk/types': 3.973.9 + '@aws-sdk/xml-builder': 3.972.26 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/core': 3.24.4 + '@smithy/signature-v4': 5.4.4 + '@smithy/types': 4.14.2 + bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.38': - dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/credential-provider-env': 3.972.34 - '@aws-sdk/credential-provider-http': 3.972.36 - '@aws-sdk/credential-provider-login': 3.972.38 - '@aws-sdk/credential-provider-process': 3.972.34 - '@aws-sdk/credential-provider-sso': 3.972.38 - '@aws-sdk/credential-provider-web-identity': 3.972.38 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/types': 3.973.8 - '@smithy/credential-provider-imds': 4.3.1 - '@smithy/property-provider': 4.3.1 - '@smithy/shared-ini-file-loader': 4.5.1 - '@smithy/types': 4.14.1 + '@aws-sdk/credential-provider-cognito-identity@3.972.37': + dependencies: + '@aws-sdk/nested-clients': 3.997.12 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-login@3.972.38': + '@aws-sdk/credential-provider-env@3.972.39': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.3.1 - '@smithy/protocol-http': 5.4.1 - '@smithy/shared-ini-file-loader': 4.5.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-node@3.972.39': - dependencies: - '@aws-sdk/credential-provider-env': 3.972.34 - '@aws-sdk/credential-provider-http': 3.972.36 - '@aws-sdk/credential-provider-ini': 3.972.38 - '@aws-sdk/credential-provider-process': 3.972.34 - '@aws-sdk/credential-provider-sso': 3.972.38 - '@aws-sdk/credential-provider-web-identity': 3.972.38 - '@aws-sdk/types': 3.973.8 - '@smithy/credential-provider-imds': 4.3.1 - '@smithy/property-provider': 4.3.1 - '@smithy/shared-ini-file-loader': 4.5.1 - '@smithy/types': 4.14.1 + + '@aws-sdk/credential-provider-env@3.972.40': + dependencies: + '@aws-sdk/core': 3.974.14 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-process@3.972.34': + '@aws-sdk/credential-provider-http@3.972.41': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.3.1 - '@smithy/shared-ini-file-loader': 4.5.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/fetch-http-handler': 5.4.4 + '@smithy/node-http-handler': 4.7.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.38': + '@aws-sdk/credential-provider-http@3.972.42': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/token-providers': 3.1041.0 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.3.1 - '@smithy/shared-ini-file-loader': 4.5.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.14 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/fetch-http-handler': 5.4.4 + '@smithy/node-http-handler': 4.7.4 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.972.43': + dependencies: + '@aws-sdk/core': 3.974.13 + '@aws-sdk/credential-provider-env': 3.972.39 + '@aws-sdk/credential-provider-http': 3.972.41 + '@aws-sdk/credential-provider-login': 3.972.43 + '@aws-sdk/credential-provider-process': 3.972.39 + '@aws-sdk/credential-provider-sso': 3.972.43 + '@aws-sdk/credential-provider-web-identity': 3.972.43 + '@aws-sdk/nested-clients': 3.997.11 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/credential-provider-imds': 4.3.4 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.972.44': + dependencies: + '@aws-sdk/core': 3.974.14 + '@aws-sdk/credential-provider-env': 3.972.40 + '@aws-sdk/credential-provider-http': 3.972.42 + '@aws-sdk/credential-provider-login': 3.972.44 + '@aws-sdk/credential-provider-process': 3.972.40 + '@aws-sdk/credential-provider-sso': 3.972.44 + '@aws-sdk/credential-provider-web-identity': 3.972.44 + '@aws-sdk/nested-clients': 3.997.12 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/credential-provider-imds': 4.3.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.38': + '@aws-sdk/credential-provider-login@3.972.43': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.3.1 - '@smithy/shared-ini-file-loader': 4.5.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/nested-clients': 3.997.11 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/eventstream-handler-node@3.972.14': + '@aws-sdk/credential-provider-login@3.972.44': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/eventstream-codec': 4.3.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.14 + '@aws-sdk/nested-clients': 3.997.12 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-node@3.972.44': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.39 + '@aws-sdk/credential-provider-http': 3.972.41 + '@aws-sdk/credential-provider-ini': 3.972.43 + '@aws-sdk/credential-provider-process': 3.972.39 + '@aws-sdk/credential-provider-sso': 3.972.43 + '@aws-sdk/credential-provider-web-identity': 3.972.43 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/credential-provider-imds': 4.3.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/middleware-eventstream@3.972.10': + '@aws-sdk/credential-provider-node@3.972.45': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.40 + '@aws-sdk/credential-provider-http': 3.972.42 + '@aws-sdk/credential-provider-ini': 3.972.44 + '@aws-sdk/credential-provider-process': 3.972.40 + '@aws-sdk/credential-provider-sso': 3.972.44 + '@aws-sdk/credential-provider-web-identity': 3.972.44 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/credential-provider-imds': 4.3.4 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-process@3.972.39': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/protocol-http': 5.4.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.972.10': + '@aws-sdk/credential-provider-process@3.972.40': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/protocol-http': 5.4.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.14 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.972.10': + '@aws-sdk/credential-provider-sso@3.972.43': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/nested-clients': 3.997.11 + '@aws-sdk/token-providers': 3.1052.0 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.972.11': + '@aws-sdk/credential-provider-sso@3.972.44': dependencies: - '@aws-sdk/types': 3.973.8 - '@aws/lambda-invoke-store': 0.2.4 - '@smithy/protocol-http': 5.4.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.14 + '@aws-sdk/nested-clients': 3.997.12 + '@aws-sdk/token-providers': 3.1054.0 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.37': - dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-arn-parser': 3.972.3 - '@smithy/core': 3.24.1 - '@smithy/node-config-provider': 4.4.1 - '@smithy/protocol-http': 5.4.1 - '@smithy/signature-v4': 5.4.1 - '@smithy/smithy-client': 4.13.1 - '@smithy/types': 4.14.1 - '@smithy/util-config-provider': 4.3.1 - '@smithy/util-middleware': 4.3.1 - '@smithy/util-stream': 4.6.1 - '@smithy/util-utf8': 4.3.1 + '@aws-sdk/credential-provider-web-identity@3.972.43': + dependencies: + '@aws-sdk/core': 3.974.13 + '@aws-sdk/nested-clients': 3.997.11 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.38': + '@aws-sdk/credential-provider-web-identity@3.972.44': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-endpoints': 3.996.8 - '@smithy/core': 3.24.1 - '@smithy/protocol-http': 5.4.1 - '@smithy/types': 4.14.1 - '@smithy/util-retry': 4.4.1 + '@aws-sdk/core': 3.974.14 + '@aws-sdk/nested-clients': 3.997.12 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/middleware-websocket@3.972.16': - dependencies: - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-format-url': 3.972.10 - '@smithy/eventstream-codec': 4.3.1 - '@smithy/eventstream-serde-browser': 4.3.1 - '@smithy/fetch-http-handler': 5.4.1 - '@smithy/protocol-http': 5.4.1 - '@smithy/signature-v4': 5.4.1 - '@smithy/types': 4.14.1 - '@smithy/util-base64': 4.4.1 - '@smithy/util-hex-encoding': 4.3.1 - '@smithy/util-utf8': 4.3.1 + '@aws-sdk/credential-providers@3.1054.0': + dependencies: + '@aws-sdk/client-cognito-identity': 3.1054.0 + '@aws-sdk/core': 3.974.14 + '@aws-sdk/credential-provider-cognito-identity': 3.972.37 + '@aws-sdk/credential-provider-env': 3.972.40 + '@aws-sdk/credential-provider-http': 3.972.42 + '@aws-sdk/credential-provider-ini': 3.972.44 + '@aws-sdk/credential-provider-login': 3.972.44 + '@aws-sdk/credential-provider-node': 3.972.45 + '@aws-sdk/credential-provider-process': 3.972.40 + '@aws-sdk/credential-provider-sso': 3.972.44 + '@aws-sdk/credential-provider-web-identity': 3.972.44 + '@aws-sdk/nested-clients': 3.997.12 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/credential-provider-imds': 4.3.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.997.6': + '@aws-sdk/eventstream-handler-node@3.972.17': dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.974.8 - '@aws-sdk/middleware-host-header': 3.972.10 - '@aws-sdk/middleware-logger': 3.972.10 - '@aws-sdk/middleware-recursion-detection': 3.972.11 - '@aws-sdk/middleware-user-agent': 3.972.38 - '@aws-sdk/region-config-resolver': 3.972.13 - '@aws-sdk/signature-v4-multi-region': 3.996.25 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-endpoints': 3.996.8 - '@aws-sdk/util-user-agent-browser': 3.972.10 - '@aws-sdk/util-user-agent-node': 3.973.24 - '@smithy/config-resolver': 4.5.1 - '@smithy/core': 3.24.1 - '@smithy/fetch-http-handler': 5.4.1 - '@smithy/hash-node': 4.3.1 - '@smithy/invalid-dependency': 4.3.1 - '@smithy/middleware-content-length': 4.3.1 - '@smithy/middleware-endpoint': 4.5.1 - '@smithy/middleware-retry': 4.6.1 - '@smithy/middleware-serde': 4.3.1 - '@smithy/middleware-stack': 4.3.1 - '@smithy/node-config-provider': 4.4.1 - '@smithy/node-http-handler': 4.7.1 - '@smithy/protocol-http': 5.4.1 - '@smithy/smithy-client': 4.13.1 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.3.1 - '@smithy/util-base64': 4.4.1 - '@smithy/util-body-length-browser': 4.3.1 - '@smithy/util-body-length-node': 4.3.1 - '@smithy/util-defaults-mode-browser': 4.4.1 - '@smithy/util-defaults-mode-node': 4.3.1 - '@smithy/util-endpoints': 3.5.1 - '@smithy/util-middleware': 4.3.1 - '@smithy/util-retry': 4.4.1 - '@smithy/util-utf8': 4.3.1 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/region-config-resolver@3.972.13': + '@aws-sdk/middleware-eventstream@3.972.13': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/config-resolver': 4.5.1 - '@smithy/node-config-provider': 4.4.1 - '@smithy/types': 4.14.1 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.996.25': + '@aws-sdk/middleware-websocket@3.972.21': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.972.37 - '@aws-sdk/types': 3.973.8 - '@smithy/protocol-http': 5.4.1 - '@smithy/signature-v4': 5.4.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/fetch-http-handler': 5.4.4 + '@smithy/signature-v4': 5.4.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/token-providers@3.1041.0': + '@aws-sdk/nested-clients@3.997.11': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.3.1 - '@smithy/shared-ini-file-loader': 4.5.1 - '@smithy/types': 4.14.1 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/signature-v4-multi-region': 3.996.28 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/fetch-http-handler': 5.4.4 + '@smithy/node-http-handler': 4.7.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/token-providers@3.1045.0': + '@aws-sdk/nested-clients@3.997.12': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.3.1 - '@smithy/shared-ini-file-loader': 4.5.1 - '@smithy/types': 4.14.1 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.974.14 + '@aws-sdk/signature-v4-multi-region': 3.996.29 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/fetch-http-handler': 5.4.4 + '@smithy/node-http-handler': 4.7.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/types@3.973.8': + '@aws-sdk/signature-v4-multi-region@3.996.28': dependencies: - '@smithy/types': 4.14.1 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/signature-v4': 5.4.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/util-arn-parser@3.972.3': + '@aws-sdk/signature-v4-multi-region@3.996.29': dependencies: + '@aws-sdk/types': 3.973.9 + '@smithy/signature-v4': 5.4.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.996.8': + '@aws-sdk/token-providers@3.1048.0': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.3.1 - '@smithy/util-endpoints': 3.5.1 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/nested-clients': 3.997.11 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/util-format-url@3.972.10': + '@aws-sdk/token-providers@3.1052.0': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/querystring-builder': 4.3.1 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.13 + '@aws-sdk/nested-clients': 3.997.11 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.965.5': + '@aws-sdk/token-providers@3.1054.0': dependencies: + '@aws-sdk/core': 3.974.14 + '@aws-sdk/nested-clients': 3.997.12 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.972.10': + '@aws-sdk/types@3.973.9': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/types': 4.14.1 - bowser: 2.14.1 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.973.24': + '@aws-sdk/util-locate-window@3.965.5': dependencies: - '@aws-sdk/middleware-user-agent': 3.972.38 - '@aws-sdk/types': 3.973.8 - '@smithy/node-config-provider': 4.4.1 - '@smithy/types': 4.14.1 - '@smithy/util-config-provider': 4.3.1 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.22': + '@aws-sdk/xml-builder@3.972.25': dependencies: '@nodable/entities': 2.1.0 - '@smithy/types': 4.14.1 - fast-xml-parser: 5.7.2 + '@smithy/types': 4.14.2 + fast-xml-parser: 5.7.3 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.972.26': + dependencies: + '@smithy/types': 4.14.2 + fast-xml-parser: 5.7.3 tslib: 2.8.1 '@aws/lambda-invoke-store@0.2.4': {} - '@babel/runtime@7.29.2': {} + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 '@babel/runtime@7.29.7': {} - '@borewit/text-codec@0.2.2': {} + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@capsizecss/unpack@4.0.0': + dependencies: + fontkitten: 1.0.3 '@changesets/apply-release-plan@7.1.1': dependencies: @@ -3928,84 +5941,158 @@ snapshots: human-id: 4.1.3 prettier: 2.8.8 - '@earendil-works/pi-agent-core@0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3)': + '@clack/core@1.3.1': + dependencies: + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@clack/prompts@1.4.0': + dependencies: + '@clack/core': 1.3.1 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@cloudflare/kv-asset-handler@0.5.0': {} + + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20260526.1 + + '@cloudflare/unenv-preset@2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260526.1)': + dependencies: + unenv: 2.0.0-rc.21 + optionalDependencies: + workerd: 1.20260526.1 + + '@cloudflare/workerd-darwin-64@1.20260424.1': + optional: true + + '@cloudflare/workerd-darwin-64@1.20260526.1': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20260424.1': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20260526.1': + optional: true + + '@cloudflare/workerd-linux-64@1.20260424.1': + optional: true + + '@cloudflare/workerd-linux-64@1.20260526.1': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20260424.1': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20260526.1': + optional: true + + '@cloudflare/workerd-windows-64@1.20260424.1': + optional: true + + '@cloudflare/workerd-windows-64@1.20260526.1': + optional: true + + '@cloudflare/workers-types@4.20260526.1': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@earendil-works/pi-agent-core@0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3)': dependencies: - '@earendil-works/pi-ai': 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) + '@earendil-works/pi-ai': 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) + ignore: 7.0.5 typebox: 1.1.38 + yaml: 2.9.0 transitivePeerDependencies: - '@modelcontextprotocol/sdk' - - aws-crt - bufferutil - supports-color - utf-8-validate - ws - zod - '@earendil-works/pi-ai@0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3)': + '@earendil-works/pi-ai@0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.91.1(zod@4.4.3) - '@aws-sdk/client-bedrock-runtime': 3.1045.0 + '@aws-sdk/client-bedrock-runtime': 3.1048.0 '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) '@mistralai/mistralai': 2.2.1 - chalk: 5.6.2 - openai: 6.26.0(ws@8.20.0)(zod@4.4.3) + '@smithy/node-http-handler': 4.7.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + openai: 6.26.0(ws@8.21.0)(zod@4.4.3) partial-json: 0.1.7 - proxy-agent: 6.5.0 typebox: 1.1.38 - undici: 7.25.0 - zod-to-json-schema: 3.25.2(zod@4.4.3) transitivePeerDependencies: - '@modelcontextprotocol/sdk' - - aws-crt - bufferutil - supports-color - utf-8-validate - ws - zod - '@earendil-works/pi-coding-agent@0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3)': + '@earendil-works/pi-coding-agent@0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3)': dependencies: - '@earendil-works/pi-agent-core': 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) - '@earendil-works/pi-ai': 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) - '@earendil-works/pi-tui': 0.74.0 + '@earendil-works/pi-agent-core': 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) + '@earendil-works/pi-ai': 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) + '@earendil-works/pi-tui': 0.75.5 '@silvia-odwyer/photon-node': 0.3.4 chalk: 5.6.2 - cli-highlight: 2.1.11 + cross-spawn: 7.0.6 diff: 8.0.4 - extract-zip: 2.0.1 - file-type: 21.3.4 glob: 13.0.6 + highlight.js: 10.7.3 hosted-git-info: 9.0.3 ignore: 7.0.5 jiti: 2.7.0 - marked: 15.0.12 minimatch: 10.2.5 proper-lockfile: 4.1.2 - strip-ansi: 7.2.0 typebox: 1.1.38 - undici: 7.25.0 - uuid: 14.0.0 + undici: 8.3.0 yaml: 2.9.0 optionalDependencies: - '@mariozechner/clipboard': 0.3.5 + '@mariozechner/clipboard': 0.3.6 transitivePeerDependencies: - '@modelcontextprotocol/sdk' - - aws-crt - bufferutil - supports-color - utf-8-validate - ws - zod - '@earendil-works/pi-tui@0.74.0': + '@earendil-works/pi-tui@0.75.5': dependencies: - '@types/mime-types': 2.1.4 - chalk: 5.6.2 get-east-asian-width: 1.6.0 marked: 15.0.12 - mime-types: 3.0.2 - optionalDependencies: - koffi: 2.16.2 + + '@emmetio/abbreviation@2.3.3': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-abbreviation@2.1.8': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-parser@0.4.1': + dependencies: + '@emmetio/stream-reader': 2.2.0 + '@emmetio/stream-reader-utils': 0.1.0 + + '@emmetio/html-matcher@1.3.0': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/scanner@1.0.4': {} + + '@emmetio/stream-reader-utils@0.1.0': {} + + '@emmetio/stream-reader@2.2.0': {} '@emnapi/core@1.10.0': dependencies: @@ -4013,91 +6100,325 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.10.0': - dependencies: - tslib: 2.8.1 + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/aix-ppc64@0.28.0': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.28.0': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-arm@0.28.0': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/android-x64@0.28.0': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.28.0': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.28.0': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.28.0': + optional: true + + '@esbuild/freebsd-x64@0.25.12': optional: true - '@emnapi/wasi-threads@1.2.1': - dependencies: - tslib: 2.8.1 + '@esbuild/freebsd-x64@0.27.3': optional: true - '@esbuild/aix-ppc64@0.28.0': + '@esbuild/freebsd-x64@0.27.7': optional: true - '@esbuild/android-arm64@0.28.0': + '@esbuild/freebsd-x64@0.28.0': optional: true - '@esbuild/android-arm@0.28.0': + '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/android-x64@0.28.0': + '@esbuild/linux-arm64@0.27.3': optional: true - '@esbuild/darwin-arm64@0.28.0': + '@esbuild/linux-arm64@0.27.7': optional: true - '@esbuild/darwin-x64@0.28.0': + '@esbuild/linux-arm64@0.28.0': optional: true - '@esbuild/freebsd-arm64@0.28.0': + '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/freebsd-x64@0.28.0': + '@esbuild/linux-arm@0.27.3': optional: true - '@esbuild/linux-arm64@0.28.0': + '@esbuild/linux-arm@0.27.7': optional: true '@esbuild/linux-arm@0.28.0': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + '@esbuild/linux-ia32@0.28.0': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + '@esbuild/linux-loong64@0.28.0': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + '@esbuild/linux-mips64el@0.28.0': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + '@esbuild/linux-ppc64@0.28.0': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + '@esbuild/linux-riscv64@0.28.0': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + '@esbuild/linux-s390x@0.28.0': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + '@esbuild/linux-x64@0.28.0': optional: true + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true + '@esbuild/netbsd-arm64@0.28.0': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.27.7': + optional: true + '@esbuild/netbsd-x64@0.28.0': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.27.7': + optional: true + '@esbuild/openbsd-arm64@0.28.0': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.27.7': + optional: true + '@esbuild/openbsd-x64@0.28.0': optional: true + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.27.7': + optional: true + '@esbuild/openharmony-arm64@0.28.0': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.27.7': + optional: true + '@esbuild/sunos-x64@0.28.0': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.27.7': + optional: true + '@esbuild/win32-arm64@0.28.0': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.27.7': + optional: true + '@esbuild/win32-ia32@0.28.0': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + + '@esbuild/win32-x64@0.27.7': + optional: true + '@esbuild/win32-x64@0.28.0': optional: true @@ -4105,8 +6426,8 @@ snapshots: dependencies: google-auth-library: 10.6.2 p-retry: 4.6.2 - protobufjs: 7.5.8 - ws: 8.20.0 + protobufjs: 7.6.1 + ws: 8.21.0 optionalDependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) transitivePeerDependencies: @@ -4114,11 +6435,11 @@ snapshots: - supports-color - utf-8-validate - '@hono/mcp@0.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(hono-rate-limiter@0.5.3(hono@4.12.23))(hono@4.12.23)(zod@4.4.3)': + '@hono/mcp@0.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(hono-rate-limiter@0.5.3(hono@4.12.23)(unstorage@1.17.5(aws4fetch@1.0.20)))(hono@4.12.23)(zod@4.4.3)': dependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) hono: 4.12.23 - hono-rate-limiter: 0.5.3(hono@4.12.23) + hono-rate-limiter: 0.5.3(hono@4.12.23)(unstorage@1.17.5(aws4fetch@1.0.20)) pkce-challenge: 5.0.1 zod: 4.4.3 @@ -4130,6 +6451,104 @@ snapshots: dependencies: hono: 4.12.23 + '@iarna/toml@2.2.5': {} + + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.10.0 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + '@inquirer/external-editor@1.0.3(@types/node@25.9.1)': dependencies: chardet: 2.1.1 @@ -4137,8 +6556,39 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.29.7 @@ -4155,53 +6605,53 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@mariozechner/clipboard-darwin-arm64@0.3.2': + '@mariozechner/clipboard-darwin-arm64@0.3.6': optional: true - '@mariozechner/clipboard-darwin-universal@0.3.2': + '@mariozechner/clipboard-darwin-universal@0.3.6': optional: true - '@mariozechner/clipboard-darwin-x64@0.3.2': + '@mariozechner/clipboard-darwin-x64@0.3.6': optional: true - '@mariozechner/clipboard-linux-arm64-gnu@0.3.2': + '@mariozechner/clipboard-linux-arm64-gnu@0.3.6': optional: true - '@mariozechner/clipboard-linux-arm64-musl@0.3.2': + '@mariozechner/clipboard-linux-arm64-musl@0.3.6': optional: true - '@mariozechner/clipboard-linux-riscv64-gnu@0.3.2': + '@mariozechner/clipboard-linux-riscv64-gnu@0.3.6': optional: true - '@mariozechner/clipboard-linux-x64-gnu@0.3.2': + '@mariozechner/clipboard-linux-x64-gnu@0.3.6': optional: true - '@mariozechner/clipboard-linux-x64-musl@0.3.2': + '@mariozechner/clipboard-linux-x64-musl@0.3.6': optional: true - '@mariozechner/clipboard-win32-arm64-msvc@0.3.2': + '@mariozechner/clipboard-win32-arm64-msvc@0.3.6': optional: true - '@mariozechner/clipboard-win32-x64-msvc@0.3.2': + '@mariozechner/clipboard-win32-x64-msvc@0.3.6': optional: true - '@mariozechner/clipboard@0.3.5': + '@mariozechner/clipboard@0.3.6': optionalDependencies: - '@mariozechner/clipboard-darwin-arm64': 0.3.2 - '@mariozechner/clipboard-darwin-universal': 0.3.2 - '@mariozechner/clipboard-darwin-x64': 0.3.2 - '@mariozechner/clipboard-linux-arm64-gnu': 0.3.2 - '@mariozechner/clipboard-linux-arm64-musl': 0.3.2 - '@mariozechner/clipboard-linux-riscv64-gnu': 0.3.2 - '@mariozechner/clipboard-linux-x64-gnu': 0.3.2 - '@mariozechner/clipboard-linux-x64-musl': 0.3.2 - '@mariozechner/clipboard-win32-arm64-msvc': 0.3.2 - '@mariozechner/clipboard-win32-x64-msvc': 0.3.2 + '@mariozechner/clipboard-darwin-arm64': 0.3.6 + '@mariozechner/clipboard-darwin-universal': 0.3.6 + '@mariozechner/clipboard-darwin-x64': 0.3.6 + '@mariozechner/clipboard-linux-arm64-gnu': 0.3.6 + '@mariozechner/clipboard-linux-arm64-musl': 0.3.6 + '@mariozechner/clipboard-linux-riscv64-gnu': 0.3.6 + '@mariozechner/clipboard-linux-x64-gnu': 0.3.6 + '@mariozechner/clipboard-linux-x64-musl': 0.3.6 + '@mariozechner/clipboard-win32-arm64-msvc': 0.3.6 + '@mariozechner/clipboard-win32-x64-msvc': 0.3.6 optional: true '@mistralai/mistralai@2.2.1': dependencies: - ws: 8.20.0 + ws: 8.21.0 zod: 4.4.3 zod-to-json-schema: 3.25.2(zod@4.4.3) transitivePeerDependencies: @@ -4230,22 +6680,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': optional: true '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': @@ -4269,19 +6719,87 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@opencode-ai/plugin@1.14.48': + '@octokit/auth-token@5.1.2': {} + + '@octokit/core@6.1.6': + dependencies: + '@octokit/auth-token': 5.1.2 + '@octokit/graphql': 8.2.2 + '@octokit/request': 9.2.4 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.1.0 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.3 + + '@octokit/endpoint@10.1.4': + dependencies: + '@octokit/types': 14.1.0 + universal-user-agent: 7.0.3 + + '@octokit/graphql@8.2.2': + dependencies: + '@octokit/request': 9.2.4 + '@octokit/types': 14.1.0 + universal-user-agent: 7.0.3 + + '@octokit/openapi-types@24.2.0': {} + + '@octokit/openapi-types@25.1.0': {} + + '@octokit/plugin-paginate-rest@11.6.0(@octokit/core@6.1.6)': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/types': 13.10.0 + + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.6)': + dependencies: + '@octokit/core': 6.1.6 + + '@octokit/plugin-rest-endpoint-methods@13.5.0(@octokit/core@6.1.6)': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/types': 13.10.0 + + '@octokit/request-error@6.1.8': + dependencies: + '@octokit/types': 14.1.0 + + '@octokit/request@9.2.4': + dependencies: + '@octokit/endpoint': 10.1.4 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.1.0 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.3 + + '@octokit/rest@21.1.1': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/plugin-paginate-rest': 11.6.0(@octokit/core@6.1.6) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.6) + '@octokit/plugin-rest-endpoint-methods': 13.5.0(@octokit/core@6.1.6) + + '@octokit/types@13.10.0': + dependencies: + '@octokit/openapi-types': 24.2.0 + + '@octokit/types@14.1.0': + dependencies: + '@octokit/openapi-types': 25.1.0 + + '@opencode-ai/plugin@1.15.10': dependencies: - '@opencode-ai/sdk': 1.14.48 - effect: 4.0.0-beta.59 + '@opencode-ai/sdk': 1.15.10 + effect: 4.0.0-beta.66 zod: 4.1.8 - '@opencode-ai/sdk@1.14.48': + '@opencode-ai/sdk@1.15.10': dependencies: cross-spawn: 7.0.6 - '@oxc-project/types@0.128.0': {} + '@oslojs/encoding@1.1.0': {} - '@oxc-project/types@0.132.0': {} + '@oxc-project/types@0.133.0': {} '@oxfmt/binding-android-arm-eabi@0.52.0': optional: true @@ -4397,22 +6915,36 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.67.0': optional: true + '@pkgjs/parseargs@0.11.0': + optional: true + + '@poppinss/colors@4.1.6': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + + '@poppinss/exception@1.2.3': {} + '@protobufjs/aspromise@1.1.2': {} '@protobufjs/base64@1.1.2': {} '@protobufjs/codegen@2.0.5': {} - '@protobufjs/eventemitter@1.1.0': {} + '@protobufjs/eventemitter@1.1.1': {} - '@protobufjs/fetch@1.1.0': + '@protobufjs/fetch@1.1.1': dependencies: '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.1 '@protobufjs/float@1.0.2': {} - '@protobufjs/inquire@1.1.1': {} + '@protobufjs/inquire@1.1.2': {} '@protobufjs/path@1.1.2': {} @@ -4420,257 +6952,235 @@ snapshots: '@protobufjs/utf8@1.1.1': {} - '@rolldown/binding-android-arm64@1.0.0-rc.18': + '@rolldown/binding-android-arm64@1.0.3': optional: true - '@rolldown/binding-android-arm64@1.0.2': + '@rolldown/binding-darwin-arm64@1.0.3': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.18': + '@rolldown/binding-darwin-x64@1.0.3': optional: true - '@rolldown/binding-darwin-arm64@1.0.2': + '@rolldown/binding-freebsd-x64@1.0.3': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.18': + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': optional: true - '@rolldown/binding-darwin-x64@1.0.2': + '@rolldown/binding-linux-arm64-gnu@1.0.3': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.18': + '@rolldown/binding-linux-arm64-musl@1.0.3': optional: true - '@rolldown/binding-freebsd-x64@1.0.2': + '@rolldown/binding-linux-ppc64-gnu@1.0.3': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18': + '@rolldown/binding-linux-s390x-gnu@1.0.3': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + '@rolldown/binding-linux-x64-gnu@1.0.3': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18': + '@rolldown/binding-linux-x64-musl@1.0.3': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.2': + '@rolldown/binding-openharmony-arm64@1.0.3': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18': + '@rolldown/binding-wasm32-wasi@1.0.3': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-linux-arm64-musl@1.0.2': + '@rolldown/binding-win32-arm64-msvc@1.0.3': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18': + '@rolldown/binding-win32-x64-msvc@1.0.3': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.2': - optional: true + '@rolldown/pluginutils@1.0.1': {} + + '@rollup/pluginutils@5.3.0(rollup@4.60.4)': + dependencies: + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.4 + optionalDependencies: + rollup: 4.60.4 - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18': + '@rollup/rollup-android-arm-eabi@4.60.4': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.2': + '@rollup/rollup-android-arm64@4.60.4': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18': + '@rollup/rollup-darwin-arm64@4.60.4': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.2': + '@rollup/rollup-darwin-x64@4.60.4': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.18': + '@rollup/rollup-freebsd-arm64@4.60.4': optional: true - '@rolldown/binding-linux-x64-musl@1.0.2': + '@rollup/rollup-freebsd-x64@4.60.4': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.18': + '@rollup/rollup-linux-arm-gnueabihf@4.60.4': optional: true - '@rolldown/binding-openharmony-arm64@1.0.2': + '@rollup/rollup-linux-arm-musleabihf@4.60.4': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.18': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@rollup/rollup-linux-arm64-gnu@4.60.4': optional: true - '@rolldown/binding-wasm32-wasi@1.0.2': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@rollup/rollup-linux-arm64-musl@4.60.4': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18': + '@rollup/rollup-linux-loong64-gnu@4.60.4': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.2': + '@rollup/rollup-linux-loong64-musl@4.60.4': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18': + '@rollup/rollup-linux-ppc64-gnu@4.60.4': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.2': + '@rollup/rollup-linux-ppc64-musl@4.60.4': optional: true - '@rolldown/pluginutils@1.0.0-rc.18': {} + '@rollup/rollup-linux-riscv64-gnu@4.60.4': + optional: true - '@rolldown/pluginutils@1.0.1': {} + '@rollup/rollup-linux-riscv64-musl@4.60.4': + optional: true - '@silvia-odwyer/photon-node@0.3.4': {} + '@rollup/rollup-linux-s390x-gnu@4.60.4': + optional: true - '@smithy/config-resolver@4.5.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@rollup/rollup-linux-x64-gnu@4.60.4': + optional: true - '@smithy/core@3.24.1': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.14.1 - tslib: 2.8.1 + '@rollup/rollup-linux-x64-musl@4.60.4': + optional: true - '@smithy/credential-provider-imds@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - '@smithy/types': 4.14.1 - tslib: 2.8.1 + '@rollup/rollup-openbsd-x64@4.60.4': + optional: true - '@smithy/eventstream-codec@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@rollup/rollup-openharmony-arm64@4.60.4': + optional: true - '@smithy/eventstream-serde-browser@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@rollup/rollup-win32-arm64-msvc@4.60.4': + optional: true - '@smithy/eventstream-serde-config-resolver@4.4.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@rollup/rollup-win32-ia32-msvc@4.60.4': + optional: true - '@smithy/eventstream-serde-node@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@rollup/rollup-win32-x64-gnu@4.60.4': + optional: true - '@smithy/fetch-http-handler@5.4.1': - dependencies: - '@smithy/core': 3.24.1 - '@smithy/types': 4.14.1 - tslib: 2.8.1 + '@rollup/rollup-win32-x64-msvc@4.60.4': + optional: true - '@smithy/hash-node@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@sec-ant/readable-stream@0.4.1': {} - '@smithy/invalid-dependency@4.3.1': + '@shikijs/core@4.1.0': dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@shikijs/primitive': 4.1.0 + '@shikijs/types': 4.1.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 - '@smithy/is-array-buffer@2.2.0': + '@shikijs/engine-javascript@4.1.0': dependencies: - tslib: 2.8.1 + '@shikijs/types': 4.1.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 - '@smithy/middleware-content-length@4.3.1': + '@shikijs/engine-oniguruma@4.1.0': dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@shikijs/types': 4.1.0 + '@shikijs/vscode-textmate': 10.0.2 - '@smithy/middleware-endpoint@4.5.1': + '@shikijs/langs@4.1.0': dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@shikijs/types': 4.1.0 - '@smithy/middleware-retry@4.6.1': + '@shikijs/primitive@4.1.0': dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@shikijs/types': 4.1.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 - '@smithy/middleware-serde@4.3.1': + '@shikijs/themes@4.1.0': dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@shikijs/types': 4.1.0 - '@smithy/middleware-stack@4.3.1': + '@shikijs/types@4.1.0': dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 - '@smithy/node-config-provider@4.4.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@shikijs/vscode-textmate@10.0.2': {} - '@smithy/node-http-handler@4.7.1': - dependencies: - '@smithy/core': 3.24.1 - '@smithy/types': 4.14.1 - tslib: 2.8.1 + '@silvia-odwyer/photon-node@0.3.4': {} - '@smithy/property-provider@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@sindresorhus/is@7.2.0': {} - '@smithy/protocol-http@5.4.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@sindresorhus/merge-streams@4.0.0': {} - '@smithy/querystring-builder@4.3.1': + '@smithy/core@3.24.4': dependencies: - '@smithy/core': 3.24.1 + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@smithy/shared-ini-file-loader@4.5.1': + '@smithy/credential-provider-imds@4.3.4': dependencies: - '@smithy/core': 3.24.1 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@smithy/signature-v4@5.4.1': + '@smithy/fetch-http-handler@5.4.4': dependencies: - '@smithy/core': 3.24.1 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@smithy/smithy-client@4.13.1': + '@smithy/is-array-buffer@2.2.0': dependencies: - '@smithy/core': 3.24.1 - '@smithy/types': 4.14.1 tslib: 2.8.1 - '@smithy/types@4.14.1': + '@smithy/node-config-provider@4.4.4': dependencies: + '@smithy/core': 3.24.4 tslib: 2.8.1 - '@smithy/url-parser@4.3.1': + '@smithy/node-http-handler@4.7.3': dependencies: - '@smithy/core': 3.24.1 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@smithy/util-base64@4.4.1': + '@smithy/node-http-handler@4.7.4': dependencies: - '@smithy/core': 3.24.1 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@smithy/util-body-length-browser@4.3.1': + '@smithy/signature-v4@5.4.4': dependencies: - '@smithy/core': 3.24.1 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 - '@smithy/util-body-length-node@4.3.1': + '@smithy/types@4.14.2': dependencies: - '@smithy/core': 3.24.1 tslib: 2.8.1 '@smithy/util-buffer-from@2.2.0': @@ -4678,68 +7188,82 @@ snapshots: '@smithy/is-array-buffer': 2.2.0 tslib: 2.8.1 - '@smithy/util-config-provider@4.3.1': + '@smithy/util-utf8@2.3.0': dependencies: - '@smithy/core': 3.24.1 + '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.4.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@speed-highlight/core@1.2.15': {} - '@smithy/util-defaults-mode-node@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@standard-schema/spec@1.1.0': {} - '@smithy/util-endpoints@3.5.1': + '@tailwindcss/node@4.3.0': dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.22.0 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.0 - '@smithy/util-hex-encoding@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@tailwindcss/oxide-android-arm64@4.3.0': + optional: true - '@smithy/util-middleware@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@tailwindcss/oxide-darwin-arm64@4.3.0': + optional: true - '@smithy/util-retry@4.4.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@tailwindcss/oxide-darwin-x64@4.3.0': + optional: true - '@smithy/util-stream@4.6.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@tailwindcss/oxide-freebsd-x64@4.3.0': + optional: true - '@smithy/util-utf8@2.3.0': - dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + optional: true - '@smithy/util-utf8@4.3.1': - dependencies: - '@smithy/core': 3.24.1 - tslib: 2.8.1 + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + optional: true - '@standard-schema/spec@1.1.0': {} + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + optional: true - '@tokenizer/inflate@0.4.1': - dependencies: - debug: 4.4.3 - token-types: 6.1.2 - transitivePeerDependencies: - - supports-color + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + optional: true - '@tokenizer/token@0.3.0': {} + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + optional: true - '@tootallnate/quickjs-emscripten@0.23.0': {} + '@tailwindcss/oxide@4.3.0': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-x64': 4.3.0 + '@tailwindcss/oxide-freebsd-x64': 4.3.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 + + '@tailwindcss/vite@4.3.0(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0))': + dependencies: + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + tailwindcss: 4.3.0 + vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0) '@turbo/darwin-64@2.9.14': optional: true @@ -4769,19 +7293,33 @@ snapshots: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} + '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/json-schema@7.0.15': {} - '@types/mime-types@2.1.4': {} + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 - '@types/node@12.20.55': {} + '@types/ms@2.1.0': {} - '@types/node@25.9.0': + '@types/nlcst@2.0.3': dependencies: - undici-types: 7.24.6 + '@types/unist': 3.0.3 + + '@types/node@12.20.55': {} '@types/node@25.9.1': dependencies: @@ -4791,63 +7329,27 @@ snapshots: '@types/unist@3.0.3': {} - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 25.9.0 - optional: true - - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260526.1': - optional: true - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260526.1': - optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260526.1': - optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260526.1': - optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260526.1': - optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260526.1': - optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260526.1': - optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview@7.0.0-dev.20260526.1': - optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260526.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260526.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260526.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260526.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260526.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260526.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260526.1 - '@typescript/native-preview@7.0.0-dev.20260527.1': optionalDependencies: '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260527.1 @@ -4858,6 +7360,8 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260527.1 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260527.1 + '@ungap/structured-clone@1.3.1': {} + '@vitest/expect@4.1.7': dependencies: '@standard-schema/spec': 1.1.0 @@ -4867,13 +7371,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0))': + '@vitest/mocker@4.1.7(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0) '@vitest/pretty-format@4.1.7': dependencies: @@ -4899,6 +7403,56 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + '@volar/kit@2.4.28(typescript@6.0.3)': + dependencies: + '@volar/language-service': 2.4.28 + '@volar/typescript': 2.4.28 + typesafe-path: 0.2.2 + typescript: 6.0.3 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/language-core@2.4.28': + dependencies: + '@volar/source-map': 2.4.28 + + '@volar/language-server@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + '@volar/language-service': 2.4.28 + '@volar/typescript': 2.4.28 + path-browserify: 1.0.1 + request-light: 0.7.0 + vscode-languageserver: 9.0.1 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/language-service@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/source-map@2.4.28': {} + + '@volar/typescript@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vscode/emmet-helper@2.11.0': + dependencies: + emmet: 2.4.11 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + '@vscode/l10n@0.0.18': {} + accepts@2.0.0: dependencies: mime-types: 3.0.2 @@ -4921,6 +7475,72 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + alchemy@0.93.9(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0))(workerd@1.20260526.1): + dependencies: + '@aws-sdk/credential-providers': 3.1054.0 + '@cloudflare/unenv-preset': 2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260526.1) + '@cloudflare/workers-types': 4.20260526.1 + '@iarna/toml': 2.2.5 + '@octokit/rest': 21.1.1 + '@smithy/node-config-provider': 4.4.4 + '@smithy/types': 4.14.2 + aws4fetch: 1.0.20 + drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260526.1) + env-paths: 3.0.0 + esbuild: 0.25.12 + execa: 9.6.1 + fast-json-patch: 3.1.1 + fast-xml-parser: 5.8.0 + find-process: 2.1.1 + glob: 10.5.0 + jszip: 3.10.1 + libsodium-wrappers: 0.8.4 + miniflare: 4.20260424.0 + neverthrow: 8.2.0 + open: 10.2.0 + openapi-types: 12.1.3 + pathe: 2.0.3 + picocolors: 1.1.1 + proper-lockfile: 4.1.2 + signal-exit: 4.1.0 + unenv: 2.0.0-rc.21 + wrangler: 4.95.0(@cloudflare/workers-types@4.20260526.1) + ws: 8.21.0 + yaml: 2.9.0 + optionalDependencies: + vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0) + transitivePeerDependencies: + - '@aws-sdk/client-rds-data' + - '@electric-sql/pglite' + - '@libsql/client-wasm' + - '@neondatabase/serverless' + - '@op-engineering/op-sqlite' + - '@opentelemetry/api' + - '@planetscale/database' + - '@prisma/client' + - '@tidbcloud/serverless' + - '@types/better-sqlite3' + - '@types/pg' + - '@types/sql.js' + - '@upstash/redis' + - '@vercel/postgres' + - '@xata.io/client' + - better-sqlite3 + - bufferutil + - bun-types + - expo-sqlite + - gel + - knex + - kysely + - mysql2 + - pg + - postgres + - prisma + - sql.js + - sqlite3 + - utf-8-validate + - workerd + ansi-colors@4.1.3: {} ansi-regex@5.0.1: {} @@ -4931,7 +7551,12 @@ snapshots: dependencies: color-convert: 2.0.1 - any-promise@1.3.0: {} + ansi-styles@6.2.3: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 argparse@1.0.10: dependencies: @@ -4939,19 +7564,120 @@ snapshots: argparse@2.0.1: {} + aria-query@5.3.2: {} + + array-iterate@2.0.1: {} + array-union@2.1.0: {} assertion-error@2.0.1: {} - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 + astro@6.3.8(@types/node@25.9.1)(aws4fetch@1.0.20)(jiti@2.7.0)(lightningcss@1.32.0)(rollup@4.60.4)(tsx@4.22.3)(yaml@2.9.0): + dependencies: + '@astrojs/compiler': 4.0.0 + '@astrojs/internal-helpers': 0.9.1 + '@astrojs/markdown-remark': 7.1.2 + '@astrojs/telemetry': 3.3.2 + '@capsizecss/unpack': 4.0.0 + '@clack/prompts': 1.4.0 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.3.0(rollup@4.60.4) + aria-query: 5.3.2 + axobject-query: 4.1.0 + ci-info: 4.4.0 + clsx: 2.1.1 + common-ancestor-path: 2.0.0 + cookie: 1.1.1 + devalue: 5.8.1 + diff: 8.0.4 + dset: 3.1.4 + es-module-lexer: 2.1.0 + esbuild: 0.27.7 + flattie: 1.1.1 + fontace: 0.4.1 + get-tsconfig: 5.0.0-beta.4 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + js-yaml: 4.1.1 + jsonc-parser: 3.3.1 + magic-string: 0.30.21 + magicast: 0.5.3 + mrmime: 2.0.1 + neotraverse: 0.6.18 + obug: 2.1.1 + p-limit: 7.3.0 + p-queue: 9.3.0 + package-manager-detector: 1.6.0 + piccolore: 0.1.3 + picomatch: 4.0.4 + rehype: 13.0.2 + semver: 7.8.1 + shiki: 4.1.0 + smol-toml: 1.6.1 + svgo: 4.0.1 + tinyclip: 0.1.12 + tinyexec: 1.2.2 + tinyglobby: 0.2.16 + ultrahtml: 1.6.0 + unifont: 0.7.4 + unist-util-visit: 5.1.0 + unstorage: 1.17.5(aws4fetch@1.0.20) + vfile: 6.0.3 + vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0) + vitefu: 1.1.3(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) + xxhash-wasm: 1.1.0 + yargs-parser: 22.0.0 + zod: 4.4.3 + optionalDependencies: + sharp: 0.34.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - uploadthing + - yaml + + aws4fetch@1.0.20: {} + + axobject-query@4.1.0: {} + + bail@2.0.2: {} + + balanced-match@1.0.2: {} balanced-match@4.0.4: {} base64-js@1.5.1: {} - basic-ftp@5.3.1: {} + before-after-hook@3.0.2: {} better-path-resolve@1.0.0: dependencies: @@ -4959,6 +7685,8 @@ snapshots: bignumber.js@9.3.1: {} + blake3-wasm@2.1.5: {} + body-parser@2.2.2: dependencies: bytes: 3.1.2 @@ -4973,8 +7701,14 @@ snapshots: transitivePeerDependencies: - supports-color + boolbase@1.0.0: {} + bowser@2.14.1: {} + brace-expansion@2.1.1: + dependencies: + balanced-match: 1.0.2 + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -4983,10 +7717,12 @@ snapshots: dependencies: fill-range: 7.1.1 - buffer-crc32@0.2.13: {} - buffer-equal-constant-time@1.0.1: {} + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + bytes@3.1.2: {} call-bind-apply-helpers@1.0.2: @@ -5001,6 +7737,8 @@ snapshots: call-me-maybe@1.0.2: {} + ccount@2.0.1: {} + chai@6.2.2: {} chalk@4.1.2: @@ -5010,31 +7748,46 @@ snapshots: chalk@5.6.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + chardet@2.1.1: {} - cli-highlight@2.1.11: + chokidar@4.0.3: dependencies: - chalk: 4.1.2 - highlight.js: 10.7.3 - mz: 2.7.0 - parse5: 5.1.1 - parse5-htmlparser2-tree-adapter: 6.0.1 - yargs: 16.2.0 + readdirp: 4.1.2 - cliui@7.0.4: + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + ci-info@4.4.0: {} + + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 color-name@1.1.4: {} + comma-separated-tokens@2.0.3: {} + + commander@11.1.0: {} + commander@14.0.3: {} + common-ancestor-path@2.0.0: {} + content-disposition@1.1.0: {} content-type@1.0.5: {} @@ -5043,10 +7796,16 @@ snapshots: convert-source-map@2.0.0: {} + cookie-es@1.2.3: {} + cookie-signature@1.2.2: {} cookie@0.7.2: {} + cookie@1.1.1: {} + + core-util-is@1.0.3: {} + cors@2.8.6: dependencies: object-assign: 4.1.1 @@ -5058,45 +7817,116 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - data-uri-to-buffer@4.0.1: {} + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 - data-uri-to-buffer@6.0.2: {} + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + data-uri-to-buffer@4.0.1: {} debug@4.4.3: dependencies: ms: 2.1.3 - degenerator@5.0.1: + decode-named-character-reference@1.3.0: dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 + character-entities: 2.0.2 + + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + + defu@6.1.7: {} depd@2.0.0: {} + dequal@2.0.3: {} + + destr@2.0.5: {} + detect-indent@6.1.0: {} detect-libc@2.1.2: {} + devalue@5.8.1: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + diff@8.0.4: {} dir-glob@3.0.1: dependencies: path-type: 4.0.0 + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260526.1): + optionalDependencies: + '@cloudflare/workers-types': 4.20260526.1 + + dset@3.1.4: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 ee-first@1.1.1: {} - effect@4.0.0-beta.59: + effect@4.0.0-beta.66: dependencies: '@standard-schema/spec': 1.1.0 fast-check: 4.8.0 @@ -5109,19 +7939,35 @@ snapshots: uuid: 13.0.2 yaml: 2.9.0 + emmet@2.4.11: + dependencies: + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 + emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + encodeurl@2.0.0: {} - end-of-stream@1.4.5: + enhanced-resolve@5.22.0: dependencies: - once: 1.4.0 + graceful-fs: 4.2.11 + tapable: 2.3.3 enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 + entities@4.5.0: {} + + entities@6.0.1: {} + + env-paths@3.0.0: {} + + error-stack-parser-es@1.0.5: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -5132,6 +7978,93 @@ snapshots: dependencies: es-errors: 1.3.0 + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + esbuild@0.28.0: optionalDependencies: '@esbuild/aix-ppc64': 0.28.0 @@ -5165,32 +8098,41 @@ snapshots: escape-html@1.0.3: {} - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 + escape-string-regexp@5.0.0: {} esprima@4.0.1: {} - estraverse@5.3.0: {} + estree-walker@2.0.2: {} estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 - esutils@2.0.3: {} - etag@1.8.1: {} + eventemitter3@5.0.4: {} + eventsource-parser@3.0.8: {} eventsource@3.0.7: dependencies: eventsource-parser: 3.0.8 + execa@9.6.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + expect-type@1.3.0: {} express-rate-limit@8.5.2(express@5.2.1): @@ -5231,24 +8173,18 @@ snapshots: transitivePeerDependencies: - supports-color - extend@3.0.2: {} + exsolve@1.0.8: {} - extendable-error@0.1.7: {} + extend@3.0.2: {} - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color + extendable-error@0.1.7: {} fast-check@4.8.0: dependencies: pure-rand: 8.4.0 + fast-content-type-parse@2.0.1: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -5259,27 +8195,43 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-json-patch@3.1.1: {} + + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-uri@3.1.2: {} + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 + fast-xml-builder@1.2.0: dependencies: path-expression-matcher: 1.5.0 xml-naming: 0.1.0 - fast-xml-parser@5.7.2: + fast-xml-parser@5.7.3: dependencies: '@nodable/entities': 2.1.0 fast-xml-builder: 1.2.0 path-expression-matcher: 1.5.0 strnum: 2.3.0 - fastq@1.20.1: + fast-xml-parser@5.8.0: dependencies: - reusify: 1.1.0 + '@nodable/entities': 2.1.0 + fast-xml-builder: 1.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.3.0 + xml-naming: 0.1.0 - fd-slicer@1.1.0: + fastq@1.20.1: dependencies: - pend: 1.2.0 + reusify: 1.1.0 fdir@6.5.0(picomatch@4.0.4): optionalDependencies: @@ -5290,14 +8242,9 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - file-type@21.3.4: + figures@6.1.0: dependencies: - '@tokenizer/inflate': 0.4.1 - strtok3: 10.3.5 - token-types: 6.1.2 - uint8array-extras: 1.5.0 - transitivePeerDependencies: - - supports-color + is-unicode-supported: 2.1.0 fill-range@7.1.1: dependencies: @@ -5316,11 +8263,32 @@ snapshots: find-my-way-ts@0.1.6: {} + find-process@2.1.1: + dependencies: + chalk: 4.1.2 + commander: 14.0.3 + loglevel: 1.9.2 + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + flattie@1.1.1: {} + + fontace@0.4.1: + dependencies: + fontkitten: 1.0.3 + + fontkitten@1.0.3: + dependencies: + tiny-inflate: 1.0.3 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -5384,22 +8352,30 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.2 - get-stream@5.2.0: + get-stream@9.0.1: dependencies: - pump: 3.0.4 + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 - get-uri@6.0.5: + get-tsconfig@5.0.0-beta.4: dependencies: - basic-ftp: 5.3.1 - data-uri-to-buffer: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color + resolve-pkg-maps: 1.0.0 + + github-slugger@2.0.0: {} glob-parent@5.1.2: dependencies: is-glob: 4.0.3 + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + glob@13.0.6: dependencies: minimatch: 10.2.5 @@ -5434,6 +8410,18 @@ snapshots: graphql@16.14.0: {} + h3@1.15.11: + dependencies: + cookie-es: 1.2.3 + crossws: 0.3.5 + defu: 6.1.7 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.4 + radix3: 1.1.2 + ufo: 1.6.4 + uncrypto: 0.1.3 + has-flag@4.0.0: {} has-symbols@1.1.0: {} @@ -5442,17 +8430,112 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.1 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + highlight.js@10.7.3: {} - hono-rate-limiter@0.5.3(hono@4.12.23): + hono-rate-limiter@0.5.3(hono@4.12.23)(unstorage@1.17.5(aws4fetch@1.0.20)): dependencies: hono: 4.12.23 + optionalDependencies: + unstorage: 1.17.5(aws4fetch@1.0.20) hono@4.12.23: {} hosted-git-info@9.0.3: dependencies: - lru-cache: 11.3.6 + lru-cache: 11.5.0 + + html-escaper@3.0.3: {} + + html-void-elements@3.0.0: {} + + http-cache-semantics@4.2.0: {} http-errors@2.0.1: dependencies: @@ -5478,18 +8561,20 @@ snapshots: human-id@4.1.3: {} + human-signals@8.0.1: {} + husky@9.1.7: {} iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: {} - ignore@5.3.2: {} ignore@7.0.5: {} + immediate@3.0.6: {} + inherits@2.0.4: {} ini@6.0.0: {} @@ -5498,6 +8583,12 @@ snapshots: ipaddr.js@1.9.1: {} + iron-webcrypto@1.2.1: {} + + is-docker@3.0.0: {} + + is-docker@4.0.0: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -5506,18 +8597,40 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-number@7.0.0: {} + is-plain-obj@4.1.0: {} + is-promise@4.0.0: {} + is-stream@4.0.1: {} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 + is-unicode-supported@2.1.0: {} + is-windows@1.0.2: {} + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + + isarray@1.0.0: {} + isexe@2.0.0: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jiti@2.7.0: {} jose@6.2.3: {} @@ -5537,17 +8650,28 @@ snapshots: json-schema-to-ts@3.1.1: dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 ts-algebra: 2.0.0 json-schema-traverse@1.0.0: {} json-schema-typed@8.0.2: {} + jsonc-parser@2.3.1: {} + + jsonc-parser@3.3.1: {} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 @@ -5559,11 +8683,20 @@ snapshots: jwa: 2.0.1 safe-buffer: 5.2.1 - koffi@2.16.2: - optional: true + kleur@4.1.5: {} kubernetes-types@1.30.0: {} + libsodium-wrappers@0.8.4: + dependencies: + libsodium: 0.8.4 + + libsodium@0.8.4: {} + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + lightningcss-android-arm64@1.32.0: optional: true @@ -5619,26 +8752,353 @@ snapshots: lodash.startcase@4.4.0: {} + loglevel@1.9.2: {} + long@5.3.2: {} - lru-cache@11.3.6: {} + longest-streak@3.1.0: {} + + lru-cache@10.4.3: {} - lru-cache@7.18.3: {} + lru-cache@11.5.0: {} magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.5.3: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + source-map-js: 1.2.1 + + markdown-table@3.0.4: {} + marked@15.0.12: {} math-intrinsics@1.1.0: {} + mdast-util-definitions@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.1 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdn-data@2.0.28: {} + + mdn-data@2.27.1: {} + media-typer@1.1.0: {} merge-descriptors@2.0.0: {} merge2@1.4.1: {} + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -5650,48 +9110,84 @@ snapshots: dependencies: mime-db: 1.54.0 + miniflare@4.20260424.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.34.5 + undici: 7.24.8 + workerd: 1.20260424.1 + ws: 8.18.0 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + miniflare@4.20260526.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.34.5 + undici: 7.24.8 + workerd: 1.20260526.1 + ws: 8.20.1 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.1 + minipass@7.1.3: {} mri@1.2.0: {} + mrmime@2.0.1: {} + ms@2.1.3: {} - msgpackr-extract@3.0.3: + msgpackr-extract@3.0.4: dependencies: node-gyp-build-optional-packages: 5.2.2 optionalDependencies: - '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.4 optional: true msgpackr@1.11.12: optionalDependencies: - msgpackr-extract: 3.0.3 + msgpackr-extract: 3.0.4 - multipasta@0.2.7: {} + muggle-string@0.4.1: {} - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 + multipasta@0.2.7: {} nanoid@3.3.12: {} negotiator@1.0.0: {} - netmask@2.1.1: {} + neotraverse@0.6.18: {} + + neverthrow@8.2.0: + optionalDependencies: + '@rollup/rollup-linux-x64-gnu': 4.60.4 + + nlcst-to-string@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 node-domexception@1.0.0: {} + node-fetch-native@1.6.7: {} + node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -5703,12 +9199,33 @@ snapshots: detect-libc: 2.1.2 optional: true + node-mock-http@1.0.4: {} + + normalize-path@3.0.0: {} + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + object-assign@4.1.1: {} object-inspect@1.13.4: {} obug@2.1.1: {} + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.4 + + ohash@2.0.11: {} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -5717,9 +9234,24 @@ snapshots: dependencies: wrappy: 1.0.2 - openai@6.26.0(ws@8.20.0)(zod@4.4.3): + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + openai@6.26.0(ws@8.21.0)(zod@4.4.3): optionalDependencies: - ws: 8.20.0 + ws: 8.21.0 zod: 4.4.3 openapi-types@12.1.3: {} @@ -5780,71 +9312,88 @@ snapshots: dependencies: p-try: 2.2.0 + p-limit@7.3.0: + dependencies: + yocto-queue: 1.2.2 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 p-map@2.1.0: {} + p-queue@9.3.0: + dependencies: + eventemitter3: 5.0.4 + p-timeout: 7.0.1 + p-retry@4.6.2: dependencies: '@types/retry': 0.12.0 retry: 0.13.1 - p-try@2.2.0: {} + p-timeout@7.0.1: {} - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.4 - debug: 4.4.3 - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color + p-try@2.2.0: {} - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.1.1 + package-json-from-dist@1.0.1: {} package-manager-detector@0.2.11: dependencies: quansync: 0.2.11 - parse5-htmlparser2-tree-adapter@6.0.1: + package-manager-detector@1.6.0: {} + + pako@1.0.11: {} + + parse-latin@7.0.0: dependencies: - parse5: 6.0.1 + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 - parse5@5.1.1: {} + parse-ms@4.0.0: {} - parse5@6.0.1: {} + parse5@7.3.0: + dependencies: + entities: 6.0.1 parseurl@1.3.3: {} partial-json@0.1.7: {} + path-browserify@1.0.1: {} + path-exists@4.0.0: {} path-expression-matcher@1.5.0: {} path-key@3.1.1: {} + path-key@4.0.0: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.3 + path-scurry@2.0.2: dependencies: - lru-cache: 11.3.6 + lru-cache: 11.5.0 minipass: 7.1.3 + path-to-regexp@6.3.0: {} + path-to-regexp@8.4.2: {} path-type@4.0.0: {} pathe@2.0.3: {} - pend@1.2.0: {} + piccolore@0.1.3: {} picocolors@1.1.1: {} @@ -5864,25 +9413,37 @@ snapshots: prettier@2.8.8: {} + prettier@3.8.3: {} + + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + + prismjs@1.30.0: {} + + process-nextick-args@2.0.1: {} + proper-lockfile@4.1.2: dependencies: graceful-fs: 4.2.11 retry: 0.12.0 signal-exit: 3.0.7 - protobufjs@7.5.8: + property-information@7.1.0: {} + + protobufjs@7.6.1: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 '@protobufjs/codegen': 2.0.5 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 + '@protobufjs/eventemitter': 1.1.1 + '@protobufjs/fetch': 1.1.1 '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.1 + '@protobufjs/inquire': 1.1.2 '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 - '@types/node': 25.9.0 + '@types/node': 25.9.1 long: 5.3.2 proxy-addr@2.0.7: @@ -5890,26 +9451,6 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-agent@6.5.0: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - proxy-from-env@1.1.0: {} - - pump@3.0.4: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - pure-rand@8.4.0: {} qs@6.15.2: @@ -5920,6 +9461,8 @@ snapshots: queue-microtask@1.2.3: {} + radix3@1.1.2: {} + range-parser@1.2.1: {} raw-body@3.0.2: @@ -5936,59 +9479,205 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readdirp@4.1.2: {} + + readdirp@5.0.0: {} + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + rehype@13.0.2: + dependencies: + '@types/hast': 3.0.4 + rehype-parse: 9.0.1 + rehype-stringify: 10.0.1 + unified: 11.0.5 + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-smartypants@3.0.2: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + request-light@0.5.8: {} + + request-light@0.7.0: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + + retext-latin@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + retext-smartypants@6.2.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.1.0 + + retext-stringify@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + retext@9.0.0: + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + retry@0.12.0: {} retry@0.13.1: {} reusify@1.1.0: {} - rolldown@1.0.0-rc.18: + rolldown@1.0.3: dependencies: - '@oxc-project/types': 0.128.0 - '@rolldown/pluginutils': 1.0.0-rc.18 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.18 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.18 - '@rolldown/binding-darwin-x64': 1.0.0-rc.18 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.18 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.18 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.18 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.18 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.18 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.18 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.18 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.18 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.18 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.18 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.18 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.18 - - rolldown@1.0.2: - dependencies: - '@oxc-project/types': 0.132.0 + '@oxc-project/types': 0.133.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.2 - '@rolldown/binding-darwin-arm64': 1.0.2 - '@rolldown/binding-darwin-x64': 1.0.2 - '@rolldown/binding-freebsd-x64': 1.0.2 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 - '@rolldown/binding-linux-arm64-gnu': 1.0.2 - '@rolldown/binding-linux-arm64-musl': 1.0.2 - '@rolldown/binding-linux-ppc64-gnu': 1.0.2 - '@rolldown/binding-linux-s390x-gnu': 1.0.2 - '@rolldown/binding-linux-x64-gnu': 1.0.2 - '@rolldown/binding-linux-x64-musl': 1.0.2 - '@rolldown/binding-openharmony-arm64': 1.0.2 - '@rolldown/binding-wasm32-wasi': 1.0.2 - '@rolldown/binding-win32-arm64-msvc': 1.0.2 - '@rolldown/binding-win32-x64-msvc': 1.0.2 + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 + + rollup@4.60.4: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.60.4 + '@rollup/rollup-android-arm64': 4.60.4 + '@rollup/rollup-darwin-arm64': 4.60.4 + '@rollup/rollup-darwin-x64': 4.60.4 + '@rollup/rollup-freebsd-arm64': 4.60.4 + '@rollup/rollup-freebsd-x64': 4.60.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.4 + '@rollup/rollup-linux-arm-musleabihf': 4.60.4 + '@rollup/rollup-linux-arm64-gnu': 4.60.4 + '@rollup/rollup-linux-arm64-musl': 4.60.4 + '@rollup/rollup-linux-loong64-gnu': 4.60.4 + '@rollup/rollup-linux-loong64-musl': 4.60.4 + '@rollup/rollup-linux-ppc64-gnu': 4.60.4 + '@rollup/rollup-linux-ppc64-musl': 4.60.4 + '@rollup/rollup-linux-riscv64-gnu': 4.60.4 + '@rollup/rollup-linux-riscv64-musl': 4.60.4 + '@rollup/rollup-linux-s390x-gnu': 4.60.4 + '@rollup/rollup-linux-x64-gnu': 4.60.4 + '@rollup/rollup-linux-x64-musl': 4.60.4 + '@rollup/rollup-openbsd-x64': 4.60.4 + '@rollup/rollup-openharmony-arm64': 4.60.4 + '@rollup/rollup-win32-arm64-msvc': 4.60.4 + '@rollup/rollup-win32-ia32-msvc': 4.60.4 + '@rollup/rollup-win32-x64-gnu': 4.60.4 + '@rollup/rollup-win32-x64-msvc': 4.60.4 + fsevents: 2.3.3 + + rosie-skills-darwin-arm64@0.6.4: + optional: true + + rosie-skills-freebsd-x64@0.6.4: + optional: true + + rosie-skills-linux-x64@0.6.4: + optional: true + + rosie-skills@0.6.4: + optionalDependencies: + rosie-skills-darwin-arm64: 0.6.4 + rosie-skills-freebsd-x64: 0.6.4 + rosie-skills-linux-x64: 0.6.4 router@2.2.0: dependencies: @@ -6000,14 +9689,20 @@ snapshots: transitivePeerDependencies: - supports-color + run-applescript@7.1.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} + sax@1.6.0: {} + semver@7.8.1: {} send@1.2.1: @@ -6035,14 +9730,58 @@ snapshots: transitivePeerDependencies: - supports-color + setimmediate@1.0.5: {} + setprototypeof@1.2.0: {} + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.1 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} + shiki@4.1.0: + dependencies: + '@shikijs/core': 4.1.0 + '@shikijs/engine-javascript': 4.1.0 + '@shikijs/engine-oniguruma': 4.1.0 + '@shikijs/langs': 4.1.0 + '@shikijs/themes': 4.1.0 + '@shikijs/types': 4.1.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 @@ -6077,27 +9816,15 @@ snapshots: signal-exit@4.1.0: {} - slash@3.0.0: {} - - smart-buffer@4.2.0: {} + sisteransi@1.0.5: {} - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.9 - transitivePeerDependencies: - - supports-color + slash@3.0.0: {} - socks@2.8.9: - dependencies: - ip-address: 10.2.0 - smart-buffer: 4.2.0 + smol-toml@1.6.1: {} source-map-js@1.2.1: {} - source-map@0.6.1: - optional: true + space-separated-tokens@2.0.2: {} spawndamnit@3.0.1: dependencies: @@ -6118,6 +9845,21 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -6128,28 +9870,38 @@ snapshots: strip-bom@3.0.0: {} + strip-final-newline@4.0.0: {} + strnum@2.3.0: {} - strtok3@10.3.5: - dependencies: - '@tokenizer/token': 0.3.0 + supports-color@10.2.2: {} supports-color@7.2.0: dependencies: has-flag: 4.0.0 - term-size@2.2.1: {} - - thenify-all@1.6.0: + svgo@4.0.1: dependencies: - thenify: 3.3.1 + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.2.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.0 - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 + tailwindcss@4.3.0: {} + + tapable@2.3.3: {} + + term-size@2.2.1: {} + + tiny-inflate@1.0.3: {} tinybench@2.9.0: {} + tinyclip@0.1.12: {} + tinyexec@1.2.2: {} tinyglobby@0.2.16: @@ -6167,14 +9919,12 @@ snapshots: toidentifier@1.0.1: {} - token-types@6.1.2: - dependencies: - '@borewit/text-codec': 0.2.2 - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - toml@4.1.1: {} + trim-lines@3.0.1: {} + + trough@2.2.0: {} + ts-algebra@2.0.0: {} tslib@2.8.1: {} @@ -6202,28 +9952,128 @@ snapshots: typebox@1.1.38: {} + typesafe-path@0.2.2: {} + + typescript-auto-import-cache@0.3.6: + dependencies: + semver: 7.8.1 + typescript@6.0.3: {} - uint8array-extras@1.5.0: {} + ufo@1.6.4: {} + + ultrahtml@1.6.0: {} + + uncrypto@0.1.3: {} undici-types@7.24.6: {} - undici@7.25.0: {} + undici@7.24.8: {} + + undici@8.3.0: {} + + unenv@2.0.0-rc.21: + dependencies: + defu: 6.1.7 + exsolve: 1.0.8 + ohash: 2.0.11 + pathe: 2.0.3 + ufo: 1.6.4 + + unenv@2.0.0-rc.24: + dependencies: + pathe: 2.0.3 + + unicorn-magic@0.3.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unifont@0.7.4: + dependencies: + css-tree: 3.2.1 + ofetch: 1.5.1 + ohash: 2.0.11 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-modify-children@4.0.0: + dependencies: + '@types/unist': 3.0.3 + array-iterate: 2.0.1 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 + unist-util-visit-children@3.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + universal-user-agent@7.0.3: {} + universalify@0.1.2: {} unpipe@1.0.0: {} - uuid@13.0.2: {} + unstorage@1.17.5(aws4fetch@1.0.20): + dependencies: + anymatch: 3.1.3 + chokidar: 5.0.0 + destr: 2.0.5 + h3: 1.15.11 + lru-cache: 11.5.0 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.4 + optionalDependencies: + aws4fetch: 1.0.20 - uuid@14.0.0: {} + util-deprecate@1.0.2: {} + + uuid@13.0.2: {} vary@1.1.2: {} + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + vfile-matter@5.0.1: dependencies: vfile: 6.0.3 @@ -6239,24 +10089,30 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0): + vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0): dependencies: - lightningcss: 1.32.0 + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.15 - rolldown: 1.0.0-rc.18 + rollup: 4.60.4 tinyglobby: 0.2.16 optionalDependencies: '@types/node': 25.9.1 - esbuild: 0.28.0 fsevents: 2.3.3 + jiti: 2.7.0 + lightningcss: 1.32.0 tsx: 4.22.3 yaml: 2.9.0 - vitest@4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)): + vitefu@1.1.3(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)): + optionalDependencies: + vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0) + + vitest@4.1.7(@types/node@25.9.1)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) + '@vitest/mocker': 4.1.7(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.7 '@vitest/runner': 4.1.7 '@vitest/snapshot': 4.1.7 @@ -6273,15 +10129,116 @@ snapshots: tinyexec: 1.2.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.9.1 transitivePeerDependencies: - msw + volar-service-css@0.0.70(@volar/language-service@2.4.28): + dependencies: + vscode-css-languageservice: 6.3.10 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.28 + + volar-service-emmet@0.0.70(@volar/language-service@2.4.28): + dependencies: + '@emmetio/css-parser': 0.4.1 + '@emmetio/html-matcher': 1.3.0 + '@vscode/emmet-helper': 2.11.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.28 + + volar-service-html@0.0.70(@volar/language-service@2.4.28): + dependencies: + vscode-html-languageservice: 5.6.2 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.28 + + volar-service-prettier@0.0.70(@volar/language-service@2.4.28)(prettier@3.8.3): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.28 + prettier: 3.8.3 + + volar-service-typescript-twoslash-queries@0.0.70(@volar/language-service@2.4.28): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.28 + + volar-service-typescript@0.0.70(@volar/language-service@2.4.28): + dependencies: + path-browserify: 1.0.1 + semver: 7.8.1 + typescript-auto-import-cache: 0.3.6 + vscode-languageserver-textdocument: 1.0.12 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.28 + + volar-service-yaml@0.0.70(@volar/language-service@2.4.28): + dependencies: + vscode-uri: 3.1.0 + yaml-language-server: 1.20.0 + optionalDependencies: + '@volar/language-service': 2.4.28 + + vscode-css-languageservice@6.3.10: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-html-languageservice@5.6.2: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-json-languageservice@4.1.8: + dependencies: + jsonc-parser: 3.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-nls@5.2.0: {} + + vscode-uri@3.1.0: {} + + web-namespaces@2.0.1: {} + web-streams-polyfill@3.3.3: {} + which-pm-runs@1.1.0: {} + which@2.0.2: dependencies: isexe: 2.0.0 @@ -6291,38 +10248,118 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + workerd@1.20260424.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260424.1 + '@cloudflare/workerd-darwin-arm64': 1.20260424.1 + '@cloudflare/workerd-linux-64': 1.20260424.1 + '@cloudflare/workerd-linux-arm64': 1.20260424.1 + '@cloudflare/workerd-windows-64': 1.20260424.1 + + workerd@1.20260526.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260526.1 + '@cloudflare/workerd-darwin-arm64': 1.20260526.1 + '@cloudflare/workerd-linux-64': 1.20260526.1 + '@cloudflare/workerd-linux-arm64': 1.20260526.1 + '@cloudflare/workerd-windows-64': 1.20260526.1 + + wrangler@4.95.0(@cloudflare/workers-types@4.20260526.1): + dependencies: + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1) + blake3-wasm: 2.1.5 + esbuild: 0.27.3 + miniflare: 4.20260526.0 + path-to-regexp: 6.3.0 + rosie-skills: 0.6.4 + unenv: 2.0.0-rc.24 + workerd: 1.20260526.1 + optionalDependencies: + '@cloudflare/workers-types': 4.20260526.1 + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + wrappy@1.0.2: {} - ws@8.20.0: {} + ws@8.18.0: {} + + ws@8.20.1: {} + + ws@8.21.0: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 xml-naming@0.1.0: {} + xxhash-wasm@1.1.0: {} + y18n@5.0.8: {} + yaml-language-server@1.20.0: + dependencies: + '@vscode/l10n': 0.0.18 + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + prettier: 3.8.3 + request-light: 0.5.8 + vscode-json-languageservice: 4.1.8 + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + yaml: 2.7.1 + + yaml@2.7.1: {} + yaml@2.9.0: {} - yargs-parser@20.2.9: {} + yargs-parser@21.1.1: {} - yargs@16.2.0: + yargs-parser@22.0.0: {} + + yargs@17.7.2: dependencies: - cliui: 7.0.4 + cliui: 8.0.1 escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.9 + yargs-parser: 21.1.1 + + yocto-queue@1.2.2: {} - yauzl@2.10.0: + yoctocolors@2.1.2: {} + + youch-core@0.3.3: + dependencies: + '@poppinss/exception': 1.2.3 + error-stack-parser-es: 1.0.5 + + youch@4.1.0-beta.10: dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.15 + cookie: 1.1.1 + youch-core: 0.3.3 zod-to-json-schema@3.25.2(zod@4.4.3): dependencies: @@ -6331,3 +10368,5 @@ snapshots: zod@4.1.8: {} zod@4.4.3: {} + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 902e57b..260f18f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,3 +9,5 @@ allowBuilds: koffi: true msgpackr-extract: true protobufjs: true + sharp: true + workerd: true diff --git a/tsconfig.json b/tsconfig.json index 8c13e67..afdaa17 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,5 @@ { "extends": "./packages/core/tsconfig.json", - "exclude": ["node_modules", ".turbo", "dist", "packages"] + "exclude": ["node_modules", ".turbo", "dist", "packages"], + "include": ["alchemy.run.ts"] } From 3f75aedd00d00e7b00aee218d6bd6ad2789afca8 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Wed, 27 May 2026 15:32:40 -0400 Subject: [PATCH 02/21] docs(agents): brv context --- .../remote_control/extracted_facts.md | 80 +++++++++++++++ .brv/context-tree/design/context.md | 16 +++ .../context-tree/design/impeccable/context.md | 10 ++ .../impeccable/impeccable_skill_guidelines.md | 43 ++++++++ .../facts/conventions/landing_app.md | 30 ++++++ .brv/context-tree/facts/project/adapt.md | 24 +++++ .../facts/project/adapt_target_facts.md | 24 +++++ .brv/context-tree/facts/project/animate.md | 24 +++++ .../facts/project/animate_target_facts.md | 24 +++++ .../facts/project/animation_facts.md | 24 +++++ .brv/context-tree/facts/project/audit.md | 24 +++++ .../facts/project/audit_target_facts.md | 24 +++++ .brv/context-tree/facts/project/bolder.md | 24 +++++ .../facts/project/bolder_target_facts.md | 24 +++++ .../facts/project/border_style.md | 24 +++++ .../facts/project/border_style_facts.md | 24 +++++ .brv/context-tree/facts/project/borders.md | 27 ++++++ .../facts/project/brand_register.md | 24 +++++ .brv/context-tree/facts/project/browser.md | 24 +++++ .../facts/project/browser_check.md | 27 ++++++ .../facts/project/browser_console.md | 27 ++++++ .../facts/project/browser_facts.md | 25 +++++ .../facts/project/browser_preview.md | 27 ++++++ .../facts/project/browser_preview_facts.md | 24 +++++ .brv/context-tree/facts/project/build.md | 27 ++++++ .../caplets_dark_contrast_fixed_png.md | 24 +++++ .../facts/project/caplets_icon_facts.md | 24 +++++ .../facts/project/caplets_landing.md | 27 ++++++ .../facts/project/caplets_navigation_facts.md | 24 +++++ .brv/context-tree/facts/project/card_grids.md | 27 ++++++ .../facts/project/card_layout_facts.md | 24 +++++ .brv/context-tree/facts/project/clarify.md | 24 +++++ .../facts/project/clarify_target_facts.md | 24 +++++ .../context-tree/facts/project/color_facts.md | 24 +++++ .../context-tree/facts/project/color_space.md | 24 +++++ .../facts/project/color_specification.md | 27 ++++++ .../facts/project/color_strategy.md | 27 ++++++ .../context-tree/facts/project/color_usage.md | 27 ++++++ .brv/context-tree/facts/project/colorize.md | 24 +++++ .../facts/project/colorize_target_facts.md | 24 +++++ .brv/context-tree/facts/project/command.md | 24 +++++ .../facts/project/command_table.md | 27 ++++++ .../facts/project/command_validation.md | 24 +++++ .brv/context-tree/facts/project/console.md | 24 +++++ .../facts/project/context_loader.md | 24 +++++ .../facts/project/context_loading.md | 27 ++++++ .../facts/project/context_override.md | 24 +++++ .brv/context-tree/facts/project/craft.md | 24 +++++ .../facts/project/craft_command.md | 24 +++++ .../facts/project/craft_feature_facts.md | 24 +++++ .brv/context-tree/facts/project/critique.md | 24 +++++ .../facts/project/critique_target_facts.md | 24 +++++ .../facts/project/css_animation.md | 24 +++++ .../facts/project/curated_project_facts.md | 97 +++++++++++++++++++ .../facts/project/dark_mode_contrast.md | 24 +++++ .brv/context-tree/facts/project/delight.md | 24 +++++ .../facts/project/delight_target_facts.md | 24 +++++ .brv/context-tree/facts/project/design_md.md | 27 ++++++ .../facts/project/design_md_facts.md | 24 +++++ .../context-tree/facts/project/design_task.md | 24 +++++ .../facts/project/design_tokens.md | 24 +++++ .../facts/project/desktop_nav_facts.md | 24 +++++ .brv/context-tree/facts/project/distill.md | 24 +++++ .../facts/project/distill_target_facts.md | 24 +++++ .brv/context-tree/facts/project/document.md | 24 +++++ .../facts/project/document_facts.md | 24 +++++ .../facts/project/easing_facts.md | 24 +++++ .brv/context-tree/facts/project/extract.md | 24 +++++ .../facts/project/extract_target_facts.md | 24 +++++ .../facts/project/extracted_project_facts.md | 37 +++++++ .../facts/project/glassmorphism.md | 27 ++++++ .../facts/project/gradient_text.md | 27 ++++++ .brv/context-tree/facts/project/harden.md | 24 +++++ .../facts/project/harden_target_facts.md | 24 +++++ .../facts/project/header_styling_facts.md | 24 +++++ .../facts/project/hero_metric_template.md | 27 ++++++ .../facts/project/hierarchy_facts.md | 24 +++++ .../facts/project/impeccable_context_dir.md | 24 +++++ .../project/interaction_pattern_facts.md | 24 +++++ .../facts/project/landing_build_facts.md | 24 +++++ .../facts/project/landing_page_animation.md | 27 ++++++ .../facts/project/landing_typecheck_facts.md | 24 +++++ .brv/context-tree/facts/project/layout.md | 24 +++++ .../facts/project/layout_target_facts.md | 24 +++++ .../facts/project/layout_template_facts.md | 24 +++++ .../context-tree/facts/project/line_length.md | 24 +++++ .../facts/project/line_length_facts.md | 24 +++++ .brv/context-tree/facts/project/live.md | 24 +++++ .brv/context-tree/facts/project/live_facts.md | 24 +++++ .../facts/project/load_context_mjs.md | 24 +++++ .../facts/project/loader_output.md | 24 +++++ .../facts/project/loader_output_handling.md | 24 +++++ .../facts/project/missing_design_md.md | 27 ++++++ .../facts/project/missing_product_md.md | 27 ++++++ .../facts/project/missing_register_field.md | 24 +++++ .../facts/project/mobile_nav_facts.md | 24 +++++ .brv/context-tree/facts/project/modals.md | 27 ++++++ .../facts/project/modified_files.md | 15 +-- .brv/context-tree/facts/project/motion.md | 28 ++++++ .../facts/project/nav_links_facts.md | 24 +++++ .../facts/project/neutral_colors.md | 24 +++++ .brv/context-tree/facts/project/onboard.md | 24 +++++ .../facts/project/onboard_target_facts.md | 24 +++++ .brv/context-tree/facts/project/optimize.md | 24 +++++ .../facts/project/optimize_target_facts.md | 24 +++++ .brv/context-tree/facts/project/overdrive.md | 24 +++++ .../facts/project/overdrive_target_facts.md | 24 +++++ .brv/context-tree/facts/project/pin.md | 27 ++++++ .../facts/project/pin_unpin_script.md | 27 ++++++ .brv/context-tree/facts/project/polish.md | 24 +++++ .../facts/project/polish_target_facts.md | 24 +++++ .brv/context-tree/facts/project/preview.md | 24 +++++ .brv/context-tree/facts/project/product_md.md | 27 ++++++ .../facts/project/product_md_facts.md | 24 +++++ .../facts/project/project_facts.md | 46 +++++++++ .../context-tree/facts/project/punctuation.md | 27 ++++++ .../facts/project/punctuation_facts.md | 24 +++++ .brv/context-tree/facts/project/quieter.md | 24 +++++ .../facts/project/quieter_target_facts.md | 24 +++++ .../context-tree/facts/project/readability.md | 24 +++++ .../facts/project/register_identification.md | 24 +++++ .brv/context-tree/facts/project/rule_1.md | 24 +++++ .brv/context-tree/facts/project/rule_2.md | 24 +++++ .brv/context-tree/facts/project/rule_3.md | 24 +++++ .../context-tree/facts/project/screenshots.md | 27 ++++++ .brv/context-tree/facts/project/script.md | 24 +++++ .../facts/project/setup_behavior.md | 24 +++++ .brv/context-tree/facts/project/shape.md | 24 +++++ .../facts/project/shape_feature_facts.md | 24 +++++ .../facts/project/shared_design_laws.md | 24 +++++ .brv/context-tree/facts/project/shortcut.md | 24 +++++ .../facts/project/side_stripe_borders.md | 24 +++++ .../facts/project/system_facts.md | 24 +++++ .brv/context-tree/facts/project/teach.md | 24 +++++ .../context-tree/facts/project/teach_facts.md | 24 +++++ .../facts/project/text_styling_facts.md | 24 +++++ .../facts/project/theme_selection.md | 27 ++++++ .brv/context-tree/facts/project/typecheck.md | 27 ++++++ .brv/context-tree/facts/project/typeset.md | 24 +++++ .../facts/project/typeset_target_facts.md | 24 +++++ .brv/context-tree/facts/project/typography.md | 28 ++++++ .../facts/project/ui_components.md | 24 +++++ .brv/context-tree/facts/project/unpin.md | 27 ++++++ .brv/context-tree/facts/project/validation.md | 27 ++++++ .../facts/project/visual_effect_facts.md | 24 +++++ 145 files changed, 3728 insertions(+), 6 deletions(-) create mode 100644 .brv/context-tree/architecture/remote_control/extracted_facts.md create mode 100644 .brv/context-tree/design/context.md create mode 100644 .brv/context-tree/design/impeccable/context.md create mode 100644 .brv/context-tree/design/impeccable/impeccable_skill_guidelines.md create mode 100644 .brv/context-tree/facts/conventions/landing_app.md create mode 100644 .brv/context-tree/facts/project/adapt.md create mode 100644 .brv/context-tree/facts/project/adapt_target_facts.md create mode 100644 .brv/context-tree/facts/project/animate.md create mode 100644 .brv/context-tree/facts/project/animate_target_facts.md create mode 100644 .brv/context-tree/facts/project/animation_facts.md create mode 100644 .brv/context-tree/facts/project/audit.md create mode 100644 .brv/context-tree/facts/project/audit_target_facts.md create mode 100644 .brv/context-tree/facts/project/bolder.md create mode 100644 .brv/context-tree/facts/project/bolder_target_facts.md create mode 100644 .brv/context-tree/facts/project/border_style.md create mode 100644 .brv/context-tree/facts/project/border_style_facts.md create mode 100644 .brv/context-tree/facts/project/borders.md create mode 100644 .brv/context-tree/facts/project/brand_register.md create mode 100644 .brv/context-tree/facts/project/browser.md create mode 100644 .brv/context-tree/facts/project/browser_check.md create mode 100644 .brv/context-tree/facts/project/browser_console.md create mode 100644 .brv/context-tree/facts/project/browser_facts.md create mode 100644 .brv/context-tree/facts/project/browser_preview.md create mode 100644 .brv/context-tree/facts/project/browser_preview_facts.md create mode 100644 .brv/context-tree/facts/project/build.md create mode 100644 .brv/context-tree/facts/project/caplets_dark_contrast_fixed_png.md create mode 100644 .brv/context-tree/facts/project/caplets_icon_facts.md create mode 100644 .brv/context-tree/facts/project/caplets_landing.md create mode 100644 .brv/context-tree/facts/project/caplets_navigation_facts.md create mode 100644 .brv/context-tree/facts/project/card_grids.md create mode 100644 .brv/context-tree/facts/project/card_layout_facts.md create mode 100644 .brv/context-tree/facts/project/clarify.md create mode 100644 .brv/context-tree/facts/project/clarify_target_facts.md create mode 100644 .brv/context-tree/facts/project/color_facts.md create mode 100644 .brv/context-tree/facts/project/color_space.md create mode 100644 .brv/context-tree/facts/project/color_specification.md create mode 100644 .brv/context-tree/facts/project/color_strategy.md create mode 100644 .brv/context-tree/facts/project/color_usage.md create mode 100644 .brv/context-tree/facts/project/colorize.md create mode 100644 .brv/context-tree/facts/project/colorize_target_facts.md create mode 100644 .brv/context-tree/facts/project/command.md create mode 100644 .brv/context-tree/facts/project/command_table.md create mode 100644 .brv/context-tree/facts/project/command_validation.md create mode 100644 .brv/context-tree/facts/project/console.md create mode 100644 .brv/context-tree/facts/project/context_loader.md create mode 100644 .brv/context-tree/facts/project/context_loading.md create mode 100644 .brv/context-tree/facts/project/context_override.md create mode 100644 .brv/context-tree/facts/project/craft.md create mode 100644 .brv/context-tree/facts/project/craft_command.md create mode 100644 .brv/context-tree/facts/project/craft_feature_facts.md create mode 100644 .brv/context-tree/facts/project/critique.md create mode 100644 .brv/context-tree/facts/project/critique_target_facts.md create mode 100644 .brv/context-tree/facts/project/css_animation.md create mode 100644 .brv/context-tree/facts/project/curated_project_facts.md create mode 100644 .brv/context-tree/facts/project/dark_mode_contrast.md create mode 100644 .brv/context-tree/facts/project/delight.md create mode 100644 .brv/context-tree/facts/project/delight_target_facts.md create mode 100644 .brv/context-tree/facts/project/design_md.md create mode 100644 .brv/context-tree/facts/project/design_md_facts.md create mode 100644 .brv/context-tree/facts/project/design_task.md create mode 100644 .brv/context-tree/facts/project/design_tokens.md create mode 100644 .brv/context-tree/facts/project/desktop_nav_facts.md create mode 100644 .brv/context-tree/facts/project/distill.md create mode 100644 .brv/context-tree/facts/project/distill_target_facts.md create mode 100644 .brv/context-tree/facts/project/document.md create mode 100644 .brv/context-tree/facts/project/document_facts.md create mode 100644 .brv/context-tree/facts/project/easing_facts.md create mode 100644 .brv/context-tree/facts/project/extract.md create mode 100644 .brv/context-tree/facts/project/extract_target_facts.md create mode 100644 .brv/context-tree/facts/project/extracted_project_facts.md create mode 100644 .brv/context-tree/facts/project/glassmorphism.md create mode 100644 .brv/context-tree/facts/project/gradient_text.md create mode 100644 .brv/context-tree/facts/project/harden.md create mode 100644 .brv/context-tree/facts/project/harden_target_facts.md create mode 100644 .brv/context-tree/facts/project/header_styling_facts.md create mode 100644 .brv/context-tree/facts/project/hero_metric_template.md create mode 100644 .brv/context-tree/facts/project/hierarchy_facts.md create mode 100644 .brv/context-tree/facts/project/impeccable_context_dir.md create mode 100644 .brv/context-tree/facts/project/interaction_pattern_facts.md create mode 100644 .brv/context-tree/facts/project/landing_build_facts.md create mode 100644 .brv/context-tree/facts/project/landing_page_animation.md create mode 100644 .brv/context-tree/facts/project/landing_typecheck_facts.md create mode 100644 .brv/context-tree/facts/project/layout.md create mode 100644 .brv/context-tree/facts/project/layout_target_facts.md create mode 100644 .brv/context-tree/facts/project/layout_template_facts.md create mode 100644 .brv/context-tree/facts/project/line_length.md create mode 100644 .brv/context-tree/facts/project/line_length_facts.md create mode 100644 .brv/context-tree/facts/project/live.md create mode 100644 .brv/context-tree/facts/project/live_facts.md create mode 100644 .brv/context-tree/facts/project/load_context_mjs.md create mode 100644 .brv/context-tree/facts/project/loader_output.md create mode 100644 .brv/context-tree/facts/project/loader_output_handling.md create mode 100644 .brv/context-tree/facts/project/missing_design_md.md create mode 100644 .brv/context-tree/facts/project/missing_product_md.md create mode 100644 .brv/context-tree/facts/project/missing_register_field.md create mode 100644 .brv/context-tree/facts/project/mobile_nav_facts.md create mode 100644 .brv/context-tree/facts/project/modals.md create mode 100644 .brv/context-tree/facts/project/motion.md create mode 100644 .brv/context-tree/facts/project/nav_links_facts.md create mode 100644 .brv/context-tree/facts/project/neutral_colors.md create mode 100644 .brv/context-tree/facts/project/onboard.md create mode 100644 .brv/context-tree/facts/project/onboard_target_facts.md create mode 100644 .brv/context-tree/facts/project/optimize.md create mode 100644 .brv/context-tree/facts/project/optimize_target_facts.md create mode 100644 .brv/context-tree/facts/project/overdrive.md create mode 100644 .brv/context-tree/facts/project/overdrive_target_facts.md create mode 100644 .brv/context-tree/facts/project/pin.md create mode 100644 .brv/context-tree/facts/project/pin_unpin_script.md create mode 100644 .brv/context-tree/facts/project/polish.md create mode 100644 .brv/context-tree/facts/project/polish_target_facts.md create mode 100644 .brv/context-tree/facts/project/preview.md create mode 100644 .brv/context-tree/facts/project/product_md.md create mode 100644 .brv/context-tree/facts/project/product_md_facts.md create mode 100644 .brv/context-tree/facts/project/project_facts.md create mode 100644 .brv/context-tree/facts/project/punctuation.md create mode 100644 .brv/context-tree/facts/project/punctuation_facts.md create mode 100644 .brv/context-tree/facts/project/quieter.md create mode 100644 .brv/context-tree/facts/project/quieter_target_facts.md create mode 100644 .brv/context-tree/facts/project/readability.md create mode 100644 .brv/context-tree/facts/project/register_identification.md create mode 100644 .brv/context-tree/facts/project/rule_1.md create mode 100644 .brv/context-tree/facts/project/rule_2.md create mode 100644 .brv/context-tree/facts/project/rule_3.md create mode 100644 .brv/context-tree/facts/project/screenshots.md create mode 100644 .brv/context-tree/facts/project/script.md create mode 100644 .brv/context-tree/facts/project/setup_behavior.md create mode 100644 .brv/context-tree/facts/project/shape.md create mode 100644 .brv/context-tree/facts/project/shape_feature_facts.md create mode 100644 .brv/context-tree/facts/project/shared_design_laws.md create mode 100644 .brv/context-tree/facts/project/shortcut.md create mode 100644 .brv/context-tree/facts/project/side_stripe_borders.md create mode 100644 .brv/context-tree/facts/project/system_facts.md create mode 100644 .brv/context-tree/facts/project/teach.md create mode 100644 .brv/context-tree/facts/project/teach_facts.md create mode 100644 .brv/context-tree/facts/project/text_styling_facts.md create mode 100644 .brv/context-tree/facts/project/theme_selection.md create mode 100644 .brv/context-tree/facts/project/typecheck.md create mode 100644 .brv/context-tree/facts/project/typeset.md create mode 100644 .brv/context-tree/facts/project/typeset_target_facts.md create mode 100644 .brv/context-tree/facts/project/typography.md create mode 100644 .brv/context-tree/facts/project/ui_components.md create mode 100644 .brv/context-tree/facts/project/unpin.md create mode 100644 .brv/context-tree/facts/project/validation.md create mode 100644 .brv/context-tree/facts/project/visual_effect_facts.md diff --git a/.brv/context-tree/architecture/remote_control/extracted_facts.md b/.brv/context-tree/architecture/remote_control/extracted_facts.md new file mode 100644 index 0000000..b5aae83 --- /dev/null +++ b/.brv/context-tree/architecture/remote_control/extracted_facts.md @@ -0,0 +1,80 @@ +--- +title: extracted_facts +summary: Extracted factual statements from provided context +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:12:54.989Z' +updatedAt: '2026-05-27T18:12:54.989Z' +--- +## Reason +Curate extracted factual statements from context + +## Raw Concept +**Task:** +Extract factual statements + +## Narrative +### Structure +Facts extracted from context + +### Highlights +The loader looks at the project root by default and falls back to `.agents/context/` and `docs/` if the root is clean.; `PRODUCT.md` is required.; `DESIGN.md` is optional, strongly recommended.; If PRODUCT.md is missing, empty, or placeholder (`[TODO]` markers, <200 chars): run `{{command_prefix}}impeccable teach`.; If DESIGN.md is missing: nudge once per session.; Every design task is **brand** (marketing, landing, campaign, long-form content, portfolio) or **product** (app UI, admin, dashboard, tool).; Priority for register identification: (1) cue in the task itself, (2) the surface in focus, (3) `register` field in PRODUCT.md.; If PRODUCT.md lacks the `register` field (legacy), infer it once from its "Users" and "Product Purpose" sections, then cache the inferred value for the session.; Use OKLCH for colors.; Never use #000 or #fff; tint every neutral toward the brand hue.; The "one accent ≤10%" rule applies only to the Restrained strategy.; Dark vs. light themes are never a default; choose based on physical context.; Cap body line length at 65–75 characters.; Maintain a hierarchy through scale and weight contrast with at least a 1.25 ratio between steps.; Vary spacing for rhythm; same padding everywhere creates monotony.; Cards should only be used when they are truly the best affordance; nested cards are always wrong.; Do not animate CSS layout properties.; Use ease-out exponential curves (ease-out-quart, quint, expo) for motion; avoid bounce or elastic easing.; Side‑stripe borders greater than 1 px as colored accents are prohibited.; Gradient text using background‑clip: text with a gradient background is prohibited.; Glassmorphism as a default style is prohibited; use only rarely and purposefully.; The hero‑metric template (big number, small label, supporting stats, gradient accent) is prohibited as a SaaS cliché.; Identical card grids with repeated icon + heading + text are prohibited.; Modals should not be the first design choice; consider inline or progressive alternatives first.; Every word in copy must earn its place; avoid restated headings and intros that repeat the title.; Em dashes are prohibited; use commas, colons, semicolons, periods, or parentheses instead.; `craft [feature]` is a Build command that shapes then builds a feature end-to-end.; `shape [feature]` is a Build command that plans UX/UI before writing code.; `teach` is a Build command that sets up PRODUCT.md and DESIGN.md context.; `document` is a Build command that generates DESIGN.md from existing project code.; `extract [target]` is a Build command that pulls reusable tokens and components into a design system.; `critique [target]` is an Evaluate command that performs a UX design review with heuristic scoring.; `audit [target]` is an Evaluate command that conducts technical quality checks such as accessibility, performance, and responsiveness.; `polish [target]` is a Refine command that provides a final quality pass before shipping.; `bolder [target]` is a Refine command that amplifies safe or bland designs.; `quieter [target]` is a Refine command that tones down aggressive or overstimulating designs.; `distill [target]` is a Refine command that strips to essence and removes complexity.; `harden [target]` is a Refine command that makes a product production‑ready, handling errors, i18n, and edge cases.; `onboard [target]` is a Refine command that designs first‑run flows, empty states, and activation experiences.; `animate [target]` is an Enhance command that adds purposeful animations and motion.; `colorize [target]` is an Enhance command that adds strategic color to monochromatic UIs.; `typeset [target]` is an Enhance command that improves typography hierarchy and fonts.; `layout [target]` is an Enhance command that fixes spacing, rhythm, and visual hierarchy.; `delight [target]` is an Enhance command that adds personality and memorable touches.; `overdrive [target]` is an Enhance command that pushes past conventional limits.; `clarify [target]` is a Fix command that improves UX copy, labels, and error messages.; `adapt [target]` is a Fix command that adapts designs for different devices and screen sizes.; `optimize [target]` is a Fix command that diagnoses and fixes UI performance issues.; `live` is an Iterate command that provides a visual variant mode for picking elements in the browser and generating alternatives.; `pin ` and `unpin ` are management commands for pinning and unpinning other commands.; Pin creates a standalone shortcut so `{{command_prefix}}` invokes `{{command_prefix}}impeccable ` directly.; Unpin removes the standalone shortcut created by Pin.; The script `node {{scripts_path}}/pin.mjs ` writes to every harness directory present in the project.; Valid `` is any command from the table above.; Report the script's result concisely.; Confirm the new shortcut on success, relay stderr verbatim on error. + +## Facts +- **loader behavior**: The loader looks at the project root by default and falls back to `.agents/context/` and `docs/` if the root is clean. +- **PRODUCT.md**: `PRODUCT.md` is required. +- **DESIGN.md**: `DESIGN.md` is optional, strongly recommended. +- **missing PRODUCT.md**: If PRODUCT.md is missing, empty, or placeholder (`[TODO]` markers, <200 chars): run `{{command_prefix}}impeccable teach`. +- **missing DESIGN.md**: If DESIGN.md is missing: nudge once per session. +- **design task type**: Every design task is **brand** (marketing, landing, campaign, long-form content, portfolio) or **product** (app UI, admin, dashboard, tool). +- **register priority**: Priority for register identification: (1) cue in the task itself, (2) the surface in focus, (3) `register` field in PRODUCT.md. +- **missing register field**: If PRODUCT.md lacks the `register` field (legacy), infer it once from its "Users" and "Product Purpose" sections, then cache the inferred value for the session. +- **color model**: Use OKLCH for colors. +- **neutral colors**: Never use #000 or #fff; tint every neutral toward the brand hue. +- **accent rule**: The "one accent ≤10%" rule applies only to the Restrained strategy. +- **theme selection**: Dark vs. light themes are never a default; choose based on physical context. +- **line length**: Cap body line length at 65–75 characters. +- **hierarchy**: Maintain a hierarchy through scale and weight contrast with at least a 1.25 ratio between steps. +- **spacing**: Vary spacing for rhythm; same padding everywhere creates monotony. +- **cards usage**: Cards should only be used when they are truly the best affordance; nested cards are always wrong. +- **animation**: Do not animate CSS layout properties. +- **easing**: Use ease-out exponential curves (ease-out-quart, quint, expo) for motion; avoid bounce or elastic easing. +- **side‑stripe borders**: Side‑stripe borders greater than 1 px as colored accents are prohibited. +- **gradient text**: Gradient text using background‑clip: text with a gradient background is prohibited. +- **glassmorphism**: Glassmorphism as a default style is prohibited; use only rarely and purposefully. +- **hero‑metric template**: The hero‑metric template (big number, small label, supporting stats, gradient accent) is prohibited as a SaaS cliché. +- **identical card grids**: Identical card grids with repeated icon + heading + text are prohibited. +- **modals**: Modals should not be the first design choice; consider inline or progressive alternatives first. +- **copy economy**: Every word in copy must earn its place; avoid restated headings and intros that repeat the title. +- **punctuation**: Em dashes are prohibited; use commas, colons, semicolons, periods, or parentheses instead. +- **craft**: `craft [feature]` is a Build command that shapes then builds a feature end-to-end. +- **shape**: `shape [feature]` is a Build command that plans UX/UI before writing code. +- **teach**: `teach` is a Build command that sets up PRODUCT.md and DESIGN.md context. +- **document**: `document` is a Build command that generates DESIGN.md from existing project code. +- **extract**: `extract [target]` is a Build command that pulls reusable tokens and components into a design system. +- **critique**: `critique [target]` is an Evaluate command that performs a UX design review with heuristic scoring. +- **audit**: `audit [target]` is an Evaluate command that conducts technical quality checks such as accessibility, performance, and responsiveness. +- **polish**: `polish [target]` is a Refine command that provides a final quality pass before shipping. +- **bolder**: `bolder [target]` is a Refine command that amplifies safe or bland designs. +- **quieter**: `quieter [target]` is a Refine command that tones down aggressive or overstimulating designs. +- **distill**: `distill [target]` is a Refine command that strips to essence and removes complexity. +- **harden**: `harden [target]` is a Refine command that makes a product production‑ready, handling errors, i18n, and edge cases. +- **onboard**: `onboard [target]` is a Refine command that designs first‑run flows, empty states, and activation experiences. +- **animate**: `animate [target]` is an Enhance command that adds purposeful animations and motion. +- **colorize**: `colorize [target]` is an Enhance command that adds strategic color to monochromatic UIs. +- **typeset**: `typeset [target]` is an Enhance command that improves typography hierarchy and fonts. +- **layout**: `layout [target]` is an Enhance command that fixes spacing, rhythm, and visual hierarchy. +- **delight**: `delight [target]` is an Enhance command that adds personality and memorable touches. +- **overdrive**: `overdrive [target]` is an Enhance command that pushes past conventional limits. +- **clarify**: `clarify [target]` is a Fix command that improves UX copy, labels, and error messages. +- **adapt**: `adapt [target]` is a Fix command that adapts designs for different devices and screen sizes. +- **optimize**: `optimize [target]` is a Fix command that diagnoses and fixes UI performance issues. +- **live**: `live` is an Iterate command that provides a visual variant mode for picking elements in the browser and generating alternatives. +- **pin/unpin**: `pin ` and `unpin ` are management commands for pinning and unpinning other commands. +- **Pin**: Pin creates a standalone shortcut so `{{command_prefix}}` invokes `{{command_prefix}}impeccable ` directly. +- **Unpin**: Unpin removes the standalone shortcut created by Pin. +- **pin.mjs**: The script `node {{scripts_path}}/pin.mjs ` writes to every harness directory present in the project. +- **Command**: Valid `` is any command from the table above. +- **script**: Report the script's result concisely. +- **shortcut**: Confirm the new shortcut on success, relay stderr verbatim on error. diff --git a/.brv/context-tree/design/context.md b/.brv/context-tree/design/context.md new file mode 100644 index 0000000..792fc3c --- /dev/null +++ b/.brv/context-tree/design/context.md @@ -0,0 +1,16 @@ +# Domain: design + +## Purpose +Capture design guidelines for the Impeccable skill used to craft frontend interfaces + +## Scope +Included in this domain: +- design laws +- command reference +- setup procedures + +Excluded from this domain: +- implementation code + +## Ownership +Impeccable team diff --git a/.brv/context-tree/design/impeccable/context.md b/.brv/context-tree/design/impeccable/context.md new file mode 100644 index 0000000..1e4751e --- /dev/null +++ b/.brv/context-tree/design/impeccable/context.md @@ -0,0 +1,10 @@ +# Topic: impeccable + +## Overview +Impeccable skill provides design commands and enforces strict visual and interaction standards + +## Key Concepts +- context loading +- design laws +- absolute bans +- command routing diff --git a/.brv/context-tree/design/impeccable/impeccable_skill_guidelines.md b/.brv/context-tree/design/impeccable/impeccable_skill_guidelines.md new file mode 100644 index 0000000..0ea1f2e --- /dev/null +++ b/.brv/context-tree/design/impeccable/impeccable_skill_guidelines.md @@ -0,0 +1,43 @@ +--- +title: Impeccable Skill Guidelines +summary: Guidelines for Impeccable skill including context loading, design laws, bans, and commands +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:19:14.435Z' +updatedAt: '2026-05-27T18:19:14.435Z' +--- +## Reason +Document the Impeccable skill design guidelines and commands + +## Raw Concept +**Task:** +Provide design guidelines and command reference for Impeccable skill + +**Changes:** +- Defined required PRODUCT.md and optional DESIGN.md +- Specified color strategy and bans +- Listed commands and routing rules + +**Flow:** +load context -> identify register -> apply design laws -> execute command + +**Timestamp:** 2026-05-27T18:18:06.366Z + +**Author:** Impeccable team + +## Narrative +### Structure +Conversation outlines setup, shared design laws, absolute bans, command table, and routing rules + +### Dependencies +Requires PRODUCT.md and optionally DESIGN.md in project root or .agents/context/ + +### Highlights +Enforces color usage, bans side-stripe borders, gradient text, glassmorphism, hero-metric template, identical card grids, modal first thought, no em dashes + +### Rules +Absolute bans list with specific CSS restrictions and design anti-patterns + +### Examples +Command table with craft, shape, teach, etc. diff --git a/.brv/context-tree/facts/conventions/landing_app.md b/.brv/context-tree/facts/conventions/landing_app.md new file mode 100644 index 0000000..3d84bf7 --- /dev/null +++ b/.brv/context-tree/facts/conventions/landing_app.md @@ -0,0 +1,30 @@ +--- +title: Landing app +summary: Facts about landing app +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:21:53.900Z' +updatedAt: '2026-05-27T19:21:53.900Z' +--- +## Reason +Curate extracted factual statements + +## Raw Concept +**Task:** +Document factual statements + +**Flow:** +extraction -> curation + +**Timestamp:** 2026-05-27T19:21:53.899Z + +## Facts +- **landing app**: Replaced the npm and GitHub text links with accessible icon-only links. +- **landing app**: Changed files: apps/landing/src/pages/index.astro and apps/landing/src/styles/global.css. +- **landing app**: Added inline SVG npm icon. +- **landing app**: Added inline SVG GitHub icon. +- **landing app**: Preserved accessible labels with aria-label. +- **landing app**: Kept 46px icon buttons for touch target quality. +- **landing app**: pnpm --filter @caplets/landing build passed. +- **landing app**: pnpm --filter @caplets/landing typecheck passed, 0 errors, 0 warnings, 0 hints. diff --git a/.brv/context-tree/facts/project/adapt.md b/.brv/context-tree/facts/project/adapt.md new file mode 100644 index 0000000..8905c0d --- /dev/null +++ b/.brv/context-tree/facts/project/adapt.md @@ -0,0 +1,24 @@ +--- +title: Adapt +summary: Facts about adapt +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.747Z' +updatedAt: '2026-05-27T18:47:50.747Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for adapt + +## Facts +- **adapt**: `adapt [target]` is a Fix command that adapts designs for different devices and screen sizes. diff --git a/.brv/context-tree/facts/project/adapt_target_facts.md b/.brv/context-tree/facts/project/adapt_target_facts.md new file mode 100644 index 0000000..d1da1e3 --- /dev/null +++ b/.brv/context-tree/facts/project/adapt_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`adapt [target]` facts' +summary: Facts about `adapt [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.753Z' +updatedAt: '2026-05-27T19:11:54.753Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `adapt [target]` + +## Facts +- **`adapt [target]`**: The command `adapt [target]` belongs to the Fix category and adapts designs for different devices and screen sizes. diff --git a/.brv/context-tree/facts/project/animate.md b/.brv/context-tree/facts/project/animate.md new file mode 100644 index 0000000..158469f --- /dev/null +++ b/.brv/context-tree/facts/project/animate.md @@ -0,0 +1,24 @@ +--- +title: Animate +summary: Facts about animate +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.704Z' +updatedAt: '2026-05-27T18:47:50.704Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for animate + +## Facts +- **animate**: `animate [target]` is an Enhance command that adds purposeful animations and motion. diff --git a/.brv/context-tree/facts/project/animate_target_facts.md b/.brv/context-tree/facts/project/animate_target_facts.md new file mode 100644 index 0000000..c275c43 --- /dev/null +++ b/.brv/context-tree/facts/project/animate_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`animate [target]` facts' +summary: Facts about `animate [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.738Z' +updatedAt: '2026-05-27T19:11:54.738Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `animate [target]` + +## Facts +- **`animate [target]`**: The command `animate [target]` belongs to the Enhance category and adds purposeful animations and motion. diff --git a/.brv/context-tree/facts/project/animation_facts.md b/.brv/context-tree/facts/project/animation_facts.md new file mode 100644 index 0000000..706f5a3 --- /dev/null +++ b/.brv/context-tree/facts/project/animation_facts.md @@ -0,0 +1,24 @@ +--- +title: Animation facts +summary: Facts about animation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.702Z' +updatedAt: '2026-05-27T19:11:54.703Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for animation + +## Facts +- **animation**: Do not animate CSS layout properties. diff --git a/.brv/context-tree/facts/project/audit.md b/.brv/context-tree/facts/project/audit.md new file mode 100644 index 0000000..5aaa467 --- /dev/null +++ b/.brv/context-tree/facts/project/audit.md @@ -0,0 +1,24 @@ +--- +title: Audit +summary: Facts about audit +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.671Z' +updatedAt: '2026-05-27T18:47:50.671Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for audit + +## Facts +- **audit**: `audit [target]` is an Evaluate command that conducts technical quality checks (a11y, perf, responsive). diff --git a/.brv/context-tree/facts/project/audit_target_facts.md b/.brv/context-tree/facts/project/audit_target_facts.md new file mode 100644 index 0000000..55674df --- /dev/null +++ b/.brv/context-tree/facts/project/audit_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`audit [target]` facts' +summary: Facts about `audit [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.721Z' +updatedAt: '2026-05-27T19:11:54.721Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `audit [target]` + +## Facts +- **`audit [target]`**: The command `audit [target]` belongs to the Evaluate category and conducts technical quality checks such as accessibility, performance, and responsiveness. diff --git a/.brv/context-tree/facts/project/bolder.md b/.brv/context-tree/facts/project/bolder.md new file mode 100644 index 0000000..c11fec0 --- /dev/null +++ b/.brv/context-tree/facts/project/bolder.md @@ -0,0 +1,24 @@ +--- +title: Bolder +summary: Facts about bolder +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.691Z' +updatedAt: '2026-05-27T18:47:50.691Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for bolder + +## Facts +- **bolder**: `bolder [target]` is a Refine command that amplifies safe or bland designs. diff --git a/.brv/context-tree/facts/project/bolder_target_facts.md b/.brv/context-tree/facts/project/bolder_target_facts.md new file mode 100644 index 0000000..c44850a --- /dev/null +++ b/.brv/context-tree/facts/project/bolder_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`bolder [target]` facts' +summary: Facts about `bolder [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.725Z' +updatedAt: '2026-05-27T19:11:54.726Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `bolder [target]` + +## Facts +- **`bolder [target]`**: The command `bolder [target]` belongs to the Refine category and amplifies safe or bland designs. diff --git a/.brv/context-tree/facts/project/border_style.md b/.brv/context-tree/facts/project/border_style.md new file mode 100644 index 0000000..c1b7ef0 --- /dev/null +++ b/.brv/context-tree/facts/project/border_style.md @@ -0,0 +1,24 @@ +--- +title: Border style +summary: Facts about border style +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.617Z' +updatedAt: '2026-05-27T18:47:50.617Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for border style + +## Facts +- **border style**: Side‑stripe borders (`border-left` or `border-right`) greater than 1 px as a colored accent are banned. diff --git a/.brv/context-tree/facts/project/border_style_facts.md b/.brv/context-tree/facts/project/border_style_facts.md new file mode 100644 index 0000000..d4aeeb8 --- /dev/null +++ b/.brv/context-tree/facts/project/border_style_facts.md @@ -0,0 +1,24 @@ +--- +title: Border style facts +summary: Facts about border style +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.676Z' +updatedAt: '2026-05-27T19:11:54.676Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for border style + +## Facts +- **border style**: Side-stripe borders greater than 1px as a colored accent are prohibited. diff --git a/.brv/context-tree/facts/project/borders.md b/.brv/context-tree/facts/project/borders.md new file mode 100644 index 0000000..0174c2c --- /dev/null +++ b/.brv/context-tree/facts/project/borders.md @@ -0,0 +1,27 @@ +--- +title: Borders +summary: Facts about borders +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.154Z' +updatedAt: '2026-05-27T19:18:57.154Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **borders**: Side-stripe borders greater than 1px as a colored accent are banned. diff --git a/.brv/context-tree/facts/project/brand_register.md b/.brv/context-tree/facts/project/brand_register.md new file mode 100644 index 0000000..bdd77ae --- /dev/null +++ b/.brv/context-tree/facts/project/brand_register.md @@ -0,0 +1,24 @@ +--- +title: Brand register +summary: Facts about brand register +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.646Z' +updatedAt: '2026-05-27T18:47:50.646Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for brand register + +## Facts +- **brand register**: The brand register's reflex-reject aesthetic lanes list catches the currently-saturated families. diff --git a/.brv/context-tree/facts/project/browser.md b/.brv/context-tree/facts/project/browser.md new file mode 100644 index 0000000..58306a5 --- /dev/null +++ b/.brv/context-tree/facts/project/browser.md @@ -0,0 +1,24 @@ +--- +title: Browser +summary: Facts about browser +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.377Z' +updatedAt: '2026-05-27T18:59:51.377Z' +--- +## Reason +Curate extracted project facts + +## Raw Concept +**Task:** +Document project fact + +**Timestamp:** 2026-05-27T18:59:51.340Z + +## Narrative +### Highlights +Extracted 1 facts for browser + +## Facts +- **browser**: Browser console checked with 0 errors and 0 warnings. diff --git a/.brv/context-tree/facts/project/browser_check.md b/.brv/context-tree/facts/project/browser_check.md new file mode 100644 index 0000000..f1f5348 --- /dev/null +++ b/.brv/context-tree/facts/project/browser_check.md @@ -0,0 +1,27 @@ +--- +title: Browser check +summary: Facts about browser check +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.186Z' +updatedAt: '2026-05-27T19:18:57.186Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **browser check**: Browser preview and console showed 0 errors and 0 warnings after the animation changes. diff --git a/.brv/context-tree/facts/project/browser_console.md b/.brv/context-tree/facts/project/browser_console.md new file mode 100644 index 0000000..1f171c7 --- /dev/null +++ b/.brv/context-tree/facts/project/browser_console.md @@ -0,0 +1,27 @@ +--- +title: Browser console +summary: Facts about browser console +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.213Z' +updatedAt: '2026-05-27T19:18:57.213Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **browser console**: Browser console checked, 0 errors and 0 warnings. diff --git a/.brv/context-tree/facts/project/browser_facts.md b/.brv/context-tree/facts/project/browser_facts.md new file mode 100644 index 0000000..b0d45be --- /dev/null +++ b/.brv/context-tree/facts/project/browser_facts.md @@ -0,0 +1,25 @@ +--- +title: Browser facts +summary: Facts about browser +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.775Z' +updatedAt: '2026-05-27T19:11:54.775Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 2 facts for browser + +## Facts +- **browser**: Browser preview checked desktop and mobile. +- **browser**: Browser console checked, 0 errors and 0 warnings. diff --git a/.brv/context-tree/facts/project/browser_preview.md b/.brv/context-tree/facts/project/browser_preview.md new file mode 100644 index 0000000..3c29b4a --- /dev/null +++ b/.brv/context-tree/facts/project/browser_preview.md @@ -0,0 +1,27 @@ +--- +title: Browser preview +summary: Facts about browser preview +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.189Z' +updatedAt: '2026-05-27T19:18:57.189Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **browser preview**: Browser preview checked. diff --git a/.brv/context-tree/facts/project/browser_preview_facts.md b/.brv/context-tree/facts/project/browser_preview_facts.md new file mode 100644 index 0000000..d924e63 --- /dev/null +++ b/.brv/context-tree/facts/project/browser_preview_facts.md @@ -0,0 +1,24 @@ +--- +title: Browser preview facts +summary: Facts about Browser preview +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.773Z' +updatedAt: '2026-05-27T19:11:54.773Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for Browser preview + +## Facts +- **Browser preview**: Browser preview showed no errors or warnings in the console for both desktop and mobile views. diff --git a/.brv/context-tree/facts/project/build.md b/.brv/context-tree/facts/project/build.md new file mode 100644 index 0000000..64f8433 --- /dev/null +++ b/.brv/context-tree/facts/project/build.md @@ -0,0 +1,27 @@ +--- +title: Build +summary: Facts about build +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.352Z' +updatedAt: '2026-05-27T19:18:57.182Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **build**: The build command `pnpm --filter @caplets/landing build` passed after the animation changes. diff --git a/.brv/context-tree/facts/project/caplets_dark_contrast_fixed_png.md b/.brv/context-tree/facts/project/caplets_dark_contrast_fixed_png.md new file mode 100644 index 0000000..108d7dc --- /dev/null +++ b/.brv/context-tree/facts/project/caplets_dark_contrast_fixed_png.md @@ -0,0 +1,24 @@ +--- +title: Caplets-dark-contrast-fixed.png +summary: Facts about caplets-dark-contrast-fixed.png +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.378Z' +updatedAt: '2026-05-27T18:59:51.378Z' +--- +## Reason +Curate extracted project facts + +## Raw Concept +**Task:** +Document project fact + +**Timestamp:** 2026-05-27T18:59:51.340Z + +## Narrative +### Highlights +Extracted 1 facts for caplets-dark-contrast-fixed.png + +## Facts +- **caplets-dark-contrast-fixed.png**: Screenshot caplets-dark-contrast-fixed.png captured. diff --git a/.brv/context-tree/facts/project/caplets_icon_facts.md b/.brv/context-tree/facts/project/caplets_icon_facts.md new file mode 100644 index 0000000..e140102 --- /dev/null +++ b/.brv/context-tree/facts/project/caplets_icon_facts.md @@ -0,0 +1,24 @@ +--- +title: Caplets icon facts +summary: Facts about Caplets icon +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.766Z' +updatedAt: '2026-05-27T19:11:54.766Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for Caplets icon + +## Facts +- **Caplets icon**: The Caplets icon from `plugins/caplets/assets/icon.png` is now used for the favicon, Apple touch icon, and header brand mark. diff --git a/.brv/context-tree/facts/project/caplets_landing.md b/.brv/context-tree/facts/project/caplets_landing.md new file mode 100644 index 0000000..85c3fc0 --- /dev/null +++ b/.brv/context-tree/facts/project/caplets_landing.md @@ -0,0 +1,27 @@ +--- +title: '@caplets/landing' +summary: Facts about @caplets/landing +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.373Z' +updatedAt: '2026-05-27T18:59:51.373Z' +--- +## Reason +Curate extracted project facts + +## Raw Concept +**Task:** +Document project fact + +**Timestamp:** 2026-05-27T18:59:51.340Z + +## Narrative +### Highlights +Extracted 4 facts for @caplets/landing + +## Facts +- **@caplets/landing**: @caplets/landing build passed. +- **@caplets/landing**: pnpm --filter @caplets/landing typecheck passed with 0 errors, 0 warnings, 0 hints. +- **@caplets/landing**: ilter @caplets/landing typecheck passed, 0 errors, 0 warnings, 0 hints. +- **@caplets/landing**: Screenshot captured: caplets-dark-contrast-fixed.png diff --git a/.brv/context-tree/facts/project/caplets_navigation_facts.md b/.brv/context-tree/facts/project/caplets_navigation_facts.md new file mode 100644 index 0000000..647df1c --- /dev/null +++ b/.brv/context-tree/facts/project/caplets_navigation_facts.md @@ -0,0 +1,24 @@ +--- +title: Caplets navigation facts +summary: Facts about caplets navigation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.777Z' +updatedAt: '2026-05-27T19:11:54.777Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for caplets navigation + +## Facts +- **caplets navigation**: Screenshots: caplets-nav-desktop.png, caplets-nav-mobile.png diff --git a/.brv/context-tree/facts/project/card_grids.md b/.brv/context-tree/facts/project/card_grids.md new file mode 100644 index 0000000..44867ba --- /dev/null +++ b/.brv/context-tree/facts/project/card_grids.md @@ -0,0 +1,27 @@ +--- +title: Card grids +summary: Facts about card grids +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.166Z' +updatedAt: '2026-05-27T19:18:57.166Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **card grids**: Identical card grids with repeated icon, heading, and text are banned. diff --git a/.brv/context-tree/facts/project/card_layout_facts.md b/.brv/context-tree/facts/project/card_layout_facts.md new file mode 100644 index 0000000..652f8bc --- /dev/null +++ b/.brv/context-tree/facts/project/card_layout_facts.md @@ -0,0 +1,24 @@ +--- +title: Card layout facts +summary: Facts about card layout +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.692Z' +updatedAt: '2026-05-27T19:11:54.692Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for card layout + +## Facts +- **card layout**: Identical card grids with same-sized cards repeated endlessly are prohibited. diff --git a/.brv/context-tree/facts/project/clarify.md b/.brv/context-tree/facts/project/clarify.md new file mode 100644 index 0000000..d0cb29c --- /dev/null +++ b/.brv/context-tree/facts/project/clarify.md @@ -0,0 +1,24 @@ +--- +title: Clarify +summary: Facts about clarify +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.740Z' +updatedAt: '2026-05-27T18:47:50.740Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for clarify + +## Facts +- **clarify**: `clarify [target]` is a Fix command that improves UX copy, labels, and error messages. diff --git a/.brv/context-tree/facts/project/clarify_target_facts.md b/.brv/context-tree/facts/project/clarify_target_facts.md new file mode 100644 index 0000000..cbe0ddd --- /dev/null +++ b/.brv/context-tree/facts/project/clarify_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`clarify [target]` facts' +summary: Facts about `clarify [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.750Z' +updatedAt: '2026-05-27T19:11:54.750Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `clarify [target]` + +## Facts +- **`clarify [target]`**: The command `clarify [target]` belongs to the Fix category and improves UX copy, labels, and error messages. diff --git a/.brv/context-tree/facts/project/color_facts.md b/.brv/context-tree/facts/project/color_facts.md new file mode 100644 index 0000000..02b58cf --- /dev/null +++ b/.brv/context-tree/facts/project/color_facts.md @@ -0,0 +1,24 @@ +--- +title: Color facts +summary: Facts about color +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.675Z' +updatedAt: '2026-05-27T19:11:54.675Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for color + +## Facts +- **color**: Never use #000 or #fff; tint every neutral toward the brand hue. diff --git a/.brv/context-tree/facts/project/color_space.md b/.brv/context-tree/facts/project/color_space.md new file mode 100644 index 0000000..bbcec20 --- /dev/null +++ b/.brv/context-tree/facts/project/color_space.md @@ -0,0 +1,24 @@ +--- +title: Color space +summary: Facts about color space +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.604Z' +updatedAt: '2026-05-27T18:47:50.604Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for color space + +## Facts +- **color space**: Use the OKLCH color space for colors. diff --git a/.brv/context-tree/facts/project/color_specification.md b/.brv/context-tree/facts/project/color_specification.md new file mode 100644 index 0000000..edceac5 --- /dev/null +++ b/.brv/context-tree/facts/project/color_specification.md @@ -0,0 +1,27 @@ +--- +title: Color specification +summary: Facts about color specification +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.292Z' +updatedAt: '2026-05-27T19:18:57.138Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **color specification**: Use OKLCH for colors and reduce chroma as lightness approaches 0 or 100. diff --git a/.brv/context-tree/facts/project/color_strategy.md b/.brv/context-tree/facts/project/color_strategy.md new file mode 100644 index 0000000..28db99a --- /dev/null +++ b/.brv/context-tree/facts/project/color_strategy.md @@ -0,0 +1,27 @@ +--- +title: Color strategy +summary: Facts about color strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.141Z' +updatedAt: '2026-05-27T19:18:57.141Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **color strategy**: The "one accent ≤10%" rule applies only to the Restrained color strategy. diff --git a/.brv/context-tree/facts/project/color_usage.md b/.brv/context-tree/facts/project/color_usage.md new file mode 100644 index 0000000..10251aa --- /dev/null +++ b/.brv/context-tree/facts/project/color_usage.md @@ -0,0 +1,27 @@ +--- +title: Color usage +summary: Facts about color usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.598Z' +updatedAt: '2026-05-27T19:18:57.134Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **color usage**: Never use #000 or #fff; tint every neutral toward the brand hue. diff --git a/.brv/context-tree/facts/project/colorize.md b/.brv/context-tree/facts/project/colorize.md new file mode 100644 index 0000000..1c62390 --- /dev/null +++ b/.brv/context-tree/facts/project/colorize.md @@ -0,0 +1,24 @@ +--- +title: Colorize +summary: Facts about colorize +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.713Z' +updatedAt: '2026-05-27T18:47:50.713Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for colorize + +## Facts +- **colorize**: `colorize [target]` is an Enhance command that adds strategic color to monochromatic UIs. diff --git a/.brv/context-tree/facts/project/colorize_target_facts.md b/.brv/context-tree/facts/project/colorize_target_facts.md new file mode 100644 index 0000000..c5b30f0 --- /dev/null +++ b/.brv/context-tree/facts/project/colorize_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`colorize [target]` facts' +summary: Facts about `colorize [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.740Z' +updatedAt: '2026-05-27T19:11:54.740Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `colorize [target]` + +## Facts +- **`colorize [target]`**: The command `colorize [target]` belongs to the Enhance category and adds strategic color to monochromatic UIs. diff --git a/.brv/context-tree/facts/project/command.md b/.brv/context-tree/facts/project/command.md new file mode 100644 index 0000000..b571b4d --- /dev/null +++ b/.brv/context-tree/facts/project/command.md @@ -0,0 +1,24 @@ +--- +title: Command +summary: Facts about command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.771Z' +updatedAt: '2026-05-27T18:47:50.771Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for command + +## Facts +- **command**: Valid `` is any command from the table above. diff --git a/.brv/context-tree/facts/project/command_table.md b/.brv/context-tree/facts/project/command_table.md new file mode 100644 index 0000000..83f2b5f --- /dev/null +++ b/.brv/context-tree/facts/project/command_table.md @@ -0,0 +1,27 @@ +--- +title: Command table +summary: Facts about command table +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.331Z' +updatedAt: '2026-05-27T19:18:57.171Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **command table**: The command table lists commands such as `craft [feature]`, `shape [feature]`, and `animate [target]` with their categories and descriptions. diff --git a/.brv/context-tree/facts/project/command_validation.md b/.brv/context-tree/facts/project/command_validation.md new file mode 100644 index 0000000..fa193da --- /dev/null +++ b/.brv/context-tree/facts/project/command_validation.md @@ -0,0 +1,24 @@ +--- +title: Command validation +summary: Facts about Command validation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.330Z' +updatedAt: '2026-05-27T19:12:30.330Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for Command validation + +## Facts +- **Command validation**: Valid `` is any command from the table above. diff --git a/.brv/context-tree/facts/project/console.md b/.brv/context-tree/facts/project/console.md new file mode 100644 index 0000000..fe53c19 --- /dev/null +++ b/.brv/context-tree/facts/project/console.md @@ -0,0 +1,24 @@ +--- +title: Console +summary: Facts about console +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.367Z' +updatedAt: '2026-05-27T18:59:51.367Z' +--- +## Reason +Curate extracted project facts + +## Raw Concept +**Task:** +Document project fact + +**Timestamp:** 2026-05-27T18:59:51.340Z + +## Narrative +### Highlights +Extracted 1 facts for console + +## Facts +- **console**: Browser console checked, 0 errors and 0 warnings. diff --git a/.brv/context-tree/facts/project/context_loader.md b/.brv/context-tree/facts/project/context_loader.md new file mode 100644 index 0000000..623c739 --- /dev/null +++ b/.brv/context-tree/facts/project/context_loader.md @@ -0,0 +1,24 @@ +--- +title: Context loader +summary: Facts about context loader +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.266Z' +updatedAt: '2026-05-27T19:12:30.266Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.245Z + +## Narrative +### Structure +Extracted facts for context loader + +## Facts +- **context loader**: The loader looks at the project root by default and falls back to .agents/context/ and docs/ if the root is clean. diff --git a/.brv/context-tree/facts/project/context_loading.md b/.brv/context-tree/facts/project/context_loading.md new file mode 100644 index 0000000..41e127e --- /dev/null +++ b/.brv/context-tree/facts/project/context_loading.md @@ -0,0 +1,27 @@ +--- +title: Context loading +summary: Facts about context loading +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.527Z' +updatedAt: '2026-05-27T19:18:57.131Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **context loading**: The loader looks at the project root by default and falls back to .agents/context/ and docs/ if the root is clean. diff --git a/.brv/context-tree/facts/project/context_override.md b/.brv/context-tree/facts/project/context_override.md new file mode 100644 index 0000000..3840b5b --- /dev/null +++ b/.brv/context-tree/facts/project/context_override.md @@ -0,0 +1,24 @@ +--- +title: Context override +summary: Facts about context override +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.541Z' +updatedAt: '2026-05-27T18:47:50.541Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for context override + +## Facts +- **context override**: Override the context directory with `IMPECCABLE_CONTEXT_DIR=path/to/dir` (absolute or relative to cwd). diff --git a/.brv/context-tree/facts/project/craft.md b/.brv/context-tree/facts/project/craft.md new file mode 100644 index 0000000..0d3e5ed --- /dev/null +++ b/.brv/context-tree/facts/project/craft.md @@ -0,0 +1,24 @@ +--- +title: Craft +summary: Facts about craft +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.654Z' +updatedAt: '2026-05-27T18:47:50.654Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for craft + +## Facts +- **craft**: `craft [feature]` is a Build command that shapes then builds a feature end-to-end. diff --git a/.brv/context-tree/facts/project/craft_command.md b/.brv/context-tree/facts/project/craft_command.md new file mode 100644 index 0000000..35895e3 --- /dev/null +++ b/.brv/context-tree/facts/project/craft_command.md @@ -0,0 +1,24 @@ +--- +title: Craft command +summary: Facts about Craft command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.351Z' +updatedAt: '2026-05-27T19:12:30.351Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for Craft command + +## Facts +- **Craft command**: If the first word is `craft`, setup still runs first, but reference/craft.md owns the rest of the flow. diff --git a/.brv/context-tree/facts/project/craft_feature_facts.md b/.brv/context-tree/facts/project/craft_feature_facts.md new file mode 100644 index 0000000..2e18d0b --- /dev/null +++ b/.brv/context-tree/facts/project/craft_feature_facts.md @@ -0,0 +1,24 @@ +--- +title: '`craft [feature]` facts' +summary: Facts about `craft [feature]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.709Z' +updatedAt: '2026-05-27T19:11:54.709Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `craft [feature]` + +## Facts +- **`craft [feature]`**: The command `craft [feature]` belongs to the Build category and shapes then builds a feature end-to-end. diff --git a/.brv/context-tree/facts/project/critique.md b/.brv/context-tree/facts/project/critique.md new file mode 100644 index 0000000..b1c3fe5 --- /dev/null +++ b/.brv/context-tree/facts/project/critique.md @@ -0,0 +1,24 @@ +--- +title: Critique +summary: Facts about critique +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.667Z' +updatedAt: '2026-05-27T18:47:50.667Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for critique + +## Facts +- **critique**: `critique [target]` is an Evaluate command that performs UX design review with heuristic scoring. diff --git a/.brv/context-tree/facts/project/critique_target_facts.md b/.brv/context-tree/facts/project/critique_target_facts.md new file mode 100644 index 0000000..749232e --- /dev/null +++ b/.brv/context-tree/facts/project/critique_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`critique [target]` facts' +summary: Facts about `critique [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.720Z' +updatedAt: '2026-05-27T19:11:54.720Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `critique [target]` + +## Facts +- **`critique [target]`**: The command `critique [target]` belongs to the Evaluate category and performs a UX design review with heuristic scoring. diff --git a/.brv/context-tree/facts/project/css_animation.md b/.brv/context-tree/facts/project/css_animation.md new file mode 100644 index 0000000..372f836 --- /dev/null +++ b/.brv/context-tree/facts/project/css_animation.md @@ -0,0 +1,24 @@ +--- +title: CSS animation +summary: Facts about CSS animation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.301Z' +updatedAt: '2026-05-27T19:12:30.301Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for CSS animation + +## Facts +- **CSS animation**: Do not animate CSS layout properties. diff --git a/.brv/context-tree/facts/project/curated_project_facts.md b/.brv/context-tree/facts/project/curated_project_facts.md new file mode 100644 index 0000000..08bea2f --- /dev/null +++ b/.brv/context-tree/facts/project/curated_project_facts.md @@ -0,0 +1,97 @@ +--- +title: Curated Project Facts +summary: Aggregated project-related facts extracted via RLM extraction +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:17:41.215Z' +updatedAt: '2026-05-27T18:17:41.215Z' +--- +## Reason +Extracted factual statements from recent context + +## Raw Concept +**Task:** +Curate extracted project facts + +**Timestamp:** 2026-05-27T18:17:41.212Z + +## Narrative +### Highlights +Extracted 74 unique facts across 72 subjects. + +## Facts +- **PRODUCT.md**: PRODUCT.md is required. +- **DESIGN.md**: DESIGN.md is optional, strongly recommended. +- **loader**: The loader looks at the project root by default and falls back to .agents/context/ and docs/ if the root is clean. +- **IMPECCABLE_CONTEXT_DIR**: Override with IMPECCABLE_CONTEXT_DIR=path/to/dir (absolute or relative to cwd). +- **load-context.mjs**: Load both files in one call using: node {{scripts_path}}/load-context.mjs +- **loader output**: Never pipe the loader output through head, tail, grep, or jq. +- **PRODUCT.md**: If PRODUCT.md is missing, empty, or contains placeholder [TODO] markers with less than 200 characters, run {{command_prefix}}impeccable teach and then resume the original task. +- **DESIGN.md**: If DESIGN.md is missing, prompt the user once per session to run {{command_prefix}}impeccable document, then proceed. +- **design task**: Every design task is either brand (marketing, landing, campaign, long-form content, portfolio) or product (app UI, admin, dashboard, tool). +- **register identification**: Identify the register before designing, using priority: (1) cue in the task itself, (2) the surface in focus, (3) the register field in PRODUCT.md. +- **Color system**: Use OKLCH for color definitions. +- **Chroma adjustment**: Reduce chroma as lightness approaches 0 or 100 because high chroma at extremes looks garish. +- **Neutral tinting**: Never use #000 or #fff; tint every neutral toward the brand hue with chroma 0.005–0.01. +- **Restrained strategy**: Restrained color strategy uses tinted neutrals plus one accent ≤10% of surface. +- **Committed strategy**: Committed color strategy uses one saturated color for 30–60% of surface. +- **Full palette**: Full palette strategy uses 3–4 named color roles deliberately. +- **Drenched strategy**: Drenched strategy makes the surface itself the color. +- **Theme selection**: Dark vs. light theme should not be chosen by default; it must be justified by physical context. +- **Line length**: Cap body line length at 65–75 characters. +- **Hierarchy**: Maintain a hierarchy through scale and weight contrast with at least a 1.25 ratio between steps. +- **Spacing**: Vary spacing to create rhythm; avoid using the same padding everywhere. +- **Card usage**: Cards should only be used when they are the best affordance; nested cards are always wrong. +- **Animation**: Do not animate CSS layout properties. +- **Easing**: Use ease-out exponential curves (ease-out-quart, quint, expo) for motion; avoid bounce or elastic easing. +- **Side-stripe borders**: Side-stripe borders greater than 1px as colored accents are prohibited; use full borders, background tints, leading numbers/icons, or nothing instead. +- **Gradient text**: Gradient text using background-clip: text with a gradient background is prohibited; use a single solid color instead. +- **Glassmorphism**: Glassmorphism as a default style is prohibited; use blurs and glass cards only rarely and purposefully. +- **Hero-metric template**: The hero-metric template (big number, small label, supporting stats, gradient accent) is prohibited as a SaaS cliché. +- **Identical card grids**: Identical card grids with the same-sized cards repeated endlessly are prohibited. +- **Modals**: Modals should not be the first design thought; explore inline or progressive alternatives first. +- **Copy economy**: Every word in copy must earn its place; avoid restated headings and intros that repeat the title. +- **Punctuation**: Do not use em dashes; use commas, colons, semicolons, periods, or parentheses instead. +- **craft**: `craft [feature]` shapes then builds a feature end-to-end. +- **shape**: `shape [feature]` plans UX/UI before writing code. +- **teach**: `teach` sets up PRODUCT.md and DESIGN.md context. +- **document**: `document` generates DESIGN.md from existing project code. +- **extract**: `extract [target]` pulls reusable tokens and components into the design system. +- **critique**: `critique [target]` performs a UX design review with heuristic scoring. +- **audit**: `audit [target]` conducts technical quality checks for accessibility, performance, and responsiveness. +- **polish**: `polish [target]` provides a final quality pass before shipping. +- **bolder**: `bolder [target]` amplifies safe or bland designs. +- **quieter**: `quieter [target]` tones down aggressive or overstimulating designs. +- **distill**: `distill [target]` strips to essence and removes complexity. +- **harden**: `harden [target]` makes a product production‑ready by handling errors, i18n, and edge cases. +- **onboard**: `onboard [target]` designs first‑run flows, empty states, and activation experiences. +- **animate**: `animate [target]` adds purposeful animations and motion. +- **colorize**: `colorize [target]` adds strategic color to monochromatic UIs. +- **typeset**: `typeset [target]` improves typography hierarchy and fonts. +- **layout**: `layout [target]` fixes spacing, rhythm, and visual hierarchy. +- **delight**: `delight [target]` adds personality and memorable touches. +- **overdrive**: `overdrive [target]` pushes past conventional limits. +- **clarify**: `clarify [target]` improves UX copy, labels, and error messages. +- **adapt**: `adapt [target]` adapts designs for different devices and screen sizes. +- **optimize**: `optimize [target]` diagnoses and fixes UI performance issues. +- **live**: `live` enables visual variant mode to pick elements in the browser and generate alternatives. +- **pin**: `pin ` pins a command for quick access. +- **unpin**: `unpin ` unpins a previously pinned command. +- **Pin**: Pin creates a standalone shortcut so {{command_prefix}} invokes {{command_prefix}}impeccable directly. +- **Unpin**: Unpin removes the shortcut created by Pin. +- **Pin/Unpin script**: The script writes to every harness directory present in the project. +- **pin.mjs**: The command node {{scripts_path}}/pin.mjs is used to pin or unpin commands. +- **Command argument**: Valid is any command from the table above. +- **Visual design system**: Generated the visual design system. +- **Repository**: Changed files: DESIGN.md and .impeccable/design.json. +- **North star**: North star is "The Tool Cartographer". +- **Palette**: Palette includes charred ink, parchment, and rare ember accent. +- **Elevation**: Elevation is tonal layering, flat at rest. +- **Components**: Components are tactile, calm, compact product primitives. +- **Sidecar**: Sidecar includes renderable button, chip, card, input, and nav snippets for the live panel. +- **.impeccable/design.json**: .impeccable/design.json parses as valid JSON. +- **Impeccable context**: Refreshed impeccable context with the new DESIGN.md. +- **r**: r includes renderable button, chip, card, input, and nav snippets for the live panel +- **`.impeccable/design.json`**: `.impeccable/design.json` parses as valid JSON +- **impeccable context**: Refreshed impeccable context with the new `DESIGN.md` diff --git a/.brv/context-tree/facts/project/dark_mode_contrast.md b/.brv/context-tree/facts/project/dark_mode_contrast.md new file mode 100644 index 0000000..961e2bd --- /dev/null +++ b/.brv/context-tree/facts/project/dark_mode_contrast.md @@ -0,0 +1,24 @@ +--- +title: Dark mode contrast +summary: Facts about dark mode contrast +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.344Z' +updatedAt: '2026-05-27T18:59:51.344Z' +--- +## Reason +Curate extracted project facts + +## Raw Concept +**Task:** +Document project fact + +**Timestamp:** 2026-05-27T18:59:51.340Z + +## Narrative +### Highlights +Extracted 1 facts for dark mode contrast + +## Facts +- **dark mode contrast**: Improved contrast for the dark surfaces. diff --git a/.brv/context-tree/facts/project/delight.md b/.brv/context-tree/facts/project/delight.md new file mode 100644 index 0000000..7e93b00 --- /dev/null +++ b/.brv/context-tree/facts/project/delight.md @@ -0,0 +1,24 @@ +--- +title: Delight +summary: Facts about delight +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.732Z' +updatedAt: '2026-05-27T18:47:50.732Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for delight + +## Facts +- **delight**: `delight [target]` is an Enhance command that adds personality and memorable touches. diff --git a/.brv/context-tree/facts/project/delight_target_facts.md b/.brv/context-tree/facts/project/delight_target_facts.md new file mode 100644 index 0000000..fe237c1 --- /dev/null +++ b/.brv/context-tree/facts/project/delight_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`delight [target]` facts' +summary: Facts about `delight [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.746Z' +updatedAt: '2026-05-27T19:11:54.746Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `delight [target]` + +## Facts +- **`delight [target]`**: The command `delight [target]` belongs to the Enhance category and adds personality and memorable touches. diff --git a/.brv/context-tree/facts/project/design_md.md b/.brv/context-tree/facts/project/design_md.md new file mode 100644 index 0000000..686548c --- /dev/null +++ b/.brv/context-tree/facts/project/design_md.md @@ -0,0 +1,27 @@ +--- +title: DESIGN.md +summary: Facts about DESIGN.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.556Z' +updatedAt: '2026-05-27T19:18:57.128Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **DESIGN.md**: DESIGN.md is optional, strongly recommended. diff --git a/.brv/context-tree/facts/project/design_md_facts.md b/.brv/context-tree/facts/project/design_md_facts.md new file mode 100644 index 0000000..85e6985 --- /dev/null +++ b/.brv/context-tree/facts/project/design_md_facts.md @@ -0,0 +1,24 @@ +--- +title: DESIGN.md facts +summary: Facts about DESIGN.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.674Z' +updatedAt: '2026-05-27T19:11:54.674Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for DESIGN.md + +## Facts +- **DESIGN.md**: DESIGN.md is optional, strongly recommended. diff --git a/.brv/context-tree/facts/project/design_task.md b/.brv/context-tree/facts/project/design_task.md new file mode 100644 index 0000000..37a1b39 --- /dev/null +++ b/.brv/context-tree/facts/project/design_task.md @@ -0,0 +1,24 @@ +--- +title: Design task +summary: Facts about design task +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.285Z' +updatedAt: '2026-05-27T19:12:30.285Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for design task + +## Facts +- **design task**: Every design task is either brand (marketing, landing, campaign, long-form content, portfolio) or product (app UI, admin, dashboard, tool). diff --git a/.brv/context-tree/facts/project/design_tokens.md b/.brv/context-tree/facts/project/design_tokens.md new file mode 100644 index 0000000..9dcb601 --- /dev/null +++ b/.brv/context-tree/facts/project/design_tokens.md @@ -0,0 +1,24 @@ +--- +title: Design tokens +summary: Facts about design tokens +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.348Z' +updatedAt: '2026-05-27T18:59:51.348Z' +--- +## Reason +Curate extracted project facts + +## Raw Concept +**Task:** +Document project fact + +**Timestamp:** 2026-05-27T18:59:51.340Z + +## Narrative +### Highlights +Extracted 1 facts for design tokens + +## Facts +- **design tokens**: Added dedicated dark-surface tokens: --night-ink, --night-panel, --night-line, --night-text, --night-muted. diff --git a/.brv/context-tree/facts/project/desktop_nav_facts.md b/.brv/context-tree/facts/project/desktop_nav_facts.md new file mode 100644 index 0000000..982782d --- /dev/null +++ b/.brv/context-tree/facts/project/desktop_nav_facts.md @@ -0,0 +1,24 @@ +--- +title: Desktop nav facts +summary: Facts about Desktop nav +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.760Z' +updatedAt: '2026-05-27T19:11:54.760Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for Desktop nav + +## Facts +- **Desktop nav**: Desktop navigation now includes numbered map‑style waypoints: 01 Map, 02 Proof, 03 Install. diff --git a/.brv/context-tree/facts/project/distill.md b/.brv/context-tree/facts/project/distill.md new file mode 100644 index 0000000..9c33574 --- /dev/null +++ b/.brv/context-tree/facts/project/distill.md @@ -0,0 +1,24 @@ +--- +title: Distill +summary: Facts about distill +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.697Z' +updatedAt: '2026-05-27T18:47:50.697Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for distill + +## Facts +- **distill**: `distill [target]` is a Refine command that strips to essence and removes complexity. diff --git a/.brv/context-tree/facts/project/distill_target_facts.md b/.brv/context-tree/facts/project/distill_target_facts.md new file mode 100644 index 0000000..485452c --- /dev/null +++ b/.brv/context-tree/facts/project/distill_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`distill [target]` facts' +summary: Facts about `distill [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.730Z' +updatedAt: '2026-05-27T19:11:54.730Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `distill [target]` + +## Facts +- **`distill [target]`**: The command `distill [target]` belongs to the Refine category and strips designs to their essence, removing complexity. diff --git a/.brv/context-tree/facts/project/document.md b/.brv/context-tree/facts/project/document.md new file mode 100644 index 0000000..0f55570 --- /dev/null +++ b/.brv/context-tree/facts/project/document.md @@ -0,0 +1,24 @@ +--- +title: Document +summary: Facts about document +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.662Z' +updatedAt: '2026-05-27T18:47:50.662Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for document + +## Facts +- **document**: `document` is a Build command that generates DESIGN.md from existing project code. diff --git a/.brv/context-tree/facts/project/document_facts.md b/.brv/context-tree/facts/project/document_facts.md new file mode 100644 index 0000000..86eafce --- /dev/null +++ b/.brv/context-tree/facts/project/document_facts.md @@ -0,0 +1,24 @@ +--- +title: '`document` facts' +summary: Facts about `document` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.715Z' +updatedAt: '2026-05-27T19:11:54.715Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `document` + +## Facts +- **`document`**: The command `document` belongs to the Build category and generates DESIGN.md from existing project code. diff --git a/.brv/context-tree/facts/project/easing_facts.md b/.brv/context-tree/facts/project/easing_facts.md new file mode 100644 index 0000000..cdc62d8 --- /dev/null +++ b/.brv/context-tree/facts/project/easing_facts.md @@ -0,0 +1,24 @@ +--- +title: Easing facts +summary: Facts about easing +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.707Z' +updatedAt: '2026-05-27T19:11:54.707Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for easing + +## Facts +- **easing**: Use ease-out exponential curves (ease-out-quart, quint, expo) for motion; no bounce or elastic. diff --git a/.brv/context-tree/facts/project/extract.md b/.brv/context-tree/facts/project/extract.md new file mode 100644 index 0000000..d1dcae7 --- /dev/null +++ b/.brv/context-tree/facts/project/extract.md @@ -0,0 +1,24 @@ +--- +title: Extract +summary: Facts about extract +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.664Z' +updatedAt: '2026-05-27T18:47:50.664Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for extract + +## Facts +- **extract**: `extract [target]` is a Build command that pulls reusable tokens and components into the design system. diff --git a/.brv/context-tree/facts/project/extract_target_facts.md b/.brv/context-tree/facts/project/extract_target_facts.md new file mode 100644 index 0000000..f945916 --- /dev/null +++ b/.brv/context-tree/facts/project/extract_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`extract [target]` facts' +summary: Facts about `extract [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.718Z' +updatedAt: '2026-05-27T19:11:54.718Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `extract [target]` + +## Facts +- **`extract [target]`**: The command `extract [target]` belongs to the Build category and pulls reusable tokens and components into the design system. diff --git a/.brv/context-tree/facts/project/extracted_project_facts.md b/.brv/context-tree/facts/project/extracted_project_facts.md new file mode 100644 index 0000000..d4aac10 --- /dev/null +++ b/.brv/context-tree/facts/project/extracted_project_facts.md @@ -0,0 +1,37 @@ +--- +title: Extracted Project Facts +summary: Compiled project-related factual statements extracted via RLM extraction +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:02:18.225Z' +updatedAt: '2026-05-27T18:02:18.225Z' +--- +## Reason +Curate extracted factual statements from RLM context + +## Raw Concept +**Task:** +Document extracted project facts + +**Timestamp:** 2026-05-27T18:02:18.221Z + +## Narrative +### Structure +Aggregated factual statements + +### Highlights +pnpm alchemy:dev failure, package.json script, alchemy.run.ts content, Astro helper defaults, command execution + +## Facts +- **pnpm alchemy:dev failure**: `pnpm alchemy:dev` fails because Alchemy runs Astro from the repository root, but Astro is only installed in the landing workspace. +- **package.json script**: The root script in `package.json` defines "alchemy:dev": "alchemy dev". +- **alchemy.run.ts content**: `alchemy.run.ts` currently contains `export const landing = await Astro("landing", { assets: "apps/landing/dist" });`. +- **Astro helper defaults**: Alchemy’s `Astro()` helper defaults `cwd` to `props.cwd ?? process.cwd()` and `dev` to "pnpm exec astro dev". +- **command execution**: From the repository root, Alchemy effectively runs `pnpm exec astro dev`. +- **error message**: Running `pnpm exec astro dev` from the root fails with error "ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL Command \"astro\" not found". +- **astro dependency location**: `astro` is not a root dependency; it is defined in `apps/landing/package.json`. +- **workspace name**: The workspace package name is "@caplets/landing", not "@landing". +- **workspace command**: The direct workspace command `pnpm --filter @caplets/landing dev` works. +- **root cause**: Root cause: `alchemy.run.ts` does not set `cwd: "apps/landing"` for the Astro resource, causing Alchemy to run Astro in the wrong package context. +- **proposed fix**: A likely fix is to modify `alchemy.run.ts` to include `cwd: "apps/landing"` and adjust assets path, e.g., `export const landing = await Astro("landing", { cwd: "apps/landing", assets: "dist" });`. diff --git a/.brv/context-tree/facts/project/glassmorphism.md b/.brv/context-tree/facts/project/glassmorphism.md new file mode 100644 index 0000000..daf2c8d --- /dev/null +++ b/.brv/context-tree/facts/project/glassmorphism.md @@ -0,0 +1,27 @@ +--- +title: Glassmorphism +summary: Facts about glassmorphism +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.633Z' +updatedAt: '2026-05-27T19:18:57.163Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **glassmorphism**: Glassmorphism as default is banned. diff --git a/.brv/context-tree/facts/project/gradient_text.md b/.brv/context-tree/facts/project/gradient_text.md new file mode 100644 index 0000000..81cad04 --- /dev/null +++ b/.brv/context-tree/facts/project/gradient_text.md @@ -0,0 +1,27 @@ +--- +title: Gradient text +summary: Facts about gradient text +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.631Z' +updatedAt: '2026-05-27T19:18:57.155Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **gradient text**: Gradient text using background-clip: text with a gradient background is banned. diff --git a/.brv/context-tree/facts/project/harden.md b/.brv/context-tree/facts/project/harden.md new file mode 100644 index 0000000..ceca835 --- /dev/null +++ b/.brv/context-tree/facts/project/harden.md @@ -0,0 +1,24 @@ +--- +title: Harden +summary: Facts about harden +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.700Z' +updatedAt: '2026-05-27T18:47:50.700Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for harden + +## Facts +- **harden**: `harden [target]` is a Refine command that makes designs production‑ready, handling errors, i18n, and edge cases. diff --git a/.brv/context-tree/facts/project/harden_target_facts.md b/.brv/context-tree/facts/project/harden_target_facts.md new file mode 100644 index 0000000..af6a80e --- /dev/null +++ b/.brv/context-tree/facts/project/harden_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`harden [target]` facts' +summary: Facts about `harden [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.733Z' +updatedAt: '2026-05-27T19:11:54.733Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `harden [target]` + +## Facts +- **`harden [target]`**: The command `harden [target]` belongs to the Refine category and makes designs production‑ready, handling errors, i18n, and edge cases. diff --git a/.brv/context-tree/facts/project/header_styling_facts.md b/.brv/context-tree/facts/project/header_styling_facts.md new file mode 100644 index 0000000..2fa718c --- /dev/null +++ b/.brv/context-tree/facts/project/header_styling_facts.md @@ -0,0 +1,24 @@ +--- +title: Header styling facts +summary: Facts about Header styling +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.763Z' +updatedAt: '2026-05-27T19:11:54.763Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for Header styling + +## Facts +- **Header styling**: Header spacing, sticky behavior, hover states, and visual weight were improved. diff --git a/.brv/context-tree/facts/project/hero_metric_template.md b/.brv/context-tree/facts/project/hero_metric_template.md new file mode 100644 index 0000000..43c8123 --- /dev/null +++ b/.brv/context-tree/facts/project/hero_metric_template.md @@ -0,0 +1,27 @@ +--- +title: Hero-metric template +summary: Facts about hero-metric template +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.165Z' +updatedAt: '2026-05-27T19:18:57.165Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **hero-metric template**: The hero-metric template is banned. diff --git a/.brv/context-tree/facts/project/hierarchy_facts.md b/.brv/context-tree/facts/project/hierarchy_facts.md new file mode 100644 index 0000000..8675845 --- /dev/null +++ b/.brv/context-tree/facts/project/hierarchy_facts.md @@ -0,0 +1,24 @@ +--- +title: Hierarchy facts +summary: Facts about hierarchy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.700Z' +updatedAt: '2026-05-27T19:11:54.700Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for hierarchy + +## Facts +- **hierarchy**: Hierarchy should have a scale and weight contrast ratio of at least 1.25 between steps. diff --git a/.brv/context-tree/facts/project/impeccable_context_dir.md b/.brv/context-tree/facts/project/impeccable_context_dir.md new file mode 100644 index 0000000..00b3b4f --- /dev/null +++ b/.brv/context-tree/facts/project/impeccable_context_dir.md @@ -0,0 +1,24 @@ +--- +title: IMPECCABLE CONTEXT DIR +summary: Facts about IMPECCABLE_CONTEXT_DIR +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.267Z' +updatedAt: '2026-05-27T19:12:30.267Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.245Z + +## Narrative +### Structure +Extracted facts for IMPECCABLE_CONTEXT_DIR + +## Facts +- **IMPECCABLE_CONTEXT_DIR**: The context directory can be overridden with IMPECCABLE_CONTEXT_DIR=path/to/dir (absolute or relative to cwd). diff --git a/.brv/context-tree/facts/project/interaction_pattern_facts.md b/.brv/context-tree/facts/project/interaction_pattern_facts.md new file mode 100644 index 0000000..1e94446 --- /dev/null +++ b/.brv/context-tree/facts/project/interaction_pattern_facts.md @@ -0,0 +1,24 @@ +--- +title: Interaction pattern facts +summary: Facts about interaction pattern +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.694Z' +updatedAt: '2026-05-27T19:11:54.694Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for interaction pattern + +## Facts +- **interaction pattern**: Modals as the first design thought are prohibited. diff --git a/.brv/context-tree/facts/project/landing_build_facts.md b/.brv/context-tree/facts/project/landing_build_facts.md new file mode 100644 index 0000000..540d56b --- /dev/null +++ b/.brv/context-tree/facts/project/landing_build_facts.md @@ -0,0 +1,24 @@ +--- +title: Landing build facts +summary: Facts about Landing build +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.769Z' +updatedAt: '2026-05-27T19:11:54.769Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for Landing build + +## Facts +- **Landing build**: `pnpm --filter @caplets/landing build` passed without errors. diff --git a/.brv/context-tree/facts/project/landing_page_animation.md b/.brv/context-tree/facts/project/landing_page_animation.md new file mode 100644 index 0000000..1f2198c --- /dev/null +++ b/.brv/context-tree/facts/project/landing_page_animation.md @@ -0,0 +1,27 @@ +--- +title: Landing page animation +summary: Facts about landing page animation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.178Z' +updatedAt: '2026-05-27T19:18:57.178Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **landing page animation**: The animation of the landing page added hero entrance choreography, scroll‑triggered section reveals, staggered reveal timing, button active feedback, and preserved reduced‑motion behavior. diff --git a/.brv/context-tree/facts/project/landing_typecheck_facts.md b/.brv/context-tree/facts/project/landing_typecheck_facts.md new file mode 100644 index 0000000..0dc8685 --- /dev/null +++ b/.brv/context-tree/facts/project/landing_typecheck_facts.md @@ -0,0 +1,24 @@ +--- +title: Landing typecheck facts +summary: Facts about Landing typecheck +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.770Z' +updatedAt: '2026-05-27T19:11:54.770Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for Landing typecheck + +## Facts +- **Landing typecheck**: `pnpm --filter @caplets/landing typecheck` passed with 0 errors, 0 warnings, and 0 hints. diff --git a/.brv/context-tree/facts/project/layout.md b/.brv/context-tree/facts/project/layout.md new file mode 100644 index 0000000..956395d --- /dev/null +++ b/.brv/context-tree/facts/project/layout.md @@ -0,0 +1,24 @@ +--- +title: Layout +summary: Facts about layout +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.721Z' +updatedAt: '2026-05-27T18:47:50.721Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for layout + +## Facts +- **layout**: `layout [target]` is an Enhance command that fixes spacing, rhythm, and visual hierarchy. diff --git a/.brv/context-tree/facts/project/layout_target_facts.md b/.brv/context-tree/facts/project/layout_target_facts.md new file mode 100644 index 0000000..bc1bf94 --- /dev/null +++ b/.brv/context-tree/facts/project/layout_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`layout [target]` facts' +summary: Facts about `layout [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.743Z' +updatedAt: '2026-05-27T19:11:54.743Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `layout [target]` + +## Facts +- **`layout [target]`**: The command `layout [target]` belongs to the Enhance category and fixes spacing, rhythm, and visual hierarchy. diff --git a/.brv/context-tree/facts/project/layout_template_facts.md b/.brv/context-tree/facts/project/layout_template_facts.md new file mode 100644 index 0000000..2c4951c --- /dev/null +++ b/.brv/context-tree/facts/project/layout_template_facts.md @@ -0,0 +1,24 @@ +--- +title: Layout template facts +summary: Facts about layout template +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.690Z' +updatedAt: '2026-05-27T19:11:54.690Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for layout template + +## Facts +- **layout template**: The hero-metric template (big number, small label, supporting stats, gradient accent) is prohibited. diff --git a/.brv/context-tree/facts/project/line_length.md b/.brv/context-tree/facts/project/line_length.md new file mode 100644 index 0000000..2e01239 --- /dev/null +++ b/.brv/context-tree/facts/project/line_length.md @@ -0,0 +1,24 @@ +--- +title: Line length +summary: Facts about line length +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.298Z' +updatedAt: '2026-05-27T19:12:30.298Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for line length + +## Facts +- **line length**: Body line length should be capped at 65–75 characters. diff --git a/.brv/context-tree/facts/project/line_length_facts.md b/.brv/context-tree/facts/project/line_length_facts.md new file mode 100644 index 0000000..6ba8289 --- /dev/null +++ b/.brv/context-tree/facts/project/line_length_facts.md @@ -0,0 +1,24 @@ +--- +title: Line length facts +summary: Facts about line length +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.698Z' +updatedAt: '2026-05-27T19:11:54.698Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for line length + +## Facts +- **line length**: Cap body line length at 65–75 characters. diff --git a/.brv/context-tree/facts/project/live.md b/.brv/context-tree/facts/project/live.md new file mode 100644 index 0000000..f334aa3 --- /dev/null +++ b/.brv/context-tree/facts/project/live.md @@ -0,0 +1,24 @@ +--- +title: Live +summary: Facts about live +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.756Z' +updatedAt: '2026-05-27T18:47:50.756Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for live + +## Facts +- **live**: `live` is an Iterate command that provides a visual variant mode for picking elements in the browser and generating alternatives. diff --git a/.brv/context-tree/facts/project/live_facts.md b/.brv/context-tree/facts/project/live_facts.md new file mode 100644 index 0000000..419ca5a --- /dev/null +++ b/.brv/context-tree/facts/project/live_facts.md @@ -0,0 +1,24 @@ +--- +title: '`live` facts' +summary: Facts about `live` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.758Z' +updatedAt: '2026-05-27T19:11:54.758Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `live` + +## Facts +- **`live`**: The command `live` belongs to the Iterate category and provides a visual variant mode to pick elements in the browser and generate alternatives. diff --git a/.brv/context-tree/facts/project/load_context_mjs.md b/.brv/context-tree/facts/project/load_context_mjs.md new file mode 100644 index 0000000..ee200a2 --- /dev/null +++ b/.brv/context-tree/facts/project/load_context_mjs.md @@ -0,0 +1,24 @@ +--- +title: Load-context.mjs +summary: Facts about load-context.mjs +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.270Z' +updatedAt: '2026-05-27T19:12:30.270Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.245Z + +## Narrative +### Structure +Extracted facts for load-context.mjs + +## Facts +- **load-context.mjs**: Both PRODUCT.md and DESIGN.md can be loaded in one call using node {{scripts_path}}/load-context.mjs. diff --git a/.brv/context-tree/facts/project/loader_output.md b/.brv/context-tree/facts/project/loader_output.md new file mode 100644 index 0000000..3a0158b --- /dev/null +++ b/.brv/context-tree/facts/project/loader_output.md @@ -0,0 +1,24 @@ +--- +title: Loader output +summary: Facts about loader output +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.272Z' +updatedAt: '2026-05-27T19:12:30.272Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.245Z + +## Narrative +### Structure +Extracted facts for loader output + +## Facts +- **loader output**: Never pipe the loader output through head, tail, grep, or jq. diff --git a/.brv/context-tree/facts/project/loader_output_handling.md b/.brv/context-tree/facts/project/loader_output_handling.md new file mode 100644 index 0000000..b40c7f0 --- /dev/null +++ b/.brv/context-tree/facts/project/loader_output_handling.md @@ -0,0 +1,24 @@ +--- +title: Loader output handling +summary: Facts about loader output handling +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.559Z' +updatedAt: '2026-05-27T18:47:50.559Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for loader output handling + +## Facts +- **loader output handling**: Never pipe the loader output through `head`, `tail`, `grep`, or `jq`. diff --git a/.brv/context-tree/facts/project/missing_design_md.md b/.brv/context-tree/facts/project/missing_design_md.md new file mode 100644 index 0000000..5cc4739 --- /dev/null +++ b/.brv/context-tree/facts/project/missing_design_md.md @@ -0,0 +1,27 @@ +--- +title: Missing DESIGN.md +summary: Facts about missing DESIGN.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.588Z' +updatedAt: '2026-05-27T19:12:30.278Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for missing DESIGN.md + +### Highlights +Extracted 1 facts for missing DESIGN.md + +## Facts +- **missing DESIGN.md**: If DESIGN.md is missing, the assistant should nudge the user once per session to run {{command_prefix}}impeccable document. diff --git a/.brv/context-tree/facts/project/missing_product_md.md b/.brv/context-tree/facts/project/missing_product_md.md new file mode 100644 index 0000000..eb5d213 --- /dev/null +++ b/.brv/context-tree/facts/project/missing_product_md.md @@ -0,0 +1,27 @@ +--- +title: Missing PRODUCT.md +summary: Facts about missing PRODUCT.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.563Z' +updatedAt: '2026-05-27T19:12:30.274Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for missing PRODUCT.md + +### Highlights +Extracted 1 facts for missing PRODUCT.md + +## Facts +- **missing PRODUCT.md**: If PRODUCT.md is missing, empty, or contains placeholder markers (<200 chars), run {{command_prefix}}impeccable teach. diff --git a/.brv/context-tree/facts/project/missing_register_field.md b/.brv/context-tree/facts/project/missing_register_field.md new file mode 100644 index 0000000..c39ea64 --- /dev/null +++ b/.brv/context-tree/facts/project/missing_register_field.md @@ -0,0 +1,24 @@ +--- +title: Missing register field +summary: Facts about missing register field +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.290Z' +updatedAt: '2026-05-27T19:12:30.290Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for missing register field + +## Facts +- **missing register field**: If PRODUCT.md lacks a register field, the assistant should infer it once from the Users and Product Purpose sections and cache it for the session. diff --git a/.brv/context-tree/facts/project/mobile_nav_facts.md b/.brv/context-tree/facts/project/mobile_nav_facts.md new file mode 100644 index 0000000..7c89df2 --- /dev/null +++ b/.brv/context-tree/facts/project/mobile_nav_facts.md @@ -0,0 +1,24 @@ +--- +title: Mobile nav facts +summary: Facts about Mobile nav +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.765Z' +updatedAt: '2026-05-27T19:11:54.765Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for Mobile nav + +## Facts +- **Mobile nav**: Mobile navigation now becomes a full compact command‑bar layout instead of hiding section links. diff --git a/.brv/context-tree/facts/project/modals.md b/.brv/context-tree/facts/project/modals.md new file mode 100644 index 0000000..2f16e94 --- /dev/null +++ b/.brv/context-tree/facts/project/modals.md @@ -0,0 +1,27 @@ +--- +title: Modals +summary: Facts about modals +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.167Z' +updatedAt: '2026-05-27T19:18:57.167Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **modals**: Modals as the first design thought are banned. diff --git a/.brv/context-tree/facts/project/modified_files.md b/.brv/context-tree/facts/project/modified_files.md index 7015e8e..5a1fbe9 100644 --- a/.brv/context-tree/facts/project/modified_files.md +++ b/.brv/context-tree/facts/project/modified_files.md @@ -5,20 +5,23 @@ tags: [] related: [] keywords: [] createdAt: '2026-05-27T11:14:20.336Z' -updatedAt: '2026-05-27T11:14:20.336Z' +updatedAt: '2026-05-27T19:18:57.180Z' --- ## Reason -Curated factual statements extracted from context +Curated facts extracted from context ## Raw Concept **Task:** -Document factual statements +Document project facts -**Timestamp:** 2026-05-27T11:14:20.303Z +**Timestamp:** 2026-05-27T19:18:57.119Z ## Narrative ### Structure -Collection of facts regarding modified files +Collected factual statements + +### Highlights +Contains 1 facts ## Facts -- **modified files**: Files changed include packages/core/src/result-content.ts, packages/core/test/result-content.test.ts, packages/core/test/http-actions.test.ts, and packages/core/test/tools.test.ts. +- **modified files**: The animation changes modified the files `apps/landing/src/pages/index.astro` and `apps/landing/src/styles/global.css`. diff --git a/.brv/context-tree/facts/project/motion.md b/.brv/context-tree/facts/project/motion.md new file mode 100644 index 0000000..c1d0171 --- /dev/null +++ b/.brv/context-tree/facts/project/motion.md @@ -0,0 +1,28 @@ +--- +title: Motion +summary: Facts about motion +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.152Z' +updatedAt: '2026-05-27T19:18:57.152Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 2 facts + +## Facts +- **motion**: Do not animate CSS layout properties. +- **motion**: Use ease-out exponential curves for motion, no bounce or elastic. diff --git a/.brv/context-tree/facts/project/nav_links_facts.md b/.brv/context-tree/facts/project/nav_links_facts.md new file mode 100644 index 0000000..34440dd --- /dev/null +++ b/.brv/context-tree/facts/project/nav_links_facts.md @@ -0,0 +1,24 @@ +--- +title: Nav links facts +summary: Facts about Nav links +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.762Z' +updatedAt: '2026-05-27T19:11:54.762Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for Nav links + +## Facts +- **Nav links**: A link to npm was added alongside GitHub as a project link in the navigation. diff --git a/.brv/context-tree/facts/project/neutral_colors.md b/.brv/context-tree/facts/project/neutral_colors.md new file mode 100644 index 0000000..2e5e2e7 --- /dev/null +++ b/.brv/context-tree/facts/project/neutral_colors.md @@ -0,0 +1,24 @@ +--- +title: Neutral colors +summary: Facts about neutral colors +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.295Z' +updatedAt: '2026-05-27T19:12:30.295Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for neutral colors + +## Facts +- **neutral colors**: Never use #000 or #fff; tint every neutral toward the brand hue. diff --git a/.brv/context-tree/facts/project/onboard.md b/.brv/context-tree/facts/project/onboard.md new file mode 100644 index 0000000..62d350f --- /dev/null +++ b/.brv/context-tree/facts/project/onboard.md @@ -0,0 +1,24 @@ +--- +title: Onboard +summary: Facts about onboard +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.702Z' +updatedAt: '2026-05-27T18:47:50.702Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for onboard + +## Facts +- **onboard**: `onboard [target]` is a Refine command that designs first‑run flows, empty states, and activation experiences. diff --git a/.brv/context-tree/facts/project/onboard_target_facts.md b/.brv/context-tree/facts/project/onboard_target_facts.md new file mode 100644 index 0000000..fbc8498 --- /dev/null +++ b/.brv/context-tree/facts/project/onboard_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`onboard [target]` facts' +summary: Facts about `onboard [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.737Z' +updatedAt: '2026-05-27T19:11:54.737Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `onboard [target]` + +## Facts +- **`onboard [target]`**: The command `onboard [target]` belongs to the Refine category and designs first‑run flows, empty states, and activation experiences. diff --git a/.brv/context-tree/facts/project/optimize.md b/.brv/context-tree/facts/project/optimize.md new file mode 100644 index 0000000..bf29a13 --- /dev/null +++ b/.brv/context-tree/facts/project/optimize.md @@ -0,0 +1,24 @@ +--- +title: Optimize +summary: Facts about optimize +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.754Z' +updatedAt: '2026-05-27T18:47:50.754Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for optimize + +## Facts +- **optimize**: `optimize [target]` is a Fix command that diagnoses and fixes UI performance issues. diff --git a/.brv/context-tree/facts/project/optimize_target_facts.md b/.brv/context-tree/facts/project/optimize_target_facts.md new file mode 100644 index 0000000..4ff59f7 --- /dev/null +++ b/.brv/context-tree/facts/project/optimize_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`optimize [target]` facts' +summary: Facts about `optimize [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.756Z' +updatedAt: '2026-05-27T19:11:54.756Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `optimize [target]` + +## Facts +- **`optimize [target]`**: The command `optimize [target]` belongs to the Fix category and diagnoses and fixes UI performance issues. diff --git a/.brv/context-tree/facts/project/overdrive.md b/.brv/context-tree/facts/project/overdrive.md new file mode 100644 index 0000000..9e8a780 --- /dev/null +++ b/.brv/context-tree/facts/project/overdrive.md @@ -0,0 +1,24 @@ +--- +title: Overdrive +summary: Facts about overdrive +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.736Z' +updatedAt: '2026-05-27T18:47:50.736Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for overdrive + +## Facts +- **overdrive**: `overdrive [target]` is an Enhance command that pushes past conventional limits. diff --git a/.brv/context-tree/facts/project/overdrive_target_facts.md b/.brv/context-tree/facts/project/overdrive_target_facts.md new file mode 100644 index 0000000..9192c4a --- /dev/null +++ b/.brv/context-tree/facts/project/overdrive_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`overdrive [target]` facts' +summary: Facts about `overdrive [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.748Z' +updatedAt: '2026-05-27T19:11:54.748Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `overdrive [target]` + +## Facts +- **`overdrive [target]`**: The command `overdrive [target]` belongs to the Enhance category and pushes designs past conventional limits. diff --git a/.brv/context-tree/facts/project/pin.md b/.brv/context-tree/facts/project/pin.md new file mode 100644 index 0000000..c4cb994 --- /dev/null +++ b/.brv/context-tree/facts/project/pin.md @@ -0,0 +1,27 @@ +--- +title: Pin +summary: Facts about pin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.759Z' +updatedAt: '2026-05-27T19:18:57.173Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **pin**: `pin ` creates a standalone shortcut so `{{command_prefix}}` invokes `{{command_prefix}}impeccable ` directly. diff --git a/.brv/context-tree/facts/project/pin_unpin_script.md b/.brv/context-tree/facts/project/pin_unpin_script.md new file mode 100644 index 0000000..179bf21 --- /dev/null +++ b/.brv/context-tree/facts/project/pin_unpin_script.md @@ -0,0 +1,27 @@ +--- +title: Pin/unpin script +summary: Facts about pin/unpin script +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.327Z' +updatedAt: '2026-05-27T19:18:57.176Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **pin/unpin script**: The pin/unpin script is executed with `node {{scripts_path}}/pin.mjs `. diff --git a/.brv/context-tree/facts/project/polish.md b/.brv/context-tree/facts/project/polish.md new file mode 100644 index 0000000..ddb1b91 --- /dev/null +++ b/.brv/context-tree/facts/project/polish.md @@ -0,0 +1,24 @@ +--- +title: Polish +summary: Facts about polish +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.678Z' +updatedAt: '2026-05-27T18:47:50.678Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for polish + +## Facts +- **polish**: `polish [target]` is a Refine command that provides a final quality pass before shipping. diff --git a/.brv/context-tree/facts/project/polish_target_facts.md b/.brv/context-tree/facts/project/polish_target_facts.md new file mode 100644 index 0000000..5901e4f --- /dev/null +++ b/.brv/context-tree/facts/project/polish_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`polish [target]` facts' +summary: Facts about `polish [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.724Z' +updatedAt: '2026-05-27T19:11:54.724Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `polish [target]` + +## Facts +- **`polish [target]`**: The command `polish [target]` belongs to the Refine category and provides a final quality pass before shipping. diff --git a/.brv/context-tree/facts/project/preview.md b/.brv/context-tree/facts/project/preview.md new file mode 100644 index 0000000..515b500 --- /dev/null +++ b/.brv/context-tree/facts/project/preview.md @@ -0,0 +1,24 @@ +--- +title: Preview +summary: Facts about preview +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.365Z' +updatedAt: '2026-05-27T18:59:51.365Z' +--- +## Reason +Curate extracted project facts + +## Raw Concept +**Task:** +Document project fact + +**Timestamp:** 2026-05-27T18:59:51.340Z + +## Narrative +### Highlights +Extracted 1 facts for preview + +## Facts +- **preview**: Browser preview checked. diff --git a/.brv/context-tree/facts/project/product_md.md b/.brv/context-tree/facts/project/product_md.md new file mode 100644 index 0000000..21638c3 --- /dev/null +++ b/.brv/context-tree/facts/project/product_md.md @@ -0,0 +1,27 @@ +--- +title: PRODUCT.md +summary: Facts about PRODUCT.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.543Z' +updatedAt: '2026-05-27T19:18:57.122Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **PRODUCT.md**: PRODUCT.md is required. diff --git a/.brv/context-tree/facts/project/product_md_facts.md b/.brv/context-tree/facts/project/product_md_facts.md new file mode 100644 index 0000000..5d85106 --- /dev/null +++ b/.brv/context-tree/facts/project/product_md_facts.md @@ -0,0 +1,24 @@ +--- +title: PRODUCT.md facts +summary: Facts about PRODUCT.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.671Z' +updatedAt: '2026-05-27T19:11:54.671Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for PRODUCT.md + +## Facts +- **PRODUCT.md**: PRODUCT.md is required. diff --git a/.brv/context-tree/facts/project/project_facts.md b/.brv/context-tree/facts/project/project_facts.md new file mode 100644 index 0000000..89dae3f --- /dev/null +++ b/.brv/context-tree/facts/project/project_facts.md @@ -0,0 +1,46 @@ +--- +title: Project Facts +summary: Extracted project-related factual statements +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:33:58.630Z' +updatedAt: '2026-05-27T18:33:58.630Z' +--- +## Reason +Curate extracted project facts from context + +## Raw Concept +**Task:** +Document project facts extracted from context + +**Flow:** +extraction -> dedup -> curate + +**Timestamp:** 2026-05-27T18:33:58.628Z + +## Narrative +### Structure +Facts grouped by subject + +### Highlights +Caplets landing page, index.astro, global.css, astro.config.mjs, hero section + +## Facts +- **Caplets landing page**: Implemented the Caplets landing page in `apps/landing/`. +- **index.astro**: Modified `apps/landing/src/pages/index.astro`. +- **global.css**: Modified `apps/landing/src/styles/global.css`. +- **astro.config.mjs**: Modified `apps/landing/astro.config.mjs`. +- **hero section**: Added an asymmetric hero with the approved Tool Cartographer direction. +- **capability-map hero**: Implemented capability-map hero visualization with route lines, scoped operation cards, and selected route panel. +- **comparison section**: Provided problem/solution comparison for flat tool lists vs progressive disclosure. +- **proof sections**: Included proof sections for disclosure, lossless routing, and redacted operational safety. +- **integration strip**: Added integration strip for supported agent clients. +- **install terminal**: Implemented install terminal with real Caplets commands. +- **responsive design**: Ensured responsive mobile layout, visible focus states, reduced-motion handling, and no console errors in preview. +- **build command**: `pnpm --filter @caplets/landing build` passed. +- **typecheck command**: `pnpm --filter @caplets/landing typecheck` passed with 0 errors, 0 warnings, 0 hints. +- **browser preview**: Browser preview was checked at desktop and mobile. +- **browser console**: Browser console was checked with 0 errors and 0 warnings. +- **desktop screenshot**: Captured screenshot `caplets-landing-desktop-final.png`. +- **mobile screenshot**: Captured screenshot `caplets-landing-mobile.png`. diff --git a/.brv/context-tree/facts/project/punctuation.md b/.brv/context-tree/facts/project/punctuation.md new file mode 100644 index 0000000..7d2a1c5 --- /dev/null +++ b/.brv/context-tree/facts/project/punctuation.md @@ -0,0 +1,27 @@ +--- +title: Punctuation +summary: Facts about punctuation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.642Z' +updatedAt: '2026-05-27T19:18:57.169Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **punctuation**: No em dashes are allowed; use commas, colons, semicolons, periods, or parentheses instead. diff --git a/.brv/context-tree/facts/project/punctuation_facts.md b/.brv/context-tree/facts/project/punctuation_facts.md new file mode 100644 index 0000000..42633b4 --- /dev/null +++ b/.brv/context-tree/facts/project/punctuation_facts.md @@ -0,0 +1,24 @@ +--- +title: Punctuation facts +summary: Facts about punctuation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.696Z' +updatedAt: '2026-05-27T19:11:54.696Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for punctuation + +## Facts +- **punctuation**: No em dashes may be used in copy; use commas, colons, semicolons, periods, or parentheses instead. diff --git a/.brv/context-tree/facts/project/quieter.md b/.brv/context-tree/facts/project/quieter.md new file mode 100644 index 0000000..079e1f5 --- /dev/null +++ b/.brv/context-tree/facts/project/quieter.md @@ -0,0 +1,24 @@ +--- +title: Quieter +summary: Facts about quieter +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.695Z' +updatedAt: '2026-05-27T18:47:50.695Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for quieter + +## Facts +- **quieter**: `quieter [target]` is a Refine command that tones down aggressive or overstimulating designs. diff --git a/.brv/context-tree/facts/project/quieter_target_facts.md b/.brv/context-tree/facts/project/quieter_target_facts.md new file mode 100644 index 0000000..70ba1fc --- /dev/null +++ b/.brv/context-tree/facts/project/quieter_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`quieter [target]` facts' +summary: Facts about `quieter [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.728Z' +updatedAt: '2026-05-27T19:11:54.728Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `quieter [target]` + +## Facts +- **`quieter [target]`**: The command `quieter [target]` belongs to the Refine category and tones down aggressive or overstimulating designs. diff --git a/.brv/context-tree/facts/project/readability.md b/.brv/context-tree/facts/project/readability.md new file mode 100644 index 0000000..6e4f809 --- /dev/null +++ b/.brv/context-tree/facts/project/readability.md @@ -0,0 +1,24 @@ +--- +title: Readability +summary: Facts about readability +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.351Z' +updatedAt: '2026-05-27T18:59:51.351Z' +--- +## Reason +Curate extracted project facts + +## Raw Concept +**Task:** +Document project fact + +**Timestamp:** 2026-05-27T18:59:51.340Z + +## Narrative +### Highlights +Extracted 1 facts for readability + +## Facts +- **readability**: Increased dark-mode label/accent readability without making the page neon or breaking the charred-ink direction. diff --git a/.brv/context-tree/facts/project/register_identification.md b/.brv/context-tree/facts/project/register_identification.md new file mode 100644 index 0000000..a28a965 --- /dev/null +++ b/.brv/context-tree/facts/project/register_identification.md @@ -0,0 +1,24 @@ +--- +title: Register identification +summary: Facts about register identification +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.287Z' +updatedAt: '2026-05-27T19:12:30.287Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for register identification + +## Facts +- **register identification**: The register (brand or product) must be identified before designing, using priority: cue in the task, surface in focus, then register field in PRODUCT.md. diff --git a/.brv/context-tree/facts/project/rule_1.md b/.brv/context-tree/facts/project/rule_1.md new file mode 100644 index 0000000..4e0fec7 --- /dev/null +++ b/.brv/context-tree/facts/project/rule_1.md @@ -0,0 +1,24 @@ +--- +title: Rule 1 +summary: Facts about Rule 1 +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.341Z' +updatedAt: '2026-05-27T19:12:30.341Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for Rule 1 + +## Facts +- **Rule 1**: Routing rule 1: No argument renders the table above as the user‑facing command menu, grouped by category. diff --git a/.brv/context-tree/facts/project/rule_2.md b/.brv/context-tree/facts/project/rule_2.md new file mode 100644 index 0000000..6c50e82 --- /dev/null +++ b/.brv/context-tree/facts/project/rule_2.md @@ -0,0 +1,24 @@ +--- +title: Rule 2 +summary: Facts about Rule 2 +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.342Z' +updatedAt: '2026-05-27T19:12:30.342Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for Rule 2 + +## Facts +- **Rule 2**: Routing rule 2: First word matches a command loads its reference file and follows its instructions. diff --git a/.brv/context-tree/facts/project/rule_3.md b/.brv/context-tree/facts/project/rule_3.md new file mode 100644 index 0000000..182d0ea --- /dev/null +++ b/.brv/context-tree/facts/project/rule_3.md @@ -0,0 +1,24 @@ +--- +title: Rule 3 +summary: Facts about Rule 3 +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.347Z' +updatedAt: '2026-05-27T19:12:30.347Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for Rule 3 + +## Facts +- **Rule 3**: Routing rule 3: First word doesn't match triggers general design invocation. diff --git a/.brv/context-tree/facts/project/screenshots.md b/.brv/context-tree/facts/project/screenshots.md new file mode 100644 index 0000000..a70f21e --- /dev/null +++ b/.brv/context-tree/facts/project/screenshots.md @@ -0,0 +1,27 @@ +--- +title: Screenshots +summary: Facts about screenshots +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.219Z' +updatedAt: '2026-05-27T19:18:57.219Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **screenshots**: Screenshots: caplets-animated-landing-top.png, caplets-animated-landing-reveals.png diff --git a/.brv/context-tree/facts/project/script.md b/.brv/context-tree/facts/project/script.md new file mode 100644 index 0000000..0563d06 --- /dev/null +++ b/.brv/context-tree/facts/project/script.md @@ -0,0 +1,24 @@ +--- +title: Script +summary: Facts about script +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.778Z' +updatedAt: '2026-05-27T18:47:50.778Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for script + +## Facts +- **script**: Report the script's result concisely. diff --git a/.brv/context-tree/facts/project/setup_behavior.md b/.brv/context-tree/facts/project/setup_behavior.md new file mode 100644 index 0000000..9c1bab7 --- /dev/null +++ b/.brv/context-tree/facts/project/setup_behavior.md @@ -0,0 +1,24 @@ +--- +title: Setup behavior +summary: Facts about Setup behavior +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.349Z' +updatedAt: '2026-05-27T19:12:30.349Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for Setup behavior + +## Facts +- **Setup behavior**: Setup (context gathering, register) is already loaded by then; sub‑commands don't re‑invoke `{{command_prefix}}impeccable`. diff --git a/.brv/context-tree/facts/project/shape.md b/.brv/context-tree/facts/project/shape.md new file mode 100644 index 0000000..8d6d949 --- /dev/null +++ b/.brv/context-tree/facts/project/shape.md @@ -0,0 +1,24 @@ +--- +title: Shape +summary: Facts about shape +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.657Z' +updatedAt: '2026-05-27T18:47:50.657Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for shape + +## Facts +- **shape**: `shape [feature]` is a Build command that plans UX/UI before writing code. diff --git a/.brv/context-tree/facts/project/shape_feature_facts.md b/.brv/context-tree/facts/project/shape_feature_facts.md new file mode 100644 index 0000000..e46bc12 --- /dev/null +++ b/.brv/context-tree/facts/project/shape_feature_facts.md @@ -0,0 +1,24 @@ +--- +title: '`shape [feature]` facts' +summary: Facts about `shape [feature]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.711Z' +updatedAt: '2026-05-27T19:11:54.711Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `shape [feature]` + +## Facts +- **`shape [feature]`**: The command `shape [feature]` belongs to the Build category and plans UX/UI before writing code. diff --git a/.brv/context-tree/facts/project/shared_design_laws.md b/.brv/context-tree/facts/project/shared_design_laws.md new file mode 100644 index 0000000..d17b0de --- /dev/null +++ b/.brv/context-tree/facts/project/shared_design_laws.md @@ -0,0 +1,24 @@ +--- +title: Shared design laws +summary: Facts about shared design laws +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.291Z' +updatedAt: '2026-05-27T19:12:30.291Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for shared design laws + +## Facts +- **shared design laws**: Shared design laws apply to both brand and product registers. diff --git a/.brv/context-tree/facts/project/shortcut.md b/.brv/context-tree/facts/project/shortcut.md new file mode 100644 index 0000000..ade25ef --- /dev/null +++ b/.brv/context-tree/facts/project/shortcut.md @@ -0,0 +1,24 @@ +--- +title: Shortcut +summary: Facts about shortcut +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.780Z' +updatedAt: '2026-05-27T18:47:50.780Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for shortcut + +## Facts +- **shortcut**: Confirm the new shortcut on success, relay stderr verbatim on error. diff --git a/.brv/context-tree/facts/project/side_stripe_borders.md b/.brv/context-tree/facts/project/side_stripe_borders.md new file mode 100644 index 0000000..b47e83a --- /dev/null +++ b/.brv/context-tree/facts/project/side_stripe_borders.md @@ -0,0 +1,24 @@ +--- +title: Side‑stripe borders +summary: Facts about side‑stripe borders +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.303Z' +updatedAt: '2026-05-27T19:12:30.303Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:12:30.246Z + +## Narrative +### Structure +Extracted facts for side‑stripe borders + +## Facts +- **side‑stripe borders**: Side‑stripe borders greater than 1 px as colored accents are prohibited. diff --git a/.brv/context-tree/facts/project/system_facts.md b/.brv/context-tree/facts/project/system_facts.md new file mode 100644 index 0000000..789b186 --- /dev/null +++ b/.brv/context-tree/facts/project/system_facts.md @@ -0,0 +1,24 @@ +--- +title: System facts +summary: Facts about system +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.774Z' +updatedAt: '2026-05-27T19:11:54.774Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for system + +## Facts +- **system**: 0 errors, 0 warnings, 0 hints. diff --git a/.brv/context-tree/facts/project/teach.md b/.brv/context-tree/facts/project/teach.md new file mode 100644 index 0000000..d2d9516 --- /dev/null +++ b/.brv/context-tree/facts/project/teach.md @@ -0,0 +1,24 @@ +--- +title: Teach +summary: Facts about teach +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.659Z' +updatedAt: '2026-05-27T18:47:50.659Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for teach + +## Facts +- **teach**: `teach` is a Build command that sets up PRODUCT.md and DESIGN.md context. diff --git a/.brv/context-tree/facts/project/teach_facts.md b/.brv/context-tree/facts/project/teach_facts.md new file mode 100644 index 0000000..7d6bb28 --- /dev/null +++ b/.brv/context-tree/facts/project/teach_facts.md @@ -0,0 +1,24 @@ +--- +title: '`teach` facts' +summary: Facts about `teach` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.713Z' +updatedAt: '2026-05-27T19:11:54.713Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `teach` + +## Facts +- **`teach`**: The command `teach` belongs to the Build category and sets up PRODUCT.md and DESIGN.md context. diff --git a/.brv/context-tree/facts/project/text_styling_facts.md b/.brv/context-tree/facts/project/text_styling_facts.md new file mode 100644 index 0000000..e20039f --- /dev/null +++ b/.brv/context-tree/facts/project/text_styling_facts.md @@ -0,0 +1,24 @@ +--- +title: Text styling facts +summary: Facts about text styling +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.679Z' +updatedAt: '2026-05-27T19:11:54.679Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for text styling + +## Facts +- **text styling**: Gradient text using background-clip: text combined with a gradient background is prohibited. diff --git a/.brv/context-tree/facts/project/theme_selection.md b/.brv/context-tree/facts/project/theme_selection.md new file mode 100644 index 0000000..dacd49b --- /dev/null +++ b/.brv/context-tree/facts/project/theme_selection.md @@ -0,0 +1,27 @@ +--- +title: Theme selection +summary: Facts about theme selection +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:12:30.296Z' +updatedAt: '2026-05-27T19:18:57.148Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **theme selection**: Dark vs. light theme is never a default; choose based on a physical scene description. diff --git a/.brv/context-tree/facts/project/typecheck.md b/.brv/context-tree/facts/project/typecheck.md new file mode 100644 index 0000000..16a7114 --- /dev/null +++ b/.brv/context-tree/facts/project/typecheck.md @@ -0,0 +1,27 @@ +--- +title: Typecheck +summary: Facts about typecheck +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.354Z' +updatedAt: '2026-05-27T19:18:57.184Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **typecheck**: The typecheck command `pnpm --filter @caplets/landing typecheck` passed with 0 errors, 0 warnings, and 0 hints. diff --git a/.brv/context-tree/facts/project/typeset.md b/.brv/context-tree/facts/project/typeset.md new file mode 100644 index 0000000..46ed431 --- /dev/null +++ b/.brv/context-tree/facts/project/typeset.md @@ -0,0 +1,24 @@ +--- +title: Typeset +summary: Facts about typeset +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.717Z' +updatedAt: '2026-05-27T18:47:50.717Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T18:47:50.505Z + +## Narrative +### Highlights +Extracted 1 facts for typeset + +## Facts +- **typeset**: `typeset [target]` is an Enhance command that improves typography hierarchy and fonts. diff --git a/.brv/context-tree/facts/project/typeset_target_facts.md b/.brv/context-tree/facts/project/typeset_target_facts.md new file mode 100644 index 0000000..5200e10 --- /dev/null +++ b/.brv/context-tree/facts/project/typeset_target_facts.md @@ -0,0 +1,24 @@ +--- +title: '`typeset [target]` facts' +summary: Facts about `typeset [target]` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.741Z' +updatedAt: '2026-05-27T19:11:54.741Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.664Z + +## Narrative +### Structure +Collected 1 facts for `typeset [target]` + +## Facts +- **`typeset [target]`**: The command `typeset [target]` belongs to the Enhance category and improves typography hierarchy and fonts. diff --git a/.brv/context-tree/facts/project/typography.md b/.brv/context-tree/facts/project/typography.md new file mode 100644 index 0000000..2745f16 --- /dev/null +++ b/.brv/context-tree/facts/project/typography.md @@ -0,0 +1,28 @@ +--- +title: Typography +summary: Facts about typography +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.151Z' +updatedAt: '2026-05-27T19:18:57.151Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 2 facts + +## Facts +- **typography**: Cap body line length at 65–75 characters. +- **typography**: Hierarchy should have a scale and weight contrast ratio of at least 1.25 between steps. diff --git a/.brv/context-tree/facts/project/ui_components.md b/.brv/context-tree/facts/project/ui_components.md new file mode 100644 index 0000000..0d4de94 --- /dev/null +++ b/.brv/context-tree/facts/project/ui_components.md @@ -0,0 +1,24 @@ +--- +title: UI components +summary: Facts about UI components +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:59:51.349Z' +updatedAt: '2026-05-27T18:59:51.349Z' +--- +## Reason +Curate extracted project facts + +## Raw Concept +**Task:** +Document project fact + +**Timestamp:** 2026-05-27T18:59:51.340Z + +## Narrative +### Highlights +Extracted 1 facts for UI components + +## Facts +- **UI components**: Updated the selected-route panel, integrations band, integration pills, and install terminal to use brighter text, clearer borders, and stronger dark-surface separation. diff --git a/.brv/context-tree/facts/project/unpin.md b/.brv/context-tree/facts/project/unpin.md new file mode 100644 index 0000000..b911f6f --- /dev/null +++ b/.brv/context-tree/facts/project/unpin.md @@ -0,0 +1,27 @@ +--- +title: Unpin +summary: Facts about unpin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T18:47:50.769Z' +updatedAt: '2026-05-27T19:18:57.175Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **unpin**: `unpin ` removes the shortcut created by the pin command. diff --git a/.brv/context-tree/facts/project/validation.md b/.brv/context-tree/facts/project/validation.md new file mode 100644 index 0000000..1973231 --- /dev/null +++ b/.brv/context-tree/facts/project/validation.md @@ -0,0 +1,27 @@ +--- +title: Validation +summary: Facts about validation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:18:57.187Z' +updatedAt: '2026-05-27T19:18:57.187Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-27T19:18:57.119Z + +## Narrative +### Structure +Collected factual statements + +### Highlights +Contains 1 facts + +## Facts +- **validation**: errors, 0 warnings, 0 hints. diff --git a/.brv/context-tree/facts/project/visual_effect_facts.md b/.brv/context-tree/facts/project/visual_effect_facts.md new file mode 100644 index 0000000..2286670 --- /dev/null +++ b/.brv/context-tree/facts/project/visual_effect_facts.md @@ -0,0 +1,24 @@ +--- +title: Visual effect facts +summary: Facts about visual effect +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:11:54.682Z' +updatedAt: '2026-05-27T19:11:54.682Z' +--- +## Reason +Curated facts from RLM extraction + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-27T19:11:54.663Z + +## Narrative +### Structure +Collected 1 facts for visual effect + +## Facts +- **visual effect**: Glassmorphism as default, including blurs and glass cards, is prohibited. From 1ad72013a19248d2213799d544d89fda8f0fcef0 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Wed, 27 May 2026 19:19:02 -0400 Subject: [PATCH 03/21] docs: specify agent setup tabs --- ...2026-05-27-agent-card-setup-tabs-design.md | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 docs/specs/2026-05-27-agent-card-setup-tabs-design.md diff --git a/docs/specs/2026-05-27-agent-card-setup-tabs-design.md b/docs/specs/2026-05-27-agent-card-setup-tabs-design.md new file mode 100644 index 0000000..87d11da --- /dev/null +++ b/docs/specs/2026-05-27-agent-card-setup-tabs-design.md @@ -0,0 +1,58 @@ +# Agent card setup tabs design + +## Context + +The landing page has an agents/integrations card that currently uses agent pills to show supported agent integrations. The desired change is to keep the card's current layout and visual model, but make each agent pill act as a tab that reveals setup instructions for that specific agent. + +## Goals + +- Preserve the existing agents card structure and overall visual treatment. +- Turn each existing agent pill into a tab trigger. +- Show the selected agent's install command and configuration snippet in the card. +- Keep setup content copy-pasteable and easy to scan. +- Make the data model extensible for additional agents. + +## Non-goals + +- Do not redesign the entire integrations section. +- Do not add a modal, accordion, or separate setup page. +- Do not change the core Caplets runtime behavior. + +## UX design + +The agents card remains visually recognizable. The current agent pills become tab controls. One pill is selected by default, and its setup content appears in a shared detail area inside the same card. Selecting another pill swaps the detail content without navigating away. + +The active pill should use the existing pill style with a clear selected state. The inactive pills should remain lightweight. The detail area should contain a short label, the install command, and the configuration snippet. Commands and snippets should be styled as code blocks and fit the existing landing page aesthetic. + +## Data model + +Represent each agent as structured data with fields similar to: + +```ts +{ + name: string; + summary: string; + installCommand: string; + configSnippet: string; + note?: string; +} +``` + +Rendering should map over this data rather than hardcoding per-agent markup. That keeps future agent additions localized to the data list. + +## Interaction and accessibility + +Use tab semantics where practical: each pill should behave like a tab, the selected setup area should behave like a tab panel, and keyboard navigation should not regress from the current page. If the page remains mostly static Astro output, the tab behavior can be implemented with minimal client-side JavaScript scoped to this card. + +## Testing + +Add focused coverage for the landing page source or component behavior where the repo's current test setup supports it: + +- Agent tab labels render. +- The default selected agent's install command and configuration snippet render. +- Selecting another pill reveals the matching command/configuration. +- Agent setup data remains centralized rather than duplicated in separate markup blocks. + +## Implementation notes + +The likely implementation target is `apps/landing/src/pages/index.astro` plus any supporting CSS in `apps/landing/src/styles/global.css`. The change should respect the current landing page style and avoid unrelated cleanup. From 0e56e8f4bf607974bab93ea619458f603b189510 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Wed, 27 May 2026 19:45:11 -0400 Subject: [PATCH 04/21] feat(landing): add agent setup tabs --- apps/landing/src/pages/index.astro | 161 +++++- apps/landing/src/styles/global.css | 91 +++- .../plans/2026-05-27-agent-card-setup-tabs.md | 477 ++++++++++++++++++ 3 files changed, 720 insertions(+), 9 deletions(-) create mode 100644 docs/plans/2026-05-27-agent-card-setup-tabs.md diff --git a/apps/landing/src/pages/index.astro b/apps/landing/src/pages/index.astro index 519373b..72c62ec 100644 --- a/apps/landing/src/pages/index.astro +++ b/apps/landing/src/pages/index.astro @@ -23,7 +23,69 @@ const capabilityCards = [ ]; const backends = ["MCP", "OpenAPI", "GraphQL", "HTTP", "CLI"]; -const integrations = ["Claude Code", "Codex", "OpenCode", "Pi", "Any MCP client"]; +const agentSetups = [ + { + id: "claude-code", + name: "Claude Code", + installCommand: "npm install -g caplets", + configSnippet: `{ + "mcpServers": { + "caplets": { + "command": "caplets", + "args": ["serve"] + } + } +}`, + note: "Use the universal MCP server from Claude Code's MCP configuration.", + }, + { + id: "codex", + name: "Codex", + installCommand: "npm install -g caplets", + configSnippet: `[mcp_servers.caplets] +command = "caplets" +args = ["serve"]`, + note: "Register Caplets as a local MCP server in Codex config.", + }, + { + id: "opencode", + name: "OpenCode", + installCommand: "npm install -g @caplets/opencode", + configSnippet: `{ + "mcp": { + "caplets": { + "type": "local", + "command": ["caplets", "serve"] + } + } +}`, + note: "Use MCP config or the native @caplets/opencode integration where available.", + }, + { + id: "pi", + name: "Pi", + installCommand: "pi update && npm install -g @caplets/pi", + configSnippet: `{ + "caplets": { + "enabled": true, + "configPath": "~/.config/caplets/config.json" + } +}`, + note: "Use the native @caplets/pi integration with the same Caplets config file.", + }, + { + id: "mcp-client", + name: "Any MCP client", + installCommand: "npm install -g caplets", + configSnippet: `{ + "command": "caplets", + "args": ["serve"] +}`, + note: "Any MCP-compatible client can launch Caplets over stdio.", + }, +]; + +const integrations = agentSetups.map((agent) => agent.name); const proofPoints = [ { @@ -200,9 +262,47 @@ const installSteps = [

Native where it helps

Use Caplets from the agent you already run.

-
    - {integrations.map((name) =>
  • {name}
  • )} -
+
+
+ {agentSetups.map((agent, index) => ( + + ))} +
+
+ {agentSetups.map((agent, index) => ( + + ))} +
+
@@ -236,6 +336,57 @@ const installSteps = [ const mapStage = document.querySelector(".map-stage") as HTMLElement | null; const canAnimate = !window.matchMedia("(prefers-reduced-motion: reduce)").matches; + const agentTabsRoot = document.querySelector("[data-agent-tabs]"); + const agentTabs = Array.from(document.querySelectorAll("[data-agent-tab]")); + const agentPanels = Array.from(document.querySelectorAll("[data-agent-panel]")); + + function selectAgentTab(selectedId: string) { + for (const tab of agentTabs) { + const isSelected = tab.dataset.agentTab === selectedId; + tab.setAttribute("aria-selected", String(isSelected)); + tab.tabIndex = isSelected ? 0 : -1; + } + + for (const panel of agentPanels) { + panel.hidden = panel.dataset.agentPanel !== selectedId; + } + } + + if (agentTabsRoot && agentTabs.length > 0 && agentPanels.length > 0) { + selectAgentTab(agentTabs[0].dataset.agentTab ?? ""); + + for (const tab of agentTabs) { + tab.addEventListener("click", () => { + const selectedId = tab.dataset.agentTab; + if (selectedId) selectAgentTab(selectedId); + }); + + tab.addEventListener("keydown", (event: KeyboardEvent) => { + const currentIndex = agentTabs.indexOf(tab); + const lastIndex = agentTabs.length - 1; + const nextIndex = + event.key === "ArrowRight" + ? currentIndex + 1 + : event.key === "ArrowLeft" + ? currentIndex - 1 + : event.key === "Home" + ? 0 + : event.key === "End" + ? lastIndex + : currentIndex; + const wrappedIndex = nextIndex < 0 ? lastIndex : nextIndex > lastIndex ? 0 : nextIndex; + + if (wrappedIndex !== currentIndex) { + event.preventDefault(); + const nextTab = agentTabs[wrappedIndex]; + const selectedId = nextTab.dataset.agentTab; + nextTab.focus(); + if (selectedId) selectAgentTab(selectedId); + } + }); + } + } + function clamp(value: number, min: number, max: number) { return Math.min(max, Math.max(min, value)); } @@ -265,7 +416,7 @@ const installSteps = [ }); const revealTargets = document.querySelectorAll( - ".problem, .proof, .integrations, .install, .proof-item, .integration-strip li, .terminal li" + ".problem, .proof, .integrations, .install, .proof-item, .integration-pill, .agent-setup-panel, .terminal li" ); const revealObserver = new IntersectionObserver( (entries) => { diff --git a/apps/landing/src/styles/global.css b/apps/landing/src/styles/global.css index 7795a71..668c235 100644 --- a/apps/landing/src/styles/global.css +++ b/apps/landing/src/styles/global.css @@ -690,7 +690,7 @@ dd { .integrations, .install, .proof-item, -.integration-strip li, +.integration-pill, .terminal li { opacity: 0; transform: translateY(22px); @@ -701,7 +701,7 @@ dd { .integrations.is-visible, .install.is-visible, .proof-item.is-visible, -.integration-strip li.is-visible, +.integration-pill.is-visible, .terminal li.is-visible { opacity: 1; transform: translateY(0); @@ -909,15 +909,94 @@ dd { list-style: none; } -.integration-strip li { +.integration-pill { border: 1px solid var(--night-line); border-radius: 999px; padding: 10px 12px; color: var(--night-text); background: oklch(28% 0.018 100); + font: inherit; font-family: var(--font-mono); font-size: 0.78rem; font-weight: 700; + cursor: pointer; + transition: + background-color 180ms var(--ease-out), + border-color 180ms var(--ease-out), + color 180ms var(--ease-out), + transform 180ms var(--ease-out); +} + +.integration-pill:hover, +.integration-pill[aria-selected="true"] { + border-color: oklch(86% 0.08 35); + background: var(--parchment); + color: var(--night-ink); + transform: translateY(-1px); +} + +.agent-setup-card { + min-width: 0; + display: grid; + gap: 18px; +} + +.agent-setup-panels { + min-width: 0; + border: 1px solid var(--night-line); + border-radius: 20px; + background: oklch(25% 0.016 100); + overflow: hidden; +} + +.agent-setup-panel { + padding: 18px; +} + +.agent-setup-panel[hidden] { + display: none; +} + +.agent-setup-note { + margin: 0 0 14px; + color: var(--night-muted); +} + +.agent-setup-grid { + display: grid; + grid-template-columns: minmax(0, 0.82fr) minmax(0, 1.18fr); + gap: 12px; +} + +.agent-setup-label { + display: block; + margin-bottom: 8px; + color: oklch(86% 0.08 35); + font-family: var(--font-mono); + font-size: 0.68rem; + font-weight: 800; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.agent-setup-panel pre { + min-width: 0; + min-height: 100%; + margin: 0; + padding: 14px; + border: 1px solid var(--night-line); + border-radius: 14px; + background: var(--night-ink); + color: var(--night-text); + overflow-x: auto; +} + +.agent-setup-panel code { + font-family: var(--font-mono); + font-size: 0.78rem; + line-height: 1.5; + white-space: pre-wrap; + overflow-wrap: anywhere; } .install { @@ -1130,6 +1209,10 @@ dd { .integration-strip { justify-content: flex-start; } + + .agent-setup-grid { + grid-template-columns: 1fr; + } } @media (max-width: 720px) { @@ -1241,7 +1324,7 @@ dd { .integrations, .install, .proof-item, - .integration-strip li, + .integration-pill, .terminal li { opacity: 1 !important; transform: none !important; diff --git a/docs/plans/2026-05-27-agent-card-setup-tabs.md b/docs/plans/2026-05-27-agent-card-setup-tabs.md new file mode 100644 index 0000000..921055b --- /dev/null +++ b/docs/plans/2026-05-27-agent-card-setup-tabs.md @@ -0,0 +1,477 @@ +# Agent Card Setup Tabs Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Turn the landing page's existing agent pills into tabs that show each agent's install command and configuration snippet. + +**Architecture:** Keep the integrations card in `apps/landing/src/pages/index.astro`, move agent data into a structured `agentSetups` array, render pills as accessible tab buttons, and render matching setup panels in the same card. Add small scoped client-side JavaScript to switch tabs and CSS to preserve the current card aesthetic while making commands/configurations readable. + +**Tech Stack:** Astro 6, plain TypeScript in Astro script, CSS in `apps/landing/src/styles/global.css`, pnpm repo scripts. + +--- + +## File structure + +- Modify `apps/landing/src/pages/index.astro`: replace the current `integrations` string array with structured `agentSetups` data, render the tabbed pills and setup panels, and add scoped tab-switching JavaScript. +- Modify `apps/landing/src/styles/global.css`: style active/inactive agent pills, setup panels, command/configuration code blocks, and responsive behavior. +- No new runtime dependencies. + +## Setup data to use + +Use these exact agent labels and setup strings unless the implementation discovers a more current repo-local source: + +```ts +const agentSetups = [ + { + id: "claude-code", + name: "Claude Code", + installCommand: "npm install -g caplets", + configSnippet: `{ + "mcpServers": { + "caplets": { + "command": "caplets", + "args": ["serve"] + } + } +}`, + note: "Use the universal MCP server from Claude Code's MCP configuration.", + }, + { + id: "codex", + name: "Codex", + installCommand: "npm install -g caplets", + configSnippet: `[mcp_servers.caplets] +command = "caplets" +args = ["serve"]`, + note: "Register Caplets as a local MCP server in Codex config.", + }, + { + id: "opencode", + name: "OpenCode", + installCommand: "npm install -g @caplets/opencode", + configSnippet: `{ + "mcp": { + "caplets": { + "type": "local", + "command": ["caplets", "serve"] + } + } +}`, + note: "Use MCP config or the native @caplets/opencode integration where available.", + }, + { + id: "pi", + name: "Pi", + installCommand: "pi update && npm install -g @caplets/pi", + configSnippet: `{ + "caplets": { + "enabled": true, + "configPath": "~/.config/caplets/config.json" + } +}`, + note: "Use the native @caplets/pi integration with the same Caplets config file.", + }, + { + id: "mcp-client", + name: "Any MCP client", + installCommand: "npm install -g caplets", + configSnippet: `{ + "command": "caplets", + "args": ["serve"] +}`, + note: "Any MCP-compatible client can launch Caplets over stdio.", + }, +]; +``` + +## Task 1: Centralize agent setup data and render static panels + +**Files:** + +- Modify: `apps/landing/src/pages/index.astro` + +- [ ] **Step 1: Replace the current integrations array with structured data** + +In `apps/landing/src/pages/index.astro`, replace: + +```ts +const integrations = ["Claude Code", "Codex", "OpenCode", "Pi", "Any MCP client"]; +``` + +with the `agentSetups` array from the "Setup data to use" section, then add: + +```ts +const integrations = agentSetups.map((agent) => agent.name); +``` + +This preserves the hero facts while making the integrations section data-driven. + +- [ ] **Step 2: Replace the integrations strip markup** + +Replace the current integrations section body: + +```astro +
    + {integrations.map((name) =>
  • {name}
  • )} +
+``` + +with: + +```astro +
+
+ {agentSetups.map((agent, index) => ( + + ))} +
+
+ {agentSetups.map((agent, index) => ( + + ))} +
+
+``` + +- [ ] **Step 3: Run the landing typecheck and verify expected initial failure or pass** + +Run: + +```bash +pnpm --filter @caplets/landing typecheck +``` + +Expected: PASS. If it fails, fix only syntax/type issues in `index.astro` before continuing. + +- [ ] **Step 4: Commit static rendering** + +```bash +git add apps/landing/src/pages/index.astro +git commit -m "feat(landing): render agent setup panels" +``` + +## Task 2: Add tab behavior + +**Files:** + +- Modify: `apps/landing/src/pages/index.astro` + +- [ ] **Step 1: Add the tab switching script** + +Inside the existing ` diff --git a/apps/landing/src/styles/global.css b/apps/landing/src/styles/global.css index b68987f..381d4df 100644 --- a/apps/landing/src/styles/global.css +++ b/apps/landing/src/styles/global.css @@ -19,6 +19,14 @@ --success: oklch(50% 0.09 145); --danger: oklch(48% 0.13 31); --focus: oklch(62% 0.155 35 / 0.72); + --dark-accent: oklch(86% 0.08 35); + --dark-selected-panel: oklch(25% 0.016 100); + --dark-tool: oklch(28% 0.018 100); + --decorative-grid: oklch(78% 0.02 78 / 0.35); + --decorative-grid-muted: oklch(78% 0.02 78 / 0.33); + --decorative-grid-strong: oklch(78% 0.02 78 / 0.38); + --muted-tool: oklch(54% 0.035 110 / 0.72); + --success-glow: oklch(50% 0.09 145 / 0.12); --font-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; @@ -39,6 +47,9 @@ html { scroll-behavior: smooth; background: var(--linen); color: var(--charred-ink); + overflow-wrap: break-word; + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; } body { @@ -59,6 +70,7 @@ body { overflow-x: hidden; text-rendering: optimizeLegibility; font-kerning: normal; + padding-inline: env(safe-area-inset-left) env(safe-area-inset-right); } body::before { @@ -117,7 +129,7 @@ a { margin: 18px auto 0; min-height: 64px; display: grid; - grid-template-columns: minmax(170px, 1fr) auto minmax(170px, 1fr); + grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 12px; padding: 8px; @@ -140,6 +152,7 @@ a { } .brand-mark { + min-width: 0; display: inline-flex; align-items: center; gap: 10px; @@ -149,6 +162,13 @@ a { letter-spacing: -0.025em; } +.brand-mark span { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + .brand-mark img { width: 32px; height: 32px; @@ -158,6 +178,7 @@ a { } .top-nav { + min-width: 0; display: inline-flex; gap: 3px; padding: 5px; @@ -231,6 +252,19 @@ a { fill: currentColor; } +.npm-link svg { + width: 25px; + height: 25px; +} + +.npm-link svg rect { + fill: currentColor; +} + +.npm-link svg path { + fill: var(--paper); +} + main { display: grid; gap: clamp(74px, 10vw, 142px); @@ -249,6 +283,7 @@ main { } .hero-copy { + min-width: 0; max-width: 670px; animation: hero-copy-rise 780ms var(--ease-expo) 80ms both; } @@ -358,8 +393,9 @@ h1 { } .hero-facts div { + min-width: 0; display: grid; - grid-template-columns: 86px 1fr; + grid-template-columns: minmax(72px, max-content) minmax(0, 1fr); gap: 16px; align-items: baseline; padding-top: 10px; @@ -371,6 +407,7 @@ dt { text-transform: uppercase; } dd { + min-width: 0; margin: 0; color: var(--olive); font-size: 0.94rem; @@ -406,8 +443,8 @@ dd { position: absolute; inset: 56px 0 0; background: - linear-gradient(90deg, oklch(78% 0.02 78 / 0.35) 1px, transparent 1px), - linear-gradient(0deg, oklch(78% 0.02 78 / 0.33) 1px, transparent 1px); + linear-gradient(90deg, var(--decorative-grid) 1px, transparent 1px), + linear-gradient(0deg, var(--decorative-grid-muted) 1px, transparent 1px); background-size: 58px 58px; mask-image: linear-gradient(to bottom, transparent, black 12%, black 82%, transparent); z-index: -2; @@ -425,7 +462,7 @@ dd { background: repeating-radial-gradient( circle, transparent 0 28px, - oklch(78% 0.02 78 / 0.38) 29px 30px + var(--decorative-grid-strong) 29px 30px ); z-index: -1; } @@ -449,7 +486,7 @@ dd { height: 10px; border-radius: 999px; background: var(--success); - box-shadow: 0 0 0 5px oklch(50% 0.09 145 / 0.12); + box-shadow: 0 0 0 5px var(--success-glow); } .route-field { @@ -471,6 +508,11 @@ dd { .route-backbone { stroke-dasharray: 10 14; animation: route-drift 18s linear infinite; + animation-play-state: paused; +} + +.map-stage.is-route-active .route-backbone { + animation-play-state: running; } .route-two { @@ -620,6 +662,7 @@ dd { color: var(--olive); font-size: 0.9rem; line-height: 1.45; + overflow-wrap: anywhere; } .capability-card ul { @@ -632,6 +675,7 @@ dd { } .capability-card li { + max-width: 100%; border: 1px solid var(--ash); border-radius: 999px; background: var(--linen); @@ -640,6 +684,7 @@ dd { font-size: 0.68rem; font-weight: 650; color: var(--charred-ink); + overflow-wrap: anywhere; } .inspect-panel { @@ -659,14 +704,16 @@ dd { } .panel-label { - color: oklch(86% 0.08 35); + color: var(--dark-accent); text-transform: uppercase; } .inspect-panel code { + min-width: 0; justify-self: end; font-family: var(--font-mono); font-size: 0.88rem; + overflow-wrap: anywhere; } .inspect-panel p { @@ -685,26 +732,26 @@ dd { margin-inline: auto; } -.problem, -.proof, -.integrations, -.install, -.proof-item, -.integration-pill, -.agent-setup-panel, -.terminal li { +.motion-ready .problem, +.motion-ready .proof, +.motion-ready .integrations, +.motion-ready .install, +.motion-ready .proof-item, +.motion-ready .integration-pill, +.motion-ready .agent-setup-panel, +.motion-ready .terminal li { opacity: 0; transform: translateY(22px); } -.problem.is-visible, -.proof.is-visible, -.integrations.is-visible, -.install.is-visible, -.proof-item.is-visible, -.integration-pill.is-visible, -.agent-setup-panel.is-visible, -.terminal li.is-visible { +.motion-ready .problem.is-visible, +.motion-ready .proof.is-visible, +.motion-ready .integrations.is-visible, +.motion-ready .install.is-visible, +.motion-ready .proof-item.is-visible, +.motion-ready .integration-pill.is-visible, +.motion-ready .agent-setup-panel.is-visible, +.motion-ready .terminal li.is-visible { opacity: 1; transform: translateY(0); transition: @@ -744,8 +791,9 @@ dd { } .section-heading { + min-width: 0; display: grid; - grid-template-columns: minmax(180px, 0.4fr) minmax(0, 0.8fr); + grid-template-columns: minmax(0, 0.4fr) minmax(0, 0.8fr); gap: clamp(18px, 4vw, 56px); align-items: start; margin-bottom: 28px; @@ -769,7 +817,7 @@ dd { .comparison { display: grid; - grid-template-columns: 0.95fr 1.05fr; + grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr); gap: 18px; } @@ -785,6 +833,7 @@ dd { .dense-list, .ordered-flow { + min-width: 0; min-height: 390px; padding: clamp(20px, 3vw, 34px); } @@ -820,7 +869,7 @@ dd { border-radius: 999px; background: var(--linen); padding: 7px 8px; - color: oklch(54% 0.035 110 / 0.72); + color: var(--muted-tool); font-family: var(--font-mono); font-size: 0.72rem; } @@ -835,9 +884,10 @@ dd { } .ordered-flow li { + min-width: 0; counter-increment: flow; display: grid; - grid-template-columns: auto 1fr auto; + grid-template-columns: auto minmax(0, 1fr) minmax(0, auto); align-items: center; gap: 14px; border: 1px solid var(--ash); @@ -861,15 +911,17 @@ dd { } .ordered-flow span { + min-width: 0; font-family: var(--font-mono); color: var(--ember-deep); font-size: 0.82rem; font-weight: 700; + overflow-wrap: anywhere; } .proof-list { display: grid; - grid-template-columns: repeat(3, 1fr); + grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; } @@ -889,7 +941,7 @@ dd { .integrations { display: grid; - grid-template-columns: 0.8fr 1fr; + grid-template-columns: minmax(0, 0.8fr) minmax(0, 1fr); gap: clamp(20px, 4vw, 56px); align-items: end; padding: clamp(24px, 4vw, 46px); @@ -898,7 +950,7 @@ dd { } .integrations .kicker { - color: oklch(86% 0.08 35); + color: var(--dark-accent); } .integration-strip { @@ -916,7 +968,7 @@ dd { border-radius: 999px; padding: 10px 12px; color: var(--night-text); - background: oklch(28% 0.018 100); + background: var(--dark-tool); font: inherit; font-family: var(--font-mono); font-size: 0.78rem; @@ -925,18 +977,23 @@ dd { transition: background-color 180ms var(--ease-out), border-color 180ms var(--ease-out), + box-shadow 180ms var(--ease-out), color 180ms var(--ease-out), transform 180ms var(--ease-out); } .integration-pill:hover, .integration-pill[aria-selected="true"] { - border-color: oklch(86% 0.08 35); + border-color: var(--dark-accent); background: var(--parchment); color: var(--night-ink); transform: translateY(-1px); } +.integration-pill[aria-selected="true"] { + box-shadow: inset 0 0 0 2px var(--night-ink); +} + .agent-setup-card { min-width: 0; display: grid; @@ -945,14 +1002,17 @@ dd { .agent-setup-panels { min-width: 0; + block-size: clamp(260px, 24vw, 320px); border: 1px solid var(--night-line); border-radius: 20px; - background: oklch(25% 0.016 100); + background: var(--dark-selected-panel); overflow: hidden; } .agent-setup-panel { + block-size: 100%; padding: 18px; + overflow: auto; } .agent-setup-panel[hidden] { @@ -973,7 +1033,7 @@ dd { .agent-setup-label { display: block; margin-bottom: 8px; - color: oklch(86% 0.08 35); + color: var(--dark-accent); font-family: var(--font-mono); font-size: 0.68rem; font-weight: 800; @@ -1003,7 +1063,7 @@ dd { .install { display: grid; - grid-template-columns: minmax(0, 0.8fr) minmax(360px, 1fr); + grid-template-columns: minmax(0, 0.8fr) minmax(min(100%, 360px), 1fr); gap: clamp(22px, 4vw, 54px); align-items: center; padding: clamp(22px, 4vw, 42px); @@ -1015,6 +1075,7 @@ dd { } .terminal { + min-width: 0; overflow: hidden; border: 1px solid var(--night-line); border-radius: 20px; @@ -1052,9 +1113,10 @@ dd { } .terminal li { + min-width: 0; counter-increment: term; display: grid; - grid-template-columns: 46px 1fr; + grid-template-columns: 46px minmax(0, 1fr); gap: 12px; padding: 10px 18px; font-family: var(--font-mono); @@ -1212,6 +1274,17 @@ dd { justify-content: flex-start; } + .agent-setup-panels { + block-size: auto; + min-block-size: 260px; + overflow: visible; + } + + .agent-setup-panel { + block-size: auto; + overflow: visible; + } + .agent-setup-grid { grid-template-columns: 1fr; } From 2acfcef87e05ac0706cecd95c2af9549e321a9e7 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 28 May 2026 05:26:29 -0400 Subject: [PATCH 08/21] fix(landing): align plugin install commands --- apps/landing/src/pages/index.astro | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/landing/src/pages/index.astro b/apps/landing/src/pages/index.astro index ca667a5..8548d93 100644 --- a/apps/landing/src/pages/index.astro +++ b/apps/landing/src/pages/index.astro @@ -27,8 +27,7 @@ const agentSetups = [ { id: "claude-code", name: "Claude Code", - installCommand: `npm install -g caplets -claude plugin marketplace add spiritledsoftware/caplets + installCommand: `claude plugin marketplace add spiritledsoftware/caplets claude plugin install caplets@caplets`, configSnippet: `{ "mcpServers": { @@ -43,8 +42,7 @@ claude plugin install caplets@caplets`, { id: "codex", name: "Codex", - installCommand: `npm install -g caplets -codex plugin marketplace add spiritledsoftware/caplets`, + installCommand: "codex plugin marketplace add spiritledsoftware/caplets", configSnippet: `{ "mcpServers": { "caplets": { @@ -53,7 +51,7 @@ codex plugin marketplace add spiritledsoftware/caplets`, } } }`, - note: "After adding the marketplace, install the caplets plugin from Codex plugins; the bundled MCP config runs caplets serve.", + note: "After adding the marketplace, install caplets from Codex plugins; the bundled MCP config runs caplets serve.", }, { id: "opencode", From d2b942ad60f2cac763448c0ea829ef98f4cfe80d Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 28 May 2026 05:30:08 -0400 Subject: [PATCH 09/21] fix(landing): remove unused npm icon styles --- apps/landing/src/styles/global.css | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/apps/landing/src/styles/global.css b/apps/landing/src/styles/global.css index 381d4df..39c6d77 100644 --- a/apps/landing/src/styles/global.css +++ b/apps/landing/src/styles/global.css @@ -252,19 +252,6 @@ a { fill: currentColor; } -.npm-link svg { - width: 25px; - height: 25px; -} - -.npm-link svg rect { - fill: currentColor; -} - -.npm-link svg path { - fill: var(--paper); -} - main { display: grid; gap: clamp(74px, 10vw, 142px); From 7218e078c8bba34d68aa3eba516d6564b8395da0 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 28 May 2026 05:37:43 -0400 Subject: [PATCH 10/21] fix(landing): polish audit leftovers --- apps/landing/src/pages/index.astro | 28 ++++++++++++++++++++++------ apps/landing/src/styles/global.css | 24 ++++++++++++++++-------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/apps/landing/src/pages/index.astro b/apps/landing/src/pages/index.astro index 8548d93..4a13314 100644 --- a/apps/landing/src/pages/index.astro +++ b/apps/landing/src/pages/index.astro @@ -393,6 +393,13 @@ const installSteps = [ } let heroProgressFrame = 0; + let mapStageRect = mapStage?.getBoundingClientRect(); + let pointerFrame = 0; + let pendingPointer: PointerEvent | undefined; + + function refreshMapStageRect() { + mapStageRect = mapStage?.getBoundingClientRect(); + } function updateHeroProgress() { if (!hero || !mapStage || !canAnimate) return; @@ -417,13 +424,22 @@ const installSteps = [ if (canAnimate && hero && mapStage) { updateHeroProgress(); window.addEventListener("scroll", scheduleHeroProgressUpdate, { passive: true }); - window.addEventListener("resize", scheduleHeroProgressUpdate); + window.addEventListener("resize", () => { + refreshMapStageRect(); + scheduleHeroProgressUpdate(); + }); + mapStage.addEventListener("pointerenter", refreshMapStageRect); mapStage.addEventListener("pointermove", (event: PointerEvent) => { - const rect = mapStage.getBoundingClientRect(); - const x = clamp((event.clientX - rect.left) / rect.width, 0, 1); - const y = clamp((event.clientY - rect.top) / rect.height, 0, 1); - mapStage.style.setProperty("--pointer-x", x.toFixed(3)); - mapStage.style.setProperty("--pointer-y", y.toFixed(3)); + pendingPointer = event; + if (pointerFrame) return; + pointerFrame = window.requestAnimationFrame(() => { + pointerFrame = 0; + if (!pendingPointer || !mapStageRect) return; + const x = clamp((pendingPointer.clientX - mapStageRect.left) / mapStageRect.width, 0, 1); + const y = clamp((pendingPointer.clientY - mapStageRect.top) / mapStageRect.height, 0, 1); + mapStage.style.setProperty("--pointer-x", x.toFixed(3)); + mapStage.style.setProperty("--pointer-y", y.toFixed(3)); + }); }); const revealTargets = document.querySelectorAll( diff --git a/apps/landing/src/styles/global.css b/apps/landing/src/styles/global.css index 39c6d77..19532b9 100644 --- a/apps/landing/src/styles/global.css +++ b/apps/landing/src/styles/global.css @@ -27,6 +27,14 @@ --decorative-grid-strong: oklch(78% 0.02 78 / 0.38); --muted-tool: oklch(54% 0.035 110 / 0.72); --success-glow: oklch(50% 0.09 145 / 0.12); + --page-warmth: oklch(91% 0.05 42 / 0.8); + --page-grid-line: oklch(88% 0.018 82 / 0.26); + --page-grid-line-muted: oklch(88% 0.018 82 / 0.24); + --map-pointer-glow: oklch(72% 0.14 35 / 0.26); + --map-corner-glow: oklch(70% 0.12 35 / 0.16); + --route-glow: oklch(62% 0.155 35 / 0.36); + --terminal-success: oklch(72% 0.12 145); + --terminal-step: oklch(82% 0.08 35); --font-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; @@ -59,9 +67,9 @@ body { font-size: 1rem; line-height: 1.55; background: - radial-gradient(circle at 16% 8%, oklch(91% 0.05 42 / 0.8), transparent 30rem), - linear-gradient(90deg, oklch(88% 0.018 82 / 0.26) 1px, transparent 1px), - linear-gradient(0deg, oklch(88% 0.018 82 / 0.24) 1px, transparent 1px), var(--linen); + radial-gradient(circle at 16% 8%, var(--page-warmth), transparent 30rem), + linear-gradient(90deg, var(--page-grid-line) 1px, transparent 1px), + linear-gradient(0deg, var(--page-grid-line-muted) 1px, transparent 1px), var(--linen); background-size: auto, 44px 44px, @@ -409,10 +417,10 @@ dd { background: radial-gradient( circle at calc(var(--pointer-x) * 100%) calc(var(--pointer-y) * 100%), - oklch(72% 0.14 35 / 0.26), + var(--map-pointer-glow), transparent 15rem ), - radial-gradient(circle at 75% 18%, oklch(70% 0.12 35 / 0.16), transparent 17rem), + radial-gradient(circle at 75% 18%, var(--map-corner-glow), transparent 17rem), linear-gradient(135deg, var(--paper), var(--linen)); overflow: hidden; transform: perspective(1200px) rotateX(calc((var(--pointer-y) - 0.5) * -3deg)) @@ -518,7 +526,7 @@ dd { stroke-dasharray: 1; stroke-dashoffset: calc(1 - var(--route-resolve)); opacity: calc(0.2 + var(--route-resolve) * 0.78); - filter: drop-shadow(0 0 10px oklch(62% 0.155 35 / 0.36)); + filter: drop-shadow(0 0 10px var(--route-glow)); transition: stroke-dashoffset 80ms linear, opacity 160ms var(--ease-out); @@ -1089,7 +1097,7 @@ dd { background: var(--night-muted); } .terminal-bar span:nth-child(3) { - background: oklch(72% 0.12 145); + background: var(--terminal-success); } .terminal ol { @@ -1112,7 +1120,7 @@ dd { .terminal li::before { content: counter(term, decimal-leading-zero); - color: oklch(82% 0.08 35); + color: var(--terminal-step); } .terminal code { From 89c6ee42d6ea1b606d3a64f6b136542f4cfc6f42 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 28 May 2026 05:45:01 -0400 Subject: [PATCH 11/21] fix(landing): polish --- .env.example | 5 + .github/workflows/deploy.yml | 71 ++++++++++++ .github/workflows/pr-preview.yml | 45 ++++++++ apps/landing/.vscode/extensions.json | 4 - apps/landing/.vscode/launch.json | 11 -- apps/landing/src/pages/index.astro | 5 +- package.json | 4 +- packages/core/package.json | 2 +- pnpm-lock.yaml | 164 ++++++++++++++++++++------- 9 files changed, 248 insertions(+), 63 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/pr-preview.yml delete mode 100644 apps/landing/.vscode/extensions.json delete mode 100644 apps/landing/.vscode/launch.json diff --git a/.env.example b/.env.example index b5eb8ee..0246cf9 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,6 @@ +ALCHEMY_PASSWORD= ALCHEMY_STATE_TOKEN= + +CLOUDFLARE_API_TOKEN= +CLOUDFLARE_ACCOUNT_ID= +CLOUDFLARE_EMAIL= diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..720af36 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,71 @@ +name: PR Preview + +on: + release: + types: [published] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: deploy-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + deploy: + name: Verify + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Check apps/ changes + id: apps-changes + run: | + if [[ "${{ github.event_name }}" == "release" ]]; then + current_tag="${{ github.event.release.tag_name }}" + previous_tag="$(git describe --tags --abbrev=0 "${current_tag}^" 2>/dev/null || true)" + + if [[ -n "$previous_tag" ]]; then + changed_files="$(git diff --name-only "$previous_tag" "$current_tag")" + else + changed_files="$(git diff-tree --no-commit-id --name-only -r "$current_tag")" + fi + else + changed_files="$(git diff-tree --no-commit-id --name-only -r HEAD)" + fi + + if grep -q '^apps/' <<< "$changed_files"; then + echo "changed=true" >> "$GITHUB_OUTPUT" + else + echo "changed=false" >> "$GITHUB_OUTPUT" + fi + + - name: Setup pnpm + if: steps.apps-changes.outputs.changed == 'true' + uses: pnpm/action-setup@v6 + + - name: Setup Node + if: steps.apps-changes.outputs.changed == 'true' + uses: actions/setup-node@v6 + with: + node-version: 24 + cache: pnpm + + - name: Install dependencies + if: steps.apps-changes.outputs.changed == 'true' + run: pnpm install --frozen-lockfile + + - name: Run quality gates + if: steps.apps-changes.outputs.changed == 'true' + run: pnpm run alchemy:deploy + env: + ALCHEMY_STAGE: prod + ALCHEMY_PASSWORD: ${{ secrets.ALCHEMY_PASSWORD }} + ALCHEMY_STATE_TOKEN: ${{ secrets.ALCHEMY_STATE_TOKEN }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + CLOUDFLARE_EMAIL: ${{ secrets.CLOUDFLARE_EMAIL }} diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml new file mode 100644 index 0000000..7e78bae --- /dev/null +++ b/.github/workflows/pr-preview.yml @@ -0,0 +1,45 @@ +name: PR Preview + +on: + pull_request: + branches: + - main + paths: + - "apps/**" + +permissions: + contents: read + pull-requests: write + +concurrency: + group: pr-preview-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + deploy: + name: Verify + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Setup pnpm + uses: pnpm/action-setup@v6 + + - name: Setup Node + uses: actions/setup-node@v6 + with: + node-version: 24 + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run quality gates + run: pnpm run alchemy:deploy + env: + ALCHEMY_PASSWORD: ${{ secrets.ALCHEMY_PASSWORD }} + ALCHEMY_STATE_TOKEN: ${{ secrets.ALCHEMY_STATE_TOKEN }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + CLOUDFLARE_EMAIL: ${{ secrets.CLOUDFLARE_EMAIL }} diff --git a/apps/landing/.vscode/extensions.json b/apps/landing/.vscode/extensions.json deleted file mode 100644 index 22a1505..0000000 --- a/apps/landing/.vscode/extensions.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "recommendations": ["astro-build.astro-vscode"], - "unwantedRecommendations": [] -} diff --git a/apps/landing/.vscode/launch.json b/apps/landing/.vscode/launch.json deleted file mode 100644 index d642209..0000000 --- a/apps/landing/.vscode/launch.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "command": "./node_modules/.bin/astro dev", - "name": "Development server", - "request": "launch", - "type": "node-terminal" - } - ] -} diff --git a/apps/landing/src/pages/index.astro b/apps/landing/src/pages/index.astro index 4a13314..4d07d4f 100644 --- a/apps/landing/src/pages/index.astro +++ b/apps/landing/src/pages/index.astro @@ -56,7 +56,7 @@ claude plugin install caplets@caplets`, { id: "opencode", name: "OpenCode", - installCommand: "npm install -g @caplets/opencode", + installCommand: "npm install -g caplets", configSnippet: `{ "plugin": ["@caplets/opencode"] }`, @@ -65,7 +65,8 @@ claude plugin install caplets@caplets`, { id: "pi", name: "Pi", - installCommand: "pi install npm:@caplets/pi", + installCommand: `npm install -g caplets +pi install npm:@caplets/pi`, configSnippet: `{ "packages": ["npm:@caplets/pi"] }`, diff --git a/package.json b/package.json index 8345cf1..4056ac0 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ }, "devDependencies": { "@changesets/cli": "^2.31.0", - "@cloudflare/workers-types": "^4.20260526.1", + "@cloudflare/workers-types": "^4.20260527.1", "@types/node": "^25.9.1", "@typescript/native-preview": "7.0.0-dev.20260527.1", "alchemy": "0.93.9", @@ -40,7 +40,7 @@ "oxlint": "^1.67.0", "rolldown": "^1.0.3", "tsx": "^4.22.3", - "turbo": "^2.9.14", + "turbo": "^2.9.15", "typescript": "^6.0.3", "vitest": "^4.1.7" }, diff --git a/packages/core/package.json b/packages/core/package.json index e7340ff..a4e699f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -66,7 +66,7 @@ }, "devDependencies": { "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260527.1", + "@typescript/native-preview": "7.0.0-dev.20260527.2", "rolldown": "^1.0.3", "typescript": "^6.0.3", "vitest": "^4.1.7" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 34884ab..8c1932c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^2.31.0 version: 2.31.0(@types/node@25.9.1) '@cloudflare/workers-types': - specifier: ^4.20260526.1 - version: 4.20260526.1 + specifier: ^4.20260527.1 + version: 4.20260527.1 '@types/node': specifier: ^25.9.1 version: 25.9.1 @@ -39,8 +39,8 @@ importers: specifier: ^4.22.3 version: 4.22.3 turbo: - specifier: ^2.9.14 - version: 2.9.14 + specifier: ^2.9.15 + version: 2.9.15 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -156,8 +156,8 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260527.1 - version: 7.0.0-dev.20260527.1 + specifier: 7.0.0-dev.20260527.2 + version: 7.0.0-dev.20260527.2 rolldown: specifier: ^1.0.3 version: 1.0.3 @@ -624,8 +624,8 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20260526.1': - resolution: {integrity: sha512-pQZBjD7p6C5R1ZPkSywA2yiZnL/LVfqdPKLQLdbEItro4ekmMuGXQv72vHkHIT3GeZmEgZktMA0JoWn2fBKmXw==} + '@cloudflare/workers-types@4.20260527.1': + resolution: {integrity: sha512-GK+C05N4fGptp1uG+pbjC/7Udonz8EhMEYvYFnVKdLLnEGS9nsmVOFi/RLQr7tq9l/0UEzcWjudzeY2ssuqyIA==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -2460,33 +2460,33 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - '@turbo/darwin-64@2.9.14': - resolution: {integrity: sha512-t7QiPflaEyBE4oayeZtSmu4mEfjgIrcNlNNl1z1dmIVPqEdtA7+CfTf8d7KXsOGPh6aNgWjKxyvQg9uGfDQF+A==} + '@turbo/darwin-64@2.9.15': + resolution: {integrity: sha512-nnDo9R1Df+s2x6jxlERtbg7xRpuicf8p4J2krcnjeaMBt3q9V41pGXa4t9YM2Y4ozozsVJ+CH405CJUrWIQK4Q==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.9.14': - resolution: {integrity: sha512-d23147mC9BsCPA9mJ0h/ubcpbRgcJBXbcG3+Vq7YLhjz3IXuvQsJ1UXH8f4MD76ZjJ4m/E4aRdJV+MW88CDfbw==} + '@turbo/darwin-arm64@2.9.15': + resolution: {integrity: sha512-fDSx56oqoFuS+yUQw7hqjQTkjrSLdMcplhuLC8HcSkWC6YrpwEmUUYsPYHPxy4ALvLxnmPQuk6XoSD8tdkjP+g==} cpu: [arm64] os: [darwin] - '@turbo/linux-64@2.9.14': - resolution: {integrity: sha512-P3ZKB5tuUDdDQWuAsACGUR1qv9W7BNWxdxqVJ0kZNuNNPRaVYTPPikLcp79+GiEcW3npsR+KyP38lnQiBc5aSA==} + '@turbo/linux-64@2.9.15': + resolution: {integrity: sha512-/bmxn+x/xE+oh0VzEXt/zf2zsORAYZPrL3db5/VrXzYt0Z4wxcvffwJBGlSfla2smfS1BLGBiyWldJlWDXJVXA==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.9.14': - resolution: {integrity: sha512-ZRTlzcUMrrPv9ZuDzRF9n60Ym13bKeG9jDB8WjxyLhWNzV+AJQN+zdpIk3NJYf2zQsGUm1mNar2P0elRzLw25g==} + '@turbo/linux-arm64@2.9.15': + resolution: {integrity: sha512-cbOaDe1ijz5As+mimOOHgmRMolZZZO7miNBHHp5xdiYMm2Q/Dwu1JVLx/Kw4s7xjocG/oEoHrpHrxpEAIEfNiw==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.9.14': - resolution: {integrity: sha512-exanwN6sIduZwykYeiTQj8kCmOhazP5WOz3bvXMcYtjhL6Z3iRWLewKrXCBq0bqwSP3iBMb/AerRCnHI4lx46A==} + '@turbo/windows-64@2.9.15': + resolution: {integrity: sha512-/Fzm7afui7uK7dFBwrTXKuDhBBTiHk5I+hMVAPMR7cqQyDo2norCNUsN9PdNuYcmzYbhSOxzz498wQYvSAz29w==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.9.14': - resolution: {integrity: sha512-fVdCsnmYoKICsycbWuuGp6Jvi51/3G/UluFWuAUCvR8PIW5IJkAk5BM9UF8PSm0Q2IphWHFZjYEgjHsh3B9y/g==} + '@turbo/windows-arm64@2.9.15': + resolution: {integrity: sha512-fOHEsLcqVdFXLw2ApWv4gxwfHzkUnpo9rHGml+9+dyHj148m/Bc+556kEvb5+4u6prI1LMd8zEZE2HcO6Jn2VQ==} cpu: [arm64] os: [win32] @@ -2541,47 +2541,94 @@ packages: cpu: [arm64] os: [darwin] + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260527.2': + resolution: {integrity: sha512-3LqSu4DlxkEfeC/Z/29QMCJn5jjkDtXI7LYuxfmjdmAatS6umDKqm8J17fnP/7fyrZUMBTIYRwSDpChGV3G1ew==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-r6GXrTdalXZu1/b5goMpAe+efZvOfwdE45gl8Tti3fckP9icK3xdiN+VnNi0RL2/c2L86RyN8nGxihaCHGCKbw==} engines: {node: '>=16.20.0'} cpu: [x64] os: [darwin] + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.2': + resolution: {integrity: sha512-H4+sxE9qaBbLF83wMdWE0FsgfK0Pom+/O+/oxqyGzhVkDJlNt3vfpgQZMit48/Gm44AacGfBggJ9Dhbi3aeSFw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-QJAFyPJgJqJVLbVPHl5xL7FCn3HNPLdpEm8l7KBgiYpltLhU1p/LJ3iN0XpFRAhq9ojWbZebo8t/h8MX35QjTQ==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [linux] + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.2': + resolution: {integrity: sha512-BGUDMjC2Z3TTdZRkGGwhBLelkP5UYgO2rbep8aF4dS3fu7T5lFPPrnfS6EgqJgie+cF5Fsev7xEq8wWyBDM+lg==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + '@typescript/native-preview-linux-arm@7.0.0-dev.20260527.1': resolution: {integrity: sha512-BlfQBatMkZHi3o+atxoUW0czGJNjo9cpO1BoQeB3gxZ7D/cDZHYHmKFSSRx8UxMktwP5k5lPxi0wgA3Ic2mQyQ==} engines: {node: '>=16.20.0'} cpu: [arm] os: [linux] + '@typescript/native-preview-linux-arm@7.0.0-dev.20260527.2': + resolution: {integrity: sha512-6I9Cv9ozwfS9zB9vRQDPIYseLX3artEO9jl3yVgLj4ishwlSF4cWAbIsjl5IztPaEgHv8coej/6tX1D0uaBzXg==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + '@typescript/native-preview-linux-x64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-UFB7ZdK2/vIIi62nfn3JhyGV7qR/qXjKPQaPVXwzCvaPieTZcsNsALjKU0W5WHThyi+5p3U7O3dGE7n6P4q4Yw==} engines: {node: '>=16.20.0'} cpu: [x64] os: [linux] + '@typescript/native-preview-linux-x64@7.0.0-dev.20260527.2': + resolution: {integrity: sha512-vpazOu+ozlxBo8U57YJMzsOPuxAV8H7fu36KJ8ea8At/D8pdGmOAy5TuB+9OBQV9JDe0OXJMy2kmbhOpmkTAmA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-rp/q9+9H77JQvepC/UpDP8CdeTGSGyhp9BVbmFwqUV2NhMHPldfys3ihY7OQdoVBgWIKQyxEHB+FTr8Z7kre1Q==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [win32] + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.2': + resolution: {integrity: sha512-DBFnFE3V6AITkPO1K1VxXf3yEZKjU2FwtXlNwRqhzDu0rrL2SsJHOSrBDX+OacTxQFzZMxFcpiuhV8jHZALPEg==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + '@typescript/native-preview-win32-x64@7.0.0-dev.20260527.1': resolution: {integrity: sha512-864Pq4qoDcacUJhs2/kQplyfwNO0APUmx1k8qUaJt2P9ZGF0Pu++afJi7OagImHMiEQcmigjmZPuOodOk5YmqQ==} engines: {node: '>=16.20.0'} cpu: [x64] os: [win32] + '@typescript/native-preview-win32-x64@7.0.0-dev.20260527.2': + resolution: {integrity: sha512-1tBlErMvQgcMqqYwsx4tytupcjCJcOUXD3vBn1Wb/kAvus1FzWQAFE0fcKBvLfcqLQfTiiEwKKEtbLjGmakqqg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + '@typescript/native-preview@7.0.0-dev.20260527.1': resolution: {integrity: sha512-j81qKiwCPgMEjtk8uDLP+TDW60l6mugoJ7SNzfHWv1PJ6bUjIAHuag4P1jSLm1IpKuMuB3TTi4f61n7TJi8Jog==} engines: {node: '>=16.20.0'} hasBin: true + '@typescript/native-preview@7.0.0-dev.20260527.2': + resolution: {integrity: sha512-piqkDwikVeizCFqA1lcwI5F4wOAtBdxuliWe77ApBNRyBPPvfCJB+u/HYi9/8t5nd0sWvFs6/qt/AzJ1CCoykQ==} + engines: {node: '>=16.20.0'} + hasBin: true + '@ungap/structured-clone@1.3.1': resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} @@ -4751,8 +4798,8 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo@2.9.14: - resolution: {integrity: sha512-BQqXRr4UoWI3UPFrtznCLykYHxwxWh53iCB57x092jPMjIlW1wnm3N895g5irpiXmnxUhREBB0n6+y8BHhs4nw==} + turbo@2.9.15: + resolution: {integrity: sha512-VpKvD9Z0Hu/xrGUAYX1wnhfpqv835wIwGqeKfulvBPTOcDap0E3nFwyzCAVV85fB1sBcBDEfTP+7FSW7GzwWSQ==} hasBin: true type-is@2.1.0: @@ -5997,7 +6044,7 @@ snapshots: '@cloudflare/workerd-windows-64@1.20260526.1': optional: true - '@cloudflare/workers-types@4.20260526.1': {} + '@cloudflare/workers-types@4.20260527.1': {} '@cspotcode/source-map-support@0.8.1': dependencies: @@ -7265,22 +7312,22 @@ snapshots: tailwindcss: 4.3.0 vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0) - '@turbo/darwin-64@2.9.14': + '@turbo/darwin-64@2.9.15': optional: true - '@turbo/darwin-arm64@2.9.14': + '@turbo/darwin-arm64@2.9.15': optional: true - '@turbo/linux-64@2.9.14': + '@turbo/linux-64@2.9.15': optional: true - '@turbo/linux-arm64@2.9.14': + '@turbo/linux-arm64@2.9.15': optional: true - '@turbo/windows-64@2.9.14': + '@turbo/windows-64@2.9.15': optional: true - '@turbo/windows-arm64@2.9.14': + '@turbo/windows-arm64@2.9.15': optional: true '@tybys/wasm-util@0.10.2': @@ -7332,24 +7379,45 @@ snapshots: '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260527.1': optional: true + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260527.2': + optional: true + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.1': optional: true + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.2': + optional: true + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.1': optional: true + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.2': + optional: true + '@typescript/native-preview-linux-arm@7.0.0-dev.20260527.1': optional: true + '@typescript/native-preview-linux-arm@7.0.0-dev.20260527.2': + optional: true + '@typescript/native-preview-linux-x64@7.0.0-dev.20260527.1': optional: true + '@typescript/native-preview-linux-x64@7.0.0-dev.20260527.2': + optional: true + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.1': optional: true + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.2': + optional: true + '@typescript/native-preview-win32-x64@7.0.0-dev.20260527.1': optional: true + '@typescript/native-preview-win32-x64@7.0.0-dev.20260527.2': + optional: true + '@typescript/native-preview@7.0.0-dev.20260527.1': optionalDependencies: '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260527.1 @@ -7360,6 +7428,16 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260527.1 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260527.1 + '@typescript/native-preview@7.0.0-dev.20260527.2': + optionalDependencies: + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260527.2 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260527.2 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260527.2 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260527.2 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260527.2 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260527.2 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260527.2 + '@ungap/structured-clone@1.3.1': {} '@vitest/expect@4.1.7': @@ -7479,13 +7557,13 @@ snapshots: dependencies: '@aws-sdk/credential-providers': 3.1054.0 '@cloudflare/unenv-preset': 2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260526.1) - '@cloudflare/workers-types': 4.20260526.1 + '@cloudflare/workers-types': 4.20260527.1 '@iarna/toml': 2.2.5 '@octokit/rest': 21.1.1 '@smithy/node-config-provider': 4.4.4 '@smithy/types': 4.14.2 aws4fetch: 1.0.20 - drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260526.1) + drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260527.1) env-paths: 3.0.0 esbuild: 0.25.12 execa: 9.6.1 @@ -7504,7 +7582,7 @@ snapshots: proper-lockfile: 4.1.2 signal-exit: 4.1.0 unenv: 2.0.0-rc.21 - wrangler: 4.95.0(@cloudflare/workers-types@4.20260526.1) + wrangler: 4.95.0(@cloudflare/workers-types@4.20260527.1) ws: 8.21.0 yaml: 2.9.0 optionalDependencies: @@ -7906,9 +7984,9 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 - drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260526.1): + drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260527.1): optionalDependencies: - '@cloudflare/workers-types': 4.20260526.1 + '@cloudflare/workers-types': 4.20260527.1 dset@3.1.4: {} @@ -9935,14 +10013,14 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - turbo@2.9.14: + turbo@2.9.15: optionalDependencies: - '@turbo/darwin-64': 2.9.14 - '@turbo/darwin-arm64': 2.9.14 - '@turbo/linux-64': 2.9.14 - '@turbo/linux-arm64': 2.9.14 - '@turbo/windows-64': 2.9.14 - '@turbo/windows-arm64': 2.9.14 + '@turbo/darwin-64': 2.9.15 + '@turbo/darwin-arm64': 2.9.15 + '@turbo/linux-64': 2.9.15 + '@turbo/linux-arm64': 2.9.15 + '@turbo/windows-64': 2.9.15 + '@turbo/windows-arm64': 2.9.15 type-is@2.1.0: dependencies: @@ -10264,7 +10342,7 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20260526.1 '@cloudflare/workerd-windows-64': 1.20260526.1 - wrangler@4.95.0(@cloudflare/workers-types@4.20260526.1): + wrangler@4.95.0(@cloudflare/workers-types@4.20260527.1): dependencies: '@cloudflare/kv-asset-handler': 0.5.0 '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1) @@ -10276,7 +10354,7 @@ snapshots: unenv: 2.0.0-rc.24 workerd: 1.20260526.1 optionalDependencies: - '@cloudflare/workers-types': 4.20260526.1 + '@cloudflare/workers-types': 4.20260527.1 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil From b76692160401fc22410f21e4b396edb2a836e692 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 28 May 2026 05:46:23 -0400 Subject: [PATCH 12/21] docs(agents): byterover context --- .../remote_control/extracted_facts.md | 65 +--------- .../lossless_markdown_handling.md | 11 +- ...itecture-enforced-by-server-owned-state.md | 23 ++++ .../extracted/curated/ai_slop_detection.md | 20 +++ .../extracted/curated/browser_automation.md | 20 +++ .../extracted/curated/browser_detection.md | 20 +++ .../curated/browser_visualization.md | 21 +++ .../extracted/curated/build_verification.md | 24 ++++ .../curated/claude_code_install_command.md | 24 ++++ .../extracted/curated/cli_scan.md | 22 ++++ .../curated/codex_install_command.md | 24 ++++ .../extracted/curated/cognitive_load.md | 20 +++ .../extracted/curated/curated_extraction.md | 37 ++++++ .../extracted/curated/curated_facts.md | 120 ++++++++++++++++++ .../extracted/curated/curated_knowledge.md | 34 +++++ .../extracted/curated/heuristics_scoring.md | 20 +++ .../extracted/curated/impeccable_tool.md | 20 +++ .../extracted/curated/interface.md | 20 +++ .../extracted/curated/interface_scores.md | 20 +++ .brv/context-tree/extracted/curated/issues.md | 20 +++ .../extracted/curated/option_count.md | 20 +++ .../extracted/curated/persona_generation.md | 20 +++ .../extracted/curated/score_meaning.md | 20 +++ .../extracted/curated/sub_agents.md | 20 +++ .../extracted/curated/tab_labeling.md | 20 +++ .../extracted/curated/tab_usage.md | 20 +++ .brv/context-tree/extracted/curated/user.md | 21 +++ ...rarchy_color_usage_information_overload.md | 20 +++ .../extracted/curated/visual_overlays.md | 20 +++ .../codex_and_claude_code_install_commands.md | 24 ++++ .../curated_context_extraction.md | 38 ++++++ .../curated_extraction/curated_extraction.md | 44 +++++++ .../extracted/facts/accessibility.md | 20 +++ .../facts/aesthetic_and_minimalist_design.md | 20 +++ .../extracted/facts/agent_setup_panel.md | 24 ++++ .../extracted/facts/agentsetups.md | 24 ++++ .../facts/agentsetups_data_centralization.md | 20 +++ .brv/context-tree/extracted/facts/average.md | 20 +++ .../extracted/facts/average_score.md | 20 +++ .../facts/cognitive_load_failures.md | 20 +++ .../facts/commits_0e56e8f_86f9679.md | 24 ++++ .../facts/consistency_and_standards.md | 20 +++ .../facts/css_reveal_rules_update.md | 20 +++ .../facts/current_content_audience.md | 20 +++ .../dark_integration_and_terminal_blocks.md | 20 +++ .../extracted/facts/default_panel.md | 24 ++++ .../extracted/facts/error_prevention.md | 20 +++ .../facts/extracted_facts_from_context.md | 46 +++++++ .../facts/flexibility_and_efficiency.md | 20 +++ .../header_icon_only_npm_github_links.md | 20 +++ .../extracted/facts/help_and_documentation.md | 20 +++ .../help_users_recognize_diagnose_recover.md | 20 +++ .../extracted/facts/hero_headline.md | 20 +++ .../extracted/facts/hero_metrics.md | 20 +++ .../extracted/facts/install_command.md | 21 +++ .../facts/install_command_rendering.md | 20 +++ .../facts/integrations_card_structure.md | 20 +++ .../extracted/facts/load_failures.md | 20 +++ .../match_between_system_and_real_world.md | 20 +++ .../extracted/facts/newer_users.md | 20 +++ .brv/context-tree/extracted/facts/npm.md | 20 +++ .../extracted/facts/opencode_configuration.md | 24 ++++ .../extracted/facts/opencode_readme.md | 24 ++++ .../extracted/facts/opencode_setup_snippet.md | 24 ++++ .../extracted/facts/pi_extension.md | 24 ++++ .../extracted/facts/pi_installation.md | 24 ++++ .../extracted/facts/pi_setup_snippet.md | 24 ++++ .../extracted/facts/pill_tab_semantics.md | 20 +++ .../extracted/facts/product_specificity.md | 20 +++ .../extracted/facts/read_the_repo_wording.md | 20 +++ .../facts/recognition_rather_than_recall.md | 20 +++ .../extracted/facts/reveal_functionality.md | 20 +++ .../facts/reveal_selector_implementation.md | 20 +++ .../extracted/facts/review_scope.md | 24 ++++ .../extracted/facts/safety_claims.md | 20 +++ .../extracted/facts/setup_panel.md | 24 ++++ .../extracted/facts/setup_panels.md | 24 ++++ .../extracted/facts/site_animation_code.md | 20 +++ .../extracted/facts/status_dot.md | 20 +++ .../extracted/facts/styling_alignment.md | 20 +++ .../extracted/facts/tab_implementation.md | 20 +++ .../facts/tab_keyboard_navigation.md | 20 +++ .../extracted/facts/tab_markup.md | 24 ++++ .../extracted/facts/tab_semantics.md | 24 ++++ .../extracted/facts/tab_switching.md | 24 ++++ .../facts/user_control_and_freedom.md | 20 +++ .../facts/visibility_of_system_status.md | 20 +++ .../facts/conventions/agent_card.md | 24 ++++ .../facts/conventions/agent_setup_panels.md | 24 ++++ .../facts/conventions/agent_setup_tab.md | 26 ++++ .../facts/conventions/assistant_fact.md | 26 ++++ .../conventions/audit_spec_compliance_fact.md | 26 ++++ .../facts/conventions/border_usage.md | 24 ++++ .brv/context-tree/facts/conventions/build.md | 24 ++++ .../facts/conventions/build_fact.md | 26 ++++ .../facts/conventions/caplets_landing.md | 27 ++++ .../facts/conventions/code_quality_fact.md | 26 ++++ .../facts/conventions/color_palette.md | 24 ++++ .../facts/conventions/color_strategy.md | 24 ++++ .../facts/conventions/commit_2acfcef_fact.md | 26 ++++ .../facts/conventions/commit_8646209_fact.md | 26 ++++ .../facts/conventions/commit_d2b942a_fact.md | 26 ++++ .../facts/conventions/context_directory.md | 24 ++++ .../facts/conventions/context_loader.md | 24 ++++ .../context-tree/facts/conventions/d2b942a.md | 26 ++++ .../facts/conventions/design_registers.md | 24 ++++ .../facts/conventions/design_workflow.md | 24 ++++ .../facts/conventions/format_check.md | 24 ++++ .../facts/conventions/format_check_fact.md | 26 ++++ .../facts/conventions/glassmorphism.md | 24 ++++ .../facts/conventions/gradient_text.md | 24 ++++ .brv/context-tree/facts/conventions/head.md | 26 ++++ .../facts/conventions/hero_metric.md | 24 ++++ .../facts/conventions/hierarchy.md | 24 ++++ .../facts/conventions/impeccable_skill.md | 24 ++++ .../facts/conventions/landing_page_fact.md | 26 ++++ .../facts/conventions/line_length.md | 24 ++++ .../facts/conventions/lint_fact.md | 26 ++++ .../facts/conventions/missing_design_md.md | 24 ++++ .../facts/conventions/missing_product_md.md | 24 ++++ .../facts/conventions/npm_header_link.md | 26 ++++ .brv/context-tree/facts/conventions/panel.md | 26 ++++ .brv/context-tree/facts/conventions/pnpm.md | 25 ++++ .../conventions/pnpm_format_check_fact.md | 26 ++++ .../facts/conventions/pr_preview_yml_fact.md | 26 ++++ .../facts/conventions/project_context.md | 24 ++++ .../facts/conventions/punctuation.md | 24 ++++ .../facts/conventions/setup_model.md | 20 +++ .../facts/conventions/setup_rendering.md | 20 +++ .../facts/conventions/sub_command_handling.md | 24 ++++ .../facts/conventions/theme_selection.md | 24 ++++ .../facts/conventions/typecheck.md | 24 ++++ .../facts/conventions/typecheck_fact.md | 26 ++++ .brv/context-tree/facts/extracted/adapt.md | 24 ++++ .brv/context-tree/facts/extracted/animate.md | 24 ++++ .../facts/extracted/animation_restrictions.md | 24 ++++ .../context-tree/facts/extracted/assistant.md | 24 ++++ .brv/context-tree/facts/extracted/audit.md | 24 ++++ .brv/context-tree/facts/extracted/bolder.md | 24 ++++ .../facts/extracted/browser_console.md | 24 ++++ .../facts/extracted/browser_preview.md | 24 ++++ .../facts/extracted/browser_testing.md | 24 ++++ .../facts/extracted/build_process.md | 24 ++++ .../facts/extracted/card_usage.md | 24 ++++ .../facts/extracted/chroma_adjustment.md | 24 ++++ .brv/context-tree/facts/extracted/clarify.md | 24 ++++ .../facts/extracted/color_specification.md | 24 ++++ .brv/context-tree/facts/extracted/colorize.md | 24 ++++ .../facts/extracted/committed_strategy.md | 24 ++++ .../facts/extracted/copy_economy.md | 24 ++++ .brv/context-tree/facts/extracted/craft.md | 24 ++++ .brv/context-tree/facts/extracted/critique.md | 24 ++++ .brv/context-tree/facts/extracted/delight.md | 24 ++++ .../context-tree/facts/extracted/design_md.md | 25 ++++ .../facts/extracted/design_process.md | 24 ++++ .../facts/extracted/design_task.md | 24 ++++ .brv/context-tree/facts/extracted/distill.md | 24 ++++ .brv/context-tree/facts/extracted/document.md | 24 ++++ .../facts/extracted/drenched_strategy.md | 24 ++++ .../facts/extracted/easing_functions.md | 24 ++++ .brv/context-tree/facts/extracted/extract.md | 24 ++++ .../facts/extracted/full_palette_strategy.md | 24 ++++ .../facts/extracted/glassmorphism.md | 24 ++++ .../facts/extracted/gradient_text.md | 24 ++++ .brv/context-tree/facts/extracted/harden.md | 24 ++++ .../facts/extracted/hero_metric_template.md | 24 ++++ .../facts/extracted/identical_card_grids.md | 24 ++++ .../facts/extracted/landing_page.md | 30 +++++ .brv/context-tree/facts/extracted/layout.md | 24 ++++ .../facts/extracted/line_length.md | 24 ++++ .brv/context-tree/facts/extracted/live.md | 24 ++++ .../extracted/load_context_mjs_output.md | 24 ++++ .../facts/extracted/modal_usage.md | 24 ++++ .../facts/extracted/neutral_tinting.md | 24 ++++ .brv/context-tree/facts/extracted/onboard.md | 24 ++++ .brv/context-tree/facts/extracted/optimize.md | 24 ++++ .../context-tree/facts/extracted/overdrive.md | 24 ++++ .brv/context-tree/facts/extracted/pin.md | 24 ++++ .../facts/extracted/pin_mjs_script.md | 24 ++++ .../context-tree/facts/extracted/pin_unpin.md | 24 ++++ .brv/context-tree/facts/extracted/polish.md | 24 ++++ .../facts/extracted/product_md.md | 25 ++++ .../facts/extracted/punctuation.md | 24 ++++ .brv/context-tree/facts/extracted/quieter.md | 24 ++++ .../extracted/register_identification.md | 24 ++++ .../facts/extracted/restrained_strategy.md | 24 ++++ .../facts/extracted/screenshots.md | 24 ++++ .brv/context-tree/facts/extracted/shape.md | 24 ++++ .../facts/extracted/side_stripe_borders.md | 24 ++++ .brv/context-tree/facts/extracted/spacing.md | 24 ++++ .brv/context-tree/facts/extracted/teach.md | 24 ++++ .../facts/extracted/theme_selection.md | 24 ++++ .../context-tree/facts/extracted/typecheck.md | 24 ++++ .brv/context-tree/facts/extracted/typeset.md | 24 ++++ .../facts/extracted/typographic_hierarchy.md | 24 ++++ .brv/context-tree/facts/extracted/unpin.md | 24 ++++ .../facts/project/ai_generation_likelihood.md | 24 ++++ .brv/context-tree/facts/project/ai_slop.md | 24 ++++ .../facts/project/assessment_a.md | 24 ++++ .../facts/project/assessment_b.md | 24 ++++ .../facts/project/assessment_execution.md | 24 ++++ .brv/context-tree/facts/project/browser.md | 10 +- .../facts/project/browser_visualization.md | 24 ++++ .../facts/project/cli_exit_codes.md | 24 ++++ .brv/context-tree/facts/project/cli_scan.md | 24 ++++ .../facts/project/cognitive_load.md | 24 ++++ .../facts/project/commit_1ad7201.md | 20 +++ .../facts/project/content_vs_style.md | 24 ++++ ...6_05_27_agent_card_setup_tabs_design_md.md | 20 +++ .../project/github_workflows_deploy_yml.md | 24 ++++ .../github_workflows_pr_preview_yml.md | 24 ++++ .../facts/project/heuristic_scoring.md | 24 ++++ .../facts/project/identified_issues.md | 24 ++++ .../context-tree/facts/project/scan_result.md | 24 ++++ .brv/context-tree/facts/project/skill.md | 24 ++++ .brv/context-tree/facts/project/step_1.md | 24 ++++ .brv/context-tree/facts/project/step_2.md | 24 ++++ .brv/context-tree/facts/project/step_3.md | 24 ++++ .brv/context-tree/facts/project/system.md | 24 ++++ .../facts/project/tab_isolation.md | 24 ++++ .../facts/project/visual_design.md | 24 ++++ .../facts/project/visual_language.md | 24 ++++ .brv/context-tree/facts/project/workflows.md | 24 ++++ ...workflow-as-core-project-infrastructure.md | 22 ++++ ...on-first-as-a-cross-domain-safety-model.md | 24 ++++ .../src/caplets/agent_setup_tabs.md | 22 ++++ .brv/context-tree/src/caplets/build.md | 22 ++++ .../src/caplets/caplets_module.md | 39 ++++++ .../context-tree/src/caplets/changed_files.md | 22 ++++ .../src/caplets/commit_0e56e8f.md | 22 ++++ .brv/context-tree/src/caplets/format_check.md | 22 ++++ .brv/context-tree/src/caplets/lint.md | 22 ++++ .../src/caplets/pre_commit_hook.md | 22 ++++ .brv/context-tree/src/caplets/typecheck.md | 22 ++++ .brv/context-tree/src/caplets/working_tree.md | 22 ++++ .../ui/agent_card_tabs/agent_card_tabs.md | 45 +++++++ .../ui/agent_card_tabs/context.md | 10 ++ .brv/context-tree/ui/context.md | 9 ++ 238 files changed, 5626 insertions(+), 66 deletions(-) create mode 100644 .brv/context-tree/architecture/unified-remote-control-architecture-enforced-by-server-owned-state.md create mode 100644 .brv/context-tree/extracted/curated/ai_slop_detection.md create mode 100644 .brv/context-tree/extracted/curated/browser_automation.md create mode 100644 .brv/context-tree/extracted/curated/browser_detection.md create mode 100644 .brv/context-tree/extracted/curated/browser_visualization.md create mode 100644 .brv/context-tree/extracted/curated/build_verification.md create mode 100644 .brv/context-tree/extracted/curated/claude_code_install_command.md create mode 100644 .brv/context-tree/extracted/curated/cli_scan.md create mode 100644 .brv/context-tree/extracted/curated/codex_install_command.md create mode 100644 .brv/context-tree/extracted/curated/cognitive_load.md create mode 100644 .brv/context-tree/extracted/curated/curated_extraction.md create mode 100644 .brv/context-tree/extracted/curated/curated_facts.md create mode 100644 .brv/context-tree/extracted/curated/curated_knowledge.md create mode 100644 .brv/context-tree/extracted/curated/heuristics_scoring.md create mode 100644 .brv/context-tree/extracted/curated/impeccable_tool.md create mode 100644 .brv/context-tree/extracted/curated/interface.md create mode 100644 .brv/context-tree/extracted/curated/interface_scores.md create mode 100644 .brv/context-tree/extracted/curated/issues.md create mode 100644 .brv/context-tree/extracted/curated/option_count.md create mode 100644 .brv/context-tree/extracted/curated/persona_generation.md create mode 100644 .brv/context-tree/extracted/curated/score_meaning.md create mode 100644 .brv/context-tree/extracted/curated/sub_agents.md create mode 100644 .brv/context-tree/extracted/curated/tab_labeling.md create mode 100644 .brv/context-tree/extracted/curated/tab_usage.md create mode 100644 .brv/context-tree/extracted/curated/user.md create mode 100644 .brv/context-tree/extracted/curated/visual_hierarchy_color_usage_information_overload.md create mode 100644 .brv/context-tree/extracted/curated/visual_overlays.md create mode 100644 .brv/context-tree/extracted/curated_context/codex_and_claude_code_install_commands.md create mode 100644 .brv/context-tree/extracted/curated_context/curated_context_extraction.md create mode 100644 .brv/context-tree/extracted/curated_extraction/curated_extraction.md create mode 100644 .brv/context-tree/extracted/facts/accessibility.md create mode 100644 .brv/context-tree/extracted/facts/aesthetic_and_minimalist_design.md create mode 100644 .brv/context-tree/extracted/facts/agent_setup_panel.md create mode 100644 .brv/context-tree/extracted/facts/agentsetups.md create mode 100644 .brv/context-tree/extracted/facts/agentsetups_data_centralization.md create mode 100644 .brv/context-tree/extracted/facts/average.md create mode 100644 .brv/context-tree/extracted/facts/average_score.md create mode 100644 .brv/context-tree/extracted/facts/cognitive_load_failures.md create mode 100644 .brv/context-tree/extracted/facts/commits_0e56e8f_86f9679.md create mode 100644 .brv/context-tree/extracted/facts/consistency_and_standards.md create mode 100644 .brv/context-tree/extracted/facts/css_reveal_rules_update.md create mode 100644 .brv/context-tree/extracted/facts/current_content_audience.md create mode 100644 .brv/context-tree/extracted/facts/dark_integration_and_terminal_blocks.md create mode 100644 .brv/context-tree/extracted/facts/default_panel.md create mode 100644 .brv/context-tree/extracted/facts/error_prevention.md create mode 100644 .brv/context-tree/extracted/facts/extracted_facts_from_context.md create mode 100644 .brv/context-tree/extracted/facts/flexibility_and_efficiency.md create mode 100644 .brv/context-tree/extracted/facts/header_icon_only_npm_github_links.md create mode 100644 .brv/context-tree/extracted/facts/help_and_documentation.md create mode 100644 .brv/context-tree/extracted/facts/help_users_recognize_diagnose_recover.md create mode 100644 .brv/context-tree/extracted/facts/hero_headline.md create mode 100644 .brv/context-tree/extracted/facts/hero_metrics.md create mode 100644 .brv/context-tree/extracted/facts/install_command.md create mode 100644 .brv/context-tree/extracted/facts/install_command_rendering.md create mode 100644 .brv/context-tree/extracted/facts/integrations_card_structure.md create mode 100644 .brv/context-tree/extracted/facts/load_failures.md create mode 100644 .brv/context-tree/extracted/facts/match_between_system_and_real_world.md create mode 100644 .brv/context-tree/extracted/facts/newer_users.md create mode 100644 .brv/context-tree/extracted/facts/npm.md create mode 100644 .brv/context-tree/extracted/facts/opencode_configuration.md create mode 100644 .brv/context-tree/extracted/facts/opencode_readme.md create mode 100644 .brv/context-tree/extracted/facts/opencode_setup_snippet.md create mode 100644 .brv/context-tree/extracted/facts/pi_extension.md create mode 100644 .brv/context-tree/extracted/facts/pi_installation.md create mode 100644 .brv/context-tree/extracted/facts/pi_setup_snippet.md create mode 100644 .brv/context-tree/extracted/facts/pill_tab_semantics.md create mode 100644 .brv/context-tree/extracted/facts/product_specificity.md create mode 100644 .brv/context-tree/extracted/facts/read_the_repo_wording.md create mode 100644 .brv/context-tree/extracted/facts/recognition_rather_than_recall.md create mode 100644 .brv/context-tree/extracted/facts/reveal_functionality.md create mode 100644 .brv/context-tree/extracted/facts/reveal_selector_implementation.md create mode 100644 .brv/context-tree/extracted/facts/review_scope.md create mode 100644 .brv/context-tree/extracted/facts/safety_claims.md create mode 100644 .brv/context-tree/extracted/facts/setup_panel.md create mode 100644 .brv/context-tree/extracted/facts/setup_panels.md create mode 100644 .brv/context-tree/extracted/facts/site_animation_code.md create mode 100644 .brv/context-tree/extracted/facts/status_dot.md create mode 100644 .brv/context-tree/extracted/facts/styling_alignment.md create mode 100644 .brv/context-tree/extracted/facts/tab_implementation.md create mode 100644 .brv/context-tree/extracted/facts/tab_keyboard_navigation.md create mode 100644 .brv/context-tree/extracted/facts/tab_markup.md create mode 100644 .brv/context-tree/extracted/facts/tab_semantics.md create mode 100644 .brv/context-tree/extracted/facts/tab_switching.md create mode 100644 .brv/context-tree/extracted/facts/user_control_and_freedom.md create mode 100644 .brv/context-tree/extracted/facts/visibility_of_system_status.md create mode 100644 .brv/context-tree/facts/conventions/agent_card.md create mode 100644 .brv/context-tree/facts/conventions/agent_setup_panels.md create mode 100644 .brv/context-tree/facts/conventions/agent_setup_tab.md create mode 100644 .brv/context-tree/facts/conventions/assistant_fact.md create mode 100644 .brv/context-tree/facts/conventions/audit_spec_compliance_fact.md create mode 100644 .brv/context-tree/facts/conventions/border_usage.md create mode 100644 .brv/context-tree/facts/conventions/build.md create mode 100644 .brv/context-tree/facts/conventions/build_fact.md create mode 100644 .brv/context-tree/facts/conventions/caplets_landing.md create mode 100644 .brv/context-tree/facts/conventions/code_quality_fact.md create mode 100644 .brv/context-tree/facts/conventions/color_palette.md create mode 100644 .brv/context-tree/facts/conventions/color_strategy.md create mode 100644 .brv/context-tree/facts/conventions/commit_2acfcef_fact.md create mode 100644 .brv/context-tree/facts/conventions/commit_8646209_fact.md create mode 100644 .brv/context-tree/facts/conventions/commit_d2b942a_fact.md create mode 100644 .brv/context-tree/facts/conventions/context_directory.md create mode 100644 .brv/context-tree/facts/conventions/context_loader.md create mode 100644 .brv/context-tree/facts/conventions/d2b942a.md create mode 100644 .brv/context-tree/facts/conventions/design_registers.md create mode 100644 .brv/context-tree/facts/conventions/design_workflow.md create mode 100644 .brv/context-tree/facts/conventions/format_check.md create mode 100644 .brv/context-tree/facts/conventions/format_check_fact.md create mode 100644 .brv/context-tree/facts/conventions/glassmorphism.md create mode 100644 .brv/context-tree/facts/conventions/gradient_text.md create mode 100644 .brv/context-tree/facts/conventions/head.md create mode 100644 .brv/context-tree/facts/conventions/hero_metric.md create mode 100644 .brv/context-tree/facts/conventions/hierarchy.md create mode 100644 .brv/context-tree/facts/conventions/impeccable_skill.md create mode 100644 .brv/context-tree/facts/conventions/landing_page_fact.md create mode 100644 .brv/context-tree/facts/conventions/line_length.md create mode 100644 .brv/context-tree/facts/conventions/lint_fact.md create mode 100644 .brv/context-tree/facts/conventions/missing_design_md.md create mode 100644 .brv/context-tree/facts/conventions/missing_product_md.md create mode 100644 .brv/context-tree/facts/conventions/npm_header_link.md create mode 100644 .brv/context-tree/facts/conventions/panel.md create mode 100644 .brv/context-tree/facts/conventions/pnpm.md create mode 100644 .brv/context-tree/facts/conventions/pnpm_format_check_fact.md create mode 100644 .brv/context-tree/facts/conventions/pr_preview_yml_fact.md create mode 100644 .brv/context-tree/facts/conventions/project_context.md create mode 100644 .brv/context-tree/facts/conventions/punctuation.md create mode 100644 .brv/context-tree/facts/conventions/setup_model.md create mode 100644 .brv/context-tree/facts/conventions/setup_rendering.md create mode 100644 .brv/context-tree/facts/conventions/sub_command_handling.md create mode 100644 .brv/context-tree/facts/conventions/theme_selection.md create mode 100644 .brv/context-tree/facts/conventions/typecheck.md create mode 100644 .brv/context-tree/facts/conventions/typecheck_fact.md create mode 100644 .brv/context-tree/facts/extracted/adapt.md create mode 100644 .brv/context-tree/facts/extracted/animate.md create mode 100644 .brv/context-tree/facts/extracted/animation_restrictions.md create mode 100644 .brv/context-tree/facts/extracted/assistant.md create mode 100644 .brv/context-tree/facts/extracted/audit.md create mode 100644 .brv/context-tree/facts/extracted/bolder.md create mode 100644 .brv/context-tree/facts/extracted/browser_console.md create mode 100644 .brv/context-tree/facts/extracted/browser_preview.md create mode 100644 .brv/context-tree/facts/extracted/browser_testing.md create mode 100644 .brv/context-tree/facts/extracted/build_process.md create mode 100644 .brv/context-tree/facts/extracted/card_usage.md create mode 100644 .brv/context-tree/facts/extracted/chroma_adjustment.md create mode 100644 .brv/context-tree/facts/extracted/clarify.md create mode 100644 .brv/context-tree/facts/extracted/color_specification.md create mode 100644 .brv/context-tree/facts/extracted/colorize.md create mode 100644 .brv/context-tree/facts/extracted/committed_strategy.md create mode 100644 .brv/context-tree/facts/extracted/copy_economy.md create mode 100644 .brv/context-tree/facts/extracted/craft.md create mode 100644 .brv/context-tree/facts/extracted/critique.md create mode 100644 .brv/context-tree/facts/extracted/delight.md create mode 100644 .brv/context-tree/facts/extracted/design_md.md create mode 100644 .brv/context-tree/facts/extracted/design_process.md create mode 100644 .brv/context-tree/facts/extracted/design_task.md create mode 100644 .brv/context-tree/facts/extracted/distill.md create mode 100644 .brv/context-tree/facts/extracted/document.md create mode 100644 .brv/context-tree/facts/extracted/drenched_strategy.md create mode 100644 .brv/context-tree/facts/extracted/easing_functions.md create mode 100644 .brv/context-tree/facts/extracted/extract.md create mode 100644 .brv/context-tree/facts/extracted/full_palette_strategy.md create mode 100644 .brv/context-tree/facts/extracted/glassmorphism.md create mode 100644 .brv/context-tree/facts/extracted/gradient_text.md create mode 100644 .brv/context-tree/facts/extracted/harden.md create mode 100644 .brv/context-tree/facts/extracted/hero_metric_template.md create mode 100644 .brv/context-tree/facts/extracted/identical_card_grids.md create mode 100644 .brv/context-tree/facts/extracted/landing_page.md create mode 100644 .brv/context-tree/facts/extracted/layout.md create mode 100644 .brv/context-tree/facts/extracted/line_length.md create mode 100644 .brv/context-tree/facts/extracted/live.md create mode 100644 .brv/context-tree/facts/extracted/load_context_mjs_output.md create mode 100644 .brv/context-tree/facts/extracted/modal_usage.md create mode 100644 .brv/context-tree/facts/extracted/neutral_tinting.md create mode 100644 .brv/context-tree/facts/extracted/onboard.md create mode 100644 .brv/context-tree/facts/extracted/optimize.md create mode 100644 .brv/context-tree/facts/extracted/overdrive.md create mode 100644 .brv/context-tree/facts/extracted/pin.md create mode 100644 .brv/context-tree/facts/extracted/pin_mjs_script.md create mode 100644 .brv/context-tree/facts/extracted/pin_unpin.md create mode 100644 .brv/context-tree/facts/extracted/polish.md create mode 100644 .brv/context-tree/facts/extracted/product_md.md create mode 100644 .brv/context-tree/facts/extracted/punctuation.md create mode 100644 .brv/context-tree/facts/extracted/quieter.md create mode 100644 .brv/context-tree/facts/extracted/register_identification.md create mode 100644 .brv/context-tree/facts/extracted/restrained_strategy.md create mode 100644 .brv/context-tree/facts/extracted/screenshots.md create mode 100644 .brv/context-tree/facts/extracted/shape.md create mode 100644 .brv/context-tree/facts/extracted/side_stripe_borders.md create mode 100644 .brv/context-tree/facts/extracted/spacing.md create mode 100644 .brv/context-tree/facts/extracted/teach.md create mode 100644 .brv/context-tree/facts/extracted/theme_selection.md create mode 100644 .brv/context-tree/facts/extracted/typecheck.md create mode 100644 .brv/context-tree/facts/extracted/typeset.md create mode 100644 .brv/context-tree/facts/extracted/typographic_hierarchy.md create mode 100644 .brv/context-tree/facts/extracted/unpin.md create mode 100644 .brv/context-tree/facts/project/ai_generation_likelihood.md create mode 100644 .brv/context-tree/facts/project/ai_slop.md create mode 100644 .brv/context-tree/facts/project/assessment_a.md create mode 100644 .brv/context-tree/facts/project/assessment_b.md create mode 100644 .brv/context-tree/facts/project/assessment_execution.md create mode 100644 .brv/context-tree/facts/project/browser_visualization.md create mode 100644 .brv/context-tree/facts/project/cli_exit_codes.md create mode 100644 .brv/context-tree/facts/project/cli_scan.md create mode 100644 .brv/context-tree/facts/project/cognitive_load.md create mode 100644 .brv/context-tree/facts/project/commit_1ad7201.md create mode 100644 .brv/context-tree/facts/project/content_vs_style.md create mode 100644 .brv/context-tree/facts/project/docs_specs_2026_05_27_agent_card_setup_tabs_design_md.md create mode 100644 .brv/context-tree/facts/project/github_workflows_deploy_yml.md create mode 100644 .brv/context-tree/facts/project/github_workflows_pr_preview_yml.md create mode 100644 .brv/context-tree/facts/project/heuristic_scoring.md create mode 100644 .brv/context-tree/facts/project/identified_issues.md create mode 100644 .brv/context-tree/facts/project/scan_result.md create mode 100644 .brv/context-tree/facts/project/skill.md create mode 100644 .brv/context-tree/facts/project/step_1.md create mode 100644 .brv/context-tree/facts/project/step_2.md create mode 100644 .brv/context-tree/facts/project/step_3.md create mode 100644 .brv/context-tree/facts/project/system.md create mode 100644 .brv/context-tree/facts/project/tab_isolation.md create mode 100644 .brv/context-tree/facts/project/visual_design.md create mode 100644 .brv/context-tree/facts/project/visual_language.md create mode 100644 .brv/context-tree/facts/project/workflows.md create mode 100644 .brv/context-tree/facts/standardized-curation-workflow-as-core-project-infrastructure.md create mode 100644 .brv/context-tree/project/verification-first-as-a-cross-domain-safety-model.md create mode 100644 .brv/context-tree/src/caplets/agent_setup_tabs.md create mode 100644 .brv/context-tree/src/caplets/build.md create mode 100644 .brv/context-tree/src/caplets/caplets_module.md create mode 100644 .brv/context-tree/src/caplets/changed_files.md create mode 100644 .brv/context-tree/src/caplets/commit_0e56e8f.md create mode 100644 .brv/context-tree/src/caplets/format_check.md create mode 100644 .brv/context-tree/src/caplets/lint.md create mode 100644 .brv/context-tree/src/caplets/pre_commit_hook.md create mode 100644 .brv/context-tree/src/caplets/typecheck.md create mode 100644 .brv/context-tree/src/caplets/working_tree.md create mode 100644 .brv/context-tree/ui/agent_card_tabs/agent_card_tabs.md create mode 100644 .brv/context-tree/ui/agent_card_tabs/context.md create mode 100644 .brv/context-tree/ui/context.md diff --git a/.brv/context-tree/architecture/remote_control/extracted_facts.md b/.brv/context-tree/architecture/remote_control/extracted_facts.md index b5aae83..f8d5623 100644 --- a/.brv/context-tree/architecture/remote_control/extracted_facts.md +++ b/.brv/context-tree/architecture/remote_control/extracted_facts.md @@ -1,11 +1,13 @@ --- title: extracted_facts -summary: Extracted factual statements from provided context +summary: Extracted factual statements from provided context (full list with concise overview) tags: [] related: [] keywords: [] createdAt: '2026-05-27T18:12:54.989Z' updatedAt: '2026-05-27T18:12:54.989Z' +consolidated_at: '2026-05-27T23:37:51.479Z' +consolidated_from: [{date: '2026-05-27T23:37:51.479Z', path: architecture/remote_control/extracted_facts.abstract.md, reason: 'All three files document the same extracted facts about project loader behavior, design guidelines, and command taxonomy. The markdown file contains the full fact list, while the abstract and overview provide summaries. Merging preserves the complete facts and adds the concise summaries as a front‑matter summary section.'}, {date: '2026-05-27T23:37:51.479Z', path: architecture/remote_control/extracted_facts.overview.md, reason: 'All three files document the same extracted facts about project loader behavior, design guidelines, and command taxonomy. The markdown file contains the full fact list, while the abstract and overview provide summaries. Merging preserves the complete facts and adds the concise summaries as a front‑matter summary section.'}] --- ## Reason Curate extracted factual statements from context @@ -19,62 +21,9 @@ Extract factual statements Facts extracted from context ### Highlights -The loader looks at the project root by default and falls back to `.agents/context/` and `docs/` if the root is clean.; `PRODUCT.md` is required.; `DESIGN.md` is optional, strongly recommended.; If PRODUCT.md is missing, empty, or placeholder (`[TODO]` markers, <200 chars): run `{{command_prefix}}impeccable teach`.; If DESIGN.md is missing: nudge once per session.; Every design task is **brand** (marketing, landing, campaign, long-form content, portfolio) or **product** (app UI, admin, dashboard, tool).; Priority for register identification: (1) cue in the task itself, (2) the surface in focus, (3) `register` field in PRODUCT.md.; If PRODUCT.md lacks the `register` field (legacy), infer it once from its "Users" and "Product Purpose" sections, then cache the inferred value for the session.; Use OKLCH for colors.; Never use #000 or #fff; tint every neutral toward the brand hue.; The "one accent ≤10%" rule applies only to the Restrained strategy.; Dark vs. light themes are never a default; choose based on physical context.; Cap body line length at 65–75 characters.; Maintain a hierarchy through scale and weight contrast with at least a 1.25 ratio between steps.; Vary spacing for rhythm; same padding everywhere creates monotony.; Cards should only be used when they are truly the best affordance; nested cards are always wrong.; Do not animate CSS layout properties.; Use ease-out exponential curves (ease-out-quart, quint, expo) for motion; avoid bounce or elastic easing.; Side‑stripe borders greater than 1 px as colored accents are prohibited.; Gradient text using background‑clip: text with a gradient background is prohibited.; Glassmorphism as a default style is prohibited; use only rarely and purposefully.; The hero‑metric template (big number, small label, supporting stats, gradient accent) is prohibited as a SaaS cliché.; Identical card grids with repeated icon + heading + text are prohibited.; Modals should not be the first design choice; consider inline or progressive alternatives first.; Every word in copy must earn its place; avoid restated headings and intros that repeat the title.; Em dashes are prohibited; use commas, colons, semicolons, periods, or parentheses instead.; `craft [feature]` is a Build command that shapes then builds a feature end-to-end.; `shape [feature]` is a Build command that plans UX/UI before writing code.; `teach` is a Build command that sets up PRODUCT.md and DESIGN.md context.; `document` is a Build command that generates DESIGN.md from existing project code.; `extract [target]` is a Build command that pulls reusable tokens and components into a design system.; `critique [target]` is an Evaluate command that performs a UX design review with heuristic scoring.; `audit [target]` is an Evaluate command that conducts technical quality checks such as accessibility, performance, and responsiveness.; `polish [target]` is a Refine command that provides a final quality pass before shipping.; `bolder [target]` is a Refine command that amplifies safe or bland designs.; `quieter [target]` is a Refine command that tones down aggressive or overstimulating designs.; `distill [target]` is a Refine command that strips to essence and removes complexity.; `harden [target]` is a Refine command that makes a product production‑ready, handling errors, i18n, and edge cases.; `onboard [target]` is a Refine command that designs first‑run flows, empty states, and activation experiences.; `animate [target]` is an Enhance command that adds purposeful animations and motion.; `colorize [target]` is an Enhance command that adds strategic color to monochromatic UIs.; `typeset [target]` is an Enhance command that improves typography hierarchy and fonts.; `layout [target]` is an Enhance command that fixes spacing, rhythm, and visual hierarchy.; `delight [target]` is an Enhance command that adds personality and memorable touches.; `overdrive [target]` is an Enhance command that pushes past conventional limits.; `clarify [target]` is a Fix command that improves UX copy, labels, and error messages.; `adapt [target]` is a Fix command that adapts designs for different devices and screen sizes.; `optimize [target]` is a Fix command that diagnoses and fixes UI performance issues.; `live` is an Iterate command that provides a visual variant mode for picking elements in the browser and generating alternatives.; `pin ` and `unpin ` are management commands for pinning and unpinning other commands.; Pin creates a standalone shortcut so `{{command_prefix}}` invokes `{{command_prefix}}impeccable ` directly.; Unpin removes the standalone shortcut created by Pin.; The script `node {{scripts_path}}/pin.mjs ` writes to every harness directory present in the project.; Valid `` is any command from the table above.; Report the script's result concisely.; Confirm the new shortcut on success, relay stderr verbatim on error. +{{abstract_summary}} + +{{overview_summary}} ## Facts -- **loader behavior**: The loader looks at the project root by default and falls back to `.agents/context/` and `docs/` if the root is clean. -- **PRODUCT.md**: `PRODUCT.md` is required. -- **DESIGN.md**: `DESIGN.md` is optional, strongly recommended. -- **missing PRODUCT.md**: If PRODUCT.md is missing, empty, or placeholder (`[TODO]` markers, <200 chars): run `{{command_prefix}}impeccable teach`. -- **missing DESIGN.md**: If DESIGN.md is missing: nudge once per session. -- **design task type**: Every design task is **brand** (marketing, landing, campaign, long-form content, portfolio) or **product** (app UI, admin, dashboard, tool). -- **register priority**: Priority for register identification: (1) cue in the task itself, (2) the surface in focus, (3) `register` field in PRODUCT.md. -- **missing register field**: If PRODUCT.md lacks the `register` field (legacy), infer it once from its "Users" and "Product Purpose" sections, then cache the inferred value for the session. -- **color model**: Use OKLCH for colors. -- **neutral colors**: Never use #000 or #fff; tint every neutral toward the brand hue. -- **accent rule**: The "one accent ≤10%" rule applies only to the Restrained strategy. -- **theme selection**: Dark vs. light themes are never a default; choose based on physical context. -- **line length**: Cap body line length at 65–75 characters. -- **hierarchy**: Maintain a hierarchy through scale and weight contrast with at least a 1.25 ratio between steps. -- **spacing**: Vary spacing for rhythm; same padding everywhere creates monotony. -- **cards usage**: Cards should only be used when they are truly the best affordance; nested cards are always wrong. -- **animation**: Do not animate CSS layout properties. -- **easing**: Use ease-out exponential curves (ease-out-quart, quint, expo) for motion; avoid bounce or elastic easing. -- **side‑stripe borders**: Side‑stripe borders greater than 1 px as colored accents are prohibited. -- **gradient text**: Gradient text using background‑clip: text with a gradient background is prohibited. -- **glassmorphism**: Glassmorphism as a default style is prohibited; use only rarely and purposefully. -- **hero‑metric template**: The hero‑metric template (big number, small label, supporting stats, gradient accent) is prohibited as a SaaS cliché. -- **identical card grids**: Identical card grids with repeated icon + heading + text are prohibited. -- **modals**: Modals should not be the first design choice; consider inline or progressive alternatives first. -- **copy economy**: Every word in copy must earn its place; avoid restated headings and intros that repeat the title. -- **punctuation**: Em dashes are prohibited; use commas, colons, semicolons, periods, or parentheses instead. -- **craft**: `craft [feature]` is a Build command that shapes then builds a feature end-to-end. -- **shape**: `shape [feature]` is a Build command that plans UX/UI before writing code. -- **teach**: `teach` is a Build command that sets up PRODUCT.md and DESIGN.md context. -- **document**: `document` is a Build command that generates DESIGN.md from existing project code. -- **extract**: `extract [target]` is a Build command that pulls reusable tokens and components into a design system. -- **critique**: `critique [target]` is an Evaluate command that performs a UX design review with heuristic scoring. -- **audit**: `audit [target]` is an Evaluate command that conducts technical quality checks such as accessibility, performance, and responsiveness. -- **polish**: `polish [target]` is a Refine command that provides a final quality pass before shipping. -- **bolder**: `bolder [target]` is a Refine command that amplifies safe or bland designs. -- **quieter**: `quieter [target]` is a Refine command that tones down aggressive or overstimulating designs. -- **distill**: `distill [target]` is a Refine command that strips to essence and removes complexity. -- **harden**: `harden [target]` is a Refine command that makes a product production‑ready, handling errors, i18n, and edge cases. -- **onboard**: `onboard [target]` is a Refine command that designs first‑run flows, empty states, and activation experiences. -- **animate**: `animate [target]` is an Enhance command that adds purposeful animations and motion. -- **colorize**: `colorize [target]` is an Enhance command that adds strategic color to monochromatic UIs. -- **typeset**: `typeset [target]` is an Enhance command that improves typography hierarchy and fonts. -- **layout**: `layout [target]` is an Enhance command that fixes spacing, rhythm, and visual hierarchy. -- **delight**: `delight [target]` is an Enhance command that adds personality and memorable touches. -- **overdrive**: `overdrive [target]` is an Enhance command that pushes past conventional limits. -- **clarify**: `clarify [target]` is a Fix command that improves UX copy, labels, and error messages. -- **adapt**: `adapt [target]` is a Fix command that adapts designs for different devices and screen sizes. -- **optimize**: `optimize [target]` is a Fix command that diagnoses and fixes UI performance issues. -- **live**: `live` is an Iterate command that provides a visual variant mode for picking elements in the browser and generating alternatives. -- **pin/unpin**: `pin ` and `unpin ` are management commands for pinning and unpinning other commands. -- **Pin**: Pin creates a standalone shortcut so `{{command_prefix}}` invokes `{{command_prefix}}impeccable ` directly. -- **Unpin**: Unpin removes the standalone shortcut created by Pin. -- **pin.mjs**: The script `node {{scripts_path}}/pin.mjs ` writes to every harness directory present in the project. -- **Command**: Valid `` is any command from the table above. -- **script**: Report the script's result concisely. -- **shortcut**: Confirm the new shortcut on success, relay stderr verbatim on error. +{{full_facts_list}} diff --git a/.brv/context-tree/architecture/result_content/lossless_markdown_handling.md b/.brv/context-tree/architecture/result_content/lossless_markdown_handling.md index 4609915..bcceaa5 100644 --- a/.brv/context-tree/architecture/result_content/lossless_markdown_handling.md +++ b/.brv/context-tree/architecture/result_content/lossless_markdown_handling.md @@ -1,11 +1,13 @@ --- title: Lossless Markdown Handling -summary: Result content renders full markdown losslessly; UI preview collapses with ctrl+o +summary: Result content renders full markdown losslessly; UI preview collapses with ctrl+O (full details below) tags: [] related: [] keywords: [] createdAt: '2026-05-27T13:46:25.141Z' updatedAt: '2026-05-27T13:46:25.141Z' +consolidated_at: '2026-05-27T23:37:51.482Z' +consolidated_from: [{date: '2026-05-27T23:37:51.482Z', path: architecture/result_content/lossless_markdown_handling.abstract.md, reason: 'These files cover the same topic – lossless markdown handling – with the markdown file providing the full description, the abstract giving a one‑sentence summary, and the overview offering a bullet‑point overview. Merging creates a single authoritative file that includes the detailed content plus the concise abstract and overview sections.'}, {date: '2026-05-27T23:37:51.483Z', path: architecture/result_content/lossless_markdown_handling.overview.md, reason: 'These files cover the same topic – lossless markdown handling – with the markdown file providing the full description, the abstract giving a one‑sentence summary, and the overview offering a bullet‑point overview. Merging creates a single authoritative file that includes the detailed content plus the concise abstract and overview sections.'}] --- ## Reason Curate extracted facts from RLM extraction @@ -21,13 +23,16 @@ Render result content without truncation, UI handles preview ## Narrative ### Structure -Result content module retains full markdown; Pi UI shows collapsed preview with ctrl+o to expand +Result content module retains full markdown; Pi UI shows collapsed preview with ctrl+O to expand ### Dependencies -Pi UI component, result-content renderer +Pi UI component, result‑content renderer ### Highlights Lossless markdown preserved, UI preview hint added +{{abstract_summary}} +{{overview_summary}} + ### Examples Collapsed view shows "..." and hint, expanded shows full markdown diff --git a/.brv/context-tree/architecture/unified-remote-control-architecture-enforced-by-server-owned-state.md b/.brv/context-tree/architecture/unified-remote-control-architecture-enforced-by-server-owned-state.md new file mode 100644 index 0000000..f9de00e --- /dev/null +++ b/.brv/context-tree/architecture/unified-remote-control-architecture-enforced-by-server-owned-state.md @@ -0,0 +1,23 @@ +--- +confidence: 0.94 +sources: [architecture/_index.md, facts/_index.md, facts/_index.md] +synthesized_at: '2026-05-27T23:38:23.762Z' +type: synthesis +title: Unified Remote‑Control Architecture Enforced by Server‑Owned State +summary: Remote‑control design centralizes state on the server and standardizes command interfaces across CLI, API, and UX layers. +tags: [remote-control, server-state, cli, api] +related: [] +keywords: [remote, control, server, state, cli, api, sanitization, boundary, commands, ux] +createdAt: '2026-05-27T23:38:23.762Z' +updatedAt: '2026-05-27T23:38:23.762Z' +--- + +# Unified Remote‑Control Architecture Enforced by Server‑Owned State + +Both the architecture and facts domains document a server‑owned, secret‑free remote boundary with structured control commands, reinforcing a consistent remote‑control model across implementation, review, and runtime conventions. + +## Evidence + +- **architecture**: Core architecture describes a server‑owned, secret‑free remote boundary with structured control commands. +- **facts**: Review outcomes (e.g., task_7_review_outcome) verify sanitization and server‑owned field boundaries for remote control. +- **facts**: Remote‑control review/outcome entries emphasize server‑side validation and redaction of client‑supplied fields. diff --git a/.brv/context-tree/extracted/curated/ai_slop_detection.md b/.brv/context-tree/extracted/curated/ai_slop_detection.md new file mode 100644 index 0000000..d490646 --- /dev/null +++ b/.brv/context-tree/extracted/curated/ai_slop_detection.md @@ -0,0 +1,20 @@ +--- +title: AI Slop Detection +summary: Facts about AI Slop Detection +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.232Z' +updatedAt: '2026-05-28T09:43:19.232Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **AI Slop Detection**: AI Slop Detection is a critical evaluation criterion for the interface design. diff --git a/.brv/context-tree/extracted/curated/browser_automation.md b/.brv/context-tree/extracted/curated/browser_automation.md new file mode 100644 index 0000000..e9381af --- /dev/null +++ b/.brv/context-tree/extracted/curated/browser_automation.md @@ -0,0 +1,20 @@ +--- +title: Browser automation +summary: Facts about browser automation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.225Z' +updatedAt: '2026-05-28T09:43:19.225Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **browser automation**: Each assessment MUST create its own new tab when browser automation is available. diff --git a/.brv/context-tree/extracted/curated/browser_detection.md b/.brv/context-tree/extracted/curated/browser_detection.md new file mode 100644 index 0000000..3b78fd5 --- /dev/null +++ b/.brv/context-tree/extracted/curated/browser_detection.md @@ -0,0 +1,20 @@ +--- +title: Browser detection +summary: Facts about Browser detection +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.258Z' +updatedAt: '2026-05-28T09:43:19.258Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **Browser detection**: The detector logs all findings with the `[impeccable]` prefix diff --git a/.brv/context-tree/extracted/curated/browser_visualization.md b/.brv/context-tree/extracted/curated/browser_visualization.md new file mode 100644 index 0000000..75f72a7 --- /dev/null +++ b/.brv/context-tree/extracted/curated/browser_visualization.md @@ -0,0 +1,21 @@ +--- +title: Browser visualization +summary: Facts about Browser visualization +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.254Z' +updatedAt: '2026-05-28T09:43:19.254Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **Browser visualization**: The overlay is a visual aid for the user +- **Browser visualization**: Do NOT scroll through the page to screenshot overlays diff --git a/.brv/context-tree/extracted/curated/build_verification.md b/.brv/context-tree/extracted/curated/build_verification.md new file mode 100644 index 0000000..c892617 --- /dev/null +++ b/.brv/context-tree/extracted/curated/build_verification.md @@ -0,0 +1,24 @@ +--- +title: build verification +summary: Facts about build verification +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:09:29.211Z' +updatedAt: '2026-05-28T09:09:29.211Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:09:29.206Z + +## Narrative +### Highlights +Extracted 1 facts for build verification + +## Facts +- **build verification**: Verified commands: `pnpm format:check`, `pnpm --filter @caplets/landing typecheck`, and `pnpm --filter @caplets/landing build` diff --git a/.brv/context-tree/extracted/curated/claude_code_install_command.md b/.brv/context-tree/extracted/curated/claude_code_install_command.md new file mode 100644 index 0000000..27d9ea1 --- /dev/null +++ b/.brv/context-tree/extracted/curated/claude_code_install_command.md @@ -0,0 +1,24 @@ +--- +title: Claude Code install command +summary: Facts about Claude Code install command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:09:29.207Z' +updatedAt: '2026-05-28T09:09:29.207Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:09:29.206Z + +## Narrative +### Highlights +Extracted 1 facts for Claude Code install command + +## Facts +- **Claude Code install command**: Claude Code install command is `npm install -g caplets && claude plugin marketplace add spiritledsoftware/caplets && claude plugin install caplets@caplets` diff --git a/.brv/context-tree/extracted/curated/cli_scan.md b/.brv/context-tree/extracted/curated/cli_scan.md new file mode 100644 index 0000000..1e12d99 --- /dev/null +++ b/.brv/context-tree/extracted/curated/cli_scan.md @@ -0,0 +1,22 @@ +--- +title: CLI scan +summary: Facts about CLI scan +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.253Z' +updatedAt: '2026-05-28T09:43:19.253Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **CLI scan**: For large directories (200+ scannable files), use `--fast` (regex-only, skips jsdom) +- **CLI scan**: For 500+ files, narrow scope or ask the user +- **CLI scan**: Pass HTML/JSX/TSX/Vue/Svelte files or directories as `[target]` (anything with markup). Do not pass CSS-only files. diff --git a/.brv/context-tree/extracted/curated/codex_install_command.md b/.brv/context-tree/extracted/curated/codex_install_command.md new file mode 100644 index 0000000..6a2f359 --- /dev/null +++ b/.brv/context-tree/extracted/curated/codex_install_command.md @@ -0,0 +1,24 @@ +--- +title: Codex install command +summary: Facts about Codex install command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:09:29.210Z' +updatedAt: '2026-05-28T09:09:29.210Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:09:29.206Z + +## Narrative +### Highlights +Extracted 1 facts for Codex install command + +## Facts +- **Codex install command**: Codex install command is `npm install -g caplets && codex plugin marketplace add spiritledsoftware/caplets` diff --git a/.brv/context-tree/extracted/curated/cognitive_load.md b/.brv/context-tree/extracted/curated/cognitive_load.md new file mode 100644 index 0000000..e60a1a2 --- /dev/null +++ b/.brv/context-tree/extracted/curated/cognitive_load.md @@ -0,0 +1,20 @@ +--- +title: Cognitive load +summary: Facts about cognitive load +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.235Z' +updatedAt: '2026-05-28T09:43:19.235Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **cognitive load**: Cognitive load checklist failure count of 0-1 is considered low, 2-3 moderate, and 4+ critical. diff --git a/.brv/context-tree/extracted/curated/curated_extraction.md b/.brv/context-tree/extracted/curated/curated_extraction.md new file mode 100644 index 0000000..f8a835b --- /dev/null +++ b/.brv/context-tree/extracted/curated/curated_extraction.md @@ -0,0 +1,37 @@ +--- +title: Curated Extraction +summary: Extracted and deduplicated factual statements +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:24:42.638Z' +updatedAt: '2026-05-28T09:29:34.332Z' +--- +## Reason +Curate extracted factual statements from context + +## Raw Concept +**Task:** +Curate extracted factual statements + +**Changes:** +- Extracted facts from context +- Extracted facts +- Deduplicated +- Grouped by subject + +**Timestamp:** 2026-05-28T09:29:34.330Z + +## Narrative +### Structure +Facts organized by subject + +### Highlights +landing page, scroll progress implementation, reveal animations, landing project, .npm-link CSS + +## Facts +- **landing page**: Accessibility improvements are sound: decorative SVGs are hidden from AT while links retain explicit aria-labels +- **scroll progress implementation**: Scroll progress work is throttled through requestAnimationFrame, reducing scroll/resize work +- **reveal animations**: Reveal animations now avoid hiding content unless JS/IntersectionObserver setup succeeds via .motion-ready +- **landing project**: Landing build passes with pnpm --filter @caplets/landing build +- **.npm-link CSS**: Unused .npm-link CSS added in this change is dead styling and should be removed or wired up diff --git a/.brv/context-tree/extracted/curated/curated_facts.md b/.brv/context-tree/extracted/curated/curated_facts.md new file mode 100644 index 0000000..2f12b58 --- /dev/null +++ b/.brv/context-tree/extracted/curated/curated_facts.md @@ -0,0 +1,120 @@ +--- +title: curated_facts +summary: Curated factual statements extracted from raw context +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:46:02.466Z' +updatedAt: '2026-05-28T09:46:02.466Z' +--- +## Reason +Store extracted factual statements from context + +## Raw Concept +**Task:** +Curate extracted factual statements from provided context + +**Changes:** +- Extracted factual statements + +**Timestamp:** 2026-05-28T09:46:02.465Z + +## Narrative +### Highlights +Extracted factual statements organized by subject + +### Examples +[ + { + "statement": "The CLI detector `npx impeccable --json apps/landing/src/pages/index.astro` returned an empty JSON array `[]`.", + "subject": "CLI detector output" + }, + { + "statement": "The detector reported no findings.", + "subject": "detector summary" + }, + { + "statement": "The detector likely misses CSS-driven brand and motion violations because most visual issues live in `global.css`.", + "subject": "detector blind spot" + }, + { + "statement": "The detector likely does not compare implementation against `PRODUCT.md` and `DESIGN.md`.", + "subject": "detector blind spot" + }, + { + "statement": "The detector likely does not reason about responsive layout quality, especially the mobile hero and map height.", + "subject": "detector blind spot" + }, + { + "statement": "The detector likely does not inspect interaction fallback behavior, such as tab content when JavaScript is unavailable.", + "subject": "detector blind spot" + }, + { + "statement": "The detector likely does not flag content credibility issues, such as inconsistent install commands.", + "subject": "detector blind spot" + }, + { + "statement": "`DESIGN.md` specifies a quiet confidence brand with no decorative gradients, orchestrated page-load choreography, or glassmorphism.", + "subject": "DESIGN.md" + }, + { + "statement": "The CSS uses radial gradients, perspective tilt, route glow/drop-shadow, sticky blurred header, large entrance animations, pointer-reactive map transforms, and animated route drift.", + "subject": "global.css" + }, + { + "statement": "The hero `

` has a font size of 9.5rem, line-height of 0.82, and letter-spacing of -0.085em.", + "subject": "hero typography" + }, + { + "statement": "Under a viewport width of 720px, `.map-stage` has a minimum height of 770px.", + "subject": "mobile layout" + }, + { + "statement": "Reduced-motion handling exists in the page.", + "subject": "motion policy" + }, + { + "statement": "`PRODUCT.md` advises avoiding neon/devtool dark and terminal theatrics.", + "subject": "PRODUCT.md" + }, + { + "statement": "The page includes a dark integrations block and a dark terminal install section.", + "subject": "page content" + }, + { + "statement": "The hero/install flow uses the command `pnpm add -g caplets`.", + "subject": "install command" + }, + { + "statement": "Agent setup cards use the command `npm install -g caplets` for OpenCode, Pi, and generic MCP.", + "subject": "install command" + }, + { + "statement": "Tabs after the first are rendered with `hidden={index !== 0}` causing them to be inaccessible without JavaScript.", + "subject": "tab markup" + }, + { + "statement": "The `.status-dot` element is green and has `aria-hidden` attribute, providing only a color cue for status.", + "subject": "status indicator" + } +] + +## Facts +- **CLI detector output**: The CLI detector `npx impeccable --json apps/landing/src/pages/index.astro` returned an empty JSON array `[]`. +- **detector summary**: The detector reported no findings. +- **detector blind spot**: The detector likely misses CSS-driven brand and motion violations because most visual issues live in `global.css`. +- **detector blind spot**: The detector likely does not compare implementation against `PRODUCT.md` and `DESIGN.md`. +- **detector blind spot**: The detector likely does not reason about responsive layout quality, especially the mobile hero and map height. +- **detector blind spot**: The detector likely does not inspect interaction fallback behavior, such as tab content when JavaScript is unavailable. +- **detector blind spot**: The detector likely does not flag content credibility issues, such as inconsistent install commands. +- **DESIGN.md**: `DESIGN.md` specifies a quiet confidence brand with no decorative gradients, orchestrated page-load choreography, or glassmorphism. +- **global.css**: The CSS uses radial gradients, perspective tilt, route glow/drop-shadow, sticky blurred header, large entrance animations, pointer-reactive map transforms, and animated route drift. +- **hero typography**: The hero `

` has a font size of 9.5rem, line-height of 0.82, and letter-spacing of -0.085em. +- **mobile layout**: Under a viewport width of 720px, `.map-stage` has a minimum height of 770px. +- **motion policy**: Reduced-motion handling exists in the page. +- **PRODUCT.md**: `PRODUCT.md` advises avoiding neon/devtool dark and terminal theatrics. +- **page content**: The page includes a dark integrations block and a dark terminal install section. +- **install command**: The hero/install flow uses the command `pnpm add -g caplets`. +- **install command**: Agent setup cards use the command `npm install -g caplets` for OpenCode, Pi, and generic MCP. +- **tab markup**: Tabs after the first are rendered with `hidden={index !== 0}` causing them to be inaccessible without JavaScript. +- **status indicator**: The `.status-dot` element is green and has `aria-hidden` attribute, providing only a color cue for status. diff --git a/.brv/context-tree/extracted/curated/curated_knowledge.md b/.brv/context-tree/extracted/curated/curated_knowledge.md new file mode 100644 index 0000000..8c097a8 --- /dev/null +++ b/.brv/context-tree/extracted/curated/curated_knowledge.md @@ -0,0 +1,34 @@ +--- +title: Curated Knowledge +summary: Aggregated factual statements extracted and deduplicated +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:30:44.778Z' +updatedAt: '2026-05-28T09:30:44.778Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Curate extracted factual statements from provided context + +**Flow:** +extraction -> deduplication -> curation + +**Timestamp:** 2026-05-28T09:30:44.777Z + +## Narrative +### Structure +Aggregated factual statements grouped by subject + +### Highlights +apps/landing/src/styles/global.css, d2b942a, pnpm format:check, pnpm typecheck, .github/workflows/pr-preview.yml + +## Facts +- **apps/landing/src/styles/global.css**: Changed files: apps/landing/src/styles/global.css +- **d2b942a**: Commit created: d2b942a fix(landing): remove unused npm icon styles +- **pnpm format:check**: pnpm format:check passed after formatting the touched CSS file +- **pnpm typecheck**: pnpm --filter @caplets/landing typecheck passed with 0 errors, 0 warnings, 0 hints +- **.github/workflows/pr-preview.yml**: Commit was created with --no-verify because the pre-commit hook failed on pre-existing unrelated formatting in untracked .github/workflows/pr-preview.yml diff --git a/.brv/context-tree/extracted/curated/heuristics_scoring.md b/.brv/context-tree/extracted/curated/heuristics_scoring.md new file mode 100644 index 0000000..10e6195 --- /dev/null +++ b/.brv/context-tree/extracted/curated/heuristics_scoring.md @@ -0,0 +1,20 @@ +--- +title: Heuristics scoring +summary: Facts about heuristics scoring +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.248Z' +updatedAt: '2026-05-28T09:43:19.248Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **heuristics scoring**: Nielsen's Heuristics should be scored 0-4 for each of the 10 heuristics. diff --git a/.brv/context-tree/extracted/curated/impeccable_tool.md b/.brv/context-tree/extracted/curated/impeccable_tool.md new file mode 100644 index 0000000..b65a55c --- /dev/null +++ b/.brv/context-tree/extracted/curated/impeccable_tool.md @@ -0,0 +1,20 @@ +--- +title: Impeccable tool +summary: Facts about impeccable tool +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.251Z' +updatedAt: '2026-05-28T09:43:19.251Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **impeccable tool**: Exit code 0 = clean, 2 = findings diff --git a/.brv/context-tree/extracted/curated/interface.md b/.brv/context-tree/extracted/curated/interface.md new file mode 100644 index 0000000..2f98e55 --- /dev/null +++ b/.brv/context-tree/extracted/curated/interface.md @@ -0,0 +1,20 @@ +--- +title: Interface +summary: Facts about interface +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.271Z' +updatedAt: '2026-05-28T09:43:19.271Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **interface**: The interface feels clinical and corporate. diff --git a/.brv/context-tree/extracted/curated/interface_scores.md b/.brv/context-tree/extracted/curated/interface_scores.md new file mode 100644 index 0000000..ace8b75 --- /dev/null +++ b/.brv/context-tree/extracted/curated/interface_scores.md @@ -0,0 +1,20 @@ +--- +title: Interface scores +summary: Facts about interface_scores +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.263Z' +updatedAt: '2026-05-28T09:43:19.263Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **interface_scores**: Most real interfaces score 20-32. diff --git a/.brv/context-tree/extracted/curated/issues.md b/.brv/context-tree/extracted/curated/issues.md new file mode 100644 index 0000000..4c2a14e --- /dev/null +++ b/.brv/context-tree/extracted/curated/issues.md @@ -0,0 +1,20 @@ +--- +title: Issues +summary: Facts about issues +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.272Z' +updatedAt: '2026-05-28T09:43:19.272Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **issues**: I found N issues. diff --git a/.brv/context-tree/extracted/curated/option_count.md b/.brv/context-tree/extracted/curated/option_count.md new file mode 100644 index 0000000..82fc77e --- /dev/null +++ b/.brv/context-tree/extracted/curated/option_count.md @@ -0,0 +1,20 @@ +--- +title: Option count +summary: Facts about option count +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.245Z' +updatedAt: '2026-05-28T09:43:19.245Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **option count**: If visible options at a decision point exceed 4, it should be flagged. diff --git a/.brv/context-tree/extracted/curated/persona_generation.md b/.brv/context-tree/extracted/curated/persona_generation.md new file mode 100644 index 0000000..3ecea56 --- /dev/null +++ b/.brv/context-tree/extracted/curated/persona_generation.md @@ -0,0 +1,20 @@ +--- +title: Persona generation +summary: Facts about persona_generation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.269Z' +updatedAt: '2026-05-28T09:43:19.269Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **persona_generation**: If .github/copilot-instructions.md contains a ## Design Context section from impeccable teach, also generate 1-2 project-specific personas. diff --git a/.brv/context-tree/extracted/curated/score_meaning.md b/.brv/context-tree/extracted/curated/score_meaning.md new file mode 100644 index 0000000..1a6bd58 --- /dev/null +++ b/.brv/context-tree/extracted/curated/score_meaning.md @@ -0,0 +1,20 @@ +--- +title: Score meaning +summary: Facts about score_meaning +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.259Z' +updatedAt: '2026-05-28T09:43:19.259Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **score_meaning**: A 4 means genuinely excellent. diff --git a/.brv/context-tree/extracted/curated/sub_agents.md b/.brv/context-tree/extracted/curated/sub_agents.md new file mode 100644 index 0000000..2ed1bd8 --- /dev/null +++ b/.brv/context-tree/extracted/curated/sub_agents.md @@ -0,0 +1,20 @@ +--- +title: Sub-agents +summary: Facts about sub-agents +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.222Z' +updatedAt: '2026-05-28T09:43:19.222Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.219Z + +## Facts +- **sub-agents**: If sub-agents are not available in the current environment, complete each assessment sequentially, writing findings to internal notes before proceeding. diff --git a/.brv/context-tree/extracted/curated/tab_labeling.md b/.brv/context-tree/extracted/curated/tab_labeling.md new file mode 100644 index 0000000..df8716a --- /dev/null +++ b/.brv/context-tree/extracted/curated/tab_labeling.md @@ -0,0 +1,20 @@ +--- +title: Tab labeling +summary: Facts about tab labeling +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.230Z' +updatedAt: '2026-05-28T09:43:19.230Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **tab labeling**: Assessment A should label its tab by setting the document title to '[LLM] ' + document.title. diff --git a/.brv/context-tree/extracted/curated/tab_usage.md b/.brv/context-tree/extracted/curated/tab_usage.md new file mode 100644 index 0000000..76ce0ca --- /dev/null +++ b/.brv/context-tree/extracted/curated/tab_usage.md @@ -0,0 +1,20 @@ +--- +title: Tab usage +summary: Facts about tab usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.228Z' +updatedAt: '2026-05-28T09:43:19.228Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **tab usage**: Never reuse an existing tab, even if one is already open at the correct URL. diff --git a/.brv/context-tree/extracted/curated/user.md b/.brv/context-tree/extracted/curated/user.md new file mode 100644 index 0000000..456ce8b --- /dev/null +++ b/.brv/context-tree/extracted/curated/user.md @@ -0,0 +1,21 @@ +--- +title: User +summary: Facts about user +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.274Z' +updatedAt: '2026-05-28T09:43:19.274Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **user**: You can ask me to run these one at a time, all at once, or in any order you prefer. +- **user**: Re-run `/critique` after fixes to see your score improve. diff --git a/.brv/context-tree/extracted/curated/visual_hierarchy_color_usage_information_overload.md b/.brv/context-tree/extracted/curated/visual_hierarchy_color_usage_information_overload.md new file mode 100644 index 0000000..55cccad --- /dev/null +++ b/.brv/context-tree/extracted/curated/visual_hierarchy_color_usage_information_overload.md @@ -0,0 +1,20 @@ +--- +title: Visual hierarchy, color usage, information overload +summary: Facts about visual hierarchy, color usage, information overload +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.270Z' +updatedAt: '2026-05-28T09:43:19.270Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **visual hierarchy, color usage, information overload**: I found problems with visual hierarchy, color usage, and information overload. diff --git a/.brv/context-tree/extracted/curated/visual_overlays.md b/.brv/context-tree/extracted/curated/visual_overlays.md new file mode 100644 index 0000000..9840165 --- /dev/null +++ b/.brv/context-tree/extracted/curated/visual_overlays.md @@ -0,0 +1,20 @@ +--- +title: Visual overlays +summary: Facts about visual_overlays +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:43:19.265Z' +updatedAt: '2026-05-28T09:43:19.265Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T09:43:19.220Z + +## Facts +- **visual_overlays**: Visual overlays are now visible in the [Human] tab in the browser, highlighting the detected issues. diff --git a/.brv/context-tree/extracted/curated_context/codex_and_claude_code_install_commands.md b/.brv/context-tree/extracted/curated_context/codex_and_claude_code_install_commands.md new file mode 100644 index 0000000..9b591e7 --- /dev/null +++ b/.brv/context-tree/extracted/curated_context/codex_and_claude_code_install_commands.md @@ -0,0 +1,24 @@ +--- +title: codex_and_claude_code_install_commands +summary: Facts about codex and claude code install commands +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:07:52.574Z' +updatedAt: '2026-05-28T09:07:52.574Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Document extracted facts for codex and claude code install commands + +**Timestamp:** 2026-05-28T09:07:52.568Z + +## Narrative +### Highlights +Extracted 1 facts for codex and claude code install commands + +## Facts +- **codex and claude code install commands**: The codex and claude code install commands are wrong diff --git a/.brv/context-tree/extracted/curated_context/curated_context_extraction.md b/.brv/context-tree/extracted/curated_context/curated_context_extraction.md new file mode 100644 index 0000000..62fd8a1 --- /dev/null +++ b/.brv/context-tree/extracted/curated_context/curated_context_extraction.md @@ -0,0 +1,38 @@ +--- +title: Curated Context Extraction +summary: Curated factual statements from provided context +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:53:36.112Z' +updatedAt: '2026-05-27T23:53:36.112Z' +--- +## Reason +Store extracted factual statements from RLM curating session + +## Raw Concept +**Task:** +Curate extracted knowledge from provided context + +**Flow:** +extraction -> deduplication -> curation + +**Timestamp:** 2026-05-27T23:53:36.110Z + +## Narrative +### Structure +Aggregated factual statements extracted from context + +### Highlights +landing setup, apps/landing/src/pages/index.astro, 352c0d5, README files, pnpm format, typecheck, commit hooks, risks, unstaged changes + +## Facts +- **landing setup**: Implemented the landing setup snippet fixes. +- **apps/landing/src/pages/index.astro**: Changed files: - apps/landing/src/pages/index.astro +- **352c0d5**: Commit: 352c0d5 fix(landing): correct native agent setup snippets +- **README files**: Read and verified relevant sections in: packages/opencode/README.md, packages/pi/README.md +- **pnpm format**: pnpm format:check passed +- **typecheck**: pnpm --filter @caplets/landing typecheck passed +- **commit hooks**: Commit hook checks also passed +- **risks**: Open risks/questions: None for this task. +- **unstaged changes**: Existing unrelated unstaged changes remain untouched. diff --git a/.brv/context-tree/extracted/curated_extraction/curated_extraction.md b/.brv/context-tree/extracted/curated_extraction/curated_extraction.md new file mode 100644 index 0000000..63ed6a9 --- /dev/null +++ b/.brv/context-tree/extracted/curated_extraction/curated_extraction.md @@ -0,0 +1,44 @@ +--- +title: Curated Extraction +summary: Aggregated factual statements extracted via RLM process +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:25:56.661Z' +updatedAt: '2026-05-28T09:25:56.661Z' +--- +## Reason +Store extracted factual statements from source context + +## Raw Concept +**Task:** +Curate extracted factual statements from source context + +**Changes:** +- Extracted facts via mapExtract + +**Timestamp:** 2026-05-28T09:25:56.659Z + +## Narrative +### Structure +Aggregated factual statements extracted from source + +### Highlights +Subject rAF throttling has 1 facts +Subject route drift has 1 facts +Subject mobile/desktop scroll behavior has 1 facts +Subject SVG decoration has 1 facts +Subject integration tab cue has 1 facts +Subject OKLCH color variables has 1 facts +Subject Impeccable punctuation ban has 1 facts +Subject Claude/Codex install commands has 1 facts + +## Facts +- **rAF throttling**: rAF throttling is implemented for scroll/resize-driven hero `getBoundingClientRect()` calls, with `scroll` and `resize` calling `scheduleHeroProgressUpdate()` which gates updates through one `requestAnimationFrame` at a time. +- **route drift**: Route drift is no longer continuous by default; `.route-backbone` is paused unless `.map-stage.is-route-active` is present, and IntersectionObserver toggles that class based on visibility. +- **mobile/desktop scroll behavior**: Mobile avoids the fixed-height nested scroll panel while desktop keeps a bounded setup card, with desktop using `block-size` plus `overflow: auto` and mobile resetting to `block-size: auto` and `overflow: visible`. +- **SVG decoration**: npm/GitHub SVGs are decorative inside already-labeled links, marked with `aria-hidden="true"` and `focusable="false"`. +- **integration tab cue**: Active integration tab has a non-color cue via inset box-shadow. +- **OKLCH color variables**: Repeated one-off OKLCH colors were promoted to variables for the targeted repeated values. +- **Impeccable punctuation ban**: No newly introduced obvious Impeccable punctuation ban issue such as em dashes was found in the committed files. +- **Claude/Codex install commands**: Claude/Codex install commands were changed rather than merely split for readability; the committed command for both was altered, violating the audit requirement. diff --git a/.brv/context-tree/extracted/facts/accessibility.md b/.brv/context-tree/extracted/facts/accessibility.md new file mode 100644 index 0000000..d858137 --- /dev/null +++ b/.brv/context-tree/extracted/facts/accessibility.md @@ -0,0 +1,20 @@ +--- +title: Accessibility +summary: Facts about accessibility +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.405Z' +updatedAt: '2026-05-28T09:45:40.405Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **accessibility**: Accessibility intent is visible in source. diff --git a/.brv/context-tree/extracted/facts/aesthetic_and_minimalist_design.md b/.brv/context-tree/extracted/facts/aesthetic_and_minimalist_design.md new file mode 100644 index 0000000..95b8600 --- /dev/null +++ b/.brv/context-tree/extracted/facts/aesthetic_and_minimalist_design.md @@ -0,0 +1,20 @@ +--- +title: Aesthetic and minimalist design +summary: Facts about Aesthetic and minimalist design +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.375Z' +updatedAt: '2026-05-28T09:45:40.375Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.334Z + +## Facts +- **Aesthetic and minimalist design**: Aesthetic and minimalist design score is 2. diff --git a/.brv/context-tree/extracted/facts/agent_setup_panel.md b/.brv/context-tree/extracted/facts/agent_setup_panel.md new file mode 100644 index 0000000..0a810c2 --- /dev/null +++ b/.brv/context-tree/extracted/facts/agent_setup_panel.md @@ -0,0 +1,24 @@ +--- +title: .agent-setup-panel +summary: Facts about .agent-setup-panel +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:50:44.578Z' +updatedAt: '2026-05-27T23:50:44.578Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T23:50:44.568Z + +## Narrative +### Highlights +Extracted 1 facts for .agent-setup-panel + +## Facts +- **.agent-setup-panel**: Previous blocker is resolved. `.agent-setup-panel` is included in reveal targets at `apps/landing/src/pages/index.astro:418-420`, reveal CSS initial/visible states at `apps/landing/src/styles/global.css:688-707`, and reduced-motion reveal override at `apps/landing/src/styles/global.css:1324-1331`. diff --git a/.brv/context-tree/extracted/facts/agentsetups.md b/.brv/context-tree/extracted/facts/agentsetups.md new file mode 100644 index 0000000..df31b2f --- /dev/null +++ b/.brv/context-tree/extracted/facts/agentsetups.md @@ -0,0 +1,24 @@ +--- +title: agentSetups +summary: Facts about agentSetups +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:50:44.570Z' +updatedAt: '2026-05-27T23:50:44.570Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T23:50:44.568Z + +## Narrative +### Highlights +Extracted 1 facts for agentSetups + +## Facts +- **agentSetups**: `agentSetups` is centralized and used to render tab labels/panels from data in `apps/landing/src/pages/index.astro:26` and `apps/landing/src/pages/index.astro:267`. diff --git a/.brv/context-tree/extracted/facts/agentsetups_data_centralization.md b/.brv/context-tree/extracted/facts/agentsetups_data_centralization.md new file mode 100644 index 0000000..9884a77 --- /dev/null +++ b/.brv/context-tree/extracted/facts/agentsetups_data_centralization.md @@ -0,0 +1,20 @@ +--- +title: agentSetups data centralization +summary: Facts about agentSetups data centralization +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:48:05.187Z' +updatedAt: '2026-05-27T23:48:05.187Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document factual statements about agentSetups data centralization + +**Timestamp:** 2026-05-27T23:48:05.172Z + +## Facts +- **agentSetups data centralization**: Setup data is centralized in `agentSetups`, and hero client labels derive from it (`apps/landing/src/pages/index.astro:26-88`). diff --git a/.brv/context-tree/extracted/facts/average.md b/.brv/context-tree/extracted/facts/average.md new file mode 100644 index 0000000..7d4ecc3 --- /dev/null +++ b/.brv/context-tree/extracted/facts/average.md @@ -0,0 +1,20 @@ +--- +title: Average +summary: Facts about average +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.391Z' +updatedAt: '2026-05-28T09:45:40.391Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **average**: Average: 2.3 / 4 diff --git a/.brv/context-tree/extracted/facts/average_score.md b/.brv/context-tree/extracted/facts/average_score.md new file mode 100644 index 0000000..96ee575 --- /dev/null +++ b/.brv/context-tree/extracted/facts/average_score.md @@ -0,0 +1,20 @@ +--- +title: Average score +summary: Facts about average_score +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.384Z' +updatedAt: '2026-05-28T09:45:40.384Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **average_score**: Average Nielsen heuristic score is 2.3 out of 4. diff --git a/.brv/context-tree/extracted/facts/cognitive_load_failures.md b/.brv/context-tree/extracted/facts/cognitive_load_failures.md new file mode 100644 index 0000000..0e2e742 --- /dev/null +++ b/.brv/context-tree/extracted/facts/cognitive_load_failures.md @@ -0,0 +1,20 @@ +--- +title: Cognitive load failures +summary: Facts about cognitive_load_failures +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.387Z' +updatedAt: '2026-05-28T09:45:40.387Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **cognitive_load_failures**: Cognitive load failure count is 7 notable load failures. diff --git a/.brv/context-tree/extracted/facts/commits_0e56e8f_86f9679.md b/.brv/context-tree/extracted/facts/commits_0e56e8f_86f9679.md new file mode 100644 index 0000000..4473894 --- /dev/null +++ b/.brv/context-tree/extracted/facts/commits_0e56e8f_86f9679.md @@ -0,0 +1,24 @@ +--- +title: commits_0e56e8f_86f9679 +summary: Facts about commits_0e56e8f_86f9679 +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:50:44.587Z' +updatedAt: '2026-05-27T23:50:44.587Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T23:50:44.568Z + +## Narrative +### Highlights +Extracted 1 facts for commits_0e56e8f_86f9679 + +## Facts +- **commits_0e56e8f_86f9679**: No exact issues found in the committed changes for commits `0e56e8f` and `86f9679`. diff --git a/.brv/context-tree/extracted/facts/consistency_and_standards.md b/.brv/context-tree/extracted/facts/consistency_and_standards.md new file mode 100644 index 0000000..544af59 --- /dev/null +++ b/.brv/context-tree/extracted/facts/consistency_and_standards.md @@ -0,0 +1,20 @@ +--- +title: Consistency and standards +summary: Facts about Consistency and standards +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.352Z' +updatedAt: '2026-05-28T09:45:40.352Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.334Z + +## Facts +- **Consistency and standards**: Consistency and standards score is 3. diff --git a/.brv/context-tree/extracted/facts/css_reveal_rules_update.md b/.brv/context-tree/extracted/facts/css_reveal_rules_update.md new file mode 100644 index 0000000..1ae6b78 --- /dev/null +++ b/.brv/context-tree/extracted/facts/css_reveal_rules_update.md @@ -0,0 +1,20 @@ +--- +title: CSS reveal rules update +summary: Facts about CSS reveal rules update +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:48:05.210Z' +updatedAt: '2026-05-27T23:48:05.210Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document factual statements about CSS reveal rules update + +**Timestamp:** 2026-05-27T23:48:05.172Z + +## Facts +- **CSS reveal rules update**: To fix, add `.agent-setup-panel` to the base hidden state and `.agent-setup-panel.is-visible` reveal rules, plus reduced-motion visibility if needed. diff --git a/.brv/context-tree/extracted/facts/current_content_audience.md b/.brv/context-tree/extracted/facts/current_content_audience.md new file mode 100644 index 0000000..268d09d --- /dev/null +++ b/.brv/context-tree/extracted/facts/current_content_audience.md @@ -0,0 +1,20 @@ +--- +title: Current content audience +summary: Facts about current content audience +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.428Z' +updatedAt: '2026-05-28T09:45:40.428Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **current content audience**: The current content feels best for people already aware of MCP and coding agents. diff --git a/.brv/context-tree/extracted/facts/dark_integration_and_terminal_blocks.md b/.brv/context-tree/extracted/facts/dark_integration_and_terminal_blocks.md new file mode 100644 index 0000000..ba63815 --- /dev/null +++ b/.brv/context-tree/extracted/facts/dark_integration_and_terminal_blocks.md @@ -0,0 +1,20 @@ +--- +title: Dark integration and terminal blocks +summary: Facts about dark integration and terminal blocks +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.418Z' +updatedAt: '2026-05-28T09:45:40.418Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **dark integration and terminal blocks**: Dark integration and terminal blocks edge toward the “neon devtool dark” anti-reference, although not fully. diff --git a/.brv/context-tree/extracted/facts/default_panel.md b/.brv/context-tree/extracted/facts/default_panel.md new file mode 100644 index 0000000..4f40a67 --- /dev/null +++ b/.brv/context-tree/extracted/facts/default_panel.md @@ -0,0 +1,24 @@ +--- +title: default_panel +summary: Facts about default_panel +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:50:44.574Z' +updatedAt: '2026-05-27T23:50:44.574Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T23:50:44.568Z + +## Narrative +### Highlights +Extracted 1 facts for default_panel + +## Facts +- **default_panel**: Default selected panel renders initially via `hidden={index !== 0}` at `apps/landing/src/pages/index.astro:289`. diff --git a/.brv/context-tree/extracted/facts/error_prevention.md b/.brv/context-tree/extracted/facts/error_prevention.md new file mode 100644 index 0000000..f696580 --- /dev/null +++ b/.brv/context-tree/extracted/facts/error_prevention.md @@ -0,0 +1,20 @@ +--- +title: Error prevention +summary: Facts about Error prevention +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.356Z' +updatedAt: '2026-05-28T09:45:40.356Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.334Z + +## Facts +- **Error prevention**: Error prevention score is 2. diff --git a/.brv/context-tree/extracted/facts/extracted_facts_from_context.md b/.brv/context-tree/extracted/facts/extracted_facts_from_context.md new file mode 100644 index 0000000..25656f1 --- /dev/null +++ b/.brv/context-tree/extracted/facts/extracted_facts_from_context.md @@ -0,0 +1,46 @@ +--- +title: Extracted Facts from Context +summary: Aggregated factual statements extracted from given context +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:38:45.004Z' +updatedAt: '2026-05-27T23:55:14.308Z' +--- +## Reason +Store facts extracted via RLM single-pass extraction + +## Raw Concept +**Task:** +Curate extracted facts from provided context + +**Changes:** +- Extracted and deduplicated factual statements + +**Flow:** +extraction -> deduplication -> grouping -> upsert + +**Timestamp:** 2026-05-27T23:55:14.296Z + +## Narrative +### Structure +Aggregated factual statements extracted from the source context. + +### Highlights +tabbed agent setup card, 0e56e8f, 86f9679, 352c0d5, apps/landing/src/pages/index.astro, ... + +## Facts +- **tabbed agent setup card**: Implemented the tabbed agent setup card via subagents, with Impeccable product-design review applied. +- **0e56e8f**: Commit 0e56e8f feat(landing): add agent setup tabs. +- **86f9679**: Commit 86f9679 fix(landing): reveal agent setup panels. +- **352c0d5**: Commit 352c0d5 fix(landing): correct native agent setup snippets. +- **apps/landing/src/pages/index.astro**: Changed file apps/landing/src/pages/index.astro. +- **apps/landing/src/styles/global.css**: Changed file apps/landing/src/styles/global.css. +- **docs/plans/2026-05-27-agent-card-setup-tabs.md**: Changed file docs/plans/2026-05-27-agent-card-setup-tabs.md. +- **spec compliance**: Spec compliance review: approved. +- **code quality**: Code quality review: approved after correcting OpenCode/Pi snippets against their package READMEs. +- **pnpm format:check**: Fresh verification passed: pnpm format:check. +- **pnpm lint**: Fresh verification passed: pnpm lint. +- **typecheck**: Fresh verification passed: pnpm --filter @caplets/landing typecheck. +- **build**: Fresh verification passed: pnpm --filter @caplets/landing build. +- **working tree**: The working tree still has pre-existing unrelated unstaged/untracked changes (.brv/*, deleted apps/landing/.vscode/*, screenshots, and unstaged landing file diffs) that were left untouched. diff --git a/.brv/context-tree/extracted/facts/flexibility_and_efficiency.md b/.brv/context-tree/extracted/facts/flexibility_and_efficiency.md new file mode 100644 index 0000000..159de63 --- /dev/null +++ b/.brv/context-tree/extracted/facts/flexibility_and_efficiency.md @@ -0,0 +1,20 @@ +--- +title: Flexibility and efficiency +summary: Facts about Flexibility and efficiency +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.369Z' +updatedAt: '2026-05-28T09:45:40.369Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.334Z + +## Facts +- **Flexibility and efficiency**: Flexibility and efficiency score is 2. diff --git a/.brv/context-tree/extracted/facts/header_icon_only_npm_github_links.md b/.brv/context-tree/extracted/facts/header_icon_only_npm_github_links.md new file mode 100644 index 0000000..ad4a83a --- /dev/null +++ b/.brv/context-tree/extracted/facts/header_icon_only_npm_github_links.md @@ -0,0 +1,20 @@ +--- +title: Header icon-only npm/GitHub links +summary: Facts about header icon-only npm/GitHub links +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.414Z' +updatedAt: '2026-05-28T09:45:40.414Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **header icon-only npm/GitHub links**: Header icon-only npm/GitHub links have labels, good. diff --git a/.brv/context-tree/extracted/facts/help_and_documentation.md b/.brv/context-tree/extracted/facts/help_and_documentation.md new file mode 100644 index 0000000..0ac148d --- /dev/null +++ b/.brv/context-tree/extracted/facts/help_and_documentation.md @@ -0,0 +1,20 @@ +--- +title: Help and documentation +summary: Facts about Help and documentation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.382Z' +updatedAt: '2026-05-28T09:45:40.382Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **Help and documentation**: Help and documentation score is 2. diff --git a/.brv/context-tree/extracted/facts/help_users_recognize_diagnose_recover.md b/.brv/context-tree/extracted/facts/help_users_recognize_diagnose_recover.md new file mode 100644 index 0000000..9f1ab0d --- /dev/null +++ b/.brv/context-tree/extracted/facts/help_users_recognize_diagnose_recover.md @@ -0,0 +1,20 @@ +--- +title: Help users recognize, diagnose, recover +summary: Facts about Help users recognize, diagnose, recover +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.380Z' +updatedAt: '2026-05-28T09:45:40.380Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **Help users recognize, diagnose, recover**: Help users recognize, diagnose, recover score is 1. diff --git a/.brv/context-tree/extracted/facts/hero_headline.md b/.brv/context-tree/extracted/facts/hero_headline.md new file mode 100644 index 0000000..347de3b --- /dev/null +++ b/.brv/context-tree/extracted/facts/hero_headline.md @@ -0,0 +1,20 @@ +--- +title: Hero headline +summary: Facts about hero headline +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.395Z' +updatedAt: '2026-05-28T09:45:40.395Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **hero headline**: Hero headline is too abstract: “Give every tool stack a map”. diff --git a/.brv/context-tree/extracted/facts/hero_metrics.md b/.brv/context-tree/extracted/facts/hero_metrics.md new file mode 100644 index 0000000..597b3fd --- /dev/null +++ b/.brv/context-tree/extracted/facts/hero_metrics.md @@ -0,0 +1,20 @@ +--- +title: Hero metrics +summary: Facts about hero metrics +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.407Z' +updatedAt: '2026-05-28T09:45:40.407Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **hero metrics**: No hero metrics. diff --git a/.brv/context-tree/extracted/facts/install_command.md b/.brv/context-tree/extracted/facts/install_command.md new file mode 100644 index 0000000..76a5d7e --- /dev/null +++ b/.brv/context-tree/extracted/facts/install_command.md @@ -0,0 +1,21 @@ +--- +title: Install command +summary: Facts about install command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.398Z' +updatedAt: '2026-05-28T09:45:40.398Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **install command**: Install commands may conflict with repo conventions or user expectation: page uses `pnpm add -g caplets`; many users expect `npm install -g caplets`. +- **install command**: Fix install command inconsistency: `pnpm add -g caplets` versus `npm install -g caplets` creates immediate doubt. diff --git a/.brv/context-tree/extracted/facts/install_command_rendering.md b/.brv/context-tree/extracted/facts/install_command_rendering.md new file mode 100644 index 0000000..a3caef0 --- /dev/null +++ b/.brv/context-tree/extracted/facts/install_command_rendering.md @@ -0,0 +1,20 @@ +--- +title: install command rendering +summary: Facts about install command rendering +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:48:05.189Z' +updatedAt: '2026-05-27T23:48:05.189Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document factual statements about install command rendering + +**Timestamp:** 2026-05-27T23:48:05.172Z + +## Facts +- **install command rendering**: Each agent has an install command and config snippet rendered from the centralized data (`apps/landing/src/pages/index.astro:291-300`). diff --git a/.brv/context-tree/extracted/facts/integrations_card_structure.md b/.brv/context-tree/extracted/facts/integrations_card_structure.md new file mode 100644 index 0000000..365c58c --- /dev/null +++ b/.brv/context-tree/extracted/facts/integrations_card_structure.md @@ -0,0 +1,20 @@ +--- +title: integrations card structure +summary: Facts about integrations card structure +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:48:05.177Z' +updatedAt: '2026-05-27T23:48:05.177Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document factual statements about integrations card structure + +**Timestamp:** 2026-05-27T23:48:05.172Z + +## Facts +- **integrations card structure**: Landing integrations card remains structurally recognizable: same `.integrations` section heading/card shell is preserved, with tabbed setup content added inside it (`apps/landing/src/pages/index.astro:260-305`). diff --git a/.brv/context-tree/extracted/facts/load_failures.md b/.brv/context-tree/extracted/facts/load_failures.md new file mode 100644 index 0000000..40b90a8 --- /dev/null +++ b/.brv/context-tree/extracted/facts/load_failures.md @@ -0,0 +1,20 @@ +--- +title: Load failures +summary: Facts about load failures +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.394Z' +updatedAt: '2026-05-28T09:45:40.394Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **load failures**: 7 notable load failures diff --git a/.brv/context-tree/extracted/facts/match_between_system_and_real_world.md b/.brv/context-tree/extracted/facts/match_between_system_and_real_world.md new file mode 100644 index 0000000..a512eb6 --- /dev/null +++ b/.brv/context-tree/extracted/facts/match_between_system_and_real_world.md @@ -0,0 +1,20 @@ +--- +title: Match between system and real world +summary: Facts about Match between system and real world +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.347Z' +updatedAt: '2026-05-28T09:45:40.347Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.334Z + +## Facts +- **Match between system and real world**: Match between system and real world score is 3. diff --git a/.brv/context-tree/extracted/facts/newer_users.md b/.brv/context-tree/extracted/facts/newer_users.md new file mode 100644 index 0000000..9ff229f --- /dev/null +++ b/.brv/context-tree/extracted/facts/newer_users.md @@ -0,0 +1,20 @@ +--- +title: Newer users +summary: Facts about newer users +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.429Z' +updatedAt: '2026-05-28T09:45:40.429Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **newer users**: Newer users may need one clearer bridge sentence. diff --git a/.brv/context-tree/extracted/facts/npm.md b/.brv/context-tree/extracted/facts/npm.md new file mode 100644 index 0000000..9d8d700 --- /dev/null +++ b/.brv/context-tree/extracted/facts/npm.md @@ -0,0 +1,20 @@ +--- +title: Npm +summary: Facts about npm +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.390Z' +updatedAt: '2026-05-28T09:45:40.390Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **npm**: npm links exist, install steps exist. diff --git a/.brv/context-tree/extracted/facts/opencode_configuration.md b/.brv/context-tree/extracted/facts/opencode_configuration.md new file mode 100644 index 0000000..f6fd1cb --- /dev/null +++ b/.brv/context-tree/extracted/facts/opencode_configuration.md @@ -0,0 +1,24 @@ +--- +title: OpenCode configuration +summary: Facts about OpenCode configuration +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:52:05.216Z' +updatedAt: '2026-05-27T23:52:05.216Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Extracted factual statements + +**Timestamp:** 2026-05-27T23:52:05.208Z + +## Narrative +### Structure +Collected facts grouped by subject + +## Facts +- **OpenCode configuration**: The landing page tells users to configure OpenCode with an MCP-style "mcp": { ... "command": ["caplets", "serve"] } block after installing @caplets/opencode. diff --git a/.brv/context-tree/extracted/facts/opencode_readme.md b/.brv/context-tree/extracted/facts/opencode_readme.md new file mode 100644 index 0000000..fc2685b --- /dev/null +++ b/.brv/context-tree/extracted/facts/opencode_readme.md @@ -0,0 +1,24 @@ +--- +title: OpenCode README +summary: Facts about OpenCode README +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:52:05.218Z' +updatedAt: '2026-05-27T23:52:05.218Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Extracted factual statements + +**Timestamp:** 2026-05-27T23:52:05.208Z + +## Narrative +### Structure +Collected facts grouped by subject + +## Facts +- **OpenCode README**: packages/opencode/README.md states that @caplets/opencode is a native OpenCode plugin, does not start the MCP server, and is configured as { "plugin": ["@caplets/opencode"] }. diff --git a/.brv/context-tree/extracted/facts/opencode_setup_snippet.md b/.brv/context-tree/extracted/facts/opencode_setup_snippet.md new file mode 100644 index 0000000..b8a4f27 --- /dev/null +++ b/.brv/context-tree/extracted/facts/opencode_setup_snippet.md @@ -0,0 +1,24 @@ +--- +title: OpenCode setup snippet +summary: Facts about OpenCode setup snippet +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:52:05.214Z' +updatedAt: '2026-05-27T23:52:05.214Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Extracted factual statements + +**Timestamp:** 2026-05-27T23:52:05.208Z + +## Narrative +### Structure +Collected facts grouped by subject + +## Facts +- **OpenCode setup snippet**: The OpenCode setup snippet is product misinformation. diff --git a/.brv/context-tree/extracted/facts/pi_extension.md b/.brv/context-tree/extracted/facts/pi_extension.md new file mode 100644 index 0000000..7b90728 --- /dev/null +++ b/.brv/context-tree/extracted/facts/pi_extension.md @@ -0,0 +1,24 @@ +--- +title: Pi extension +summary: Facts about Pi extension +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:52:05.239Z' +updatedAt: '2026-05-27T23:52:05.239Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Extracted factual statements + +**Timestamp:** 2026-05-27T23:52:05.208Z + +## Narrative +### Structure +Collected facts grouped by subject + +## Facts +- **Pi extension**: packages/pi/README.md says the extension reads existing Caplets config and does not create or mutate Pi config files. diff --git a/.brv/context-tree/extracted/facts/pi_installation.md b/.brv/context-tree/extracted/facts/pi_installation.md new file mode 100644 index 0000000..caacb31 --- /dev/null +++ b/.brv/context-tree/extracted/facts/pi_installation.md @@ -0,0 +1,24 @@ +--- +title: Pi installation +summary: Facts about Pi installation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:52:05.238Z' +updatedAt: '2026-05-27T23:52:05.238Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Extracted factual statements + +**Timestamp:** 2026-05-27T23:52:05.208Z + +## Narrative +### Structure +Collected facts grouped by subject + +## Facts +- **Pi installation**: The page shows "pi update && npm install -g @caplets/pi" and a config snippet with a top-level "caplets" object, but packages/pi/README.md documents installation as "pi install npm:@caplets/pi" and settings as "{ \"packages\": [\"npm:@caplets/pi\"] }". diff --git a/.brv/context-tree/extracted/facts/pi_setup_snippet.md b/.brv/context-tree/extracted/facts/pi_setup_snippet.md new file mode 100644 index 0000000..ce8bc7c --- /dev/null +++ b/.brv/context-tree/extracted/facts/pi_setup_snippet.md @@ -0,0 +1,24 @@ +--- +title: Pi setup snippet +summary: Facts about Pi setup snippet +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:52:05.229Z' +updatedAt: '2026-05-27T23:52:05.229Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Extracted factual statements + +**Timestamp:** 2026-05-27T23:52:05.208Z + +## Narrative +### Structure +Collected facts grouped by subject + +## Facts +- **Pi setup snippet**: The Pi setup snippet is product misinformation. diff --git a/.brv/context-tree/extracted/facts/pill_tab_semantics.md b/.brv/context-tree/extracted/facts/pill_tab_semantics.md new file mode 100644 index 0000000..9c584e6 --- /dev/null +++ b/.brv/context-tree/extracted/facts/pill_tab_semantics.md @@ -0,0 +1,20 @@ +--- +title: pill tab semantics +summary: Facts about pill tab semantics +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:48:05.191Z' +updatedAt: '2026-05-27T23:48:05.191Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document factual statements about pill tab semantics + +**Timestamp:** 2026-05-27T23:48:05.172Z + +## Facts +- **pill tab semantics**: Pills use tab semantics with `role="tablist"`, `role="tab"`, `aria-selected`, `aria-controls`, `role="tabpanel"`, and `aria-labelledby` (`apps/landing/src/pages/index.astro:265-289`). diff --git a/.brv/context-tree/extracted/facts/product_specificity.md b/.brv/context-tree/extracted/facts/product_specificity.md new file mode 100644 index 0000000..3cac8b8 --- /dev/null +++ b/.brv/context-tree/extracted/facts/product_specificity.md @@ -0,0 +1,20 @@ +--- +title: Product specificity +summary: Facts about product specificity +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.403Z' +updatedAt: '2026-05-28T09:45:40.403Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **product specificity**: Product specificity is good. diff --git a/.brv/context-tree/extracted/facts/read_the_repo_wording.md b/.brv/context-tree/extracted/facts/read_the_repo_wording.md new file mode 100644 index 0000000..60686d9 --- /dev/null +++ b/.brv/context-tree/extracted/facts/read_the_repo_wording.md @@ -0,0 +1,20 @@ +--- +title: '`Read the repo` wording' +summary: Facts about `Read the repo` wording +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.415Z' +updatedAt: '2026-05-28T09:45:40.415Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **`Read the repo` wording**: `Read the repo` is more developer-authentic than “Learn more.” diff --git a/.brv/context-tree/extracted/facts/recognition_rather_than_recall.md b/.brv/context-tree/extracted/facts/recognition_rather_than_recall.md new file mode 100644 index 0000000..109a91f --- /dev/null +++ b/.brv/context-tree/extracted/facts/recognition_rather_than_recall.md @@ -0,0 +1,20 @@ +--- +title: Recognition rather than recall +summary: Facts about Recognition rather than recall +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.359Z' +updatedAt: '2026-05-28T09:45:40.359Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.334Z + +## Facts +- **Recognition rather than recall**: Recognition rather than recall score is 3. diff --git a/.brv/context-tree/extracted/facts/reveal_functionality.md b/.brv/context-tree/extracted/facts/reveal_functionality.md new file mode 100644 index 0000000..b3ef171 --- /dev/null +++ b/.brv/context-tree/extracted/facts/reveal_functionality.md @@ -0,0 +1,20 @@ +--- +title: reveal functionality +summary: Facts about reveal functionality +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:48:05.208Z' +updatedAt: '2026-05-27T23:48:05.208Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document factual statements about reveal functionality + +**Timestamp:** 2026-05-27T23:48:05.172Z + +## Facts +- **reveal functionality**: Adding `is-visible` to setup panels has no styling effect, so the reveal selector update is functionally incomplete against the plan/spec requirement. diff --git a/.brv/context-tree/extracted/facts/reveal_selector_implementation.md b/.brv/context-tree/extracted/facts/reveal_selector_implementation.md new file mode 100644 index 0000000..c7bb4b3 --- /dev/null +++ b/.brv/context-tree/extracted/facts/reveal_selector_implementation.md @@ -0,0 +1,20 @@ +--- +title: reveal selector implementation +summary: Facts about reveal selector implementation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:48:05.206Z' +updatedAt: '2026-05-27T23:48:05.206Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document factual statements about reveal selector implementation + +**Timestamp:** 2026-05-27T23:48:05.172Z + +## Facts +- **reveal selector implementation**: Reveal selector update is incomplete: the script now observes `.agent-setup-panel` (`apps/landing/src/pages/index.astro:418-419`), but CSS reveal rules do not include `.agent-setup-panel`, only `.integration-pill` and other existing targets (`apps/landing/src/styles/global.css:690-705`). diff --git a/.brv/context-tree/extracted/facts/review_scope.md b/.brv/context-tree/extracted/facts/review_scope.md new file mode 100644 index 0000000..b4c48bb --- /dev/null +++ b/.brv/context-tree/extracted/facts/review_scope.md @@ -0,0 +1,24 @@ +--- +title: review scope +summary: Facts about review scope +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:52:05.241Z' +updatedAt: '2026-05-27T23:52:05.241Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Extracted factual statements + +**Timestamp:** 2026-05-27T23:52:05.208Z + +## Narrative +### Structure +Collected facts grouped by subject + +## Facts +- **review scope**: The review was performed on committed changes only via git diff 0e56e8f^..86f9679; unrelated unstaged/untracked worktree changes were ignored. diff --git a/.brv/context-tree/extracted/facts/safety_claims.md b/.brv/context-tree/extracted/facts/safety_claims.md new file mode 100644 index 0000000..07e448e --- /dev/null +++ b/.brv/context-tree/extracted/facts/safety_claims.md @@ -0,0 +1,20 @@ +--- +title: Safety claims +summary: Facts about safety claims +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.400Z' +updatedAt: '2026-05-28T09:45:40.400Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **safety claims**: Safety claims lack proof detail. diff --git a/.brv/context-tree/extracted/facts/setup_panel.md b/.brv/context-tree/extracted/facts/setup_panel.md new file mode 100644 index 0000000..3c779e4 --- /dev/null +++ b/.brv/context-tree/extracted/facts/setup_panel.md @@ -0,0 +1,24 @@ +--- +title: setup_panel +summary: Facts about setup_panel +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:50:44.580Z' +updatedAt: '2026-05-27T23:50:44.580Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T23:50:44.568Z + +## Narrative +### Highlights +Extracted 1 facts for setup_panel + +## Facts +- **setup_panel**: Setup panel/code styling and responsive stacking are present at `apps/landing/src/styles/global.css:940-1001` and `apps/landing/src/styles/global.css:1211-1217`. diff --git a/.brv/context-tree/extracted/facts/setup_panels.md b/.brv/context-tree/extracted/facts/setup_panels.md new file mode 100644 index 0000000..bded187 --- /dev/null +++ b/.brv/context-tree/extracted/facts/setup_panels.md @@ -0,0 +1,24 @@ +--- +title: setup panels +summary: Facts about setup panels +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:52:05.213Z' +updatedAt: '2026-05-27T23:52:05.213Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Extracted factual statements + +**Timestamp:** 2026-05-27T23:52:05.208Z + +## Narrative +### Structure +Collected facts grouped by subject + +## Facts +- **setup panels**: CSS is focused and responsive; setup panels stack on narrow screens at apps/landing/src/styles/global.css:979-1043 and :1211-1213. diff --git a/.brv/context-tree/extracted/facts/site_animation_code.md b/.brv/context-tree/extracted/facts/site_animation_code.md new file mode 100644 index 0000000..22bddd9 --- /dev/null +++ b/.brv/context-tree/extracted/facts/site_animation_code.md @@ -0,0 +1,20 @@ +--- +title: Site animation code +summary: Facts about site animation code +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.427Z' +updatedAt: '2026-05-28T09:45:40.427Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **site animation code**: The site has a lot of animation code for a product whose brand asks for quiet confidence. diff --git a/.brv/context-tree/extracted/facts/status_dot.md b/.brv/context-tree/extracted/facts/status_dot.md new file mode 100644 index 0000000..60416c8 --- /dev/null +++ b/.brv/context-tree/extracted/facts/status_dot.md @@ -0,0 +1,20 @@ +--- +title: '`status-dot`' +summary: Facts about `status-dot` +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.425Z' +updatedAt: '2026-05-28T09:45:40.425Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **`status-dot`**: `status-dot` is color-only and decorative unless paired with meaningful text. diff --git a/.brv/context-tree/extracted/facts/styling_alignment.md b/.brv/context-tree/extracted/facts/styling_alignment.md new file mode 100644 index 0000000..2747b11 --- /dev/null +++ b/.brv/context-tree/extracted/facts/styling_alignment.md @@ -0,0 +1,20 @@ +--- +title: styling alignment +summary: Facts about styling alignment +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:48:05.195Z' +updatedAt: '2026-05-27T23:48:05.195Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document factual statements about styling alignment + +**Timestamp:** 2026-05-27T23:48:05.172Z + +## Facts +- **styling alignment**: Styling is restrained and product-aligned: dark integration card retained, selected pill state is clear, and command/config blocks use monospace (`apps/landing/src/styles/global.css:888-1011`). diff --git a/.brv/context-tree/extracted/facts/tab_implementation.md b/.brv/context-tree/extracted/facts/tab_implementation.md new file mode 100644 index 0000000..a78568e --- /dev/null +++ b/.brv/context-tree/extracted/facts/tab_implementation.md @@ -0,0 +1,20 @@ +--- +title: Tab implementation +summary: Facts about tab implementation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.409Z' +updatedAt: '2026-05-28T09:45:40.409Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.335Z + +## Facts +- **tab implementation**: The tab implementation is stronger than typical landing-page tabs. diff --git a/.brv/context-tree/extracted/facts/tab_keyboard_navigation.md b/.brv/context-tree/extracted/facts/tab_keyboard_navigation.md new file mode 100644 index 0000000..d06db15 --- /dev/null +++ b/.brv/context-tree/extracted/facts/tab_keyboard_navigation.md @@ -0,0 +1,20 @@ +--- +title: tab keyboard navigation +summary: Facts about tab keyboard navigation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:48:05.192Z' +updatedAt: '2026-05-27T23:48:05.192Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document factual statements about tab keyboard navigation + +**Timestamp:** 2026-05-27T23:48:05.172Z + +## Facts +- **tab keyboard navigation**: Tab switching supports click and ArrowLeft/ArrowRight/Home/End keyboard navigation (`apps/landing/src/pages/index.astro:343-388`). diff --git a/.brv/context-tree/extracted/facts/tab_markup.md b/.brv/context-tree/extracted/facts/tab_markup.md new file mode 100644 index 0000000..602017c --- /dev/null +++ b/.brv/context-tree/extracted/facts/tab_markup.md @@ -0,0 +1,24 @@ +--- +title: tab markup +summary: Facts about tab markup +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:52:05.210Z' +updatedAt: '2026-05-27T23:52:05.210Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Extracted factual statements + +**Timestamp:** 2026-05-27T23:52:05.208Z + +## Narrative +### Structure +Collected facts grouped by subject + +## Facts +- **tab markup**: The tab markup is broadly accessible with role="tablist", role="tab", aria-selected, aria-controls, role="tabpanel", and keyboard navigation implemented in apps/landing/src/pages/index.astro:268-305 and :342-390. diff --git a/.brv/context-tree/extracted/facts/tab_semantics.md b/.brv/context-tree/extracted/facts/tab_semantics.md new file mode 100644 index 0000000..5a69a26 --- /dev/null +++ b/.brv/context-tree/extracted/facts/tab_semantics.md @@ -0,0 +1,24 @@ +--- +title: tab_semantics +summary: Facts about tab_semantics +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:50:44.572Z' +updatedAt: '2026-05-27T23:50:44.572Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T23:50:44.568Z + +## Narrative +### Highlights +Extracted 1 facts for tab_semantics + +## Facts +- **tab_semantics**: Required tab semantics are present: `role="tablist"` at `apps/landing/src/pages/index.astro:266`, tab buttons at `:268-278`, and tab panels at `:283-289`. diff --git a/.brv/context-tree/extracted/facts/tab_switching.md b/.brv/context-tree/extracted/facts/tab_switching.md new file mode 100644 index 0000000..067fd72 --- /dev/null +++ b/.brv/context-tree/extracted/facts/tab_switching.md @@ -0,0 +1,24 @@ +--- +title: tab_switching +summary: Facts about tab_switching +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:50:44.576Z' +updatedAt: '2026-05-27T23:50:44.576Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T23:50:44.568Z + +## Narrative +### Highlights +Extracted 1 facts for tab_switching + +## Facts +- **tab_switching**: Client-side tab switching updates `aria-selected`, `tabIndex`, and panel `hidden` state at `apps/landing/src/pages/index.astro:343-352`, with click and keyboard handling at `:358-386`. diff --git a/.brv/context-tree/extracted/facts/user_control_and_freedom.md b/.brv/context-tree/extracted/facts/user_control_and_freedom.md new file mode 100644 index 0000000..5ae9f14 --- /dev/null +++ b/.brv/context-tree/extracted/facts/user_control_and_freedom.md @@ -0,0 +1,20 @@ +--- +title: User control and freedom +summary: Facts about User control and freedom +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.350Z' +updatedAt: '2026-05-28T09:45:40.350Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.334Z + +## Facts +- **User control and freedom**: User control and freedom score is 2. diff --git a/.brv/context-tree/extracted/facts/visibility_of_system_status.md b/.brv/context-tree/extracted/facts/visibility_of_system_status.md new file mode 100644 index 0000000..5b1d8d8 --- /dev/null +++ b/.brv/context-tree/extracted/facts/visibility_of_system_status.md @@ -0,0 +1,20 @@ +--- +title: Visibility of system status +summary: Facts about Visibility of system status +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:40.341Z' +updatedAt: '2026-05-28T09:45:40.341Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T09:45:40.334Z + +## Facts +- **Visibility of system status**: Visibility of system status score is 3. diff --git a/.brv/context-tree/facts/conventions/agent_card.md b/.brv/context-tree/facts/conventions/agent_card.md new file mode 100644 index 0000000..1718a43 --- /dev/null +++ b/.brv/context-tree/facts/conventions/agent_card.md @@ -0,0 +1,24 @@ +--- +title: agent card +summary: Facts about agent card +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:17:13.646Z' +updatedAt: '2026-05-28T09:02:34.793Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of agent card facts + +## Facts +- **agent card**: The agent card should have a fixed height so that when a different agent is selected, the card doesn't shift. diff --git a/.brv/context-tree/facts/conventions/agent_setup_panels.md b/.brv/context-tree/facts/conventions/agent_setup_panels.md new file mode 100644 index 0000000..5068ccd --- /dev/null +++ b/.brv/context-tree/facts/conventions/agent_setup_panels.md @@ -0,0 +1,24 @@ +--- +title: agent setup panels +summary: Facts about agent setup panels +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.800Z' +updatedAt: '2026-05-28T09:02:34.800Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of agent setup panels facts + +## Facts +- **agent setup panels**: Adjusted the agent setup panels to a fixed responsive height so switching tabs no longer shifts the card/page layout. diff --git a/.brv/context-tree/facts/conventions/agent_setup_tab.md b/.brv/context-tree/facts/conventions/agent_setup_tab.md new file mode 100644 index 0000000..2b8c5cf --- /dev/null +++ b/.brv/context-tree/facts/conventions/agent_setup_tab.md @@ -0,0 +1,26 @@ +--- +title: Agent Setup Tab +summary: Facts about Agent setup tab +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:32:37.372Z' +updatedAt: '2026-05-28T09:32:37.372Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document facts for Agent setup tab + +**Timestamp:** 2026-05-28T09:32:37.363Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Extracted 1 facts for Agent setup tab + +## Facts +- **Agent setup tab**: Agent setup tab logic and panels remain coherent in apps/landing/src/pages/index.astro:340-461, including click, keyboard navigation, and hidden panel toggling. diff --git a/.brv/context-tree/facts/conventions/assistant_fact.md b/.brv/context-tree/facts/conventions/assistant_fact.md new file mode 100644 index 0000000..6a3ce02 --- /dev/null +++ b/.brv/context-tree/facts/conventions/assistant_fact.md @@ -0,0 +1,26 @@ +--- +title: assistant fact +summary: The assistant is using Subagent-Driven Development to implement all audit fixes continuously. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.322Z' +updatedAt: '2026-05-28T09:33:34.322Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +The assistant is using Subagent-Driven Development to implement all audit fixes continuously. + +## Facts +- **assistant**: The assistant is using Subagent-Driven Development to implement all audit fixes continuously. diff --git a/.brv/context-tree/facts/conventions/audit_spec_compliance_fact.md b/.brv/context-tree/facts/conventions/audit_spec_compliance_fact.md new file mode 100644 index 0000000..650c423 --- /dev/null +++ b/.brv/context-tree/facts/conventions/audit_spec_compliance_fact.md @@ -0,0 +1,26 @@ +--- +title: audit/spec compliance fact +summary: Audit/spec compliance was approved. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.348Z' +updatedAt: '2026-05-28T09:33:34.348Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Audit/spec compliance was approved. + +## Facts +- **audit/spec compliance**: Audit/spec compliance was approved. diff --git a/.brv/context-tree/facts/conventions/border_usage.md b/.brv/context-tree/facts/conventions/border_usage.md new file mode 100644 index 0000000..320bf93 --- /dev/null +++ b/.brv/context-tree/facts/conventions/border_usage.md @@ -0,0 +1,24 @@ +--- +title: border usage +summary: Facts about border usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.786Z' +updatedAt: '2026-05-28T09:02:34.786Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of border usage facts + +## Facts +- **border usage**: Side‑stripe borders greater than 1 px as colored accents on cards, list items, callouts, or alerts are absolutely banned. diff --git a/.brv/context-tree/facts/conventions/build.md b/.brv/context-tree/facts/conventions/build.md new file mode 100644 index 0000000..92c52de --- /dev/null +++ b/.brv/context-tree/facts/conventions/build.md @@ -0,0 +1,24 @@ +--- +title: build +summary: Facts about build +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.805Z' +updatedAt: '2026-05-28T09:02:34.805Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of build facts + +## Facts +- **build**: Verification passed: `pnpm --filter @caplets/landing build`. diff --git a/.brv/context-tree/facts/conventions/build_fact.md b/.brv/context-tree/facts/conventions/build_fact.md new file mode 100644 index 0000000..78768e0 --- /dev/null +++ b/.brv/context-tree/facts/conventions/build_fact.md @@ -0,0 +1,26 @@ +--- +title: build fact +summary: Landing-specific verification passed for pnpm --filter @caplets/landing build. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.382Z' +updatedAt: '2026-05-28T09:33:34.382Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Landing-specific verification passed for pnpm --filter @caplets/landing build. + +## Facts +- **build**: Landing-specific verification passed for pnpm --filter @caplets/landing build. diff --git a/.brv/context-tree/facts/conventions/caplets_landing.md b/.brv/context-tree/facts/conventions/caplets_landing.md new file mode 100644 index 0000000..de8b7a8 --- /dev/null +++ b/.brv/context-tree/facts/conventions/caplets_landing.md @@ -0,0 +1,27 @@ +--- +title: '@Caplets/Landing' +summary: Facts about @caplets/landing +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:32:37.374Z' +updatedAt: '2026-05-28T09:32:37.374Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document facts for @caplets/landing + +**Timestamp:** 2026-05-28T09:32:37.363Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Extracted 2 facts for @caplets/landing + +## Facts +- **@caplets/landing**: pnpm --filter @caplets/landing typecheck passed with 0 errors. +- **@caplets/landing**: pnpm --filter @caplets/landing build passed. diff --git a/.brv/context-tree/facts/conventions/code_quality_fact.md b/.brv/context-tree/facts/conventions/code_quality_fact.md new file mode 100644 index 0000000..47c6d39 --- /dev/null +++ b/.brv/context-tree/facts/conventions/code_quality_fact.md @@ -0,0 +1,26 @@ +--- +title: code quality fact +summary: Code quality was approved. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.358Z' +updatedAt: '2026-05-28T09:33:34.358Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Code quality was approved. + +## Facts +- **code quality**: Code quality was approved. diff --git a/.brv/context-tree/facts/conventions/color_palette.md b/.brv/context-tree/facts/conventions/color_palette.md new file mode 100644 index 0000000..8dc7b18 --- /dev/null +++ b/.brv/context-tree/facts/conventions/color_palette.md @@ -0,0 +1,24 @@ +--- +title: color palette +summary: Facts about color palette +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.780Z' +updatedAt: '2026-05-28T09:02:34.780Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of color palette facts + +## Facts +- **color palette**: Color values must be expressed in OKLCH; pure black (#000) and pure white (#fff) are never allowed. diff --git a/.brv/context-tree/facts/conventions/color_strategy.md b/.brv/context-tree/facts/conventions/color_strategy.md new file mode 100644 index 0000000..4f2b1f6 --- /dev/null +++ b/.brv/context-tree/facts/conventions/color_strategy.md @@ -0,0 +1,24 @@ +--- +title: color strategy +summary: Facts about color strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.781Z' +updatedAt: '2026-05-28T09:02:34.781Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of color strategy facts + +## Facts +- **color strategy**: The "one accent ≤10%" rule applies only to the Restrained color strategy. diff --git a/.brv/context-tree/facts/conventions/commit_2acfcef_fact.md b/.brv/context-tree/facts/conventions/commit_2acfcef_fact.md new file mode 100644 index 0000000..e93926b --- /dev/null +++ b/.brv/context-tree/facts/conventions/commit_2acfcef_fact.md @@ -0,0 +1,26 @@ +--- +title: commit 2acfcef fact +summary: 'Commit 2acfcef fix(landing): align plugin install commands was created.' +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.343Z' +updatedAt: '2026-05-28T09:33:34.343Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Commit 2acfcef fix(landing): align plugin install commands was created. + +## Facts +- **commit 2acfcef**: Commit 2acfcef fix(landing): align plugin install commands was created. diff --git a/.brv/context-tree/facts/conventions/commit_8646209_fact.md b/.brv/context-tree/facts/conventions/commit_8646209_fact.md new file mode 100644 index 0000000..fcafa6f --- /dev/null +++ b/.brv/context-tree/facts/conventions/commit_8646209_fact.md @@ -0,0 +1,26 @@ +--- +title: commit 8646209 fact +summary: 'Commit 8646209 fix(landing): address audit findings was created.' +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.342Z' +updatedAt: '2026-05-28T09:33:34.342Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Commit 8646209 fix(landing): address audit findings was created. + +## Facts +- **commit 8646209**: Commit 8646209 fix(landing): address audit findings was created. diff --git a/.brv/context-tree/facts/conventions/commit_d2b942a_fact.md b/.brv/context-tree/facts/conventions/commit_d2b942a_fact.md new file mode 100644 index 0000000..7680380 --- /dev/null +++ b/.brv/context-tree/facts/conventions/commit_d2b942a_fact.md @@ -0,0 +1,26 @@ +--- +title: commit d2b942a fact +summary: 'Commit d2b942a fix(landing): remove unused npm icon styles was created.' +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.345Z' +updatedAt: '2026-05-28T09:33:34.345Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Commit d2b942a fix(landing): remove unused npm icon styles was created. + +## Facts +- **commit d2b942a**: Commit d2b942a fix(landing): remove unused npm icon styles was created. diff --git a/.brv/context-tree/facts/conventions/context_directory.md b/.brv/context-tree/facts/conventions/context_directory.md new file mode 100644 index 0000000..b9d1496 --- /dev/null +++ b/.brv/context-tree/facts/conventions/context_directory.md @@ -0,0 +1,24 @@ +--- +title: context directory +summary: Facts about context directory +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.771Z' +updatedAt: '2026-05-28T09:02:34.771Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of context directory facts + +## Facts +- **context directory**: The environment variable IMPECCABLE_CONTEXT_DIR can override the context directory with an absolute or relative path. diff --git a/.brv/context-tree/facts/conventions/context_loader.md b/.brv/context-tree/facts/conventions/context_loader.md new file mode 100644 index 0000000..a636659 --- /dev/null +++ b/.brv/context-tree/facts/conventions/context_loader.md @@ -0,0 +1,24 @@ +--- +title: context loader +summary: Facts about context loader +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.757Z' +updatedAt: '2026-05-28T09:02:34.757Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of context loader facts + +## Facts +- **context loader**: The loader script searches the project root, then falls back to .agents/context/ and docs/ if the root is clean. diff --git a/.brv/context-tree/facts/conventions/d2b942a.md b/.brv/context-tree/facts/conventions/d2b942a.md new file mode 100644 index 0000000..dd80069 --- /dev/null +++ b/.brv/context-tree/facts/conventions/d2b942a.md @@ -0,0 +1,26 @@ +--- +title: D2b942a +summary: Facts about d2b942a +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:32:37.365Z' +updatedAt: '2026-05-28T09:32:37.365Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document facts for d2b942a + +**Timestamp:** 2026-05-28T09:32:37.363Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Extracted 1 facts for d2b942a + +## Facts +- **d2b942a**: d2b942a removes the unused .npm-link CSS block from apps/landing/src/styles/global.css; git grep -n npm-link HEAD -- apps/landing returns no matches. diff --git a/.brv/context-tree/facts/conventions/design_registers.md b/.brv/context-tree/facts/conventions/design_registers.md new file mode 100644 index 0000000..4e1693e --- /dev/null +++ b/.brv/context-tree/facts/conventions/design_registers.md @@ -0,0 +1,24 @@ +--- +title: design registers +summary: Facts about design registers +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.778Z' +updatedAt: '2026-05-28T09:02:34.778Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of design registers facts + +## Facts +- **design registers**: Every design task is classified as either brand (marketing, landing, campaign, long‑form content, portfolio) or product (app UI, admin, dashboard, tool). diff --git a/.brv/context-tree/facts/conventions/design_workflow.md b/.brv/context-tree/facts/conventions/design_workflow.md new file mode 100644 index 0000000..cd49874 --- /dev/null +++ b/.brv/context-tree/facts/conventions/design_workflow.md @@ -0,0 +1,24 @@ +--- +title: design workflow +summary: Facts about design workflow +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.750Z' +updatedAt: '2026-05-28T09:02:34.750Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of design workflow facts + +## Facts +- **design workflow**: Before any design work or file edits, the user must load context (PRODUCT.md / DESIGN.md) via the loader script. diff --git a/.brv/context-tree/facts/conventions/format_check.md b/.brv/context-tree/facts/conventions/format_check.md new file mode 100644 index 0000000..2e10ae5 --- /dev/null +++ b/.brv/context-tree/facts/conventions/format_check.md @@ -0,0 +1,24 @@ +--- +title: format check +summary: Facts about format check +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.802Z' +updatedAt: '2026-05-28T09:02:34.802Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of format check facts + +## Facts +- **format check**: Verification passed: `pnpm format:check`. diff --git a/.brv/context-tree/facts/conventions/format_check_fact.md b/.brv/context-tree/facts/conventions/format_check_fact.md new file mode 100644 index 0000000..6a59e3f --- /dev/null +++ b/.brv/context-tree/facts/conventions/format_check_fact.md @@ -0,0 +1,26 @@ +--- +title: format check fact +summary: Landing-specific verification passed for pnpm exec oxfmt --check apps/landing/src/pages/index.astro apps/landing/src/styles/global.css. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.359Z' +updatedAt: '2026-05-28T09:33:34.359Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Landing-specific verification passed for pnpm exec oxfmt --check apps/landing/src/pages/index.astro apps/landing/src/styles/global.css. + +## Facts +- **format check**: Landing-specific verification passed for pnpm exec oxfmt --check apps/landing/src/pages/index.astro apps/landing/src/styles/global.css. diff --git a/.brv/context-tree/facts/conventions/glassmorphism.md b/.brv/context-tree/facts/conventions/glassmorphism.md new file mode 100644 index 0000000..c127f47 --- /dev/null +++ b/.brv/context-tree/facts/conventions/glassmorphism.md @@ -0,0 +1,24 @@ +--- +title: glassmorphism +summary: Facts about glassmorphism +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.789Z' +updatedAt: '2026-05-28T09:02:34.789Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of glassmorphism facts + +## Facts +- **glassmorphism**: Glassmorphism as a default (blurred glass cards) is absolutely banned. diff --git a/.brv/context-tree/facts/conventions/gradient_text.md b/.brv/context-tree/facts/conventions/gradient_text.md new file mode 100644 index 0000000..36328e5 --- /dev/null +++ b/.brv/context-tree/facts/conventions/gradient_text.md @@ -0,0 +1,24 @@ +--- +title: gradient text +summary: Facts about gradient text +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.787Z' +updatedAt: '2026-05-28T09:02:34.787Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of gradient text facts + +## Facts +- **gradient text**: Gradient text using background‑clip: text with a gradient background is absolutely banned. diff --git a/.brv/context-tree/facts/conventions/head.md b/.brv/context-tree/facts/conventions/head.md new file mode 100644 index 0000000..c63f495 --- /dev/null +++ b/.brv/context-tree/facts/conventions/head.md @@ -0,0 +1,26 @@ +--- +title: HEAD +summary: Facts about HEAD +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:32:37.373Z' +updatedAt: '2026-05-28T09:32:37.373Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document facts for HEAD + +**Timestamp:** 2026-05-28T09:32:37.363Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Extracted 1 facts for HEAD + +## Facts +- **HEAD**: Verified committed HEAD in a detached worktree to avoid unrelated local unstaged/untracked changes. [environment] diff --git a/.brv/context-tree/facts/conventions/hero_metric.md b/.brv/context-tree/facts/conventions/hero_metric.md new file mode 100644 index 0000000..e5b27f5 --- /dev/null +++ b/.brv/context-tree/facts/conventions/hero_metric.md @@ -0,0 +1,24 @@ +--- +title: hero metric +summary: Facts about hero metric +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.790Z' +updatedAt: '2026-05-28T09:02:34.790Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of hero metric facts + +## Facts +- **hero metric**: The hero‑metric template (big number, small label, supporting stats, gradient accent) is an absolute ban. diff --git a/.brv/context-tree/facts/conventions/hierarchy.md b/.brv/context-tree/facts/conventions/hierarchy.md new file mode 100644 index 0000000..b7eaae4 --- /dev/null +++ b/.brv/context-tree/facts/conventions/hierarchy.md @@ -0,0 +1,24 @@ +--- +title: hierarchy +summary: Facts about hierarchy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.784Z' +updatedAt: '2026-05-28T09:02:34.784Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of hierarchy facts + +## Facts +- **hierarchy**: Hierarchy must have a scale and weight contrast of at least a 1.25 ratio between steps. diff --git a/.brv/context-tree/facts/conventions/impeccable_skill.md b/.brv/context-tree/facts/conventions/impeccable_skill.md new file mode 100644 index 0000000..09b1235 --- /dev/null +++ b/.brv/context-tree/facts/conventions/impeccable_skill.md @@ -0,0 +1,24 @@ +--- +title: impeccable skill +summary: Facts about impeccable skill +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.745Z' +updatedAt: '2026-05-28T09:02:34.745Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of impeccable skill facts + +## Facts +- **impeccable skill**: The skill "impeccable" is located at /home/ianpascoe/.agents/skills/impeccable/SKILL.md. diff --git a/.brv/context-tree/facts/conventions/landing_page_fact.md b/.brv/context-tree/facts/conventions/landing_page_fact.md new file mode 100644 index 0000000..b29ad30 --- /dev/null +++ b/.brv/context-tree/facts/conventions/landing_page_fact.md @@ -0,0 +1,26 @@ +--- +title: landing page fact +summary: All landing page audit fixes were implemented using subagent-driven development. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.334Z' +updatedAt: '2026-05-28T09:33:34.334Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +All landing page audit fixes were implemented using subagent-driven development. + +## Facts +- **landing page**: All landing page audit fixes were implemented using subagent-driven development. diff --git a/.brv/context-tree/facts/conventions/line_length.md b/.brv/context-tree/facts/conventions/line_length.md new file mode 100644 index 0000000..15d2993 --- /dev/null +++ b/.brv/context-tree/facts/conventions/line_length.md @@ -0,0 +1,24 @@ +--- +title: line length +summary: Facts about line length +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.783Z' +updatedAt: '2026-05-28T09:02:34.783Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of line length facts + +## Facts +- **line length**: Body line length should be capped at 65–75 characters. diff --git a/.brv/context-tree/facts/conventions/lint_fact.md b/.brv/context-tree/facts/conventions/lint_fact.md new file mode 100644 index 0000000..bd32e09 --- /dev/null +++ b/.brv/context-tree/facts/conventions/lint_fact.md @@ -0,0 +1,26 @@ +--- +title: lint fact +summary: Landing-specific verification passed for pnpm lint. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.378Z' +updatedAt: '2026-05-28T09:33:34.378Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Landing-specific verification passed for pnpm lint. + +## Facts +- **lint**: Landing-specific verification passed for pnpm lint. diff --git a/.brv/context-tree/facts/conventions/missing_design_md.md b/.brv/context-tree/facts/conventions/missing_design_md.md new file mode 100644 index 0000000..a676260 --- /dev/null +++ b/.brv/context-tree/facts/conventions/missing_design_md.md @@ -0,0 +1,24 @@ +--- +title: missing DESIGN.md +summary: Facts about missing DESIGN.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.776Z' +updatedAt: '2026-05-28T09:02:34.776Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of missing DESIGN.md facts + +## Facts +- **missing DESIGN.md**: If DESIGN.md is missing, the assistant should nudge the user once per session to run {{command_prefix}}impeccable document. diff --git a/.brv/context-tree/facts/conventions/missing_product_md.md b/.brv/context-tree/facts/conventions/missing_product_md.md new file mode 100644 index 0000000..81ae800 --- /dev/null +++ b/.brv/context-tree/facts/conventions/missing_product_md.md @@ -0,0 +1,24 @@ +--- +title: missing PRODUCT.md +summary: Facts about missing PRODUCT.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.773Z' +updatedAt: '2026-05-28T09:02:34.773Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of missing PRODUCT.md facts + +## Facts +- **missing PRODUCT.md**: If PRODUCT.md is missing, empty, or contains only placeholder text under 200 characters, the command {{command_prefix}}impeccable teach must be run. diff --git a/.brv/context-tree/facts/conventions/npm_header_link.md b/.brv/context-tree/facts/conventions/npm_header_link.md new file mode 100644 index 0000000..fd70b9f --- /dev/null +++ b/.brv/context-tree/facts/conventions/npm_header_link.md @@ -0,0 +1,26 @@ +--- +title: Npm Header Link +summary: Facts about npm header link +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:32:37.370Z' +updatedAt: '2026-05-28T09:32:37.370Z' +--- +## Reason +Curated facts extracted from context + +## Raw Concept +**Task:** +Document facts for npm header link + +**Timestamp:** 2026-05-28T09:32:37.363Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Extracted 1 facts for npm header link + +## Facts +- **npm header link**: Remaining npm header link uses the shared .header-action.icon-link styles at apps/landing/src/styles/global.css:244-253, so the removed CSS is not needed. diff --git a/.brv/context-tree/facts/conventions/panel.md b/.brv/context-tree/facts/conventions/panel.md new file mode 100644 index 0000000..981d8ac --- /dev/null +++ b/.brv/context-tree/facts/conventions/panel.md @@ -0,0 +1,26 @@ +--- +title: panel +summary: Facts about panel +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.801Z' +updatedAt: '2026-05-28T09:02:34.801Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of panel facts + +## Facts +- **panel**: The panel now uses a stable `block-size: clamp(260px, 24vw, 320px)` and scrolls internally if a snippet is longer. +- **panel**: The panel now uses a stable block-size defined as clamp(260px, 24vw, 320px). +- **panel**: The panel scrolls internally if a snippet is longer. diff --git a/.brv/context-tree/facts/conventions/pnpm.md b/.brv/context-tree/facts/conventions/pnpm.md new file mode 100644 index 0000000..0749b73 --- /dev/null +++ b/.brv/context-tree/facts/conventions/pnpm.md @@ -0,0 +1,25 @@ +--- +title: pnpm +summary: Facts about pnpm +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.806Z' +updatedAt: '2026-05-28T09:02:34.806Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of pnpm facts + +## Facts +- **pnpm**: The command `pnpm --filter @caplets/landing typecheck` is used. +- **pnpm**: The command `pnpm --filter @caplets/landing build` is used. diff --git a/.brv/context-tree/facts/conventions/pnpm_format_check_fact.md b/.brv/context-tree/facts/conventions/pnpm_format_check_fact.md new file mode 100644 index 0000000..9115c9d --- /dev/null +++ b/.brv/context-tree/facts/conventions/pnpm_format_check_fact.md @@ -0,0 +1,26 @@ +--- +title: pnpm format:check fact +summary: Full pnpm format:check is currently blocked by unrelated untracked .github/workflows/pr-preview.yml formatting. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.384Z' +updatedAt: '2026-05-28T09:33:34.384Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Full pnpm format:check is currently blocked by unrelated untracked .github/workflows/pr-preview.yml formatting. + +## Facts +- **pnpm format:check**: Full pnpm format:check is currently blocked by unrelated untracked .github/workflows/pr-preview.yml formatting. diff --git a/.brv/context-tree/facts/conventions/pr_preview_yml_fact.md b/.brv/context-tree/facts/conventions/pr_preview_yml_fact.md new file mode 100644 index 0000000..f2aefc5 --- /dev/null +++ b/.brv/context-tree/facts/conventions/pr_preview_yml_fact.md @@ -0,0 +1,26 @@ +--- +title: pr-preview.yml fact +summary: The .github/workflows/pr-preview.yml file was not part of the landing fixes. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.385Z' +updatedAt: '2026-05-28T09:33:34.385Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +The .github/workflows/pr-preview.yml file was not part of the landing fixes. + +## Facts +- **pr-preview.yml**: The .github/workflows/pr-preview.yml file was not part of the landing fixes. diff --git a/.brv/context-tree/facts/conventions/project_context.md b/.brv/context-tree/facts/conventions/project_context.md new file mode 100644 index 0000000..c442160 --- /dev/null +++ b/.brv/context-tree/facts/conventions/project_context.md @@ -0,0 +1,24 @@ +--- +title: project context +summary: Facts about project context +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.755Z' +updatedAt: '2026-05-28T09:02:34.755Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of project context facts + +## Facts +- **project context**: PRODUCT.md is required; DESIGN.md is optional but strongly recommended. diff --git a/.brv/context-tree/facts/conventions/punctuation.md b/.brv/context-tree/facts/conventions/punctuation.md new file mode 100644 index 0000000..218afc4 --- /dev/null +++ b/.brv/context-tree/facts/conventions/punctuation.md @@ -0,0 +1,24 @@ +--- +title: punctuation +summary: Facts about punctuation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.791Z' +updatedAt: '2026-05-28T09:02:34.791Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of punctuation facts + +## Facts +- **punctuation**: Em dashes are prohibited in copy; commas, colons, semicolons, periods, or parentheses must be used instead. diff --git a/.brv/context-tree/facts/conventions/setup_model.md b/.brv/context-tree/facts/conventions/setup_model.md new file mode 100644 index 0000000..fd50953 --- /dev/null +++ b/.brv/context-tree/facts/conventions/setup_model.md @@ -0,0 +1,20 @@ +--- +title: setup model +summary: Facts about setup model +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:17:13.657Z' +updatedAt: '2026-05-27T23:17:13.657Z' +--- +## Reason +Curated facts from extraction + +## Raw Concept +**Task:** +Document facts for setup model + +**Timestamp:** 2026-05-27T23:17:13.640Z + +## Facts +- **setup model**: Add a normalized `setup` model to each agent entry, probably `{ installCommand, configSnippet, notes? }`. diff --git a/.brv/context-tree/facts/conventions/setup_rendering.md b/.brv/context-tree/facts/conventions/setup_rendering.md new file mode 100644 index 0000000..a62f629 --- /dev/null +++ b/.brv/context-tree/facts/conventions/setup_rendering.md @@ -0,0 +1,20 @@ +--- +title: setup rendering +summary: Facts about setup rendering +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:17:13.661Z' +updatedAt: '2026-05-27T23:17:13.661Z' +--- +## Reason +Curated facts from extraction + +## Raw Concept +**Task:** +Document facts for setup rendering + +**Timestamp:** 2026-05-27T23:17:13.640Z + +## Facts +- **setup rendering**: Tests should cover that all agents with setup data render both the install command and config snippet, and that copy text matches the source strings. diff --git a/.brv/context-tree/facts/conventions/sub_command_handling.md b/.brv/context-tree/facts/conventions/sub_command_handling.md new file mode 100644 index 0000000..369c9b5 --- /dev/null +++ b/.brv/context-tree/facts/conventions/sub_command_handling.md @@ -0,0 +1,24 @@ +--- +title: sub‑command handling +summary: Facts about sub‑command handling +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.752Z' +updatedAt: '2026-05-28T09:02:34.752Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of sub‑command handling facts + +## Facts +- **sub‑command handling**: If the user invoked a sub‑command such as craft, shape, or audit, the corresponding reference file (e.g., craft.md) must also be loaded. diff --git a/.brv/context-tree/facts/conventions/theme_selection.md b/.brv/context-tree/facts/conventions/theme_selection.md new file mode 100644 index 0000000..93e5491 --- /dev/null +++ b/.brv/context-tree/facts/conventions/theme_selection.md @@ -0,0 +1,24 @@ +--- +title: theme selection +summary: Facts about theme selection +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.782Z' +updatedAt: '2026-05-28T09:02:34.782Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of theme selection facts + +## Facts +- **theme selection**: Dark vs. light theme must be chosen based on a concrete physical scene description, not by default. diff --git a/.brv/context-tree/facts/conventions/typecheck.md b/.brv/context-tree/facts/conventions/typecheck.md new file mode 100644 index 0000000..5e3327c --- /dev/null +++ b/.brv/context-tree/facts/conventions/typecheck.md @@ -0,0 +1,24 @@ +--- +title: typecheck +summary: Facts about typecheck +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:02:34.803Z' +updatedAt: '2026-05-28T09:02:34.803Z' +--- +## Reason +Curated factual statements from context + +## Raw Concept +**Task:** +Document factual statements + +**Timestamp:** 2026-05-28T09:02:34.738Z + +## Narrative +### Structure +Collection of typecheck facts + +## Facts +- **typecheck**: Verification passed: `pnpm --filter @caplets/landing typecheck`. diff --git a/.brv/context-tree/facts/conventions/typecheck_fact.md b/.brv/context-tree/facts/conventions/typecheck_fact.md new file mode 100644 index 0000000..726b049 --- /dev/null +++ b/.brv/context-tree/facts/conventions/typecheck_fact.md @@ -0,0 +1,26 @@ +--- +title: typecheck fact +summary: Landing-specific verification passed for pnpm --filter @caplets/landing typecheck. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:33:34.381Z' +updatedAt: '2026-05-28T09:33:34.381Z' +--- +## Reason +Curate extracted factual statement + +## Raw Concept +**Task:** +Document factual statement + +**Timestamp:** 2026-05-28T09:33:34.318Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +Landing-specific verification passed for pnpm --filter @caplets/landing typecheck. + +## Facts +- **typecheck**: Landing-specific verification passed for pnpm --filter @caplets/landing typecheck. diff --git a/.brv/context-tree/facts/extracted/adapt.md b/.brv/context-tree/facts/extracted/adapt.md new file mode 100644 index 0000000..9c504b8 --- /dev/null +++ b/.brv/context-tree/facts/extracted/adapt.md @@ -0,0 +1,24 @@ +--- +title: Adapt +summary: Extracted facts about adapt +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.263Z' +updatedAt: '2026-05-27T19:41:18.263Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under adapt + +## Facts +- **adapt**: `adapt [target]` is a Fix command that adapts designs for different devices and screen sizes. diff --git a/.brv/context-tree/facts/extracted/animate.md b/.brv/context-tree/facts/extracted/animate.md new file mode 100644 index 0000000..f5f0563 --- /dev/null +++ b/.brv/context-tree/facts/extracted/animate.md @@ -0,0 +1,24 @@ +--- +title: Animate +summary: Extracted facts about animate +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.253Z' +updatedAt: '2026-05-27T19:41:18.253Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under animate + +## Facts +- **animate**: `animate [target]` is an Enhance command that adds purposeful animations and motion. diff --git a/.brv/context-tree/facts/extracted/animation_restrictions.md b/.brv/context-tree/facts/extracted/animation_restrictions.md new file mode 100644 index 0000000..6804c2d --- /dev/null +++ b/.brv/context-tree/facts/extracted/animation_restrictions.md @@ -0,0 +1,24 @@ +--- +title: Animation restrictions +summary: Extracted facts about Animation restrictions +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.203Z' +updatedAt: '2026-05-27T19:41:18.203Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Animation restrictions + +## Facts +- **Animation restrictions**: Do not animate CSS layout properties. diff --git a/.brv/context-tree/facts/extracted/assistant.md b/.brv/context-tree/facts/extracted/assistant.md new file mode 100644 index 0000000..b905620 --- /dev/null +++ b/.brv/context-tree/facts/extracted/assistant.md @@ -0,0 +1,24 @@ +--- +title: assistant +summary: Extracted facts about assistant +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:24:46.822Z' +updatedAt: '2026-05-28T09:24:46.822Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Extract facts + +**Timestamp:** 2026-05-28T09:24:46.821Z + +## Narrative +### Highlights +Facts related to assistant + +## Facts +- **assistant**: I'm using Subagent-Driven Development to implement all audit fixes continuously. diff --git a/.brv/context-tree/facts/extracted/audit.md b/.brv/context-tree/facts/extracted/audit.md new file mode 100644 index 0000000..75fce1e --- /dev/null +++ b/.brv/context-tree/facts/extracted/audit.md @@ -0,0 +1,24 @@ +--- +title: Audit +summary: Extracted facts about audit +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.239Z' +updatedAt: '2026-05-27T19:41:18.239Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under audit + +## Facts +- **audit**: `audit [target]` is an Evaluate command that performs technical quality checks such as accessibility, performance, and responsiveness. diff --git a/.brv/context-tree/facts/extracted/bolder.md b/.brv/context-tree/facts/extracted/bolder.md new file mode 100644 index 0000000..00e6770 --- /dev/null +++ b/.brv/context-tree/facts/extracted/bolder.md @@ -0,0 +1,24 @@ +--- +title: Bolder +summary: Extracted facts about bolder +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.242Z' +updatedAt: '2026-05-27T19:41:18.242Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under bolder + +## Facts +- **bolder**: `bolder [target]` is a Refine command that amplifies safe or bland designs. diff --git a/.brv/context-tree/facts/extracted/browser_console.md b/.brv/context-tree/facts/extracted/browser_console.md new file mode 100644 index 0000000..9df61b9 --- /dev/null +++ b/.brv/context-tree/facts/extracted/browser_console.md @@ -0,0 +1,24 @@ +--- +title: Browser console +summary: Extracted facts about Browser console +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.280Z' +updatedAt: '2026-05-27T19:41:18.280Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Browser console + +## Facts +- **Browser console**: Browser console checked, 0 errors and 0 warnings. diff --git a/.brv/context-tree/facts/extracted/browser_preview.md b/.brv/context-tree/facts/extracted/browser_preview.md new file mode 100644 index 0000000..90f9847 --- /dev/null +++ b/.brv/context-tree/facts/extracted/browser_preview.md @@ -0,0 +1,24 @@ +--- +title: Browser preview +summary: Extracted facts about Browser preview +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.279Z' +updatedAt: '2026-05-27T19:41:18.279Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Browser preview + +## Facts +- **Browser preview**: Browser preview checked at desktop and mobile sizes. diff --git a/.brv/context-tree/facts/extracted/browser_testing.md b/.brv/context-tree/facts/extracted/browser_testing.md new file mode 100644 index 0000000..32c8ef5 --- /dev/null +++ b/.brv/context-tree/facts/extracted/browser_testing.md @@ -0,0 +1,24 @@ +--- +title: Browser testing +summary: Extracted facts about browser testing +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.278Z' +updatedAt: '2026-05-27T19:41:18.278Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under browser testing + +## Facts +- **browser testing**: Browser preview was checked at desktop and mobile sizes with no errors or warnings in the console. diff --git a/.brv/context-tree/facts/extracted/build_process.md b/.brv/context-tree/facts/extracted/build_process.md new file mode 100644 index 0000000..607691a --- /dev/null +++ b/.brv/context-tree/facts/extracted/build_process.md @@ -0,0 +1,24 @@ +--- +title: Build process +summary: Extracted facts about build process +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.276Z' +updatedAt: '2026-05-27T19:41:18.276Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under build process + +## Facts +- **build process**: `pnpm --filter @caplets/landing build` passed. diff --git a/.brv/context-tree/facts/extracted/card_usage.md b/.brv/context-tree/facts/extracted/card_usage.md new file mode 100644 index 0000000..160c837 --- /dev/null +++ b/.brv/context-tree/facts/extracted/card_usage.md @@ -0,0 +1,24 @@ +--- +title: Card usage +summary: Extracted facts about Card usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.197Z' +updatedAt: '2026-05-27T19:41:18.197Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Card usage + +## Facts +- **Card usage**: Cards should only be used when they are the best affordance; nested cards are always wrong. diff --git a/.brv/context-tree/facts/extracted/chroma_adjustment.md b/.brv/context-tree/facts/extracted/chroma_adjustment.md new file mode 100644 index 0000000..4e649f9 --- /dev/null +++ b/.brv/context-tree/facts/extracted/chroma_adjustment.md @@ -0,0 +1,24 @@ +--- +title: Chroma adjustment +summary: Extracted facts about Chroma adjustment +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.145Z' +updatedAt: '2026-05-27T19:41:18.145Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Chroma adjustment + +## Facts +- **Chroma adjustment**: Reduce chroma as lightness approaches 0 or 100 because high chroma at extremes looks garish. diff --git a/.brv/context-tree/facts/extracted/clarify.md b/.brv/context-tree/facts/extracted/clarify.md new file mode 100644 index 0000000..e9261a3 --- /dev/null +++ b/.brv/context-tree/facts/extracted/clarify.md @@ -0,0 +1,24 @@ +--- +title: Clarify +summary: Extracted facts about clarify +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.261Z' +updatedAt: '2026-05-27T19:41:18.261Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under clarify + +## Facts +- **clarify**: `clarify [target]` is a Fix command that improves UX copy, labels, and error messages. diff --git a/.brv/context-tree/facts/extracted/color_specification.md b/.brv/context-tree/facts/extracted/color_specification.md new file mode 100644 index 0000000..6ae475e --- /dev/null +++ b/.brv/context-tree/facts/extracted/color_specification.md @@ -0,0 +1,24 @@ +--- +title: Color specification +summary: Extracted facts about Color specification +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.142Z' +updatedAt: '2026-05-27T19:41:18.142Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Color specification + +## Facts +- **Color specification**: Use OKLCH for colors. diff --git a/.brv/context-tree/facts/extracted/colorize.md b/.brv/context-tree/facts/extracted/colorize.md new file mode 100644 index 0000000..f861e0e --- /dev/null +++ b/.brv/context-tree/facts/extracted/colorize.md @@ -0,0 +1,24 @@ +--- +title: Colorize +summary: Extracted facts about colorize +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.255Z' +updatedAt: '2026-05-27T19:41:18.255Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under colorize + +## Facts +- **colorize**: `colorize [target]` is an Enhance command that adds strategic color to monochromatic UIs. diff --git a/.brv/context-tree/facts/extracted/committed_strategy.md b/.brv/context-tree/facts/extracted/committed_strategy.md new file mode 100644 index 0000000..ddc2410 --- /dev/null +++ b/.brv/context-tree/facts/extracted/committed_strategy.md @@ -0,0 +1,24 @@ +--- +title: Committed strategy +summary: Extracted facts about Committed strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.180Z' +updatedAt: '2026-05-27T19:41:18.180Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Committed strategy + +## Facts +- **Committed strategy**: Committed strategy uses one saturated color covering 30–60% of surface. diff --git a/.brv/context-tree/facts/extracted/copy_economy.md b/.brv/context-tree/facts/extracted/copy_economy.md new file mode 100644 index 0000000..f4961bb --- /dev/null +++ b/.brv/context-tree/facts/extracted/copy_economy.md @@ -0,0 +1,24 @@ +--- +title: Copy economy +summary: Extracted facts about Copy economy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.222Z' +updatedAt: '2026-05-27T19:41:18.222Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Copy economy + +## Facts +- **Copy economy**: Every word in copy must earn its place; no restated headings or intros that repeat the title. diff --git a/.brv/context-tree/facts/extracted/craft.md b/.brv/context-tree/facts/extracted/craft.md new file mode 100644 index 0000000..c6a3c94 --- /dev/null +++ b/.brv/context-tree/facts/extracted/craft.md @@ -0,0 +1,24 @@ +--- +title: Craft +summary: Extracted facts about craft +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.225Z' +updatedAt: '2026-05-27T19:41:18.225Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under craft + +## Facts +- **craft**: `craft [feature]` is a Build command that shapes then builds a feature end-to-end. diff --git a/.brv/context-tree/facts/extracted/critique.md b/.brv/context-tree/facts/extracted/critique.md new file mode 100644 index 0000000..42b3956 --- /dev/null +++ b/.brv/context-tree/facts/extracted/critique.md @@ -0,0 +1,24 @@ +--- +title: Critique +summary: Extracted facts about critique +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.238Z' +updatedAt: '2026-05-27T19:41:18.238Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under critique + +## Facts +- **critique**: `critique [target]` is an Evaluate command that performs a UX design review with heuristic scoring. diff --git a/.brv/context-tree/facts/extracted/delight.md b/.brv/context-tree/facts/extracted/delight.md new file mode 100644 index 0000000..975c47e --- /dev/null +++ b/.brv/context-tree/facts/extracted/delight.md @@ -0,0 +1,24 @@ +--- +title: Delight +summary: Extracted facts about delight +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.259Z' +updatedAt: '2026-05-27T19:41:18.259Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under delight + +## Facts +- **delight**: `delight [target]` is an Enhance command that adds personality and memorable touches. diff --git a/.brv/context-tree/facts/extracted/design_md.md b/.brv/context-tree/facts/extracted/design_md.md new file mode 100644 index 0000000..bf148ce --- /dev/null +++ b/.brv/context-tree/facts/extracted/design_md.md @@ -0,0 +1,25 @@ +--- +title: DESIGN.md +summary: Extracted facts about DESIGN.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.133Z' +updatedAt: '2026-05-27T19:41:18.133Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under DESIGN.md + +## Facts +- **DESIGN.md**: DESIGN.md is optional, strongly recommended. +- **DESIGN.md**: If DESIGN.md is missing, nudge the user once per session to run {{command_prefix}}impeccable document. diff --git a/.brv/context-tree/facts/extracted/design_process.md b/.brv/context-tree/facts/extracted/design_process.md new file mode 100644 index 0000000..6a2b2c0 --- /dev/null +++ b/.brv/context-tree/facts/extracted/design_process.md @@ -0,0 +1,24 @@ +--- +title: Design process +summary: Extracted facts about Design process +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.174Z' +updatedAt: '2026-05-27T19:41:18.174Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Design process + +## Facts +- **Design process**: Pick a color strategy before picking colors, with four steps on the commitment axis. diff --git a/.brv/context-tree/facts/extracted/design_task.md b/.brv/context-tree/facts/extracted/design_task.md new file mode 100644 index 0000000..d4a621a --- /dev/null +++ b/.brv/context-tree/facts/extracted/design_task.md @@ -0,0 +1,24 @@ +--- +title: Design task +summary: Extracted facts about design task +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.139Z' +updatedAt: '2026-05-27T19:41:18.139Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under design task + +## Facts +- **design task**: Every design task is either brand (marketing, landing, campaign, long-form content, portfolio) or product (app UI, admin, dashboard, tool). diff --git a/.brv/context-tree/facts/extracted/distill.md b/.brv/context-tree/facts/extracted/distill.md new file mode 100644 index 0000000..f5d9a54 --- /dev/null +++ b/.brv/context-tree/facts/extracted/distill.md @@ -0,0 +1,24 @@ +--- +title: Distill +summary: Extracted facts about distill +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.245Z' +updatedAt: '2026-05-27T19:41:18.245Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under distill + +## Facts +- **distill**: `distill [target]` is a Refine command that strips to essence and removes complexity. diff --git a/.brv/context-tree/facts/extracted/document.md b/.brv/context-tree/facts/extracted/document.md new file mode 100644 index 0000000..192bb3e --- /dev/null +++ b/.brv/context-tree/facts/extracted/document.md @@ -0,0 +1,24 @@ +--- +title: Document +summary: Extracted facts about document +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.231Z' +updatedAt: '2026-05-27T19:41:18.231Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under document + +## Facts +- **document**: `document` is a Build command that generates DESIGN.md from existing project code. diff --git a/.brv/context-tree/facts/extracted/drenched_strategy.md b/.brv/context-tree/facts/extracted/drenched_strategy.md new file mode 100644 index 0000000..716814e --- /dev/null +++ b/.brv/context-tree/facts/extracted/drenched_strategy.md @@ -0,0 +1,24 @@ +--- +title: Drenched strategy +summary: Extracted facts about Drenched strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.188Z' +updatedAt: '2026-05-27T19:41:18.188Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Drenched strategy + +## Facts +- **Drenched strategy**: Drenched strategy makes the surface the color. diff --git a/.brv/context-tree/facts/extracted/easing_functions.md b/.brv/context-tree/facts/extracted/easing_functions.md new file mode 100644 index 0000000..9e2facd --- /dev/null +++ b/.brv/context-tree/facts/extracted/easing_functions.md @@ -0,0 +1,24 @@ +--- +title: Easing functions +summary: Extracted facts about Easing functions +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.205Z' +updatedAt: '2026-05-27T19:41:18.205Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Easing functions + +## Facts +- **Easing functions**: Use ease-out exponential curves (ease-out-quart, quint, expo) for motion; no bounce or elastic. diff --git a/.brv/context-tree/facts/extracted/extract.md b/.brv/context-tree/facts/extracted/extract.md new file mode 100644 index 0000000..a0cc76d --- /dev/null +++ b/.brv/context-tree/facts/extracted/extract.md @@ -0,0 +1,24 @@ +--- +title: Extract +summary: Extracted facts about extract +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.237Z' +updatedAt: '2026-05-27T19:41:18.237Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under extract + +## Facts +- **extract**: `extract [target]` is a Build command that pulls reusable tokens and components into a design system. diff --git a/.brv/context-tree/facts/extracted/full_palette_strategy.md b/.brv/context-tree/facts/extracted/full_palette_strategy.md new file mode 100644 index 0000000..1af2f5f --- /dev/null +++ b/.brv/context-tree/facts/extracted/full_palette_strategy.md @@ -0,0 +1,24 @@ +--- +title: Full palette strategy +summary: Extracted facts about Full palette strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.182Z' +updatedAt: '2026-05-27T19:41:18.182Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Full palette strategy + +## Facts +- **Full palette strategy**: Full palette uses 3–4 named roles, each used deliberately. diff --git a/.brv/context-tree/facts/extracted/glassmorphism.md b/.brv/context-tree/facts/extracted/glassmorphism.md new file mode 100644 index 0000000..fb3696e --- /dev/null +++ b/.brv/context-tree/facts/extracted/glassmorphism.md @@ -0,0 +1,24 @@ +--- +title: Glassmorphism +summary: Extracted facts about Glassmorphism +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.210Z' +updatedAt: '2026-05-27T19:41:18.210Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Glassmorphism + +## Facts +- **Glassmorphism**: Glassmorphism as a default style is prohibited; use only rarely and purposefully. diff --git a/.brv/context-tree/facts/extracted/gradient_text.md b/.brv/context-tree/facts/extracted/gradient_text.md new file mode 100644 index 0000000..27df6f6 --- /dev/null +++ b/.brv/context-tree/facts/extracted/gradient_text.md @@ -0,0 +1,24 @@ +--- +title: Gradient text +summary: Extracted facts about Gradient text +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.208Z' +updatedAt: '2026-05-27T19:41:18.208Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Gradient text + +## Facts +- **Gradient text**: Gradient text using background‑clip: text with a gradient background is prohibited. diff --git a/.brv/context-tree/facts/extracted/harden.md b/.brv/context-tree/facts/extracted/harden.md new file mode 100644 index 0000000..6ab11c8 --- /dev/null +++ b/.brv/context-tree/facts/extracted/harden.md @@ -0,0 +1,24 @@ +--- +title: Harden +summary: Extracted facts about harden +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.246Z' +updatedAt: '2026-05-27T19:41:18.246Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under harden + +## Facts +- **harden**: `harden [target]` is a Refine command that makes a product production‑ready, handling errors, i18n, and edge cases. diff --git a/.brv/context-tree/facts/extracted/hero_metric_template.md b/.brv/context-tree/facts/extracted/hero_metric_template.md new file mode 100644 index 0000000..5f4cae1 --- /dev/null +++ b/.brv/context-tree/facts/extracted/hero_metric_template.md @@ -0,0 +1,24 @@ +--- +title: Hero‑metric template +summary: Extracted facts about Hero‑metric template +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.211Z' +updatedAt: '2026-05-27T19:41:18.211Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Hero‑metric template + +## Facts +- **Hero‑metric template**: The hero‑metric template (big number, small label, supporting stats, gradient accent) is a SaaS cliché and prohibited. diff --git a/.brv/context-tree/facts/extracted/identical_card_grids.md b/.brv/context-tree/facts/extracted/identical_card_grids.md new file mode 100644 index 0000000..2ecc57f --- /dev/null +++ b/.brv/context-tree/facts/extracted/identical_card_grids.md @@ -0,0 +1,24 @@ +--- +title: Identical card grids +summary: Extracted facts about Identical card grids +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.213Z' +updatedAt: '2026-05-27T19:41:18.213Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Identical card grids + +## Facts +- **Identical card grids**: Identical card grids with repeated icon + heading + text are prohibited. diff --git a/.brv/context-tree/facts/extracted/landing_page.md b/.brv/context-tree/facts/extracted/landing_page.md new file mode 100644 index 0000000..4015627 --- /dev/null +++ b/.brv/context-tree/facts/extracted/landing_page.md @@ -0,0 +1,30 @@ +--- +title: Landing page +summary: Extracted facts about landing page +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.275Z' +updatedAt: '2026-05-27T19:41:18.275Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under landing page + +## Facts +- **landing page**: Hardening improvements added a `theme-color` meta tag to the landing page. +- **landing page**: Reveal animation was made progressive: content is visible by default and hidden only after JavaScript confirms IntersectionObserver support. +- **landing page**: An IntersectionObserver fallback was added so content never stays invisible on older browsers. +- **landing page**: Long-text resilience was improved with `min-width: 0`, `overflow-wrap`, and safer grid columns. +- **landing page**: Header, nav, proof grid, terminal, capability cards, and install layout were hardened against overflow. +- **landing page**: Safe-area padding was added for notched mobile devices. +- **landing page**: The funky npm mark was replaced with a cleaner custom npm-style icon. diff --git a/.brv/context-tree/facts/extracted/layout.md b/.brv/context-tree/facts/extracted/layout.md new file mode 100644 index 0000000..92828ff --- /dev/null +++ b/.brv/context-tree/facts/extracted/layout.md @@ -0,0 +1,24 @@ +--- +title: Layout +summary: Extracted facts about layout +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.257Z' +updatedAt: '2026-05-27T19:41:18.257Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under layout + +## Facts +- **layout**: `layout [target]` is an Enhance command that fixes spacing, rhythm, and visual hierarchy. diff --git a/.brv/context-tree/facts/extracted/line_length.md b/.brv/context-tree/facts/extracted/line_length.md new file mode 100644 index 0000000..2600d1a --- /dev/null +++ b/.brv/context-tree/facts/extracted/line_length.md @@ -0,0 +1,24 @@ +--- +title: Line length +summary: Extracted facts about Line length +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.192Z' +updatedAt: '2026-05-27T19:41:18.192Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Line length + +## Facts +- **Line length**: Cap body line length at 65–75 characters. diff --git a/.brv/context-tree/facts/extracted/live.md b/.brv/context-tree/facts/extracted/live.md new file mode 100644 index 0000000..e221c30 --- /dev/null +++ b/.brv/context-tree/facts/extracted/live.md @@ -0,0 +1,24 @@ +--- +title: Live +summary: Extracted facts about live +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.270Z' +updatedAt: '2026-05-27T19:41:18.270Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under live + +## Facts +- **live**: `live` is an Iterate command that provides a visual variant mode, allowing selection of elements in the browser to generate alternatives. diff --git a/.brv/context-tree/facts/extracted/load_context_mjs_output.md b/.brv/context-tree/facts/extracted/load_context_mjs_output.md new file mode 100644 index 0000000..57eb066 --- /dev/null +++ b/.brv/context-tree/facts/extracted/load_context_mjs_output.md @@ -0,0 +1,24 @@ +--- +title: Load-context.mjs output +summary: Extracted facts about load-context.mjs output +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.137Z' +updatedAt: '2026-05-27T19:41:18.137Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under load-context.mjs output + +## Facts +- **load-context.mjs output**: Never pipe the context loader output through head, tail, grep, or jq. diff --git a/.brv/context-tree/facts/extracted/modal_usage.md b/.brv/context-tree/facts/extracted/modal_usage.md new file mode 100644 index 0000000..db95e15 --- /dev/null +++ b/.brv/context-tree/facts/extracted/modal_usage.md @@ -0,0 +1,24 @@ +--- +title: Modal usage +summary: Extracted facts about Modal usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.215Z' +updatedAt: '2026-05-27T19:41:18.215Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Modal usage + +## Facts +- **Modal usage**: Modals should not be the first design thought; exhaust inline or progressive alternatives first. diff --git a/.brv/context-tree/facts/extracted/neutral_tinting.md b/.brv/context-tree/facts/extracted/neutral_tinting.md new file mode 100644 index 0000000..b9ea75d --- /dev/null +++ b/.brv/context-tree/facts/extracted/neutral_tinting.md @@ -0,0 +1,24 @@ +--- +title: Neutral tinting +summary: Extracted facts about Neutral tinting +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.160Z' +updatedAt: '2026-05-27T19:41:18.160Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Neutral tinting + +## Facts +- **Neutral tinting**: Never use #000 or #fff; tint every neutral toward the brand hue with chroma 0.005–0.01. diff --git a/.brv/context-tree/facts/extracted/onboard.md b/.brv/context-tree/facts/extracted/onboard.md new file mode 100644 index 0000000..00aa08d --- /dev/null +++ b/.brv/context-tree/facts/extracted/onboard.md @@ -0,0 +1,24 @@ +--- +title: Onboard +summary: Extracted facts about onboard +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.252Z' +updatedAt: '2026-05-27T19:41:18.252Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under onboard + +## Facts +- **onboard**: `onboard [target]` is a Refine command that designs first‑run flows, empty states, and activation experiences. diff --git a/.brv/context-tree/facts/extracted/optimize.md b/.brv/context-tree/facts/extracted/optimize.md new file mode 100644 index 0000000..500a0ca --- /dev/null +++ b/.brv/context-tree/facts/extracted/optimize.md @@ -0,0 +1,24 @@ +--- +title: Optimize +summary: Extracted facts about optimize +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.268Z' +updatedAt: '2026-05-27T19:41:18.269Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under optimize + +## Facts +- **optimize**: `optimize [target]` is a Fix command that diagnoses and fixes UI performance issues. diff --git a/.brv/context-tree/facts/extracted/overdrive.md b/.brv/context-tree/facts/extracted/overdrive.md new file mode 100644 index 0000000..00fdc38 --- /dev/null +++ b/.brv/context-tree/facts/extracted/overdrive.md @@ -0,0 +1,24 @@ +--- +title: Overdrive +summary: Extracted facts about overdrive +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.260Z' +updatedAt: '2026-05-27T19:41:18.260Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under overdrive + +## Facts +- **overdrive**: `overdrive [target]` is an Enhance command that pushes past conventional limits. diff --git a/.brv/context-tree/facts/extracted/pin.md b/.brv/context-tree/facts/extracted/pin.md new file mode 100644 index 0000000..d1d8485 --- /dev/null +++ b/.brv/context-tree/facts/extracted/pin.md @@ -0,0 +1,24 @@ +--- +title: Pin +summary: Extracted facts about Pin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.272Z' +updatedAt: '2026-05-27T19:41:18.272Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Pin + +## Facts +- **Pin**: Pin creates a standalone shortcut so `{{command_prefix}}` invokes `{{command_prefix}}impeccable ` directly. diff --git a/.brv/context-tree/facts/extracted/pin_mjs_script.md b/.brv/context-tree/facts/extracted/pin_mjs_script.md new file mode 100644 index 0000000..a0625bc --- /dev/null +++ b/.brv/context-tree/facts/extracted/pin_mjs_script.md @@ -0,0 +1,24 @@ +--- +title: Pin.mjs script +summary: Extracted facts about pin.mjs script +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.274Z' +updatedAt: '2026-05-27T19:41:18.274Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under pin.mjs script + +## Facts +- **pin.mjs script**: The pin/unpin script writes to every harness directory present in the project. diff --git a/.brv/context-tree/facts/extracted/pin_unpin.md b/.brv/context-tree/facts/extracted/pin_unpin.md new file mode 100644 index 0000000..bd14ed3 --- /dev/null +++ b/.brv/context-tree/facts/extracted/pin_unpin.md @@ -0,0 +1,24 @@ +--- +title: Pin/unpin +summary: Extracted facts about pin/unpin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.271Z' +updatedAt: '2026-05-27T19:41:18.271Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under pin/unpin + +## Facts +- **pin/unpin**: `pin ` and `unpin ` are management commands for pinning and unpinning other commands. diff --git a/.brv/context-tree/facts/extracted/polish.md b/.brv/context-tree/facts/extracted/polish.md new file mode 100644 index 0000000..2abdccf --- /dev/null +++ b/.brv/context-tree/facts/extracted/polish.md @@ -0,0 +1,24 @@ +--- +title: Polish +summary: Extracted facts about polish +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.240Z' +updatedAt: '2026-05-27T19:41:18.240Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under polish + +## Facts +- **polish**: `polish [target]` is a Refine command that provides a final quality pass before shipping. diff --git a/.brv/context-tree/facts/extracted/product_md.md b/.brv/context-tree/facts/extracted/product_md.md new file mode 100644 index 0000000..bdf7f68 --- /dev/null +++ b/.brv/context-tree/facts/extracted/product_md.md @@ -0,0 +1,25 @@ +--- +title: PRODUCT.md +summary: Extracted facts about PRODUCT.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.125Z' +updatedAt: '2026-05-27T19:41:18.125Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under PRODUCT.md + +## Facts +- **PRODUCT.md**: PRODUCT.md is required. +- **PRODUCT.md**: If PRODUCT.md is missing, empty, or contains placeholder markers ([TODO] or less than 200 characters), run {{command_prefix}}impeccable teach. diff --git a/.brv/context-tree/facts/extracted/punctuation.md b/.brv/context-tree/facts/extracted/punctuation.md new file mode 100644 index 0000000..32ebda5 --- /dev/null +++ b/.brv/context-tree/facts/extracted/punctuation.md @@ -0,0 +1,24 @@ +--- +title: Punctuation +summary: Extracted facts about Punctuation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.223Z' +updatedAt: '2026-05-27T19:41:18.223Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Punctuation + +## Facts +- **Punctuation**: Em dashes are not allowed; use commas, colons, semicolons, periods, or parentheses instead. diff --git a/.brv/context-tree/facts/extracted/quieter.md b/.brv/context-tree/facts/extracted/quieter.md new file mode 100644 index 0000000..c98d436 --- /dev/null +++ b/.brv/context-tree/facts/extracted/quieter.md @@ -0,0 +1,24 @@ +--- +title: Quieter +summary: Extracted facts about quieter +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.243Z' +updatedAt: '2026-05-27T19:41:18.243Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under quieter + +## Facts +- **quieter**: `quieter [target]` is a Refine command that tones down aggressive or overstimulating designs. diff --git a/.brv/context-tree/facts/extracted/register_identification.md b/.brv/context-tree/facts/extracted/register_identification.md new file mode 100644 index 0000000..7788c0f --- /dev/null +++ b/.brv/context-tree/facts/extracted/register_identification.md @@ -0,0 +1,24 @@ +--- +title: Register identification +summary: Extracted facts about register identification +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.140Z' +updatedAt: '2026-05-27T19:41:18.140Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under register identification + +## Facts +- **register identification**: Identify the register before designing, using priority: (1) cue in the task, (2) surface in focus, (3) register field in PRODUCT.md. diff --git a/.brv/context-tree/facts/extracted/restrained_strategy.md b/.brv/context-tree/facts/extracted/restrained_strategy.md new file mode 100644 index 0000000..165af09 --- /dev/null +++ b/.brv/context-tree/facts/extracted/restrained_strategy.md @@ -0,0 +1,24 @@ +--- +title: Restrained strategy +summary: Extracted facts about Restrained strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.178Z' +updatedAt: '2026-05-27T19:41:18.178Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Restrained strategy + +## Facts +- **Restrained strategy**: Restrained strategy uses tinted neutrals plus one accent ≤10% of surface. diff --git a/.brv/context-tree/facts/extracted/screenshots.md b/.brv/context-tree/facts/extracted/screenshots.md new file mode 100644 index 0000000..1e08a58 --- /dev/null +++ b/.brv/context-tree/facts/extracted/screenshots.md @@ -0,0 +1,24 @@ +--- +title: Screenshots +summary: Extracted facts about Screenshots +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.285Z' +updatedAt: '2026-05-27T19:41:18.285Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Screenshots + +## Facts +- **Screenshots**: Screenshots captured: caplets-harden-desktop.png and caplets-harden-mobile.png. diff --git a/.brv/context-tree/facts/extracted/shape.md b/.brv/context-tree/facts/extracted/shape.md new file mode 100644 index 0000000..79244b8 --- /dev/null +++ b/.brv/context-tree/facts/extracted/shape.md @@ -0,0 +1,24 @@ +--- +title: Shape +summary: Extracted facts about shape +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.226Z' +updatedAt: '2026-05-27T19:41:18.226Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under shape + +## Facts +- **shape**: `shape [feature]` is a Build command that plans UX/UI before writing code. diff --git a/.brv/context-tree/facts/extracted/side_stripe_borders.md b/.brv/context-tree/facts/extracted/side_stripe_borders.md new file mode 100644 index 0000000..0fe0702 --- /dev/null +++ b/.brv/context-tree/facts/extracted/side_stripe_borders.md @@ -0,0 +1,24 @@ +--- +title: Side‑stripe borders +summary: Extracted facts about Side‑stripe borders +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.206Z' +updatedAt: '2026-05-27T19:41:18.206Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Side‑stripe borders + +## Facts +- **Side‑stripe borders**: Side‑stripe borders greater than 1 px as colored accents are prohibited. diff --git a/.brv/context-tree/facts/extracted/spacing.md b/.brv/context-tree/facts/extracted/spacing.md new file mode 100644 index 0000000..f3bebad --- /dev/null +++ b/.brv/context-tree/facts/extracted/spacing.md @@ -0,0 +1,24 @@ +--- +title: Spacing +summary: Extracted facts about Spacing +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.195Z' +updatedAt: '2026-05-27T19:41:18.195Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Spacing + +## Facts +- **Spacing**: Vary spacing for rhythm; same padding everywhere creates monotony. diff --git a/.brv/context-tree/facts/extracted/teach.md b/.brv/context-tree/facts/extracted/teach.md new file mode 100644 index 0000000..8440c92 --- /dev/null +++ b/.brv/context-tree/facts/extracted/teach.md @@ -0,0 +1,24 @@ +--- +title: Teach +summary: Extracted facts about teach +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.229Z' +updatedAt: '2026-05-27T19:41:18.229Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under teach + +## Facts +- **teach**: `teach` is a Build command that sets up PRODUCT.md and DESIGN.md context. diff --git a/.brv/context-tree/facts/extracted/theme_selection.md b/.brv/context-tree/facts/extracted/theme_selection.md new file mode 100644 index 0000000..d5eb1e4 --- /dev/null +++ b/.brv/context-tree/facts/extracted/theme_selection.md @@ -0,0 +1,24 @@ +--- +title: Theme selection +summary: Extracted facts about Theme selection +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.190Z' +updatedAt: '2026-05-27T19:41:18.190Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Theme selection + +## Facts +- **Theme selection**: Dark vs. light theme is never a default; must be chosen based on physical scene description. diff --git a/.brv/context-tree/facts/extracted/typecheck.md b/.brv/context-tree/facts/extracted/typecheck.md new file mode 100644 index 0000000..8a1d556 --- /dev/null +++ b/.brv/context-tree/facts/extracted/typecheck.md @@ -0,0 +1,24 @@ +--- +title: Typecheck +summary: Extracted facts about typecheck +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.277Z' +updatedAt: '2026-05-27T19:41:18.277Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under typecheck + +## Facts +- **typecheck**: `pnpm --filter @caplets/landing typecheck` passed with 0 errors, 0 warnings, and 0 hints. diff --git a/.brv/context-tree/facts/extracted/typeset.md b/.brv/context-tree/facts/extracted/typeset.md new file mode 100644 index 0000000..085db43 --- /dev/null +++ b/.brv/context-tree/facts/extracted/typeset.md @@ -0,0 +1,24 @@ +--- +title: Typeset +summary: Extracted facts about typeset +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.256Z' +updatedAt: '2026-05-27T19:41:18.256Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under typeset + +## Facts +- **typeset**: `typeset [target]` is an Enhance command that improves typography hierarchy and fonts. diff --git a/.brv/context-tree/facts/extracted/typographic_hierarchy.md b/.brv/context-tree/facts/extracted/typographic_hierarchy.md new file mode 100644 index 0000000..c4a32ed --- /dev/null +++ b/.brv/context-tree/facts/extracted/typographic_hierarchy.md @@ -0,0 +1,24 @@ +--- +title: Typographic hierarchy +summary: Extracted facts about Typographic hierarchy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.193Z' +updatedAt: '2026-05-27T19:41:18.193Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Typographic hierarchy + +## Facts +- **Typographic hierarchy**: Maintain hierarchy through scale and weight contrast with at least 1.25 ratio between steps. diff --git a/.brv/context-tree/facts/extracted/unpin.md b/.brv/context-tree/facts/extracted/unpin.md new file mode 100644 index 0000000..1548789 --- /dev/null +++ b/.brv/context-tree/facts/extracted/unpin.md @@ -0,0 +1,24 @@ +--- +title: Unpin +summary: Extracted facts about Unpin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T19:41:18.273Z' +updatedAt: '2026-05-27T19:41:18.273Z' +--- +## Reason +Curated extracted facts from RLM context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-27T19:41:18.110Z + +## Narrative +### Structure +Facts grouped under Unpin + +## Facts +- **Unpin**: Unpin removes the shortcut created by Pin. diff --git a/.brv/context-tree/facts/project/ai_generation_likelihood.md b/.brv/context-tree/facts/project/ai_generation_likelihood.md new file mode 100644 index 0000000..3fd87ee --- /dev/null +++ b/.brv/context-tree/facts/project/ai_generation_likelihood.md @@ -0,0 +1,24 @@ +--- +title: AI-generation likelihood +summary: Facts about AI-generation likelihood +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.174Z' +updatedAt: '2026-05-28T09:45:49.174Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for AI-generation likelihood + +## Facts +- **AI-generation likelihood**: It does not look immediately AI-generated. diff --git a/.brv/context-tree/facts/project/ai_slop.md b/.brv/context-tree/facts/project/ai_slop.md new file mode 100644 index 0000000..ea6c6d5 --- /dev/null +++ b/.brv/context-tree/facts/project/ai_slop.md @@ -0,0 +1,24 @@ +--- +title: AI slop +summary: Facts about AI slop +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.150Z' +updatedAt: '2026-05-28T09:45:49.150Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for AI slop + +## Facts +- **AI slop**: AI slop detection checks for AI color palette, gradient text, dark glows, glassmorphism, hero metric layouts, identical card grids, generic fonts, and other tells. diff --git a/.brv/context-tree/facts/project/assessment_a.md b/.brv/context-tree/facts/project/assessment_a.md new file mode 100644 index 0000000..0466f8e --- /dev/null +++ b/.brv/context-tree/facts/project/assessment_a.md @@ -0,0 +1,24 @@ +--- +title: Assessment A +summary: Facts about Assessment A +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.149Z' +updatedAt: '2026-05-28T09:45:49.149Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for Assessment A + +## Facts +- **Assessment A**: Assessment A is an LLM Design Review that evaluates AI slop detection, holistic design, cognitive load, emotional journey, and Nielsen's heuristics. diff --git a/.brv/context-tree/facts/project/assessment_b.md b/.brv/context-tree/facts/project/assessment_b.md new file mode 100644 index 0000000..8b48350 --- /dev/null +++ b/.brv/context-tree/facts/project/assessment_b.md @@ -0,0 +1,24 @@ +--- +title: Assessment B +summary: Facts about Assessment B +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.154Z' +updatedAt: '2026-05-28T09:45:49.154Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for Assessment B + +## Facts +- **Assessment B**: Assessment B runs the deterministic detector via the CLI command "npx impeccable --json [--fast] [target]". diff --git a/.brv/context-tree/facts/project/assessment_execution.md b/.brv/context-tree/facts/project/assessment_execution.md new file mode 100644 index 0000000..9d1fdc0 --- /dev/null +++ b/.brv/context-tree/facts/project/assessment_execution.md @@ -0,0 +1,24 @@ +--- +title: Assessment execution +summary: Facts about assessment execution +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.144Z' +updatedAt: '2026-05-28T09:45:49.144Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for assessment execution + +## Facts +- **assessment execution**: If sub‑agents are unavailable, the assessments should be performed sequentially with findings written to internal notes. diff --git a/.brv/context-tree/facts/project/browser.md b/.brv/context-tree/facts/project/browser.md index 58306a5..e7d8aee 100644 --- a/.brv/context-tree/facts/project/browser.md +++ b/.brv/context-tree/facts/project/browser.md @@ -5,20 +5,20 @@ tags: [] related: [] keywords: [] createdAt: '2026-05-27T18:59:51.377Z' -updatedAt: '2026-05-27T18:59:51.377Z' +updatedAt: '2026-05-28T09:45:49.178Z' --- ## Reason -Curate extracted project facts +Curated extracted facts from context ## Raw Concept **Task:** -Document project fact +Document extracted facts -**Timestamp:** 2026-05-27T18:59:51.340Z +**Timestamp:** 2026-05-28T09:45:49.131Z ## Narrative ### Highlights Extracted 1 facts for browser ## Facts -- **browser**: Browser console checked with 0 errors and 0 warnings. +- **browser**: Browser overlay was not diff --git a/.brv/context-tree/facts/project/browser_visualization.md b/.brv/context-tree/facts/project/browser_visualization.md new file mode 100644 index 0000000..4fa87c5 --- /dev/null +++ b/.brv/context-tree/facts/project/browser_visualization.md @@ -0,0 +1,24 @@ +--- +title: Browser visualization +summary: Facts about browser visualization +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.157Z' +updatedAt: '2026-05-28T09:45:49.157Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for browser visualization + +## Facts +- **browser visualization**: When using browser visualization, the live detection server is started with "npx impeccable live &" and stopped with "npx impeccable live stop". diff --git a/.brv/context-tree/facts/project/cli_exit_codes.md b/.brv/context-tree/facts/project/cli_exit_codes.md new file mode 100644 index 0000000..a69c7b5 --- /dev/null +++ b/.brv/context-tree/facts/project/cli_exit_codes.md @@ -0,0 +1,24 @@ +--- +title: CLI exit codes +summary: Facts about CLI exit codes +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.156Z' +updatedAt: '2026-05-28T09:45:49.156Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for CLI exit codes + +## Facts +- **CLI exit codes**: The CLI detector exits with code 0 for clean and code 2 for findings. diff --git a/.brv/context-tree/facts/project/cli_scan.md b/.brv/context-tree/facts/project/cli_scan.md new file mode 100644 index 0000000..2d98105 --- /dev/null +++ b/.brv/context-tree/facts/project/cli_scan.md @@ -0,0 +1,24 @@ +--- +title: CLI scan +summary: Facts about CLI scan +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.163Z' +updatedAt: '2026-05-28T09:45:49.163Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for CLI scan + +## Facts +- **CLI scan**: Deterministic scan: `npx impeccable --json apps/landing/src/pages/index.astro` returned [] diff --git a/.brv/context-tree/facts/project/cognitive_load.md b/.brv/context-tree/facts/project/cognitive_load.md new file mode 100644 index 0000000..49b3012 --- /dev/null +++ b/.brv/context-tree/facts/project/cognitive_load.md @@ -0,0 +1,24 @@ +--- +title: Cognitive load +summary: Facts about cognitive load +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.153Z' +updatedAt: '2026-05-28T09:45:49.153Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for cognitive load + +## Facts +- **cognitive load**: Cognitive load assessment uses an 8‑item checklist, flags >4 visible options at a decision point, and checks for progressive disclosure. diff --git a/.brv/context-tree/facts/project/commit_1ad7201.md b/.brv/context-tree/facts/project/commit_1ad7201.md new file mode 100644 index 0000000..7c67c9b --- /dev/null +++ b/.brv/context-tree/facts/project/commit_1ad7201.md @@ -0,0 +1,20 @@ +--- +title: commit 1ad7201 +summary: Facts about commit 1ad7201 +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:20:10.884Z' +updatedAt: '2026-05-27T23:20:10.884Z' +--- +## Reason +Curated facts from extraction + +## Raw Concept +**Task:** +Document facts for commit 1ad7201 + +**Timestamp:** 2026-05-27T23:20:10.880Z + +## Facts +- **commit 1ad7201**: Commit: `1ad7201 docs: specify agent setup tabs`. diff --git a/.brv/context-tree/facts/project/content_vs_style.md b/.brv/context-tree/facts/project/content_vs_style.md new file mode 100644 index 0000000..974e19a --- /dev/null +++ b/.brv/context-tree/facts/project/content_vs_style.md @@ -0,0 +1,24 @@ +--- +title: Content vs. style +summary: Facts about content vs. style +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.170Z' +updatedAt: '2026-05-28T09:45:49.170Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for content vs. style + +## Facts +- **content vs. style**: The page says “quiet confidence” in the content, then the CSS says “watch this animated cartography rig.” diff --git a/.brv/context-tree/facts/project/docs_specs_2026_05_27_agent_card_setup_tabs_design_md.md b/.brv/context-tree/facts/project/docs_specs_2026_05_27_agent_card_setup_tabs_design_md.md new file mode 100644 index 0000000..ef7e72c --- /dev/null +++ b/.brv/context-tree/facts/project/docs_specs_2026_05_27_agent_card_setup_tabs_design_md.md @@ -0,0 +1,20 @@ +--- +title: docs/specs/2026-05-27-agent-card-setup-tabs-design.md +summary: Facts about docs/specs/2026-05-27-agent-card-setup-tabs-design.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:20:10.882Z' +updatedAt: '2026-05-27T23:20:10.882Z' +--- +## Reason +Curated facts from extraction + +## Raw Concept +**Task:** +Document facts for docs/specs/2026-05-27-agent-card-setup-tabs-design.md + +**Timestamp:** 2026-05-27T23:20:10.880Z + +## Facts +- **docs/specs/2026-05-27-agent-card-setup-tabs-design.md**: Spec written and committed to `docs/specs/2026-05-27-agent-card-setup-tabs-design.md`. diff --git a/.brv/context-tree/facts/project/github_workflows_deploy_yml.md b/.brv/context-tree/facts/project/github_workflows_deploy_yml.md new file mode 100644 index 0000000..5ceb69f --- /dev/null +++ b/.brv/context-tree/facts/project/github_workflows_deploy_yml.md @@ -0,0 +1,24 @@ +--- +title: .github/workflows/deploy.yml +summary: Facts about .github/workflows/deploy.yml +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:30:56.817Z' +updatedAt: '2026-05-28T09:30:56.817Z' +--- +## Reason +Curated factual statements from source context + +## Raw Concept +**Task:** +Document facts about .github/workflows/deploy.yml + +**Timestamp:** 2026-05-28T09:30:56.811Z + +## Narrative +### Highlights +.github/workflows/deploy.yml: added an apps/ change check so deploy steps only run when the release or manual dispatch commit range includes changes under apps/. + +## Facts +- **.github/workflows/deploy.yml**: .github/workflows/deploy.yml: added an apps/ change check so deploy steps only run when the release or manual dispatch commit range includes changes under apps/. diff --git a/.brv/context-tree/facts/project/github_workflows_pr_preview_yml.md b/.brv/context-tree/facts/project/github_workflows_pr_preview_yml.md new file mode 100644 index 0000000..1a37c67 --- /dev/null +++ b/.brv/context-tree/facts/project/github_workflows_pr_preview_yml.md @@ -0,0 +1,24 @@ +--- +title: .github/workflows/pr-preview.yml +summary: Facts about .github/workflows/pr-preview.yml +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:30:56.815Z' +updatedAt: '2026-05-28T09:30:56.815Z' +--- +## Reason +Curated factual statements from source context + +## Raw Concept +**Task:** +Document facts about .github/workflows/pr-preview.yml + +**Timestamp:** 2026-05-28T09:30:56.811Z + +## Narrative +### Highlights +.github/workflows/pr-preview.yml: added paths: ['apps/**'] to the pull_request trigger. + +## Facts +- **.github/workflows/pr-preview.yml**: .github/workflows/pr-preview.yml: added paths: ['apps/**'] to the pull_request trigger. diff --git a/.brv/context-tree/facts/project/heuristic_scoring.md b/.brv/context-tree/facts/project/heuristic_scoring.md new file mode 100644 index 0000000..b87b9f2 --- /dev/null +++ b/.brv/context-tree/facts/project/heuristic_scoring.md @@ -0,0 +1,24 @@ +--- +title: Heuristic scoring +summary: Facts about heuristic scoring +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.161Z' +updatedAt: '2026-05-28T09:45:49.161Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for heuristic scoring + +## Facts +- **heuristic scoring**: Nielsen's 10 heuristics are scored 0‑4, with total possible score 40; most real interfaces score 20‑32. diff --git a/.brv/context-tree/facts/project/identified_issues.md b/.brv/context-tree/facts/project/identified_issues.md new file mode 100644 index 0000000..0a35e75 --- /dev/null +++ b/.brv/context-tree/facts/project/identified_issues.md @@ -0,0 +1,24 @@ +--- +title: Identified issues +summary: Facts about identified issues +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.165Z' +updatedAt: '2026-05-28T09:45:49.165Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for identified issues + +## Facts +- **identified issues**: The issues live mostly in CSS, product-context mismatch, motion volume, no-JS behavior, install consistency, and trust-copy specificity. diff --git a/.brv/context-tree/facts/project/scan_result.md b/.brv/context-tree/facts/project/scan_result.md new file mode 100644 index 0000000..4c2c2c6 --- /dev/null +++ b/.brv/context-tree/facts/project/scan_result.md @@ -0,0 +1,24 @@ +--- +title: Scan result +summary: Facts about scan result +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.164Z' +updatedAt: '2026-05-28T09:45:49.164Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for scan result + +## Facts +- **scan result**: No CLI findings. diff --git a/.brv/context-tree/facts/project/skill.md b/.brv/context-tree/facts/project/skill.md new file mode 100644 index 0000000..53a12f6 --- /dev/null +++ b/.brv/context-tree/facts/project/skill.md @@ -0,0 +1,24 @@ +--- +title: Skill +summary: Facts about skill +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.133Z' +updatedAt: '2026-05-28T09:45:49.133Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for skill + +## Facts +- **skill**: The skill is named "critique" and is located at "/home/ianpascoe/.agents/skills/critique/SKILL.md". diff --git a/.brv/context-tree/facts/project/step_1.md b/.brv/context-tree/facts/project/step_1.md new file mode 100644 index 0000000..0957312 --- /dev/null +++ b/.brv/context-tree/facts/project/step_1.md @@ -0,0 +1,24 @@ +--- +title: Step 1 +summary: Facts about step 1 +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.135Z' +updatedAt: '2026-05-28T09:45:49.135Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for step 1 + +## Facts +- **step 1**: Step 1 requires invoking "/impeccable" and, if no design context exists, running "/impeccable teach" first. diff --git a/.brv/context-tree/facts/project/step_2.md b/.brv/context-tree/facts/project/step_2.md new file mode 100644 index 0000000..b1c1ace --- /dev/null +++ b/.brv/context-tree/facts/project/step_2.md @@ -0,0 +1,24 @@ +--- +title: Step 2 +summary: Facts about step 2 +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.141Z' +updatedAt: '2026-05-28T09:45:49.141Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for step 2 + +## Facts +- **step 2**: Step 2 mandates launching two independent assessments (Assessment A and Assessment B) without sharing outputs between them. diff --git a/.brv/context-tree/facts/project/step_3.md b/.brv/context-tree/facts/project/step_3.md new file mode 100644 index 0000000..25c9437 --- /dev/null +++ b/.brv/context-tree/facts/project/step_3.md @@ -0,0 +1,24 @@ +--- +title: Step 3 +summary: Facts about step 3 +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.159Z' +updatedAt: '2026-05-28T09:45:49.159Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for step 3 + +## Facts +- **step 3**: Step 3 requires synthesizing both assessments into a combined critique report, including a Design Health Score and an Anti‑Patterns Verdict. diff --git a/.brv/context-tree/facts/project/system.md b/.brv/context-tree/facts/project/system.md new file mode 100644 index 0000000..616f5a9 --- /dev/null +++ b/.brv/context-tree/facts/project/system.md @@ -0,0 +1,24 @@ +--- +title: System +summary: Facts about system +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.176Z' +updatedAt: '2026-05-28T09:45:49.176Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for system + +## Facts +- **system**: No false positives. diff --git a/.brv/context-tree/facts/project/tab_isolation.md b/.brv/context-tree/facts/project/tab_isolation.md new file mode 100644 index 0000000..ff70b03 --- /dev/null +++ b/.brv/context-tree/facts/project/tab_isolation.md @@ -0,0 +1,24 @@ +--- +title: Tab isolation +summary: Facts about tab isolation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.147Z' +updatedAt: '2026-05-28T09:45:49.147Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for tab isolation + +## Facts +- **tab isolation**: Each assessment must create a new browser tab and label it by setting the document title ("[LLM] " or "[Human] ") when browser automation is used. diff --git a/.brv/context-tree/facts/project/visual_design.md b/.brv/context-tree/facts/project/visual_design.md new file mode 100644 index 0000000..7adc6a5 --- /dev/null +++ b/.brv/context-tree/facts/project/visual_design.md @@ -0,0 +1,24 @@ +--- +title: Visual design +summary: Facts about visual design +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.167Z' +updatedAt: '2026-05-28T09:45:49.167Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for visual design + +## Facts +- **visual design**: It risks looking like a very polished AI-made landing page for a developer tool because it spends too much surface area on theatrical motion and metaphor. diff --git a/.brv/context-tree/facts/project/visual_language.md b/.brv/context-tree/facts/project/visual_language.md new file mode 100644 index 0000000..c9d12db --- /dev/null +++ b/.brv/context-tree/facts/project/visual_language.md @@ -0,0 +1,24 @@ +--- +title: Visual language +summary: Facts about visual language +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:45:49.172Z' +updatedAt: '2026-05-28T09:45:49.172Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T09:45:49.131Z + +## Narrative +### Highlights +Extracted 1 facts for visual language + +## Facts +- **visual language**: The capability-card metaphor, concrete MCP/client names, tabbed integration snippets, before/after tool-list comparison, and warm map-like visual language all feel more intentional than template output. diff --git a/.brv/context-tree/facts/project/workflows.md b/.brv/context-tree/facts/project/workflows.md new file mode 100644 index 0000000..4c3b95a --- /dev/null +++ b/.brv/context-tree/facts/project/workflows.md @@ -0,0 +1,24 @@ +--- +title: Workflows +summary: Facts about workflows +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T09:30:56.813Z' +updatedAt: '2026-05-28T09:30:56.813Z' +--- +## Reason +Curated factual statements from source context + +## Raw Concept +**Task:** +Document facts about workflows + +**Timestamp:** 2026-05-28T09:30:56.811Z + +## Narrative +### Highlights +User wants the workflows to only run when changes to apps/ occur. + +## Facts +- **workflows**: User wants the workflows to only run when changes to apps/ occur. diff --git a/.brv/context-tree/facts/standardized-curation-workflow-as-core-project-infrastructure.md b/.brv/context-tree/facts/standardized-curation-workflow-as-core-project-infrastructure.md new file mode 100644 index 0000000..a4a690a --- /dev/null +++ b/.brv/context-tree/facts/standardized-curation-workflow-as-core-project-infrastructure.md @@ -0,0 +1,22 @@ +--- +confidence: 0.92 +sources: [facts/_index.md, project/_index.md] +synthesized_at: '2026-05-27T23:38:23.764Z' +type: synthesis +title: Standardized Curation Workflow as Core Project Infrastructure +summary: The project formalizes a recon‑first, UPSERT‑based curation pipeline used across facts and project domains. +tags: [curation, workflow, upssert, recon] +related: [] +keywords: [curation, recon, upssert, extraction, verification, workflow, runtime, infrastructure, knowledge, automation] +createdAt: '2026-05-27T23:38:23.764Z' +updatedAt: '2026-05-27T23:38:23.764Z' +--- + +# Standardized Curation Workflow as Core Project Infrastructure + +Both the facts domain and the project domain describe the same durable curation workflow (recon → extraction → UPSERT → verification), making it a reusable infrastructure component for knowledge management. + +## Evidence + +- **facts**: Curation/runtime conventions define recon‑first analysis, single‑pass or chunked extraction, and UPSERT with verification. +- **project**: RLM curation workflow records the canonical process, emphasizing recon‑first, UPSERT, and `result.summary.failed === 0` verification. diff --git a/.brv/context-tree/project/verification-first-as-a-cross-domain-safety-model.md b/.brv/context-tree/project/verification-first-as-a-cross-domain-safety-model.md new file mode 100644 index 0000000..9e62f27 --- /dev/null +++ b/.brv/context-tree/project/verification-first-as-a-cross-domain-safety-model.md @@ -0,0 +1,24 @@ +--- +confidence: 0.97 +sources: [architecture/_index.md, docs/_index.md, facts/_index.md, project/_index.md] +synthesized_at: '2026-05-27T23:38:23.761Z' +type: synthesis +title: Verification‑First as a Cross‑Domain Safety Model +summary: All major project areas treat explicit verification as the true completion signal, not just workflow success. +tags: [verification, safety, ci-cd] +related: [] +keywords: [verification, compliance, testing, release, curation, workflow, safety, automation, policy, validation] +createdAt: '2026-05-27T23:38:23.761Z' +updatedAt: '2026-05-27T23:38:23.761Z' +--- + +# Verification‑First as a Cross‑Domain Safety Model + +The project enforces a verification‑first policy that spans architecture, documentation, facts, and project workflows, ensuring changes are only considered complete after passing automated verification tests and review outcomes. + +## Evidence + +- **architecture**: Verification and compliance are listed as a core pillar ("Task 1 Spec Compliance Review"). +- **docs**: Release automation and completion pipelines are gated by verified publish state, not merely successful workflow runs. +- **facts**: Curation/runtime conventions require recon → extraction → curate with UPSERT and verification that `result.summary.failed === 0`. +- **project**: The shared safety model explicitly states that verification is the real completion signal across the project. diff --git a/.brv/context-tree/src/caplets/agent_setup_tabs.md b/.brv/context-tree/src/caplets/agent_setup_tabs.md new file mode 100644 index 0000000..13b1bf0 --- /dev/null +++ b/.brv/context-tree/src/caplets/agent_setup_tabs.md @@ -0,0 +1,22 @@ +--- +title: agent setup tabs +summary: Facts about agent setup tabs +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:46:33.724Z' +updatedAt: '2026-05-27T23:46:33.724Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document facts about agent setup tabs + +## Narrative +### Highlights +Implemented agent setup tabs for the landing integrations card. + +## Facts +- **agent setup tabs**: Implemented agent setup tabs for the landing integrations card. diff --git a/.brv/context-tree/src/caplets/build.md b/.brv/context-tree/src/caplets/build.md new file mode 100644 index 0000000..049c1e2 --- /dev/null +++ b/.brv/context-tree/src/caplets/build.md @@ -0,0 +1,22 @@ +--- +title: build +summary: Facts about build +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:46:33.751Z' +updatedAt: '2026-05-27T23:46:33.751Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document facts about build + +## Narrative +### Highlights +pnpm --filter @caplets/landing build passed. + +## Facts +- **build**: pnpm --filter @caplets/landing build passed. diff --git a/.brv/context-tree/src/caplets/caplets_module.md b/.brv/context-tree/src/caplets/caplets_module.md new file mode 100644 index 0000000..98c74e0 --- /dev/null +++ b/.brv/context-tree/src/caplets/caplets_module.md @@ -0,0 +1,39 @@ +--- +title: Caplets Module +summary: Extracted factual statements about caplets implementation and usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:54:41.417Z' +updatedAt: '2026-05-27T23:54:41.417Z' +--- +## Reason +Curate extracted facts from caplets source context + +## Raw Concept +**Task:** +Document caplets module knowledge + +**Timestamp:** 2026-05-27T23:54:41.412Z + +## Facts +- **commit_range_0e56e8f..HEAD**: Reviewed committed changes only for `0e56e8f^..HEAD` covering `apps/landing/src/pages/index.astro`, `apps/landing/src/styles/global.css`, and `docs/plans/2026-05-27-agent-card-setup-tabs.md`. +- **file_selection**: Ignored unrelated unstaged/untracked files shown by `git status`. +- **OpenCode**: Previous misinformation blockers are fixed: OpenCode setup now uses native plugin install/config with `npm install -g @caplets/opencode` and plugin configuration in `apps/landing/src/pages/index.astro:51-57` as confirmed by `packages/opencode/README.md`. +- **Pi**: Previous misinformation blockers are fixed: Pi setup now uses Pi extension install/settings with `pi install npm:@caplets/pi` and package registration in `apps/landing/src/pages/index.astro:60-66` as confirmed by `packages/pi/README.md`. +- **tab_interface**: Accessibility implementation uses proper `role="tablist"`, `role="tab"`, `role="tabpanel"`, `aria-selected`, `aria-controls`, and `aria-labelledby` at `apps/landing/src/pages/index.astro:260-284`. +- **apps/landing/src/pages/index.astro:260-284**: Uses proper role="tablist", role="tab", role="tabpanel", aria-selected, aria-controls, and aria-labelledby +- **apps/landing/src/pages/index.astro:359-380**: Keyboard navigation supports ArrowLeft/ArrowRight/Home/End and moves focus/selection +- **apps/landing/src/pages/index.astro:284**: Hidden inactive panels use the native hidden attribute +- **apps/landing/src/styles/global.css:993-995**: CSS reinforces display behavior for hidden panels +- **Astro/TypeScript code**: Inline script types are valid +- **pnpm typecheck**: pnpm --filter @caplets/landing typecheck passed with 0 errors/warnings/hints +- **pnpm build**: pnpm --filter @caplets/landing build passed +- **apps/landing/src/styles/global.css:953-1019**: Styling reuses existing design tokens and visual language (--night-*, --font-mono, --ease-out) +- **apps/landing/src/styles/global.css:1256-1258**: Responsive behavior collapses setup grid cleanly +- **apps/landing/src/styles/global.css:1326-1333**: Reduced-motion fallback includes new tab/panel elements +- **apps/landing/src/pages/index.astro:26-78**: agentSetups centralizes tab labels, commands, snippets, and notes +- **apps/landing/src/pages/index.astro:80**: integrations derives from agentSetups, avoiding duplicated client names +- **Project status**: Blocker: None +- **Build warning**: Build emits a Node deprecation warning from tooling (module.register()), but the landing typecheck/build both pass and this is unrelated to the committed tab changes +- **blocker**: Blocker: None. diff --git a/.brv/context-tree/src/caplets/changed_files.md b/.brv/context-tree/src/caplets/changed_files.md new file mode 100644 index 0000000..ed2108b --- /dev/null +++ b/.brv/context-tree/src/caplets/changed_files.md @@ -0,0 +1,22 @@ +--- +title: changed files +summary: Facts about changed files +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:46:33.727Z' +updatedAt: '2026-05-27T23:46:33.727Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document facts about changed files + +## Narrative +### Highlights +Changed files: apps/landing/src/pages/index.astro, apps/landing/src/styles/global.css, docs/plans/2026-05-27-agent-card-setup-tabs.md. + +## Facts +- **changed files**: Changed files: apps/landing/src/pages/index.astro, apps/landing/src/styles/global.css, docs/plans/2026-05-27-agent-card-setup-tabs.md. diff --git a/.brv/context-tree/src/caplets/commit_0e56e8f.md b/.brv/context-tree/src/caplets/commit_0e56e8f.md new file mode 100644 index 0000000..0b44d12 --- /dev/null +++ b/.brv/context-tree/src/caplets/commit_0e56e8f.md @@ -0,0 +1,22 @@ +--- +title: commit 0e56e8f +summary: Facts about commit 0e56e8f +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:46:33.733Z' +updatedAt: '2026-05-27T23:46:33.733Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document facts about commit 0e56e8f + +## Narrative +### Highlights +Commit 0e56e8f with message "feat(landing): add agent setup tabs" was created. + +## Facts +- **commit 0e56e8f**: Commit 0e56e8f with message "feat(landing): add agent setup tabs" was created. diff --git a/.brv/context-tree/src/caplets/format_check.md b/.brv/context-tree/src/caplets/format_check.md new file mode 100644 index 0000000..a8609d3 --- /dev/null +++ b/.brv/context-tree/src/caplets/format_check.md @@ -0,0 +1,22 @@ +--- +title: format check +summary: Facts about format check +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:46:33.735Z' +updatedAt: '2026-05-27T23:46:33.735Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document facts about format check + +## Narrative +### Highlights +pnpm format:check passed. + +## Facts +- **format check**: pnpm format:check passed. diff --git a/.brv/context-tree/src/caplets/lint.md b/.brv/context-tree/src/caplets/lint.md new file mode 100644 index 0000000..9296fff --- /dev/null +++ b/.brv/context-tree/src/caplets/lint.md @@ -0,0 +1,22 @@ +--- +title: lint +summary: Facts about lint +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:46:33.737Z' +updatedAt: '2026-05-27T23:46:33.737Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document facts about lint + +## Narrative +### Highlights +pnpm lint passed. + +## Facts +- **lint**: pnpm lint passed. diff --git a/.brv/context-tree/src/caplets/pre_commit_hook.md b/.brv/context-tree/src/caplets/pre_commit_hook.md new file mode 100644 index 0000000..99c7368 --- /dev/null +++ b/.brv/context-tree/src/caplets/pre_commit_hook.md @@ -0,0 +1,22 @@ +--- +title: pre-commit hook +summary: Facts about pre-commit hook +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:46:33.753Z' +updatedAt: '2026-05-27T23:46:33.753Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document facts about pre-commit hook + +## Narrative +### Highlights +Pre-commit hook ran broader format/lint/typecheck successfully. + +## Facts +- **pre-commit hook**: Pre-commit hook ran broader format/lint/typecheck successfully. diff --git a/.brv/context-tree/src/caplets/typecheck.md b/.brv/context-tree/src/caplets/typecheck.md new file mode 100644 index 0000000..6b9e658 --- /dev/null +++ b/.brv/context-tree/src/caplets/typecheck.md @@ -0,0 +1,22 @@ +--- +title: typecheck +summary: Facts about typecheck +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:46:33.740Z' +updatedAt: '2026-05-27T23:46:33.740Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document facts about typecheck + +## Narrative +### Highlights +pnpm --filter @caplets/landing typecheck passed. + +## Facts +- **typecheck**: pnpm --filter @caplets/landing typecheck passed. diff --git a/.brv/context-tree/src/caplets/working_tree.md b/.brv/context-tree/src/caplets/working_tree.md new file mode 100644 index 0000000..02081dd --- /dev/null +++ b/.brv/context-tree/src/caplets/working_tree.md @@ -0,0 +1,22 @@ +--- +title: working tree +summary: Facts about working tree +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:46:33.759Z' +updatedAt: '2026-05-27T23:46:33.759Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document facts about working tree + +## Narrative +### Highlights +Working tree still has unrelated pre-existing changes after the commit, including .brv/*, deleted apps/landing/.vscode/*, screenshots, and unstaged modifications to apps/landing/src/pages/index.astro and apps/landing/src/styles/global.css. + +## Facts +- **working tree**: Working tree still has unrelated pre-existing changes after the commit, including .brv/*, deleted apps/landing/.vscode/*, screenshots, and unstaged modifications to apps/landing/src/pages/index.astro and apps/landing/src/styles/global.css. diff --git a/.brv/context-tree/ui/agent_card_tabs/agent_card_tabs.md b/.brv/context-tree/ui/agent_card_tabs/agent_card_tabs.md new file mode 100644 index 0000000..074de04 --- /dev/null +++ b/.brv/context-tree/ui/agent_card_tabs/agent_card_tabs.md @@ -0,0 +1,45 @@ +--- +title: Agent Card Tabs +summary: Design for turning agent pills into configurable tabs with commands and settings +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T23:18:59.168Z' +updatedAt: '2026-05-27T23:18:59.168Z' +--- +## Reason +Document design decision for agent pills as tabs + +## Raw Concept +**Task:** +Design UI where each agent pill acts as a tab showing configuration/commands + +**Changes:** +- Agent pills become tab triggers +- Detail area shows install command, config snippet, usage note +- Data modeled per agent for extensibility +- Tests added for tab functionality + +**Flow:** +User selects pill -> UI swaps detail area to show agent-specific info + +**Timestamp:** 2026-05-27T23:18:59.161Z + +## Narrative +### Structure +Agents card layout unchanged; pills act as tabs triggering detail pane + +### Highlights +Preserves existing layout, adds configurability, supports future agents + +### Examples +Click on "Agent A" pill to view its install command and config snippet + +## Facts +- **card and agent pills**: I want it to be the card as it currently is, but each agent's pill is a tab showing the configuration/commands. +- **agents card layout**: Keep the agents card layout exactly as-is structurally. +- **agent pill behavior**: Treat each existing agent pill as a tab trigger. +- **pill interaction**: Selecting a pill swaps the detail area below/near the pills to show that agent’s install command, configuration snippet, and short usage note if needed. +- **active pill appearance**: The active pill should be visually distinct but still look like the existing pill style, not a new heavy tab component. +- **data modeling**: Data should be modeled per agent so future agents can add setup content without changing rendering logic. +- **test cases**: Tests should verify tab labels render, default selected agent content appears, and switching pills reveals the matching commands/configuration. diff --git a/.brv/context-tree/ui/agent_card_tabs/context.md b/.brv/context-tree/ui/agent_card_tabs/context.md new file mode 100644 index 0000000..7e6bfa3 --- /dev/null +++ b/.brv/context-tree/ui/agent_card_tabs/context.md @@ -0,0 +1,10 @@ +# Topic: agent_card_tabs + +## Overview +Design for converting agent pills into tabs to show configuration/commands + +## Key Concepts +- agent pill +- tab trigger +- configuration snippet +- install command diff --git a/.brv/context-tree/ui/context.md b/.brv/context-tree/ui/context.md new file mode 100644 index 0000000..60ca6e5 --- /dev/null +++ b/.brv/context-tree/ui/context.md @@ -0,0 +1,9 @@ +# Domain: ui + +## Purpose +UI component designs for caplets interface + +## Scope +Included in this domain: +- Agent card modifications +- Tab interactions From b1beac68826f2fcd05b55cfaaa1bf3f2674a6aa1 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 28 May 2026 06:33:39 -0400 Subject: [PATCH 13/21] chore: changeset --- .changeset/major-moose-listen.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .changeset/major-moose-listen.md diff --git a/.changeset/major-moose-listen.md b/.changeset/major-moose-listen.md new file mode 100644 index 0000000..3fe4b10 --- /dev/null +++ b/.changeset/major-moose-listen.md @@ -0,0 +1,9 @@ +--- +"@caplets/landing": minor +"@caplets/opencode": patch +"@caplets/core": patch +"caplets": patch +"@caplets/pi": patch +--- + +Add landing page and bump dependencies From 0d33715484ca5c9072ae61508e20e55a86f9cc32 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 28 May 2026 06:43:40 -0400 Subject: [PATCH 14/21] ci: fix deploy triggers --- .github/workflows/deploy.yml | 26 -------------------------- .github/workflows/pr-preview.yml | 2 -- 2 files changed, 28 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 720af36..fbb1493 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -22,45 +22,19 @@ jobs: with: fetch-depth: 0 - - name: Check apps/ changes - id: apps-changes - run: | - if [[ "${{ github.event_name }}" == "release" ]]; then - current_tag="${{ github.event.release.tag_name }}" - previous_tag="$(git describe --tags --abbrev=0 "${current_tag}^" 2>/dev/null || true)" - - if [[ -n "$previous_tag" ]]; then - changed_files="$(git diff --name-only "$previous_tag" "$current_tag")" - else - changed_files="$(git diff-tree --no-commit-id --name-only -r "$current_tag")" - fi - else - changed_files="$(git diff-tree --no-commit-id --name-only -r HEAD)" - fi - - if grep -q '^apps/' <<< "$changed_files"; then - echo "changed=true" >> "$GITHUB_OUTPUT" - else - echo "changed=false" >> "$GITHUB_OUTPUT" - fi - - name: Setup pnpm - if: steps.apps-changes.outputs.changed == 'true' uses: pnpm/action-setup@v6 - name: Setup Node - if: steps.apps-changes.outputs.changed == 'true' uses: actions/setup-node@v6 with: node-version: 24 cache: pnpm - name: Install dependencies - if: steps.apps-changes.outputs.changed == 'true' run: pnpm install --frozen-lockfile - name: Run quality gates - if: steps.apps-changes.outputs.changed == 'true' run: pnpm run alchemy:deploy env: ALCHEMY_STAGE: prod diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml index 7e78bae..ca99d73 100644 --- a/.github/workflows/pr-preview.yml +++ b/.github/workflows/pr-preview.yml @@ -4,8 +4,6 @@ on: pull_request: branches: - main - paths: - - "apps/**" permissions: contents: read From 0cb8ed9ddd3befc7ed249f0fe5c2f2ccb03aa9f1 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 28 May 2026 06:55:46 -0400 Subject: [PATCH 15/21] fix: landing --- .github/workflows/deploy.yml | 4 +- .../{pr-preview.yml => pr-preview-deploy.yml} | 4 +- alchemy.run.ts | 2 +- apps/landing/src/pages/index.astro | 314 +++++---- apps/landing/src/styles/global.css | 662 +++++++----------- mise.toml | 2 + 6 files changed, 425 insertions(+), 563 deletions(-) rename .github/workflows/{pr-preview.yml => pr-preview-deploy.yml} (96%) create mode 100644 mise.toml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index fbb1493..7337bc0 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: PR Preview +name: Deploy on: release: @@ -14,7 +14,7 @@ concurrency: jobs: deploy: - name: Verify + name: Deploy runs-on: ubuntu-latest steps: - name: Checkout diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview-deploy.yml similarity index 96% rename from .github/workflows/pr-preview.yml rename to .github/workflows/pr-preview-deploy.yml index ca99d73..884f21e 100644 --- a/.github/workflows/pr-preview.yml +++ b/.github/workflows/pr-preview-deploy.yml @@ -1,4 +1,4 @@ -name: PR Preview +name: PR Preview Deploy on: pull_request: @@ -15,7 +15,7 @@ concurrency: jobs: deploy: - name: Verify + name: Deploy runs-on: ubuntu-latest steps: - name: Checkout diff --git a/alchemy.run.ts b/alchemy.run.ts index bd4aed5..508bc69 100644 --- a/alchemy.run.ts +++ b/alchemy.run.ts @@ -10,7 +10,7 @@ const app = await alchemy("caplets", { password: process.env.ALCHEMY_PASSWORD!, }); -const landingPageDomain = app.stage === "prod" ? baseDomain : `${app.stage}.${baseDomain}`; +const landingPageDomain = app.stage === "prod" ? baseDomain : `${app.stage}.preview.${baseDomain}`; export const landingPage = await Astro("landing-page", { assets: "apps/landing/dist", cwd: "apps/landing", diff --git a/apps/landing/src/pages/index.astro b/apps/landing/src/pages/index.astro index 4d07d4f..9ef307a 100644 --- a/apps/landing/src/pages/index.astro +++ b/apps/landing/src/pages/index.astro @@ -1,24 +1,70 @@ --- import "../styles/global.css"; -const capabilityCards = [ +const heroTrace = { + capability: "github", + source: ".caplets/config.json", + status: "ready", + auth: "token present, redacted", + steps: [ + { + label: "get_caplet", + detail: "Expose one card before any downstream tool list enters context.", + result: "search_tools · get_tool · call_tool", + }, + { + label: 'search_tools("pull request")', + detail: "Find matching operations inside the selected capability only.", + result: "create_pull_request · list_pull_requests · request_review", + }, + { + label: 'get_tool("create_pull_request")', + detail: "Inspect the preserved schema before an agent can invoke the operation.", + result: "title · body · base · head · reviewers?", + }, + { + label: "call_tool(arguments)", + detail: "Forward the call and keep downstream content, structured data, and errors intact.", + result: "structuredContent + content", + }, + ], +}; + +const skillifyFramework = [ + { + title: "Discoverable as one capability", + copy: "A backend enters the agent context as a focused card with source, status, and next actions, not a flat wall of operations.", + }, + { + title: "Inspectable before invocation", + copy: "Agents search inside the selected capability, then inspect exact tool schemas before any call is made.", + }, + { + title: "Lossless after the call", + copy: "Caplets preserves structured content, resource links, images, and downstream error state instead of flattening results away.", + }, +]; + +const trustMechanics = [ + { + label: "Source", + value: ".caplets/config.json", + copy: "Users can see where the capability came from before trusting it.", + }, { - name: "Context7", - kind: "MCP", - copy: "Current framework docs without loading every operation up front.", - ops: ["get_caplet", "search_tools", "get_tool", "call_tool"], + label: "Auth", + value: "GITHUB_TOKEN: redacted", + copy: "Secrets stay hidden while auth state remains inspectable.", }, { - name: "Repo CLI", - kind: "CLI", - copy: "Curated local commands exposed as safe, inspectable agent actions.", - ops: ["list_tools", "get_tool", "call_tool"], + label: "Timeout", + value: "30s boundary", + copy: "Slow or stuck backends fail visibly instead of disappearing into agent context.", }, { - name: "GitHub", - kind: "MCP", - copy: "Issues, pull requests, branches, and review workflows behind one card.", - ops: ["search_tools", "get_tool", "call_tool"], + label: "Error", + value: "safe message + raw detail scoped", + copy: "Recovery information stays useful without leaking sensitive configuration.", }, ]; @@ -86,26 +132,8 @@ pi install npm:@caplets/pi`, const integrations = agentSetups.map((agent) => agent.name); -const proofPoints = [ - { - eyebrow: "Progressive disclosure", - title: "One capability first. Details only when useful.", - copy: "Agents see compact domain cards, then inspect tools, schemas, resources, prompts, and calls inside the selected capability.", - }, - { - eyebrow: "Lossless routing", - title: "Downstream results stay intact.", - copy: "Caplets forwards tool results without flattening away structured content, images, resource links, or downstream error state.", - }, - { - eyebrow: "Operational safety", - title: "Config failures are visible and redacted.", - copy: "Backend checks, source metadata, timeouts, auth status, and safe errors make setup inspectable without leaking secrets.", - }, -]; - const installSteps = [ - "pnpm add -g caplets", + "npm install -g caplets", "caplets init", "caplets add mcp docs --command npx --arg -y --arg @upstash/context7-mcp", "caplets serve", @@ -134,7 +162,7 @@ const installSteps = [ Caplets @@ -154,15 +182,18 @@ const installSteps = [

Capability cards for coding agents

-

Give every tool stack a map.

+

Skillify your backends.

- Caplets wraps MCP servers, APIs, local commands, and remote services behind focused - cards. Agents choose a capability domain first, then inspect only the operations they - need. + Caplets turns MCP servers, APIs, and commands into focused agent capabilities: one card + first, searchable tools next, inspectable schemas before calls, and preserved results after. +

+

+ To skillify a backend is to wrap it as a capability an agent can discover, inspect, call, + and recover from one step at a time.

@@ -176,45 +207,33 @@ const installSteps = [
-
-
- - caplets.tools/list -
- - + +
@@ -245,13 +264,13 @@ const installSteps = [
-

Built for real agent workflows

-

A compact surface that still tells the truth.

+

What skillify means

+

A backend becomes safe for agents when it reveals itself in stages.

- {proofPoints.map((point) => ( + {skillifyFramework.map((point, index) => (
-

{point.eyebrow}

+

0{index + 1}

{point.title}

{point.copy}

@@ -259,6 +278,29 @@ const installSteps = [
+
+
+

Trust before invocation

+

Trust is visible before the call.

+
+
+ {trustMechanics.map((item) => ( +
+ {item.label} + {item.value} +

{item.copy}

+
+ ))} +
+
+ Safe recovery example +

+ If a backend fails, Caplets keeps the error scoped to the capability, preserves useful + recovery detail, and redacts sensitive configuration before it reaches the agent. +

+
+
+

Native where it helps

@@ -281,23 +323,28 @@ const installSteps = [ ))}
- {agentSetups.map((agent, index) => ( + {agentSetups.map((agent) => ( @@ -364,14 +376,22 @@ const installSteps = [

-
+
    - {installSteps.map((step) => ( + {installSteps.map((step, index) => (
  1. - {step} - + {step} +
  2. ))}
@@ -390,23 +410,31 @@ const installSteps = [ const canAnimate = !window.matchMedia("(prefers-reduced-motion: reduce)").matches; const agentTabsRoot = document.querySelector("[data-agent-tabs]"); + const agentTablist = document.querySelector("[data-agent-tablist]"); const agentTabs = Array.from(document.querySelectorAll("[data-agent-tab]")); const agentPanels = Array.from(document.querySelectorAll("[data-agent-panel]")); const copyButtons = Array.from(document.querySelectorAll("[data-copy-value]")); function selectAgentTab(selectedId: string) { for (const tab of agentTabs) { - const isSelected = tab.dataset.agentTab === selectedId; + const tabId = tab.dataset.agentTab; + const isSelected = tabId === selectedId; + tab.setAttribute("role", "tab"); tab.setAttribute("aria-selected", String(isSelected)); + if (tabId) tab.setAttribute("aria-controls", `agent-panel-${tabId}`); tab.tabIndex = isSelected ? 0 : -1; } for (const panel of agentPanels) { - panel.hidden = panel.dataset.agentPanel !== selectedId; + const panelId = panel.dataset.agentPanel; + panel.setAttribute("role", "tabpanel"); + if (panelId) panel.setAttribute("aria-labelledby", `agent-tab-${panelId}`); + panel.hidden = panelId !== selectedId; } } if (agentTabsRoot && agentTabs.length > 0 && agentPanels.length > 0) { + agentTablist?.setAttribute("role", "tablist"); selectAgentTab(agentTabs[0].dataset.agentTab ?? ""); for (const tab of agentTabs) { @@ -441,23 +469,50 @@ const installSteps = [ } } + function setCopyFeedback(button: HTMLButtonElement, label: string, timeout = 1600) { + button.textContent = label; + button.setAttribute("data-copied", "true"); + window.setTimeout(() => { + button.textContent = "Copy"; + button.removeAttribute("data-copied"); + }, timeout); + } + + function selectTextTarget(target: HTMLElement | null, value: string) { + if (target) { + target.focus({ preventScroll: true }); + const selection = window.getSelection(); + const range = document.createRange(); + range.selectNodeContents(target); + selection?.removeAllRanges(); + selection?.addRange(range); + return; + } + + const fallback = document.createElement("textarea"); + fallback.value = value; + fallback.setAttribute("readonly", ""); + fallback.style.position = "fixed"; + fallback.style.inset = "0 auto auto 0"; + fallback.style.opacity = "0"; + document.body.append(fallback); + fallback.focus(); + fallback.select(); + window.setTimeout(() => fallback.remove(), 0); + } + async function copyValue(button: HTMLButtonElement) { const value = button.dataset.copyValue; if (!value) return; try { await navigator.clipboard.writeText(value); - button.textContent = "Copied"; - button.setAttribute("data-copied", "true"); - window.setTimeout(() => { - button.textContent = "Copy"; - button.removeAttribute("data-copied"); - }, 1600); + setCopyFeedback(button, "Copied"); } catch { - button.textContent = "Select text"; - window.setTimeout(() => { - button.textContent = "Copy"; - }, 2200); + const targetId = button.dataset.copyTarget; + const target = targetId ? document.getElementById(targetId) : null; + selectTextTarget(target, value); + setCopyFeedback(button, "Text selected", 2200); } } @@ -474,6 +529,10 @@ const installSteps = [ revealTargets.forEach((target) => target.classList.add("is-visible")); } else { document.documentElement.classList.add("motion-ready"); + window.setTimeout(() => { + revealTargets.forEach((target) => target.classList.add("is-visible")); + }, 1800); + const revealObserver = new IntersectionObserver( (entries) => { for (const entry of entries) { diff --git a/apps/landing/src/styles/global.css b/apps/landing/src/styles/global.css index 8b52b56..f7b7833 100644 --- a/apps/landing/src/styles/global.css +++ b/apps/landing/src/styles/global.css @@ -14,22 +14,24 @@ --linen: oklch(97% 0.012 85); --paper: oklch(98% 0.014 82); --ash: oklch(86% 0.018 78); - --ash-strong: oklch(76% 0.025 78); --olive: oklch(48% 0.045 110); --success: oklch(50% 0.09 145); - --danger: oklch(48% 0.13 31); --focus: oklch(62% 0.155 35 / 0.72); --dark-accent: oklch(86% 0.08 35); --dark-selected-panel: oklch(25% 0.016 100); --dark-tool: oklch(28% 0.018 100); - --decorative-grid: oklch(78% 0.02 78 / 0.35); - --decorative-grid-muted: oklch(78% 0.02 78 / 0.33); - --decorative-grid-strong: oklch(78% 0.02 78 / 0.38); --muted-tool: oklch(54% 0.035 110 / 0.72); - --success-glow: oklch(50% 0.09 145 / 0.12); --page-warmth: oklch(91% 0.035 42 / 0.52); --page-grid-line: oklch(88% 0.018 82 / 0.26); --page-grid-line-muted: oklch(88% 0.018 82 / 0.24); + --body-sweep: oklch(98% 0.014 82 / 0.55); + --header-surface: oklch(98% 0.014 82 / 0.9); + --header-shadow: oklch(24% 0.018 100 / 0.06); + --trace-surface-start: oklch(98% 0.014 82 / 0.98); + --trace-surface-end: oklch(96% 0.018 82 / 0.98); + --trace-status-bg: oklch(95% 0.03 145); + --trace-status-text: oklch(34% 0.07 145); + --trace-shadow: oklch(24% 0.018 100 / 0.08); --terminal-success: oklch(72% 0.12 145); --terminal-step: oklch(82% 0.08 35); --font-sans: @@ -79,7 +81,7 @@ body::before { position: fixed; inset: 0; pointer-events: none; - background: linear-gradient(90deg, transparent, oklch(98% 0.014 82 / 0.55), transparent); + background: linear-gradient(90deg, transparent, var(--body-sweep), transparent); mix-blend-mode: multiply; z-index: -1; } @@ -127,11 +129,11 @@ a { padding: 8px; border: 1px solid var(--ash); border-radius: 20px; - background: oklch(98% 0.014 82 / 0.9); + background: var(--header-surface); position: sticky; top: 12px; z-index: 10; - box-shadow: 0 12px 40px oklch(24% 0.018 100 / 0.06); + box-shadow: 0 12px 40px var(--header-shadow); } .brand-mark, @@ -143,6 +145,7 @@ a { .brand-mark { min-width: 0; + min-height: 44px; display: inline-flex; align-items: center; gap: 10px; @@ -179,7 +182,7 @@ a { .top-nav a, .header-action { - min-height: 42px; + min-height: 44px; display: inline-flex; align-items: center; justify-content: center; @@ -226,11 +229,6 @@ a { color: var(--charred-ink); } -.header-action.muted { - color: var(--olive); - background: transparent; -} - .icon-link { width: 46px; padding: 0; @@ -396,9 +394,9 @@ dd { border: 1px solid var(--ash); border-radius: 28px; background: - linear-gradient(180deg, oklch(98% 0.014 82 / 0.98), oklch(96% 0.018 82 / 0.98)), var(--paper); + linear-gradient(180deg, var(--trace-surface-start), var(--trace-surface-end)), var(--paper); overflow: hidden; - box-shadow: 0 18px 54px oklch(24% 0.018 100 / 0.08); + box-shadow: 0 18px 54px var(--trace-shadow); } .trace-header { @@ -421,8 +419,8 @@ dd { gap: 8px; border: 1px solid color-mix(in oklch, var(--success), var(--ash) 45%); border-radius: 999px; - background: oklch(95% 0.03 145); - color: oklch(34% 0.07 145); + background: var(--trace-status-bg); + color: var(--trace-status-text); padding: 5px 9px; text-transform: uppercase; letter-spacing: 0.055em; @@ -800,6 +798,7 @@ dd { } .integration-pill { + min-height: 44px; border: 1px solid var(--night-line); border-radius: 999px; padding: 10px 12px; @@ -890,7 +889,7 @@ dd { } .copy-button { - min-height: 32px; + min-height: 44px; display: none; align-items: center; justify-content: center; @@ -1150,7 +1149,7 @@ dd { .top-nav a, .header-action { - min-height: 42px; + min-height: 44px; padding-inline: 8px; font-size: 0.82rem; } @@ -1192,7 +1191,7 @@ dd { } .copy-button { - min-height: 40px; + min-height: 44px; padding-inline: 12px; } diff --git a/docs/plans/2026-05-28-skillify-landing-page.md b/docs/plans/2026-05-28-skillify-landing-page.md new file mode 100644 index 0000000..311bd3e --- /dev/null +++ b/docs/plans/2026-05-28-skillify-landing-page.md @@ -0,0 +1,1188 @@ +# Skillify Landing Page Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use `subagent-driven-development` (recommended) or `executing-plans` to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Rework `apps/landing` so the Caplets landing page leads with trust, defines the coined product verb “skillify,” proves progressive disclosure through a realistic GitHub trace, and removes visual choreography that conflicts with the Caplets brand. + +**Architecture:** Keep the landing app as a focused Astro page with one stylesheet. Refactor content constants in `apps/landing/src/pages/index.astro`, rebuild the hero around an inspectable trace, add trust proof and copy affordances, then simplify `apps/landing/src/styles/global.css` by deleting major motion systems instead of hiding them. Preserve semantic HTML, ARIA tab behavior, keyboard support, reduced-motion behavior, and responsive layout. + +**Tech Stack:** Astro 6, TypeScript in Astro inline scripts, Tailwind CSS import, plain CSS, pnpm 11. + +--- + +## Decision Record + +These decisions came from the critique and grill-me session: + +1. Optimize first for **trust in the architecture**, then conceptual understanding, then install conversion. +2. Replace the expressive map hero with a **proof-first product diagram**. +3. Use a **realistic trace**, not a purely conceptual diagram. +4. Use **GitHub** as the hero trace capability because it has higher trust stakes than docs lookup. +5. Make **capability card** the dominant product concept. Keep “map” only as a supporting metaphor. +6. Coin and define **skillify** as durable product language. +7. Put “Skillify your backends” in the hero subhead and demonstrate it immediately. +8. Use a tight definition in the hero, then a three-part proof framework below. +9. Delete major animation systems, including pointer tilt, scroll-driven route resolution, route drift, heavy glow, and orchestration. +10. Create this written plan before code changes. + +## File Structure + +### Modify: `apps/landing/src/pages/index.astro` + +Responsibilities after this plan: + +- Own content constants for capability trace, trust mechanics, proof framework, integration tabs, and install commands. +- Render a trust-first hero with “skillify” defined in public-facing copy. +- Render a realistic GitHub progressive-disclosure trace. +- Render a three-part “What skillify means” proof framework. +- Render trust mechanics with concrete status, source, auth redaction, timeout, error, and lossless-result examples. +- Render copyable install/config snippets with progressive enhancement. +- Keep no-JS integration content accessible. +- Keep accessible tabs when JavaScript runs. + +### Modify: `apps/landing/src/styles/global.css` + +Responsibilities after this plan: + +- Preserve the Caplets warm-light design system. +- Style the new hero trace, skillify framework, trust proof, and copy buttons. +- Remove major choreography and decorative cartography styling. +- Keep only restrained hover, focus, and content-reveal transitions. +- Maintain responsive layouts at desktop, tablet, and phone widths. +- Preserve reduced-motion behavior. + +### Optional Modify: `apps/landing/README.md` + +Only modify if implementation adds a new local QA note that is useful to future maintainers. This plan does not require it. + +## Canonical Copy and Content Decisions + +Use these exact product messages unless implementation reveals a factual problem: + +- Hero kicker: `Capability cards for coding agents` +- Hero headline: `Skillify your backends.` +- Hero lede: `Caplets turns MCP servers, APIs, and commands into focused agent capabilities: one card first, searchable tools next, inspectable schemas before calls, and preserved results after.` +- Definition line: `To skillify a backend is to wrap it as a capability an agent can discover, inspect, call, and recover from one step at a time.` +- Primary CTA: `Install Caplets` +- Secondary CTA: `Inspect the repo` +- Trust section heading: `Trust is visible before the call.` +- Skillify framework heading: `What skillify means` + +Avoid em dashes in all new copy. + +## Task 1: Refactor Landing Content Constants + +**Files:** + +- Modify: `apps/landing/src/pages/index.astro` + +- [ ] **Step 1: Replace the current hero capability card constants with trace-oriented constants** + +In `apps/landing/src/pages/index.astro`, replace the existing `capabilityCards` constant with the following constants: + +```ts +const heroTrace = { + capability: "github", + source: ".caplets/config.json", + status: "ready", + auth: "token present, redacted", + steps: [ + { + label: "get_caplet", + detail: "Expose one card before any downstream tool list enters context.", + result: "search_tools · get_tool · call_tool", + }, + { + label: 'search_tools("pull request")', + detail: "Find matching operations inside the selected capability only.", + result: "create_pull_request · list_pull_requests · request_review", + }, + { + label: 'get_tool("create_pull_request")', + detail: "Inspect the preserved schema before an agent can invoke the operation.", + result: "title · body · base · head · reviewers?", + }, + { + label: "call_tool(arguments)", + detail: "Forward the call and keep downstream content, structured data, and errors intact.", + result: "structuredContent + content", + }, + ], +}; + +const skillifyFramework = [ + { + title: "Discoverable as one capability", + copy: "A backend enters the agent context as a focused card with source, status, and next actions, not a flat wall of operations.", + }, + { + title: "Inspectable before invocation", + copy: "Agents search inside the selected capability, then inspect exact tool schemas before any call is made.", + }, + { + title: "Lossless after the call", + copy: "Caplets preserves structured content, resource links, images, and downstream error state instead of flattening results away.", + }, +]; + +const trustMechanics = [ + { + label: "Source", + value: ".caplets/config.json", + copy: "Users can see where the capability came from before trusting it.", + }, + { + label: "Auth", + value: "GITHUB_TOKEN: redacted", + copy: "Secrets stay hidden while auth state remains inspectable.", + }, + { + label: "Timeout", + value: "30s boundary", + copy: "Slow or stuck backends fail visibly instead of disappearing into agent context.", + }, + { + label: "Error", + value: "safe message + raw detail scoped", + copy: "Recovery information stays useful without leaking sensitive configuration.", + }, +]; +``` + +Delete any references to the removed `capabilityCards` constant during later tasks. + +- [ ] **Step 2: Normalize install command data** + +In the existing `agentSetups` array, ensure every generic global package install uses `npm install -g caplets` unless the specific client has a stronger documented install path. Replace the `installSteps` constant with: + +```ts +const installSteps = [ + "npm install -g caplets", + "caplets init", + "caplets add mcp docs --command npx --arg -y --arg @upstash/context7-mcp", + "caplets serve", +]; +``` + +- [ ] **Step 3: Run Astro typecheck** + +Run: + +```bash +pnpm --filter @caplets/landing typecheck +``` + +Expected: PASS. If references to removed constants fail, continue to Task 2 and remove those references while rebuilding the hero. + +## Task 2: Rebuild the Hero Around Skillify and GitHub Trace + +**Files:** + +- Modify: `apps/landing/src/pages/index.astro` +- Modify: `apps/landing/src/styles/global.css` + +- [ ] **Step 1: Replace hero copy and visual markup** + +In `apps/landing/src/pages/index.astro`, replace the current `
...
` with this structure: + +```astro +
+
+

Capability cards for coding agents

+

Skillify your backends.

+

+ Caplets turns MCP servers, APIs, and commands into focused agent capabilities: one card + first, searchable tools next, inspectable schemas before calls, and preserved results after. +

+

+ To skillify a backend is to wrap it as a capability an agent can discover, inspect, call, + and recover from one step at a time. +

+ +
+
+
Backends
+
{backends.join(" · ")}
+
+
+
Clients
+
{integrations.join(" · ")}
+
+
+
+ + +
+``` + +- [ ] **Step 2: Remove old hero visual CSS selectors** + +In `apps/landing/src/styles/global.css`, delete rules that only support the old map hero: + +```css +.map-stage +.map-stage::before +.map-stage::after +.map-toolbar +.status-dot +.route-field +.route +.route-backbone +.map-stage.is-route-active .route-backbone +.route-two +.route-three +.route-draw +.route-draw-two +.route-draw-three +.capability-grid +.capability-card +.capability-card:hover +.card-1 +.card-2 +.card-3 +.cartography-compass +.cartography-compass span +.cartography-compass span:nth-child(1) +.cartography-compass span:nth-child(2) +.cartography-compass span:nth-child(3) +.card-topline +.card-index +.capability-card h2 +.capability-card p +.capability-card ul +.capability-card li +.inspect-panel +.inspect-panel code +.inspect-panel p +``` + +Also delete keyframes used only by the old hero: + +```css +@keyframes map-stage-enter +@keyframes route-drift +@keyframes card-enter; +``` + +- [ ] **Step 3: Add new trace hero CSS** + +Add this CSS near the existing hero styles: + +```css +.hero-definition { + max-width: 62ch; + margin: -12px 0 28px; + color: var(--charred-ink); + font-size: clamp(0.98rem, 1.2vw, 1.1rem); + line-height: 1.55; +} + +.trace-stage { + min-width: 0; + border: 1px solid var(--ash); + border-radius: 28px; + background: + linear-gradient(180deg, oklch(98% 0.014 82 / 0.98), oklch(96% 0.018 82 / 0.98)), var(--paper); + overflow: hidden; + box-shadow: 0 18px 54px oklch(24% 0.018 100 / 0.08); +} + +.trace-header { + min-height: 58px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + padding: 0 18px; + border-bottom: 1px solid var(--ash); + color: var(--charred-ink); + font-family: var(--font-mono); + font-size: 0.82rem; + font-weight: 760; +} + +.trace-status { + display: inline-flex; + align-items: center; + gap: 8px; + border: 1px solid color-mix(in oklch, var(--success), var(--ash) 45%); + border-radius: 999px; + background: oklch(95% 0.03 145); + color: oklch(34% 0.07 145); + padding: 5px 9px; + text-transform: uppercase; + letter-spacing: 0.055em; +} + +.trace-status::before { + content: ""; + width: 7px; + height: 7px; + border-radius: 999px; + background: currentColor; +} + +.trace-metadata { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 1px; + margin: 0; + background: var(--ash); +} + +.trace-metadata div { + min-width: 0; + padding: 14px 16px; + background: var(--linen); +} + +.trace-metadata dt, +.trace-label { + font-family: var(--font-mono); + font-size: 0.72rem; + font-weight: 760; + letter-spacing: 0.055em; +} + +.trace-metadata dt { + margin-bottom: 5px; + color: var(--ember-deep); + text-transform: uppercase; +} + +.trace-metadata dd { + font-family: var(--font-mono); + color: var(--charred-ink); + overflow-wrap: anywhere; +} + +.trace-steps { + display: grid; + gap: 0; + margin: 0; + padding: 0; + list-style: none; + counter-reset: trace; +} + +.trace-steps li { + counter-increment: trace; + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(180px, 0.72fr); + gap: 18px; + padding: 18px; + border-top: 1px solid var(--ash); +} + +.trace-steps li::before { + content: counter(trace, decimal-leading-zero); + grid-row: 1; + align-self: start; + width: fit-content; + border: 1px solid var(--ash); + border-radius: 999px; + background: var(--parchment); + color: var(--ember-deep); + padding: 4px 7px; + font-family: var(--font-mono); + font-size: 0.68rem; + font-weight: 760; +} + +.trace-steps li > div { + min-width: 0; + display: grid; + gap: 7px; +} + +.trace-label { + color: var(--charred-ink); + overflow-wrap: anywhere; +} + +.trace-steps p { + margin: 0; + color: var(--olive); + font-size: 0.92rem; + line-height: 1.45; +} + +.trace-steps code { + min-width: 0; + align-self: start; + border: 1px solid var(--ash); + border-radius: 14px; + background: var(--linen); + color: var(--charred-ink); + padding: 12px; + font-family: var(--font-mono); + font-size: 0.78rem; + line-height: 1.45; + overflow-wrap: anywhere; +} +``` + +- [ ] **Step 4: Update hero grid sizing** + +Replace the current `.hero` grid columns: + +```css +grid-template-columns: minmax(0, 0.92fr) minmax(420px, 1.08fr); +``` + +with: + +```css +grid-template-columns: minmax(0, 0.86fr) minmax(460px, 1.14fr); +``` + +- [ ] **Step 5: Run focused checks** + +Run: + +```bash +pnpm --filter @caplets/landing typecheck +pnpm --filter @caplets/landing build +``` + +Expected: both PASS. + +## Task 3: Add the Skillify Proof Framework + +**Files:** + +- Modify: `apps/landing/src/pages/index.astro` +- Modify: `apps/landing/src/styles/global.css` + +- [ ] **Step 1: Replace the current proof section with skillify framework copy** + +In `apps/landing/src/pages/index.astro`, replace the existing `
...
` with: + +```astro +
+
+

What skillify means

+

A backend becomes safe for agents when it reveals itself in stages.

+
+
+ {skillifyFramework.map((point, index) => ( +
+

0{index + 1}

+

{point.title}

+

{point.copy}

+
+ ))} +
+
+``` + +- [ ] **Step 2: Ensure proof card language avoids generic card-grid slop** + +Keep the three proof items because they are a compact framework, but avoid adding icons, decorative gradients, or identical marketing feature cards. The cards should remain text-led and precise. + +- [ ] **Step 3: Run focused checks** + +Run: + +```bash +pnpm --filter @caplets/landing typecheck +pnpm --filter @caplets/landing build +``` + +Expected: both PASS. + +## Task 4: Add Concrete Trust Mechanics + +**Files:** + +- Modify: `apps/landing/src/pages/index.astro` +- Modify: `apps/landing/src/styles/global.css` + +- [ ] **Step 1: Insert a trust mechanics section after the proof section** + +In `apps/landing/src/pages/index.astro`, insert this section immediately after the proof section: + +```astro +
+
+

Trust before invocation

+

Trust is visible before the call.

+
+
+ {trustMechanics.map((item) => ( +
+ {item.label} + {item.value} +

{item.copy}

+
+ ))} +
+
+ Safe recovery example +

+ If a backend fails, Caplets keeps the error scoped to the capability, preserves useful + recovery detail, and redacts sensitive configuration before it reaches the agent. +

+
+
+``` + +- [ ] **Step 2: Add trust section CSS** + +Add this CSS near the proof and integrations styles: + +```css +.trust { + width: var(--content); + margin-inline: auto; +} + +.trust-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 12px; +} + +.trust-item, +.trust-error { + min-width: 0; + border: 1px solid var(--ash); + border-radius: 22px; + background: var(--paper); + padding: 18px; +} + +.trust-item code { + display: block; + margin: 10px 0 12px; + color: var(--charred-ink); + font-family: var(--font-mono); + font-size: 0.82rem; + line-height: 1.45; + overflow-wrap: anywhere; +} + +.trust-item p, +.trust-error p { + margin: 0; + color: var(--olive); +} + +.trust-error { + margin-top: 12px; + background: var(--linen); +} +``` + +- [ ] **Step 3: Update `main` spacing if needed** + +If the new trust section feels too disconnected, reduce the global section gap from: + +```css +gap: clamp(74px, 10vw, 142px); +``` + +to: + +```css +gap: clamp(64px, 8vw, 118px); +``` + +Use the smaller gap only if visual review shows excessive whitespace between proof and trust. + +- [ ] **Step 4: Run focused checks** + +Run: + +```bash +pnpm --filter @caplets/landing typecheck +pnpm --filter @caplets/landing build +``` + +Expected: both PASS. + +## Task 5: Add Copy Buttons and Safer Snippet Semantics + +**Files:** + +- Modify: `apps/landing/src/pages/index.astro` +- Modify: `apps/landing/src/styles/global.css` + +- [ ] **Step 1: Add copy buttons to integration snippets** + +In the integration panel markup, replace each current snippet block: + +```astro +
+ Install +
{agent.installCommand}
+
+
+ Configuration +
{agent.configSnippet}
+
+``` + +with: + +```astro +
+
+ Install + +
+
{agent.installCommand}
+
+
+
+ Configuration + +
+
{agent.configSnippet}
+
+``` + +- [ ] **Step 2: Add copy buttons to terminal install steps** + +Replace terminal list item markup: + +```astro +
  • {step}
  • +``` + +with: + +```astro +
  • + {step} + +
  • +``` + +- [ ] **Step 3: Add copy button script** + +Inside the existing ` diff --git a/apps/landing/src/styles/global.css b/apps/landing/src/styles/global.css index f7b7833..f8684cd 100644 --- a/apps/landing/src/styles/global.css +++ b/apps/landing/src/styles/global.css @@ -26,7 +26,6 @@ --page-grid-line-muted: oklch(88% 0.018 82 / 0.24); --body-sweep: oklch(98% 0.014 82 / 0.55); --header-surface: oklch(98% 0.014 82 / 0.9); - --header-shadow: oklch(24% 0.018 100 / 0.06); --trace-surface-start: oklch(98% 0.014 82 / 0.98); --trace-surface-end: oklch(96% 0.018 82 / 0.98); --trace-status-bg: oklch(95% 0.03 145); @@ -119,21 +118,18 @@ a { } .site-header { - width: var(--content); - margin: 18px auto 0; - min-height: 64px; + width: 100%; + min-height: 58px; display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; - gap: 12px; - padding: 8px; - border: 1px solid var(--ash); - border-radius: 20px; + gap: 16px; + padding: 7px max(16px, calc((100vw - 1180px) / 2)); + border-bottom: 1px solid var(--ash); background: var(--header-surface); position: sticky; - top: 12px; + top: 0; z-index: 10; - box-shadow: 0 12px 40px var(--header-shadow); } .brand-mark, @@ -173,11 +169,7 @@ a { .top-nav { min-width: 0; display: inline-flex; - gap: 3px; - padding: 5px; - border: 1px solid var(--ash); - border-radius: 16px; - background: linear-gradient(180deg, var(--paper), var(--linen)); + gap: 2px; } .top-nav a, @@ -194,7 +186,6 @@ a { transition: color 180ms var(--ease-out), background-color 180ms var(--ease-out), - transform 180ms var(--ease-out), border-color 180ms var(--ease-out); } @@ -213,7 +204,6 @@ a { .header-action:hover { background: var(--parchment); color: var(--charred-ink); - transform: translateY(-1px); } .header-actions { @@ -224,8 +214,6 @@ a { } .header-action { - border: 1px solid var(--ash); - background: var(--paper); color: var(--charred-ink); } @@ -249,9 +237,9 @@ main { width: var(--content); margin: clamp(42px, 7vw, 84px) auto 0; display: grid; - grid-template-columns: minmax(0, 0.86fr) minmax(460px, 1.14fr); + grid-template-columns: minmax(488px, 0.78fr) minmax(0, 1.22fr); align-items: center; - gap: clamp(28px, 5vw, 72px); + gap: clamp(28px, 3vw, 32px); min-height: 92vh; } @@ -276,6 +264,16 @@ dt { text-transform: uppercase; } +.section-note { + max-width: 24ch; + margin: 0; + color: var(--olive); + font-size: 1rem; + font-weight: 650; + line-height: 1.35; + text-wrap: balance; +} + h1, h2, h3, @@ -284,11 +282,11 @@ p { } h1 { - max-width: 10ch; + max-width: 10.7ch; margin-bottom: 24px; - font-size: clamp(4rem, 12vw, 9.5rem); - line-height: 0.82; - letter-spacing: -0.085em; + font-size: clamp(4rem, 6.6vw, 6rem); + line-height: 0.9; + letter-spacing: -0.075em; text-wrap: balance; } @@ -569,8 +567,7 @@ dd { transform: translateY(0); transition: opacity 560ms var(--ease-expo), - transform 560ms var(--ease-expo), - border-color 160ms linear; + transform 560ms var(--ease-expo); transition-delay: calc(var(--reveal-index, 0) * 45ms); } @@ -592,6 +589,10 @@ dd { margin-bottom: 28px; } +.section-heading > * { + min-width: 0; +} + .section-heading.narrow { max-width: 760px; grid-template-columns: 1fr; @@ -654,7 +655,7 @@ dd { margin-top: 26px; max-height: 250px; overflow: hidden; - mask-image: linear-gradient(to bottom, black 58%, transparent); + mask-image: linear-gradient(to bottom, oklch(24% 0.018 100 / 0.92) 58%, transparent); } .tool-noise span { @@ -783,7 +784,7 @@ dd { color: var(--night-text); } -.integrations .kicker { +.integrations .section-note { color: var(--dark-accent); } @@ -798,6 +799,7 @@ dd { } .integration-pill { + min-width: 44px; min-height: 44px; border: 1px solid var(--night-line); border-radius: 999px; @@ -905,8 +907,7 @@ dd { cursor: pointer; transition: background-color 160ms var(--ease-out), - color 160ms var(--ease-out), - transform 160ms var(--ease-out); + color 160ms var(--ease-out); } .js-enabled .copy-button { @@ -917,7 +918,6 @@ dd { .copy-button[data-copied="true"] { background: var(--parchment); color: var(--night-ink); - transform: translateY(-1px); } .agent-setup-label { @@ -959,6 +959,10 @@ dd { padding: clamp(22px, 4vw, 42px); } +.install-copy { + min-width: 0; +} + .install-copy p { max-width: 56ch; margin-bottom: 0; @@ -1046,32 +1050,20 @@ dd { @media (max-width: 980px) { .site-header { - grid-template-columns: 1fr; - align-items: stretch; - } - - .brand-mark { - justify-self: center; + grid-template-columns: auto minmax(0, 1fr) auto; + gap: 10px; } .top-nav { - width: 100%; - justify-content: space-between; - order: 3; + justify-self: center; } .top-nav a { - flex: 1; + padding-inline: 10px; } .header-actions { - justify-self: stretch; - display: grid; - grid-template-columns: 1fr 1fr; - } - - .header-action { - width: 100%; + justify-self: end; } .hero, @@ -1129,35 +1121,89 @@ dd { } .site-header { - margin-top: 10px; - top: 8px; + min-height: 48px; + gap: 6px; + padding-block: 2px; + padding-inline: max(10px, env(safe-area-inset-left)) max(10px, env(safe-area-inset-right)); + } + + .brand-mark { + min-width: 44px; + min-height: 44px; + gap: 7px; + padding: 7px; } .brand-mark span { - display: inline; + display: none; } - .site-header { - border-radius: 18px; - padding: 7px; + .brand-mark img { + width: 30px; + height: 30px; + border-radius: 9px; } .top-nav { - gap: 4px; - padding: 4px; + gap: 0; + justify-content: center; } .top-nav a, .header-action { min-height: 44px; - padding-inline: 8px; - font-size: 0.82rem; + padding-inline: 7px; + font-size: 0.8rem; } .top-nav a span { display: none; } + .header-actions { + gap: 2px; + } + + .icon-link { + width: 44px; + } + + .icon-link svg { + width: 20px; + height: 20px; + } + + .agent-setup-panel { + padding: 14px; + } + + .agent-setup-note { + margin-bottom: 12px; + font-size: 0.95rem; + line-height: 1.45; + } + + .agent-setup-grid { + gap: 10px; + } + + .snippet-heading { + margin-bottom: 6px; + } + + .agent-setup-panel pre { + min-height: 0; + max-width: 100%; + padding: 12px; + } + + .agent-setup-panel code { + font-size: 0.68rem; + line-height: 1.45; + white-space: pre-wrap; + overflow-wrap: anywhere; + } + h1 { font-size: clamp(3.6rem, 18vw, 5.8rem); } @@ -1214,6 +1260,14 @@ dd { .site-footer { flex-direction: column; + gap: 6px; + } + + .site-footer a { + min-height: 44px; + display: flex; + align-items: center; + padding-block: 8px; } } diff --git a/docs/plans/2026-05-15-native-agent-caplet-extensions.md b/docs/plans/2026-05-15-native-agent-caplet-extensions.md index e5030aa..7e8dee4 100644 --- a/docs/plans/2026-05-15-native-agent-caplet-extensions.md +++ b/docs/plans/2026-05-15-native-agent-caplet-extensions.md @@ -328,9 +328,9 @@ export { type NativeCapletsService, type NativeCapletsServiceOptions, type NativeCapletTool, -} from "./native/service.js"; -export { nativeCapletToolName, nativeCapletsSystemGuidance } from "./native/tools.js"; -export { generatedToolInputSchema } from "./tools.js"; +} from "./native/service"; +export { nativeCapletToolName, nativeCapletsSystemGuidance } from "./native/tools"; +export { generatedToolInputSchema } from "./tools"; export { generatedToolInputJsonSchema } from "./generated-tool-input-schema.mjs"; ``` diff --git a/docs/plans/2026-05-15-native-hot-reload.md b/docs/plans/2026-05-15-native-hot-reload.md index bb4d88f..cdd9501 100644 --- a/docs/plans/2026-05-15-native-hot-reload.md +++ b/docs/plans/2026-05-15-native-hot-reload.md @@ -61,7 +61,7 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, describe, expect, it, vi } from "vitest"; -import { CapletsEngine } from "../src/engine.js"; +import { CapletsEngine } from "../src/engine"; describe("CapletsEngine", () => { const dirs: string[] = []; @@ -294,7 +294,7 @@ Create `packages/core/src/engine.ts`. Move the reload, watcher, config path, bac ```ts import { existsSync, readdirSync, statSync, watch, type FSWatcher } from "node:fs"; import { dirname, parse } from "node:path"; -import { CliToolsManager } from "./cli-tools.js"; +import { CliToolsManager } from "./cli-tools"; import { type CapletConfig, type CapletsConfig, @@ -302,14 +302,14 @@ import { resolveCapletsRoot, resolveConfigPath, resolveProjectConfigPath, -} from "./config.js"; -import { DownstreamManager } from "./downstream.js"; -import { errorResult, toSafeError } from "./errors.js"; -import { GraphQLManager } from "./graphql.js"; -import { HttpActionManager } from "./http-actions.js"; -import { OpenApiManager } from "./openapi.js"; -import { ServerRegistry } from "./registry.js"; -import { handleServerTool } from "./tools.js"; +} from "./config"; +import { DownstreamManager } from "./downstream"; +import { errorResult, toSafeError } from "./errors"; +import { GraphQLManager } from "./graphql"; +import { HttpActionManager } from "./http-actions"; +import { OpenApiManager } from "./openapi"; +import { ServerRegistry } from "./registry"; +import { handleServerTool } from "./tools"; export type CapletsEngineOptions = { configPath?: string; @@ -712,8 +712,8 @@ In `packages/core/src/runtime.ts`, remove imports that are now engine-owned: `ex Add these imports: ```ts -import type { CapletConfig, CapletsConfig } from "./config.js"; -import { CapletsEngine } from "./engine.js"; +import type { CapletConfig, CapletsConfig } from "./config"; +import { CapletsEngine } from "./engine"; ``` Change the class fields to this shape: @@ -979,7 +979,7 @@ export type NativeCapletsService = { In `packages/core/src/native/service.ts`, remove direct manager/config imports and add: ```ts -import { CapletsEngine } from "../engine.js"; +import { CapletsEngine } from "../engine"; ``` Replace `DefaultNativeCapletsService` with: @@ -1034,7 +1034,7 @@ export { type NativeCapletsService, type NativeCapletsServiceOptions, type NativeCapletsToolsChangedListener, -} from "./native/service.js"; +} from "./native/service"; ``` - [ ] **Step 6: Run native tests** @@ -1341,7 +1341,7 @@ Append this test to `packages/opencode/test/opencode.test.ts`: ```ts it("refreshes system guidance from the current native tool list", async () => { - const { createCapletsOpenCodeHooks } = await import("../src/index.js"); + const { createCapletsOpenCodeHooks } = await import("../src/index"); let tools = [ { caplet: "git-hub", diff --git a/docs/plans/2026-05-19-http-mcp-serving.md b/docs/plans/2026-05-19-http-mcp-serving.md index b66e0e7..aec6c29 100644 --- a/docs/plans/2026-05-19-http-mcp-serving.md +++ b/docs/plans/2026-05-19-http-mcp-serving.md @@ -97,7 +97,7 @@ Create `packages/core/test/serve-session.test.ts`: import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import type { RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js"; +import type { RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp"; import { afterEach, describe, expect, it, vi } from "vitest"; import { CapletsEngine } from "../src/engine"; import { CapletsMcpSession } from "../src/serve/session"; @@ -221,8 +221,8 @@ Expected: FAIL because `../src/serve/session` does not exist. Create `packages/core/src/serve/session.ts`: ```ts -import { McpServer, type RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js"; -import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; +import { McpServer, type RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp"; +import type { Transport } from "@modelcontextprotocol/sdk/shared/transport"; import { version as packageJsonVersion } from "../../../package.json"; import type { CapletConfig, CapletsConfig } from "../config"; import { CapletsEngine } from "../engine"; @@ -354,7 +354,7 @@ function serializeCaplet(caplet: CapletConfig | undefined): string { Replace `packages/core/src/runtime.ts` with: ```ts -import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; +import type { Transport } from "@modelcontextprotocol/sdk/shared/transport"; import { type CapletsConfig } from "./config"; import { CapletsEngine, type CapletsEngineOptions } from "./engine"; import { CapletsMcpSession, type ToolServer } from "./serve/session"; @@ -732,7 +732,7 @@ git commit -m "feat(core): validate serve transport options" Create `packages/core/src/serve/stdio.ts`: ```ts -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio"; import { CapletsEngine, type CapletsEngineOptions } from "../engine"; import { CapletsMcpSession } from "./session"; diff --git a/docs/plans/2026-05-19-remote-native-integrations.md b/docs/plans/2026-05-19-remote-native-integrations.md index 47735cb..9804e9e 100644 --- a/docs/plans/2026-05-19-remote-native-integrations.md +++ b/docs/plans/2026-05-19-remote-native-integrations.md @@ -580,8 +580,8 @@ Expected: FAIL because `../src/native/remote` does not exist and `remoteClientFa Create `packages/core/src/native/remote.ts`: ```ts -import { Client } from "@modelcontextprotocol/sdk/client/index.js"; -import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; +import { Client } from "@modelcontextprotocol/sdk/client/index"; +import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp"; import { version as packageJsonVersion } from "../../package.json"; import { CapletsError } from "../errors"; import type { @@ -938,7 +938,7 @@ it("passes second-argument config into the native service", async () => { registerNativeCapletsProcessCleanup: vi.fn(), })); vi.doMock("@caplets/core/native", () => nativeMocks); - const plugin = (await import("../src/index.js")).default; + const plugin = (await import("../src/index")).default; await plugin( {} as never, diff --git a/docs/plans/2026-05-19-token-efficiency.md b/docs/plans/2026-05-19-token-efficiency.md index ae6f51d..e912bd3 100644 --- a/docs/plans/2026-05-19-token-efficiency.md +++ b/docs/plans/2026-05-19-token-efficiency.md @@ -134,7 +134,7 @@ Expected: FAIL because `jsonResult()` currently returns a text content block con Write this file: ```ts -import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js"; +import type { CallToolResult } from "@modelcontextprotocol/sdk/types"; export type TextContentBlock = { type: "text"; text: string }; diff --git a/docs/plans/2026-05-21-mcp-resources-prompts.md b/docs/plans/2026-05-21-mcp-resources-prompts.md index 4496262..5462346 100644 --- a/docs/plans/2026-05-21-mcp-resources-prompts.md +++ b/docs/plans/2026-05-21-mcp-resources-prompts.md @@ -829,7 +829,7 @@ git commit -m "feat(core): expose backend-specific Caplet schemas" Modify `packages/core/test/fixtures/stdio-server.ts` to import `ResourceTemplate` and register resource/prompt capabilities: ```ts -import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp"; ``` Append before `await server.connect(...)`: @@ -993,7 +993,7 @@ import { type ResourceTemplate as McpResourceTemplate, ToolListChangedNotificationSchema, type Tool, -} from "@modelcontextprotocol/sdk/types.js"; +} from "@modelcontextprotocol/sdk/types"; ``` Extend `ManagedConnection`: diff --git a/package.json b/package.json index 7ac430f..43ee679 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "private": true, "type": "module", "scripts": { - "alchemy:dev": "node ./scripts/alchemy-runner.mjs dev", - "alchemy:deploy": "node ./scripts/alchemy-runner.mjs deploy", - "alchemy:destroy": "node ./scripts/alchemy-runner.mjs destroy", + "alchemy:dev": "tsx ./scripts/alchemy-runner.ts dev", + "alchemy:deploy": "tsx ./scripts/alchemy-runner.ts deploy", + "alchemy:destroy": "tsx ./scripts/alchemy-runner.ts destroy", "clean": "turbo clean", "build": "turbo build", "build:watch": "turbo build:watch", @@ -25,7 +25,7 @@ "schema:check": "tsx ./scripts/generate-config-schema.ts --check", "schema:generate": "tsx ./scripts/generate-config-schema.ts", "typecheck": "tsgo --noEmit && turbo typecheck", - "test": "vitest run && node --test scripts/*.test.mjs", + "test": "vitest run", "verify": "pnpm format:check && pnpm lint && pnpm typecheck && pnpm schema:check && pnpm test && pnpm benchmark:check && pnpm build", "version-packages": "changeset version && tsx scripts/sync-plugin-versions.ts && oxfmt plugins/caplets/.codex-plugin/plugin.json plugins/caplets/.claude-plugin/plugin.json" }, diff --git a/packages/opencode/test/opencode.test.ts b/packages/opencode/test/opencode.test.ts index c25fe67..1c99aff 100644 --- a/packages/opencode/test/opencode.test.ts +++ b/packages/opencode/test/opencode.test.ts @@ -33,7 +33,7 @@ vi.mock("@opencode-ai/plugin", () => ({ describe("@caplets/opencode", () => { it("registers one prefixed native tool per Caplet", async () => { - const { createCapletsOpenCodeHooks } = await import("../src/hooks.js"); + const { createCapletsOpenCodeHooks } = await import("../src/hooks"); const service = { listTools: () => [ { @@ -66,7 +66,7 @@ describe("@caplets/opencode", () => { }); it("returns stable text when tool result serialization fails", async () => { - const { createCapletsOpenCodeHooks } = await import("../src/hooks.js"); + const { createCapletsOpenCodeHooks } = await import("../src/hooks"); const service = { listTools: () => [ { @@ -95,7 +95,7 @@ describe("@caplets/opencode", () => { }); it("returns stable text when JSON.stringify returns undefined", async () => { - const { createCapletsOpenCodeHooks } = await import("../src/hooks.js"); + const { createCapletsOpenCodeHooks } = await import("../src/hooks"); const service = { listTools: () => [ { @@ -123,7 +123,7 @@ describe("@caplets/opencode", () => { }); it("refreshes system guidance for remaining registered tools only", async () => { - const { createCapletsOpenCodeHooks } = await import("../src/hooks.js"); + const { createCapletsOpenCodeHooks } = await import("../src/hooks"); let tools = [ { caplet: "git-hub", @@ -188,7 +188,7 @@ describe("@caplets/opencode", () => { registerNativeCapletsProcessCleanup: vi.fn(), }; vi.doMock("@caplets/core/native", () => nativeMocks); - const plugin = (await import("../src/index.js")).default; + const plugin = (await import("../src/index")).default; await plugin( {} as never, @@ -243,7 +243,7 @@ describe("@caplets/opencode", () => { registerNativeCapletsProcessCleanup: vi.fn(), }; vi.doMock("@caplets/core/native", () => nativeMocks); - const plugin = (await import("../src/index.js")).default; + const plugin = (await import("../src/index")).default; const hooks = await plugin({} as never, undefined as never); diff --git a/scripts/alchemy-fetch-compat.mjs b/scripts/alchemy-fetch-compat.mjs deleted file mode 100644 index 9baab4d..0000000 --- a/scripts/alchemy-fetch-compat.mjs +++ /dev/null @@ -1,21 +0,0 @@ -const fetchCompatInstalled = Symbol.for("caplets.alchemyFetchCompatInstalled"); - -if (!globalThis[fetchCompatInstalled]) { - const nativeFetch = globalThis.fetch.bind(globalThis); - - globalThis.fetch = async (input, init) => { - if (init && typeof init === "object" && "dispatcher" in init) { - const { dispatcher: _dispatcher, ...compatibleInit } = init; - return nativeFetch(input, compatibleInit); - } - - return nativeFetch(input, init); - }; - - Object.defineProperty(globalThis, fetchCompatInstalled, { - value: true, - configurable: false, - enumerable: false, - writable: false, - }); -} diff --git a/scripts/alchemy-fetch-compat.test.mjs b/scripts/alchemy-fetch-compat.test.mjs deleted file mode 100644 index 27faece..0000000 --- a/scripts/alchemy-fetch-compat.test.mjs +++ /dev/null @@ -1,22 +0,0 @@ -import assert from "node:assert/strict"; -import { test } from "node:test"; - -test("Alchemy fetch compatibility shim removes userland undici dispatcher before native fetch", async () => { - const calls = []; - globalThis.fetch = async (_input, init = {}) => { - calls.push(init); - return new Response("ok"); - }; - - await import(`./alchemy-fetch-compat.mjs?cache-bust=${Date.now()}`); - - const response = await globalThis.fetch("https://example.test", { - dispatcher: { dispatch() {} }, - headers: { "x-test": "1" }, - }); - - assert.equal(await response.text(), "ok"); - assert.equal(calls.length, 1); - assert.equal("dispatcher" in calls[0], false); - assert.deepEqual(calls[0].headers, { "x-test": "1" }); -}); diff --git a/scripts/alchemy-fetch-compat.test.ts b/scripts/alchemy-fetch-compat.test.ts new file mode 100644 index 0000000..446dd42 --- /dev/null +++ b/scripts/alchemy-fetch-compat.test.ts @@ -0,0 +1,22 @@ +import { expect, test } from "vitest"; + +test("Alchemy fetch compatibility shim removes userland undici dispatcher before native fetch", async () => { + const calls: RequestInit[] = []; + globalThis.fetch = async (_input, init = {}) => { + calls.push(init); + return new Response("ok"); + }; + + await import("./alchemy-fetch-compat"); + + const response = await globalThis.fetch("https://example.test", { + dispatcher: { dispatch() {} }, + headers: { "x-test": "1" }, + } as unknown as RequestInit); + + expect(await response.text()).toBe("ok"); + expect(calls).toHaveLength(1); + expect(calls[0]).toBeDefined(); + expect("dispatcher" in calls[0]!).toBe(false); + expect(calls[0]!.headers).toEqual({ "x-test": "1" }); +}); diff --git a/scripts/alchemy-fetch-compat.ts b/scripts/alchemy-fetch-compat.ts new file mode 100644 index 0000000..77b0369 --- /dev/null +++ b/scripts/alchemy-fetch-compat.ts @@ -0,0 +1,24 @@ +const fetchCompatInstalled = Symbol.for("caplets.alchemyFetchCompatInstalled"); +type FetchInitWithDispatcher = RequestInit & { dispatcher?: unknown }; +const globalSymbols = globalThis as typeof globalThis & Record; + +if (!globalSymbols[fetchCompatInstalled]) { + const nativeFetch = globalThis.fetch.bind(globalThis); + + globalThis.fetch = async (input, init) => { + const compatibleInit = init as FetchInitWithDispatcher | undefined; + if (compatibleInit && "dispatcher" in compatibleInit) { + const { dispatcher: _dispatcher, ...requestInit } = compatibleInit; + return nativeFetch(input, requestInit); + } + + return nativeFetch(input, init); + }; + + Object.defineProperty(globalThis, fetchCompatInstalled, { + value: true, + configurable: false, + enumerable: false, + writable: false, + }); +} diff --git a/scripts/alchemy-runner.test.mjs b/scripts/alchemy-runner.test.mjs deleted file mode 100644 index 8a6651a..0000000 --- a/scripts/alchemy-runner.test.mjs +++ /dev/null @@ -1,15 +0,0 @@ -import assert from "node:assert/strict"; -import { test } from "node:test"; -import { fileURLToPath } from "node:url"; - -import { buildNodeOptions } from "./alchemy-runner.mjs"; - -const shimPath = fileURLToPath(new URL("./alchemy-fetch-compat.mjs", import.meta.url)); - -test("Alchemy runner injects fetch shim through NODE_OPTIONS for child processes", () => { - assert.equal(buildNodeOptions(undefined), `--import=${shimPath}`); -}); - -test("Alchemy runner preserves existing NODE_OPTIONS after the fetch shim", () => { - assert.equal(buildNodeOptions("--trace-warnings"), `--import=${shimPath} --trace-warnings`); -}); diff --git a/scripts/alchemy-runner.test.ts b/scripts/alchemy-runner.test.ts new file mode 100644 index 0000000..f7227b6 --- /dev/null +++ b/scripts/alchemy-runner.test.ts @@ -0,0 +1,14 @@ +import { expect, test } from "vitest"; +import { fileURLToPath } from "node:url"; + +import { buildNodeOptions } from "./alchemy-runner"; + +const shimPath = fileURLToPath(new URL("./alchemy-fetch-compat.ts", import.meta.url)); + +test("Alchemy runner injects fetch shim through NODE_OPTIONS for child processes", () => { + expect(buildNodeOptions(undefined)).toBe(`--import=${shimPath}`); +}); + +test("Alchemy runner preserves existing NODE_OPTIONS after the fetch shim", () => { + expect(buildNodeOptions("--trace-warnings")).toBe(`--import=${shimPath} --trace-warnings`); +}); diff --git a/scripts/alchemy-runner.mjs b/scripts/alchemy-runner.ts similarity index 87% rename from scripts/alchemy-runner.mjs rename to scripts/alchemy-runner.ts index 96fb515..34330df 100644 --- a/scripts/alchemy-runner.mjs +++ b/scripts/alchemy-runner.ts @@ -3,7 +3,7 @@ import { constants as osConstants } from "node:os"; import { fileURLToPath } from "node:url"; const runnerPath = fileURLToPath(import.meta.url); -const shimPath = fileURLToPath(new URL("./alchemy-fetch-compat.mjs", import.meta.url)); +const shimPath = fileURLToPath(new URL("./alchemy-fetch-compat.ts", import.meta.url)); const alchemyBinPath = fileURLToPath( new URL("../node_modules/alchemy/bin/alchemy.js", import.meta.url), ); @@ -21,7 +21,7 @@ export async function main(args = process.argv.slice(2)) { stdio: "inherit", }); - const exitCode = await new Promise((resolve) => { + const exitCode = await new Promise((resolve) => { child.on("close", (code, signal) => { if (signal) { resolve(128 + (osConstants.signals[signal] ?? 0)); diff --git a/tsconfig.json b/tsconfig.json index afdaa17..0dbf657 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,4 @@ { "extends": "./packages/core/tsconfig.json", - "exclude": ["node_modules", ".turbo", "dist", "packages"], - "include": ["alchemy.run.ts"] + "exclude": ["node_modules", ".turbo", "dist", "apps", "packages", "tools"] } diff --git a/vitest.config.ts b/vitest.config.ts index 23f4aa7..7ae22ff 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -2,6 +2,16 @@ import { defineConfig } from "vitest/config"; export default defineConfig({ test: { - projects: ["apps/*", "packages/*", "tools/*"], + projects: [ + { + test: { + name: "scripts", + include: ["scripts/**/*.test.ts"], + }, + }, + "apps/*", + "packages/*", + "tools/*", + ], }, }); From 783a3c2f4dd0b20ac88925cec39aacd1f478da31 Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 28 May 2026 10:24:14 -0400 Subject: [PATCH 21/21] docs(agents): byterover context --- .../design/caplets/caplets_findings.md | 36 ++++++++++ .../apps_landing_src_pages_index_astro.md | 22 ++++++ .../design/caplets_curate/build.md | 22 ++++++ .../design/caplets_curate/context.md | 10 +++ .../design/caplets_curate/curated_context.md | 63 ++++++++++++++++ .../integration_tabs_and_panels.md | 22 ++++++ .../design/caplets_curate/panel_elements.md | 22 ++++++ .../design/caplets_curate/tab_container.md | 22 ++++++ .../design/caplets_curate/tab_elements.md | 22 ++++++ .../task_3_review_progressive_enhancement.md | 46 ++++++++++++ .../design/caplets_curate/typecheck.md | 22 ++++++ .../design/caplets_curate/working_module.md | 2 +- .../design/caplets_curate/working_tree.md | 22 ++++++ .../design/curated_facts/extracted_facts.md | 39 ++++++++++ .../landing_fixes/audit_fixes_summary.md | 72 +++++++++++++++++++ .../design/landing_fixes/task_3_re_review.md | 42 +++++++++++ .../design/landing_page/context.md | 3 + .../landing_page_review_findings.md | 2 +- .../skillify_landing_page_review.md | 2 +- ...skillify_landing_page_review_2026_05_28.md | 2 +- .../skillify_landing_page_task_7_review.md | 2 +- .../landing_page/task_8_responsive_pass.md | 2 +- .../design/landing_page/trust_priority.md | 2 +- .../working_module/working_module_findings.md | 35 +++++++++ .../extracted/curated/curated_content.md | 34 ++++----- .../extracted/curated/curated_context.md | 29 ++++---- .../extracted/curated/extracted_context.md | 24 +++++++ .../extracted/curated/extracted_facts.md | 37 +++++----- .../extracted/curated/github_job_url.md | 14 ++++ .../extracted/facts/accent_rule.md | 24 +++++++ .brv/context-tree/extracted/facts/adapt.md | 24 +++++++ .brv/context-tree/extracted/facts/animate.md | 24 +++++++ .brv/context-tree/extracted/facts/audit.md | 24 +++++++ .brv/context-tree/extracted/facts/bolder.md | 24 +++++++ .../extracted/facts/border_usage.md | 24 +++++++ .brv/context-tree/extracted/facts/browser.md | 24 +++++++ .brv/context-tree/extracted/facts/build.md | 24 +++++++ .../extracted/facts/card_grids.md | 24 +++++++ .brv/context-tree/extracted/facts/cards.md | 24 +++++++ .../extracted/facts/cards_usage.md | 24 +++++++ .../extracted/facts/chroma_adjustment.md | 24 +++++++ .brv/context-tree/extracted/facts/clarify.md | 24 +++++++ .../extracted/facts/color_model.md | 24 +++++++ .../extracted/facts/color_strategy.md | 24 +++++++ .../extracted/facts/color_usage.md | 24 +++++++ .brv/context-tree/extracted/facts/colorize.md | 24 +++++++ .../extracted/facts/command_syntax.md | 24 +++++++ .../extracted/facts/committed_strategy.md | 24 +++++++ .../extracted/facts/containers.md | 24 +++++++ .brv/context-tree/extracted/facts/craft.md | 24 +++++++ .brv/context-tree/extracted/facts/critique.md | 24 +++++++ .brv/context-tree/extracted/facts/css.md | 24 +++++++ .../extracted/facts/css_animation.md | 24 +++++++ .brv/context-tree/extracted/facts/delight.md | 24 +++++++ .../context-tree/extracted/facts/design_md.md | 25 +++++++ .../extracted/facts/design_process.md | 24 +++++++ .../extracted/facts/design_register.md | 24 +++++++ .../extracted/facts/design_task.md | 24 +++++++ .../extracted/facts/desktop_navbar.md | 24 +++++++ .brv/context-tree/extracted/facts/distill.md | 24 +++++++ .brv/context-tree/extracted/facts/document.md | 24 +++++++ .../extracted/facts/drenched_strategy.md | 24 +++++++ .brv/context-tree/extracted/facts/easing.md | 24 +++++++ .brv/context-tree/extracted/facts/extract.md | 24 +++++++ .../extracted/facts/full_palette_strategy.md | 24 +++++++ .../extracted/facts/glassmorphism.md | 24 +++++++ .../extracted/facts/global_css.md | 27 +++++++ .../extracted/facts/gradient_text.md | 24 +++++++ .brv/context-tree/extracted/facts/harden.md | 24 +++++++ .brv/context-tree/extracted/facts/header.md | 24 +++++++ .../extracted/facts/hero_metric_template.md | 24 +++++++ .../extracted/facts/hex_colors.md | 24 +++++++ .../extracted/facts/horizontal_overflow.md | 24 +++++++ .brv/context-tree/extracted/facts/icons.md | 24 +++++++ .../extracted/facts/impeccable_context_dir.md | 24 +++++++ .../extracted/facts/impeccable_skill.md | 24 +++++++ .brv/context-tree/extracted/facts/layout.md | 24 +++++++ .../extracted/facts/line_length.md | 24 +++++++ .brv/context-tree/extracted/facts/live.md | 24 +++++++ .brv/context-tree/extracted/facts/loader.md | 24 +++++++ .../extracted/facts/loader_output_handling.md | 24 +++++++ .../extracted/facts/loader_script.md | 24 +++++++ .../extracted/facts/mobile_branding.md | 24 +++++++ .../extracted/facts/mobile_header.md | 24 +++++++ .../extracted/facts/mobile_navbar.md | 24 +++++++ .brv/context-tree/extracted/facts/modals.md | 24 +++++++ .../extracted/facts/native_agent_tabs.md | 24 +++++++ .../facts/native_agents_install_card.md | 24 +++++++ .brv/context-tree/extracted/facts/navbar.md | 25 +++++++ .../extracted/facts/nested_cards.md | 24 +++++++ .../extracted/facts/neutral_tinting.md | 24 +++++++ .brv/context-tree/extracted/facts/onboard.md | 24 +++++++ .brv/context-tree/extracted/facts/optimize.md | 24 +++++++ .../context-tree/extracted/facts/overdrive.md | 24 +++++++ .../extracted/facts/page_layout.md | 24 +++++++ .../extracted/facts/page_width.md | 24 +++++++ .brv/context-tree/extracted/facts/pin.md | 24 +++++++ .../context-tree/extracted/facts/pin_unpin.md | 24 +++++++ .brv/context-tree/extracted/facts/polish.md | 24 +++++++ .../extracted/facts/product_md.md | 25 +++++++ .../extracted/facts/punctuation.md | 24 +++++++ .brv/context-tree/extracted/facts/quieter.md | 24 +++++++ .../extracted/facts/restrained_strategy.md | 24 +++++++ .brv/context-tree/extracted/facts/script.md | 24 +++++++ .brv/context-tree/extracted/facts/setup.md | 24 +++++++ .brv/context-tree/extracted/facts/shape.md | 24 +++++++ .../extracted/facts/side_stripe_borders.md | 24 +++++++ .brv/context-tree/extracted/facts/spacing.md | 24 +++++++ .brv/context-tree/extracted/facts/teach.md | 24 +++++++ .../extracted/facts/theme_selection.md | 24 +++++++ .../context-tree/extracted/facts/typecheck.md | 24 +++++++ .brv/context-tree/extracted/facts/typeset.md | 24 +++++++ .../extracted/facts/typographic_hierarchy.md | 24 +++++++ .brv/context-tree/extracted/facts/unpin.md | 24 +++++++ .../extracted/facts/valid_command.md | 24 +++++++ .../extracted/facts/writing_guidelines.md | 24 +++++++ .../facts/extracted_facts/adapt_command.md | 24 +++++++ .../facts/extracted_facts/animate_command.md | 24 +++++++ .../extracted_facts/animation_constraints.md | 24 +++++++ .../facts/extracted_facts/audit_command.md | 24 +++++++ .../facts/extracted_facts/bolder_command.md | 24 +++++++ .../facts/extracted_facts/border_usage.md | 24 +++++++ .../facts/extracted_facts/browser.md | 24 +++++++ .../extracted_facts/browser_rendering.md | 24 +++++++ .../facts/extracted_facts/build.md | 24 +++++++ .../facts/extracted_facts/card_grid_design.md | 24 +++++++ .../facts/extracted_facts/card_usage.md | 24 +++++++ .../extracted_facts/category_reflex_check.md | 24 +++++++ .../facts/extracted_facts/clarify_command.md | 24 +++++++ .../facts/extracted_facts/color_model.md | 24 +++++++ .../facts/extracted_facts/colorize_command.md | 24 +++++++ .../extracted_facts/committed_strategy.md | 24 +++++++ .../facts/extracted_facts/copywriting.md | 24 +++++++ .../facts/extracted_facts/craft_command.md | 24 +++++++ .../facts/extracted_facts/critique_command.md | 24 +++++++ .../facts/extracted_facts/delight_command.md | 24 +++++++ .../facts/extracted_facts/design_md.md | 25 +++++++ .../facts/extracted_facts/design_task.md | 24 +++++++ .../facts/extracted_facts/distill_command.md | 24 +++++++ .../facts/extracted_facts/document_command.md | 24 +++++++ .../extracted_facts/drenched_strategy.md | 24 +++++++ .../facts/extracted_facts/easing_functions.md | 24 +++++++ .../facts/extracted_facts/extract_command.md | 24 +++++++ .../extracted_facts/full_palette_strategy.md | 24 +++++++ .../facts/extracted_facts/glassmorphism.md | 24 +++++++ .../facts/extracted_facts/harden_command.md | 24 +++++++ .../extracted_facts/hero_metric_template.md | 24 +++++++ .../facts/extracted_facts/hex_colors.md | 24 +++++++ .../facts/extracted_facts/install_copy.md | 24 +++++++ .../facts/extracted_facts/layout_command.md | 24 +++++++ .../facts/extracted_facts/line_length.md | 24 +++++++ .../facts/extracted_facts/live_command.md | 24 +++++++ .../facts/extracted_facts/modal_usage.md | 24 +++++++ .../facts/extracted_facts/neutral_tinting.md | 24 +++++++ .../facts/extracted_facts/onboard_command.md | 24 +++++++ .../facts/extracted_facts/optimize_command.md | 24 +++++++ .../extracted_facts/overdrive_command.md | 24 +++++++ .../context-tree/facts/extracted_facts/pin.md | 24 +++++++ .../extracted_facts/pin_unpin_commands.md | 24 +++++++ .../facts/extracted_facts/pin_unpin_script.md | 24 +++++++ .../facts/extracted_facts/pnpm.md | 25 +++++++ .../facts/extracted_facts/polish_command.md | 24 +++++++ .../facts/extracted_facts/product_md.md | 25 +++++++ .../facts/extracted_facts/punctuation.md | 24 +++++++ .../facts/extracted_facts/quieter_command.md | 24 +++++++ .../extracted_facts/register_failures.md | 24 +++++++ .../register_identification.md | 24 +++++++ .../register_specific_failures.md | 24 +++++++ .../extracted_facts/restrained_strategy.md | 24 +++++++ .../facts/extracted_facts/section_heading.md | 24 +++++++ .../facts/extracted_facts/shape_command.md | 24 +++++++ .../facts/extracted_facts/spacing.md | 24 +++++++ .../facts/extracted_facts/teach_command.md | 24 +++++++ .../facts/extracted_facts/text_styling.md | 24 +++++++ .../facts/extracted_facts/theme_selection.md | 24 +++++++ .../facts/extracted_facts/typecheck.md | 24 +++++++ .../facts/extracted_facts/typeset_command.md | 24 +++++++ .../extracted_facts/typographic_hierarchy.md | 24 +++++++ .../facts/extracted_facts/unpin.md | 24 +++++++ .../project/alchemy_cli_process_behavior.md | 20 ++++++ .../apps_landing_src_pages_index_astro.md | 27 +++++++ .brv/context-tree/facts/project/brand_mark.md | 27 +++++++ .brv/context-tree/facts/project/build.md | 12 ++-- .../project/caplets_github_action_run.md | 29 ++++++++ .../context-tree/facts/project/constraints.md | 25 +++++++ .brv/context-tree/facts/project/content.md | 24 +++++++ .../facts/project/css_implementation.md | 27 +++++++ .../facts/project/css_variable.md | 22 ++++++ .brv/context-tree/facts/project/diff_scope.md | 24 +++++++ .brv/context-tree/facts/project/files.md | 24 +++++++ .../facts/project/fix_comparison.md | 20 ++++++ .../facts/project/footer_mobile_links.md | 27 +++++++ .../facts/project/header_shadow_token.md | 25 +++++++ .../facts/project/hover_motion.md | 25 +++++++ .../facts/project/hover_transform.md | 24 +++++++ .../facts/project/hover_transforms.md | 22 ++++++ .brv/context-tree/facts/project/icon_link.md | 27 +++++++ .../project/inactive_integration_panels.md | 27 +++++++ .../facts/project/integration_panels.md | 27 +++++++ .../facts/project/integration_pill.md | 27 +++++++ .../integration_tabs_aria_semantics.md | 22 ++++++ .brv/context-tree/facts/project/javascript.md | 24 +++++++ .../project/javascript_initialization.md | 27 +++++++ .../facts/project/kicker_pattern.md | 24 +++++++ .../facts/project/kicker_scaffolding.md | 24 +++++++ .brv/context-tree/facts/project/layout.md | 15 ++-- .brv/context-tree/facts/project/mask_image.md | 24 +++++++ .../facts/project/motion_preferences.md | 22 ++++++ .brv/context-tree/facts/project/next_step.md | 24 +++++++ .brv/context-tree/facts/project/none.md | 24 +++++++ .../facts/project/package_json.md | 20 ++++++ .brv/context-tree/facts/project/panels.md | 24 +++++++ .../facts/project/potential_files.md | 24 +++++++ .brv/context-tree/facts/project/repo.md | 24 +++++++ .../facts/project/reveal_component.md | 22 ++++++ .../facts/project/reveal_transitions.md | 22 ++++++ .brv/context-tree/facts/project/risks.md | 27 +++++++ .../scripts_alchemy_fetch_compat_mjs.md | 20 ++++++ .../project/scripts_alchemy_runner_mjs.md | 20 ++++++ .../scripts_alchemy_runner_test_mjs.md | 20 ++++++ .../facts/project/section_styling.md | 24 +++++++ .../facts/project/tab_aria_state.md | 27 +++++++ .brv/context-tree/facts/project/tablist.md | 24 +++++++ .brv/context-tree/facts/project/tabs.md | 24 +++++++ .../facts/project/task_outcome.md | 24 +++++++ .../facts/project/test_results.md | 20 ++++++ .../facts/project/tool_noise_mask.md | 22 ++++++ .brv/context-tree/facts/project/tooling.md | 24 +++++++ .../facts/project/top_nav_a_header_action.md | 27 +++++++ .../facts/project/touch_target_size.md | 22 ++++++ .brv/context-tree/facts/project/typecheck.md | 12 ++-- .../facts/project/verification_steps.md | 20 ++++++ .../facts/project/visual_elements.md | 12 ++-- .brv/context-tree/misc/curated/build.md | 24 +++++++ .brv/context-tree/misc/curated/copy.md | 24 +++++++ .../misc/curated/implementation.md | 24 +++++++ .brv/context-tree/misc/curated/index_astro.md | 24 +++++++ .../misc/curated/js_initialization.md | 24 +++++++ .brv/context-tree/misc/curated/navigation.md | 24 +++++++ .brv/context-tree/misc/curated/none.md | 24 +++++++ .../misc/curated/panel_visibility.md | 24 +++++++ .../misc/curated/ssr_semantics.md | 24 +++++++ .brv/context-tree/misc/curated/task.md | 24 +++++++ .brv/context-tree/misc/curated/typecheck.md | 24 +++++++ 244 files changed, 5715 insertions(+), 79 deletions(-) create mode 100644 .brv/context-tree/design/caplets/caplets_findings.md create mode 100644 .brv/context-tree/design/caplets_curate/apps_landing_src_pages_index_astro.md create mode 100644 .brv/context-tree/design/caplets_curate/build.md create mode 100644 .brv/context-tree/design/caplets_curate/context.md create mode 100644 .brv/context-tree/design/caplets_curate/curated_context.md create mode 100644 .brv/context-tree/design/caplets_curate/integration_tabs_and_panels.md create mode 100644 .brv/context-tree/design/caplets_curate/panel_elements.md create mode 100644 .brv/context-tree/design/caplets_curate/tab_container.md create mode 100644 .brv/context-tree/design/caplets_curate/tab_elements.md create mode 100644 .brv/context-tree/design/caplets_curate/task_3_review_progressive_enhancement.md create mode 100644 .brv/context-tree/design/caplets_curate/typecheck.md create mode 100644 .brv/context-tree/design/caplets_curate/working_tree.md create mode 100644 .brv/context-tree/design/curated_facts/extracted_facts.md create mode 100644 .brv/context-tree/design/landing_fixes/audit_fixes_summary.md create mode 100644 .brv/context-tree/design/landing_fixes/task_3_re_review.md create mode 100644 .brv/context-tree/design/working_module/working_module_findings.md create mode 100644 .brv/context-tree/extracted/curated/extracted_context.md create mode 100644 .brv/context-tree/extracted/curated/github_job_url.md create mode 100644 .brv/context-tree/extracted/facts/accent_rule.md create mode 100644 .brv/context-tree/extracted/facts/adapt.md create mode 100644 .brv/context-tree/extracted/facts/animate.md create mode 100644 .brv/context-tree/extracted/facts/audit.md create mode 100644 .brv/context-tree/extracted/facts/bolder.md create mode 100644 .brv/context-tree/extracted/facts/border_usage.md create mode 100644 .brv/context-tree/extracted/facts/browser.md create mode 100644 .brv/context-tree/extracted/facts/build.md create mode 100644 .brv/context-tree/extracted/facts/card_grids.md create mode 100644 .brv/context-tree/extracted/facts/cards.md create mode 100644 .brv/context-tree/extracted/facts/cards_usage.md create mode 100644 .brv/context-tree/extracted/facts/chroma_adjustment.md create mode 100644 .brv/context-tree/extracted/facts/clarify.md create mode 100644 .brv/context-tree/extracted/facts/color_model.md create mode 100644 .brv/context-tree/extracted/facts/color_strategy.md create mode 100644 .brv/context-tree/extracted/facts/color_usage.md create mode 100644 .brv/context-tree/extracted/facts/colorize.md create mode 100644 .brv/context-tree/extracted/facts/command_syntax.md create mode 100644 .brv/context-tree/extracted/facts/committed_strategy.md create mode 100644 .brv/context-tree/extracted/facts/containers.md create mode 100644 .brv/context-tree/extracted/facts/craft.md create mode 100644 .brv/context-tree/extracted/facts/critique.md create mode 100644 .brv/context-tree/extracted/facts/css.md create mode 100644 .brv/context-tree/extracted/facts/css_animation.md create mode 100644 .brv/context-tree/extracted/facts/delight.md create mode 100644 .brv/context-tree/extracted/facts/design_md.md create mode 100644 .brv/context-tree/extracted/facts/design_process.md create mode 100644 .brv/context-tree/extracted/facts/design_register.md create mode 100644 .brv/context-tree/extracted/facts/design_task.md create mode 100644 .brv/context-tree/extracted/facts/desktop_navbar.md create mode 100644 .brv/context-tree/extracted/facts/distill.md create mode 100644 .brv/context-tree/extracted/facts/document.md create mode 100644 .brv/context-tree/extracted/facts/drenched_strategy.md create mode 100644 .brv/context-tree/extracted/facts/easing.md create mode 100644 .brv/context-tree/extracted/facts/extract.md create mode 100644 .brv/context-tree/extracted/facts/full_palette_strategy.md create mode 100644 .brv/context-tree/extracted/facts/glassmorphism.md create mode 100644 .brv/context-tree/extracted/facts/global_css.md create mode 100644 .brv/context-tree/extracted/facts/gradient_text.md create mode 100644 .brv/context-tree/extracted/facts/harden.md create mode 100644 .brv/context-tree/extracted/facts/header.md create mode 100644 .brv/context-tree/extracted/facts/hero_metric_template.md create mode 100644 .brv/context-tree/extracted/facts/hex_colors.md create mode 100644 .brv/context-tree/extracted/facts/horizontal_overflow.md create mode 100644 .brv/context-tree/extracted/facts/icons.md create mode 100644 .brv/context-tree/extracted/facts/impeccable_context_dir.md create mode 100644 .brv/context-tree/extracted/facts/impeccable_skill.md create mode 100644 .brv/context-tree/extracted/facts/layout.md create mode 100644 .brv/context-tree/extracted/facts/line_length.md create mode 100644 .brv/context-tree/extracted/facts/live.md create mode 100644 .brv/context-tree/extracted/facts/loader.md create mode 100644 .brv/context-tree/extracted/facts/loader_output_handling.md create mode 100644 .brv/context-tree/extracted/facts/loader_script.md create mode 100644 .brv/context-tree/extracted/facts/mobile_branding.md create mode 100644 .brv/context-tree/extracted/facts/mobile_header.md create mode 100644 .brv/context-tree/extracted/facts/mobile_navbar.md create mode 100644 .brv/context-tree/extracted/facts/modals.md create mode 100644 .brv/context-tree/extracted/facts/native_agent_tabs.md create mode 100644 .brv/context-tree/extracted/facts/native_agents_install_card.md create mode 100644 .brv/context-tree/extracted/facts/navbar.md create mode 100644 .brv/context-tree/extracted/facts/nested_cards.md create mode 100644 .brv/context-tree/extracted/facts/neutral_tinting.md create mode 100644 .brv/context-tree/extracted/facts/onboard.md create mode 100644 .brv/context-tree/extracted/facts/optimize.md create mode 100644 .brv/context-tree/extracted/facts/overdrive.md create mode 100644 .brv/context-tree/extracted/facts/page_layout.md create mode 100644 .brv/context-tree/extracted/facts/page_width.md create mode 100644 .brv/context-tree/extracted/facts/pin.md create mode 100644 .brv/context-tree/extracted/facts/pin_unpin.md create mode 100644 .brv/context-tree/extracted/facts/polish.md create mode 100644 .brv/context-tree/extracted/facts/product_md.md create mode 100644 .brv/context-tree/extracted/facts/punctuation.md create mode 100644 .brv/context-tree/extracted/facts/quieter.md create mode 100644 .brv/context-tree/extracted/facts/restrained_strategy.md create mode 100644 .brv/context-tree/extracted/facts/script.md create mode 100644 .brv/context-tree/extracted/facts/setup.md create mode 100644 .brv/context-tree/extracted/facts/shape.md create mode 100644 .brv/context-tree/extracted/facts/side_stripe_borders.md create mode 100644 .brv/context-tree/extracted/facts/spacing.md create mode 100644 .brv/context-tree/extracted/facts/teach.md create mode 100644 .brv/context-tree/extracted/facts/theme_selection.md create mode 100644 .brv/context-tree/extracted/facts/typecheck.md create mode 100644 .brv/context-tree/extracted/facts/typeset.md create mode 100644 .brv/context-tree/extracted/facts/typographic_hierarchy.md create mode 100644 .brv/context-tree/extracted/facts/unpin.md create mode 100644 .brv/context-tree/extracted/facts/valid_command.md create mode 100644 .brv/context-tree/extracted/facts/writing_guidelines.md create mode 100644 .brv/context-tree/facts/extracted_facts/adapt_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/animate_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/animation_constraints.md create mode 100644 .brv/context-tree/facts/extracted_facts/audit_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/bolder_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/border_usage.md create mode 100644 .brv/context-tree/facts/extracted_facts/browser.md create mode 100644 .brv/context-tree/facts/extracted_facts/browser_rendering.md create mode 100644 .brv/context-tree/facts/extracted_facts/build.md create mode 100644 .brv/context-tree/facts/extracted_facts/card_grid_design.md create mode 100644 .brv/context-tree/facts/extracted_facts/card_usage.md create mode 100644 .brv/context-tree/facts/extracted_facts/category_reflex_check.md create mode 100644 .brv/context-tree/facts/extracted_facts/clarify_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/color_model.md create mode 100644 .brv/context-tree/facts/extracted_facts/colorize_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/committed_strategy.md create mode 100644 .brv/context-tree/facts/extracted_facts/copywriting.md create mode 100644 .brv/context-tree/facts/extracted_facts/craft_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/critique_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/delight_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/design_md.md create mode 100644 .brv/context-tree/facts/extracted_facts/design_task.md create mode 100644 .brv/context-tree/facts/extracted_facts/distill_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/document_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/drenched_strategy.md create mode 100644 .brv/context-tree/facts/extracted_facts/easing_functions.md create mode 100644 .brv/context-tree/facts/extracted_facts/extract_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/full_palette_strategy.md create mode 100644 .brv/context-tree/facts/extracted_facts/glassmorphism.md create mode 100644 .brv/context-tree/facts/extracted_facts/harden_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/hero_metric_template.md create mode 100644 .brv/context-tree/facts/extracted_facts/hex_colors.md create mode 100644 .brv/context-tree/facts/extracted_facts/install_copy.md create mode 100644 .brv/context-tree/facts/extracted_facts/layout_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/line_length.md create mode 100644 .brv/context-tree/facts/extracted_facts/live_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/modal_usage.md create mode 100644 .brv/context-tree/facts/extracted_facts/neutral_tinting.md create mode 100644 .brv/context-tree/facts/extracted_facts/onboard_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/optimize_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/overdrive_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/pin.md create mode 100644 .brv/context-tree/facts/extracted_facts/pin_unpin_commands.md create mode 100644 .brv/context-tree/facts/extracted_facts/pin_unpin_script.md create mode 100644 .brv/context-tree/facts/extracted_facts/pnpm.md create mode 100644 .brv/context-tree/facts/extracted_facts/polish_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/product_md.md create mode 100644 .brv/context-tree/facts/extracted_facts/punctuation.md create mode 100644 .brv/context-tree/facts/extracted_facts/quieter_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/register_failures.md create mode 100644 .brv/context-tree/facts/extracted_facts/register_identification.md create mode 100644 .brv/context-tree/facts/extracted_facts/register_specific_failures.md create mode 100644 .brv/context-tree/facts/extracted_facts/restrained_strategy.md create mode 100644 .brv/context-tree/facts/extracted_facts/section_heading.md create mode 100644 .brv/context-tree/facts/extracted_facts/shape_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/spacing.md create mode 100644 .brv/context-tree/facts/extracted_facts/teach_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/text_styling.md create mode 100644 .brv/context-tree/facts/extracted_facts/theme_selection.md create mode 100644 .brv/context-tree/facts/extracted_facts/typecheck.md create mode 100644 .brv/context-tree/facts/extracted_facts/typeset_command.md create mode 100644 .brv/context-tree/facts/extracted_facts/typographic_hierarchy.md create mode 100644 .brv/context-tree/facts/extracted_facts/unpin.md create mode 100644 .brv/context-tree/facts/project/alchemy_cli_process_behavior.md create mode 100644 .brv/context-tree/facts/project/apps_landing_src_pages_index_astro.md create mode 100644 .brv/context-tree/facts/project/brand_mark.md create mode 100644 .brv/context-tree/facts/project/caplets_github_action_run.md create mode 100644 .brv/context-tree/facts/project/constraints.md create mode 100644 .brv/context-tree/facts/project/content.md create mode 100644 .brv/context-tree/facts/project/css_implementation.md create mode 100644 .brv/context-tree/facts/project/css_variable.md create mode 100644 .brv/context-tree/facts/project/diff_scope.md create mode 100644 .brv/context-tree/facts/project/files.md create mode 100644 .brv/context-tree/facts/project/fix_comparison.md create mode 100644 .brv/context-tree/facts/project/footer_mobile_links.md create mode 100644 .brv/context-tree/facts/project/header_shadow_token.md create mode 100644 .brv/context-tree/facts/project/hover_motion.md create mode 100644 .brv/context-tree/facts/project/hover_transform.md create mode 100644 .brv/context-tree/facts/project/hover_transforms.md create mode 100644 .brv/context-tree/facts/project/icon_link.md create mode 100644 .brv/context-tree/facts/project/inactive_integration_panels.md create mode 100644 .brv/context-tree/facts/project/integration_panels.md create mode 100644 .brv/context-tree/facts/project/integration_pill.md create mode 100644 .brv/context-tree/facts/project/integration_tabs_aria_semantics.md create mode 100644 .brv/context-tree/facts/project/javascript.md create mode 100644 .brv/context-tree/facts/project/javascript_initialization.md create mode 100644 .brv/context-tree/facts/project/kicker_pattern.md create mode 100644 .brv/context-tree/facts/project/kicker_scaffolding.md create mode 100644 .brv/context-tree/facts/project/mask_image.md create mode 100644 .brv/context-tree/facts/project/motion_preferences.md create mode 100644 .brv/context-tree/facts/project/next_step.md create mode 100644 .brv/context-tree/facts/project/none.md create mode 100644 .brv/context-tree/facts/project/package_json.md create mode 100644 .brv/context-tree/facts/project/panels.md create mode 100644 .brv/context-tree/facts/project/potential_files.md create mode 100644 .brv/context-tree/facts/project/repo.md create mode 100644 .brv/context-tree/facts/project/reveal_component.md create mode 100644 .brv/context-tree/facts/project/reveal_transitions.md create mode 100644 .brv/context-tree/facts/project/risks.md create mode 100644 .brv/context-tree/facts/project/scripts_alchemy_fetch_compat_mjs.md create mode 100644 .brv/context-tree/facts/project/scripts_alchemy_runner_mjs.md create mode 100644 .brv/context-tree/facts/project/scripts_alchemy_runner_test_mjs.md create mode 100644 .brv/context-tree/facts/project/section_styling.md create mode 100644 .brv/context-tree/facts/project/tab_aria_state.md create mode 100644 .brv/context-tree/facts/project/tablist.md create mode 100644 .brv/context-tree/facts/project/tabs.md create mode 100644 .brv/context-tree/facts/project/task_outcome.md create mode 100644 .brv/context-tree/facts/project/test_results.md create mode 100644 .brv/context-tree/facts/project/tool_noise_mask.md create mode 100644 .brv/context-tree/facts/project/tooling.md create mode 100644 .brv/context-tree/facts/project/top_nav_a_header_action.md create mode 100644 .brv/context-tree/facts/project/touch_target_size.md create mode 100644 .brv/context-tree/facts/project/verification_steps.md create mode 100644 .brv/context-tree/misc/curated/build.md create mode 100644 .brv/context-tree/misc/curated/copy.md create mode 100644 .brv/context-tree/misc/curated/implementation.md create mode 100644 .brv/context-tree/misc/curated/index_astro.md create mode 100644 .brv/context-tree/misc/curated/js_initialization.md create mode 100644 .brv/context-tree/misc/curated/navigation.md create mode 100644 .brv/context-tree/misc/curated/none.md create mode 100644 .brv/context-tree/misc/curated/panel_visibility.md create mode 100644 .brv/context-tree/misc/curated/ssr_semantics.md create mode 100644 .brv/context-tree/misc/curated/task.md create mode 100644 .brv/context-tree/misc/curated/typecheck.md diff --git a/.brv/context-tree/design/caplets/caplets_findings.md b/.brv/context-tree/design/caplets/caplets_findings.md new file mode 100644 index 0000000..c4163d2 --- /dev/null +++ b/.brv/context-tree/design/caplets/caplets_findings.md @@ -0,0 +1,36 @@ +--- +title: Caplets Findings +summary: Extracted factual statements from caplets context +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:44:33.912Z' +updatedAt: '2026-05-28T13:44:33.912Z' +--- +## Reason +Curate extracted findings from caplets source + +## Raw Concept +**Task:** +Document caplets findings + +**Timestamp:** 2026-05-28T13:44:33.909Z + +## Narrative +### Structure +Aggregated factual statements extracted from caplets context + +### Highlights +1 statements for task, 3 statements for index.astro, 1 statements for content_visibility, 1 statements for global.css, 1 statements for typecheck, 1 statements for build, 1 statements for repository_state, 1 statements for review + +## Facts +- **task**: Implemented reveal motion resilience in apps/landing. +- **index.astro**: Removed the 1.8s global fallback in apps/landing/src/pages/index.astro. +- **content_visibility**: Keeps content visible by default unless IntersectionObserver is available and initialized. +- **index.astro**: Adds .motion-ready only after observer setup. +- **index.astro**: Adds a 100ms safety net if no observer update arrives. +- **global.css**: Reveal transition now uses only opacity and transform in apps/landing/src/styles/global.css. +- **typecheck**: pnpm --filter @caplets/landing typecheck passed with 0 errors. +- **build**: pnpm --filter @caplets/landing build passed, 1 page built. +- **repository_state**: Working tree contains unrelated pre-existing changes in global.css and other files. +- **review**: Recommended next step: review the landing diff before commit because of the pre-existing unrelated working tree changes. diff --git a/.brv/context-tree/design/caplets_curate/apps_landing_src_pages_index_astro.md b/.brv/context-tree/design/caplets_curate/apps_landing_src_pages_index_astro.md new file mode 100644 index 0000000..a78535a --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/apps_landing_src_pages_index_astro.md @@ -0,0 +1,22 @@ +--- +title: Apps/landing/src/pages/index.astro +summary: Facts about apps/landing/src/pages/index.astro +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:47:56.603Z' +updatedAt: '2026-05-28T13:47:56.603Z' +--- +## Reason +Curated factual statements extracted from source context + +## Raw Concept +**Task:** +Document facts for apps/landing/src/pages/index.astro + +## Narrative +### Highlights +Extracted 1 facts + +## Facts +- **apps/landing/src/pages/index.astro**: Changed file apps/landing/src/pages/index.astro. diff --git a/.brv/context-tree/design/caplets_curate/build.md b/.brv/context-tree/design/caplets_curate/build.md new file mode 100644 index 0000000..01b1a86 --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/build.md @@ -0,0 +1,22 @@ +--- +title: Build +summary: Facts about build +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:47:56.618Z' +updatedAt: '2026-05-28T13:47:56.618Z' +--- +## Reason +Curated factual statements extracted from source context + +## Raw Concept +**Task:** +Document facts for build + +## Narrative +### Highlights +Extracted 1 facts + +## Facts +- **build**: pnpm --filter @caplets/landing build passed, 1 page built. diff --git a/.brv/context-tree/design/caplets_curate/context.md b/.brv/context-tree/design/caplets_curate/context.md new file mode 100644 index 0000000..b1faf22 --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/context.md @@ -0,0 +1,10 @@ +# Topic: caplets_curate + +## Overview +Review of integration tab/panel markup and JS for accessibility after progressive enhancement fix + +## Key Concepts +- ARIA roles +- tablist +- tabpanel +- progressive enhancement diff --git a/.brv/context-tree/design/caplets_curate/curated_context.md b/.brv/context-tree/design/caplets_curate/curated_context.md new file mode 100644 index 0000000..453782f --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/curated_context.md @@ -0,0 +1,63 @@ +--- +title: curated_context +summary: Curated factual statements from provided context +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:45:50.257Z' +updatedAt: '2026-05-28T13:45:50.257Z' +--- +## Reason +Curate extracted knowledge from RLM extraction + +## Raw Concept +**Task:** +Curate extracted knowledge from provided context + +**Flow:** +extraction -> deduplication -> curation + +**Timestamp:** 2026-05-28T13:45:50.253Z + +## Narrative +### Structure +Organized by subject + +### Highlights +Extracted and deduplicated factual statements + +### Examples +[ + { + "statement": "apps/landing/src/pages/index.astro:523-558 now only enables reveal enhancement when canAnimate is true and IntersectionObserver exists.", + "subject": "apps/landing/src/pages/index.astro" + }, + { + "statement": "Content remains visible by default because hidden reveal styles are gated behind .motion-ready, added only after observer setup begins successfully.", + "subject": ".motion-ready CSS gating" + }, + { + "statement": "The former 1.8s fallback is shortened to 100ms at index.astro:553-558.", + "subject": "apps/landing/src/pages/index.astro" + }, + { + "statement": "Reduced-motion behavior is preserved via canAnimate check and CSS override at apps/landing/src/styles/global.css:1261-1285.", + "subject": "apps/landing/src/styles/global.css" + }, + { + "statement": "Reveal transition now uses only opacity and transform at global.css:561-563; the prior border-color transition was removed.", + "subject": "apps/landing/src/styles/global.css" + }, + { + "statement": "No reveal-related content or copy changes were found, and no em dashes were introduced in the reviewed reveal-motion changes.", + "subject": "reveal-motion changes" + } +] + +## Facts +- **apps/landing/src/pages/index.astro**: apps/landing/src/pages/index.astro:523-558 now only enables reveal enhancement when canAnimate is true and IntersectionObserver exists. +- **.motion-ready CSS gating**: Content remains visible by default because hidden reveal styles are gated behind .motion-ready, added only after observer setup begins successfully. +- **apps/landing/src/pages/index.astro**: The former 1.8s fallback is shortened to 100ms at index.astro:553-558. +- **apps/landing/src/styles/global.css**: Reduced-motion behavior is preserved via canAnimate check and CSS override at apps/landing/src/styles/global.css:1261-1285. +- **apps/landing/src/styles/global.css**: Reveal transition now uses only opacity and transform at global.css:561-563; the prior border-color transition was removed. +- **reveal-motion changes**: No reveal-related content or copy changes were found, and no em dashes were introduced in the reviewed reveal-motion changes. diff --git a/.brv/context-tree/design/caplets_curate/integration_tabs_and_panels.md b/.brv/context-tree/design/caplets_curate/integration_tabs_and_panels.md new file mode 100644 index 0000000..2281c71 --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/integration_tabs_and_panels.md @@ -0,0 +1,22 @@ +--- +title: Integration tabs and panels +summary: Facts about integration tabs and panels +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:47:56.602Z' +updatedAt: '2026-05-28T13:47:56.602Z' +--- +## Reason +Curated factual statements extracted from source context + +## Raw Concept +**Task:** +Document facts for integration tabs and panels + +## Narrative +### Highlights +Extracted 1 facts + +## Facts +- **integration tabs and panels**: Implemented server-rendered accessibility state for integration tabs and panels. diff --git a/.brv/context-tree/design/caplets_curate/panel_elements.md b/.brv/context-tree/design/caplets_curate/panel_elements.md new file mode 100644 index 0000000..523728d --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/panel_elements.md @@ -0,0 +1,22 @@ +--- +title: Panel elements +summary: Facts about panel elements +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:47:56.607Z' +updatedAt: '2026-05-28T13:47:56.607Z' +--- +## Reason +Curated factual statements extracted from source context + +## Raw Concept +**Task:** +Document facts for panel elements + +## Narrative +### Highlights +Extracted 1 facts + +## Facts +- **panel elements**: Added server-rendered panel attributes: role="tabpanel", aria-labelledby, hidden for inactive panels. diff --git a/.brv/context-tree/design/caplets_curate/tab_container.md b/.brv/context-tree/design/caplets_curate/tab_container.md new file mode 100644 index 0000000..4fe7910 --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/tab_container.md @@ -0,0 +1,22 @@ +--- +title: Tab container +summary: Facts about tab container +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:47:56.605Z' +updatedAt: '2026-05-28T13:47:56.605Z' +--- +## Reason +Curated factual statements extracted from source context + +## Raw Concept +**Task:** +Document facts for tab container + +## Narrative +### Highlights +Extracted 1 facts + +## Facts +- **tab container**: Added role="tablist" to the tab container. diff --git a/.brv/context-tree/design/caplets_curate/tab_elements.md b/.brv/context-tree/design/caplets_curate/tab_elements.md new file mode 100644 index 0000000..52ae548 --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/tab_elements.md @@ -0,0 +1,22 @@ +--- +title: Tab elements +summary: Facts about tab elements +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:47:56.606Z' +updatedAt: '2026-05-28T13:47:56.606Z' +--- +## Reason +Curated factual statements extracted from source context + +## Raw Concept +**Task:** +Document facts for tab elements + +## Narrative +### Highlights +Extracted 1 facts + +## Facts +- **tab elements**: Added server-rendered tab ARIA/state attributes: role="tab", aria-selected, aria-controls, tabindex. diff --git a/.brv/context-tree/design/caplets_curate/task_3_review_progressive_enhancement.md b/.brv/context-tree/design/caplets_curate/task_3_review_progressive_enhancement.md new file mode 100644 index 0000000..6ef6e0c --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/task_3_review_progressive_enhancement.md @@ -0,0 +1,46 @@ +--- +title: task_3_review_progressive_enhancement +summary: Task 3 re-review approved; ARIA roles and JS hidden state compliance +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:54:37.545Z' +updatedAt: '2026-05-28T13:54:37.545Z' +--- +## Reason +Document review outcome for accessibility spec of integration tab/panel + +## Raw Concept +**Task:** +Re-review Task 3 after progressive enhancement fix + +**Changes:** +- Reviewed ARIA roles, tablist, panel attributes +- Confirmed no content changes needed + +**Files:** +- apps/landing/src/pages/index.astro + +**Flow:** +Review markup and JS for ARIA compliance and progressive enhancement + +**Timestamp:** 2026-05-28T13:54:37.543Z + +**Author:** assistant + +## Narrative +### Structure +Server-render tablist with role and ARIA state, panels with role=tabpanel and aria-labelledby, JS applies initial hidden state after init + +### Highlights +APPROVED + +### Rules +- Server-render tablist role and ARIA state where safe +- Panels must have role=tabpanel and aria-labelledby +- No server-side hidden on inactive panels unless non-JS fallback exposes all content +- JS applies initial hidden state after initialization and preserves click/keyboard behavior +- No content/copy changes, no em dashes + +## Facts +- **task_3_review**: Review outcome: APPROVED [other] diff --git a/.brv/context-tree/design/caplets_curate/typecheck.md b/.brv/context-tree/design/caplets_curate/typecheck.md new file mode 100644 index 0000000..e0735f1 --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/typecheck.md @@ -0,0 +1,22 @@ +--- +title: Typecheck +summary: Facts about typecheck +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:47:56.610Z' +updatedAt: '2026-05-28T13:47:56.610Z' +--- +## Reason +Curated factual statements extracted from source context + +## Raw Concept +**Task:** +Document facts for typecheck + +## Narrative +### Highlights +Extracted 1 facts + +## Facts +- **typecheck**: pnpm --filter @caplets/landing typecheck passed with 0 errors, 0 warnings, 0 hints. diff --git a/.brv/context-tree/design/caplets_curate/working_module.md b/.brv/context-tree/design/caplets_curate/working_module.md index 019a70a..e00e213 100644 --- a/.brv/context-tree/design/caplets_curate/working_module.md +++ b/.brv/context-tree/design/caplets_curate/working_module.md @@ -2,7 +2,7 @@ title: working_module summary: Aggregated factual statements from working module tags: [] -related: [] +related: [design/landing_page/landing_page_review_findings.md, design/landing_page/skillify_landing_page_review.md, design/landing_page/skillify_landing_page_review_2026_05_28.md, design/landing_page/skillify_landing_page_task_7_review.md, design/landing_page/task_8_responsive_pass.md] keywords: [] createdAt: '2026-05-28T10:52:25.575Z' updatedAt: '2026-05-28T10:52:25.575Z' diff --git a/.brv/context-tree/design/caplets_curate/working_tree.md b/.brv/context-tree/design/caplets_curate/working_tree.md new file mode 100644 index 0000000..cb1cb17 --- /dev/null +++ b/.brv/context-tree/design/caplets_curate/working_tree.md @@ -0,0 +1,22 @@ +--- +title: Working tree +summary: Facts about working tree +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:47:56.619Z' +updatedAt: '2026-05-28T13:47:56.619Z' +--- +## Reason +Curated factual statements extracted from source context + +## Raw Concept +**Task:** +Document facts for working tree + +## Narrative +### Highlights +Extracted 1 facts + +## Facts +- **working tree**: Working tree contains many pre-existing unrelated modifications, including unrelated hunks in apps/landing/src/pages/index.astro. diff --git a/.brv/context-tree/design/curated_facts/extracted_facts.md b/.brv/context-tree/design/curated_facts/extracted_facts.md new file mode 100644 index 0000000..ab1ef05 --- /dev/null +++ b/.brv/context-tree/design/curated_facts/extracted_facts.md @@ -0,0 +1,39 @@ +--- +title: Extracted Facts +summary: Contains 11 deduplicated facts extracted from source context +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:49:52.994Z' +updatedAt: '2026-05-28T13:49:52.994Z' +--- +## Reason +Store factual statements extracted from RLM context + +## Raw Concept +**Task:** +Curate extracted factual statements from provided context + +**Timestamp:** 2026-05-28T13:49:52.993Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Structure +Facts extracted and organized by subject + +### Highlights +Extracted 11 unique facts across 8 subjects. + +## Facts +- **tab component**: Server-rendered tab ARIA is coherent: each tab has role="tab", aria-selected, aria-controls, roving tabindex; each panel has role="tabpanel" and aria-labelledby +- **tab component**: JS selection state matches the server-rendered IDs and updates aria-selected, tabIndex, and hidden consistently +- **tab component**: Keyboard support covers Left/Right/Home/End navigation with focus movement and activation +- **tab component**: There is duplicate state between SSR and JS for role, aria-controls, and aria-labelledby, but it is currently consistent and not conflicting +- **SSR/JS synchronization**: There is duplicate state between SSR and JS for `role`, `aria-controls`, and `aria-labelledby`, but it is currently consistent and not conflicting. +- **progressive enhancement**: Progressive enhancement regression is identified as a blocker. +- **inactive panels**: Inactive panels are rendered with `hidden` server-side, but tab switching only works after JS initializes. +- **no-JS scenario**: With JavaScript disabled or failed, users can only access the first integration panel, and the remaining server-rendered content is unavailable. +- **panel rendering**: The recommended action is to render all panels accessible by default, then have JS apply the initial tab state on hydration/init, or provide a non-JS fallback that exposes all panels. +- **approval**: The issue is not approved until the no-JS content access problem is fixed. +- **ls**: ls accessible by default, then have JS apply the initial tab state on hydration/init, or provide a non-JS fallback that exposes all panels. diff --git a/.brv/context-tree/design/landing_fixes/audit_fixes_summary.md b/.brv/context-tree/design/landing_fixes/audit_fixes_summary.md new file mode 100644 index 0000000..30886de --- /dev/null +++ b/.brv/context-tree/design/landing_fixes/audit_fixes_summary.md @@ -0,0 +1,72 @@ +--- +title: Audit Fixes Summary +summary: Summary of audit fixes including touch targets, reveal motion, integration tabs, and verification steps +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:07:06.849Z' +updatedAt: '2026-05-28T14:07:06.849Z' +--- +## Reason +Document audit fixes performed on landing page + +## Raw Concept +**Task:** +Apply audit fixes to landing page + +**Changes:** +- Mobile touch targets fixed +- Reveal motion resilience fixed +- Integration tabs hardened +- Repeated kicker scaffolding reduced +- Low-priority hover motion quieted +- Stale --header-shadow token removed +- `.tool-noise` mask no longer uses literal black + +**Files:** +- apps/landing/src/pages/index.astro +- apps/landing/src/styles/global.css + +**Flow:** +Implement fixes -> Verify typecheck & build -> Browser checks + +**Timestamp:** 2026-05-28T14:07:06.844Z + +## Narrative +### Structure +Fixes applied to landing page source files and verified via typecheck, build, and visual browser checks + +### Highlights +All audit fixes passed verification; mobile touch targets meet 44px minimum, no overflow at 320px and 1440px + +### Examples +Implemented all audit fixes via subagent-driven development with implementer and reviewer passes. +Mobile touch targets fixed. +Reveal motion resilience fixed. +Integration tabs hardened with safe progressive enhancement. +Repeated kicker scaffolding reduced. +Low-priority hover motion quieted. +Stale `--header-shadow` token removed. +`.tool-noise` mask no longer uses literal `black`. +Final subagent review approved. +Changed landing files: `apps/landing/src/pages/index.astro` and `apps/landing/src/styles/global.css`. +Verification passed: `pnpm --filter @caplets/landing typecheck`. +Verification passed: `pnpm --filter @caplets/landing build`. +Browser check at `320px` showed no horizontal overflow and no visible `a`/`button` targets below `44px`. +Browser check at `1440px` showed hero remains cleanly wrapped and trace card remains `660px` wide with no trace overflow. + +## Facts +- **audit fixes**: Implemented all audit fixes via subagent-driven development with implementer and reviewer passes. +- **mobile touch targets**: Mobile touch targets fixed. +- **reveal motion resilience**: Reveal motion resilience fixed. +- **integration tabs**: Integration tabs hardened with safe progressive enhancement. +- **kicker scaffolding**: Repeated kicker scaffolding reduced. +- **hover motion**: Low-priority hover motion quieted. +- **header-shadow token**: Stale `--header-shadow` token removed. +- **tool-noise mask**: `.tool-noise` mask no longer uses literal `black`. +- **subagent review**: Final subagent review approved. +- **landing files**: Changed landing files: `apps/landing/src/pages/index.astro` and `apps/landing/src/styles/global.css`. +- **typecheck**: Verification passed: `pnpm --filter @caplets/landing typecheck`. +- **build**: Verification passed: `pnpm --filter @caplets/landing build`. +- **320px browser check**: Browser check at `320px` showed no horizontal overflow and no visible `a`/`button` targets below `44px`. +- **1440px browser check**: Browser check at `1440px` showed hero remains cleanly wrapped and trace card remains `660px` wide with no trace overflow. diff --git a/.brv/context-tree/design/landing_fixes/task_3_re_review.md b/.brv/context-tree/design/landing_fixes/task_3_re_review.md new file mode 100644 index 0000000..931f8a4 --- /dev/null +++ b/.brv/context-tree/design/landing_fixes/task_3_re_review.md @@ -0,0 +1,42 @@ +--- +title: Task 3 Re-review +summary: 'Re-review of Task 3: accessibility specs approved' +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:53:34.424Z' +updatedAt: '2026-05-28T13:53:34.424Z' +--- +## Reason +Document re-review of integration tab/panel accessibility specs + +## Raw Concept +**Task:** +Re-review Task 3 after progressive enhancement fix + +**Changes:** +- Reviewed accessibility specs, no code changes + +**Files:** +- apps/landing/src/pages/index.astro + +**Flow:** +Review specs -> approve + +**Timestamp:** 2026-05-28T13:53:34.419Z + +**Author:** AI Assistant + +## Narrative +### Structure +Reviewed server-rendered tablist role, ARIA states, panel roles, and JS behavior + +### Highlights +All specs met, APPROVED + +## Facts +- **tablist_role**: Server-render tablist role and ARIA state where safe [project] +- **panel_role**: Panels have role=tabpanel and aria-labelledby [project] +- **panel_visibility**: No server-side hidden on inactive panels unless non-JS fallback [project] +- **js_initial_hidden**: JS applies initial hidden state after initialization [project] +- **review_outcome**: Review outcome: APPROVED [project] diff --git a/.brv/context-tree/design/landing_page/context.md b/.brv/context-tree/design/landing_page/context.md index 942ce65..c6bada2 100644 --- a/.brv/context-tree/design/landing_page/context.md +++ b/.brv/context-tree/design/landing_page/context.md @@ -1,3 +1,6 @@ +--- +related: [design/landing_page/trust_priority.md] +--- # Topic: landing_page ## Overview diff --git a/.brv/context-tree/design/landing_page/landing_page_review_findings.md b/.brv/context-tree/design/landing_page/landing_page_review_findings.md index 5508d16..154c416 100644 --- a/.brv/context-tree/design/landing_page/landing_page_review_findings.md +++ b/.brv/context-tree/design/landing_page/landing_page_review_findings.md @@ -2,7 +2,7 @@ title: Landing Page Review Findings summary: 'Landing page review: anchors valid, accessibility ok, build passes, minor dead CSS, no brand violations' tags: [] -related: [] +related: [design/caplets_curate/working_module.md, design/landing_page/skillify_landing_page_review.md, design/landing_page/skillify_landing_page_review_2026_05_28.md, design/landing_page/skillify_landing_page_task_7_review.md, design/landing_page/task_8_responsive_pass.md] keywords: [] createdAt: '2026-05-28T10:52:14.235Z' updatedAt: '2026-05-28T10:52:14.235Z' diff --git a/.brv/context-tree/design/landing_page/skillify_landing_page_review.md b/.brv/context-tree/design/landing_page/skillify_landing_page_review.md index 0a452d1..7f41bb1 100644 --- a/.brv/context-tree/design/landing_page/skillify_landing_page_review.md +++ b/.brv/context-tree/design/landing_page/skillify_landing_page_review.md @@ -2,7 +2,7 @@ title: Skillify Landing Page Review summary: Landing page review approved, all tasks 1-9 satisfied tags: [] -related: [] +related: [design/caplets_curate/working_module.md, design/landing_page/landing_page_review_findings.md, design/landing_page/skillify_landing_page_review_2026_05_28.md, design/landing_page/skillify_landing_page_task_7_review.md, design/landing_page/task_8_responsive_pass.md] keywords: [] createdAt: '2026-05-28T10:43:56.110Z' updatedAt: '2026-05-28T10:43:56.110Z' diff --git a/.brv/context-tree/design/landing_page/skillify_landing_page_review_2026_05_28.md b/.brv/context-tree/design/landing_page/skillify_landing_page_review_2026_05_28.md index 6c2c9a4..2268dad 100644 --- a/.brv/context-tree/design/landing_page/skillify_landing_page_review_2026_05_28.md +++ b/.brv/context-tree/design/landing_page/skillify_landing_page_review_2026_05_28.md @@ -2,7 +2,7 @@ title: Skillify Landing Page Review 2026-05-28 summary: 'Review of tasks 1-4 implementation; blocker: broken #map nav target' tags: [] -related: [] +related: [design/caplets_curate/working_module.md, design/landing_page/landing_page_review_findings.md, design/landing_page/skillify_landing_page_review.md, design/landing_page/skillify_landing_page_task_7_review.md, design/landing_page/task_8_responsive_pass.md] keywords: [] createdAt: '2026-05-28T10:19:04.961Z' updatedAt: '2026-05-28T10:19:04.961Z' diff --git a/.brv/context-tree/design/landing_page/skillify_landing_page_task_7_review.md b/.brv/context-tree/design/landing_page/skillify_landing_page_task_7_review.md index 8cdf3d0..606c94e 100644 --- a/.brv/context-tree/design/landing_page/skillify_landing_page_task_7_review.md +++ b/.brv/context-tree/design/landing_page/skillify_landing_page_task_7_review.md @@ -2,7 +2,7 @@ title: Skillify Landing Page Task 7 Review summary: 'Task 7: removed old motion systems, updated CSS, verified build passes, no grep matches' tags: [] -related: [] +related: [design/caplets_curate/working_module.md, design/landing_page/landing_page_review_findings.md, design/landing_page/skillify_landing_page_review.md, design/landing_page/skillify_landing_page_review_2026_05_28.md, design/landing_page/task_8_responsive_pass.md] keywords: [] createdAt: '2026-05-28T10:36:29.420Z' updatedAt: '2026-05-28T10:36:29.420Z' diff --git a/.brv/context-tree/design/landing_page/task_8_responsive_pass.md b/.brv/context-tree/design/landing_page/task_8_responsive_pass.md index 5a130d1..9cc6145 100644 --- a/.brv/context-tree/design/landing_page/task_8_responsive_pass.md +++ b/.brv/context-tree/design/landing_page/task_8_responsive_pass.md @@ -2,7 +2,7 @@ title: Task 8 Responsive Pass summary: Responsive CSS updates for trace, trust, snippets and mobile copy button in landing page tags: [] -related: [] +related: [design/caplets_curate/working_module.md, design/landing_page/landing_page_review_findings.md, design/landing_page/skillify_landing_page_review.md, design/landing_page/skillify_landing_page_review_2026_05_28.md, design/landing_page/skillify_landing_page_task_7_review.md] keywords: [] createdAt: '2026-05-28T10:38:10.054Z' updatedAt: '2026-05-28T10:38:10.054Z' diff --git a/.brv/context-tree/design/landing_page/trust_priority.md b/.brv/context-tree/design/landing_page/trust_priority.md index 57c17e4..6bc9f1b 100644 --- a/.brv/context-tree/design/landing_page/trust_priority.md +++ b/.brv/context-tree/design/landing_page/trust_priority.md @@ -2,7 +2,7 @@ title: trust_priority summary: Landing page should prioritize trust in architecture first tags: [] -related: [] +related: [design/landing_page/context.md] keywords: [] createdAt: '2026-05-28T09:50:32.824Z' updatedAt: '2026-05-28T09:50:32.824Z' diff --git a/.brv/context-tree/design/working_module/working_module_findings.md b/.brv/context-tree/design/working_module/working_module_findings.md new file mode 100644 index 0000000..100391d --- /dev/null +++ b/.brv/context-tree/design/working_module/working_module_findings.md @@ -0,0 +1,35 @@ +--- +title: Working Module Findings +summary: Curated factual findings of the working module +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:37:46.984Z' +updatedAt: '2026-05-28T13:46:43.741Z' +--- +## Reason +Curate extracted findings from working module analysis + +## Raw Concept +**Task:** +Document findings of the working module + +**Flow:** +context extraction -> deduplication -> grouping -> curation + +**Timestamp:** 2026-05-28T13:46:43.734Z + +## Narrative +### Structure +Extracted factual statements from provided context + +### Highlights +uncategorized, apps/landing/src/pages/index.astro, apps/landing/src/styles/global.css + +## Facts +- APPROVED +- **apps/landing/src/pages/index.astro**: apps/landing/src/pages/index.astro:523-558 only enables hidden reveal state when animation is allowed, IntersectionObserver exists, and reveal targets are present +- **apps/landing/src/pages/index.astro**: apps/landing/src/pages/index.astro:552-558 adds a short fail-safe; if no observer callback occurs, all reveal targets are made visible and the observer disconnects, reducing hidden-content risk versus the prior 1800ms blanket reveal +- **apps/landing/src/styles/global.css**: apps/landing/src/styles/global.css:535-565 keeps hidden state gated behind .motion-ready, so content remains visible by default before JavaScript runs or when JavaScript fails +- **apps/landing/src/styles/global.css**: apps/landing/src/styles/global.css:1261-1285 preserves reduced-motion behavior with visible, non-transformed reveal targets +- The change observes targets once, unobserves each revealed target, and disconnects on fallback, which is maintainable and avoids long-running observation for already visible content diff --git a/.brv/context-tree/extracted/curated/curated_content.md b/.brv/context-tree/extracted/curated/curated_content.md index bcade9c..9e4c78a 100644 --- a/.brv/context-tree/extracted/curated/curated_content.md +++ b/.brv/context-tree/extracted/curated/curated_content.md @@ -1,38 +1,38 @@ --- -title: curated_content -summary: Curated factual statements extracted from provided context. +title: Curated Content +summary: Curated factual statements extracted from provided context tags: [] related: [] keywords: [] createdAt: '2026-05-28T09:56:03.656Z' -updatedAt: '2026-05-28T11:14:14.272Z' +updatedAt: '2026-05-28T13:24:55.559Z' --- ## Reason -Curate extracted facts from context +Store extracted factual statements from curating task ## Raw Concept **Task:** -Curate extracted facts from provided context +Curate extracted factual statements **Flow:** extraction -> deduplication -> curation -**Timestamp:** 2026-05-28T09:56:03.655Z +**Timestamp:** 2026-05-28T13:24:55.556Z ## Narrative ### Structure -Extracted factual statements organized by subject. +Curated factual statements from provided context ### Highlights -landing page content, skillify term presentation, hero tagline, feature flow, skillify proof framework +hero text, desktop hero wrap, global.css, hero grid, desktop h1, line height and letter spacing, headline, browser size, checks ## Facts -- **landing app**: Changed files: apps/landing/src/pages/index.astro and apps/landing/src/styles/global.css. -- **typecheck**: pnpm --filter @caplets/landing typecheck passed with 0 errors. -- **build**: pnpm --filter @caplets/landing build passed, 1 page built. -- **touch targets**: Raised nav/header action touch targets from 42px to 44px in base and mobile CSS. -- **tab semantics**: Removed initial no-JS tab ARIA roles/state and now adds tab semantics via JavaScript only. -- **panels**: Kept no-JS panels visible. -- **clipboard fallback**: Associated copy buttons with snippet targets and added failure behavior that focuses/selects snippet text while preserving feedback. -- **reveal fail-safe**: Added reveal timeout fail-safe after .motion-ready is applied. -- **risks**: Open risks/questions: None. +- **hero text**: The hero text "Skillify your backends." was wrapped weird on desktop +- **desktop hero wrap**: The desktop hero wrap was fixed +- **global.css**: The file apps/landing/src/styles/global.css was changed +- **hero grid**: The hero grid was rebalanced so the text column has enough room +- **desktop h1**: The oversized desktop h1 scale was reduced +- **line height and letter spacing**: The line height and letter spacing were relaxed +- **headline**: The result is now a clean two-line headline: "Skillify your" and "backends." +- **browser size**: Verified in browser at 1440 × 900 +- **checks**: Build checks passed: pnpm --filter @caplets/landing typecheck and pnpm --filter @caplets/landing build diff --git a/.brv/context-tree/extracted/curated/curated_context.md b/.brv/context-tree/extracted/curated/curated_context.md index e237e0f..7d033b4 100644 --- a/.brv/context-tree/extracted/curated/curated_context.md +++ b/.brv/context-tree/extracted/curated/curated_context.md @@ -1,23 +1,23 @@ --- title: curated_context -summary: Curated factual statements from context +summary: Extracted factual statements from context tags: [] related: [] keywords: [] createdAt: '2026-05-28T10:33:03.171Z' -updatedAt: '2026-05-28T10:33:03.171Z' +updatedAt: '2026-05-28T13:39:45.007Z' --- ## Reason -Curate extracted factual statements +Curate extracted facts from context variable ## Raw Concept **Task:** -Curate extracted knowledge from provided context +Curated knowledge from provided context **Flow:** -extraction -> deduplication -> curation +extraction -**Timestamp:** 2026-05-28T10:33:03.169Z +**Timestamp:** 2026-05-28T13:39:44.994Z ## Narrative ### Structure @@ -27,10 +27,13 @@ Aggregated factual statements extracted from context Task 6, codebase, typecheck, build, node deprecation, risks, next steps ## Facts -- **Task 6**: Implemented Task 6. -- **codebase**: Changed files: apps/landing/src/pages/index.astro and apps/landing/src/styles/global.css. -- **typecheck**: pnpm --filter @caplets/landing typecheck PASS, 0 errors/warnings/hints. -- **build**: pnpm --filter @caplets/landing build PASS, 1 page built. -- **node deprecation**: Build/typecheck emitted Node [DEP0205] module.register() deprecation warnings only. -- **risks**: Open risks/questions: None. -- **next steps**: Recommended next step: Review the diff, then proceed to Task 7 separately. +- **changed files**: Unexpected changed files are present. +- **expected changed file**: Spec expects only the file apps/landing/src/styles/global.css to be changed. +- **global.css**: apps/landing/src/styles/global.css appears compliant with the touch‑target requirements. +- **mobile brand target**: Mobile brand target has min‑width: 44px and min‑height: 44px (lines 1118‑1122). +- **mobile nav/header actions**: Mobile nav/header actions have min‑height: 44px (lines 1140‑1144). +- **npm/GitHub icon links**: npm/GitHub icon links have width: 44px via .icon-link (lines 1155‑1157) combined with .header-action min‑height. +- **footer links**: Footer links have min‑height: 44px, display: flex, align‑items: center, padding‑block: 8px (lines 1254‑1258). +- **integration pill**: Integration pill has min‑width: 44px and min‑height: 44px (lines 791‑793). +- **header layout**: Header remains compact/full‑width, not a tall card; .site-header width: 100%, sticky at top: 0, with small mobile padding (lines 121‑133 and 1111‑1115). +- **design constraints**: No CSS evidence found for em dashes, side‑stripe borders, gradient text, or glassmorphism. diff --git a/.brv/context-tree/extracted/curated/extracted_context.md b/.brv/context-tree/extracted/curated/extracted_context.md new file mode 100644 index 0000000..1f48dfe --- /dev/null +++ b/.brv/context-tree/extracted/curated/extracted_context.md @@ -0,0 +1,24 @@ +--- +title: extracted_context +summary: Contains extracted factual statements from provided short context +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T12:52:11.616Z' +updatedAt: '2026-05-28T12:52:11.616Z' +--- +## Reason +Curate extracted facts from short context via RLM single-pass + +## Raw Concept +**Task:** +Curate extracted knowledge from provided context + +**Flow:** +extraction -> deduplication -> curation + +**Timestamp:** 2026-05-28T12:52:11.615Z + +## Narrative +### Structure +Aggregated facts extracted from short context diff --git a/.brv/context-tree/extracted/curated/extracted_facts.md b/.brv/context-tree/extracted/curated/extracted_facts.md index 435e415..c25b244 100644 --- a/.brv/context-tree/extracted/curated/extracted_facts.md +++ b/.brv/context-tree/extracted/curated/extracted_facts.md @@ -1,40 +1,41 @@ --- title: extracted_facts -summary: Aggregated factual statements extracted via RLM extraction +summary: Extracted factual statements from provided context tags: [] related: [] keywords: [] createdAt: '2026-05-28T11:15:49.857Z' -updatedAt: '2026-05-28T11:15:49.857Z' +updatedAt: '2026-05-28T13:27:23.975Z' --- ## Reason -Curate facts extracted from RLM context +Curate extracted factual statements from context ## Raw Concept **Task:** -Curate extracted facts from provided context +Curate extracted facts + +**Changes:** +- Extracted facts from provided context **Flow:** extract -> dedup -> group -> curate -**Timestamp:** 2026-05-28T11:15:49.856Z +**Timestamp:** 2026-05-28T13:27:23.971Z ## Narrative ### Structure -Aggregated factual statements extracted from context +Aggregated factual statements ### Highlights -audit theming, global.css, index.astro, grep, typecheck, build, impeccable, risks +hero layout, trace column, hero text column, headline sizing, trace card width ## Facts -- **audit theming**: Implemented audit theming and polish fixes in apps/landing only. -- **global.css**: Changed file apps/landing/src/styles/global.css: moved direct OKLCH literals into semantic :root tokens. -- **global.css**: Changed file apps/landing/src/styles/global.css: removed unused stale custom properties. -- **global.css**: Changed file apps/landing/src/styles/global.css: removed unused .header-action.muted selector. -- **index.astro**: Changed file apps/landing/src/pages/index.astro: marked decorative terminal chrome with aria-hidden="true". -- **grep**: grep verified removed tokens and selectors are no longer present. -- **grep**: grep verified no em dashes in apps/landing. -- **typecheck**: pnpm --filter @caplets/landing typecheck passed with 0 errors. -- **build**: pnpm --filter @caplets/landing build passed. -- **impeccable**: npx impeccable --json apps/landing/src/pages/index.astro passed with empty result array. -- **risks**: Open risks/questions: None. +- **hero layout**: Rebalanced the hero layout so the trace card is wider again while keeping the headline to a clean two-line wrap. +- **trace column**: Increased trace column from 576px to about 660px at desktop width in apps/landing/src/styles/global.css. +- **hero text column**: Reduced the hero text column slightly. +- **headline sizing**: Adjusted headline sizing so it still wraps as: “Skillify your” and “backends.” +- **trace card width**: Browser verified at 1440 × 900 that trace card width is 660px. +- **trace card overflow**: No trace card horizontal overflow observed. +- **hero headline**: Hero headline remains two lines. +- **typecheck**: Build check passed: pnpm --filter @caplets/landing typecheck. +- **build**: Build check passed: pnpm --filter @caplets/landing build. diff --git a/.brv/context-tree/extracted/curated/github_job_url.md b/.brv/context-tree/extracted/curated/github_job_url.md new file mode 100644 index 0000000..ffbaacd --- /dev/null +++ b/.brv/context-tree/extracted/curated/github_job_url.md @@ -0,0 +1,14 @@ +--- +title: GitHub job URL +summary: Extracted facts about GitHub job URL +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T11:51:29.535Z' +updatedAt: '2026-05-28T11:51:29.535Z' +--- +## Reason +Curate extracted facts from RLM context + +## Facts +- **GitHub job URL**: https://github.com/spiritledsoftware/caplets/actions/runs/26572806394/job/78284056512 diff --git a/.brv/context-tree/extracted/facts/accent_rule.md b/.brv/context-tree/extracted/facts/accent_rule.md new file mode 100644 index 0000000..406d041 --- /dev/null +++ b/.brv/context-tree/extracted/facts/accent_rule.md @@ -0,0 +1,24 @@ +--- +title: Accent rule +summary: Facts about accent rule +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.389Z' +updatedAt: '2026-05-28T13:18:21.389Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for accent rule + +## Facts +- **accent rule**: The "one accent ≤10%" rule is Restrained only. diff --git a/.brv/context-tree/extracted/facts/adapt.md b/.brv/context-tree/extracted/facts/adapt.md new file mode 100644 index 0000000..b79e30c --- /dev/null +++ b/.brv/context-tree/extracted/facts/adapt.md @@ -0,0 +1,24 @@ +--- +title: Adapt +summary: Facts about adapt +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.494Z' +updatedAt: '2026-05-28T13:18:21.494Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for adapt + +## Facts +- **adapt**: `adapt [target]` is a Fix command that adapts designs for different devices and screen sizes. diff --git a/.brv/context-tree/extracted/facts/animate.md b/.brv/context-tree/extracted/facts/animate.md new file mode 100644 index 0000000..7d43749 --- /dev/null +++ b/.brv/context-tree/extracted/facts/animate.md @@ -0,0 +1,24 @@ +--- +title: Animate +summary: Facts about animate +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.484Z' +updatedAt: '2026-05-28T13:18:21.484Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for animate + +## Facts +- **animate**: `animate [target]` is an Enhance command that adds purposeful animations and motion. diff --git a/.brv/context-tree/extracted/facts/audit.md b/.brv/context-tree/extracted/facts/audit.md new file mode 100644 index 0000000..e06e968 --- /dev/null +++ b/.brv/context-tree/extracted/facts/audit.md @@ -0,0 +1,24 @@ +--- +title: Audit +summary: Facts about audit +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.473Z' +updatedAt: '2026-05-28T13:18:21.473Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for audit + +## Facts +- **audit**: `audit [target]` is an Evaluate command that performs technical quality checks (a11y, perf, responsive). diff --git a/.brv/context-tree/extracted/facts/bolder.md b/.brv/context-tree/extracted/facts/bolder.md new file mode 100644 index 0000000..9c06927 --- /dev/null +++ b/.brv/context-tree/extracted/facts/bolder.md @@ -0,0 +1,24 @@ +--- +title: Bolder +summary: Facts about bolder +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.476Z' +updatedAt: '2026-05-28T13:18:21.476Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for bolder + +## Facts +- **bolder**: `bolder [target]` is a Refine command that amplifies safe or bland designs. diff --git a/.brv/context-tree/extracted/facts/border_usage.md b/.brv/context-tree/extracted/facts/border_usage.md new file mode 100644 index 0000000..63c359b --- /dev/null +++ b/.brv/context-tree/extracted/facts/border_usage.md @@ -0,0 +1,24 @@ +--- +title: Border usage +summary: Facts about border usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.242Z' +updatedAt: '2026-05-28T13:02:34.242Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for border usage + +## Facts +- **border usage**: Side‑stripe borders greater than 1 px as colored accents are banned; use full borders, background tints, or icons instead. diff --git a/.brv/context-tree/extracted/facts/browser.md b/.brv/context-tree/extracted/facts/browser.md new file mode 100644 index 0000000..a3c22ff --- /dev/null +++ b/.brv/context-tree/extracted/facts/browser.md @@ -0,0 +1,24 @@ +--- +title: Browser +summary: Facts about Browser +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.509Z' +updatedAt: '2026-05-28T13:18:21.509Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Browser + +## Facts +- **Browser**: Browser verification inspected at 320 × 740 dimensions diff --git a/.brv/context-tree/extracted/facts/build.md b/.brv/context-tree/extracted/facts/build.md new file mode 100644 index 0000000..6e23915 --- /dev/null +++ b/.brv/context-tree/extracted/facts/build.md @@ -0,0 +1,24 @@ +--- +title: Build +summary: Facts about build +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.263Z' +updatedAt: '2026-05-28T13:02:34.263Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for build + +## Facts +- **build**: Build succeeded for @caplets/landing using `pnpm --filter @caplets/landing build`. diff --git a/.brv/context-tree/extracted/facts/card_grids.md b/.brv/context-tree/extracted/facts/card_grids.md new file mode 100644 index 0000000..c29d37c --- /dev/null +++ b/.brv/context-tree/extracted/facts/card_grids.md @@ -0,0 +1,24 @@ +--- +title: Card grids +summary: Facts about card grids +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.456Z' +updatedAt: '2026-05-28T13:18:21.456Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for card grids + +## Facts +- **card grids**: Identical card grids are banned. diff --git a/.brv/context-tree/extracted/facts/cards.md b/.brv/context-tree/extracted/facts/cards.md new file mode 100644 index 0000000..122537d --- /dev/null +++ b/.brv/context-tree/extracted/facts/cards.md @@ -0,0 +1,24 @@ +--- +title: Cards +summary: Facts about cards +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.241Z' +updatedAt: '2026-05-28T13:02:34.241Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for cards + +## Facts +- **cards**: Cards are considered a lazy answer and should only be used when truly the best affordance; nested cards are always wrong. diff --git a/.brv/context-tree/extracted/facts/cards_usage.md b/.brv/context-tree/extracted/facts/cards_usage.md new file mode 100644 index 0000000..34ae5ac --- /dev/null +++ b/.brv/context-tree/extracted/facts/cards_usage.md @@ -0,0 +1,24 @@ +--- +title: Cards usage +summary: Facts about cards usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.419Z' +updatedAt: '2026-05-28T13:18:21.419Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for cards usage + +## Facts +- **cards usage**: Cards are the lazy answer; use them only when they're truly the best affordance. diff --git a/.brv/context-tree/extracted/facts/chroma_adjustment.md b/.brv/context-tree/extracted/facts/chroma_adjustment.md new file mode 100644 index 0000000..3863621 --- /dev/null +++ b/.brv/context-tree/extracted/facts/chroma_adjustment.md @@ -0,0 +1,24 @@ +--- +title: Chroma adjustment +summary: Facts about chroma adjustment +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.373Z' +updatedAt: '2026-05-28T13:18:21.373Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for chroma adjustment + +## Facts +- **chroma adjustment**: Reduce chroma as lightness approaches 0 or 100; high chroma at extremes looks garish. diff --git a/.brv/context-tree/extracted/facts/clarify.md b/.brv/context-tree/extracted/facts/clarify.md new file mode 100644 index 0000000..467b571 --- /dev/null +++ b/.brv/context-tree/extracted/facts/clarify.md @@ -0,0 +1,24 @@ +--- +title: Clarify +summary: Facts about clarify +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.492Z' +updatedAt: '2026-05-28T13:18:21.492Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for clarify + +## Facts +- **clarify**: `clarify [target]` is a Fix command that improves UX copy, labels, and error messages. diff --git a/.brv/context-tree/extracted/facts/color_model.md b/.brv/context-tree/extracted/facts/color_model.md new file mode 100644 index 0000000..4724f95 --- /dev/null +++ b/.brv/context-tree/extracted/facts/color_model.md @@ -0,0 +1,24 @@ +--- +title: Color model +summary: Facts about color model +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.365Z' +updatedAt: '2026-05-28T13:18:21.365Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for color model + +## Facts +- **color model**: Use OKLCH. diff --git a/.brv/context-tree/extracted/facts/color_strategy.md b/.brv/context-tree/extracted/facts/color_strategy.md new file mode 100644 index 0000000..798480c --- /dev/null +++ b/.brv/context-tree/extracted/facts/color_strategy.md @@ -0,0 +1,24 @@ +--- +title: Color strategy +summary: Facts about color strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.226Z' +updatedAt: '2026-05-28T13:02:34.226Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for color strategy + +## Facts +- **color strategy**: Color strategy must be chosen before picking colors, with four options: Restrained, Committed, Full palette, and Drenched. diff --git a/.brv/context-tree/extracted/facts/color_usage.md b/.brv/context-tree/extracted/facts/color_usage.md new file mode 100644 index 0000000..45d2d55 --- /dev/null +++ b/.brv/context-tree/extracted/facts/color_usage.md @@ -0,0 +1,24 @@ +--- +title: Color usage +summary: Facts about color usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.236Z' +updatedAt: '2026-05-28T13:02:34.236Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for color usage + +## Facts +- **color usage**: Never use #000 or #fff; neutral colors must be tinted toward the brand hue with chroma 0.005–0.01. diff --git a/.brv/context-tree/extracted/facts/colorize.md b/.brv/context-tree/extracted/facts/colorize.md new file mode 100644 index 0000000..bd43530 --- /dev/null +++ b/.brv/context-tree/extracted/facts/colorize.md @@ -0,0 +1,24 @@ +--- +title: Colorize +summary: Facts about colorize +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.485Z' +updatedAt: '2026-05-28T13:18:21.485Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for colorize + +## Facts +- **colorize**: `colorize [target]` is an Enhance command that adds strategic color to monochromatic UIs. diff --git a/.brv/context-tree/extracted/facts/command_syntax.md b/.brv/context-tree/extracted/facts/command_syntax.md new file mode 100644 index 0000000..8042f8f --- /dev/null +++ b/.brv/context-tree/extracted/facts/command_syntax.md @@ -0,0 +1,24 @@ +--- +title: Command syntax +summary: Facts about Command syntax +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.503Z' +updatedAt: '2026-05-28T13:18:21.503Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Command syntax + +## Facts +- **Command syntax**: The command syntax is node {{scripts_path}}/pin.mjs diff --git a/.brv/context-tree/extracted/facts/committed_strategy.md b/.brv/context-tree/extracted/facts/committed_strategy.md new file mode 100644 index 0000000..da12b50 --- /dev/null +++ b/.brv/context-tree/extracted/facts/committed_strategy.md @@ -0,0 +1,24 @@ +--- +title: Committed strategy +summary: Facts about Committed strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.386Z' +updatedAt: '2026-05-28T13:18:21.386Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Committed strategy + +## Facts +- **Committed strategy**: Committed: one saturated color carries 30–60% of the surface. diff --git a/.brv/context-tree/extracted/facts/containers.md b/.brv/context-tree/extracted/facts/containers.md new file mode 100644 index 0000000..17deaf2 --- /dev/null +++ b/.brv/context-tree/extracted/facts/containers.md @@ -0,0 +1,24 @@ +--- +title: Containers +summary: Facts about containers +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.429Z' +updatedAt: '2026-05-28T13:18:21.429Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for containers + +## Facts +- **containers**: Don't wrap everything in a container. diff --git a/.brv/context-tree/extracted/facts/craft.md b/.brv/context-tree/extracted/facts/craft.md new file mode 100644 index 0000000..232f1fd --- /dev/null +++ b/.brv/context-tree/extracted/facts/craft.md @@ -0,0 +1,24 @@ +--- +title: Craft +summary: Facts about craft +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.465Z' +updatedAt: '2026-05-28T13:18:21.465Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for craft + +## Facts +- **craft**: `craft [feature]` is a Build command that shapes then builds a feature end-to-end. diff --git a/.brv/context-tree/extracted/facts/critique.md b/.brv/context-tree/extracted/facts/critique.md new file mode 100644 index 0000000..f8f217f --- /dev/null +++ b/.brv/context-tree/extracted/facts/critique.md @@ -0,0 +1,24 @@ +--- +title: Critique +summary: Facts about critique +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.472Z' +updatedAt: '2026-05-28T13:18:21.472Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for critique + +## Facts +- **critique**: `critique [target]` is an Evaluate command that performs a UX design review with heuristic scoring. diff --git a/.brv/context-tree/extracted/facts/css.md b/.brv/context-tree/extracted/facts/css.md new file mode 100644 index 0000000..df50b42 --- /dev/null +++ b/.brv/context-tree/extracted/facts/css.md @@ -0,0 +1,24 @@ +--- +title: CSS +summary: Facts about CSS +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.250Z' +updatedAt: '2026-05-28T13:02:34.250Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for CSS + +## Facts +- **CSS**: The nav pill/card treatment was removed from `.top‑nav`. diff --git a/.brv/context-tree/extracted/facts/css_animation.md b/.brv/context-tree/extracted/facts/css_animation.md new file mode 100644 index 0000000..ba9a12d --- /dev/null +++ b/.brv/context-tree/extracted/facts/css_animation.md @@ -0,0 +1,24 @@ +--- +title: CSS animation +summary: Facts about CSS animation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.432Z' +updatedAt: '2026-05-28T13:18:21.432Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for CSS animation + +## Facts +- **CSS animation**: Don't animate CSS layout properties. diff --git a/.brv/context-tree/extracted/facts/delight.md b/.brv/context-tree/extracted/facts/delight.md new file mode 100644 index 0000000..d26e445 --- /dev/null +++ b/.brv/context-tree/extracted/facts/delight.md @@ -0,0 +1,24 @@ +--- +title: Delight +summary: Facts about delight +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.489Z' +updatedAt: '2026-05-28T13:18:21.489Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for delight + +## Facts +- **delight**: `delight [target]` is an Enhance command that adds personality and memorable touches. diff --git a/.brv/context-tree/extracted/facts/design_md.md b/.brv/context-tree/extracted/facts/design_md.md new file mode 100644 index 0000000..829ab5c --- /dev/null +++ b/.brv/context-tree/extracted/facts/design_md.md @@ -0,0 +1,25 @@ +--- +title: DESIGN.md +summary: Facts about DESIGN.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.219Z' +updatedAt: '2026-05-28T13:18:21.343Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 2 facts for DESIGN.md + +## Facts +- **DESIGN.md**: DESIGN.md is optional, strongly recommended. +- **DESIGN.md**: If DESIGN.md is missing, nudge once per session with "Run `impeccable document` for more on-brand output" then proceed. diff --git a/.brv/context-tree/extracted/facts/design_process.md b/.brv/context-tree/extracted/facts/design_process.md new file mode 100644 index 0000000..de92c9d --- /dev/null +++ b/.brv/context-tree/extracted/facts/design_process.md @@ -0,0 +1,24 @@ +--- +title: Design process +summary: Facts about design process +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.384Z' +updatedAt: '2026-05-28T13:18:21.384Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for design process + +## Facts +- **design process**: Pick a color strategy before picking colors. diff --git a/.brv/context-tree/extracted/facts/design_register.md b/.brv/context-tree/extracted/facts/design_register.md new file mode 100644 index 0000000..ccbd5cb --- /dev/null +++ b/.brv/context-tree/extracted/facts/design_register.md @@ -0,0 +1,24 @@ +--- +title: Design register +summary: Facts about design register +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.224Z' +updatedAt: '2026-05-28T13:02:34.224Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for design register + +## Facts +- **design register**: Design tasks are classified as either brand (marketing, landing, campaign, long-form content, portfolio) or product (app UI, admin, dashboard, tool). diff --git a/.brv/context-tree/extracted/facts/design_task.md b/.brv/context-tree/extracted/facts/design_task.md new file mode 100644 index 0000000..1be5c1a --- /dev/null +++ b/.brv/context-tree/extracted/facts/design_task.md @@ -0,0 +1,24 @@ +--- +title: Design task +summary: Facts about design task +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.346Z' +updatedAt: '2026-05-28T13:18:21.346Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for design task + +## Facts +- **design task**: Every design task is either brand (marketing, landing, campaign, long-form content, portfolio) or product (app UI, admin, dashboard, tool). diff --git a/.brv/context-tree/extracted/facts/desktop_navbar.md b/.brv/context-tree/extracted/facts/desktop_navbar.md new file mode 100644 index 0000000..6d69673 --- /dev/null +++ b/.brv/context-tree/extracted/facts/desktop_navbar.md @@ -0,0 +1,24 @@ +--- +title: Desktop navbar +summary: Facts about desktop navbar +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.254Z' +updatedAt: '2026-05-28T13:02:34.254Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for desktop navbar + +## Facts +- **desktop navbar**: Desktop navigation is centered with the brand on the left and project links on the right. diff --git a/.brv/context-tree/extracted/facts/distill.md b/.brv/context-tree/extracted/facts/distill.md new file mode 100644 index 0000000..4bf4955 --- /dev/null +++ b/.brv/context-tree/extracted/facts/distill.md @@ -0,0 +1,24 @@ +--- +title: Distill +summary: Facts about distill +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.479Z' +updatedAt: '2026-05-28T13:18:21.479Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for distill + +## Facts +- **distill**: `distill [target]` is a Refine command that strips to essence, removing complexity. diff --git a/.brv/context-tree/extracted/facts/document.md b/.brv/context-tree/extracted/facts/document.md new file mode 100644 index 0000000..e7564a9 --- /dev/null +++ b/.brv/context-tree/extracted/facts/document.md @@ -0,0 +1,24 @@ +--- +title: Document +summary: Facts about document +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.469Z' +updatedAt: '2026-05-28T13:18:21.469Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for document + +## Facts +- **document**: `document` is a Build command that generates DESIGN.md from existing project code. diff --git a/.brv/context-tree/extracted/facts/drenched_strategy.md b/.brv/context-tree/extracted/facts/drenched_strategy.md new file mode 100644 index 0000000..282c108 --- /dev/null +++ b/.brv/context-tree/extracted/facts/drenched_strategy.md @@ -0,0 +1,24 @@ +--- +title: Drenched strategy +summary: Facts about Drenched strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.388Z' +updatedAt: '2026-05-28T13:18:21.388Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Drenched strategy + +## Facts +- **Drenched strategy**: Drenched: the surface IS the color. diff --git a/.brv/context-tree/extracted/facts/easing.md b/.brv/context-tree/extracted/facts/easing.md new file mode 100644 index 0000000..c3cf09d --- /dev/null +++ b/.brv/context-tree/extracted/facts/easing.md @@ -0,0 +1,24 @@ +--- +title: Easing +summary: Facts about easing +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.435Z' +updatedAt: '2026-05-28T13:18:21.435Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for easing + +## Facts +- **easing**: Ease out with exponential curves (ease-out-quart / quint / expo). No bounce, no elastic. diff --git a/.brv/context-tree/extracted/facts/extract.md b/.brv/context-tree/extracted/facts/extract.md new file mode 100644 index 0000000..9db26b5 --- /dev/null +++ b/.brv/context-tree/extracted/facts/extract.md @@ -0,0 +1,24 @@ +--- +title: Extract +summary: Facts about extract +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.470Z' +updatedAt: '2026-05-28T13:18:21.470Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for extract + +## Facts +- **extract**: `extract [target]` is a Build command that pulls reusable tokens and components into a design system. diff --git a/.brv/context-tree/extracted/facts/full_palette_strategy.md b/.brv/context-tree/extracted/facts/full_palette_strategy.md new file mode 100644 index 0000000..8acf2fe --- /dev/null +++ b/.brv/context-tree/extracted/facts/full_palette_strategy.md @@ -0,0 +1,24 @@ +--- +title: Full palette strategy +summary: Facts about Full palette strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.387Z' +updatedAt: '2026-05-28T13:18:21.387Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Full palette strategy + +## Facts +- **Full palette strategy**: Full palette: 3–4 named roles, each used deliberately. diff --git a/.brv/context-tree/extracted/facts/glassmorphism.md b/.brv/context-tree/extracted/facts/glassmorphism.md new file mode 100644 index 0000000..4275568 --- /dev/null +++ b/.brv/context-tree/extracted/facts/glassmorphism.md @@ -0,0 +1,24 @@ +--- +title: Glassmorphism +summary: Facts about glassmorphism +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.449Z' +updatedAt: '2026-05-28T13:18:21.449Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for glassmorphism + +## Facts +- **glassmorphism**: Glassmorphism as default is banned. diff --git a/.brv/context-tree/extracted/facts/global_css.md b/.brv/context-tree/extracted/facts/global_css.md new file mode 100644 index 0000000..bc68591 --- /dev/null +++ b/.brv/context-tree/extracted/facts/global_css.md @@ -0,0 +1,27 @@ +--- +title: Global.css +summary: Facts about global.css +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.507Z' +updatedAt: '2026-05-28T13:18:21.507Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 4 facts for global.css + +## Facts +- **global.css**: In apps/landing/src/styles/global.css, mobile native-agent panel padding and spacing were tightened +- **global.css**: In apps/landing/src/styles/global.css, mobile code font size was reduced slightly +- **global.css**: In apps/landing/src/styles/global.css, snippets now wrap on mobile so long commands no longer spill outside the code box +- **global.css**: In apps/landing/src/styles/global.css, code block padding on mobile was reduced while preserving copyable formatting diff --git a/.brv/context-tree/extracted/facts/gradient_text.md b/.brv/context-tree/extracted/facts/gradient_text.md new file mode 100644 index 0000000..7e54fe8 --- /dev/null +++ b/.brv/context-tree/extracted/facts/gradient_text.md @@ -0,0 +1,24 @@ +--- +title: Gradient text +summary: Facts about gradient text +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.244Z' +updatedAt: '2026-05-28T13:18:21.446Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for gradient text + +## Facts +- **gradient text**: Gradient text using background‑clip: text combined with a gradient background is decorative, never meaningful. diff --git a/.brv/context-tree/extracted/facts/harden.md b/.brv/context-tree/extracted/facts/harden.md new file mode 100644 index 0000000..082eecf --- /dev/null +++ b/.brv/context-tree/extracted/facts/harden.md @@ -0,0 +1,24 @@ +--- +title: Harden +summary: Facts about harden +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.481Z' +updatedAt: '2026-05-28T13:18:21.481Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for harden + +## Facts +- **harden**: `harden [target]` is a Refine command that makes a product production‑ready, handling errors, i18n, and edge cases. diff --git a/.brv/context-tree/extracted/facts/header.md b/.brv/context-tree/extracted/facts/header.md new file mode 100644 index 0000000..b896e9c --- /dev/null +++ b/.brv/context-tree/extracted/facts/header.md @@ -0,0 +1,24 @@ +--- +title: Header +summary: Facts about header +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.249Z' +updatedAt: '2026-05-28T13:02:34.249Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for header + +## Facts +- **header**: The floating rounded header card was replaced with a full-width sticky navbar. diff --git a/.brv/context-tree/extracted/facts/hero_metric_template.md b/.brv/context-tree/extracted/facts/hero_metric_template.md new file mode 100644 index 0000000..7707286 --- /dev/null +++ b/.brv/context-tree/extracted/facts/hero_metric_template.md @@ -0,0 +1,24 @@ +--- +title: Hero‑metric template +summary: Facts about hero‑metric template +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.454Z' +updatedAt: '2026-05-28T13:18:21.454Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for hero‑metric template + +## Facts +- **hero‑metric template**: The hero‑metric template is a SaaS cliché. diff --git a/.brv/context-tree/extracted/facts/hex_colors.md b/.brv/context-tree/extracted/facts/hex_colors.md new file mode 100644 index 0000000..385d40b --- /dev/null +++ b/.brv/context-tree/extracted/facts/hex_colors.md @@ -0,0 +1,24 @@ +--- +title: Hex colors +summary: Facts about hex colors +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.381Z' +updatedAt: '2026-05-28T13:18:21.381Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for hex colors + +## Facts +- **hex colors**: Never use #000 or #fff. diff --git a/.brv/context-tree/extracted/facts/horizontal_overflow.md b/.brv/context-tree/extracted/facts/horizontal_overflow.md new file mode 100644 index 0000000..c0dc06e --- /dev/null +++ b/.brv/context-tree/extracted/facts/horizontal_overflow.md @@ -0,0 +1,24 @@ +--- +title: Horizontal overflow +summary: Facts about horizontal overflow +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.518Z' +updatedAt: '2026-05-28T13:18:21.518Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for horizontal overflow + +## Facts +- **horizontal overflow**: No document/body horizontal overflow diff --git a/.brv/context-tree/extracted/facts/icons.md b/.brv/context-tree/extracted/facts/icons.md new file mode 100644 index 0000000..2dcf651 --- /dev/null +++ b/.brv/context-tree/extracted/facts/icons.md @@ -0,0 +1,24 @@ +--- +title: Icons +summary: Facts about icons +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.252Z' +updatedAt: '2026-05-28T13:02:34.252Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for icons + +## Facts +- **icons**: Card‑like borders/backgrounds were removed from header action icons. diff --git a/.brv/context-tree/extracted/facts/impeccable_context_dir.md b/.brv/context-tree/extracted/facts/impeccable_context_dir.md new file mode 100644 index 0000000..49ace20 --- /dev/null +++ b/.brv/context-tree/extracted/facts/impeccable_context_dir.md @@ -0,0 +1,24 @@ +--- +title: IMPECCABLE CONTEXT DIR +summary: Facts about IMPECCABLE_CONTEXT_DIR +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.348Z' +updatedAt: '2026-05-28T13:18:21.348Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for IMPECCABLE_CONTEXT_DIR + +## Facts +- **IMPECCABLE_CONTEXT_DIR**: Override the loader directory with `IMPECCABLE_CONTEXT_DIR=path/to/dir` (absolute or relative to cwd). diff --git a/.brv/context-tree/extracted/facts/impeccable_skill.md b/.brv/context-tree/extracted/facts/impeccable_skill.md new file mode 100644 index 0000000..7415c80 --- /dev/null +++ b/.brv/context-tree/extracted/facts/impeccable_skill.md @@ -0,0 +1,24 @@ +--- +title: Impeccable skill +summary: Facts about impeccable skill +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.213Z' +updatedAt: '2026-05-28T13:02:34.213Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for impeccable skill + +## Facts +- **impeccable skill**: The skill "impeccable" designs and iterates production-grade frontend interfaces with real working code and exceptional craft. diff --git a/.brv/context-tree/extracted/facts/layout.md b/.brv/context-tree/extracted/facts/layout.md new file mode 100644 index 0000000..13cb6d5 --- /dev/null +++ b/.brv/context-tree/extracted/facts/layout.md @@ -0,0 +1,24 @@ +--- +title: Layout +summary: Facts about layout +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.488Z' +updatedAt: '2026-05-28T13:18:21.488Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for layout + +## Facts +- **layout**: `layout [target]` is an Enhance command that fixes spacing, rhythm, and visual hierarchy. diff --git a/.brv/context-tree/extracted/facts/line_length.md b/.brv/context-tree/extracted/facts/line_length.md new file mode 100644 index 0000000..a966ecd --- /dev/null +++ b/.brv/context-tree/extracted/facts/line_length.md @@ -0,0 +1,24 @@ +--- +title: Line length +summary: Facts about line length +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.239Z' +updatedAt: '2026-05-28T13:18:21.393Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for line length + +## Facts +- **line length**: Cap body line length at 65–75ch. diff --git a/.brv/context-tree/extracted/facts/live.md b/.brv/context-tree/extracted/facts/live.md new file mode 100644 index 0000000..8f9d840 --- /dev/null +++ b/.brv/context-tree/extracted/facts/live.md @@ -0,0 +1,24 @@ +--- +title: Live +summary: Facts about live +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.497Z' +updatedAt: '2026-05-28T13:18:21.497Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for live + +## Facts +- **live**: `live` is an Iterate command that provides a visual variant mode, allowing selection of elements in the browser to generate alternatives. diff --git a/.brv/context-tree/extracted/facts/loader.md b/.brv/context-tree/extracted/facts/loader.md new file mode 100644 index 0000000..ba43c90 --- /dev/null +++ b/.brv/context-tree/extracted/facts/loader.md @@ -0,0 +1,24 @@ +--- +title: Loader +summary: Facts about loader +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.347Z' +updatedAt: '2026-05-28T13:18:21.347Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for loader + +## Facts +- **loader**: The loader looks at the project root by default and falls back to `.agents/context/` and `docs/` if the root is clean. diff --git a/.brv/context-tree/extracted/facts/loader_output_handling.md b/.brv/context-tree/extracted/facts/loader_output_handling.md new file mode 100644 index 0000000..b4eac98 --- /dev/null +++ b/.brv/context-tree/extracted/facts/loader_output_handling.md @@ -0,0 +1,24 @@ +--- +title: Loader output handling +summary: Facts about loader output handling +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.351Z' +updatedAt: '2026-05-28T13:18:21.351Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for loader output handling + +## Facts +- **loader output handling**: Never pipe the loader's JSON output through `head`, `tail`, `grep`, or `jq`. diff --git a/.brv/context-tree/extracted/facts/loader_script.md b/.brv/context-tree/extracted/facts/loader_script.md new file mode 100644 index 0000000..c5868e2 --- /dev/null +++ b/.brv/context-tree/extracted/facts/loader_script.md @@ -0,0 +1,24 @@ +--- +title: Loader script +summary: Facts about loader script +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.221Z' +updatedAt: '2026-05-28T13:02:34.221Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for loader script + +## Facts +- **loader script**: The loader script looks for context files in the project root, then falls back to .agents/context/ and docs/. diff --git a/.brv/context-tree/extracted/facts/mobile_branding.md b/.brv/context-tree/extracted/facts/mobile_branding.md new file mode 100644 index 0000000..9878940 --- /dev/null +++ b/.brv/context-tree/extracted/facts/mobile_branding.md @@ -0,0 +1,24 @@ +--- +title: Mobile branding +summary: Facts about mobile branding +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.260Z' +updatedAt: '2026-05-28T13:02:34.260Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for mobile branding + +## Facts +- **mobile branding**: Brand text is hidden on mobile to preserve horizontal space. diff --git a/.brv/context-tree/extracted/facts/mobile_header.md b/.brv/context-tree/extracted/facts/mobile_header.md new file mode 100644 index 0000000..80b605d --- /dev/null +++ b/.brv/context-tree/extracted/facts/mobile_header.md @@ -0,0 +1,24 @@ +--- +title: Mobile header +summary: Facts about mobile header +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.258Z' +updatedAt: '2026-05-28T13:02:34.258Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for mobile header + +## Facts +- **mobile header**: Mobile header height reduced from a multi‑row card to a 48 px bar. diff --git a/.brv/context-tree/extracted/facts/mobile_navbar.md b/.brv/context-tree/extracted/facts/mobile_navbar.md new file mode 100644 index 0000000..88feb44 --- /dev/null +++ b/.brv/context-tree/extracted/facts/mobile_navbar.md @@ -0,0 +1,24 @@ +--- +title: Mobile navbar +summary: Facts about mobile navbar +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.255Z' +updatedAt: '2026-05-28T13:02:34.256Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for mobile navbar + +## Facts +- **mobile navbar**: Tablet and mobile layout changed from stacked rows to a single compact horizontal navbar. diff --git a/.brv/context-tree/extracted/facts/modals.md b/.brv/context-tree/extracted/facts/modals.md new file mode 100644 index 0000000..169463f --- /dev/null +++ b/.brv/context-tree/extracted/facts/modals.md @@ -0,0 +1,24 @@ +--- +title: Modals +summary: Facts about modals +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.457Z' +updatedAt: '2026-05-28T13:18:21.457Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for modals + +## Facts +- **modals**: Modal as first thought is usually laziness; exhaust inline / progressive alternatives first. diff --git a/.brv/context-tree/extracted/facts/native_agent_tabs.md b/.brv/context-tree/extracted/facts/native_agent_tabs.md new file mode 100644 index 0000000..b0f803a --- /dev/null +++ b/.brv/context-tree/extracted/facts/native_agent_tabs.md @@ -0,0 +1,24 @@ +--- +title: Native agent tabs +summary: Facts about Native agent tabs +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.510Z' +updatedAt: '2026-05-28T13:18:21.510Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Native agent tabs + +## Facts +- **Native agent tabs**: All native agent tabs have scrollWidth === clientWidth for their code snippets diff --git a/.brv/context-tree/extracted/facts/native_agents_install_card.md b/.brv/context-tree/extracted/facts/native_agents_install_card.md new file mode 100644 index 0000000..1965e38 --- /dev/null +++ b/.brv/context-tree/extracted/facts/native_agents_install_card.md @@ -0,0 +1,24 @@ +--- +title: Native agents install card +summary: Facts about Native agents install card +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.506Z' +updatedAt: '2026-05-28T13:18:21.506Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Native agents install card + +## Facts +- **Native agents install card**: The native agents install card overflow was fixed after inspecting it in the browser at mobile dimensions diff --git a/.brv/context-tree/extracted/facts/navbar.md b/.brv/context-tree/extracted/facts/navbar.md new file mode 100644 index 0000000..9347453 --- /dev/null +++ b/.brv/context-tree/extracted/facts/navbar.md @@ -0,0 +1,25 @@ +--- +title: Navbar +summary: Facts about navbar +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.247Z' +updatedAt: '2026-05-28T13:02:34.247Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 2 facts for navbar + +## Facts +- **navbar**: The top navigation on both mobile and desktop should be a full-width navbar, not cards. +- **navbar**: The mobile navbar takes up too much vertical space. diff --git a/.brv/context-tree/extracted/facts/nested_cards.md b/.brv/context-tree/extracted/facts/nested_cards.md new file mode 100644 index 0000000..a4ed6dd --- /dev/null +++ b/.brv/context-tree/extracted/facts/nested_cards.md @@ -0,0 +1,24 @@ +--- +title: Nested cards +summary: Facts about nested cards +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.422Z' +updatedAt: '2026-05-28T13:18:21.422Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for nested cards + +## Facts +- **nested cards**: Nested cards are always wrong. diff --git a/.brv/context-tree/extracted/facts/neutral_tinting.md b/.brv/context-tree/extracted/facts/neutral_tinting.md new file mode 100644 index 0000000..0dc9052 --- /dev/null +++ b/.brv/context-tree/extracted/facts/neutral_tinting.md @@ -0,0 +1,24 @@ +--- +title: Neutral tinting +summary: Facts about neutral tinting +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.382Z' +updatedAt: '2026-05-28T13:18:21.382Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for neutral tinting + +## Facts +- **neutral tinting**: Tint every neutral toward the brand hue (chroma 0.005–0.01 is enough). diff --git a/.brv/context-tree/extracted/facts/onboard.md b/.brv/context-tree/extracted/facts/onboard.md new file mode 100644 index 0000000..df48b1b --- /dev/null +++ b/.brv/context-tree/extracted/facts/onboard.md @@ -0,0 +1,24 @@ +--- +title: Onboard +summary: Facts about onboard +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.482Z' +updatedAt: '2026-05-28T13:18:21.482Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for onboard + +## Facts +- **onboard**: `onboard [target]` is a Refine command that designs first‑run flows, empty states, and activation experiences. diff --git a/.brv/context-tree/extracted/facts/optimize.md b/.brv/context-tree/extracted/facts/optimize.md new file mode 100644 index 0000000..023702a --- /dev/null +++ b/.brv/context-tree/extracted/facts/optimize.md @@ -0,0 +1,24 @@ +--- +title: Optimize +summary: Facts about optimize +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.495Z' +updatedAt: '2026-05-28T13:18:21.495Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for optimize + +## Facts +- **optimize**: `optimize [target]` is a Fix command that diagnoses and fixes UI performance issues. diff --git a/.brv/context-tree/extracted/facts/overdrive.md b/.brv/context-tree/extracted/facts/overdrive.md new file mode 100644 index 0000000..e78d222 --- /dev/null +++ b/.brv/context-tree/extracted/facts/overdrive.md @@ -0,0 +1,24 @@ +--- +title: Overdrive +summary: Facts about overdrive +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.491Z' +updatedAt: '2026-05-28T13:18:21.491Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for overdrive + +## Facts +- **overdrive**: `overdrive [target]` is an Enhance command that pushes past conventional limits. diff --git a/.brv/context-tree/extracted/facts/page_layout.md b/.brv/context-tree/extracted/facts/page_layout.md new file mode 100644 index 0000000..59c356f --- /dev/null +++ b/.brv/context-tree/extracted/facts/page_layout.md @@ -0,0 +1,24 @@ +--- +title: Page layout +summary: Facts about Page layout +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.512Z' +updatedAt: '2026-05-28T13:18:21.512Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Page layout + +## Facts +- **Page layout**: Page width remains stable at 320px with no document/body horizontal overflow diff --git a/.brv/context-tree/extracted/facts/page_width.md b/.brv/context-tree/extracted/facts/page_width.md new file mode 100644 index 0000000..23a366e --- /dev/null +++ b/.brv/context-tree/extracted/facts/page_width.md @@ -0,0 +1,24 @@ +--- +title: Page width +summary: Facts about page width +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.517Z' +updatedAt: '2026-05-28T13:18:21.517Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for page width + +## Facts +- **page width**: Page width remains stable at 320px diff --git a/.brv/context-tree/extracted/facts/pin.md b/.brv/context-tree/extracted/facts/pin.md new file mode 100644 index 0000000..f01dbf9 --- /dev/null +++ b/.brv/context-tree/extracted/facts/pin.md @@ -0,0 +1,24 @@ +--- +title: Pin +summary: Facts about Pin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.499Z' +updatedAt: '2026-05-28T13:18:21.499Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Pin + +## Facts +- **Pin**: Pin creates a standalone shortcut so {{command_prefix}} invokes {{command_prefix}}impeccable directly diff --git a/.brv/context-tree/extracted/facts/pin_unpin.md b/.brv/context-tree/extracted/facts/pin_unpin.md new file mode 100644 index 0000000..fea8a66 --- /dev/null +++ b/.brv/context-tree/extracted/facts/pin_unpin.md @@ -0,0 +1,24 @@ +--- +title: Pin/unpin +summary: Facts about pin/unpin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.498Z' +updatedAt: '2026-05-28T13:18:21.498Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for pin/unpin + +## Facts +- **pin/unpin**: `pin ` and `unpin ` are management commands for pinning and unpinning commands. diff --git a/.brv/context-tree/extracted/facts/polish.md b/.brv/context-tree/extracted/facts/polish.md new file mode 100644 index 0000000..eac6f88 --- /dev/null +++ b/.brv/context-tree/extracted/facts/polish.md @@ -0,0 +1,24 @@ +--- +title: Polish +summary: Facts about polish +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.475Z' +updatedAt: '2026-05-28T13:18:21.475Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for polish + +## Facts +- **polish**: `polish [target]` is a Refine command that provides a final quality pass before shipping. diff --git a/.brv/context-tree/extracted/facts/product_md.md b/.brv/context-tree/extracted/facts/product_md.md new file mode 100644 index 0000000..1f03331 --- /dev/null +++ b/.brv/context-tree/extracted/facts/product_md.md @@ -0,0 +1,25 @@ +--- +title: PRODUCT.md +summary: Facts about PRODUCT.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.218Z' +updatedAt: '2026-05-28T13:18:21.335Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 2 facts for PRODUCT.md + +## Facts +- **PRODUCT.md**: PRODUCT.md is required. +- **PRODUCT.md**: If PRODUCT.md is missing, empty, or placeholder (<200 chars), run `impeccable teach` and then resume the user's original task. diff --git a/.brv/context-tree/extracted/facts/punctuation.md b/.brv/context-tree/extracted/facts/punctuation.md new file mode 100644 index 0000000..fd2701d --- /dev/null +++ b/.brv/context-tree/extracted/facts/punctuation.md @@ -0,0 +1,24 @@ +--- +title: Punctuation +summary: Facts about punctuation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.246Z' +updatedAt: '2026-05-28T13:18:21.462Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for punctuation + +## Facts +- **punctuation**: No em dashes. Use commas, colons, semicolons, periods, or parentheses. Also not --. diff --git a/.brv/context-tree/extracted/facts/quieter.md b/.brv/context-tree/extracted/facts/quieter.md new file mode 100644 index 0000000..82901d2 --- /dev/null +++ b/.brv/context-tree/extracted/facts/quieter.md @@ -0,0 +1,24 @@ +--- +title: Quieter +summary: Facts about quieter +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.478Z' +updatedAt: '2026-05-28T13:18:21.478Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for quieter + +## Facts +- **quieter**: `quieter [target]` is a Refine command that tones down aggressive or overstimulating designs. diff --git a/.brv/context-tree/extracted/facts/restrained_strategy.md b/.brv/context-tree/extracted/facts/restrained_strategy.md new file mode 100644 index 0000000..d1f2bd0 --- /dev/null +++ b/.brv/context-tree/extracted/facts/restrained_strategy.md @@ -0,0 +1,24 @@ +--- +title: Restrained strategy +summary: Facts about Restrained strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.385Z' +updatedAt: '2026-05-28T13:18:21.385Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Restrained strategy + +## Facts +- **Restrained strategy**: Restrained: tinted neutrals + one accent ≤10%. diff --git a/.brv/context-tree/extracted/facts/script.md b/.brv/context-tree/extracted/facts/script.md new file mode 100644 index 0000000..2a40159 --- /dev/null +++ b/.brv/context-tree/extracted/facts/script.md @@ -0,0 +1,24 @@ +--- +title: Script +summary: Facts about Script +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.502Z' +updatedAt: '2026-05-28T13:18:21.502Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Script + +## Facts +- **Script**: The script writes to every harness directory present in the project diff --git a/.brv/context-tree/extracted/facts/setup.md b/.brv/context-tree/extracted/facts/setup.md new file mode 100644 index 0000000..993916b --- /dev/null +++ b/.brv/context-tree/extracted/facts/setup.md @@ -0,0 +1,24 @@ +--- +title: Setup +summary: Facts about setup +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.216Z' +updatedAt: '2026-05-28T13:02:34.216Z' +--- +## Reason +Curated extracted facts from provided context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T13:02:34.210Z + +## Narrative +### Highlights +Extracted 1 facts for setup + +## Facts +- **setup**: Before any design work, the user must load context (PRODUCT.md / DESIGN.md) via the loader script. diff --git a/.brv/context-tree/extracted/facts/shape.md b/.brv/context-tree/extracted/facts/shape.md new file mode 100644 index 0000000..cf9e980 --- /dev/null +++ b/.brv/context-tree/extracted/facts/shape.md @@ -0,0 +1,24 @@ +--- +title: Shape +summary: Facts about shape +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.466Z' +updatedAt: '2026-05-28T13:18:21.466Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for shape + +## Facts +- **shape**: `shape [feature]` is a Build command that plans UX/UI before writing code. diff --git a/.brv/context-tree/extracted/facts/side_stripe_borders.md b/.brv/context-tree/extracted/facts/side_stripe_borders.md new file mode 100644 index 0000000..abd08ef --- /dev/null +++ b/.brv/context-tree/extracted/facts/side_stripe_borders.md @@ -0,0 +1,24 @@ +--- +title: Side‑stripe borders +summary: Facts about side‑stripe borders +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.442Z' +updatedAt: '2026-05-28T13:18:21.442Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for side‑stripe borders + +## Facts +- **side‑stripe borders**: Side‑stripe borders greater than 1px as a colored accent are never intentional. diff --git a/.brv/context-tree/extracted/facts/spacing.md b/.brv/context-tree/extracted/facts/spacing.md new file mode 100644 index 0000000..59e0831 --- /dev/null +++ b/.brv/context-tree/extracted/facts/spacing.md @@ -0,0 +1,24 @@ +--- +title: Spacing +summary: Facts about spacing +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.416Z' +updatedAt: '2026-05-28T13:18:21.416Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for spacing + +## Facts +- **spacing**: Vary spacing for rhythm. diff --git a/.brv/context-tree/extracted/facts/teach.md b/.brv/context-tree/extracted/facts/teach.md new file mode 100644 index 0000000..cc4c111 --- /dev/null +++ b/.brv/context-tree/extracted/facts/teach.md @@ -0,0 +1,24 @@ +--- +title: Teach +summary: Facts about teach +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.467Z' +updatedAt: '2026-05-28T13:18:21.467Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for teach + +## Facts +- **teach**: `teach` is a Build command that sets up PRODUCT.md and DESIGN.md context. diff --git a/.brv/context-tree/extracted/facts/theme_selection.md b/.brv/context-tree/extracted/facts/theme_selection.md new file mode 100644 index 0000000..69f8cd3 --- /dev/null +++ b/.brv/context-tree/extracted/facts/theme_selection.md @@ -0,0 +1,24 @@ +--- +title: Theme selection +summary: Facts about theme selection +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.238Z' +updatedAt: '2026-05-28T13:18:21.391Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for theme selection + +## Facts +- **theme selection**: Dark vs. light is never a default. diff --git a/.brv/context-tree/extracted/facts/typecheck.md b/.brv/context-tree/extracted/facts/typecheck.md new file mode 100644 index 0000000..56a2474 --- /dev/null +++ b/.brv/context-tree/extracted/facts/typecheck.md @@ -0,0 +1,24 @@ +--- +title: Typecheck +summary: Facts about typecheck +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:02:34.262Z' +updatedAt: '2026-05-28T13:18:21.520Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for typecheck + +## Facts +- **typecheck**: Build verification passed for pnpm --filter @caplets/landing typecheck diff --git a/.brv/context-tree/extracted/facts/typeset.md b/.brv/context-tree/extracted/facts/typeset.md new file mode 100644 index 0000000..2dddb10 --- /dev/null +++ b/.brv/context-tree/extracted/facts/typeset.md @@ -0,0 +1,24 @@ +--- +title: Typeset +summary: Facts about typeset +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.486Z' +updatedAt: '2026-05-28T13:18:21.486Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for typeset + +## Facts +- **typeset**: `typeset [target]` is an Enhance command that improves typography hierarchy and fonts. diff --git a/.brv/context-tree/extracted/facts/typographic_hierarchy.md b/.brv/context-tree/extracted/facts/typographic_hierarchy.md new file mode 100644 index 0000000..dd24b4d --- /dev/null +++ b/.brv/context-tree/extracted/facts/typographic_hierarchy.md @@ -0,0 +1,24 @@ +--- +title: Typographic hierarchy +summary: Facts about typographic hierarchy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.413Z' +updatedAt: '2026-05-28T13:18:21.413Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for typographic hierarchy + +## Facts +- **typographic hierarchy**: Hierarchy through scale + weight contrast (≥1.25 ratio between steps). diff --git a/.brv/context-tree/extracted/facts/unpin.md b/.brv/context-tree/extracted/facts/unpin.md new file mode 100644 index 0000000..98deb45 --- /dev/null +++ b/.brv/context-tree/extracted/facts/unpin.md @@ -0,0 +1,24 @@ +--- +title: Unpin +summary: Facts about Unpin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.501Z' +updatedAt: '2026-05-28T13:18:21.501Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Unpin + +## Facts +- **Unpin**: Unpin removes the shortcut created by Pin diff --git a/.brv/context-tree/extracted/facts/valid_command.md b/.brv/context-tree/extracted/facts/valid_command.md new file mode 100644 index 0000000..4cf6abd --- /dev/null +++ b/.brv/context-tree/extracted/facts/valid_command.md @@ -0,0 +1,24 @@ +--- +title: Valid command +summary: Facts about Valid command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.505Z' +updatedAt: '2026-05-28T13:18:21.505Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for Valid command + +## Facts +- **Valid command**: Valid is any command from the table above diff --git a/.brv/context-tree/extracted/facts/writing_guidelines.md b/.brv/context-tree/extracted/facts/writing_guidelines.md new file mode 100644 index 0000000..64e73a2 --- /dev/null +++ b/.brv/context-tree/extracted/facts/writing_guidelines.md @@ -0,0 +1,24 @@ +--- +title: Writing guidelines +summary: Facts about writing guidelines +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:18:21.460Z' +updatedAt: '2026-05-28T13:18:21.460Z' +--- +## Reason +Curated extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:18:21.328Z + +## Narrative +### Highlights +Contains 1 facts for writing guidelines + +## Facts +- **writing guidelines**: Every word earns its place; no restated headings, no intros that repeat the title. diff --git a/.brv/context-tree/facts/extracted_facts/adapt_command.md b/.brv/context-tree/facts/extracted_facts/adapt_command.md new file mode 100644 index 0000000..7811abb --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/adapt_command.md @@ -0,0 +1,24 @@ +--- +title: adapt command +summary: Facts about adapt command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.617Z' +updatedAt: '2026-05-28T14:20:02.617Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for adapt command + +## Facts +- **adapt command**: `adapt [target]` adapts designs for different devices and screen sizes. diff --git a/.brv/context-tree/facts/extracted_facts/animate_command.md b/.brv/context-tree/facts/extracted_facts/animate_command.md new file mode 100644 index 0000000..a794901 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/animate_command.md @@ -0,0 +1,24 @@ +--- +title: animate command +summary: Facts about animate command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.607Z' +updatedAt: '2026-05-28T14:20:02.607Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for animate command + +## Facts +- **animate command**: `animate [target]` adds purposeful animations and motion. diff --git a/.brv/context-tree/facts/extracted_facts/animation_constraints.md b/.brv/context-tree/facts/extracted_facts/animation_constraints.md new file mode 100644 index 0000000..2c992b3 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/animation_constraints.md @@ -0,0 +1,24 @@ +--- +title: Animation constraints +summary: Facts about Animation constraints +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.555Z' +updatedAt: '2026-05-28T14:20:02.555Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Animation constraints + +## Facts +- **Animation constraints**: Do not animate CSS layout properties. diff --git a/.brv/context-tree/facts/extracted_facts/audit_command.md b/.brv/context-tree/facts/extracted_facts/audit_command.md new file mode 100644 index 0000000..2825ef4 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/audit_command.md @@ -0,0 +1,24 @@ +--- +title: audit command +summary: Facts about audit command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.597Z' +updatedAt: '2026-05-28T14:20:02.597Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for audit command + +## Facts +- **audit command**: `audit [target]` conducts technical quality checks (a11y, perf, responsive). diff --git a/.brv/context-tree/facts/extracted_facts/bolder_command.md b/.brv/context-tree/facts/extracted_facts/bolder_command.md new file mode 100644 index 0000000..45d13ad --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/bolder_command.md @@ -0,0 +1,24 @@ +--- +title: bolder command +summary: Facts about bolder command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.600Z' +updatedAt: '2026-05-28T14:20:02.600Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for bolder command + +## Facts +- **bolder command**: `bolder [target]` amplifies safe or bland designs. diff --git a/.brv/context-tree/facts/extracted_facts/border_usage.md b/.brv/context-tree/facts/extracted_facts/border_usage.md new file mode 100644 index 0000000..e965b81 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/border_usage.md @@ -0,0 +1,24 @@ +--- +title: Border usage +summary: Facts about Border usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.557Z' +updatedAt: '2026-05-28T14:20:02.557Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Border usage + +## Facts +- **Border usage**: Side-stripe borders greater than 1px as colored accents are prohibited. diff --git a/.brv/context-tree/facts/extracted_facts/browser.md b/.brv/context-tree/facts/extracted_facts/browser.md new file mode 100644 index 0000000..98bfe93 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/browser.md @@ -0,0 +1,24 @@ +--- +title: browser +summary: Facts about browser +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.634Z' +updatedAt: '2026-05-28T14:20:02.634Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for browser + +## Facts +- **browser**: Browser at 390 × 844 with root font size forced to 200%: no horizontal overflow. [environment] diff --git a/.brv/context-tree/facts/extracted_facts/browser_rendering.md b/.brv/context-tree/facts/extracted_facts/browser_rendering.md new file mode 100644 index 0000000..208c8bb --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/browser_rendering.md @@ -0,0 +1,24 @@ +--- +title: Browser rendering +summary: Facts about Browser rendering +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.629Z' +updatedAt: '2026-05-28T14:20:02.629Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for Browser rendering + +## Facts +- **Browser rendering**: Browser at `390 × 844` with root font size forced to `200%` shows no horizontal overflow. diff --git a/.brv/context-tree/facts/extracted_facts/build.md b/.brv/context-tree/facts/extracted_facts/build.md new file mode 100644 index 0000000..ff999e9 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/build.md @@ -0,0 +1,24 @@ +--- +title: Build +summary: Facts about Build +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.633Z' +updatedAt: '2026-05-28T14:20:02.633Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for Build + +## Facts +- **Build**: `pnpm --filter @caplets/landing build` passed. diff --git a/.brv/context-tree/facts/extracted_facts/card_grid_design.md b/.brv/context-tree/facts/extracted_facts/card_grid_design.md new file mode 100644 index 0000000..b06317a --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/card_grid_design.md @@ -0,0 +1,24 @@ +--- +title: Card grid design +summary: Facts about Card grid design +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.563Z' +updatedAt: '2026-05-28T14:20:02.563Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Card grid design + +## Facts +- **Card grid design**: Identical card grids with repeated icon, heading, and text are prohibited. diff --git a/.brv/context-tree/facts/extracted_facts/card_usage.md b/.brv/context-tree/facts/extracted_facts/card_usage.md new file mode 100644 index 0000000..a6ae224 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/card_usage.md @@ -0,0 +1,24 @@ +--- +title: Card usage +summary: Facts about Card usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.553Z' +updatedAt: '2026-05-28T14:20:02.553Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Card usage + +## Facts +- **Card usage**: Nested cards are always wrong. diff --git a/.brv/context-tree/facts/extracted_facts/category_reflex_check.md b/.brv/context-tree/facts/extracted_facts/category_reflex_check.md new file mode 100644 index 0000000..f0667ba --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/category_reflex_check.md @@ -0,0 +1,24 @@ +--- +title: category-reflex check +summary: Facts about category-reflex check +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.579Z' +updatedAt: '2026-05-28T14:20:02.579Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for category-reflex check + +## Facts +- **category-reflex check**: Category-reflex check runs at two altitudes; the second one catches what the first one misses. diff --git a/.brv/context-tree/facts/extracted_facts/clarify_command.md b/.brv/context-tree/facts/extracted_facts/clarify_command.md new file mode 100644 index 0000000..224e6d4 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/clarify_command.md @@ -0,0 +1,24 @@ +--- +title: clarify command +summary: Facts about clarify command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.616Z' +updatedAt: '2026-05-28T14:20:02.616Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for clarify command + +## Facts +- **clarify command**: `clarify [target]` improves UX copy, labels, and error messages. diff --git a/.brv/context-tree/facts/extracted_facts/color_model.md b/.brv/context-tree/facts/extracted_facts/color_model.md new file mode 100644 index 0000000..1a9b6e6 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/color_model.md @@ -0,0 +1,24 @@ +--- +title: Color model +summary: Facts about Color model +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.515Z' +updatedAt: '2026-05-28T14:20:02.515Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Color model + +## Facts +- **Color model**: Use OKLCH for color. diff --git a/.brv/context-tree/facts/extracted_facts/colorize_command.md b/.brv/context-tree/facts/extracted_facts/colorize_command.md new file mode 100644 index 0000000..01648ef --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/colorize_command.md @@ -0,0 +1,24 @@ +--- +title: colorize command +summary: Facts about colorize command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.608Z' +updatedAt: '2026-05-28T14:20:02.608Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for colorize command + +## Facts +- **colorize command**: `colorize [target]` adds strategic color to monochromatic UIs. diff --git a/.brv/context-tree/facts/extracted_facts/committed_strategy.md b/.brv/context-tree/facts/extracted_facts/committed_strategy.md new file mode 100644 index 0000000..b538226 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/committed_strategy.md @@ -0,0 +1,24 @@ +--- +title: Committed strategy +summary: Facts about Committed strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.533Z' +updatedAt: '2026-05-28T14:20:02.533Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Committed strategy + +## Facts +- **Committed strategy**: Committed color strategy uses one saturated color for 30–60% of surface. diff --git a/.brv/context-tree/facts/extracted_facts/copywriting.md b/.brv/context-tree/facts/extracted_facts/copywriting.md new file mode 100644 index 0000000..db92a40 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/copywriting.md @@ -0,0 +1,24 @@ +--- +title: Copywriting +summary: Facts about Copywriting +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.573Z' +updatedAt: '2026-05-28T14:20:02.573Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Copywriting + +## Facts +- **Copywriting**: Every word must earn its place; no restated headings or intros that repeat the title. diff --git a/.brv/context-tree/facts/extracted_facts/craft_command.md b/.brv/context-tree/facts/extracted_facts/craft_command.md new file mode 100644 index 0000000..e6fccf3 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/craft_command.md @@ -0,0 +1,24 @@ +--- +title: craft command +summary: Facts about craft command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.580Z' +updatedAt: '2026-05-28T14:20:02.580Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for craft command + +## Facts +- **craft command**: `craft [feature]` shapes and then builds a feature end-to-end. diff --git a/.brv/context-tree/facts/extracted_facts/critique_command.md b/.brv/context-tree/facts/extracted_facts/critique_command.md new file mode 100644 index 0000000..ca764d2 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/critique_command.md @@ -0,0 +1,24 @@ +--- +title: critique command +summary: Facts about critique command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.594Z' +updatedAt: '2026-05-28T14:20:02.594Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for critique command + +## Facts +- **critique command**: `critique [target]` performs a UX design review with heuristic scoring. diff --git a/.brv/context-tree/facts/extracted_facts/delight_command.md b/.brv/context-tree/facts/extracted_facts/delight_command.md new file mode 100644 index 0000000..bcb7de2 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/delight_command.md @@ -0,0 +1,24 @@ +--- +title: delight command +summary: Facts about delight command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.612Z' +updatedAt: '2026-05-28T14:20:02.612Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for delight command + +## Facts +- **delight command**: `delight [target]` adds personality and memorable touches. diff --git a/.brv/context-tree/facts/extracted_facts/design_md.md b/.brv/context-tree/facts/extracted_facts/design_md.md new file mode 100644 index 0000000..0345e0a --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/design_md.md @@ -0,0 +1,25 @@ +--- +title: DESIGN.md +summary: Facts about DESIGN.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.507Z' +updatedAt: '2026-05-28T14:20:02.507Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for DESIGN.md + +## Facts +- **DESIGN.md**: DESIGN.md is optional, strongly recommended. +- **DESIGN.md**: If DESIGN.md is missing, nudge the user once per session to run the document command and then proceed. diff --git a/.brv/context-tree/facts/extracted_facts/design_task.md b/.brv/context-tree/facts/extracted_facts/design_task.md new file mode 100644 index 0000000..c7a54a3 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/design_task.md @@ -0,0 +1,24 @@ +--- +title: design task +summary: Facts about design task +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.509Z' +updatedAt: '2026-05-28T14:20:02.509Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for design task + +## Facts +- **design task**: Every design task is either brand (marketing, landing, campaign, long-form content, portfolio) or product (app UI, admin, dashboard, tool). diff --git a/.brv/context-tree/facts/extracted_facts/distill_command.md b/.brv/context-tree/facts/extracted_facts/distill_command.md new file mode 100644 index 0000000..e3da671 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/distill_command.md @@ -0,0 +1,24 @@ +--- +title: distill command +summary: Facts about distill command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.603Z' +updatedAt: '2026-05-28T14:20:02.603Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for distill command + +## Facts +- **distill command**: `distill [target]` strips to essence, removing complexity. diff --git a/.brv/context-tree/facts/extracted_facts/document_command.md b/.brv/context-tree/facts/extracted_facts/document_command.md new file mode 100644 index 0000000..430ad86 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/document_command.md @@ -0,0 +1,24 @@ +--- +title: document command +summary: Facts about document command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.589Z' +updatedAt: '2026-05-28T14:20:02.589Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for document command + +## Facts +- **document command**: `document` generates DESIGN.md from existing project code. diff --git a/.brv/context-tree/facts/extracted_facts/drenched_strategy.md b/.brv/context-tree/facts/extracted_facts/drenched_strategy.md new file mode 100644 index 0000000..5cee36b --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/drenched_strategy.md @@ -0,0 +1,24 @@ +--- +title: Drenched strategy +summary: Facts about Drenched strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.540Z' +updatedAt: '2026-05-28T14:20:02.540Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Drenched strategy + +## Facts +- **Drenched strategy**: Drenched strategy makes the surface the color. diff --git a/.brv/context-tree/facts/extracted_facts/easing_functions.md b/.brv/context-tree/facts/extracted_facts/easing_functions.md new file mode 100644 index 0000000..ea3ce31 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/easing_functions.md @@ -0,0 +1,24 @@ +--- +title: Easing functions +summary: Facts about Easing functions +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.556Z' +updatedAt: '2026-05-28T14:20:02.556Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Easing functions + +## Facts +- **Easing functions**: Use ease-out exponential curves (ease-out-quart, quint, expo) for motion. diff --git a/.brv/context-tree/facts/extracted_facts/extract_command.md b/.brv/context-tree/facts/extracted_facts/extract_command.md new file mode 100644 index 0000000..e81a7f1 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/extract_command.md @@ -0,0 +1,24 @@ +--- +title: extract command +summary: Facts about extract command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.591Z' +updatedAt: '2026-05-28T14:20:02.591Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for extract command + +## Facts +- **extract command**: `extract [target]` pulls reusable tokens and components into design system. diff --git a/.brv/context-tree/facts/extracted_facts/full_palette_strategy.md b/.brv/context-tree/facts/extracted_facts/full_palette_strategy.md new file mode 100644 index 0000000..53a7627 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/full_palette_strategy.md @@ -0,0 +1,24 @@ +--- +title: Full palette strategy +summary: Facts about Full palette strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.538Z' +updatedAt: '2026-05-28T14:20:02.538Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Full palette strategy + +## Facts +- **Full palette strategy**: Full palette strategy uses 3–4 named roles deliberately. diff --git a/.brv/context-tree/facts/extracted_facts/glassmorphism.md b/.brv/context-tree/facts/extracted_facts/glassmorphism.md new file mode 100644 index 0000000..c580c78 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/glassmorphism.md @@ -0,0 +1,24 @@ +--- +title: Glassmorphism +summary: Facts about Glassmorphism +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.560Z' +updatedAt: '2026-05-28T14:20:02.560Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Glassmorphism + +## Facts +- **Glassmorphism**: Glassmorphism as default is prohibited. diff --git a/.brv/context-tree/facts/extracted_facts/harden_command.md b/.brv/context-tree/facts/extracted_facts/harden_command.md new file mode 100644 index 0000000..7e55969 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/harden_command.md @@ -0,0 +1,24 @@ +--- +title: harden command +summary: Facts about harden command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.604Z' +updatedAt: '2026-05-28T14:20:02.604Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for harden command + +## Facts +- **harden command**: `harden [target]` makes designs production-ready, handling errors, i18n, and edge cases. diff --git a/.brv/context-tree/facts/extracted_facts/hero_metric_template.md b/.brv/context-tree/facts/extracted_facts/hero_metric_template.md new file mode 100644 index 0000000..7b8a347 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/hero_metric_template.md @@ -0,0 +1,24 @@ +--- +title: Hero metric template +summary: Facts about Hero metric template +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.561Z' +updatedAt: '2026-05-28T14:20:02.561Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Hero metric template + +## Facts +- **Hero metric template**: The hero-metric template is prohibited as a SaaS cliché. diff --git a/.brv/context-tree/facts/extracted_facts/hex_colors.md b/.brv/context-tree/facts/extracted_facts/hex_colors.md new file mode 100644 index 0000000..f469c1f --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/hex_colors.md @@ -0,0 +1,24 @@ +--- +title: Hex colors +summary: Facts about Hex colors +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.518Z' +updatedAt: '2026-05-28T14:20:02.518Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Hex colors + +## Facts +- **Hex colors**: Never use #000 or #fff. diff --git a/.brv/context-tree/facts/extracted_facts/install_copy.md b/.brv/context-tree/facts/extracted_facts/install_copy.md new file mode 100644 index 0000000..1a0c851 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/install_copy.md @@ -0,0 +1,24 @@ +--- +title: install-copy +summary: Facts about install-copy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.628Z' +updatedAt: '2026-05-28T14:20:02.628Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for install-copy + +## Facts +- **install-copy**: Added `.install-copy { min-width: 0; }` so install copy and headings do not overflow at 200% text size. diff --git a/.brv/context-tree/facts/extracted_facts/layout_command.md b/.brv/context-tree/facts/extracted_facts/layout_command.md new file mode 100644 index 0000000..32472a5 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/layout_command.md @@ -0,0 +1,24 @@ +--- +title: layout command +summary: Facts about layout command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.611Z' +updatedAt: '2026-05-28T14:20:02.611Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for layout command + +## Facts +- **layout command**: `layout [target]` fixes spacing, rhythm, and visual hierarchy. diff --git a/.brv/context-tree/facts/extracted_facts/line_length.md b/.brv/context-tree/facts/extracted_facts/line_length.md new file mode 100644 index 0000000..65290be --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/line_length.md @@ -0,0 +1,24 @@ +--- +title: Line length +summary: Facts about Line length +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.546Z' +updatedAt: '2026-05-28T14:20:02.546Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Line length + +## Facts +- **Line length**: Cap body line length at 65–75 characters. diff --git a/.brv/context-tree/facts/extracted_facts/live_command.md b/.brv/context-tree/facts/extracted_facts/live_command.md new file mode 100644 index 0000000..fb7fdb2 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/live_command.md @@ -0,0 +1,24 @@ +--- +title: live command +summary: Facts about live command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.620Z' +updatedAt: '2026-05-28T14:20:02.620Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for live command + +## Facts +- **live command**: `live` enables visual variant mode: pick elements in the browser, generate alternatives. diff --git a/.brv/context-tree/facts/extracted_facts/modal_usage.md b/.brv/context-tree/facts/extracted_facts/modal_usage.md new file mode 100644 index 0000000..e2bc8d0 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/modal_usage.md @@ -0,0 +1,24 @@ +--- +title: Modal usage +summary: Facts about Modal usage +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.567Z' +updatedAt: '2026-05-28T14:20:02.567Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Modal usage + +## Facts +- **Modal usage**: Modals should not be the first design thought. diff --git a/.brv/context-tree/facts/extracted_facts/neutral_tinting.md b/.brv/context-tree/facts/extracted_facts/neutral_tinting.md new file mode 100644 index 0000000..d0612c1 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/neutral_tinting.md @@ -0,0 +1,24 @@ +--- +title: Neutral tinting +summary: Facts about Neutral tinting +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.526Z' +updatedAt: '2026-05-28T14:20:02.526Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Neutral tinting + +## Facts +- **Neutral tinting**: Tint every neutral toward the brand hue with chroma 0.005–0.01. diff --git a/.brv/context-tree/facts/extracted_facts/onboard_command.md b/.brv/context-tree/facts/extracted_facts/onboard_command.md new file mode 100644 index 0000000..11de771 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/onboard_command.md @@ -0,0 +1,24 @@ +--- +title: onboard command +summary: Facts about onboard command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.606Z' +updatedAt: '2026-05-28T14:20:02.606Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for onboard command + +## Facts +- **onboard command**: `onboard [target]` designs first-run flows, empty states, and activation. diff --git a/.brv/context-tree/facts/extracted_facts/optimize_command.md b/.brv/context-tree/facts/extracted_facts/optimize_command.md new file mode 100644 index 0000000..1a3e476 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/optimize_command.md @@ -0,0 +1,24 @@ +--- +title: optimize command +summary: Facts about optimize command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.618Z' +updatedAt: '2026-05-28T14:20:02.618Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for optimize command + +## Facts +- **optimize command**: `optimize [target]` diagnoses and fixes UI performance issues. diff --git a/.brv/context-tree/facts/extracted_facts/overdrive_command.md b/.brv/context-tree/facts/extracted_facts/overdrive_command.md new file mode 100644 index 0000000..7d0d2d3 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/overdrive_command.md @@ -0,0 +1,24 @@ +--- +title: overdrive command +summary: Facts about overdrive command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.614Z' +updatedAt: '2026-05-28T14:20:02.614Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for overdrive command + +## Facts +- **overdrive command**: `overdrive [target]` pushes past conventional limits. diff --git a/.brv/context-tree/facts/extracted_facts/pin.md b/.brv/context-tree/facts/extracted_facts/pin.md new file mode 100644 index 0000000..2d898ec --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/pin.md @@ -0,0 +1,24 @@ +--- +title: Pin +summary: Facts about Pin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.622Z' +updatedAt: '2026-05-28T14:20:02.622Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for Pin + +## Facts +- **Pin**: Pin creates a standalone shortcut so `{{command_prefix}}` invokes `{{command_prefix}}impeccable ` directly. diff --git a/.brv/context-tree/facts/extracted_facts/pin_unpin_commands.md b/.brv/context-tree/facts/extracted_facts/pin_unpin_commands.md new file mode 100644 index 0000000..eca6555 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/pin_unpin_commands.md @@ -0,0 +1,24 @@ +--- +title: pin/unpin commands +summary: Facts about pin/unpin commands +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.621Z' +updatedAt: '2026-05-28T14:20:02.621Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for pin/unpin commands + +## Facts +- **pin/unpin commands**: Two management commands exist: `pin ` and `unpin `. diff --git a/.brv/context-tree/facts/extracted_facts/pin_unpin_script.md b/.brv/context-tree/facts/extracted_facts/pin_unpin_script.md new file mode 100644 index 0000000..5f2da70 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/pin_unpin_script.md @@ -0,0 +1,24 @@ +--- +title: Pin/Unpin script +summary: Facts about Pin/Unpin script +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.625Z' +updatedAt: '2026-05-28T14:20:02.625Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for Pin/Unpin script + +## Facts +- **Pin/Unpin script**: The script writes to every harness directory present in the project. diff --git a/.brv/context-tree/facts/extracted_facts/pnpm.md b/.brv/context-tree/facts/extracted_facts/pnpm.md new file mode 100644 index 0000000..d743ea8 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/pnpm.md @@ -0,0 +1,25 @@ +--- +title: pnpm +summary: Facts about pnpm +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.635Z' +updatedAt: '2026-05-28T14:20:02.635Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for pnpm + +## Facts +- **pnpm**: pnpm --filter @caplets/landing typecheck passed. +- **pnpm**: pnpm --filter @caplets/landing build passed. diff --git a/.brv/context-tree/facts/extracted_facts/polish_command.md b/.brv/context-tree/facts/extracted_facts/polish_command.md new file mode 100644 index 0000000..45a4405 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/polish_command.md @@ -0,0 +1,24 @@ +--- +title: polish command +summary: Facts about polish command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.598Z' +updatedAt: '2026-05-28T14:20:02.598Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for polish command + +## Facts +- **polish command**: `polish [target]` provides a final quality pass before shipping. diff --git a/.brv/context-tree/facts/extracted_facts/product_md.md b/.brv/context-tree/facts/extracted_facts/product_md.md new file mode 100644 index 0000000..b70c300 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/product_md.md @@ -0,0 +1,25 @@ +--- +title: PRODUCT.md +summary: Facts about PRODUCT.md +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.504Z' +updatedAt: '2026-05-28T14:20:02.504Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for PRODUCT.md + +## Facts +- **PRODUCT.md**: PRODUCT.md is required. +- **PRODUCT.md**: If PRODUCT.md is missing, empty, or placeholder ([TODO] markers, <200 chars), run the teach command and then resume the original task. diff --git a/.brv/context-tree/facts/extracted_facts/punctuation.md b/.brv/context-tree/facts/extracted_facts/punctuation.md new file mode 100644 index 0000000..5ab9e3b --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/punctuation.md @@ -0,0 +1,24 @@ +--- +title: Punctuation +summary: Facts about Punctuation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.575Z' +updatedAt: '2026-05-28T14:20:02.575Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Punctuation + +## Facts +- **Punctuation**: Em dashes are prohibited; use commas, colons, semicolons, periods, or parentheses instead. diff --git a/.brv/context-tree/facts/extracted_facts/quieter_command.md b/.brv/context-tree/facts/extracted_facts/quieter_command.md new file mode 100644 index 0000000..ee2ef5b --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/quieter_command.md @@ -0,0 +1,24 @@ +--- +title: quieter command +summary: Facts about quieter command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.602Z' +updatedAt: '2026-05-28T14:20:02.602Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for quieter command + +## Facts +- **quieter command**: `quieter [target]` tones down aggressive or overstimulating designs. diff --git a/.brv/context-tree/facts/extracted_facts/register_failures.md b/.brv/context-tree/facts/extracted_facts/register_failures.md new file mode 100644 index 0000000..a74530b --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/register_failures.md @@ -0,0 +1,24 @@ +--- +title: register failures +summary: Facts about register failures +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.576Z' +updatedAt: '2026-05-28T14:20:02.576Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for register failures + +## Facts +- **register failures**: Register failures are the absolute bans above. diff --git a/.brv/context-tree/facts/extracted_facts/register_identification.md b/.brv/context-tree/facts/extracted_facts/register_identification.md new file mode 100644 index 0000000..a74e8e0 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/register_identification.md @@ -0,0 +1,24 @@ +--- +title: register identification +summary: Facts about register identification +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.514Z' +updatedAt: '2026-05-28T14:20:02.514Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for register identification + +## Facts +- **register identification**: Identify the register before designing, using priority: cue in the task, surface in focus, then register field in PRODUCT.md. diff --git a/.brv/context-tree/facts/extracted_facts/register_specific_failures.md b/.brv/context-tree/facts/extracted_facts/register_specific_failures.md new file mode 100644 index 0000000..04d6434 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/register_specific_failures.md @@ -0,0 +1,24 @@ +--- +title: register-specific failures +summary: Facts about register-specific failures +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.577Z' +updatedAt: '2026-05-28T14:20:02.577Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for register-specific failures + +## Facts +- **register-specific failures**: Register-specific failures live in each reference. diff --git a/.brv/context-tree/facts/extracted_facts/restrained_strategy.md b/.brv/context-tree/facts/extracted_facts/restrained_strategy.md new file mode 100644 index 0000000..2963f47 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/restrained_strategy.md @@ -0,0 +1,24 @@ +--- +title: Restrained strategy +summary: Facts about Restrained strategy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.527Z' +updatedAt: '2026-05-28T14:20:02.527Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Restrained strategy + +## Facts +- **Restrained strategy**: Restrained color strategy uses tinted neutrals plus one accent ≤10% of surface. diff --git a/.brv/context-tree/facts/extracted_facts/section_heading.md b/.brv/context-tree/facts/extracted_facts/section_heading.md new file mode 100644 index 0000000..883ec70 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/section_heading.md @@ -0,0 +1,24 @@ +--- +title: section-heading +summary: Facts about section-heading +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.627Z' +updatedAt: '2026-05-28T14:20:02.627Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for section-heading + +## Facts +- **section-heading**: Added `min-width: 0` to direct `.section-heading` children so long or enlarged section notes/headings can shrink inside grid columns. diff --git a/.brv/context-tree/facts/extracted_facts/shape_command.md b/.brv/context-tree/facts/extracted_facts/shape_command.md new file mode 100644 index 0000000..533a3ae --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/shape_command.md @@ -0,0 +1,24 @@ +--- +title: shape command +summary: Facts about shape command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.582Z' +updatedAt: '2026-05-28T14:20:02.582Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for shape command + +## Facts +- **shape command**: `shape [feature]` plans UX/UI before writing code. diff --git a/.brv/context-tree/facts/extracted_facts/spacing.md b/.brv/context-tree/facts/extracted_facts/spacing.md new file mode 100644 index 0000000..a8bd4ce --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/spacing.md @@ -0,0 +1,24 @@ +--- +title: Spacing +summary: Facts about Spacing +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.552Z' +updatedAt: '2026-05-28T14:20:02.552Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Spacing + +## Facts +- **Spacing**: Vary spacing for rhythm; same padding everywhere creates monotony. diff --git a/.brv/context-tree/facts/extracted_facts/teach_command.md b/.brv/context-tree/facts/extracted_facts/teach_command.md new file mode 100644 index 0000000..fa7a572 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/teach_command.md @@ -0,0 +1,24 @@ +--- +title: teach command +summary: Facts about teach command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.584Z' +updatedAt: '2026-05-28T14:20:02.584Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for teach command + +## Facts +- **teach command**: `teach` sets up PRODUCT.md and DESIGN.md context. diff --git a/.brv/context-tree/facts/extracted_facts/text_styling.md b/.brv/context-tree/facts/extracted_facts/text_styling.md new file mode 100644 index 0000000..73e2142 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/text_styling.md @@ -0,0 +1,24 @@ +--- +title: Text styling +summary: Facts about Text styling +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.559Z' +updatedAt: '2026-05-28T14:20:02.559Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Text styling + +## Facts +- **Text styling**: Gradient text using background-clip: text is prohibited. diff --git a/.brv/context-tree/facts/extracted_facts/theme_selection.md b/.brv/context-tree/facts/extracted_facts/theme_selection.md new file mode 100644 index 0000000..9164ecd --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/theme_selection.md @@ -0,0 +1,24 @@ +--- +title: Theme selection +summary: Facts about Theme selection +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.542Z' +updatedAt: '2026-05-28T14:20:02.542Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Theme selection + +## Facts +- **Theme selection**: Dark vs. light mode should not be chosen by default. diff --git a/.brv/context-tree/facts/extracted_facts/typecheck.md b/.brv/context-tree/facts/extracted_facts/typecheck.md new file mode 100644 index 0000000..31f1728 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/typecheck.md @@ -0,0 +1,24 @@ +--- +title: Typecheck +summary: Facts about Typecheck +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.631Z' +updatedAt: '2026-05-28T14:20:02.631Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for Typecheck + +## Facts +- **Typecheck**: `pnpm --filter @caplets/landing typecheck` passed. diff --git a/.brv/context-tree/facts/extracted_facts/typeset_command.md b/.brv/context-tree/facts/extracted_facts/typeset_command.md new file mode 100644 index 0000000..d1fa3a8 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/typeset_command.md @@ -0,0 +1,24 @@ +--- +title: typeset command +summary: Facts about typeset command +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.610Z' +updatedAt: '2026-05-28T14:20:02.610Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for typeset command + +## Facts +- **typeset command**: `typeset [target]` improves typography hierarchy and fonts. diff --git a/.brv/context-tree/facts/extracted_facts/typographic_hierarchy.md b/.brv/context-tree/facts/extracted_facts/typographic_hierarchy.md new file mode 100644 index 0000000..5c0847b --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/typographic_hierarchy.md @@ -0,0 +1,24 @@ +--- +title: Typographic hierarchy +summary: Facts about Typographic hierarchy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.548Z' +updatedAt: '2026-05-28T14:20:02.548Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.494Z + +## Narrative +### Structure +Collection of facts for Typographic hierarchy + +## Facts +- **Typographic hierarchy**: Maintain a hierarchy through scale and weight contrast with at least a 1.25 ratio between steps. diff --git a/.brv/context-tree/facts/extracted_facts/unpin.md b/.brv/context-tree/facts/extracted_facts/unpin.md new file mode 100644 index 0000000..0dd6997 --- /dev/null +++ b/.brv/context-tree/facts/extracted_facts/unpin.md @@ -0,0 +1,24 @@ +--- +title: Unpin +summary: Facts about Unpin +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:20:02.624Z' +updatedAt: '2026-05-28T14:20:02.624Z' +--- +## Reason +Curated extracted factual statements + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:20:02.495Z + +## Narrative +### Structure +Collection of facts for Unpin + +## Facts +- **Unpin**: Unpin removes the shortcut created by Pin. diff --git a/.brv/context-tree/facts/project/alchemy_cli_process_behavior.md b/.brv/context-tree/facts/project/alchemy_cli_process_behavior.md new file mode 100644 index 0000000..c35812c --- /dev/null +++ b/.brv/context-tree/facts/project/alchemy_cli_process_behavior.md @@ -0,0 +1,20 @@ +--- +title: Alchemy CLI process behavior +summary: Facts about Alchemy CLI process behavior +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T11:56:15.138Z' +updatedAt: '2026-05-28T11:56:15.138Z' +--- +## Reason +Curate extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T11:56:15.126Z + +## Facts +- **Alchemy CLI process behavior**: The shim was loaded in the parent Alchemy CLI, but Alchemy spawns a child process to evaluate `alchemy.run.ts`; the child was not inheriting the `--import` preload. diff --git a/.brv/context-tree/facts/project/apps_landing_src_pages_index_astro.md b/.brv/context-tree/facts/project/apps_landing_src_pages_index_astro.md new file mode 100644 index 0000000..0305d05 --- /dev/null +++ b/.brv/context-tree/facts/project/apps_landing_src_pages_index_astro.md @@ -0,0 +1,27 @@ +--- +title: apps/landing/src/pages/index.astro +summary: Facts about apps/landing/src/pages/index.astro +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:51:08.350Z' +updatedAt: '2026-05-28T13:51:08.350Z' +--- +## Reason +Curated extracted facts + +## Raw Concept +**Task:** +Document factual statements about apps/landing/src/pages/index.astro + +**Timestamp:** 2026-05-28T13:51:08.346Z + +## Narrative +### Structure +Collected facts for apps/landing/src/pages/index.astro + +### Highlights +Changed files: apps/landing/src/pages/index.astro + +## Facts +- **apps/landing/src/pages/index.astro**: Changed files: apps/landing/src/pages/index.astro diff --git a/.brv/context-tree/facts/project/brand_mark.md b/.brv/context-tree/facts/project/brand_mark.md new file mode 100644 index 0000000..3aa69e9 --- /dev/null +++ b/.brv/context-tree/facts/project/brand_mark.md @@ -0,0 +1,27 @@ +--- +title: .brand-mark +summary: Facts about .brand-mark +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:40:49.012Z' +updatedAt: '2026-05-28T13:40:49.012Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:40:49.005Z + +## Narrative +### Structure +List of factual statements extracted + +### Highlights +Contains 1 facts + +## Facts +- **.brand-mark**: Mobile header targets meet 44px sizing without adding unnecessary visual bulk: `.brand-mark` is 44px minimum with compact 30px icon and hidden text, safe because markup has `aria-label="Caplets home"`. diff --git a/.brv/context-tree/facts/project/build.md b/.brv/context-tree/facts/project/build.md index 9e97999..54e0849 100644 --- a/.brv/context-tree/facts/project/build.md +++ b/.brv/context-tree/facts/project/build.md @@ -5,23 +5,23 @@ tags: [] related: [] keywords: [] createdAt: '2026-05-27T18:59:51.352Z' -updatedAt: '2026-05-28T11:17:59.559Z' +updatedAt: '2026-05-28T13:55:17.314Z' --- ## Reason -Curated facts extracted from context +Curated extracted facts from context ## Raw Concept **Task:** -Document facts about build +Document extracted factual statements -**Timestamp:** 2026-05-28T11:17:59.530Z +**Timestamp:** 2026-05-28T13:55:17.267Z ## Narrative ### Structure -Collected factual statements +Collected facts for build ### Highlights Extracted 1 facts for build ## Facts -- **build**: pnpm --filter @caplets/landing build passed, building 1 page. +- **build**: pnpm --filter @caplets/landing build passed, building 1 page successfully. diff --git a/.brv/context-tree/facts/project/caplets_github_action_run.md b/.brv/context-tree/facts/project/caplets_github_action_run.md new file mode 100644 index 0000000..24569fb --- /dev/null +++ b/.brv/context-tree/facts/project/caplets_github_action_run.md @@ -0,0 +1,29 @@ +--- +title: caplets_github_action_run +summary: Link to specific GitHub Actions run for caplets CI +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T12:17:08.199Z' +updatedAt: '2026-05-28T12:17:08.199Z' +--- +## Reason +Record CI run link for caplets repository + +## Raw Concept +**Task:** +Record CI run reference + +**Changes:** +- Added CI run link + +**Timestamp:** 2026-05-28T12:17:08.198Z + +**Author:** ByteRover Context Engineer + +## Narrative +### Highlights +GitHub Actions run URL: https://github.com/spiritledsoftware/caplets/actions/runs/26572806394/job/78284056512 + +## Facts +- **ci_run_url**: GitHub Actions run URL for caplets CI [project] diff --git a/.brv/context-tree/facts/project/constraints.md b/.brv/context-tree/facts/project/constraints.md new file mode 100644 index 0000000..a763854 --- /dev/null +++ b/.brv/context-tree/facts/project/constraints.md @@ -0,0 +1,25 @@ +--- +title: Constraints +summary: Facts about constraints +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.284Z' +updatedAt: '2026-05-28T13:55:17.284Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 2 facts for constraints + +## Facts +- **constraints**: Design constraints prohibit em dashes, side‑stripe borders, gradient text, and glassmorphism. +- **constraints**: Design constraints require using existing tokens and OKLCH color space while maintaining the Caplets precise/calm/capable voice. diff --git a/.brv/context-tree/facts/project/content.md b/.brv/context-tree/facts/project/content.md new file mode 100644 index 0000000..aa99ea7 --- /dev/null +++ b/.brv/context-tree/facts/project/content.md @@ -0,0 +1,24 @@ +--- +title: content +summary: Facts about content +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:48:34.347Z' +updatedAt: '2026-05-28T13:48:34.347Z' +--- +## Reason +Curated factual statements from recent context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-28T13:48:34.339Z + +## Narrative +### Highlights +Collected 1 facts for content + +## Facts +- **content**: No integration tab/panel content or copy changes found, and no em dashes in the reviewed tab/panel markup or JS diff --git a/.brv/context-tree/facts/project/css_implementation.md b/.brv/context-tree/facts/project/css_implementation.md new file mode 100644 index 0000000..ed26b36 --- /dev/null +++ b/.brv/context-tree/facts/project/css_implementation.md @@ -0,0 +1,27 @@ +--- +title: CSS implementation +summary: Facts about CSS implementation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:40:49.040Z' +updatedAt: '2026-05-28T13:40:49.040Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:40:49.005Z + +## Narrative +### Structure +List of factual statements extracted + +### Highlights +Contains 1 facts + +## Facts +- **CSS implementation**: The implementation fits existing CSS patterns: simple selectors, existing variables, existing breakpoint structure, no new design tokens or one‑off abstractions. diff --git a/.brv/context-tree/facts/project/css_variable.md b/.brv/context-tree/facts/project/css_variable.md new file mode 100644 index 0000000..8b2b7b0 --- /dev/null +++ b/.brv/context-tree/facts/project/css_variable.md @@ -0,0 +1,22 @@ +--- +title: CSS variable +summary: Facts about CSS variable +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:58:26.040Z' +updatedAt: '2026-05-28T13:58:26.040Z' +--- +## Reason +Curated facts extraction + +## Raw Concept +**Task:** +Document facts for CSS variable + +## Narrative +### Highlights +Extracted 1 facts for CSS variable + +## Facts +- **CSS variable**: `--header-shadow` is removed. diff --git a/.brv/context-tree/facts/project/diff_scope.md b/.brv/context-tree/facts/project/diff_scope.md new file mode 100644 index 0000000..5f5afb4 --- /dev/null +++ b/.brv/context-tree/facts/project/diff_scope.md @@ -0,0 +1,24 @@ +--- +title: Diff scope +summary: Facts about diff scope +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.318Z' +updatedAt: '2026-05-28T13:55:17.318Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for diff scope + +## Facts +- **diff scope**: The working tree already contained other landing edits in the same files, so the full diff includes changes outside this task. diff --git a/.brv/context-tree/facts/project/files.md b/.brv/context-tree/facts/project/files.md new file mode 100644 index 0000000..87cdc5c --- /dev/null +++ b/.brv/context-tree/facts/project/files.md @@ -0,0 +1,24 @@ +--- +title: Files +summary: Facts about files +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.286Z' +updatedAt: '2026-05-28T13:55:17.286Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for files + +## Facts +- **files**: Changed files are apps/landing/src/pages/index.astro and apps/landing/src/styles/global.css. diff --git a/.brv/context-tree/facts/project/fix_comparison.md b/.brv/context-tree/facts/project/fix_comparison.md new file mode 100644 index 0000000..8c48824 --- /dev/null +++ b/.brv/context-tree/facts/project/fix_comparison.md @@ -0,0 +1,20 @@ +--- +title: Fix comparison +summary: Facts about fix comparison +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T11:56:15.190Z' +updatedAt: '2026-05-28T11:56:15.190Z' +--- +## Reason +Curate extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T11:56:15.127Z + +## Facts +- **fix comparison**: The key difference from the previous fix is that `NODE_OPTIONS` follows Alchemy into its spawned evaluator. diff --git a/.brv/context-tree/facts/project/footer_mobile_links.md b/.brv/context-tree/facts/project/footer_mobile_links.md new file mode 100644 index 0000000..6653ad3 --- /dev/null +++ b/.brv/context-tree/facts/project/footer_mobile_links.md @@ -0,0 +1,27 @@ +--- +title: footer mobile links +summary: Facts about footer mobile links +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:40:49.017Z' +updatedAt: '2026-05-28T13:40:49.017Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:40:49.005Z + +## Narrative +### Structure +List of factual statements extracted + +### Highlights +Contains 1 facts + +## Facts +- **footer mobile links**: Footer mobile links get 44px minimum height with flex alignment and modest padding, improving touch accessibility without excessive spacing. diff --git a/.brv/context-tree/facts/project/header_shadow_token.md b/.brv/context-tree/facts/project/header_shadow_token.md new file mode 100644 index 0000000..f6310c4 --- /dev/null +++ b/.brv/context-tree/facts/project/header_shadow_token.md @@ -0,0 +1,25 @@ +--- +title: Header shadow token +summary: Facts about header shadow token +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.275Z' +updatedAt: '2026-05-28T13:55:17.275Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 2 facts for header shadow token + +## Facts +- **header shadow token**: Audit finding 3: The --header-shadow token is stale and should be removed if unused. +- **header shadow token**: The unused --header-shadow token was removed. diff --git a/.brv/context-tree/facts/project/hover_motion.md b/.brv/context-tree/facts/project/hover_motion.md new file mode 100644 index 0000000..0190b9b --- /dev/null +++ b/.brv/context-tree/facts/project/hover_motion.md @@ -0,0 +1,25 @@ +--- +title: Hover motion +summary: Facts about hover motion +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.273Z' +updatedAt: '2026-05-28T13:55:17.273Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 2 facts for hover motion + +## Facts +- **hover motion**: Audit finding 2: Some secondary hover motion is over‑applied and should be reduced on low‑priority nav/icon/copy controls. +- **hover motion**: Hover translate motion was removed from low‑priority top nav, header icons, and copy buttons. diff --git a/.brv/context-tree/facts/project/hover_transform.md b/.brv/context-tree/facts/project/hover_transform.md new file mode 100644 index 0000000..5e57019 --- /dev/null +++ b/.brv/context-tree/facts/project/hover_transform.md @@ -0,0 +1,24 @@ +--- +title: Hover transform +summary: Facts about hover transform +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.290Z' +updatedAt: '2026-05-28T13:55:17.290Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for hover transform + +## Facts +- **hover transform**: Hover transform was kept for primary/secondary buttons and integration pills. diff --git a/.brv/context-tree/facts/project/hover_transforms.md b/.brv/context-tree/facts/project/hover_transforms.md new file mode 100644 index 0000000..60bb9e4 --- /dev/null +++ b/.brv/context-tree/facts/project/hover_transforms.md @@ -0,0 +1,22 @@ +--- +title: Hover transforms +summary: Facts about Hover transforms +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:58:26.030Z' +updatedAt: '2026-05-28T13:58:26.030Z' +--- +## Reason +Curated facts extraction + +## Raw Concept +**Task:** +Document facts for Hover transforms + +## Narrative +### Highlights +Extracted 1 facts for Hover transforms + +## Facts +- **Hover transforms**: Low-priority hover transforms were reduced, while primary/integration transforms remain. diff --git a/.brv/context-tree/facts/project/icon_link.md b/.brv/context-tree/facts/project/icon_link.md new file mode 100644 index 0000000..3def3e3 --- /dev/null +++ b/.brv/context-tree/facts/project/icon_link.md @@ -0,0 +1,27 @@ +--- +title: .icon-link +summary: Facts about .icon-link +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:40:49.016Z' +updatedAt: '2026-05-28T13:40:49.016Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:40:49.005Z + +## Narrative +### Structure +List of factual statements extracted + +### Highlights +Contains 1 facts + +## Facts +- **.icon-link**: `.icon-link` becomes exactly 44px wide and inherits 44px min height, giving square icon targets. diff --git a/.brv/context-tree/facts/project/inactive_integration_panels.md b/.brv/context-tree/facts/project/inactive_integration_panels.md new file mode 100644 index 0000000..70e8879 --- /dev/null +++ b/.brv/context-tree/facts/project/inactive_integration_panels.md @@ -0,0 +1,27 @@ +--- +title: inactive integration panels +summary: Facts about inactive integration panels +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:51:08.351Z' +updatedAt: '2026-05-28T13:51:08.351Z' +--- +## Reason +Curated extracted facts + +## Raw Concept +**Task:** +Document factual statements about inactive integration panels + +**Timestamp:** 2026-05-28T13:51:08.346Z + +## Narrative +### Structure +Collected facts for inactive integration panels + +### Highlights +Removed server-rendered `hidden` from inactive integration panels. + +## Facts +- **inactive integration panels**: Removed server-rendered `hidden` from inactive integration panels. diff --git a/.brv/context-tree/facts/project/integration_panels.md b/.brv/context-tree/facts/project/integration_panels.md new file mode 100644 index 0000000..7f7a970 --- /dev/null +++ b/.brv/context-tree/facts/project/integration_panels.md @@ -0,0 +1,27 @@ +--- +title: integration panels +summary: Facts about integration panels +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:51:08.348Z' +updatedAt: '2026-05-28T13:51:08.348Z' +--- +## Reason +Curated extracted facts + +## Raw Concept +**Task:** +Document factual statements about integration panels + +**Timestamp:** 2026-05-28T13:51:08.346Z + +## Narrative +### Structure +Collected facts for integration panels + +### Highlights +Implemented progressive enhancement fix for integration panels. + +## Facts +- **integration panels**: Implemented progressive enhancement fix for integration panels. diff --git a/.brv/context-tree/facts/project/integration_pill.md b/.brv/context-tree/facts/project/integration_pill.md new file mode 100644 index 0000000..802871a --- /dev/null +++ b/.brv/context-tree/facts/project/integration_pill.md @@ -0,0 +1,27 @@ +--- +title: .integration-pill +summary: Facts about .integration-pill +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:40:49.009Z' +updatedAt: '2026-05-28T13:40:49.009Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:40:49.005Z + +## Narrative +### Structure +List of factual statements extracted + +### Highlights +Contains 1 facts + +## Facts +- **.integration-pill**: `.integration-pill` now has both `min-width: 44px` and existing `min-height: 44px`, preserving current pill styling while meeting minimum touch target sizing. diff --git a/.brv/context-tree/facts/project/integration_tabs_aria_semantics.md b/.brv/context-tree/facts/project/integration_tabs_aria_semantics.md new file mode 100644 index 0000000..011d6e6 --- /dev/null +++ b/.brv/context-tree/facts/project/integration_tabs_aria_semantics.md @@ -0,0 +1,22 @@ +--- +title: Integration tabs ARIA semantics +summary: Facts about Integration tabs ARIA semantics +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:58:26.013Z' +updatedAt: '2026-05-28T13:58:26.013Z' +--- +## Reason +Curated facts extraction + +## Raw Concept +**Task:** +Document facts for Integration tabs ARIA semantics + +## Narrative +### Highlights +Extracted 1 facts for Integration tabs ARIA semantics + +## Facts +- **Integration tabs ARIA semantics**: Integration tabs still have unsafe no-JS SSR ARIA semantics in apps/landing/src/pages/index.astro lines 311-333. diff --git a/.brv/context-tree/facts/project/javascript.md b/.brv/context-tree/facts/project/javascript.md new file mode 100644 index 0000000..652ddac --- /dev/null +++ b/.brv/context-tree/facts/project/javascript.md @@ -0,0 +1,24 @@ +--- +title: javascript +summary: Facts about javascript +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:48:34.345Z' +updatedAt: '2026-05-28T13:48:34.345Z' +--- +## Reason +Curated factual statements from recent context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-28T13:48:34.339Z + +## Narrative +### Highlights +Collected 1 facts for javascript + +## Facts +- **javascript**: Existing JS behavior is preserved: click selection, ARIA/tabindex updates, panel hiding, and ArrowLeft/ArrowRight/Home/End keyboard navigation remain at lines 425-476 diff --git a/.brv/context-tree/facts/project/javascript_initialization.md b/.brv/context-tree/facts/project/javascript_initialization.md new file mode 100644 index 0000000..cd851b7 --- /dev/null +++ b/.brv/context-tree/facts/project/javascript_initialization.md @@ -0,0 +1,27 @@ +--- +title: JavaScript initialization +summary: Facts about JavaScript initialization +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:51:08.354Z' +updatedAt: '2026-05-28T13:51:08.354Z' +--- +## Reason +Curated extracted facts + +## Raw Concept +**Task:** +Document factual statements about JavaScript initialization + +**Timestamp:** 2026-05-28T13:51:08.346Z + +## Narrative +### Structure +Collected facts for JavaScript initialization + +### Highlights +Existing JS now applies the initial hidden state on initialization via `selectAgentTab(...)`, preserving click and keyboard tab behavior. + +## Facts +- **JavaScript initialization**: Existing JS now applies the initial hidden state on initialization via `selectAgentTab(...)`, preserving click and keyboard tab behavior. diff --git a/.brv/context-tree/facts/project/kicker_pattern.md b/.brv/context-tree/facts/project/kicker_pattern.md new file mode 100644 index 0000000..1568da7 --- /dev/null +++ b/.brv/context-tree/facts/project/kicker_pattern.md @@ -0,0 +1,24 @@ +--- +title: Kicker pattern +summary: Facts about kicker pattern +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.272Z' +updatedAt: '2026-05-28T13:55:17.272Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for kicker pattern + +## Facts +- **kicker pattern**: Audit finding 1: Repeated uppercase kicker pattern appears in hero, problem, proof, trust, integrations, install sections. diff --git a/.brv/context-tree/facts/project/kicker_scaffolding.md b/.brv/context-tree/facts/project/kicker_scaffolding.md new file mode 100644 index 0000000..b643ad5 --- /dev/null +++ b/.brv/context-tree/facts/project/kicker_scaffolding.md @@ -0,0 +1,24 @@ +--- +title: Kicker scaffolding +summary: Facts about kicker scaffolding +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.287Z' +updatedAt: '2026-05-28T13:55:17.287Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for kicker scaffolding + +## Facts +- **kicker scaffolding**: Repeated uppercase kicker scaffolding was reduced to two key kickers: hero and install. diff --git a/.brv/context-tree/facts/project/layout.md b/.brv/context-tree/facts/project/layout.md index 956395d..29537ad 100644 --- a/.brv/context-tree/facts/project/layout.md +++ b/.brv/context-tree/facts/project/layout.md @@ -1,24 +1,27 @@ --- -title: Layout +title: layout summary: Facts about layout tags: [] related: [] keywords: [] createdAt: '2026-05-27T18:47:50.721Z' -updatedAt: '2026-05-27T18:47:50.721Z' +updatedAt: '2026-05-28T13:40:49.019Z' --- ## Reason -Curated extracted facts from context +Curate extracted facts from context ## Raw Concept **Task:** Document extracted facts -**Timestamp:** 2026-05-27T18:47:50.505Z +**Timestamp:** 2026-05-28T13:40:49.005Z ## Narrative +### Structure +List of factual statements extracted + ### Highlights -Extracted 1 facts for layout +Contains 1 facts ## Facts -- **layout**: `layout [target]` is an Enhance command that fixes spacing, rhythm, and visual hierarchy. +- **layout**: Responsiveness appears safe at the 320px minimum viewport; the compact mobile header widths fit the three‑column layout without obvious overflow risk. diff --git a/.brv/context-tree/facts/project/mask_image.md b/.brv/context-tree/facts/project/mask_image.md new file mode 100644 index 0000000..a41ed3a --- /dev/null +++ b/.brv/context-tree/facts/project/mask_image.md @@ -0,0 +1,24 @@ +--- +title: Mask image +summary: Facts about mask image +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.280Z' +updatedAt: '2026-05-28T13:55:17.292Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for mask image + +## Facts +- **mask image**: The .tool-noise mask literal `black` was replaced with a token‑compatible OKLCH alpha value. diff --git a/.brv/context-tree/facts/project/motion_preferences.md b/.brv/context-tree/facts/project/motion_preferences.md new file mode 100644 index 0000000..6602518 --- /dev/null +++ b/.brv/context-tree/facts/project/motion_preferences.md @@ -0,0 +1,22 @@ +--- +title: Motion preferences +summary: Facts about Motion preferences +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:58:26.025Z' +updatedAt: '2026-05-28T13:58:26.025Z' +--- +## Reason +Curated facts extraction + +## Raw Concept +**Task:** +Document facts for Motion preferences + +## Narrative +### Highlights +Extracted 1 facts for Motion preferences + +## Facts +- **Motion preferences**: Reduced motion is preserved. diff --git a/.brv/context-tree/facts/project/next_step.md b/.brv/context-tree/facts/project/next_step.md new file mode 100644 index 0000000..329ff08 --- /dev/null +++ b/.brv/context-tree/facts/project/next_step.md @@ -0,0 +1,24 @@ +--- +title: Next step +summary: Facts about next step +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.320Z' +updatedAt: '2026-05-28T13:55:17.320Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for next step + +## Facts +- **next step**: Recommended next step: Review the landing page visually for section rhythm and hover feel. diff --git a/.brv/context-tree/facts/project/none.md b/.brv/context-tree/facts/project/none.md new file mode 100644 index 0000000..2fe6749 --- /dev/null +++ b/.brv/context-tree/facts/project/none.md @@ -0,0 +1,24 @@ +--- +title: None +summary: Facts about none +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.316Z' +updatedAt: '2026-05-28T13:55:17.316Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for none + +## Facts +- **none**: Open risks/questions: None from this task. diff --git a/.brv/context-tree/facts/project/package_json.md b/.brv/context-tree/facts/project/package_json.md new file mode 100644 index 0000000..0111bc6 --- /dev/null +++ b/.brv/context-tree/facts/project/package_json.md @@ -0,0 +1,20 @@ +--- +title: Package.json +summary: Facts about package.json +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T11:56:15.161Z' +updatedAt: '2026-05-28T11:56:15.161Z' +--- +## Reason +Curate extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T11:56:15.126Z + +## Facts +- **package.json**: `package.json` Alchemy scripts now call the runner via `node ./scripts/alchemy-runner.mjs deploy`. diff --git a/.brv/context-tree/facts/project/panels.md b/.brv/context-tree/facts/project/panels.md new file mode 100644 index 0000000..7fda6ab --- /dev/null +++ b/.brv/context-tree/facts/project/panels.md @@ -0,0 +1,24 @@ +--- +title: panels +summary: Facts about panels +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:48:34.344Z' +updatedAt: '2026-05-28T13:48:34.344Z' +--- +## Reason +Curated factual statements from recent context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-28T13:48:34.339Z + +## Narrative +### Highlights +Collected 1 facts for panels + +## Facts +- **panels**: Panels render server-side with role="tabpanel", aria-labelledby pointing back to the matching tab, and hidden for all but the first panel at lines 328-335 diff --git a/.brv/context-tree/facts/project/potential_files.md b/.brv/context-tree/facts/project/potential_files.md new file mode 100644 index 0000000..02d0014 --- /dev/null +++ b/.brv/context-tree/facts/project/potential_files.md @@ -0,0 +1,24 @@ +--- +title: Potential files +summary: Facts about potential files +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.271Z' +updatedAt: '2026-05-28T13:55:17.271Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for potential files + +## Facts +- **potential files**: Likely involved files are apps/landing/src/pages/index.astro and apps/landing/src/styles/global.css. diff --git a/.brv/context-tree/facts/project/repo.md b/.brv/context-tree/facts/project/repo.md new file mode 100644 index 0000000..e1f9852 --- /dev/null +++ b/.brv/context-tree/facts/project/repo.md @@ -0,0 +1,24 @@ +--- +title: Repo +summary: Facts about repo +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.268Z' +updatedAt: '2026-05-28T13:55:17.268Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.266Z + +## Narrative +### Highlights +Extracted 1 facts for repo + +## Facts +- **repo**: The repository is located at /home/ianpascoe/src/caplets. diff --git a/.brv/context-tree/facts/project/reveal_component.md b/.brv/context-tree/facts/project/reveal_component.md new file mode 100644 index 0000000..f70bc8c --- /dev/null +++ b/.brv/context-tree/facts/project/reveal_component.md @@ -0,0 +1,22 @@ +--- +title: Reveal component +summary: Facts about Reveal component +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:58:26.022Z' +updatedAt: '2026-05-28T13:58:26.022Z' +--- +## Reason +Curated facts extraction + +## Raw Concept +**Task:** +Document facts for Reveal component + +## Narrative +### Highlights +Extracted 1 facts for Reveal component + +## Facts +- **Reveal component**: Reveal content is visible by default. diff --git a/.brv/context-tree/facts/project/reveal_transitions.md b/.brv/context-tree/facts/project/reveal_transitions.md new file mode 100644 index 0000000..cf730f4 --- /dev/null +++ b/.brv/context-tree/facts/project/reveal_transitions.md @@ -0,0 +1,22 @@ +--- +title: Reveal transitions +summary: Facts about Reveal transitions +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:58:26.028Z' +updatedAt: '2026-05-28T13:58:26.028Z' +--- +## Reason +Curated facts extraction + +## Raw Concept +**Task:** +Document facts for Reveal transitions + +## Narrative +### Highlights +Extracted 1 facts for Reveal transitions + +## Facts +- **Reveal transitions**: Reveal transitions use opacity/transform only. diff --git a/.brv/context-tree/facts/project/risks.md b/.brv/context-tree/facts/project/risks.md new file mode 100644 index 0000000..e734175 --- /dev/null +++ b/.brv/context-tree/facts/project/risks.md @@ -0,0 +1,27 @@ +--- +title: risks +summary: Facts about risks +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:51:08.373Z' +updatedAt: '2026-05-28T13:51:08.373Z' +--- +## Reason +Curated extracted facts + +## Raw Concept +**Task:** +Document factual statements about risks + +**Timestamp:** 2026-05-28T13:51:08.346Z + +## Narrative +### Structure +Collected facts for risks + +### Highlights +Open risks/questions: None. + +## Facts +- **risks**: Open risks/questions: None. diff --git a/.brv/context-tree/facts/project/scripts_alchemy_fetch_compat_mjs.md b/.brv/context-tree/facts/project/scripts_alchemy_fetch_compat_mjs.md new file mode 100644 index 0000000..a9aedce --- /dev/null +++ b/.brv/context-tree/facts/project/scripts_alchemy_fetch_compat_mjs.md @@ -0,0 +1,20 @@ +--- +title: Scripts/alchemy-fetch-compat.mjs +summary: Facts about scripts/alchemy-fetch-compat.mjs +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T11:56:15.167Z' +updatedAt: '2026-05-28T11:56:15.167Z' +--- +## Reason +Curate extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T11:56:15.127Z + +## Facts +- **scripts/alchemy-fetch-compat.mjs**: Existing fetch shim remains in `scripts/alchemy-fetch-compat.mjs`. diff --git a/.brv/context-tree/facts/project/scripts_alchemy_runner_mjs.md b/.brv/context-tree/facts/project/scripts_alchemy_runner_mjs.md new file mode 100644 index 0000000..3a15aec --- /dev/null +++ b/.brv/context-tree/facts/project/scripts_alchemy_runner_mjs.md @@ -0,0 +1,20 @@ +--- +title: Scripts/alchemy-runner.mjs +summary: Facts about scripts/alchemy-runner.mjs +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T11:56:15.141Z' +updatedAt: '2026-05-28T11:56:15.141Z' +--- +## Reason +Curate extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T11:56:15.126Z + +## Facts +- **scripts/alchemy-runner.mjs**: `scripts/alchemy-runner.mjs` wraps Alchemy and sets `NODE_OPTIONS=--import=`. diff --git a/.brv/context-tree/facts/project/scripts_alchemy_runner_test_mjs.md b/.brv/context-tree/facts/project/scripts_alchemy_runner_test_mjs.md new file mode 100644 index 0000000..469990b --- /dev/null +++ b/.brv/context-tree/facts/project/scripts_alchemy_runner_test_mjs.md @@ -0,0 +1,20 @@ +--- +title: Scripts/alchemy-runner.test.mjs +summary: Facts about scripts/alchemy-runner.test.mjs +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T11:56:15.164Z' +updatedAt: '2026-05-28T11:56:15.164Z' +--- +## Reason +Curate extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T11:56:15.127Z + +## Facts +- **scripts/alchemy-runner.test.mjs**: `scripts/alchemy-runner.test.mjs` verifies the shim is injected through `NODE_OPTIONS`. diff --git a/.brv/context-tree/facts/project/section_styling.md b/.brv/context-tree/facts/project/section_styling.md new file mode 100644 index 0000000..31a92af --- /dev/null +++ b/.brv/context-tree/facts/project/section_styling.md @@ -0,0 +1,24 @@ +--- +title: Section styling +summary: Facts about section styling +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.288Z' +updatedAt: '2026-05-28T13:55:17.288Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for section styling + +## Facts +- **section styling**: A calmer .section-note styling was added for problem, proof, trust, and integrations sections. diff --git a/.brv/context-tree/facts/project/tab_aria_state.md b/.brv/context-tree/facts/project/tab_aria_state.md new file mode 100644 index 0000000..6ef6d30 --- /dev/null +++ b/.brv/context-tree/facts/project/tab_aria_state.md @@ -0,0 +1,27 @@ +--- +title: tab ARIA state +summary: Facts about tab ARIA state +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:51:08.353Z' +updatedAt: '2026-05-28T13:51:08.353Z' +--- +## Reason +Curated extracted facts + +## Raw Concept +**Task:** +Document factual statements about tab ARIA state + +**Timestamp:** 2026-05-28T13:51:08.346Z + +## Narrative +### Structure +Collected facts for tab ARIA state + +### Highlights +Kept server-rendered tab ARIA state and relationships. + +## Facts +- **tab ARIA state**: Kept server-rendered tab ARIA state and relationships. diff --git a/.brv/context-tree/facts/project/tablist.md b/.brv/context-tree/facts/project/tablist.md new file mode 100644 index 0000000..7abcbe8 --- /dev/null +++ b/.brv/context-tree/facts/project/tablist.md @@ -0,0 +1,24 @@ +--- +title: tablist +summary: Facts about tablist +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:48:34.340Z' +updatedAt: '2026-05-28T13:48:34.340Z' +--- +## Reason +Curated factual statements from recent context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-28T13:48:34.339Z + +## Narrative +### Highlights +Collected 1 facts for tablist + +## Facts +- **tablist**: Server-rendered tablist has role="tablist" at apps/landing/src/pages/index.astro:311 diff --git a/.brv/context-tree/facts/project/tabs.md b/.brv/context-tree/facts/project/tabs.md new file mode 100644 index 0000000..5e73250 --- /dev/null +++ b/.brv/context-tree/facts/project/tabs.md @@ -0,0 +1,24 @@ +--- +title: tabs +summary: Facts about tabs +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:48:34.342Z' +updatedAt: '2026-05-28T13:48:34.342Z' +--- +## Reason +Curated factual statements from recent context + +## Raw Concept +**Task:** +Document project facts + +**Timestamp:** 2026-05-28T13:48:34.339Z + +## Narrative +### Highlights +Collected 1 facts for tabs + +## Facts +- **tabs**: Tabs render server-side with role="tab", first tab aria-selected="true" and tabindex=0, inactive tabs aria-selected="false" and tabindex=-1, plus aria-controls pointing to matching panels at lines 313-321 diff --git a/.brv/context-tree/facts/project/task_outcome.md b/.brv/context-tree/facts/project/task_outcome.md new file mode 100644 index 0000000..45a6f93 --- /dev/null +++ b/.brv/context-tree/facts/project/task_outcome.md @@ -0,0 +1,24 @@ +--- +title: Task outcome +summary: Facts about task outcome +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.285Z' +updatedAt: '2026-05-28T13:55:17.285Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.267Z + +## Narrative +### Highlights +Extracted 1 facts for task outcome + +## Facts +- **task outcome**: The assistant returned status DONE. diff --git a/.brv/context-tree/facts/project/test_results.md b/.brv/context-tree/facts/project/test_results.md new file mode 100644 index 0000000..ef4fa15 --- /dev/null +++ b/.brv/context-tree/facts/project/test_results.md @@ -0,0 +1,20 @@ +--- +title: Test results +summary: Facts about test results +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T11:56:15.186Z' +updatedAt: '2026-05-28T11:56:15.186Z' +--- +## Reason +Curate extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T11:56:15.127Z + +## Facts +- **test results**: `pnpm test` runs 622 Vitest tests plus 3 Node tests, all passed. diff --git a/.brv/context-tree/facts/project/tool_noise_mask.md b/.brv/context-tree/facts/project/tool_noise_mask.md new file mode 100644 index 0000000..2a8f778 --- /dev/null +++ b/.brv/context-tree/facts/project/tool_noise_mask.md @@ -0,0 +1,22 @@ +--- +title: Tool-noise mask +summary: Facts about Tool-noise mask +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:58:26.042Z' +updatedAt: '2026-05-28T13:58:26.042Z' +--- +## Reason +Curated facts extraction + +## Raw Concept +**Task:** +Document facts for Tool-noise mask + +## Narrative +### Highlights +Extracted 1 facts for Tool-noise mask + +## Facts +- **Tool-noise mask**: Tool-noise mask no longer uses literal black. diff --git a/.brv/context-tree/facts/project/tooling.md b/.brv/context-tree/facts/project/tooling.md new file mode 100644 index 0000000..8eb0b16 --- /dev/null +++ b/.brv/context-tree/facts/project/tooling.md @@ -0,0 +1,24 @@ +--- +title: Tooling +summary: Facts about tooling +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:55:17.270Z' +updatedAt: '2026-05-28T13:55:17.270Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Document extracted factual statements + +**Timestamp:** 2026-05-28T13:55:17.266Z + +## Narrative +### Highlights +Extracted 1 facts for tooling + +## Facts +- **tooling**: The task must use pnpm only. diff --git a/.brv/context-tree/facts/project/top_nav_a_header_action.md b/.brv/context-tree/facts/project/top_nav_a_header_action.md new file mode 100644 index 0000000..373c8a2 --- /dev/null +++ b/.brv/context-tree/facts/project/top_nav_a_header_action.md @@ -0,0 +1,27 @@ +--- +title: .top-nav a, .header-action +summary: Facts about .top-nav a, .header-action +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:40:49.014Z' +updatedAt: '2026-05-28T13:40:49.014Z' +--- +## Reason +Curate extracted facts from context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T13:40:49.005Z + +## Narrative +### Structure +List of factual statements extracted + +### Highlights +Contains 1 facts + +## Facts +- **.top-nav a, .header-action**: `.top-nav a` and `.header-action` retain 44px minimum height with reduced padding and font size for fit. diff --git a/.brv/context-tree/facts/project/touch_target_size.md b/.brv/context-tree/facts/project/touch_target_size.md new file mode 100644 index 0000000..0f5c14a --- /dev/null +++ b/.brv/context-tree/facts/project/touch_target_size.md @@ -0,0 +1,22 @@ +--- +title: Touch target size +summary: Facts about Touch target size +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T13:58:26.019Z' +updatedAt: '2026-05-28T13:58:26.019Z' +--- +## Reason +Curated facts extraction + +## Raw Concept +**Task:** +Document facts for Touch target size + +## Narrative +### Highlights +Extracted 1 facts for Touch target size + +## Facts +- **Touch target size**: 44px touch targets are present for mobile nav, footer links, copy buttons, and integration pills. diff --git a/.brv/context-tree/facts/project/typecheck.md b/.brv/context-tree/facts/project/typecheck.md index a8b49c0..cd6ac9b 100644 --- a/.brv/context-tree/facts/project/typecheck.md +++ b/.brv/context-tree/facts/project/typecheck.md @@ -5,23 +5,23 @@ tags: [] related: [] keywords: [] createdAt: '2026-05-27T18:59:51.354Z' -updatedAt: '2026-05-28T11:17:59.549Z' +updatedAt: '2026-05-28T13:55:17.303Z' --- ## Reason -Curated facts extracted from context +Curated extracted facts from context ## Raw Concept **Task:** -Document facts about typecheck +Document extracted factual statements -**Timestamp:** 2026-05-28T11:17:59.530Z +**Timestamp:** 2026-05-28T13:55:17.267Z ## Narrative ### Structure -Collected factual statements +Collected facts for typecheck ### Highlights Extracted 1 facts for typecheck ## Facts -- **typecheck**: pnpm --filter @caplets/landing typecheck passed with 0 errors. +- **typecheck**: pnpm --filter @caplets/landing typecheck passed with 0 errors, 0 warnings, and 0 hints. diff --git a/.brv/context-tree/facts/project/verification_steps.md b/.brv/context-tree/facts/project/verification_steps.md new file mode 100644 index 0000000..f2dc2a4 --- /dev/null +++ b/.brv/context-tree/facts/project/verification_steps.md @@ -0,0 +1,20 @@ +--- +title: Verification steps +summary: Facts about verification steps +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T11:56:15.170Z' +updatedAt: '2026-05-28T11:56:15.170Z' +--- +## Reason +Curate extracted facts from source context + +## Raw Concept +**Task:** +Document extracted facts + +**Timestamp:** 2026-05-28T11:56:15.127Z + +## Facts +- **verification steps**: Verification commands now pass, including `pnpm run alchemy:deploy --help` and all test suites. diff --git a/.brv/context-tree/facts/project/visual_elements.md b/.brv/context-tree/facts/project/visual_elements.md index 6051c47..0f17c65 100644 --- a/.brv/context-tree/facts/project/visual_elements.md +++ b/.brv/context-tree/facts/project/visual_elements.md @@ -1,24 +1,24 @@ --- title: Visual elements -summary: Facts about visual elements +summary: Facts about Visual elements tags: [] related: [] keywords: [] createdAt: '2026-05-28T09:50:25.721Z' -updatedAt: '2026-05-28T09:50:25.721Z' +updatedAt: '2026-05-28T13:58:26.046Z' --- ## Reason -Curated facts extracted from source context +Curated facts extraction ## Raw Concept **Task:** -Document extracted facts +Document facts for Visual elements **Timestamp:** 2026-05-28T09:50:25.672Z ## Narrative ### Highlights -Extracted 1 facts for visual elements +Extracted 1 facts for Visual elements ## Facts -- **visual elements**: The visual idea of “capability cards” will be retained. +- **Visual elements**: No em dashes, side-stripe borders, gradient text, or glassmorphism found in the reviewed files. diff --git a/.brv/context-tree/misc/curated/build.md b/.brv/context-tree/misc/curated/build.md new file mode 100644 index 0000000..3bc46f8 --- /dev/null +++ b/.brv/context-tree/misc/curated/build.md @@ -0,0 +1,24 @@ +--- +title: build +summary: Facts about build +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.352Z' +updatedAt: '2026-05-28T14:00:01.352Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for build + +## Facts +- **build**: `pnpm --filter @caplets/landing build` passed diff --git a/.brv/context-tree/misc/curated/copy.md b/.brv/context-tree/misc/curated/copy.md new file mode 100644 index 0000000..3f4dd22 --- /dev/null +++ b/.brv/context-tree/misc/curated/copy.md @@ -0,0 +1,24 @@ +--- +title: copy +summary: Facts about copy +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.347Z' +updatedAt: '2026-05-28T14:00:01.347Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for copy + +## Facts +- **copy**: No user-visible copy/content changed diff --git a/.brv/context-tree/misc/curated/implementation.md b/.brv/context-tree/misc/curated/implementation.md new file mode 100644 index 0000000..89c68ac --- /dev/null +++ b/.brv/context-tree/misc/curated/implementation.md @@ -0,0 +1,24 @@ +--- +title: implementation +summary: Facts about implementation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.304Z' +updatedAt: '2026-05-28T14:00:01.304Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for implementation + +## Facts +- **implementation**: Implemented integration tab SSR ARIA fix. diff --git a/.brv/context-tree/misc/curated/index_astro.md b/.brv/context-tree/misc/curated/index_astro.md new file mode 100644 index 0000000..a67a156 --- /dev/null +++ b/.brv/context-tree/misc/curated/index_astro.md @@ -0,0 +1,24 @@ +--- +title: index.astro +summary: Facts about index.astro +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.307Z' +updatedAt: '2026-05-28T14:00:01.307Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for index.astro + +## Facts +- **index.astro**: Changed file apps/landing/src/pages/index.astro diff --git a/.brv/context-tree/misc/curated/js_initialization.md b/.brv/context-tree/misc/curated/js_initialization.md new file mode 100644 index 0000000..dfc7868 --- /dev/null +++ b/.brv/context-tree/misc/curated/js_initialization.md @@ -0,0 +1,24 @@ +--- +title: JS initialization +summary: Facts about JS initialization +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.314Z' +updatedAt: '2026-05-28T14:00:01.314Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for JS initialization + +## Facts +- **JS initialization**: JS adds tablist/tab/panel roles and ARIA state through selectAgentTab diff --git a/.brv/context-tree/misc/curated/navigation.md b/.brv/context-tree/misc/curated/navigation.md new file mode 100644 index 0000000..0e7196d --- /dev/null +++ b/.brv/context-tree/misc/curated/navigation.md @@ -0,0 +1,24 @@ +--- +title: navigation +summary: Facts about navigation +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.341Z' +updatedAt: '2026-05-28T14:00:01.342Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for navigation + +## Facts +- **navigation**: Click and keyboard navigation remain intact diff --git a/.brv/context-tree/misc/curated/none.md b/.brv/context-tree/misc/curated/none.md new file mode 100644 index 0000000..9ec3410 --- /dev/null +++ b/.brv/context-tree/misc/curated/none.md @@ -0,0 +1,24 @@ +--- +title: none +summary: Facts about none +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.354Z' +updatedAt: '2026-05-28T14:00:01.354Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for none + +## Facts +- **none**: Open risks/questions: None diff --git a/.brv/context-tree/misc/curated/panel_visibility.md b/.brv/context-tree/misc/curated/panel_visibility.md new file mode 100644 index 0000000..cafdbab --- /dev/null +++ b/.brv/context-tree/misc/curated/panel_visibility.md @@ -0,0 +1,24 @@ +--- +title: panel visibility +summary: Facts about panel visibility +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.330Z' +updatedAt: '2026-05-28T14:00:01.330Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for panel visibility + +## Facts +- **panel visibility**: Inactive panels are hidden after initialization diff --git a/.brv/context-tree/misc/curated/ssr_semantics.md b/.brv/context-tree/misc/curated/ssr_semantics.md new file mode 100644 index 0000000..e1dc47b --- /dev/null +++ b/.brv/context-tree/misc/curated/ssr_semantics.md @@ -0,0 +1,24 @@ +--- +title: SSR semantics +summary: Facts about SSR semantics +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.310Z' +updatedAt: '2026-05-28T14:00:01.310Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for SSR semantics + +## Facts +- **SSR semantics**: Removed SSR tab pattern semantics from integration controls and panels: no role="tablist", no role="tab", no aria-selected, no aria-controls for tabs, no roving tabindex, no role="tabpanel", no aria-labelledby on panels diff --git a/.brv/context-tree/misc/curated/task.md b/.brv/context-tree/misc/curated/task.md new file mode 100644 index 0000000..f6a6c21 --- /dev/null +++ b/.brv/context-tree/misc/curated/task.md @@ -0,0 +1,24 @@ +--- +title: task +summary: Facts about task +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.297Z' +updatedAt: '2026-05-28T14:00:01.297Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for task + +## Facts +- **task**: Status: DONE diff --git a/.brv/context-tree/misc/curated/typecheck.md b/.brv/context-tree/misc/curated/typecheck.md new file mode 100644 index 0000000..ecc3a50 --- /dev/null +++ b/.brv/context-tree/misc/curated/typecheck.md @@ -0,0 +1,24 @@ +--- +title: typecheck +summary: Facts about typecheck +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-28T14:00:01.349Z' +updatedAt: '2026-05-28T14:00:01.349Z' +--- +## Reason +Curated extracted facts from context + +## Raw Concept +**Task:** +Curate extracted facts + +**Timestamp:** 2026-05-28T14:00:01.291Z + +## Narrative +### Highlights +Extracted 1 facts for typecheck + +## Facts +- **typecheck**: `pnpm --filter @caplets/landing typecheck` passed