From 500b6c4dfbeaa8e753044e6206f2320195f45eee Mon Sep 17 00:00:00 2001 From: Alejandro <23019072+iamcapote@users.noreply.github.com> Date: Sun, 14 Jun 2026 21:27:47 +0000 Subject: [PATCH 1/8] Refactor initialization protocols and templates; update Tailwind config, add ESLint config, and improve project structure - Removed unused screen configurations from Tailwind CSS setup. - Revised dry run, minimal, server, agent, and development project initialization protocols for clarity and specificity. - Added new templates for agent and development project initialization. - Introduced a script to validate required fields in template files. - Created ESLint configuration for TypeScript and React. - Added .gitignore to exclude unnecessary files and directories. - Updated Vite configuration to remove unused plugins. - Added a favicon SVG file for branding. --- .gitignore | 28 + PRD.md | 158 +- README.md | 120 +- eslint.config.js | 50 + index.html | 7 +- init.md | 438 +-- package-lock.json | 2691 ++++------------- package.json | 19 +- public/favicon.svg | 4 + scripts/check-templates.mjs | 61 + src/App.tsx | 48 +- src/ErrorFallback.tsx | 4 +- src/components/layout/AppHeader.tsx | 63 +- src/components/sections/HeroSection.tsx | 93 +- src/components/tabs/ContextTab.tsx | 515 +--- src/components/tabs/GuideTab.tsx | 317 +- src/components/tabs/OverviewTab.tsx | 395 +-- src/components/tabs/TemplatesTab.tsx | 201 +- src/data/templates.ts | 300 +- src/index.css | 131 +- src/main.tsx | 1 - src/prd.md | 128 +- tailwind.config.js | 5 - templates/agent_init_protocol.md | 126 + .../development_project_init_protocol.md | 124 + templates/dry_run_init_protocol.md | 150 +- templates/minimal_init_protocol.md | 131 +- templates/server_init_protocol.md | 277 +- vite.config.ts | 8 +- 29 files changed, 2487 insertions(+), 4106 deletions(-) create mode 100644 .gitignore create mode 100644 eslint.config.js create mode 100644 public/favicon.svg create mode 100644 scripts/check-templates.mjs create mode 100644 templates/agent_init_protocol.md create mode 100644 templates/development_project_init_protocol.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..0ebb44de1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +node_modules/ + +# Local editor settings +.vscode/ +.idea/ + +# Build output and caches +dist/ +*.tsbuildinfo +coverage/ +.cache/ +.turbo/ + +# Environment and local overrides +.env +.env.* +!.env.example + +# Package manager state +.npm/ +.pnpm-store/ +yarn-error.log* +pnpm-debug.log* +npm-debug.log* + +# Logs and OS files +*.log +.DS_Store diff --git a/PRD.md b/PRD.md index bd3e55690..4cbc8d5bd 100644 --- a/PRD.md +++ b/PRD.md @@ -1,86 +1,116 @@ -# init.md — Minimal initialization blueprints for agents +# init.md — General Operational Initialization Protocol PRD -A lightweight, GitHub Pages–friendly repository providing initialization protocols for AI agents to transition from cold start to ready state. +## Product Definition -**Experience Qualities:** -1. **Minimal** — Smallest viable footprint with zero dependencies beyond GitHub Pages -2. **Structured** — Machine-readable protocols that agents can parse and execute systematically -3. **Practical** — Real-world templates that users can immediately clone and adapt +`init.md` is a human- and machine-readable procedure for inspecting a target, determining what it requires, applying the appropriate initialization pattern, validating the result, and reporting its operational state. -**Complexity Level**: Content Showcase (information-focused) -This is primarily a documentation site showcasing initialization protocols and templates, with light interactive features for template browsing. +The repository provides the canonical general protocol, target-specific templates, and a static website for browsing and copying those templates. -## Essential Features +## Scope -**Template Gallery with Interactive Preview** -- Functionality: Carousel showcasing multiple init protocol templates for different contexts -- Purpose: Allow users to quickly compare and select appropriate templates for their systems -- Trigger: User visits landing page or clicks template navigation -- Progression: Browse templates → preview content → copy template → customize for system -- Success criteria: Users can easily identify and copy relevant templates +This version focuses on broad target initialization. A target may be a software project, repository, AI agent, server, service, workspace, research environment, data pipeline, application, tool, local directory, remote environment, or existing system requiring restoration or reconfiguration. -**GitHub Pages Integration** -- Functionality: Automatically deploy documentation site from repository content -- Purpose: Provide human-readable access to init protocols alongside machine-readable files -- Trigger: Repository updates trigger automatic GitHub Pages deployment -- Progression: Code commit → GitHub Actions → Pages deployment → live site update -- Success criteria: Site updates automatically when repository content changes +The project does not provide a backend, database, account system, hosted execution runtime, or automatic target execution in this version. -**Machine-Readable Protocol Structure** -- Functionality: Consistent YAML-like structure that agents can parse and execute -- Purpose: Enable agents to systematically execute initialization sequences -- Trigger: Agent reads init.md file during startup sequence -- Progression: Agent parses structure → validates steps → executes initialization → reports ready state -- Success criteria: Agents can reliably parse and execute protocols without human intervention +## Core Model -## Edge Case Handling +The root protocol determines the initialization process: -- **Missing templates**: Fallback to minimal protocol if specific template unavailable -- **GitHub Pages failures**: Static files remain accessible even if dynamic features break -- **Large repositories**: Templates remain lightweight regardless of hosting repository size -- **Version conflicts**: Templates include version compatibility notes and migration guides +1. Inspect what exists. +2. Determine what is needed. +3. Create what applies. +4. Configure what is required. +5. Validate the result. +6. Report what became operational. -## Design Direction +Templates define concrete initialization patterns for specific targets and modes. Target-specific requirements belong in templates rather than the root protocol. -The design should feel professional and trustworthy while maintaining extreme simplicity — think technical documentation that feels approachable rather than intimidating, with clean typography and generous whitespace that helps users quickly scan and understand complex initialization procedures. +## Template-Driven Specialization -## Color Selection +The repository includes these canonical templates: -Analogous color scheme using cool blues and grays to convey technical reliability and trust, with subtle green accents for success states and completion indicators. +- Minimal initialization. +- Dry-run initialization. +- Development-project initialization. +- Agent initialization. +- Server initialization. -- **Primary Color**: Deep blue (`oklch(0.3 0.15 240)`) — conveys technical authority and reliability -- **Secondary Colors**: Light gray (`oklch(0.95 0.02 240)`) for backgrounds and subtle blue-gray (`oklch(0.7 0.05 240)`) for secondary text -- **Accent Color**: Success green (`oklch(0.65 0.15 140)`) for completion states and positive actions -- **Foreground/Background Pairings**: - - Primary (Deep Blue): White text (`oklch(1 0 0)`) - Ratio 8.2:1 ✓ - - Secondary Gray: Dark gray text (`oklch(0.2 0 0)`) - Ratio 15.1:1 ✓ - - Accent (Success Green): White text (`oklch(1 0 0)`) - Ratio 5.8:1 ✓ - - Background White: Primary blue text - Ratio 8.2:1 ✓ +Templates declare metadata for name, target, purpose, mode, likely created artifacts, configured elements, validation checks, and optional outputs. Metadata describes likely behavior and does not force universal output creation. -## Font Selection +## Conditional Artifact Generation -Typography should emphasize clarity and scannability for technical documentation — Inter for its excellent readability at all sizes and Fira Code for code blocks to ensure perfect monospace alignment. +Generated files are conditional. No output file is universally required except where the selected template or target requires it. -- **Typographic Hierarchy**: - - H1 (Page Title): Inter Bold/32px/tight letter spacing - - H2 (Section Headers): Inter Semibold/24px/normal spacing - - H3 (Subsections): Inter Medium/18px/normal spacing - - Body Text: Inter Regular/16px/relaxed line height (1.6) - - Code Blocks: Fira Code Regular/14px/1.4 line height - - Navigation: Inter Medium/14px/normal spacing +Examples: -## Animations +- Generate a README only when project documentation is missing or inadequate. +- Generate a PRD only when product requirements need to be established. +- Generate `AGENTS.md` only when agent operation applies. +- Generate a snapshot only when a point-in-time record is useful. +- Generate a server report only for server or infrastructure targets. -Subtle functional animations that guide attention without being distracting — think gentle fades for template switching and smooth scrolling for navigation, maintaining a professional tone that doesn't call attention to itself. +## Canonical Markdown Source -- **Purposeful Meaning**: Smooth transitions between templates communicate progression and system responsiveness -- **Hierarchy of Movement**: Template carousel gets priority for animation, while navigation and page transitions use minimal motion +The Markdown files under `templates/` are the canonical source of template content. The website imports those Markdown files directly with Vite raw imports. -## Component Selection +The template browser must: -- **Components**: Cards for template previews, Tabs for template navigation, Code blocks with syntax highlighting, Breadcrumbs for section navigation -- **Customizations**: Custom template carousel component with next/previous navigation, enhanced code blocks with copy-to-clipboard functionality -- **States**: Hover states for templates, active states for navigation, loading states for template content -- **Icon Selection**: Phosphor icons for navigation (CaretLeft/Right for carousel, Copy for clipboard, CheckCircle for completion) -- **Spacing**: Consistent 1rem base spacing with 2rem section gaps and 0.5rem component internal padding -- **Mobile**: Stacked template cards on mobile with swipe navigation, collapsible navigation menu, single-column layout with full-width code blocks \ No newline at end of file +- render content from the canonical Markdown files; +- parse and display template metadata; +- provide source links to each Markdown file; +- copy the exact canonical Markdown content, including metadata; +- avoid storing complete template bodies as TypeScript strings. + +The build runs a template integrity check that verifies the expected template files and metadata fields exist. + +## Website Requirements + +The website is a static Vite and React application deployed through GitHub Pages. It preserves the template browser, copy-to-clipboard behavior, and the Overview, Protocol, Templates, and Guide structure. + +The public interface should communicate: + +- `init.md` is not one fixed scaffold; +- the six-stage initialization process; +- the relationship between the root protocol and templates; +- conditional generated outputs; +- target-specific agent instructions; +- BIThub as the discussion and contribution destination. + +## BITwiki And BIThub Integration + +The visual and editorial system should align with the BITwiki ecosystem through strong black, white, and neutral structure, high-contrast typography, geometric protocol surfaces, restrained accents, and precise technical language. + +Required public links: + +- GitHub repository: +- BIThub forum: +- BIThub Guides: +- BITwiki: + +BIThub is presented as the place to discuss the protocol, ask questions, share templates, propose improvements, and report implementation experiences. + +## Deployment + +GitHub Pages remains the public interface. The existing deploy workflow builds the Vite site and uploads the `dist` artifact to Pages. + +## Non-Goals + +- No new framework. +- No backend service. +- No database. +- No account system. +- No hosted execution runtime. +- No universal production server checklist in the root protocol. +- No universal requirement to generate README, PRD, snapshot, context, task, server, or agent files. + +## Acceptance Criteria + +- Root `init.md` is target-neutral and follows Inspect, Determine, Create, Configure, Validate, Report. +- Server-specific checks live in the server template. +- Existing minimal, server, and dry-run template concepts are preserved and corrected. +- Development-project and agent templates exist. +- Templates include metadata and optional outputs. +- The website renders canonical Markdown template files and copies exact source content. +- GitHub, BIThub, Guides, and BITwiki links are visible. +- README and PRD describe the corrected model. +- Production build succeeds without adding a backend or execution runtime. \ No newline at end of file diff --git a/README.md b/README.md index 42eeaa339..e8987e545 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,106 @@ -# init.md — Agent initialization blueprints +# init.md -This repository provides minimal, production-friendly initialization protocols for AI agents. It serves both humans (via GitHub Pages) and agents (via machine-readable protocol files). +`init.md` is a human- and machine-readable procedure for inspecting a target, determining what it requires, applying the appropriate initialization pattern, validating the result, and reporting its operational state. -## Structure +It is not one fixed scaffold. The canonical file defines the general initialization procedure. Templates specialize that procedure for specific targets. -- **`init.md`** — The canonical, minimal initialization protocol -- **`templates/`** — Ready-to-copy template variants for different contexts -- **GitHub Pages Site** — Human-readable documentation and template browser +## 1. Definition -## Templates +Use `init.md` when a target needs to become operational. A target may be a software project, repository, AI agent, server, service, workspace, research environment, data pipeline, application, tool, local directory, remote environment, or existing system requiring restoration or reconfiguration. -- **`minimal_init_protocol.md`** — Smallest possible initialization -- **`server_init_protocol.md`** — Production server initialization -- **`dry_run_init_protocol.md`** — Safe rehearsal mode +## 2. How It Works -## Usage +The root protocol stays general. It identifies the target, chooses or adapts an initialization pattern, creates and configures only what applies, validates the intended result, and reports the operational state. -1. **For Agents**: Read and parse `init.md` or template files directly -2. **For Humans**: Visit the GitHub Pages site for documentation and template browser -3. **For Developers**: Copy templates and customize for your specific system architecture +Templates provide concrete patterns for common target categories. They describe likely behavior, not mandatory output bundles. -## GitHub Pages Setup +## 3. Six-Stage Initialization Process -1. Fork this repository -2. Go to Settings → Pages → Source: Deploy from branch -3. Select `main` branch and `/ (root)` folder -4. Your documentation site will be available at `https://yourusername.github.io/init-md/` +1. Inspect what exists. +2. Determine what is needed. +3. Create what applies. +4. Configure what is required. +5. Validate the result. +6. Report what became operational. -## Principles +## 4. General Protocol Versus Templates -- **Lean footprint**: Vite + React build that deploys cleanly to GitHub Pages -- **Structured**: Machine-readable protocols that agents can parse systematically -- **Practical**: Templates are ready to copy into production workflows without extra scaffolding +- `init.md` defines the target-neutral procedure. +- `templates/` contains target-specific initialization patterns. +- Generated outputs are conditional. +- Validation is derived from the target. +- Existing work should be adapted before creating replacements. -## Core dependencies +No output file is universally required except where the selected template or target requires it. -- React 19 and Vite 6 for the static site build -- Tailwind CSS 4 with Radix UI for styling primitives -- `@phosphor-icons/react` and shared UI components for consistent visuals +## 5. Available Templates -## License +- `templates/minimal_init_protocol.md` — smallest reasonable initialization pattern for narrow gaps. +- `templates/dry_run_init_protocol.md` — no-change inspection and proposed initialization plan. +- `templates/development_project_init_protocol.md` — software projects, repositories, apps, packages, CLIs, websites, and monorepos. +- `templates/agent_init_protocol.md` — agent instructions, tools, prompts, state, and startup validation. +- `templates/server_init_protocol.md` — server, service host, infrastructure, and deployment readiness. -MIT License. Adapt freely to your environment and policies. +Each template includes metadata for likely targets, modes, created artifacts, configured elements, validation checks, and optional outputs. -## Credits +## 6. Usage For Agents -Inspired by [openai/agents.md](https://github.com/openai/agents.md), adapted for lightweight GitHub Pages deployment focused on initialization protocols. \ No newline at end of file +Agents can read the root protocol or a selected template directly. During inspection, determine whether agent instructions are applicable. Create `AGENTS.md` only when agent operation applies and valid target-specific instructions do not already exist. + +Different projects should have different `AGENTS.md` files. Different targets should have different `init.md` implementations. + +## 7. Usage For Humans + +1. Identify the target and intended operational result. +2. Choose the closest template. +3. Copy or adapt the template. +4. Run the procedure in active, dry-run, repair, or reinitialize mode. +5. Review the validation result. +6. Keep the resulting target-specific `init.md` with the target. + +Example instructions: + +```text +Initialize this repository using the development-project template. +Inspect this server using the server template in dry-run mode. +Determine what this agent workspace needs to become operational. +Create an AGENTS.md file only if this project would benefit from one. +``` + +## 8. Usage For Developers + +This repository preserves a static Vite and React website for browsing templates and copying canonical Markdown content. + +Common commands: + +```bash +npm install +npm run dev +npm run build +``` + +The build runs `scripts/check-templates.mjs` before compiling the site. That check verifies the expected template files exist and contain the required metadata fields. + +## 9. Website + +The public site is deployed with GitHub Pages from the existing Vite build. It renders the Markdown files under `templates/` as the canonical source and keeps copy-to-clipboard behavior for exact template content. + +Repository: + +## 10. BIThub Discussion And Guides + +Use BIThub to discuss the protocol, ask questions, share templates, propose improvements, and report implementation experiences. + +- BIThub forum: +- BIThub Guides: +- BITwiki: + +## 11. Contributing + +Contributions should preserve the distinction between the general protocol and target-specific templates. Avoid adding universal requirements to the root protocol when they belong in a template. + +When updating templates, keep the Markdown files canonical and maintain their metadata fields. + +## 12. License + +MIT License. See `LICENSE`. \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..2fa88e2b9 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,50 @@ +import js from "@eslint/js" +import reactHooks from "eslint-plugin-react-hooks" +import reactRefresh from "eslint-plugin-react-refresh" +import globals from "globals" +import tseslint from "typescript-eslint" + +export default tseslint.config( + { + ignores: ["dist", "node_modules"], + }, + js.configs.recommended, + ...tseslint.configs.recommended, + { + files: ["**/*.{ts,tsx}"], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + "react-hooks": reactHooks, + "react-refresh": reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + "@typescript-eslint/no-explicit-any": "off", + "react-refresh/only-export-components": ["warn", { allowConstantExport: true }], + }, + }, + { + files: ["*.config.js", "scripts/**/*.mjs", "tailwind.config.js"], + languageOptions: { + globals: globals.node, + }, + }, + { + files: ["src/components/ui/**/*.{ts,tsx}"], + rules: { + "@typescript-eslint/no-unused-vars": "off", + "react-hooks/purity": "off", + "react-hooks/set-state-in-effect": "off", + "react-refresh/only-export-components": "off", + }, + }, + { + files: ["src/hooks/use-mobile.ts"], + rules: { + "react-hooks/set-state-in-effect": "off", + }, + }, +) \ No newline at end of file diff --git a/index.html b/index.html index aa47e1aac..322ad6fc7 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,12 @@ - Vite React App + + + init.md — General Operational Initialization Protocol
diff --git a/init.md b/init.md index 2e49384a7..afd278cbb 100644 --- a/init.md +++ b/init.md @@ -1,187 +1,251 @@ -# init.md — Minimal Initialization Protocol - -**Audience** -- Humans: understand what this is and how to adapt it safely. -- Agents: parse this structure to move from cold start to "READY" with minimal side effects. - -**Conventions** -- `description`: human-readable explanation -- `command`: a safe, minimal shell probe (optional; prefer safer alternatives) -- `action`: a conceptual step the agent performs internally -- `policy`: a guardrail or constraint that must be followed -- `source`: canonical reference for verification or traceability -- `output_path`: target path for generated artifacts (never raw secrets) -- `await_instructions`: whether to pause for operator input - -## INIT_SEQUENCE - -### HOST_PREFLIGHT -Establish a basic understanding of the host and clock alignment without mutating the system. - -**Steps:** -- **Description**: Note OS family and kernel; ensure basic toolchain compatibility. - - **Action**: Read /etc/os-release and os.release() via safe file reads or APIs. - - **Source**: OS_INFO - -- **Description**: Confirm time coherence (NTP/clock drift) for consistent logs and metrics. - - **Action**: Inspect prior timing notes or safe system time APIs (no privileged writes). - - **Source**: SYSTEM_TIME_INFO - -### RESOURCE_BASELINE -Draft a provisional resource profile to guide conservative concurrency. - -**Steps:** -- **Description**: Capture approximate CPU cores, memory, storage headroom. - - **Action**: Gather from safe APIs or cached diagnostics; avoid invasive polling. - - **Source**: SYSTEM_HARDWARE_METRICS - -- **Description**: Flag potential bottlenecks (disk saturation, elevated load). - - **Action**: Set soft thresholds for warnings; do not enforce limits here. - - **Source**: SYSTEM_PERFORMANCE_METRICS - -### TOOL_DISCOVERY_AND_API_POLICY -Enumerate available tools/adapters and state strict routing policies. - -**Steps:** -- **Description**: Load tool registry/capability matrix if present. - - **Action**: Parse a tool schema file into memory (if available). - - **Source**: TOOL_SCHEMA - -- **Description**: Enforce API routing rules to maintain safety and provenance. - - **Policy**: - - Web search must use the designated search adapter. - - REST calls must use approved HTTP clients/infrastructure modules. - - Do not proxy REST via generic web fetchers not designed for it. - - Prefer dedicated file tools for reading large or varied file types. - - **Source**: API_ROUTING_POLICY - -### SECRET_MANAGEMENT -Handle credentials securely; never hardcode secrets or read from arbitrary files. - -**Steps:** -- **Description**: Retrieve credentials via a vault or approved secret manager. - - **Action**: Load secrets into memory only; do not write to disk; no .env mutation at runtime. - - **Source**: SECURE_VAULT - -- **Description**: Confirm private key and secret storage permissions (conceptually if needed). - - **Action**: Validate intended permission posture; log discrepancies for remediation. - - **Source**: SECRET_STORAGE_PERMISSIONS - -### NETWORK_SECURITY -Understand intended firewall posture and scanning plans; avoid active mutations by default. - -**Steps:** -- **Description**: Record which ports/services should be open/closed. - - **Action**: Log planned firewall narrative; do not apply changes here. - - **Source**: FIREWALL_POLICY - -- **Description**: Outline future security scanning cadence and tooling. - - **Action**: Specify scanners (SAST/DAST/dependency audit) and ownership for activation later. - - **Source**: SECURITY_SCANNER_PLAN - -### CONTEXT_LOADING -Prime memory with configuration, docs, and project context. - -**Steps:** -- **Description**: Identify and list context files (md/json/yml) and their purposes. - - **Action**: Build an in-memory index; avoid loading large binaries. - - **Source**: FILE_SYSTEM_SCAN - -- **Description**: Load essential configs/prompts/docs into a fast in-memory map. - - **Action**: Parse select files into a structured cache; skip raw secrets. - - **Source**: PARSED_CONTEXT_FILES - -- **Description**: Persist the context map for quick restoration if permitted. - - **Action**: Serialize context summary (not raw contents) to a snapshot file. - - **Output Path**: ./cache/context.snapshot.json - - **Source**: SERIALIZED_CONTEXT_MAP - -- **Description**: Inventory key scripts/utilities for operational awareness. - - **Action**: List notable scripts and their intended roles. - - **Source**: SCRIPT_INVENTORY - -### CODE_GOVERNANCE_AND_STATE -Reinforce auditability and data hygiene. - -**Steps:** -- **Description**: Capture semantic diffs for any code mutations. - - **Policy**: Append diffs to ./logs/code_history/.patch when changes occur. - - **Source**: VERSION_CONTROL_POLICY - -- **Description**: Protect templates and historical scripts. - - **Policy**: Deletions require an explicit purge flag acknowledged by the operator. - - **Source**: CODE_RETENTION_POLICY - -- **Description**: Plan backup strategy for data directories. - - **Action**: Define sync flow to backup target; defer execution until approved. - - **Source**: BACKUP_STRATEGY - -- **Description**: Plan cache hygiene. - - **Action**: Age-out files older than 7 days; confirm before enabling in production. - - **Source**: CACHE_POLICY - -- **Description**: Plan telemetry/logging fan-out. - - **Action**: Describe how logs will forward to centralized sinks when configured. - - **Source**: CENTRALIZED_LOGGING_PLAN - -### STARTUP_VALIDATION_AND_ROLLBACK -Define diagnostics and READY/ROLLBACK signals. - -**Steps:** -- **Description**: List lint/test/static analysis to run before READY. - - **Action**: Document commands and pass criteria; do not run by default. - - **Source**: DIAGNOSTIC_CHECKLIST - -- **Description**: Define the READY signal and rollback triggers. - - **Action**: Specify log format and any state file changes for READY vs. ROLLBACK. - - **Source**: SYSTEM_READINESS_SIGNAL - -### SELF_PRIMING_AND_CONTEXTUALIZATION -Load core directives, prompts, and recent memory to ground behavior. - -**Steps:** -- **Description**: Read core directives and instance/system prompts. - - **Action**: Load directives and system overview docs into working memory. - - **Source**: CORE_AND_PROMPTS - -- **Description**: Engage cognitive recall of recent, high-salience interactions. - - **Action**: Query memory adapters to assemble a current situational vector. - - **Source**: INTERNAL_MEMORY_RETRIEVAL - -- **Description**: Confirm priming complete and await commands. - - **Action**: Log completion and enter ACCEPTING state. - - **Source**: SELF_PRIMING_STATUS - -## MINIMUM_RUNTIME_CONTEXT_LOAD - -Essential elements that should be present in working memory for baseline operation: - -- Host metadata (CPU cores, RAM, IP, GPU) from cached metrics files if available. -- Tool capability matrix (if applicable). -- Core directives and system prompts. -- Key scripts and docs index (paths + purposes, not raw contents). -- Recent log excerpt or last-run context (if present). -- Version history patches (for auditability). -- Snapshot of context state (sanitized summary). - -## EXECUTION_START - -Produce a concise, machine-readable snapshot and announce readiness. - -**Steps:** -- **Description**: Generate a snapshot with directory overview, metrics table, and context locations. - - **Action**: Create a Markdown file summarizing the environment and context (no raw contents). - - **Output File**: ./INIT_CONTEXT_SNAPSHOT.md - - **Content Structure**: - - Directory tree (depth 3, omit hidden/system dirs) with purposes. - - Metrics table: hostname, uptime, CPU cores, RAM, GPU presence, disk free %, load avg (5m), IP, timezone, last snapshot time. - - Key context locations (what it is, where it lives, where to learn more). - - **Data Principles**: - - Factual, minimal, human- and machine-readable. - - No secrets, no raw file contents. - - **Source**: SYSTEM_READINESS_REPORT - -- **Description**: Announce snapshot path and READY state. - - **Action**: Print a concise message and await further instructions. - - **Source**: SYSTEM_READINESS_REPORT - - **Await Instructions**: true \ No newline at end of file +# init.md — General Operational Initialization Protocol + +`init.md` is a human- and machine-readable procedure for inspecting a target, determining what it requires, applying the appropriate initialization pattern, validating the result, and reporting its operational state. + +It is not one fixed scaffold. It does not assume that every target is a server, repository, AI agent, application, or development project. Templates provide concrete initialization patterns for specific target types, while this root protocol remains general. + +## 1. Purpose + +Use this protocol to determine what a target needs in order to become operational. + +The target may be new, incomplete, misconfigured, inactive, restored from a previous state, or being started in a new environment. Initialization succeeds when the relevant requirements have been inspected, created or configured when applicable, validated, and reported clearly. + +## 2. Target + +Before selecting an initialization pattern, identify the target without prescribing its type. + +Record: + +- what is being initialized; +- its intended function; +- its current location or environment; +- its expected users or operators; +- its desired operational result; +- any explicit constraints supplied by the user, project, or environment. + +Target examples include software projects, repositories, AI agents, servers, services, workspaces, research environments, data pipelines, applications, tools, local directories, remote environments, and existing systems requiring restoration or reconfiguration. + +## 3. Initialization Modes + +Modes describe how the procedure should behave. A template may support one or more modes, and may define additional modes when useful. + +### Active + +Inspect the target and perform applicable initialization work. + +### Dry run + +Inspect the target, determine requirements, and report proposed work without changing the target. + +### Repair + +Inspect an existing target, identify missing or invalid initialization elements, and correct what applies. + +### Reinitialize + +Re-evaluate an already initialized target after substantial changes to its purpose, environment, dependencies, ownership, or operating model. + +## 4. General Procedure + +Follow the same high-level sequence for every target. The implementation details come from the target and selected template. + +### `INSPECT` + +Determine: + +- what exists; +- what the target appears to be; +- what instructions and configuration already exist; +- what is complete; +- what is missing; +- what is contradictory; +- what can be reused. + +Inspection must be relevant to the target. Do not scan unrelated files, directories, systems, or infrastructure without reason. + +### `DETERMINE` + +Determine: + +- the target's operational requirements; +- which initialization pattern applies; +- which files, directories, dependencies, settings, tools, or services are required; +- which existing artifacts should remain unchanged; +- which outputs are useful; +- what validation is possible. + +The procedure may select one template, combine compatible template sections, or create a target-specific initialization plan. + +### `CREATE` + +Create only what applies to the target and selected initialization pattern. + +Possible outputs include: + +- directories; +- configuration files; +- documentation; +- dependency manifests; +- agent instructions; +- project requirements; +- startup scripts; +- environment examples; +- context files; +- snapshots; +- tests; +- task files; +- data structures; +- service definitions. + +These are examples, not universal requirements. + +### `CONFIGURE` + +Configure required elements so they work together. + +Possible configuration includes: + +- paths; +- runtime settings; +- dependencies; +- scripts; +- services; +- tools; +- environment variables; +- agent instructions; +- file relationships; +- permissions; +- integrations. + +Only configure what the selected target and template require. + +### `VALIDATE` + +Validate that the intended result is operational. + +Validation may include: + +- required files exist; +- configuration parses; +- commands execute; +- services start; +- dependencies resolve; +- tests pass; +- instructions are internally consistent; +- expected outputs can be produced; +- required tools are accessible. + +Validation must be derived from the target. Do not require server diagnostics for non-server targets. Do not declare success without a relevant validation step. + +### `REPORT` + +Report: + +- what target was initialized; +- what was inspected; +- what was created; +- what was configured; +- what was validated; +- what remains incomplete; +- what warnings or blockers remain; +- where the important outputs are located; +- whether the target is operational. + +## 5. Result States + +Use this small general vocabulary unless a template needs to extend it: + +- `OPERATIONAL` +- `OPERATIONAL_WITH_WARNINGS` +- `BLOCKED` +- `DRY_RUN_COMPLETE` + +## 6. Conditional Agent Instructions + +During inspection, determine whether the target will be operated or modified by AI agents. + +When agent instructions are applicable: + +- inspect whether an `AGENTS.md` file already exists; +- preserve valid existing instructions; +- create an `AGENTS.md` file when it would materially improve operation and none exists; +- derive its contents from the actual target; +- do not install one generic `AGENTS.md` into every project; +- do not assume different projects require identical agent instructions. + +Different projects should have different `AGENTS.md` files. Different targets should have different `init.md` implementations. + +## 7. Conditional Outputs + +No output file is universally required except where the selected template or target requires it. + +Examples: + +- Generate a PRD only when product requirements need to be established. +- Generate a snapshot only when a resumable environment or system-state record is useful. +- Generate a README only when project documentation is missing or inadequate. +- Generate an `AGENTS.md` file only when agent operation applies. +- Generate a server report only for server or infrastructure targets. +- Generate a context file only when context must be externalized. +- Generate task files only when actionable work remains. + +The operational artifact vocabulary for this phase includes `INIT.md`, `AGENTS.md`, `SELF.md`, `USER.md`, `TOOLS.md`, `STATE.md`, `PLAN.md`, `SNAPSHOT.md`, and project-specific specifications, configuration, indexes, or validation artifacts. Each artifact remains conditional. + +## 8. Existing Work + +Prefer adaptation over unnecessary replacement. + +The procedure should: + +- preserve relevant existing files; +- update incomplete files when appropriate; +- avoid generating duplicates; +- avoid overwriting substantial user-authored work without clear reason; +- identify conflicts before changing them; +- reuse existing project conventions where possible. + +This is not a restrictive safety framework. It is basic initialization correctness. + +## Conventions + +Use a small, general vocabulary for structured steps: + +- `description` — what the step accomplishes; +- `condition` — when the step applies; +- `inspect` — what must be examined; +- `action` — what should be created or configured; +- `output` — any resulting artifact; +- `validation` — how the result is checked; +- `source` — evidence or input used; +- `status` — resulting operational state. + +Do not require every field in every step. Do not make shell commands the default representation. Templates may provide commands when commands are appropriate. + +## Template System + +Templates are the concrete layer. They specialize the general procedure for a target category, mode, or operating context. + +Each template should declare metadata: + +```yaml +name: +target: +purpose: +mode: +creates: +configures: +validates: +optional_outputs: +``` + +Metadata describes likely behavior. It does not force universal outputs. + +## Final Product Statement + +`init.md` is not one fixed scaffold. + +It is a general procedure for determining what a target needs in order to become operational. + +Templates provide concrete initialization patterns for different targets. + +Inspect what exists. Determine what is needed. Create what applies. Configure what is required. Validate the result. Report what became operational. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 01a835be0..84388e264 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,13 @@ { - "name": "spark-template", + "name": "init.md", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "spark-template", + "name": "init.md", "version": "0.0.0", "dependencies": { - "@github/spark": "^0.46.1", "@heroicons/react": "^2.2.0", "@hookform/resolvers": "^4.1.3", "@octokit/core": "^7.0.6", @@ -17,12 +16,12 @@ "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-aspect-ratio": "^1.1.8", - "@radix-ui/react-avatar": "^1.1.3", + "@radix-ui/react-avatar": "^1.1.11", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-collapsible": "^1.1.3", "@radix-ui/react-context-menu": "^2.2.16", "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-dropdown-menu": "^2.1.6", + "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-hover-card": "^1.1.15", "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-menubar": "^1.1.16", @@ -41,7 +40,6 @@ "@radix-ui/react-toggle-group": "^1.1.11", "@radix-ui/react-tooltip": "^1.2.8", "@tailwindcss/container-queries": "^0.1.1", - "@tailwindcss/vite": "^4.2.1", "@tanstack/react-query": "^5.96.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -55,9 +53,9 @@ "marked": "^18.0.2", "next-themes": "^0.4.6", "octokit": "^5.0.5", - "react": "^19.2.6", + "react": "19.2.7", "react-day-picker": "^10.0.1", - "react-dom": "^19.2.3", + "react-dom": "19.2.7", "react-error-boundary": "^6.1.2", "react-hook-form": "^7.77.0", "react-resizable-panels": "^4.11.2", @@ -73,9 +71,9 @@ "devDependencies": { "@eslint/js": "^10.0.1", "@tailwindcss/postcss": "^4.2.2", + "@tailwindcss/vite": "^4.3.1", "@types/react": "^19.2.15", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.2", "@vitejs/plugin-react-swc": "^4.3.1", "eslint": "^10.1.0", "eslint-plugin-react-hooks": "^7.1.1", @@ -84,7 +82,7 @@ "tailwindcss": "^4.1.18", "typescript": "~6.0.3", "typescript-eslint": "^8.59.1", - "vite": "^7.3.1" + "vite": "^8.0.16" }, "workspaces": { "packages": [ @@ -349,420 +347,38 @@ "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", "license": "MIT" }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, "license": "MIT", "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, "license": "MIT", "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, "license": "MIT", "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "tslib": "^2.4.0" } }, "node_modules/@eslint-community/eslint-utils": { @@ -921,21 +537,6 @@ "version": "0.2.9", "license": "MIT" }, - "node_modules/@github/spark": { - "version": "0.46.1", - "resolved": "https://registry.npmjs.org/@github/spark/-/spark-0.46.1.tgz", - "integrity": "sha512-OZbeyfl3PHZUSMHx5lpKTvUaSUoIQV0NWqMCEeE+s/mjRMhb4HBidHvxMYDB3ChPrMawyRIwaYjNzemITKKKvA==", - "license": "MIT", - "dependencies": { - "body-parser": "^1.20.3", - "express": "^5.2.0", - "octokit": "^5.0.3" - }, - "peerDependencies": { - "react": "^19.0.0", - "vite": "^7.0.0 || ^6.4.1" - } - }, "node_modules/@heroicons/react": { "version": "2.2.0", "license": "MIT", @@ -1013,6 +614,7 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -1023,6 +625,7 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1031,6 +634,7 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1040,18 +644,39 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, "node_modules/@octokit/app": { "version": "16.1.2", "resolved": "https://registry.npmjs.org/@octokit/app/-/app-16.1.2.tgz", @@ -1360,6 +985,16 @@ "node": ">= 20" } }, + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, "node_modules/@phosphor-icons/react": { "version": "2.1.10", "resolved": "https://registry.npmjs.org/@phosphor-icons/react/-/react-2.1.10.tgz", @@ -1761,7 +1396,7 @@ } }, "node_modules/@radix-ui/react-avatar": { - "version": "1.1.3", + "version": "1.1.11", "license": "MIT", "dependencies": { "@radix-ui/react-context": "1.1.1", @@ -3099,7 +2734,7 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.6", + "version": "2.1.16", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.1", @@ -7316,298 +6951,269 @@ "url": "https://opencollective.com/immer" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", - "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", - "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", - "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", - "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", - "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", - "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", - "cpu": [ - "arm64" ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", - "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", - "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", - "cpu": [ - "arm" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", - "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", - "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", - "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", - "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", - "cpu": [ - "loong64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", - "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", - "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", - "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", - "cpu": [ - "riscv64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", - "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", - "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", - "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", - "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", - "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", - "cpu": [ - "arm64" ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", - "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", "cpu": [ - "ia32" + "wasm32" ], + "dev": true, "license": "MIT", "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", - "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", "cpu": [ - "x64" + "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", - "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" }, "node_modules/@standard-schema/spec": { "version": "1.1.0", @@ -7853,280 +7459,19 @@ } }, "node_modules/@tailwindcss/node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", - "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.19.0", - "jiti": "^2.6.1", - "lightningcss": "1.32.0", - "magic-string": "^0.30.21", - "source-map-js": "^1.2.1", - "tailwindcss": "4.2.2" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", + "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.2" } }, "node_modules/@tailwindcss/oxide": { @@ -8449,64 +7794,68 @@ } }, "node_modules/@tailwindcss/vite": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.1.tgz", - "integrity": "sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.1.tgz", + "integrity": "sha512-hItDHuIIlEV61R+faXu66s1K36aTurO/Qw0e45Vskz57gXl9pWOT6eg3zmcEui6CZXddbN7zd41bwmvag4JGwQ==", + "dev": true, "license": "MIT", "dependencies": { - "@tailwindcss/node": "4.2.1", - "@tailwindcss/oxide": "4.2.1", - "tailwindcss": "4.2.1" + "@tailwindcss/node": "4.3.1", + "@tailwindcss/oxide": "4.3.1", + "tailwindcss": "4.3.1" }, "peerDependencies": { - "vite": "^5.2.0 || ^6 || ^7" + "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/node": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz", - "integrity": "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.1.tgz", + "integrity": "sha512-6NDaqRoAMSXD1mr/RXu0HBvNE9a2n5tHPsxu9XHLws8o4Twes5rBM2205SUUiJ9goAtadrN6xTGX0UDEwp/N4A==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.19.0", - "jiti": "^2.6.1", - "lightningcss": "1.31.1", + "enhanced-resolve": "5.21.6", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", - "tailwindcss": "4.2.1" + "tailwindcss": "4.3.1" } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz", - "integrity": "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.1.tgz", + "integrity": "sha512-yVPyo8RNkabVr3O2EhHEE0Rewu7YKzc1DhIqfL46LKveFrmu9XbDazNOJY7/GRuvw1h6u3utWnR29H/p5JPlgA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 20" }, "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.1", - "@tailwindcss/oxide-darwin-arm64": "4.2.1", - "@tailwindcss/oxide-darwin-x64": "4.2.1", - "@tailwindcss/oxide-freebsd-x64": "4.2.1", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.1", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.1", - "@tailwindcss/oxide-linux-x64-musl": "4.2.1", - "@tailwindcss/oxide-wasm32-wasi": "4.2.1", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.1" + "@tailwindcss/oxide-android-arm64": "4.3.1", + "@tailwindcss/oxide-darwin-arm64": "4.3.1", + "@tailwindcss/oxide-darwin-x64": "4.3.1", + "@tailwindcss/oxide-freebsd-x64": "4.3.1", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.1", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.1", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.1", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.1", + "@tailwindcss/oxide-linux-x64-musl": "4.3.1", + "@tailwindcss/oxide-wasm32-wasi": "4.3.1", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.1", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.1" } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz", - "integrity": "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.1.tgz", + "integrity": "sha512-SVlyf61g374l5cHyg8x9kf5xmLcOaxvOTsbsqDnSsDJaKOEFZ7GCvi84VAVGpxojYOs1+3K6M0UjXfqPU8vmOQ==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8517,12 +7866,13 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz", - "integrity": "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.1.tgz", + "integrity": "sha512-hVnWLwv+e/l7c4WKyVtHVrIPvYdqWHjRB3MDIqARynzFtnQg85kmQEFCbV9Ja0VVx4xXTIiDWY60Y7iz/iNoDA==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8533,12 +7883,13 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz", - "integrity": "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.1.tgz", + "integrity": "sha512-Cf7abu0WVgbhU7ANgPUnSAvm7nCvMweusHb8FnaHlLfv/Caq4GYaEZg7ZImzzmjx4lIAfuS8q+eLIS7A7IzxIg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8549,12 +7900,13 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz", - "integrity": "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.1.tgz", + "integrity": "sha512-ZZqzX2Y+GXtXXfqSfpJhDm60OoZfvLHLCgm+J7NVqgHHJjG/m9ugZI77RwTsVd4fnBJuCFP6Ae6kTJb71UdS8g==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8565,12 +7917,13 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz", - "integrity": "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.1.tgz", + "integrity": "sha512-/Ah/xik0LaMYfv9DZ0S/t4pBlBNYOcqtRwusjgovHkvT8ixueWCLyJjsaF5kQIckjb4IT8Q6K6p/iPmZMixYgg==", "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8581,12 +7934,13 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz", - "integrity": "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.1.tgz", + "integrity": "sha512-gqdFoVJlw444GvpnheZLHmvTzSxI/cOUUh2KSNejQjTcYkW062SVD+En0rUgD+QV91bz1XGIGtt1HJd48xUGbQ==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8597,12 +7951,13 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz", - "integrity": "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.1.tgz", + "integrity": "sha512-Bwv9KwOvE0VKa86xPFif9b9c3Y1NxOV1P0gLti/IYaWEsQYZXDlxfGEtA8mdDZ7SG3wyNXAWYT5SIn3giL57oA==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8613,12 +7968,13 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz", - "integrity": "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.1.tgz", + "integrity": "sha512-Ymi8O8T15HYQdOUWUtTI6ldN0neHP85FC+Qz32xTcZ7iJXtem/x8ITev0o1e9e5rkqj4lONZfTRLvkmin1+tKg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8629,12 +7985,13 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz", - "integrity": "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.1.tgz", + "integrity": "sha512-M+P/91qJ6uILLw4k2G93GMDRAXj61SMvFQYt39AqvUqYgExXpLL5aepfns7sj4HiAQeolirQF9E0lzRvdf4zPQ==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8645,9 +8002,9 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz", - "integrity": "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.1.tgz", + "integrity": "sha512-zsM8uOeqvVGHsAXsJxsT28ttosFahLJKCLOTUBqRAtKnVgGSRitds9T432QiT8b77Yga7JIBkulIRRlJPtYhRA==", "bundleDependencies": [ "@napi-rs/wasm-runtime", "@emnapi/core", @@ -8659,85 +8016,29 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.8.1", - "@emnapi/runtime": "^1.8.1", - "@emnapi/wasi-threads": "^1.1.0", - "@napi-rs/wasm-runtime": "^1.1.1", - "@tybys/wasm-util": "^0.10.1", + "@emnapi/core": "^1.10.0", + "@emnapi/runtime": "^1.10.0", + "@emnapi/wasi-threads": "^1.2.1", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", "tslib": "^2.8.1" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { - "version": "1.8.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { - "version": "1.8.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", - "@tybys/wasm-util": "^0.10.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { - "version": "2.8.1", - "inBundle": true, - "license": "0BSD", - "optional": true - }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz", - "integrity": "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.1.tgz", + "integrity": "sha512-aiNvSq9BsVk8V513lDKlrCFAgf8qBMPZTpgEhInL+NwQqs97mYmupVMrPrgBBSL8Pv/0zXu9MrMF9rMun1ZeNg==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8748,12 +8049,13 @@ } }, "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz", - "integrity": "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.1.tgz", + "integrity": "sha512-xDEyu1rg290472FEGaKHnzyDyh5QH+AlWvsU5hMoMtPpzmKlRI0jaYKCgSHDYtaQWZOYbMaduSyCwFwY4n1HmA==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8764,9 +8066,10 @@ } }, "node_modules/@tailwindcss/vite/node_modules/tailwindcss": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz", - "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.1.tgz", + "integrity": "sha512-hk+TB1m+K8CYNrP6rjQaq/Y+4Zylwpa87mLYBKCunwnnQ9p+fHb7kmSfGqyEJoxF/O6CDyABWVFEafNSYKll+Q==", + "dev": true, "license": "MIT" }, "node_modules/@tanstack/query-core": { @@ -8795,6 +8098,17 @@ "react": "^18 || ^19" } }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/aws-lambda": { "version": "8.10.157", "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.157.tgz", @@ -8872,9 +8186,10 @@ "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { @@ -9153,32 +8468,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@vitejs/plugin-react": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", - "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rolldown/pluginutils": "^1.0.0" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", - "babel-plugin-react-compiler": "^1.0.0", - "vite": "^8.0.0" - }, - "peerDependenciesMeta": { - "@rolldown/plugin-babel": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - } - } - }, "node_modules/@vitejs/plugin-react-swc": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.3.1.tgz", @@ -9196,19 +8485,6 @@ "vite": "^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", @@ -9278,57 +8554,6 @@ "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", "license": "Apache-2.0" }, - "node_modules/body-parser": { - "version": "1.20.5", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", - "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.15.1", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/bottleneck": { "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", @@ -9336,9 +8561,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { @@ -9392,44 +8617,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001775", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz", @@ -9489,28 +8676,6 @@ "node": ">= 10" } }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -9518,24 +8683,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "dev": true, @@ -9909,6 +9056,7 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -9940,27 +9088,9 @@ "robust-predicates": "^3.0.2" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-libc": { "version": "2.0.4", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -9970,26 +9100,6 @@ "version": "1.1.0", "license": "MIT" }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.302", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", @@ -10021,60 +9131,22 @@ "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", "license": "MIT", - "peerDependencies": { - "embla-carousel": "8.6.0" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", - "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "embla-carousel": "8.6.0" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/enhanced-resolve": { + "version": "5.21.6", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.6.tgz", + "integrity": "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" }, "engines": { - "node": ">= 0.4" + "node": ">=10.13.0" } }, "node_modules/es-toolkit": { @@ -10087,47 +9159,6 @@ "benchmarks" ] }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -10138,12 +9169,6 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "dev": true, @@ -10335,142 +9360,12 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/express/node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fast-content-type-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", @@ -10517,27 +9412,6 @@ "node": ">=16.0.0" } }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/find-up": { "version": "5.0.0", "dev": true, @@ -10566,19 +9440,12 @@ } }, "node_modules/flatted": { - "version": "3.3.3", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/framer-motion": { "version": "12.6.3", "license": "MIT", @@ -10604,19 +9471,11 @@ } } }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -10627,15 +9486,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -10646,30 +9496,6 @@ "node": ">=6.9.0" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-nonce": { "version": "1.0.1", "license": "MIT", @@ -10677,19 +9503,6 @@ "node": ">=6" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "dev": true, @@ -10714,46 +9527,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "license": "ISC" }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/hermes-estree": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", @@ -10771,26 +9549,6 @@ "hermes-estree": "0.25.1" } }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "license": "MIT", @@ -10829,12 +9587,6 @@ "node": ">=0.8.19" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, "node_modules/input-otp": { "version": "1.4.2", "license": "MIT", @@ -10850,15 +9602,6 @@ "node": ">=12" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "dev": true, @@ -10878,21 +9621,16 @@ "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, "node_modules/isexe": { "version": "2.0.0", "dev": true, "license": "ISC" }, "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -10969,9 +9707,10 @@ } }, "node_modules/lightningcss": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz", - "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" @@ -10984,26 +9723,27 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-android-arm64": "1.31.1", - "lightningcss-darwin-arm64": "1.31.1", - "lightningcss-darwin-x64": "1.31.1", - "lightningcss-freebsd-x64": "1.31.1", - "lightningcss-linux-arm-gnueabihf": "1.31.1", - "lightningcss-linux-arm64-gnu": "1.31.1", - "lightningcss-linux-arm64-musl": "1.31.1", - "lightningcss-linux-x64-gnu": "1.31.1", - "lightningcss-linux-x64-musl": "1.31.1", - "lightningcss-win32-arm64-msvc": "1.31.1", - "lightningcss-win32-x64-msvc": "1.31.1" + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" } }, "node_modules/lightningcss-android-arm64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz", - "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11018,12 +9758,13 @@ } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz", - "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11038,12 +9779,13 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz", - "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11058,12 +9800,13 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz", - "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11078,12 +9821,13 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz", - "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", "cpu": [ "arm" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11098,12 +9842,13 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz", - "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11118,12 +9863,13 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz", - "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11138,12 +9884,13 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz", - "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11158,12 +9905,13 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz", - "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11178,12 +9926,13 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz", - "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11198,12 +9947,13 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz", - "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -11243,87 +9993,33 @@ }, "node_modules/lucide-react": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.7.0.tgz", - "integrity": "sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/marked": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.2.tgz", - "integrity": "sha512-NsmlUYBS/Zg57rgDWMYdnre6OTj4e+qq/JS2ot3KrYLSoHLw+sDu0Nm1ZGpRgYAq6c+b1ekaY5NzVchMCQnzcg==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.7.0.tgz", + "integrity": "sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "node_modules/marked": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.2.tgz", + "integrity": "sha512-NsmlUYBS/Zg57rgDWMYdnre6OTj4e+qq/JS2ot3KrYLSoHLw+sDu0Nm1ZGpRgYAq6c+b1ekaY5NzVchMCQnzcg==", "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" + "bin": { + "marked": "bin/marked.js" }, "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">= 20" } }, "node_modules/minimatch": { @@ -11355,12 +10051,14 @@ }, "node_modules/ms": { "version": "2.1.3", + "dev": true, "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, "funding": [ { "type": "github", @@ -11380,15 +10078,6 @@ "dev": true, "license": "MIT" }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/next-themes": { "version": "0.4.6", "license": "MIT", @@ -11404,18 +10093,6 @@ "dev": true, "license": "MIT" }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/octokit": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/octokit/-/octokit-5.0.5.tgz", @@ -11471,27 +10148,6 @@ "@octokit/core": "^7.0.0" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/optionator": { "version": "0.9.4", "dev": true, @@ -11536,15 +10192,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/path-exists": { "version": "4.0.0", "dev": true, @@ -11561,24 +10208,29 @@ "node": ">=8" } }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/picocolors": { "version": "1.1.1", + "dev": true, "license": "ISC" }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, "funding": [ { "type": "opencollective", @@ -11595,7 +10247,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -11611,19 +10263,6 @@ "node": ">= 0.8.0" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -11634,61 +10273,10 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", - "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11721,15 +10309,15 @@ } }, "node_modules/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.3" + "react": "^19.2.7" } }, "node_modules/react-error-boundary": { @@ -11758,7 +10346,9 @@ } }, "node_modules/react-is": { - "version": "18.3.1", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", "license": "MIT", "peer": true }, @@ -11913,61 +10503,38 @@ "version": "3.0.2", "license": "Unlicense" }, - "node_modules/rollup": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", - "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "node_modules/rolldown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.8" + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" }, "bin": { - "rollup": "dist/bin/rollup" + "rolldown": "bin/cli.mjs" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.5", - "@rollup/rollup-android-arm64": "4.52.5", - "@rollup/rollup-darwin-arm64": "4.52.5", - "@rollup/rollup-darwin-x64": "4.52.5", - "@rollup/rollup-freebsd-arm64": "4.52.5", - "@rollup/rollup-freebsd-x64": "4.52.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", - "@rollup/rollup-linux-arm-musleabihf": "4.52.5", - "@rollup/rollup-linux-arm64-gnu": "4.52.5", - "@rollup/rollup-linux-arm64-musl": "4.52.5", - "@rollup/rollup-linux-loong64-gnu": "4.52.5", - "@rollup/rollup-linux-ppc64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-musl": "4.52.5", - "@rollup/rollup-linux-s390x-gnu": "4.52.5", - "@rollup/rollup-linux-x64-gnu": "4.52.5", - "@rollup/rollup-linux-x64-musl": "4.52.5", - "@rollup/rollup-openharmony-arm64": "4.52.5", - "@rollup/rollup-win32-arm64-msvc": "4.52.5", - "@rollup/rollup-win32-ia32-msvc": "4.52.5", - "@rollup/rollup-win32-x64-gnu": "4.52.5", - "@rollup/rollup-win32-x64-msvc": "4.52.5", - "fsevents": "~2.3.2" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" + "@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" } }, "node_modules/rw": { @@ -11994,57 +10561,6 @@ "semver": "bin/semver.js" } }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, "node_modules/shebang-command": { "version": "2.0.0", "dev": true, @@ -12064,78 +10580,6 @@ "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/sonner": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", @@ -12148,20 +10592,12 @@ }, "node_modules/source-map-js": { "version": "1.2.1", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/tailwind-merge": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", @@ -12179,9 +10615,10 @@ "license": "MIT" }, "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12202,13 +10639,14 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -12221,6 +10659,7 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -12234,18 +10673,6 @@ } } }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/toad-cache": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", @@ -12255,15 +10682,6 @@ "node": ">=12" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/ts-api-utils": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", @@ -12301,40 +10719,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typescript": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", @@ -12383,15 +10767,6 @@ "version": "7.0.2", "license": "ISC" }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -12494,15 +10869,6 @@ "uuid": "dist-node/bin/uuid" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/vaul": { "version": "1.1.2", "license": "MIT", @@ -12537,17 +10903,17 @@ } }, "node_modules/vite": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", + "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" }, "bin": { "vite": "bin/vite.js" @@ -12563,9 +10929,10 @@ }, "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", @@ -12578,13 +10945,16 @@ "@types/node": { "optional": true }, - "jiti": { + "@vitejs/devtools": { "optional": true }, - "less": { + "esbuild": { + "optional": true + }, + "jiti": { "optional": true }, - "lightningcss": { + "less": { "optional": true }, "sass": { @@ -12610,35 +10980,6 @@ } } }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/which": { "version": "2.0.2", "dev": true, @@ -12661,12 +11002,6 @@ "node": ">=0.10.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index 5d4690e33..97eaa7087 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,18 @@ { - "name": "spark-template", + "name": "init.md", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "kill": "fuser -k 5000/tcp", - "build": "tsc -b --noCheck && vite build", + "check:templates": "node scripts/check-templates.mjs", + "build": "npm run check:templates && tsc -b --noCheck && vite build", "lint": "eslint .", "optimize": "vite optimize", "preview": "vite preview" }, "dependencies": { - "@github/spark": "^0.46.1", "@heroicons/react": "^2.2.0", "@hookform/resolvers": "^4.1.3", "@octokit/core": "^7.0.6", @@ -21,12 +21,12 @@ "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-aspect-ratio": "^1.1.8", - "@radix-ui/react-avatar": "^1.1.3", + "@radix-ui/react-avatar": "^1.1.11", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-collapsible": "^1.1.3", "@radix-ui/react-context-menu": "^2.2.16", "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-dropdown-menu": "^2.1.6", + "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-hover-card": "^1.1.15", "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-menubar": "^1.1.16", @@ -45,7 +45,6 @@ "@radix-ui/react-toggle-group": "^1.1.11", "@radix-ui/react-tooltip": "^1.2.8", "@tailwindcss/container-queries": "^0.1.1", - "@tailwindcss/vite": "^4.2.1", "@tanstack/react-query": "^5.96.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -59,9 +58,9 @@ "marked": "^18.0.2", "next-themes": "^0.4.6", "octokit": "^5.0.5", - "react": "^19.2.6", + "react": "19.2.7", "react-day-picker": "^10.0.1", - "react-dom": "^19.2.3", + "react-dom": "19.2.7", "react-error-boundary": "^6.1.2", "react-hook-form": "^7.77.0", "react-resizable-panels": "^4.11.2", @@ -77,9 +76,9 @@ "devDependencies": { "@eslint/js": "^10.0.1", "@tailwindcss/postcss": "^4.2.2", + "@tailwindcss/vite": "^4.3.1", "@types/react": "^19.2.15", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.2", "@vitejs/plugin-react-swc": "^4.3.1", "eslint": "^10.1.0", "eslint-plugin-react-hooks": "^7.1.1", @@ -88,7 +87,7 @@ "tailwindcss": "^4.1.18", "typescript": "~6.0.3", "typescript-eslint": "^8.59.1", - "vite": "^7.3.1" + "vite": "^8.0.16" }, "workspaces": { "packages": [ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 000000000..ad368635a --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/scripts/check-templates.mjs b/scripts/check-templates.mjs new file mode 100644 index 000000000..92feed7eb --- /dev/null +++ b/scripts/check-templates.mjs @@ -0,0 +1,61 @@ +import fs from "node:fs" +import path from "node:path" +import process from "node:process" + +const root = process.cwd() +const templateDir = path.join(root, "templates") + +const expectedTemplates = [ + "minimal_init_protocol.md", + "server_init_protocol.md", + "dry_run_init_protocol.md", + "development_project_init_protocol.md", + "agent_init_protocol.md", +] + +const requiredFields = [ + "name", + "target", + "purpose", + "mode", + "creates", + "configures", + "validates", + "optional_outputs", +] + +let hasError = false + +for (const fileName of expectedTemplates) { + const filePath = path.join(templateDir, fileName) + + if (!fs.existsSync(filePath)) { + console.error(`Missing template file: templates/${fileName}`) + hasError = true + continue + } + + const content = fs.readFileSync(filePath, "utf8") + const frontmatter = content.match(/^---\n([\s\S]*?)\n---/) + + if (!frontmatter) { + console.error(`Missing metadata frontmatter: templates/${fileName}`) + hasError = true + continue + } + + for (const field of requiredFields) { + const hasField = new RegExp(`(^|\\n)${field}:`, "m").test(frontmatter[1]) + + if (!hasField) { + console.error(`Missing metadata field "${field}": templates/${fileName}`) + hasError = true + } + } +} + +if (hasError) { + process.exit(1) +} + +console.log(`Validated ${expectedTemplates.length} canonical template files.`) \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 9684c2fca..994b808bc 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,6 +3,7 @@ * What: Orchestrates the init.md landing experience and coordinates tab routing across sections. * How: Uses feature components for each section and tab to stay maintainable, testable, and reusable. */ +import { useState } from "react" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { AppHeader } from "@/components/layout/AppHeader" import { HeroSection } from "@/components/sections/HeroSection" @@ -10,21 +11,24 @@ import { OverviewTab } from "@/components/tabs/OverviewTab" import { ContextTab } from "@/components/tabs/ContextTab" import { TemplatesTab } from "@/components/tabs/TemplatesTab" import { GuideTab } from "@/components/tabs/GuideTab" +import { Toaster } from "@/components/ui/sonner" function App() { + const [activeTab, setActiveTab] = useState("overview") + return ( -
- - +
+ +
- - + + Overview - Context + Protocol Templates @@ -52,13 +56,35 @@ function App() {
-
-
-
-

Licensed under MIT. Adapt to your environment and policies.

+
+
) } diff --git a/src/ErrorFallback.tsx b/src/ErrorFallback.tsx index adb6a6346..368fba9e2 100644 --- a/src/ErrorFallback.tsx +++ b/src/ErrorFallback.tsx @@ -13,9 +13,9 @@ export const ErrorFallback = ({ error, resetErrorBoundary }) => {
- This spark has encountered a runtime error + init.md has encountered a runtime error - Something unexpected happened while running the application. The error details are shown below. Contact the spark author and let them know about this issue. + Something unexpected happened while running the application. The error details are shown below so the issue can be reported with context. diff --git a/src/components/layout/AppHeader.tsx b/src/components/layout/AppHeader.tsx index 4e790fc02..1287e25d8 100644 --- a/src/components/layout/AppHeader.tsx +++ b/src/components/layout/AppHeader.tsx @@ -1,24 +1,55 @@ -/** - * Why: Split the page header out of `App` so it can be reused across protocol views. - * What: Renders the init.md title block and version badge defined by the canonical protocol docs. - * How: Composes design system primitives to stay consistent with the guidance in `init.md`. - */ -import { Badge } from "@/components/ui/badge" +import { BookOpen, ChatsCircle, GithubLogo, Globe, Stack } from "@phosphor-icons/react" +import { Button } from "@/components/ui/button" -export function AppHeader() { +interface AppHeaderProps { + onSelectTab: (tab: string) => void +} + +export function AppHeader({ onSelectTab }: AppHeaderProps) { return ( -
-
-
+
+
+
+
+ init +
-

init.md

-

Boot AI agents with precision

+

init.md

+

General operational initialization protocol

- - v1.0.0 -
+ +
) -} +} \ No newline at end of file diff --git a/src/components/sections/HeroSection.tsx b/src/components/sections/HeroSection.tsx index e0d551643..65249322f 100644 --- a/src/components/sections/HeroSection.tsx +++ b/src/components/sections/HeroSection.tsx @@ -1,38 +1,67 @@ -/** - * Why: Isolate the hero copy to highlight the init.md mission without bloating the main `App` component. - * What: Displays the positioning statement, value badges, and inspiration references for the protocol catalogue. - * How: Uses the shared UI tokens so future pages can reuse the same introductory treatment. - */ -import { Badge } from "@/components/ui/badge" +import { ArrowRight, BookOpen, ChatsCircle } from "@phosphor-icons/react" +import { Button } from "@/components/ui/button" -export function HeroSection() { +const stages = ["Inspect", "Determine", "Create", "Configure", "Validate", "Report"] + +interface HeroSectionProps { + onSelectTab: (tab: string) => void +} + +export function HeroSection({ onSelectTab }: HeroSectionProps) { return ( -
-
-

From cold start to ready state

-

- Define how your AI agents wake up, validate their environment, and generate essential project files. - Battle-tested initialization protocols eliminate guesswork, establish operational context, and ensure - consistent agent behavior through comprehensive documentation generation. -

-
- - Context engineering - - - Memory priming - - - Auto documentation - - - Production ready - -
-
-

Inspired by Unix init, Python __init__.py, and modern agent architecture patterns

+
+
+
+
+

+ BITwiki open protocol +

+

+ Initialize what the target actually needs. +

+

+ init.md is a general procedure for inspecting a target, determining its operational requirements, + creating and configuring what applies, validating the result, and reporting what became operational. +

+
+ + + +
+
+ +
+
+ {stages.map((stage, index) => ( +
+
+ {String(index + 1).padStart(2, "0")} +
+
+

{stage}

+
+
+ ))} +
+

+ The root protocol determines the process. Templates define target-specific implementation patterns. +

+
) -} +} \ No newline at end of file diff --git a/src/components/tabs/ContextTab.tsx b/src/components/tabs/ContextTab.tsx index fd58cabb9..a6b97100c 100644 --- a/src/components/tabs/ContextTab.tsx +++ b/src/components/tabs/ContextTab.tsx @@ -1,448 +1,133 @@ -/** - * Why: Keep context architecture guidance cohesive while letting `App` focus on layout. - * What: Details how agents combine tools, memory, and orchestration layers alongside complementary artefacts. - * How: Reuses card primitives so future pages or CLIs can surface the same educational content consistently. - */ +import { CheckCircle, GitBranch, Stack } from "@phosphor-icons/react" +import { Badge } from "@/components/ui/badge" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" -import { CheckCircle, Code } from "@phosphor-icons/react" + +const relationships = [ + { + title: "Root protocol", + body: "Defines the general process: inspect, determine, create, configure, validate, and report.", + }, + { + title: "Template", + body: "Specializes the process for a target category such as server, development project, agent, dry run, or minimal initialization.", + }, + { + title: "Generated output", + body: "Exists only when the target or selected template requires it. No output file is universal.", + }, + { + title: "Validation result", + body: "States whether the target is operational, operational with warnings, blocked, or complete as a dry run.", + }, +] + +const conditionalOutputs = [ + "README.md when project documentation is missing or inadequate", + "PRD.md when product requirements need to be established", + "AGENTS.md when agent operation applies", + "SNAPSHOT.md when a point-in-time record is useful", + "Server report only for server or infrastructure targets", + "Task files only when actionable work remains", +] export function ContextTab() { return (
- + - Agent Architecture & Memory Systems - How modern AI agents handle context, memory, and orchestration + The target determines the implementation + + What is order for one target can be irrelevant noise for another. init.md keeps the root procedure general + and moves concrete requirements into templates. + - -

- Modern AI agents operate in layered architectures with three critical components: Tools (capabilities), - Memory (persistent context), and Orchestration (workflow management). The init.md protocol addresses the - foundational layer that enables all three. -

- -
-
-
-
-

Tools Layer

-
-

- Code execution, API calls, file operations, and external integrations. Requires environment context to - function safely. -

-
- -
-
-
-

Memory Layer

-
-

- Retains context from past interactions, user instructions, and task state. Enables agents to resume work - across sessions. -

-
- -
-
-
-

Orchestration Layer

-
-

- Manages complex workflows, tracks task state, and ensures continuity even after system restarts. -

+ + {relationships.map((item) => ( +
+
+ + {item.title} +
+

{item.body}

-
- -
-

Where init.md Fits

-

- The initialization protocol primes all three layers: it establishes tool safety through environment - validation, populates memory with project context and history, and sets up orchestration through clear - state management and rollback procedures. -

-
+ ))} - - - Complementary systems & briefings - How init.md works alongside other agent-facing artefacts - - -
-

AGENTS.md (project briefing)

+
+ + + Adapt before creating + Existing systems are inspected before anything is generated. + +

- Once initialization is complete, contributors and coding agents turn to{" "} - - AGENTS.md - - {" "} - for build, run, and test instructions. It assumes the baseline artefacts and context snapshot already - exist. + The protocol preserves valid existing files, updates incomplete files when appropriate, avoids duplicates, + and identifies conflicts before changing them.

-
-
-

Config-driven kits (e.g., Google ADK)

- Static YAML like{" "} - - root_agent.yaml - - {" "} - defines agent identity and available tools, but it does not inspect the live repository. init.md bridges - that gap with runtime observations and artefact generation. + A substantial README should not be replaced by a template. Existing agent instructions should be preserved + when valid. Local project conventions should shape any new artifacts.

-
-
-

Orchestration platforms

+ + + + + + Validation defines completion + Operational status comes from target-relevant evidence. + +

- Systems like{" "} - - AWS Bedrock AgentCore - - {" "} - coordinate multi-agent lifecycles after launch. They expect each agent to enter with a primed memory and - clearly logged READY/ROLLBACK signals—exactly what init.md supplies. + A development project might validate with a build, lint, test, or documented command review. A server may + validate service status and network readiness. An agent may validate instructions, tools, and startup + expectations.

-
- - +

Do not declare success without a validation step connected to the target's intended result.

+ + +
- + - Framework Comparison - How init.md compares to other agent initialization approaches + Conditional outputs + No output file is universally required except where the selected target or template requires it. -
-
-
-

Config-Driven Agents

-
-

root_agent.yaml

-
-name: assistant_agent
-model: gemini-2.5-flash
-description: Helper agent
-instruction: Answer questions
-                  
-
-

- Static YAML configs define agent identity and tools but don't probe the environment or generate - dynamic documentation. -

+
+ {conditionalOutputs.map((output) => ( +
+ + {output}
- -
-

Multi-Agent Orchestration

-
-

AWS Deep Agents

-

Research Agent → Critique Agent → Orchestrator

-

Uses LangGraph state management and virtual file systems

-
-

- Powerful coordination between running agents but assumes all agents are already initialized and - operational. -

-
-
- -
-

The init.md Difference

-

- While other frameworks focus on agent coordination or static configuration, init.md addresses the - bootstrapping phase itself: probing the host, populating context, checking resources, and - generating documentation before the agent begins any tasks. -

-
+ ))}
- + - CLI-first agent adoption - Terminal agents that benefit directly from a deterministic init sequence + + + Agent instructions are conditional + + AGENTS.md is important when agents operate in a target, but it is not installed everywhere. - -
-
-
- - Claude Code -
-

- Terminal coder with MCP support. Deterministic preflights and READY/ROLLBACK signals plug straight into - its plan → act → react loop. -

- - github.com/anthropics/claude-code - -
-
-
- - Gemini CLI & Qwen Code -
-

- ReAct-style terminal agents with MCP servers. Tool-routing policies in init.md keep adapter usage - consistent across environments. -

- -
-
-
- - GitHub Copilot CLI & Continue -
-

- Both lean on repeatable workspace scaffolds. Pre-declared artefact locations (README, TODO, snapshots) - keep IDE and headless usage aligned. -

- -
-
-
- - Aider, Open Interpreter, OpenHands, Cline -
-

- Local-first or open-source agents that execute shell commands benefit from the context map and - READY/ROLLBACK cues when resuming sessions. -

- -
-
-
-

Why it lands

-

- CLI agents parse init.md once, load the context snapshot, honour the encoded tool-routing policies, and - then loop through actions with reliable READY/ROLLBACK semantics. -

-
-
-
- - - - Startup Sequence & Context Loading - The critical steps that transform a cold agent into an operational system - - -
-
-
-
- 1 -
-

System Probe

-

OS detection, resource baseline, time coherence

-
- -
-
- 2 -
-

Context Load

-

File tree scan, dependency mapping, configuration discovery

-
- -
-
- 3 -
-

Memory Prime

-

Recent logs, core directives, historical context

-
- -
-
- 4 -
-

Generate Docs

-

README, TODO, CONTEXT, operational files

-
-
- -
-

Result: Full Environment Awareness

-

- By indexing key docs and configs into memory at startup, the agent obtains comprehensive knowledge of its - operating environment. This eliminates the need for repeated discovery and ensures consistent behavior - across sessions. -

-
-
-
-
- - - - Production Readiness - From prototype to production: ensuring agents are deployment-ready - - -
-
-

Validation & Rollback

-

- Production agents need clear success/failure signals and recovery procedures. -

-
-
- - READY signal after successful initialization -
-
- - ROLLBACK procedures for failed validation -
-
- - State snapshots for resumption -
-
-
- -
-

Operational Documentation

-

- Comprehensive docs enable team collaboration and incident response. -

-
-
- - Auto-generated runbooks and procedures -
-
- - Architecture and dependency mapping -
-
- - Machine-readable status reports -
-
-
-
- -
-

Enterprise Example: Kimera Protocol

-

- The Kimera project demonstrated real-world value by implementing a formal initialization sequence that - generated comprehensive system documentation and explicit readiness signals. Teams could immediately - identify missing docs, test gaps, and optimization opportunities—see the - {" "} - - readiness summary - - {" "} - and - {" "} - - follow-up checklist - - {" "} - for concrete outputs. -

+ +

+ During inspection, determine whether the target will be operated or modified by AI agents. If agent guidance + is useful and absent, derive `AGENTS.md` from the actual target. Different projects should have different + instructions, and nested projects may need nested scopes. +

+
+ {['OPERATIONAL', 'OPERATIONAL_WITH_WARNINGS', 'BLOCKED', 'DRY_RUN_COMPLETE'].map((state) => ( + + {state} + + ))}
) -} +} \ No newline at end of file diff --git a/src/components/tabs/GuideTab.tsx b/src/components/tabs/GuideTab.tsx index 6c9e4f022..007cb5a50 100644 --- a/src/components/tabs/GuideTab.tsx +++ b/src/components/tabs/GuideTab.tsx @@ -1,216 +1,149 @@ -/** - * Why: Separate the implementation guide so onboarding flows can embed it without inheriting the full page shell. - * What: Outlines the step-by-step instructions and selection matrix for protocol adoption. - * How: Wraps the existing content in a dedicated component for reuse and easier maintenance. - */ +import { ArrowRight, CheckCircle, Copy } from "@phosphor-icons/react" +import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" -import { Desktop, FileText, TestTube } from "@phosphor-icons/react" +import { toast } from "sonner" + +const workflow = [ + { + title: "Identify the target", + body: "Name what is being initialized, where it lives, who operates it, and what operational result is expected.", + }, + { + title: "Choose the closest template", + body: "Start from minimal, dry run, development project, agent, or server. Combine compatible sections when the target requires it.", + }, + { + title: "Copy or adapt the template", + body: "Use the template as a concrete pattern, then remove anything that does not apply to the target.", + }, + { + title: "Run the initialization procedure", + body: "Inspect what exists, determine requirements, create what applies, and configure what is required.", + }, + { + title: "Review the validation result", + body: "Operational status comes from relevant checks, such as commands, parseable configuration, service health, or instruction consistency.", + }, + { + title: "Keep the target-specific init.md", + body: "The result should describe this target's initialization path, not a generic checklist copied forward forever.", + }, +] + +const examples = [ + "Initialize this repository using the development-project template.", + "Inspect this server using the server template in dry-run mode.", + "Determine what this agent workspace needs to become operational.", + "Create an AGENTS.md file only if this project would benefit from one.", +] export function GuideTab() { + const copyExample = async (example: string) => { + try { + await navigator.clipboard.writeText(example) + toast.success("Example copied") + } catch { + toast.error("Failed to copy example") + } + } + return (
- + - Implementation Guide - How to define your project scope, systems, and execution parameters + Use init.md directly + + Start with the target, not the file list. The template is a pattern for deciding what applies. + - -
-
-
- 1 -
-
-

Define Project Scope

-

- Identify what your agent needs to know about your project and environment -

-
-

- Ask yourself: What files matter most? What technologies are in use? What documentation - should exist but doesn't? -

-
-
-
- -
-
- 2 -
-
-

Map Your System Architecture

-

- Document services, dependencies, and infrastructure components -

-
-

- Consider: Databases, APIs, scheduled jobs, external services, deployment targets, and - monitoring systems. -

-
-
-
- -
-
- 3 -
-
-

Customize Template Parameters

-

- Adapt the protocol to your specific tools, policies, and constraints -

-
-

- Modify: File output locations, probe safety levels, documentation depth, and execution - timeouts. -

+ +
+ {workflow.map((step, index) => ( +
+
+ {index + 1}
-
-
- -
-
- 4 -
-
-

Execute and Validate

-

- Run the protocol and verify generated documentation accuracy -

-
-

- Verify: File trees are complete, configurations are accurate, and documentation reflects - current system state. -

+
+

{step.title}

+

{step.body}

-
+ ))}
- - - Template Selection Guide - Choose the right initialization approach for your environment - - -
-
-
-
- -

Minimal

-
-
-

- Use when: Personal projects, prototypes, development environments -

-

- Generates: Essential README, TODO, and CONTEXT files -

-
-
- -
-
- -

Server

-
-
-

- Use when: Production systems, team projects, complex infrastructure -

-

- Generates: Complete operational suite including RUNBOOK and AGENTS -

-
-
+
+ + + Template selection + Choose the pattern that matches the target's real operational needs. + + +

+ Use minimal for narrow gaps, dry run for no-change planning, development project for codebases, agent for + agent instructions and tool setup, and server for host or deployment readiness. +

+

+ If no template fits cleanly, use the root protocol to create a target-specific plan and record the + validation criteria before making changes. +

+
+
-
-
- -

Dry-Run

-
-
-

- Use when: Testing, validation, security-conscious environments -

-

- Generates: Documentation blueprints without system changes -

-
+ + + Example instructions + Copy one into an agent or adapt it for a human handoff. + + + {examples.map((example) => ( +
+ {example} +
-
-
- - + ))} + + +
- + - Common Implementation Patterns - Proven approaches for different project types and environments + Completion review + Before calling the target operational, check that the report answers these questions. - -
-
-

For Web Applications

-
-
-

Frontend Projects

-

- Focus on package.json, build tools, component architecture, and deployment pipelines -

-
-
-

Full-Stack Apps

-

- Map both client and server, database schemas, API endpoints, and environment configs -

-
-
+ + {[ + "What target was initialized?", + "What was inspected?", + "What was created or configured?", + "What validation was run?", + "What remains incomplete or blocked?", + "Where are the important outputs?", + ].map((question) => ( +
+ + {question}
- -
-

For Infrastructure Projects

-
-
-

Container Deployments

-

- Document Dockerfiles, compose files, orchestration configs, and service dependencies -

-
-
-

Cloud Infrastructure

-

- Catalog terraform files, cloud resources, networking, and monitoring configurations -

-
-
-
- -
-

For Data Projects

-
-
-

Analytics Pipelines

-

- Map data sources, transformation scripts, scheduling, and output destinations -

-
-
-

ML/AI Systems

-

- Document models, training data, inference endpoints, and monitoring systems -

-
-
-
-
+ ))} + +
) -} +} \ No newline at end of file diff --git a/src/components/tabs/OverviewTab.tsx b/src/components/tabs/OverviewTab.tsx index b006af5c3..868670d79 100644 --- a/src/components/tabs/OverviewTab.tsx +++ b/src/components/tabs/OverviewTab.tsx @@ -1,320 +1,121 @@ -/** - * Why: Encapsulate the overview storytelling for reuse across surfaces that need the init.md primer. - * What: Renders contextual cards explaining definitions, evolution, and guardrails for initialization protocols. - * How: Leverages shared UI components to keep the narrative consistent with the canonical `init.md` guidance. - */ -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" +import { CheckCircle, Files, ListChecks } from "@phosphor-icons/react" import { Badge } from "@/components/ui/badge" -import { CheckCircle } from "@phosphor-icons/react" +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" + +const processStages = [ + { + title: "Inspect", + description: "Read the target that exists: files, configuration, instructions, constraints, and reusable work.", + }, + { + title: "Determine", + description: "Decide what the target requires, which template applies, and which outputs would be useful.", + }, + { + title: "Create", + description: "Create only the artifacts that apply to this target, not a universal bundle of files.", + }, + { + title: "Configure", + description: "Connect required paths, settings, dependencies, tools, services, or instructions so they work together.", + }, + { + title: "Validate", + description: "Run or define a relevant check proving the intended operational result is actually reachable.", + }, + { + title: "Report", + description: "State what became operational, what changed, what was validated, and what remains blocked or incomplete.", + }, +] + +const targetExamples = [ + "software project", + "repository", + "AI agent", + "server", + "service", + "workspace", + "research environment", + "data pipeline", + "application", + "tool", +] export function OverviewTab() { return (
-
- - - What is "init"? - - -

- Traditionally, "init" is the Unix process that initializes the system during boot. -

-

- For agents, "init" defines the procedural scope and instruction sets to transition from cold start to - ready state. It establishes context, validates systems, and generates essential project documentation - automatically. -

-
-
- - - - Implementation Principles - - -
    -
  • - - Safe system probes with minimal side effects -
  • -
  • - - Structured execution steps and clear policies -
  • -
  • - - Automated file tree and context generation -
  • -
  • - - Project documentation suite generation -
  • -
-
-
- - - - Definition & scope - The runbook that carries an agent from cold start to READY - - -

- init.md captures the safe preflights, context loads, and artefact generation an agent needs before doing - work. It embraces the idea of "context engineering"—preparing prompts, memory, tools, and data ahead of - time so behaviour is predictable. -

-

- Learn more from{" "} - - Anthropic’s context engineering guidance - - . -

-
-
- - - - Why it matters - - -
    -
  • - - Runbooks stay fixed while prompts can vary, enabling repeatable results across sessions. -
  • -
  • - - Early environment validation mirrors real production boot sequences and avoids surprises. -
  • -
  • - - Documented outputs make it easy for humans to audit, resume, or hand off work. -
  • -
-
-
-
- - + - The Evolution of Initialization - How initialization patterns have shaped software development + A procedure, not a scaffold + + The canonical file defines the general initialization procedure. Templates specialize that procedure for + specific targets. + - -
-
-

Unix systemd

-

- Process ID 1 brings up userspace services in a deterministic order, ensuring the operating system is - stable before workloads launch. -

-
- -
-

Kubernetes init containers

-

- One-shot containers finish migrations or checks before the main pod runs, guaranteeing a predictable - environment for application code. -

-
- -
-

Python __init__.py

-

- Marks a directory as a package and primes imports so modules expose the right interfaces and - dependencies. -

-
- -
-

JavaScript init helpers

-

- Setup functions consolidate configuration, dependency wiring, and boot logic before a runtime executes - business code. -

-
-
- -
-

The Pattern

-

- Every successful initialization system follows the same principle: establish context, validate - environment, and prepare for operation. The init.md protocol applies this battle-tested pattern to - AI agent bootstrapping. + +

+

+ init.md determines what a target needs in order to become operational. A target might be a new project, + an existing repository, an agent workspace, a server, a research directory, or a service being restored in + a new environment. +

+

+ The target determines the implementation. A server may need host diagnostics and firewall review. A + development project may need build commands. An agent may need instructions and tool boundaries. A minimal + target may need only one missing file and one validation step.

- - - - - - Context Engineering in AI Agents - Why proper initialization is critical for autonomous systems - - -

- Context engineering emphasizes providing an AI agent with all relevant information and structure up front, - not just one-off prompts. Instead of improvising each interaction, we prepare the agent's environment and - instructions in advance through a stable "runbook" of steps and policies. -

- -
-
-

Without Proper Init

-
    -
  • • Agent starts with minimal context
  • -
  • • Repeated environment discovery
  • -
  • • Inconsistent behavior across sessions
  • -
  • • Missing documentation and structure
  • -
+
+
+ + Possible targets
- -
-

With init.md Protocol

-
    -
  • • Comprehensive environment awareness
  • -
  • • Consistent baseline across sessions
  • -
  • • Automated documentation generation
  • -
  • • Clear operational procedures
  • -
+
+ {targetExamples.map((target) => ( + + {target} + + ))}
- -
-

Key Insight

-

- A good runbook "is the key to a well-functioning AI agent" — it contains clear, step-by-step - instructions that remain constant across sessions, ensuring the agent always begins with the same - baseline knowledge and capabilities. -

-
- - - Generated Documentation Suite - Recommended starter artefacts teams often emit during initialization - - -
-
-
-
- README.md +
+ {processStages.map((stage, index) => ( + + +
+ {index + 1}
-

- Suggested overview covering detected stack, dependencies, and architecture notes -

-
- -
-
-
- TODO.md -
-

- Recommended backlog capturing gaps, doc debt, and optimization opportunities surfaced during init -

-
- -
-
-
- PRD.md -
-

- Product requirements outline capturing goals, stakeholders, and success metrics for the project -

-
- -
-
-
- CONTEXT.md -
-

- Baseline context index (file tree, env metadata, inventory) to accelerate later tasks -

-
- -
-
-
- AGENTS.md -
-

- Optional agent briefing summarizing build/run/test expectations once init is complete -

-
- -
-
-
- RUNBOOK.md -
-

- When production-ready, a lightweight runbook outlining incident, maintenance, and on-call paths -

-
- -
-
-
- INIT_CONTEXT_SNAPSHOT.md -
-

- Machine-readable snapshot (directory tree, host metrics, quick links) useful for auditing runs -

-
-
- -
-

Blueprinted scripts (operator-triggered)

-
    -
  • - scripts/init-checks.sh — lint and static analysis preflight -
  • -
  • - scripts/prepare-context.sh — rebuild context snapshots on demand -
  • -
  • - scripts/ready.sh — emit READY banner with artefact paths -
  • -
-

Documented for teams to run intentionally; never executed automatically during bootstrap.

-

- Treat this suite as a starter kit—swap in project-specific artefacts where they deliver more value. -

-
- - + {stage.title} + + +

{stage.description}

+
+ + ))} +
- + - Execution flow - The sequence that turns a cold agent into a READY signal + + + Operational means validated + - -
    -
  1. - Parse init.md into structured steps with descriptions, actions, and guardrails. -
  2. -
  3. Perform host preflights and resource baselines without privileged mutations.
  4. -
  5. Build a context index covering key docs, configs, scripts, and version control state.
  6. -
  7. Emit documentation, snapshots, and policy logs so humans can audit the start state.
  8. -
  9. Publish READY or ROLLBACK signals and await operator guidance.
  10. -
+ +
+ +

Success requires a validation step derived from the target, not a generic success banner.

+
+
+ +

No output file is universal. README, PRD, snapshot, server report, and AGENTS.md are conditional.

+
-
) -} +} \ No newline at end of file diff --git a/src/components/tabs/TemplatesTab.tsx b/src/components/tabs/TemplatesTab.tsx index 3768d463f..b1d91e60d 100644 --- a/src/components/tabs/TemplatesTab.tsx +++ b/src/components/tabs/TemplatesTab.tsx @@ -1,30 +1,52 @@ -/** - * Why: Own the template carousel logic separately so future pages or CLIs can reuse the same data contract. - * What: Presents gallery controls, active template content, and clipboard helpers for protocol snippets. - * How: Consumes the shared template definitions and keeps clipboard state locally for clarity. - */ -import { createElement, useCallback, useState } from "react" -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" -import { Button } from "@/components/ui/button" -import { Badge } from "@/components/ui/badge" -import { CaretLeft, CaretRight, CheckCircle, Copy } from "@phosphor-icons/react" +import { createElement, useCallback, useMemo, useState } from "react" +import { marked } from "marked" import { toast } from "sonner" +import { ArrowRight, CaretLeft, CaretRight, CheckCircle, Copy, GithubLogo } from "@phosphor-icons/react" +import { Badge } from "@/components/ui/badge" +import { Button } from "@/components/ui/button" +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { templates } from "@/data/templates" +function stripFrontmatter(content: string) { + return content.replace(/^---\n[\s\S]*?\n---\n?/, "") +} + +function MetadataList({ title, items }: { title: string; items: string[] }) { + return ( +
+
{title}
+
    + {items.map((item) => ( +
  • + + {item} +
  • + ))} +
+
+ ) +} + export function TemplatesTab() { const [activeTemplate, setActiveTemplate] = useState(0) const [copiedStates, setCopiedStates] = useState>({}) + const template = templates[activeTemplate] + const renderedTemplate = useMemo( + () => marked.parse(stripFrontmatter(template.content), { async: false }) as string, + [template.content], + ) + const copyToClipboard = useCallback(async (content: string, id: string) => { try { await navigator.clipboard.writeText(content) setCopiedStates((prev) => ({ ...prev, [id]: true })) - toast.success("Template copied to clipboard!") + toast.success("Canonical Markdown copied") setTimeout(() => { setCopiedStates((prev) => ({ ...prev, [id]: false })) }, 2000) - } catch (error) { - toast.error("Failed to copy to clipboard") + } catch { + toast.error("Failed to copy Markdown") } }, []) @@ -38,87 +60,134 @@ export function TemplatesTab() { return (
-
-

Template Gallery

+
+
+

Canonical Templates

+

+ These cards render the Markdown files in `templates/`. The copy action copies the exact canonical file + content, including metadata. +

+
- - + {activeTemplate + 1} of {templates.length} -
- + -
-
- {createElement(templates[activeTemplate].icon, { - size: 24, - className: "text-primary flex-shrink-0 mt-0.5", +
+
+ {createElement(template.icon, { + size: 28, + className: "mt-1 shrink-0 text-primary", })} -
- {templates[activeTemplate].title} -

- {templates[activeTemplate].subtitle} -

- - {templates[activeTemplate].description} +
+
+ + {template.category} + + {template.metadata.mode.map((mode) => ( + + {mode} + + ))} +
+ {template.metadata.name} +

Target: {template.metadata.target}

+ + {template.description}
- +
+ + +
-
- {templates[activeTemplate].features.map((feature) => ( - +
+ {template.features.map((feature) => ( + {feature} ))}
- -
-
-              {templates[activeTemplate].content}
-            
+ + +
+ + + +
+ +
+
+ Optional outputs +
+
+ {template.metadata.optional_outputs.map((output) => ( +
+ {output} +
+ ))} +
+
+ +
+
+

Rendered Markdown

+ + Open source file + + +
+
-
- {templates.map((template, index) => ( - + {templates.map((item, index) => ( + ))}
) -} +} \ No newline at end of file diff --git a/src/data/templates.ts b/src/data/templates.ts index 6d8106d9a..48ca8e607 100644 --- a/src/data/templates.ts +++ b/src/data/templates.ts @@ -1,182 +1,162 @@ -/** - * Why: Centralize template metadata to keep `App` composable and align with the protocol catalogue in `init.md`. - * What: Provides strongly-typed template definitions for the gallery and clipboard actions. - * How: Exports the template array and contract so UI sections can consume it without duplicating state. - */ import type { ComponentType } from "react" -import { FileText, Desktop, TestTube } from "@phosphor-icons/react" +import { Code, Desktop, FileText, Robot, TestTube } from "@phosphor-icons/react" + +import agentContent from "../../templates/agent_init_protocol.md?raw" +import developmentProjectContent from "../../templates/development_project_init_protocol.md?raw" +import dryRunContent from "../../templates/dry_run_init_protocol.md?raw" +import minimalContent from "../../templates/minimal_init_protocol.md?raw" +import serverContent from "../../templates/server_init_protocol.md?raw" + +type TemplateMetadataValue = string | string[] + +export interface TemplateMetadata { + name: string + target: string + purpose: string + mode: string[] + creates: string[] + configures: string[] + validates: string[] + optional_outputs: string[] +} export interface TemplateDefinition { id: string title: string - subtitle: string + summary: string description: string + category: "General" | "Target-specific" + sourcePath: string + sourceUrl: string icon: ComponentType<{ size?: number; className?: string }> features: string[] content: string + metadata: TemplateMetadata +} + +const repositoryUrl = "https://github.com/bitwikiorg/init.md" + +function parseTemplateMetadata(content: string): TemplateMetadata { + const frontmatter = content.match(/^---\n([\s\S]*?)\n---/) + + if (!frontmatter) { + throw new Error("Template is missing frontmatter metadata") + } + + const parsed: Record = {} + let activeKey = "" + + for (const line of frontmatter[1].split("\n")) { + const listItem = line.match(/^\s+-\s+(.*)$/) + + if (listItem && activeKey) { + const current = parsed[activeKey] + parsed[activeKey] = Array.isArray(current) ? [...current, listItem[1]] : [listItem[1]] + continue + } + + const keyValue = line.match(/^([A-Za-z_]+):\s*(.*)$/) + + if (keyValue) { + activeKey = keyValue[1] + parsed[activeKey] = keyValue[2] ? keyValue[2] : [] + } + } + + return { + name: asString(parsed.name), + target: asString(parsed.target), + purpose: asString(parsed.purpose), + mode: asList(parsed.mode), + creates: asList(parsed.creates), + configures: asList(parsed.configures), + validates: asList(parsed.validates), + optional_outputs: asList(parsed.optional_outputs), + } +} + +function asString(value: TemplateMetadataValue | undefined) { + return typeof value === "string" ? value : "" +} + +function asList(value: TemplateMetadataValue | undefined) { + if (Array.isArray(value)) return value + return value ? [value] : [] +} + +function sourceUrl(sourcePath: string) { + return `${repositoryUrl}/blob/main/${sourcePath}` } export const templates: TemplateDefinition[] = [ { id: "minimal", - title: "Minimal Init Protocol", - subtitle: - "Perfect for simple projects and development environments where you need basic context without overhead.", + title: "Minimal", + summary: "Smallest reasonable initialization pass for a narrow operational gap.", description: - "Start small with essential system awareness and foundational documentation. This template performs safe, non-invasive probes to understand your environment and generates core project files. Ideal for personal projects, prototypes, or when working in constrained environments where minimal footprint is crucial.", + "Inspect a small target, identify the least missing requirement, create or configure only that requirement, validate it, and report the result.", + category: "General", + sourcePath: "templates/minimal_init_protocol.md", + sourceUrl: sourceUrl("templates/minimal_init_protocol.md"), icon: FileText, - features: ["Essential probes only", "Zero secret exposure", "File generation"], - content: `# Minimal Init Protocol (Template) - -**Intent** -- Lightweight initialization protocol for agents requiring essential system awareness. -- Safe-by-default: essential probes, limited scope, zero secret exposure. -- Generates foundational project files for immediate productivity. - -## INIT_SEQUENCE - -### HOST_PREFLIGHT -Establish basic system awareness and time coherence. - -**Steps:** -- **Description**: Capture OS family and version via safe reads. - - **Action**: Read /etc/os-release if present; avoid privileged actions. - - **Source**: OS_INFO - -### RESOURCE_BASELINE -Conservative resource awareness for planning. - -**Steps:** -- **Description**: Record CPU cores and memory estimate. - - **Action**: Use safe system APIs or cached metrics. - - **Source**: SYSTEM_HARDWARE_METRICS - -### PROJECT_FOUNDATION -Generate essential project files with current context. - -**Steps:** -- **Description**: Create foundational documentation and task files. - - **Action**: Generate file tree, initialize project structure. - - **Output Files**: - - ./README.md (project overview with auto-detected stack) - - ./TODO.md (startup tasks and next steps) - - ./PRD.md (lightweight product requirements summary) - - ./CONTEXT.md (current file tree and environment summary) - -### EXECUTION_START -Create a snapshot and announce READY. - -**Steps:** -- **Description**: Generate INIT_CONTEXT_SNAPSHOT.md (summary only). - - **Action**: Write directory overview + metrics headings. - - **Output File**: ./INIT_CONTEXT_SNAPSHOT.md` + features: ["Small scope", "Conditional output", "Minimum validation"], + content: minimalContent, + metadata: parseTemplateMetadata(minimalContent), }, { - id: "server", - title: "Server Init Protocol", - subtitle: "Built for production environments requiring comprehensive system validation and operational documentation.", + id: "dry-run", + title: "Dry Run", + summary: "Plan initialization work across target types without mutating the target.", description: - "Deploy with confidence using extensive documentation generation and architectural awareness. This template validates system compatibility, documents service dependencies, and creates a complete operational handbook. Essential for production deployments, team collaboration, and maintaining complex infrastructures.", - icon: Desktop, - features: ["Production-ready", "Full documentation suite", "Operational blueprints"], - content: `# Server Init Protocol (Template) - -**Intent** -- Production-oriented initialization with comprehensive system validation. -- Emphasizes precise execution rules, architectural context, and operational policies. -- Generates complete operational documentation suite. - -## INIT_SEQUENCE - -### HOST_PREFLIGHT -Verify OS/kernel compatibility and time alignment. - -**Steps:** -- **Description**: Note OS family and kernel. - - **Action**: Use safe reads; prefer APIs to shell. - - **Source**: OS_INFO - -### ARCHITECTURE_AND_TOOLS -Ground execution rules in actual system design. - -**Steps:** -- **Description**: Document services, runtimes, and schedulers in use. - - **Action**: Summarize architecture: containers, queues, cron, orchestrators. - - **Source**: SYSTEM_ARCHITECTURE_DOCS - -### OPERATIONAL_DOCUMENTATION -Generate comprehensive operational files for production readiness. - -**Steps:** -- **Description**: Create full documentation suite with system context. - - **Action**: Generate operational files with detected configurations. - - **Output Files**: - - ./README.md (comprehensive project documentation) - - ./PRD.md (product requirements and success criteria) - - ./SERVER.md (infrastructure, services, deployment notes) - - ./AGENTS.md (agent configurations, schedules, and policies) - - ./TODO.md (prioritized operational tasks) - - ./RUNBOOK.md (incident response and maintenance procedures) - - ./CONTEXT.md (complete system inventory and file tree) - -### EXECUTION_START -**Steps:** -- **Description**: Generate INIT_CONTEXT_SNAPSHOT.md (detailed summary). - - **Action**: Create directory tree (depth 3), metrics table, key locations. - - **Output File**: ./INIT_CONTEXT_SNAPSHOT.md` + "Inspect the target, determine requirements, propose the active work, and report what would become operational without creating files or changing state.", + category: "General", + sourcePath: "templates/dry_run_init_protocol.md", + sourceUrl: sourceUrl("templates/dry_run_init_protocol.md"), + icon: TestTube, + features: ["No mutation", "Any target", "Proposed validation"], + content: dryRunContent, + metadata: parseTemplateMetadata(dryRunContent), }, { - id: "dry-run", - title: "Dry-Run Init Protocol", - subtitle: "Risk-free rehearsal mode for testing and validation without making any system changes.", + id: "development-project", + title: "Development Project", + summary: "Initialize repositories, apps, packages, CLIs, websites, and monorepos.", description: - "Practice and validate your initialization sequence safely before production deployment. This template creates documentation blueprints and command playbooks without touching your system. Perfect for security-conscious environments, testing scenarios, or when you need to validate approaches before implementation.", - icon: TestTube, - features: ["No mutations", "Documentation blueprints", "Pre-production safe"], - content: `# Dry-Run Init Protocol (Template) - -**Intent** -- Rehearsal-only initialization: no mutations, no enforcement. -- Perfect for pre-production validation and command playbooks. -- Creates documentation blueprints without system changes. - -## INIT_SEQUENCE - -### HOST_PREFLIGHT -Mentally confirm OS/time alignment without probing. - -**Steps:** -- **Description**: OS family and kernel fit expectations. - - **Action**: Reference prior inventories; note discrepancies. - - **Source**: OS_INFO - -### RESOURCE_BASELINE -Notional compute/storage profile. - -**Steps:** -- **Description**: CPU/memory/storage expectations. - - **Action**: Use container defaults or prior notes; set soft limits. - - **Source**: SYSTEM_HARDWARE_METRICS - -### DOCUMENTATION_BLUEPRINT -Plan documentation suite without file creation. - -**Steps:** -- **Description**: Design intended documentation structure. - - **Action**: Map file relationships, define content templates. - - **Planned Files**: - - README.md (project overview template) - - TODO.md (development roadmap template) - - PRD.md (product requirements outline) - - CONTEXT.md (environment inventory template) - - AGENTS.md (agent configuration template) - -### EXECUTION_START -Conclude rehearsal with a blueprint. - -**Steps:** -- **Description**: Draft the intended INIT_CONTEXT_SNAPSHOT.md. - - **Action**: Define directory tree, metrics headings, and context catalog. - ` - } -] + "Inspect the actual project shape, decide which developer artifacts and commands apply, configure the workflow, and validate development readiness.", + category: "Target-specific", + sourcePath: "templates/development_project_init_protocol.md", + sourceUrl: sourceUrl("templates/development_project_init_protocol.md"), + icon: Code, + features: ["Project workflow", "Optional AGENTS.md", "Build/test validation"], + content: developmentProjectContent, + metadata: parseTemplateMetadata(developmentProjectContent), + }, + { + id: "agent", + title: "Agent", + summary: "Initialize agent instructions, tools, prompts, state, and startup checks.", + description: + "Determine what a specific agent target needs, preserve valid instructions, create only useful agent artifacts, and validate readiness.", + category: "Target-specific", + sourcePath: "templates/agent_init_protocol.md", + sourceUrl: sourceUrl("templates/agent_init_protocol.md"), + icon: Robot, + features: ["Target-specific guidance", "Tool boundaries", "Startup validation"], + content: agentContent, + metadata: parseTemplateMetadata(agentContent), + }, + { + id: "server", + title: "Server", + summary: "Server, service-host, infrastructure, and deployment readiness pattern.", + description: + "Move host diagnostics, services, networking, secrets, logging, backups, and deployment checks into the server-specific layer where they belong.", + category: "Target-specific", + sourcePath: "templates/server_init_protocol.md", + sourceUrl: sourceUrl("templates/server_init_protocol.md"), + icon: Desktop, + features: ["Host inspection", "Service configuration", "Readiness checks"], + content: serverContent, + metadata: parseTemplateMetadata(serverContent), + }, +] \ No newline at end of file diff --git a/src/index.css b/src/index.css index f666dad3f..05d8b9df9 100644 --- a/src/index.css +++ b/src/index.css @@ -17,28 +17,125 @@ } :root { - --background: oklch(1 0 0); - --foreground: oklch(0.2 0 0); - --card: oklch(0.98 0.01 240); - --card-foreground: oklch(0.2 0 0); + --background: oklch(0.985 0 0); + --foreground: oklch(0.13 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.13 0 0); --popover: oklch(1 0 0); - --popover-foreground: oklch(0.2 0 0); - --primary: oklch(0.3 0.15 240); - --primary-foreground: oklch(1 0 0); - --secondary: oklch(0.95 0.02 240); - --secondary-foreground: oklch(0.2 0 0); - --muted: oklch(0.97 0.01 240); - --muted-foreground: oklch(0.7 0.05 240); - --accent: oklch(0.65 0.15 140); - --accent-foreground: oklch(1 0 0); + --popover-foreground: oklch(0.13 0 0); + --primary: oklch(0.13 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.93 0 0); + --secondary-foreground: oklch(0.13 0 0); + --muted: oklch(0.95 0 0); + --muted-foreground: oklch(0.42 0 0); + --accent: oklch(0.56 0.16 28); + --accent-foreground: oklch(0.985 0 0); --destructive: oklch(0.577 0.245 27.325); - --destructive-foreground: oklch(1 0 0); - --border: oklch(0.9 0.02 240); - --input: oklch(0.9 0.02 240); - --ring: oklch(0.3 0.15 240); + --destructive-foreground: oklch(0.985 0 0); + --border: oklch(0.82 0 0); + --input: oklch(0.82 0 0); + --ring: oklch(0.13 0 0); --radius: 0.5rem; } +html { + scroll-behavior: smooth; +} + +body { + background: + linear-gradient(90deg, oklch(0.92 0 0 / 0.35) 1px, transparent 1px), + linear-gradient(0deg, oklch(0.92 0 0 / 0.35) 1px, transparent 1px), + var(--background); + background-size: 28px 28px; +} + +.protocol-grid { + background: + linear-gradient(90deg, oklch(0.13 0 0 / 0.08) 1px, transparent 1px), + linear-gradient(0deg, oklch(0.13 0 0 / 0.08) 1px, transparent 1px); + background-size: 32px 32px; +} + +.markdown-surface { + color: var(--foreground); + font-size: 0.9375rem; + line-height: 1.7; +} + +.markdown-surface > * + * { + margin-top: 1rem; +} + +.markdown-surface h1, +.markdown-surface h2, +.markdown-surface h3 { + color: var(--foreground); + font-weight: 800; + line-height: 1.2; +} + +.markdown-surface h1 { + font-size: 1.75rem; +} + +.markdown-surface h2 { + margin-top: 1.75rem; + border-top: 1px solid var(--border); + padding-top: 1rem; + font-size: 1.35rem; +} + +.markdown-surface h3 { + margin-top: 1.25rem; + font-size: 1.05rem; +} + +.markdown-surface ul, +.markdown-surface ol { + padding-left: 1.25rem; +} + +.markdown-surface ul { + list-style: disc; +} + +.markdown-surface ol { + list-style: decimal; +} + +.markdown-surface code { + border: 1px solid var(--border); + background: var(--muted); + padding: 0.1rem 0.3rem; + border-radius: 0.25rem; + font-family: var(--font-mono); + font-size: 0.875em; +} + +.markdown-surface pre { + overflow-x: auto; + border: 1px solid var(--border); + background: var(--foreground); + color: var(--background); + padding: 1rem; + border-radius: 0.375rem; +} + +.markdown-surface pre code { + border: 0; + background: transparent; + color: inherit; + padding: 0; +} + +.markdown-surface blockquote { + border-left: 4px solid var(--foreground); + padding-left: 1rem; + color: var(--muted-foreground); +} + @theme { --color-background: var(--background); --color-foreground: var(--foreground); diff --git a/src/main.tsx b/src/main.tsx index de0ac2eb6..0b56023ec 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,6 +1,5 @@ import { createRoot } from 'react-dom/client' import { ErrorBoundary } from "react-error-boundary"; -import "@github/spark/spark" import App from './App.tsx' import { ErrorFallback } from './ErrorFallback.tsx' diff --git a/src/prd.md b/src/prd.md index d3ef8dcd4..f8b7c469a 100644 --- a/src/prd.md +++ b/src/prd.md @@ -1,111 +1,37 @@ -# Product Requirements Document: init.md - AI Agent Initialization Templates +# init.md — Product Requirements Summary -## Core Purpose & Success -- **Mission Statement**: Provide structured initialization templates that help AI agents bootstrap themselves with essential project context and documentation generation capabilities. -- **Success Indicators**: Users can quickly select appropriate templates, understand implementation approaches, and successfully generate project documentation using their AI agents. -- **Experience Qualities**: Professional, efficient, educational +## Definition -## Project Classification & Approach -- **Complexity Level**: Light Application (multiple features with basic state) -- **Primary User Activity**: Acting (copying templates, implementing protocols) +`init.md` is a human- and machine-readable procedure for inspecting a target, determining what it requires, applying the appropriate initialization pattern, validating the result, and reporting its operational state. -## Thought Process for Feature Selection -- **Core Problem Analysis**: AI agents need structured ways to initialize themselves and understand project contexts, but current approaches are ad-hoc and inconsistent. -- **User Context**: Developers and DevOps professionals working with AI agents in various environments from personal projects to production systems. -- **Critical Path**: Template selection → customization understanding → implementation → validation -- **Key Moments**: Template comparison, content copying, implementation guidance +## Core Model -## Essential Features +The root protocol remains general: -### Template Gallery with Navigation -- **What it does**: Displays three initialization templates (Minimal, Server, Dry-Run) with detailed descriptions and navigation controls -- **Why it matters**: Allows users to understand different approaches and select the most appropriate template for their needs -- **Success criteria**: Users can easily browse templates and understand their differences +1. Inspect what exists. +2. Determine what is needed. +3. Create what applies. +4. Configure what is required. +5. Validate the result. +6. Report what became operational. -### Template Content Display and Copying -- **What it does**: Shows full template content in readable format with one-click copying functionality -- **Why it matters**: Enables immediate implementation without manual transcription errors -- **Success criteria**: Content is readable on all devices and copying works reliably +Templates define concrete initialization patterns for specific targets. -### Implementation Guide -- **What it does**: Provides step-by-step guidance on how to define project scope, map systems, and customize templates -- **Why it matters**: Bridges the gap between template selection and successful implementation -- **Success criteria**: Users understand how to adapt templates to their specific environments +## Current Implementation -### Responsive Design -- **What it does**: Ensures optimal viewing and interaction across desktop, tablet, and mobile devices -- **Why it matters**: Users access documentation on various devices and need consistent experience -- **Success criteria**: All content is accessible and functional on screens from 320px to 1920px+ width +- Static Vite and React website. +- GitHub Pages deployment. +- Template browser with copy-to-clipboard behavior. +- Canonical Markdown files under `templates/` imported with Vite raw imports. +- Template metadata parsed from Markdown frontmatter. +- Build-time template metadata check. +- Visible GitHub, BIThub, BIThub Guides, and BITwiki links. -## Design Direction +## Non-Goals -### Visual Tone & Identity -- **Emotional Response**: Professional confidence with approachable clarity -- **Design Personality**: Technical precision meets modern simplicity - like high-quality developer tools -- **Visual Metaphors**: Clean code aesthetics, system architecture diagrams, terminal interfaces -- **Simplicity Spectrum**: Minimal interface that lets content shine, with purposeful visual hierarchy - -### Color Strategy -- **Color Scheme Type**: Monochromatic with strategic accent -- **Primary Color**: Deep blue (oklch(0.3 0.15 240)) - conveys technical expertise and reliability -- **Secondary Colors**: Light blue-grays for cards and supporting elements -- **Accent Color**: Green (oklch(0.65 0.15 140)) - for success states and interactive elements -- **Color Psychology**: Blue establishes trust and technical competence, while green provides positive feedback -- **Color Accessibility**: All pairings meet WCAG AA contrast requirements (4.5:1 minimum) -- **Foreground/Background Pairings**: - - Background (white) + Foreground (near-black): 15.2:1 ratio - - Primary (deep blue) + Primary-foreground (white): 8.7:1 ratio - - Card (light blue-gray) + Card-foreground (near-black): 14.8:1 ratio - -### Typography System -- **Font Pairing Strategy**: Inter for UI (clean, modern sans-serif) paired with Fira Code for code blocks (monospace clarity) -- **Typographic Hierarchy**: Clear scaling from 2xl headers down to xs helper text with consistent weight progression -- **Font Personality**: Inter conveys modern professionalism while Fira Code ensures code readability -- **Readability Focus**: 1.5x line height for body text, generous spacing between sections -- **Typography Consistency**: Semantic heading structure (h1-h4) with consistent color and weight application -- **Which fonts**: Inter (weights 400, 500, 600, 700) and Fira Code (weight 400) from Google Fonts -- **Legibility Check**: Both fonts tested for clarity at small sizes and on various backgrounds - -### Visual Hierarchy & Layout -- **Attention Direction**: Primary content in center column with secondary navigation elements on periphery -- **White Space Philosophy**: Generous padding and margins create breathing room and focus attention -- **Grid System**: Responsive grid using CSS Grid and Flexbox for complex layouts -- **Responsive Approach**: Mobile-first design that progressively enhances for larger screens -- **Content Density**: Balanced information density that avoids overwhelming while providing comprehensive details - -### Animations -- **Purposeful Meaning**: Subtle hover states and transitions reinforce interactivity without distraction -- **Hierarchy of Movement**: Button hovers, tab transitions, and template navigation use consistent timing -- **Contextual Appropriateness**: Minimal, functional animations that support rather than showcase - -### UI Elements & Component Selection -- **Component Usage**: shadcn/ui components for consistency and accessibility (Cards, Tabs, Buttons, Badges) -- **Component Customization**: Tailwind utilities for spacing, colors, and responsive behavior -- **Component States**: Clear hover, active, and focus states for all interactive elements -- **Icon Selection**: Phosphor icons for consistent visual language (outlined style) -- **Component Hierarchy**: Primary actions (Copy buttons), secondary navigation (Template arrows), tertiary information (Badges) -- **Spacing System**: Consistent 4px grid system using Tailwind's spacing scale -- **Mobile Adaptation**: Stacked layouts for small screens, side-by-side for larger screens - -### Visual Consistency Framework -- **Design System Approach**: Component-based design with consistent props and styling patterns -- **Style Guide Elements**: Color variables, typography scale, spacing system, component variants -- **Visual Rhythm**: Consistent card styling, button treatments, and spacing patterns -- **Brand Alignment**: Technical aesthetic that reinforces tool quality and reliability - -### Accessibility & Readability -- **Contrast Goal**: WCAG AA compliance achieved across all text and meaningful non-text elements -- **Additional Considerations**: Keyboard navigation, semantic HTML structure, screen reader compatibility - -## Edge Cases & Problem Scenarios -- **Potential Obstacles**: Users may not understand which template fits their specific use case -- **Edge Case Handling**: Clear template selection guide with specific use cases and examples -- **Technical Constraints**: Must work across various screen sizes and devices - -## Implementation Considerations -- **Scalability Needs**: Template content may expand, interface should accommodate additional templates -- **Testing Focus**: Template copying functionality, responsive behavior, content readability -- **Critical Questions**: Are the templates comprehensive enough? Is the guidance actionable? - -## Reflection -This approach uniquely combines technical precision with educational clarity, making complex initialization concepts accessible while maintaining professional standards. The focus on practical implementation bridges the gap between template selection and successful deployment. \ No newline at end of file +- No backend. +- No database. +- No account system. +- No execution runtime in this version. +- No fixed scaffold imposed on every target. +- No universal requirement to generate README, PRD, snapshot, context, server, task, or agent files. \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js index fa5731886..8b9009d6c 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -18,11 +18,6 @@ const defaultTheme = { padding: "2rem", }, extend: { - screens: { - coarse: { raw: "(pointer: coarse)" }, - fine: { raw: "(pointer: fine)" }, - pwa: { raw: "(display-mode: standalone)" }, - }, fontSize: { xs: ["0.875rem", { lineHeight: "1.5" }], }, diff --git a/templates/agent_init_protocol.md b/templates/agent_init_protocol.md new file mode 100644 index 000000000..43eb4a4f1 --- /dev/null +++ b/templates/agent_init_protocol.md @@ -0,0 +1,126 @@ +--- +name: Agent Init Protocol +target: AI agent, agent workspace, agent-enabled repository, automation worker, or tool-using assistant environment +purpose: Inspect what an agent requires to operate in a specific target, create or configure only applicable instructions, tools, prompts, state, and validation checks, and report agent readiness. +mode: + - active + - dry run + - repair + - reinitialize +creates: + - AGENTS.md when agent operation applies and valid instructions are absent + - SELF.md when identity, role, capabilities, or boundaries must be explicit + - USER.md when operator context is required for correct interaction + - TOOLS.md when tool availability, permissions, or invocation rules must be documented + - STATE.md or PLAN.md when current condition or pending work must be externalized +configures: + - Agent instructions + - Model or provider settings when applicable + - Tool definitions + - Prompt files + - Workspace directories + - State or context references + - Expected inputs and outputs +validates: + - Instructions are target-specific and internally consistent + - Required tools or providers are accessible where validation is permitted + - Startup path, prompts, and expected outputs are clear + - Existing instructions are preserved or repaired without unnecessary replacement +optional_outputs: + - AGENTS.md + - SELF.md + - USER.md + - TOOLS.md + - STATE.md + - PLAN.md + - SNAPSHOT.md + - Prompt files + - Tool registry + - Startup validation report +--- + +# Agent Init Protocol + +Use this template when the target will be operated, modified, or assisted by an AI agent. The template does not prescribe one universal agent file tree. It determines what this specific agent target requires. + +## Target Fit + +Use this template when the target is an AI agent, agent workspace, agent-enabled repository, automation worker, tool-using assistant environment, or system whose operation depends on agent instructions. + +Do not create generic agent files in every project. Agent artifacts are useful only when they materially improve operation. + +## Procedure + +### `INSPECT` + +- `description`: Identify the agent's intended role and the target it operates on. +- `inspect`: Existing `AGENTS.md` files, prompts, tool definitions, provider or model configuration, workspace directories, state files, context files, schedules, expected inputs and outputs, permissions, and operator constraints. +- `condition`: Preserve valid existing instructions. Respect nested instruction scopes when they exist. +- `source`: Existing agent files, project docs, tool schemas, prompt files, configuration, and user instructions. + +### `DETERMINE` + +- `description`: Decide what the agent needs to become operational in this target. +- `action`: Identify required instructions, tool access, prompt structure, provider configuration, state representation, context handoff, validation checks, and boundaries. +- `output`: A target-specific agent initialization plan. + +Possible decisions include: + +- create `AGENTS.md` only when agent operation applies and no valid instruction file exists; +- create `SELF.md` only when identity, role, capabilities, or boundaries need to be explicit; +- create `USER.md` only when operator context materially affects operation; +- create `TOOLS.md` only when tool permissions or invocation rules need durable documentation; +- create `STATE.md` or `PLAN.md` only when current condition or pending work must be externalized; +- create `SNAPSHOT.md` only when a point-in-time state record is useful. + +Continuity artifacts such as durable memory or heartbeat instructions may exist in some systems, but this template does not prescribe them as normative outputs for this phase. + +### `CREATE` + +Create only applicable artifacts. Possible outputs include: + +- `AGENTS.md`; +- `SELF.md`; +- `USER.md`; +- `TOOLS.md`; +- `STATE.md`; +- `PLAN.md`; +- `SNAPSHOT.md`; +- prompt files; +- tool registry files; +- startup validation reports; +- workspace directories. + +Every artifact must be derived from the target. Do not install a reusable generic instruction file without adaptation. + +### `CONFIGURE` + +- `description`: Make the agent artifacts usable together. +- `action`: Configure instruction precedence, model or provider settings, tool permissions, prompt references, state locations, input and output conventions, schedules when applicable, and validation commands. +- `condition`: Configure only what is required for this agent target. + +### `VALIDATE` + +- `description`: Confirm the agent can operate with the initialized instructions and tools. +- `validation`: Check instruction consistency, required files, tool availability, provider configuration, prompt references, expected input and output paths, state handoff, and any startup or dry-run command the target supports. +- `status`: Use `OPERATIONAL`, `OPERATIONAL_WITH_WARNINGS`, `BLOCKED`, or `DRY_RUN_COMPLETE`. + +### `REPORT` + +Report: + +- agent target identified; +- role, boundaries, and operating context; +- inspected instructions, prompts, tools, and state; +- created or updated artifacts; +- configuration performed; +- validation result; +- warnings, missing access, or blockers; +- final status. + +## Agent-Specific Notes + +- Different targets should have different agent instructions. +- Nested projects may require nested `AGENTS.md` files. +- Tool access must reflect real permissions and limitations. +- Agent readiness is validated by the target's required startup path, not by a generic checklist. \ No newline at end of file diff --git a/templates/development_project_init_protocol.md b/templates/development_project_init_protocol.md new file mode 100644 index 000000000..06a1b5858 --- /dev/null +++ b/templates/development_project_init_protocol.md @@ -0,0 +1,124 @@ +--- +name: Development Project Init Protocol +target: Software development project, repository, application, library, CLI, website, or monorepo +purpose: Inspect a development target, determine the project-specific artifacts and commands required for productive operation, configure what applies, validate the developer workflow, and report readiness. +mode: + - active + - dry run + - repair + - reinitialize +creates: + - README.md when missing or inadequate + - AGENTS.md when agent contributors will operate in the project and no valid guidance exists + - PRD.md or specification files when product requirements must be established + - Source, test, task, or configuration files only when required by the project +configures: + - Package or dependency manifests + - Development scripts + - Linting and formatting + - Test commands + - Build and preview commands + - Environment examples +validates: + - Required commands run or are documented as unavailable + - Manifests parse + - Dependencies resolve where installation is in scope + - Tests, lint, type checks, or builds pass when applicable +optional_outputs: + - README.md + - AGENTS.md + - PRD.md + - .env.example + - PLAN.md + - task or issue files + - source directories + - tests + - validation report +--- + +# Development Project Init Protocol + +Use this template for software development projects. A small library, a website, a CLI, and a monorepo should not receive identical output. The target determines which artifacts and commands apply. + +## Target Fit + +Use this template when the target is a codebase, repository, application, package, library, website, CLI, tool, or monorepo. + +Do not assume every development project needs a PRD, `AGENTS.md`, tests, a package manager, a `src` directory, or the same build commands. + +## Procedure + +### `INSPECT` + +- `description`: Understand the project as it exists. +- `inspect`: Repository files, README, license, package or dependency manifests, source layout, tests, scripts, build config, deployment config, environment examples, issue or task files, existing specs, existing agent instructions, and user constraints. +- `condition`: Preserve local conventions and avoid unrelated cleanup. +- `source`: Files in the project, package scripts, framework configuration, docs, and operator instructions. + +### `DETERMINE` + +- `description`: Decide what the project requires to become operational for development. +- `action`: Identify project type, expected developer workflow, missing documentation, missing manifests, dependency setup, command surface, environment requirements, validation checks, and optional agent guidance. +- `output`: A project-specific initialization plan. + +Possible decisions include: + +- create or update `README.md` only when entry-point documentation is missing or misleading; +- create `AGENTS.md` only when agent contribution or operation applies; +- create `PRD.md` only when product requirements need to be established; +- add `.env.example` only when environment variables are required; +- add or repair package scripts only when the project has a compatible package system; +- add tests only when there is a clear test surface and project convention; +- add source directories only when the project lacks an expected implementation location. + +### `CREATE` + +Create only applicable artifacts. Possible outputs include: + +- `README.md`; +- `AGENTS.md`; +- `PRD.md` or another specification file; +- package or dependency manifests; +- source directories; +- test files; +- lint or formatting configuration; +- `.env.example`; +- development scripts; +- task or issue files; +- validation reports. + +When an existing file is substantial and mostly correct, update it instead of replacing it. + +### `CONFIGURE` + +- `description`: Make the selected development artifacts work together. +- `action`: Configure dependency manifests, package scripts, build commands, test commands, linting, formatting, environment examples, deployment settings, agent instructions, file references, and documentation links. +- `condition`: Match the project's existing framework and style. + +### `VALIDATE` + +- `description`: Confirm the developer workflow is operational. +- `validation`: Use relevant checks such as manifest parsing, dependency installation when permitted, lint, type check, tests, build, preview, executable CLI command, documentation link review, or agent instruction consistency. +- `status`: Use `OPERATIONAL`, `OPERATIONAL_WITH_WARNINGS`, `BLOCKED`, or `DRY_RUN_COMPLETE`. + +Do not declare a development project operational without a validation step tied to its real workflow. + +### `REPORT` + +Report: + +- project identified; +- project type and operational goal; +- inspected files and commands; +- created or updated artifacts; +- configuration changes; +- validation commands or reviews; +- remaining warnings, blockers, or deferred work; +- final status. + +## Project-Specific Examples + +- A small library may need accurate package metadata, a README usage example, and a test command. +- A website may need build and preview commands plus deployment notes. +- A CLI may need executable configuration, command examples, and smoke tests. +- A monorepo may need workspace discovery, package-specific commands, and scoped agent instructions. \ No newline at end of file diff --git a/templates/dry_run_init_protocol.md b/templates/dry_run_init_protocol.md index d16bd66cc..b1332d16a 100644 --- a/templates/dry_run_init_protocol.md +++ b/templates/dry_run_init_protocol.md @@ -1,107 +1,91 @@ -# Dry-Run Init Protocol (Template) +--- +name: Dry-Run Init Protocol +target: Any target that needs proposed initialization work without mutation +purpose: Inspect the target, determine requirements, produce an initialization plan, and report what would become operational without changing files, services, or state. +mode: + - dry run +creates: + - No target artifacts +configures: + - No target settings +validates: + - Proposed checks are identified and checked for feasibility where possible without mutation +optional_outputs: + - Dry-run report outside the target when the operator requests one + - Proposed PLAN.md content when actionable work remains + - Proposed validation checklist +--- -**Intent** -- Rehearsal-only initialization: no mutation, no enforcement. -- Ideal for pre-production mental models and command playbooks. +# Dry-Run Init Protocol -## INIT_SEQUENCE +Use this template to rehearse initialization without changing the target. The dry run may inspect and reason about requirements, but it must not create, configure, delete, install, migrate, start, stop, or overwrite anything in the target. -### HOST_PREFLIGHT -Mentally confirm OS/time alignment without probing. +## Target Fit -**Steps:** -- **Description**: OS family and kernel fit expectations. - - **Action**: Reference prior inventories; note discrepancies. - - **Source**: OS_INFO +Use this template when: -- **Description**: Clock alignment acknowledged. - - **Action**: Note any drift assumptions for later remediation. - - **Source**: SYSTEM_TIME_INFO +- the operator wants to understand impact before active initialization; +- the target is sensitive, remote, production-like, or shared; +- access is read-only; +- the correct template is unknown; +- proposed outputs need review before creation. -### RESOURCE_BASELINE -Notional compute/storage profile. +This template works for any target type. Server checks appear only when the target is actually a server or infrastructure environment. -**Steps:** -- **Description**: CPU/memory/storage expectations. - - **Action**: Use container defaults or prior notes; set soft limits. - - **Source**: SYSTEM_HARDWARE_METRICS +## Procedure -- **Description**: Hypothetical bottlenecks. - - **Action**: Define alert thresholds for future activation. - - **Source**: SYSTEM_PERFORMANCE_METRICS +### `INSPECT` -### TOOL_DISCOVERY_AND_API_POLICY -Reiterate approved routes and adapters. +- `description`: Inspect enough to understand the target and its likely operational requirements. +- `inspect`: Existing files, configuration, docs, service descriptions, tool definitions, manifests, environment notes, or user-provided constraints that are relevant to the target. +- `condition`: Do not mutate. Do not broaden inspection beyond the target without reason. +- `source`: Read-only evidence. -**Steps:** -- **Description**: Command registry and features. - - **Action**: Summarize available entry points and controllers. - - **Source**: COMMAND_AND_FEATURE_INDEX +### `DETERMINE` -- **Description**: Routing rules. - - **Policy**: - - Use designated search adapter in role-play. - - Use approved HTTP clients; no ad hoc fetch. - - Prefer file utilities for content inspection. - - **Source**: API_ROUTING_POLICY +- `description`: Select the closest initialization pattern or combine compatible pattern sections. +- `action`: Identify what would need to be created, configured, preserved, updated, or validated in an active run. +- `output`: A proposed initialization plan with conditions. -### SECRET_MANAGEMENT -Validate credential flow assumptions. +The plan should distinguish: -**Steps:** -- **Description**: Bootstrap with test doubles or in-memory mocks. - - **Action**: Exercise encryption/decryption pathways conceptually. - - **Source**: VAULT_FLOW_NOTES +- required work; +- optional work; +- artifacts that should not be changed; +- questions or permissions needed before active mode; +- validation steps that would prove operation. -- **Description**: Target permission posture for storage. - - **Action**: Record intended fs permissions; defer checks. - - **Source**: STORAGE_PERMISSIONS_PLAN +### `CREATE` -### CONTEXT_LOADING -Curate rehearsal knowledge. +- `description`: Do not create target artifacts. +- `action`: If a report is requested, place it only where the operator explicitly permits. Otherwise keep the dry-run report in the response or calling system. +- `output`: Proposed content or artifact names, not actual target files. -**Steps:** -- **Description**: Catalog guides/prompts/configs by listing only. - - **Action**: Assemble notes linking assets to roles. - - **Source**: FILE_SYSTEM_SCAN +### `CONFIGURE` -- **Description**: Sketch context snapshot shape. - - **Action**: Define future ./cache/context.snapshot.json fields (no writes). - - **Source**: SERIALIZED_CONTEXT_MAP +- `description`: Do not configure the target. +- `action`: Describe configuration that would be required in active mode, including paths, dependencies, services, tools, environment variables, agent instructions, or integrations. -### CODE_GOVERNANCE_AND_STATE -Plan governance; avoid state writes. +### `VALIDATE` -**Steps:** -- **Description**: Diffs on mutation. - - **Policy**: Append to ./logs/code_history/.patch in active mode. - - **Source**: VERSION_CONTROL_POLICY +- `description`: Validate the plan, not the initialized result. +- `validation`: Confirm the proposed work is internally consistent, target-relevant, and has a plausible validation method. Where read-only checks are available, use them to reduce uncertainty. +- `status`: Use `DRY_RUN_COMPLETE` when the plan is complete, or `BLOCKED` when the plan cannot be formed from available evidence. -- **Description**: Backup and cache routines, later. - - **Action**: Document sync and purge cadence for go-live. - - **Source**: BACKUP_AND_CACHE_PLANS +### `REPORT` -### STARTUP_VALIDATION_AND_ROLLBACK -Define checks and signals for future runs. +Report: -**Steps:** -- **Description**: Lint/tests/static analysis plan. - - **Action**: List commands and pass criteria. - - **Source**: DIAGNOSTIC_CHECKLIST +- target identified; +- evidence inspected; +- selected template or pattern; +- work that would be created; +- work that would be configured; +- validation that would be run; +- artifacts that would remain untouched; +- warnings, unknowns, permissions, or blockers; +- whether the target would likely become operational after active initialization. -- **Description**: READY announcement format. - - **Action**: Define summary message structure (metrics + snapshot path). - - **Source**: SYSTEM_READINESS_SIGNAL +## Non-Mutation Rule -## EXECUTION_START - -Conclude rehearsal with a blueprint. - -**Steps:** -- **Description**: Draft the intended INIT_CONTEXT_SNAPSHOT.md (on paper/notes). - - **Action**: Define directory tree, metrics headings, and context catalog for future real runs. - - **Output File**: ./INIT_CONTEXT_SNAPSHOT.md - -- **Description**: Define short READY summary format for future active runs. - - **Action**: Record message template and fields. - - **Await Instructions**: true \ No newline at end of file +A dry run makes no target changes. Proposed files such as `README.md`, `AGENTS.md`, `SNAPSHOT.md`, server reports, task files, or configuration examples are only proposed unless the operator switches to active mode. \ No newline at end of file diff --git a/templates/minimal_init_protocol.md b/templates/minimal_init_protocol.md index 3edbb28b5..a243a0dea 100644 --- a/templates/minimal_init_protocol.md +++ b/templates/minimal_init_protocol.md @@ -1,83 +1,90 @@ -# Minimal Init Protocol (Template) +--- +name: Minimal Init Protocol +target: Any small target with a narrow operational gap +purpose: Identify the least work required for the target to become operational, apply only that work, validate it, and report the result. +mode: + - active + - repair + - reinitialize +creates: + - The smallest missing artifact or structure that the target actually needs +configures: + - Only relationships, settings, or instructions required by that artifact +validates: + - The minimum relevant check proving the target can operate as intended +optional_outputs: + - README.md when human-facing documentation is missing or inadequate + - AGENTS.md when agent operation applies and no valid instruction file exists + - INIT.md or init.md when the target needs a local initialization procedure + - PLAN.md when unresolved work remains +--- -**Intent** -- A smallest-possible initialization blueprint for agents. -- Safe-by-default: conceptual steps, strictly limited probes, zero secret exposure. +# Minimal Init Protocol -## INIT_SEQUENCE +Use this template when a target needs the smallest reasonable initialization pass. The goal is not to create a standard project layout. The goal is to discover the minimum missing requirement, apply it when appropriate, validate it, and report the state. -### HOST_PREFLIGHT -Lightweight awareness of OS and time coherence. +## Target Fit -**Steps:** -- **Description**: Capture OS family and version via safe reads. - - **Action**: Read /etc/os-release if present; avoid privileged actions. - - **Source**: OS_INFO +Use this template when: -- **Description**: Note current timezone and time source. - - **Action**: Use safe APIs; do not adjust system time. - - **Source**: SYSTEM_TIME_INFO +- the target is small, local, or clearly scoped; +- the operator wants a low-change initialization; +- one missing artifact, setting, or instruction may be enough; +- broad infrastructure, product, or agent setup would be excessive. -### RESOURCE_BASELINE -Conservative resource awareness for planning. +Do not assume server access, production infrastructure, package manifests, snapshots, PRDs, or agent instructions. -**Steps:** -- **Description**: Record CPU cores and memory estimate. - - **Action**: Use safe system APIs or cached metrics. - - **Source**: SYSTEM_HARDWARE_METRICS +## Procedure -### TOOL_DISCOVERY_AND_API_POLICY -Route through approved adapters only. +### `INSPECT` -**Steps:** -- **Description**: Load tool registry if present. - - **Action**: Parse tool schema (optional). - - **Source**: TOOL_SCHEMA +- `description`: Identify what the target is and what already exists. +- `inspect`: The target location, visible files or configuration, existing instructions, obvious entry points, and operator constraints. +- `condition`: Stay within the target boundary unless another location is directly referenced. +- `source`: Existing files, directory names, user-provided constraints, or environment metadata that is directly relevant. -- **Description**: Enforce routing rules. - - **Policy**: - - Use designated search adapter. - - Use approved HTTP clients for REST. - - Prefer dedicated file tools for reading content. - - **Source**: API_ROUTING_POLICY +### `DETERMINE` -### SECRET_MANAGEMENT -Never hardcode; load from vault only. +- `description`: Decide the minimum requirement that blocks operation. +- `action`: Choose the smallest applicable initialization step. +- `condition`: If no change is needed, move directly to validation and report. +- `output`: A short statement of the selected requirement and why it applies. -**Steps:** -- **Description**: Retrieve secrets via approved manager. - - **Action**: Load into memory; avoid disk writes. - - **Source**: SECURE_VAULT +Possible minimum requirements include one missing instruction file, one directory, one configuration value, one dependency manifest, one validation command, or one documentation update. These are examples, not defaults. -### CONTEXT_LOADING -Index key docs and scripts; avoid raw loads. +### `CREATE` -**Steps:** -- **Description**: Build index of md/json/yml files (paths + purpose). - - **Action**: Summarize without storing raw content. - - **Source**: FILE_SYSTEM_SCAN +- `description`: Create only the selected missing artifact or structure. +- `condition`: Skip creation when the target already contains a usable equivalent. +- `action`: Preserve existing work and avoid duplicates. +- `output`: The created or updated artifact, if any. -### STARTUP_VALIDATION_AND_ROLLBACK -Define pass criteria and READY signal. +### `CONFIGURE` -**Steps:** -- **Description**: List diagnostics to run when enabled. - - **Action**: Document commands; skip execution by default. - - **Source**: DIAGNOSTIC_CHECKLIST +- `description`: Connect the created or existing artifact to the target. +- `condition`: Configure only what is required for the selected minimum step. +- `action`: Update paths, references, scripts, permissions, or instructions when they are directly necessary. -- **Description**: Announce READY upon criteria met. - - **Action**: Print concise readiness message. - - **Source**: SYSTEM_READINESS_SIGNAL +### `VALIDATE` -## EXECUTION_START +- `description`: Prove the target can perform its intended minimum operation. +- `validation`: Use the cheapest relevant check available, such as file existence, parseability, a documented command, a link between files, or a simple manual review. +- `status`: Use `OPERATIONAL`, `OPERATIONAL_WITH_WARNINGS`, or `BLOCKED`. -Create a tiny snapshot and announce READY. +### `REPORT` -**Steps:** -- **Description**: Generate INIT_CONTEXT_SNAPSHOT.md (summary only). - - **Action**: Write directory overview + metrics headings. - - **Output File**: ./INIT_CONTEXT_SNAPSHOT.md +Report: -- **Description**: Print READY + snapshot path. - - **Action**: Log summary and await instructions. - - **Await Instructions**: true \ No newline at end of file +- target identified; +- requirement selected; +- artifacts created or updated; +- configuration performed; +- validation result; +- remaining warnings or blockers; +- final status. + +## Example Outcomes + +- A local directory with no documentation receives a concise `README.md`, then validates that the file identifies the target and next action. +- A small code project with adequate documentation but no agent instructions receives an `AGENTS.md` only if agents will operate in it. +- A target with all required artifacts receives no new files and reports `OPERATIONAL` after validation. \ No newline at end of file diff --git a/templates/server_init_protocol.md b/templates/server_init_protocol.md index 304de0222..4ece9e61e 100644 --- a/templates/server_init_protocol.md +++ b/templates/server_init_protocol.md @@ -1,168 +1,109 @@ -# Server Init Protocol (Template) - -**Intent** -- Production-oriented initialization with clear, safe probes. -- Emphasizes precise execution rules, architectural context, and tool policies. - -## INIT_SEQUENCE - -### HOST_PREFLIGHT -Verify OS/kernel compatibility and time alignment (read-only by default). - -**Steps:** -- **Description**: Note OS family and kernel. - - **Action**: Use safe reads; prefer APIs to shell. - - **Source**: OS_INFO - -- **Description**: Verify NTP/time coherence. - - **Action**: Read time settings; report drift; no mutation. - - **Source**: SYSTEM_TIME_INFO - -### RESOURCE_BASELINE -Capture compute/storage baseline to size workloads. - -**Steps:** -- **Description**: CPU, RAM, GPU presence (if applicable), disk free. - - **Action**: Prefer safe APIs and cached metrics. - - **Source**: SYSTEM_HARDWARE_METRICS - -- **Description**: Load average and thresholds. - - **Action**: Read load metrics; set warning thresholds. - - **Source**: SYSTEM_PERFORMANCE_METRICS - -### ARCHITECTURE_AND_TOOLS -Ground execution rules in actual system design. - -**Steps:** -- **Description**: Document services, runtimes, and schedulers in use. - - **Action**: Summarize architecture: containers, queues, cron, orchestrators. - - **Source**: SYSTEM_ARCHITECTURE_DOCS - -- **Description**: Declare toolchain versions and paths. - - **Action**: Pin required CLIs and SDKs; define PATH expectations. - - **Source**: TOOLCHAIN_POLICY - -### TOOL_DISCOVERY_AND_API_POLICY -Define exact routing for external services. - -**Steps:** -- **Description**: Load capability matrix (if present). - - **Action**: Parse and validate schemas. - - **Source**: TOOL_SCHEMA - -- **Description**: Enforce API routing rules. - - **Policy**: - - Use approved HTTP clients/infrastructure modules. - - Do not proxy REST via generic fetchers. - - File access via dedicated file tools; stream large files. - - **Source**: API_ROUTING_POLICY - -### SECRET_MANAGEMENT -Strict credential handling and permissions. - -**Steps:** -- **Description**: Pull secrets from vault into memory only. - - **Action**: No disk writes; short-lived tokens preferred. - - **Source**: SECURE_VAULT - -- **Description**: Validate permissions on secret dirs/keys. - - **Action**: Confirm intended permission posture. - - **Source**: SECRET_STORAGE_PERMISSIONS - -### NETWORK_SECURITY -Confirm firewall posture and scanning plan. - -**Steps:** -- **Description**: Authorized ports/services only. - - **Action**: Document intended ufw/security-group state. - - **Source**: FIREWALL_POLICY - -- **Description**: Scanning cadence (SAST/DAST/deps). - - **Action**: Define cadence, owners, and thresholds. - - **Source**: SECURITY_SCANNER_PLAN - -### CONTEXT_LOADING -Load environment, docs, and schedules. - -**Steps:** -- **Description**: Index configs and docs. - - **Action**: Build in-memory map of paths and purposes. - - **Source**: FILE_SYSTEM_SCAN - -- **Description**: Inventory cron manifests. - - **Action**: List active schedules and owners. - - **Source**: PROJECT_CRON_MANIFESTS - -- **Description**: Persist sanitized context snapshot. - - **Action**: Serialize a summary (no raw content) to disk. - - **Output Path**: ./cache/context.snapshot.json - - **Source**: SERIALIZED_CONTEXT_MAP - -### CODE_GOVERNANCE_AND_STATE -Auditability, backups, caches, telemetry. - -**Steps:** -- **Description**: Semantic diffs for changes. - - **Policy**: Append to ./logs/code_history/.patch - - **Source**: VERSION_CONTROL_POLICY - -- **Description**: Backup strategy (data dirs). - - **Action**: Define rsync/remote storage targets; defer execution. - - **Source**: BACKUP_STRATEGY - -- **Description**: Cache hygiene. - - **Action**: Expire >7d files when enabled; configurable. - - **Source**: CACHE_POLICY - -- **Description**: Logging fan-out. - - **Action**: Plan forwarding to centralized sinks. - - **Source**: CENTRALIZED_LOGGING_PLAN - -### STARTUP_VALIDATION_AND_ROLLBACK -Diagnostics, readiness, and rollback. - -**Steps:** -- **Description**: Lint/tests/static analysis. - - **Action**: List commands and pass criteria. - - **Source**: DIAGNOSTIC_CHECKLIST - -- **Description**: READY signal and rollback triggers. - - **Action**: Define log format and state change; specify when to roll back. - - **Source**: SYSTEM_READINESS_SIGNAL - -### SELF_PRIMING_AND_CONTEXTUALIZATION -Load directives/prompts and recent context. - -**Steps:** -- **Description**: Core directives and system prompts. - - **Action**: Load into working memory. - - **Source**: CORE_AND_PROMPTS - -- **Description**: Memory recall of salient events. - - **Action**: Query memory adapters; assemble situational vector. - - **Source**: INTERNAL_MEMORY_RETRIEVAL - -- **Description**: Enter ACCEPTING state. - - **Action**: Log completion and await commands. - - **Source**: SELF_PRIMING_STATUS - -## MINIMUM_RUNTIME_CONTEXT_LOAD - -Essential elements: -- Host metadata (from cached metrics) -- Tool capability matrix (if present) -- Core directives/prompts -- Cron manifests and script inventory -- Recent logs (sanitized) and version patches -- Context snapshot (sanitized summary) - -## EXECUTION_START - -**Steps:** -- **Description**: Generate INIT_CONTEXT_SNAPSHOT.md (summaries only). - - **Action**: Create directory tree (depth 3), metrics table, key locations. - - **Output File**: ./INIT_CONTEXT_SNAPSHOT.md - -- **Description**: Print READY + snapshot path. - - **Action**: Log concise summary; await instructions. - - **Await Instructions**: true \ No newline at end of file +--- +name: Server Init Protocol +target: Server, service host, production infrastructure, or deployment environment +purpose: Inspect server-specific operational requirements, configure what applies, validate readiness, and report deployment state. +mode: + - active + - dry run + - repair + - reinitialize +creates: + - Server report when host state must be recorded + - Service definitions or startup scripts when required + - Environment examples when configuration must be documented without secrets + - Runbook or validation report when operations need handoff material +configures: + - Operating system prerequisites + - Runtime settings + - Services + - Networking and firewall policy + - Secret references + - Logging, backups, and deployment checks +validates: + - Required services start or are already running + - Dependencies and ports are available + - Configuration parses + - Resource, storage, time, and security checks pass or produce warnings +optional_outputs: + - SERVER.md + - RUNBOOK.md + - SNAPSHOT.md + - INIT_CONTEXT_SNAPSHOT.md + - .env.example + - health check or readiness report +--- + +# Server Init Protocol + +Use this template for servers, service hosts, production infrastructure, or deployment environments. Server-specific checks belong here, not in the general root protocol. + +## Target Fit + +Use this template when the target's operation depends on host state, services, network posture, secrets, storage, startup behavior, or deployment readiness. + +Do not use this template for a non-server target unless server infrastructure is actually part of its operation. + +## Procedure + +### `INSPECT` + +- `description`: Build a relevant picture of the host and service environment. +- `inspect`: Operating system, kernel, clock and time source, CPU, RAM, storage, load, users or service accounts, runtime versions, service manager, container or orchestrator state, network interfaces, listening ports, firewall policy, secret locations by reference, logging destinations, backup expectations, and existing runbooks. +- `condition`: Use read-only inspection first. Avoid privileged or destructive actions unless the operator explicitly authorizes them. +- `source`: Host files, service definitions, package manifests, deployment docs, cloud or container metadata, monitoring notes, and operator constraints. + +### `DETERMINE` + +- `description`: Decide what the server needs to become operational. +- `action`: Identify required packages, services, ports, environment variables, secret references, storage paths, permissions, startup order, deployment commands, monitoring hooks, backup strategy, and rollback expectations. +- `condition`: Treat every output as conditional. A snapshot, server report, or runbook is useful only when it helps operation, handoff, audit, or recovery. +- `output`: A server-specific initialization plan. + +### `CREATE` + +Create only artifacts required by the server target. Possible outputs include: + +- service definitions; +- startup scripts; +- `.env.example` without secrets; +- `SERVER.md`; +- `RUNBOOK.md`; +- `SNAPSHOT.md` or `INIT_CONTEXT_SNAPSHOT.md` when a point-in-time record is useful; +- readiness or health-check scripts; +- deployment notes; +- backup or restore instructions. + +Do not write raw secrets to disk. Do not create unrelated project files because this is a server template. + +### `CONFIGURE` + +- `description`: Configure the server elements required for operation. +- `action`: Set or document runtime paths, service units, container settings, scheduler entries, firewall rules, reverse proxy routes, TLS expectations, secret references, permissions, log locations, backup targets, and deployment commands. +- `condition`: Make active changes only in active or repair mode and only with appropriate access. + +### `VALIDATE` + +- `description`: Confirm the server can perform its intended role. +- `validation`: Use relevant checks such as configuration parsing, service status, startup commands, port availability, dependency resolution, disk headroom, clock coherence, firewall review, secret reference availability, log writeability, backup path accessibility, and health endpoint response. +- `status`: Use `OPERATIONAL`, `OPERATIONAL_WITH_WARNINGS`, `BLOCKED`, or `DRY_RUN_COMPLETE`. + +Do not declare a server operational if required services cannot start, required configuration cannot parse, or required secrets are unavailable. + +### `REPORT` + +Report: + +- target host or environment; +- inspected host, service, network, secret, logging, and backup areas; +- created or updated artifacts; +- configured services or settings; +- validation checks and outcomes; +- warnings, missing access, or blockers; +- final operational state. + +## Server-Specific Notes + +- Host operating-system checks are server concerns. +- Clock, NTP, CPU, RAM, storage, and load metrics are server concerns. +- Firewall, secret handling, security scanners, backups, cache expiration, centralized logging, and generated environment snapshots are server concerns when they apply. +- These concerns must not be imposed on unrelated targets by the root protocol. \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 269a3d72d..11c6767c4 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,9 +1,6 @@ import tailwindcss from "@tailwindcss/vite"; import react from "@vitejs/plugin-react-swc"; -import { defineConfig, PluginOption } from "vite"; - -import sparkPlugin from "@github/spark/spark-vite-plugin"; -import createIconImportProxy from "@github/spark/vitePhosphorIconProxyPlugin"; +import { defineConfig } from "vite"; import { resolve } from 'path' const projectRoot = process.env.PROJECT_ROOT || import.meta.dirname @@ -17,9 +14,6 @@ export default defineConfig(({ command }) => ({ plugins: [ react(), tailwindcss(), - // DO NOT REMOVE - createIconImportProxy() as PluginOption, - sparkPlugin() as PluginOption, ], resolve: { alias: { From 378e6f7ecddb0548200b1b4e86ed3cae1bb2cc00 Mon Sep 17 00:00:00 2001 From: Alejandro <23019072+iamcapote@users.noreply.github.com> Date: Sun, 14 Jun 2026 21:34:19 +0000 Subject: [PATCH 2/8] docs: update GitHub Pages deployment instructions for clarity --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e8987e545..465ac8dcf 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,8 @@ The build runs `scripts/check-templates.mjs` before compiling the site. That che The public site is deployed with GitHub Pages from the existing Vite build. It renders the Markdown files under `templates/` as the canonical source and keeps copy-to-clipboard behavior for exact template content. +GitHub Pages must use **Build and deployment > Source: GitHub Actions** for this repository. Do not use **Deploy from a branch > root**, because that serves the unbuilt Vite source files and the browser will try to load `/src/main.tsx` directly. + Repository: ## 10. BIThub Discussion And Guides From fbd1282436755b2d1249d3ae699a7583e9e2e8a4 Mon Sep 17 00:00:00 2001 From: Alejandro <23019072+iamcapote@users.noreply.github.com> Date: Sun, 14 Jun 2026 21:49:02 +0000 Subject: [PATCH 3/8] chore: update GitHub Actions to use latest versions of checkout, setup-node, upload-pages-artifact, and deploy-pages; add smoke test for built entrypoint --- .github/workflows/ci.yml | 12 ++++++++++-- .github/workflows/deploy.yml | 16 ++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8358de453..5f32f6627 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,10 +9,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20 cache: "npm" @@ -22,3 +22,11 @@ jobs: - name: Run build run: npm run build + + - name: Smoke test built entrypoint + run: | + test -f dist/index.html + if grep -q 'src="/src/main.tsx"' dist/index.html; then + echo "Smoke test failed: dist/index.html still references /src/main.tsx" + exit 1 + fi diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index fab97b00a..c8f1d2751 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -19,10 +19,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20 cache: "npm" @@ -33,8 +33,16 @@ jobs: - name: Build site run: npm run build + - name: Smoke test built entrypoint + run: | + test -f dist/index.html + if grep -q 'src="/src/main.tsx"' dist/index.html; then + echo "Smoke test failed: dist/index.html still references /src/main.tsx" + exit 1 + fi + - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v5 with: path: dist @@ -47,4 +55,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v5 From 9019668cbbc2b23fbde8d759f7294a1abf5f4e8e Mon Sep 17 00:00:00 2001 From: Alejandro <23019072+iamcapote@users.noreply.github.com> Date: Sun, 14 Jun 2026 22:20:43 +0000 Subject: [PATCH 4/8] refactor: simplify init.md instructions and templates; enhance clarity and relevance across components --- src/App.tsx | 15 +------ src/components/layout/AppHeader.tsx | 28 +------------ src/components/sections/HeroSection.tsx | 17 +++----- src/components/tabs/ContextTab.tsx | 18 +++------ src/components/tabs/GuideTab.tsx | 54 +++++++++---------------- src/components/tabs/OverviewTab.tsx | 21 +++++----- src/components/tabs/TemplatesTab.tsx | 20 +-------- src/data/templates.ts | 20 ++++----- 8 files changed, 55 insertions(+), 138 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 994b808bc..b23bb513e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -61,26 +61,13 @@ function App() {

init.md

- A general operational initialization protocol from the BITwiki ecosystem. Inspect what exists, determine - what is needed, create what applies, validate the result, and report what became operational. + Copy init instructions and templates for your target. Keep only what applies.

diff --git a/src/components/layout/AppHeader.tsx b/src/components/layout/AppHeader.tsx index 1287e25d8..2f2a5ea5d 100644 --- a/src/components/layout/AppHeader.tsx +++ b/src/components/layout/AppHeader.tsx @@ -1,4 +1,4 @@ -import { BookOpen, ChatsCircle, GithubLogo, Globe, Stack } from "@phosphor-icons/react" +import { Stack } from "@phosphor-icons/react" import { Button } from "@/components/ui/button" interface AppHeaderProps { @@ -15,7 +15,7 @@ export function AppHeader({ onSelectTab }: AppHeaderProps) {

init.md

-

General operational initialization protocol

+

Copy init instructions and templates

@@ -24,30 +24,6 @@ export function AppHeader({ onSelectTab }: AppHeaderProps) { Templates - - - -
diff --git a/src/components/sections/HeroSection.tsx b/src/components/sections/HeroSection.tsx index 65249322f..2e0917429 100644 --- a/src/components/sections/HeroSection.tsx +++ b/src/components/sections/HeroSection.tsx @@ -1,4 +1,4 @@ -import { ArrowRight, BookOpen, ChatsCircle } from "@phosphor-icons/react" +import { ArrowRight, BookOpen } from "@phosphor-icons/react" import { Button } from "@/components/ui/button" const stages = ["Inspect", "Determine", "Create", "Configure", "Validate", "Report"] @@ -14,14 +14,13 @@ export function HeroSection({ onSelectTab }: HeroSectionProps) {

- BITwiki open protocol + init.md protocol

- Initialize what the target actually needs. + Copy init instructions that match your target.

- init.md is a general procedure for inspecting a target, determining its operational requirements, - creating and configuring what applies, validating the result, and reporting what became operational. + Use init.md to inspect the target, pick the right template, copy what applies, and validate the result.

-
@@ -57,7 +50,7 @@ export function HeroSection({ onSelectTab }: HeroSectionProps) { ))}

- The root protocol determines the process. Templates define target-specific implementation patterns. + Start from the root protocol, then copy the template sections that fit the target.

diff --git a/src/components/tabs/ContextTab.tsx b/src/components/tabs/ContextTab.tsx index a6b97100c..121ddd5c5 100644 --- a/src/components/tabs/ContextTab.tsx +++ b/src/components/tabs/ContextTab.tsx @@ -37,8 +37,7 @@ export function ContextTab() { The target determines the implementation - What is order for one target can be irrelevant noise for another. init.md keeps the root procedure general - and moves concrete requirements into templates. + What helps one target can be noise for another. Use the root process and copy only matching template steps. @@ -62,12 +61,10 @@ export function ContextTab() {

- The protocol preserves valid existing files, updates incomplete files when appropriate, avoids duplicates, - and identifies conflicts before changing them. + Keep valid existing files, update incomplete files when needed, and avoid duplicates.

- A substantial README should not be replaced by a template. Existing agent instructions should be preserved - when valid. Local project conventions should shape any new artifacts. + Do not overwrite good docs with template text. Preserve useful existing instructions.

@@ -79,9 +76,7 @@ export function ContextTab() {

- A development project might validate with a build, lint, test, or documented command review. A server may - validate service status and network readiness. An agent may validate instructions, tools, and startup - expectations. + Validate with evidence that matches the target: build/test, service status, or instruction/tool checks.

Do not declare success without a validation step connected to the target's intended result.

@@ -115,9 +110,8 @@ export function ContextTab() {

- During inspection, determine whether the target will be operated or modified by AI agents. If agent guidance - is useful and absent, derive `AGENTS.md` from the actual target. Different projects should have different - instructions, and nested projects may need nested scopes. + During inspection, check whether AI agents will operate on the target. Create AGENTS.md only when it helps + this specific target.

{['OPERATIONAL', 'OPERATIONAL_WITH_WARNINGS', 'BLOCKED', 'DRY_RUN_COMPLETE'].map((state) => ( diff --git a/src/components/tabs/GuideTab.tsx b/src/components/tabs/GuideTab.tsx index 007cb5a50..9e8a297fc 100644 --- a/src/components/tabs/GuideTab.tsx +++ b/src/components/tabs/GuideTab.tsx @@ -1,4 +1,4 @@ -import { ArrowRight, CheckCircle, Copy } from "@phosphor-icons/react" +import { CheckCircle, Copy } from "@phosphor-icons/react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { toast } from "sonner" @@ -6,42 +6,42 @@ import { toast } from "sonner" const workflow = [ { title: "Identify the target", - body: "Name what is being initialized, where it lives, who operates it, and what operational result is expected.", + body: "State what you are initializing and what outcome should be operational.", }, { title: "Choose the closest template", - body: "Start from minimal, dry run, development project, agent, or server. Combine compatible sections when the target requires it.", + body: "Pick minimal, dry run, development project, agent, or server based on the target.", }, { title: "Copy or adapt the template", - body: "Use the template as a concrete pattern, then remove anything that does not apply to the target.", + body: "Copy the template, then remove steps that do not apply.", }, { title: "Run the initialization procedure", - body: "Inspect what exists, determine requirements, create what applies, and configure what is required.", + body: "Inspect, determine, create, and configure only what is required.", }, { title: "Review the validation result", - body: "Operational status comes from relevant checks, such as commands, parseable configuration, service health, or instruction consistency.", + body: "Use relevant checks to confirm the target is operational.", }, { title: "Keep the target-specific init.md", - body: "The result should describe this target's initialization path, not a generic checklist copied forward forever.", + body: "Keep instructions specific to this target, not a generic checklist.", }, ] const examples = [ - "Initialize this repository using the development-project template.", - "Inspect this server using the server template in dry-run mode.", - "Determine what this agent workspace needs to become operational.", - "Create an AGENTS.md file only if this project would benefit from one.", + "Use init.md to initialize this repository. Copy templates/development_project_init_protocol.md and remove steps that do not apply.", + "Use init.md in dry-run mode for this server. Copy templates/server_init_protocol.md and return only a plan and validation checks.", + "Use init.md to set up this agent workspace. Copy templates/agent_init_protocol.md and create only target-specific instructions.", + "Use init.md minimal mode. Copy templates/minimal_init_protocol.md and make the smallest change needed to pass validation.", ] export function GuideTab() { const copyExample = async (example: string) => { try { await navigator.clipboard.writeText(example) - toast.success("Example copied") + toast.success("Init instruction copied") } catch { toast.error("Failed to copy example") } @@ -51,9 +51,9 @@ export function GuideTab() {
- Use init.md directly + Use this page to copy init instructions - Start with the target, not the file list. The template is a pattern for deciding what applies. + Start with the target. Copy the matching template and adapt it. @@ -77,16 +77,15 @@ export function GuideTab() { Template selection - Choose the pattern that matches the target's real operational needs. + Choose the template that best matches the target.

- Use minimal for narrow gaps, dry run for no-change planning, development project for codebases, agent for - agent instructions and tool setup, and server for host or deployment readiness. + Use minimal for small gaps, dry run for planning, development project for codebases, agent for + agent setup, and server for host readiness.

- If no template fits cleanly, use the root protocol to create a target-specific plan and record the - validation criteria before making changes. + If no template fits, use the root protocol and write a target-specific plan with validation criteria.

@@ -94,7 +93,7 @@ export function GuideTab() { Example instructions - Copy one into an agent or adapt it for a human handoff. + Copy one and paste it into your workflow. {examples.map((example) => ( @@ -113,7 +112,7 @@ export function GuideTab() { Completion review - Before calling the target operational, check that the report answers these questions. + Before marking complete, make sure your report answers these questions. {[ @@ -131,19 +130,6 @@ export function GuideTab() { ))} - -
) } \ No newline at end of file diff --git a/src/components/tabs/OverviewTab.tsx b/src/components/tabs/OverviewTab.tsx index 868670d79..5f26cc98b 100644 --- a/src/components/tabs/OverviewTab.tsx +++ b/src/components/tabs/OverviewTab.tsx @@ -47,23 +47,20 @@ export function OverviewTab() {
- A procedure, not a scaffold + A procedure, not a file dump - The canonical file defines the general initialization procedure. Templates specialize that procedure for - specific targets. + init.md gives you a process. Templates help you copy target-specific instructions.

- init.md determines what a target needs in order to become operational. A target might be a new project, - an existing repository, an agent workspace, a server, a research directory, or a service being restored in - a new environment. + This site is for copying init instructions and templates. Start with the target, then copy only what is + needed.

- The target determines the implementation. A server may need host diagnostics and firewall review. A - development project may need build commands. An agent may need instructions and tool boundaries. A minimal - target may need only one missing file and one validation step. + A server, project, or agent workspace will need different steps. The template is a starting point, not + a strict checklist.

@@ -102,17 +99,17 @@ export function OverviewTab() { - Operational means validated + Done means validated
-

Success requires a validation step derived from the target, not a generic success banner.

+

Do not mark complete without a target-specific validation check.

-

No output file is universal. README, PRD, snapshot, server report, and AGENTS.md are conditional.

+

Output files are conditional. Only create files that this target actually needs.

diff --git a/src/components/tabs/TemplatesTab.tsx b/src/components/tabs/TemplatesTab.tsx index b1d91e60d..15bf6acbe 100644 --- a/src/components/tabs/TemplatesTab.tsx +++ b/src/components/tabs/TemplatesTab.tsx @@ -1,7 +1,7 @@ import { createElement, useCallback, useMemo, useState } from "react" import { marked } from "marked" import { toast } from "sonner" -import { ArrowRight, CaretLeft, CaretRight, CheckCircle, Copy, GithubLogo } from "@phosphor-icons/react" +import { CaretLeft, CaretRight, CheckCircle, Copy } from "@phosphor-icons/react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" @@ -64,8 +64,7 @@ export function TemplatesTab() {

Canonical Templates

- These cards render the Markdown files in `templates/`. The copy action copies the exact canonical file - content, including metadata. + Preview templates from templates/. Copy Markdown and paste it into your init workflow.

@@ -117,12 +116,6 @@ export function TemplatesTab() { {copiedStates[template.id] ? : } Copy Markdown -
@@ -157,15 +150,6 @@ export function TemplatesTab() {

Rendered Markdown

- - Open source file - -
diff --git a/src/data/templates.ts b/src/data/templates.ts index 48ca8e607..c61d9e6fa 100644 --- a/src/data/templates.ts +++ b/src/data/templates.ts @@ -92,9 +92,9 @@ export const templates: TemplateDefinition[] = [ { id: "minimal", title: "Minimal", - summary: "Smallest reasonable initialization pass for a narrow operational gap.", + summary: "Small init pass for one clear gap.", description: - "Inspect a small target, identify the least missing requirement, create or configure only that requirement, validate it, and report the result.", + "Inspect a small target, add only the missing requirement, validate it, and report status.", category: "General", sourcePath: "templates/minimal_init_protocol.md", sourceUrl: sourceUrl("templates/minimal_init_protocol.md"), @@ -106,9 +106,9 @@ export const templates: TemplateDefinition[] = [ { id: "dry-run", title: "Dry Run", - summary: "Plan initialization work across target types without mutating the target.", + summary: "Plan init work without changing files or systems.", description: - "Inspect the target, determine requirements, propose the active work, and report what would become operational without creating files or changing state.", + "Inspect the target, list required work, and report what would become operational.", category: "General", sourcePath: "templates/dry_run_init_protocol.md", sourceUrl: sourceUrl("templates/dry_run_init_protocol.md"), @@ -120,9 +120,9 @@ export const templates: TemplateDefinition[] = [ { id: "development-project", title: "Development Project", - summary: "Initialize repositories, apps, packages, CLIs, websites, and monorepos.", + summary: "Init template for repositories and software projects.", description: - "Inspect the actual project shape, decide which developer artifacts and commands apply, configure the workflow, and validate development readiness.", + "Inspect project shape, choose the right artifacts and commands, then validate development readiness.", category: "Target-specific", sourcePath: "templates/development_project_init_protocol.md", sourceUrl: sourceUrl("templates/development_project_init_protocol.md"), @@ -134,9 +134,9 @@ export const templates: TemplateDefinition[] = [ { id: "agent", title: "Agent", - summary: "Initialize agent instructions, tools, prompts, state, and startup checks.", + summary: "Init template for agent instructions and tool boundaries.", description: - "Determine what a specific agent target needs, preserve valid instructions, create only useful agent artifacts, and validate readiness.", + "Define what the agent target needs, keep valid instructions, add missing parts, and validate readiness.", category: "Target-specific", sourcePath: "templates/agent_init_protocol.md", sourceUrl: sourceUrl("templates/agent_init_protocol.md"), @@ -148,9 +148,9 @@ export const templates: TemplateDefinition[] = [ { id: "server", title: "Server", - summary: "Server, service-host, infrastructure, and deployment readiness pattern.", + summary: "Init template for server and deployment readiness.", description: - "Move host diagnostics, services, networking, secrets, logging, backups, and deployment checks into the server-specific layer where they belong.", + "Handle host checks, services, networking, and deployment validation in a server-specific flow.", category: "Target-specific", sourcePath: "templates/server_init_protocol.md", sourceUrl: sourceUrl("templates/server_init_protocol.md"), From 5ded6c5d0665b36b17e883be6115ed0003955856 Mon Sep 17 00:00:00 2001 From: Alejandro <23019072+iamcapote@users.noreply.github.com> Date: Sun, 14 Jun 2026 22:26:29 +0000 Subject: [PATCH 5/8] refactor: enhance clarity and specificity in init.md and related components; improve link visibility and template instructions --- PRD.md | 10 +++--- README.md | 6 ++-- src/App.tsx | 5 ++- src/components/layout/AppHeader.tsx | 14 +++++++- src/components/sections/HeroSection.tsx | 19 +++++----- src/components/tabs/ContextTab.tsx | 29 ++++++++------- src/components/tabs/GuideTab.tsx | 48 ++++++++++++------------- src/components/tabs/OverviewTab.tsx | 18 +++++----- src/components/tabs/TemplatesTab.tsx | 44 ++++++++++++++++++----- src/prd.md | 4 +-- 10 files changed, 119 insertions(+), 78 deletions(-) diff --git a/PRD.md b/PRD.md index 4cbc8d5bd..00403d9d2 100644 --- a/PRD.md +++ b/PRD.md @@ -57,7 +57,7 @@ The template browser must: - render content from the canonical Markdown files; - parse and display template metadata; -- provide source links to each Markdown file; +- copy root `init.md` and template Markdown content; - copy the exact canonical Markdown content, including metadata; - avoid storing complete template bodies as TypeScript strings. @@ -74,18 +74,16 @@ The public interface should communicate: - the relationship between the root protocol and templates; - conditional generated outputs; - target-specific agent instructions; -- BIThub as the discussion and contribution destination. +- GitHub and BIThub as header and footer destinations, with content reserved for init guidance and copy actions. ## BITwiki And BIThub Integration The visual and editorial system should align with the BITwiki ecosystem through strong black, white, and neutral structure, high-contrast typography, geometric protocol surfaces, restrained accents, and precise technical language. -Required public links: +Required public links, limited to header and footer: - GitHub repository: - BIThub forum: -- BIThub Guides: -- BITwiki: BIThub is presented as the place to discuss the protocol, ask questions, share templates, propose improvements, and report implementation experiences. @@ -111,6 +109,6 @@ GitHub Pages remains the public interface. The existing deploy workflow builds t - Development-project and agent templates exist. - Templates include metadata and optional outputs. - The website renders canonical Markdown template files and copies exact source content. -- GitHub, BIThub, Guides, and BITwiki links are visible. +- GitHub and BIThub links are visible in the header and footer only. - README and PRD describe the corrected model. - Production build succeeds without adding a backend or execution runtime. \ No newline at end of file diff --git a/README.md b/README.md index 465ac8dcf..8106d746f 100644 --- a/README.md +++ b/README.md @@ -83,19 +83,17 @@ The build runs `scripts/check-templates.mjs` before compiling the site. That che ## 9. Website -The public site is deployed with GitHub Pages from the existing Vite build. It renders the Markdown files under `templates/` as the canonical source and keeps copy-to-clipboard behavior for exact template content. +The public site is deployed with GitHub Pages from the existing Vite build. It renders the Markdown files under `templates/` as the canonical source and keeps copy-to-clipboard behavior for root `init.md` and exact template content. GitHub Pages must use **Build and deployment > Source: GitHub Actions** for this repository. Do not use **Deploy from a branch > root**, because that serves the unbuilt Vite source files and the browser will try to load `/src/main.tsx` directly. Repository: -## 10. BIThub Discussion And Guides +## 10. BIThub Discussion Use BIThub to discuss the protocol, ask questions, share templates, propose improvements, and report implementation experiences. - BIThub forum: -- BIThub Guides: -- BITwiki: ## 11. Contributing diff --git a/src/App.tsx b/src/App.tsx index b23bb513e..6bc072eb5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -61,13 +61,16 @@ function App() {

init.md

- Copy init instructions and templates for your target. Keep only what applies. + Copy init.md or an init template. Keep only what applies to the target.

diff --git a/src/components/layout/AppHeader.tsx b/src/components/layout/AppHeader.tsx index 2f2a5ea5d..3b757eddd 100644 --- a/src/components/layout/AppHeader.tsx +++ b/src/components/layout/AppHeader.tsx @@ -1,4 +1,4 @@ -import { Stack } from "@phosphor-icons/react" +import { ChatsCircle, GithubLogo, Stack } from "@phosphor-icons/react" import { Button } from "@/components/ui/button" interface AppHeaderProps { @@ -24,6 +24,18 @@ export function AppHeader({ onSelectTab }: AppHeaderProps) { Templates + +
diff --git a/src/components/sections/HeroSection.tsx b/src/components/sections/HeroSection.tsx index 2e0917429..9595da58a 100644 --- a/src/components/sections/HeroSection.tsx +++ b/src/components/sections/HeroSection.tsx @@ -14,24 +14,23 @@ export function HeroSection({ onSelectTab }: HeroSectionProps) {

- init.md protocol + BITwiki open protocol

- Copy init instructions that match your target. + Initialize what the target actually needs.

- Use init.md to inspect the target, pick the right template, copy what applies, and validate the result. + Copy init.md for the root procedure. Copy a template when you need target-specific init instructions. + Keep only what helps the target become ready.

-
@@ -50,7 +49,7 @@ export function HeroSection({ onSelectTab }: HeroSectionProps) { ))}

- Start from the root protocol, then copy the template sections that fit the target. + Use this sequence to decide what init instructions, files, or checks actually apply.

diff --git a/src/components/tabs/ContextTab.tsx b/src/components/tabs/ContextTab.tsx index 121ddd5c5..28205a080 100644 --- a/src/components/tabs/ContextTab.tsx +++ b/src/components/tabs/ContextTab.tsx @@ -5,19 +5,19 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/com const relationships = [ { title: "Root protocol", - body: "Defines the general process: inspect, determine, create, configure, validate, and report.", + body: "Copy init.md when you need the general inspect, determine, create, configure, validate, and report process.", }, { title: "Template", - body: "Specializes the process for a target category such as server, development project, agent, dry run, or minimal initialization.", + body: "Copy a template when the target needs specific init instructions for a project, agent, server, dry run, or small gap.", }, { title: "Generated output", - body: "Exists only when the target or selected template requires it. No output file is universal.", + body: "Create output only when the selected init path requires it. No output file is universal.", }, { title: "Validation result", - body: "States whether the target is operational, operational with warnings, blocked, or complete as a dry run.", + body: "Report whether the target is ready, ready with warnings, blocked, or complete as a dry run.", }, ] @@ -37,7 +37,7 @@ export function ContextTab() { The target determines the implementation - What helps one target can be noise for another. Use the root process and copy only matching template steps. + Useful init work depends on the target. init.md stays general; templates hold the target-specific details. @@ -61,10 +61,12 @@ export function ContextTab() {

- Keep valid existing files, update incomplete files when needed, and avoid duplicates. + Keep valid existing files. Update incomplete files when useful. Avoid duplicates and identify conflicts + before changing them.

- Do not overwrite good docs with template text. Preserve useful existing instructions. + Do not replace a useful README with a template. Preserve valid agent instructions. Let local conventions + shape any new init output.

@@ -76,9 +78,10 @@ export function ContextTab() {

- Validate with evidence that matches the target: build/test, service status, or instruction/tool checks. + A project might validate with a build, lint, test, or command review. A server may validate service status + and network readiness. An agent may validate instructions, tools, and startup expectations.

-

Do not declare success without a validation step connected to the target's intended result.

+

Do not declare success without a validation step connected to the target.

@@ -86,7 +89,7 @@ export function ContextTab() { Conditional outputs - No output file is universally required except where the selected target or template requires it. + Create these only when the selected init path calls for them.
@@ -106,12 +109,12 @@ export function ContextTab() { Agent instructions are conditional - AGENTS.md is important when agents operate in a target, but it is not installed everywhere. + AGENTS.md matters for agent-operated targets, but it is not installed everywhere.

- During inspection, check whether AI agents will operate on the target. Create AGENTS.md only when it helps - this specific target. + During inspection, decide whether agents will operate on the target. If agent guidance is useful and absent, + derive `AGENTS.md` from the target. Different projects may need different instructions.

{['OPERATIONAL', 'OPERATIONAL_WITH_WARNINGS', 'BLOCKED', 'DRY_RUN_COMPLETE'].map((state) => ( diff --git a/src/components/tabs/GuideTab.tsx b/src/components/tabs/GuideTab.tsx index 9e8a297fc..c37df9bb2 100644 --- a/src/components/tabs/GuideTab.tsx +++ b/src/components/tabs/GuideTab.tsx @@ -6,42 +6,42 @@ import { toast } from "sonner" const workflow = [ { title: "Identify the target", - body: "State what you are initializing and what outcome should be operational.", + body: "Name what init.md is being used on, where it lives, and what ready means for that target.", }, { - title: "Choose the closest template", - body: "Pick minimal, dry run, development project, agent, or server based on the target.", + title: "Choose init.md or a template", + body: "Use init.md for the root procedure. Use a template when the target needs a more specific init path.", }, { - title: "Copy or adapt the template", - body: "Copy the template, then remove steps that do not apply.", + title: "Copy only useful init text", + body: "Copy the exact file, then remove instructions that do not apply before using it on the target.", }, { - title: "Run the initialization procedure", - body: "Inspect, determine, create, and configure only what is required.", + title: "Run the init procedure", + body: "Inspect what exists, decide what is missing, create or configure only what applies, then validate it.", }, { - title: "Review the validation result", - body: "Use relevant checks to confirm the target is operational.", + title: "Review validation", + body: "Use checks that match the target: commands, configuration, service health, or instruction consistency.", }, { - title: "Keep the target-specific init.md", - body: "Keep instructions specific to this target, not a generic checklist.", + title: "Keep the init result specific", + body: "The final instructions should explain this target, not a generic checklist copied forward forever.", }, ] const examples = [ - "Use init.md to initialize this repository. Copy templates/development_project_init_protocol.md and remove steps that do not apply.", - "Use init.md in dry-run mode for this server. Copy templates/server_init_protocol.md and return only a plan and validation checks.", - "Use init.md to set up this agent workspace. Copy templates/agent_init_protocol.md and create only target-specific instructions.", - "Use init.md minimal mode. Copy templates/minimal_init_protocol.md and make the smallest change needed to pass validation.", + "Copy init.md into this target and initialize only what applies.", + "Use templates/development_project_init_protocol.md to initialize this repository.", + "Run templates/dry_run_init_protocol.md and report the init work without changing files.", + "Use templates/agent_init_protocol.md only if this target needs agent instructions.", ] export function GuideTab() { const copyExample = async (example: string) => { try { await navigator.clipboard.writeText(example) - toast.success("Init instruction copied") + toast.success("Example copied") } catch { toast.error("Failed to copy example") } @@ -51,9 +51,9 @@ export function GuideTab() {
- Use this page to copy init instructions + Use init.md directly - Start with the target. Copy the matching template and adapt it. + Start with the target. Copy init.md or the closest template, then keep only the init work that applies. @@ -77,15 +77,15 @@ export function GuideTab() { Template selection - Choose the template that best matches the target. + Choose the init pattern that matches the target.

- Use minimal for small gaps, dry run for planning, development project for codebases, agent for - agent setup, and server for host readiness. + Use minimal for one clear gap, dry run for no-change planning, development project for codebases, agent + for agent instructions, and server for host or deployment readiness.

- If no template fits, use the root protocol and write a target-specific plan with validation criteria. + If no template fits, copy init.md and write a short target-specific init plan before making changes.

@@ -93,7 +93,7 @@ export function GuideTab() { Example instructions - Copy one and paste it into your workflow. + Copy one when asking someone or an agent to run init.md. {examples.map((example) => ( @@ -112,7 +112,7 @@ export function GuideTab() { Completion review - Before marking complete, make sure your report answers these questions. + Before calling the target operational, check that the report answers these questions. {[ diff --git a/src/components/tabs/OverviewTab.tsx b/src/components/tabs/OverviewTab.tsx index 5f26cc98b..5ebd08ffd 100644 --- a/src/components/tabs/OverviewTab.tsx +++ b/src/components/tabs/OverviewTab.tsx @@ -47,20 +47,20 @@ export function OverviewTab() {
- A procedure, not a file dump + A procedure, not a scaffold - init.md gives you a process. Templates help you copy target-specific instructions. + Copy init.md for the general procedure. Copy a template when the target needs specific init instructions.

- This site is for copying init instructions and templates. Start with the target, then copy only what is - needed. + init.md helps determine what a target needs to become ready. A target might be a repository, an agent + workspace, a server, a research directory, or a service being restored in a new environment.

- A server, project, or agent workspace will need different steps. The template is a starting point, not - a strict checklist. + The target decides the work. A server may need host checks. A project may need build commands. An agent may + need instructions and tool boundaries. A small target may need one file and one validation step.

@@ -99,17 +99,17 @@ export function OverviewTab() { - Done means validated + Operational means validated
-

Do not mark complete without a target-specific validation check.

+

Success requires a validation step tied to the target.

-

Output files are conditional. Only create files that this target actually needs.

+

No output file is universal. README, PRD, snapshot, server report, and AGENTS.md are conditional.

diff --git a/src/components/tabs/TemplatesTab.tsx b/src/components/tabs/TemplatesTab.tsx index 15bf6acbe..8761b7a10 100644 --- a/src/components/tabs/TemplatesTab.tsx +++ b/src/components/tabs/TemplatesTab.tsx @@ -1,11 +1,12 @@ import { createElement, useCallback, useMemo, useState } from "react" import { marked } from "marked" import { toast } from "sonner" -import { CaretLeft, CaretRight, CheckCircle, Copy } from "@phosphor-icons/react" +import { CaretLeft, CaretRight, CheckCircle, Copy, FileText } from "@phosphor-icons/react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { templates } from "@/data/templates" +import rootProtocolContent from "../../../init.md?raw" function stripFrontmatter(content: string) { return content.replace(/^---\n[\s\S]*?\n---\n?/, "") @@ -41,7 +42,7 @@ export function TemplatesTab() { try { await navigator.clipboard.writeText(content) setCopiedStates((prev) => ({ ...prev, [id]: true })) - toast.success("Canonical Markdown copied") + toast.success("Markdown copied") setTimeout(() => { setCopiedStates((prev) => ({ ...prev, [id]: false })) }, 2000) @@ -62,9 +63,9 @@ export function TemplatesTab() {
-

Canonical Templates

+

Copy init files

- Preview templates from templates/. Copy Markdown and paste it into your init workflow. + Copy init.md for the root procedure. Copy a template when the target needs more specific init instructions.

@@ -80,6 +81,35 @@ export function TemplatesTab() {
+ + +
+
+ +
+ + Root + + init.md + + The root initialization procedure. Copy this when you need the general inspect, determine, create, + configure, validate, and report flow. + +
+
+ +
+
+
+
@@ -114,7 +144,7 @@ export function TemplatesTab() { className="shrink-0" > {copiedStates[template.id] ? : } - Copy Markdown + Copy template
@@ -148,9 +178,7 @@ export function TemplatesTab() {
-
-

Rendered Markdown

-
+

Template preview

diff --git a/src/prd.md b/src/prd.md index f8b7c469a..370c128d8 100644 --- a/src/prd.md +++ b/src/prd.md @@ -21,11 +21,11 @@ Templates define concrete initialization patterns for specific targets. - Static Vite and React website. - GitHub Pages deployment. -- Template browser with copy-to-clipboard behavior. +- Root init.md and template browser with copy-to-clipboard behavior. - Canonical Markdown files under `templates/` imported with Vite raw imports. - Template metadata parsed from Markdown frontmatter. - Build-time template metadata check. -- Visible GitHub, BIThub, BIThub Guides, and BITwiki links. +- GitHub and BIThub links limited to header and footer. ## Non-Goals From 06b8b675bbbc823cc6f3739c8b6fb9289baf524d Mon Sep 17 00:00:00 2001 From: Alejandro <23019072+iamcapote@users.noreply.github.com> Date: Sun, 14 Jun 2026 22:32:23 +0000 Subject: [PATCH 6/8] refactor: update init instructions for clarity and specificity; enhance template metadata handling and copy behavior --- PRD.md | 11 ++- README.md | 4 +- src/App.tsx | 2 +- src/components/sections/HeroSection.tsx | 6 +- src/components/tabs/ContextTab.tsx | 4 +- src/components/tabs/GuideTab.tsx | 16 ++--- src/components/tabs/OverviewTab.tsx | 2 +- src/components/tabs/TemplatesTab.tsx | 94 +++++++++++++++++-------- src/prd.md | 4 +- 9 files changed, 90 insertions(+), 53 deletions(-) diff --git a/PRD.md b/PRD.md index 00403d9d2..d8023261b 100644 --- a/PRD.md +++ b/PRD.md @@ -49,16 +49,15 @@ Examples: - Generate a snapshot only when a point-in-time record is useful. - Generate a server report only for server or infrastructure targets. -## Canonical Markdown Source +## Template Source And Copy Behavior -The Markdown files under `templates/` are the canonical source of template content. The website imports those Markdown files directly with Vite raw imports. +The Markdown files under `templates/` are the canonical source for template metadata. The public copy action must copy practical init instructions, not raw source Markdown, YAML frontmatter, or template-system metadata. The template browser must: -- render content from the canonical Markdown files; - parse and display template metadata; -- copy root `init.md` and template Markdown content; -- copy the exact canonical Markdown content, including metadata; +- show the exact plain instruction that will be copied; +- copy concise root and template init instructions without YAML frontmatter; - avoid storing complete template bodies as TypeScript strings. The build runs a template integrity check that verifies the expected template files and metadata fields exist. @@ -108,7 +107,7 @@ GitHub Pages remains the public interface. The existing deploy workflow builds t - Existing minimal, server, and dry-run template concepts are preserved and corrected. - Development-project and agent templates exist. - Templates include metadata and optional outputs. -- The website renders canonical Markdown template files and copies exact source content. +- The website displays template metadata and copies concise, functional init instructions without source metadata. - GitHub and BIThub links are visible in the header and footer only. - README and PRD describe the corrected model. - Production build succeeds without adding a backend or execution runtime. \ No newline at end of file diff --git a/README.md b/README.md index 8106d746f..e162ff6ae 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Create an AGENTS.md file only if this project would benefit from one. ## 8. Usage For Developers -This repository preserves a static Vite and React website for browsing templates and copying canonical Markdown content. +This repository preserves a static Vite and React website for browsing init templates and copying practical init instructions. Common commands: @@ -83,7 +83,7 @@ The build runs `scripts/check-templates.mjs` before compiling the site. That che ## 9. Website -The public site is deployed with GitHub Pages from the existing Vite build. It renders the Markdown files under `templates/` as the canonical source and keeps copy-to-clipboard behavior for root `init.md` and exact template content. +The public site is deployed with GitHub Pages from the existing Vite build. It uses the Markdown files under `templates/` for metadata and keeps copy-to-clipboard behavior focused on concise init instructions, not raw template source. GitHub Pages must use **Build and deployment > Source: GitHub Actions** for this repository. Do not use **Deploy from a branch > root**, because that serves the unbuilt Vite source files and the browser will try to load `/src/main.tsx` directly. diff --git a/src/App.tsx b/src/App.tsx index 6bc072eb5..b654c328e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -61,7 +61,7 @@ function App() {

init.md

- Copy init.md or an init template. Keep only what applies to the target. + Copy a plain init instruction. Keep only what applies to the target.

@@ -158,15 +198,17 @@ export function TemplatesTab() { + +
- - - + + +
- Optional outputs + Optional outputs, reference only
{template.metadata.optional_outputs.map((output) => ( @@ -177,10 +219,6 @@ export function TemplatesTab() {
-
-

Template preview

-
-
diff --git a/src/prd.md b/src/prd.md index 370c128d8..f8cf1746e 100644 --- a/src/prd.md +++ b/src/prd.md @@ -21,8 +21,8 @@ Templates define concrete initialization patterns for specific targets. - Static Vite and React website. - GitHub Pages deployment. -- Root init.md and template browser with copy-to-clipboard behavior. -- Canonical Markdown files under `templates/` imported with Vite raw imports. +- Root and template instruction browser with copy-to-clipboard behavior. +- Canonical Markdown files under `templates/` provide template metadata. - Template metadata parsed from Markdown frontmatter. - Build-time template metadata check. - GitHub and BIThub links limited to header and footer. From c7c4685fba6888bad5e883f764d33961e7bf32a0 Mon Sep 17 00:00:00 2001 From: Alejandro <23019072+iamcapote@users.noreply.github.com> Date: Sun, 14 Jun 2026 22:41:47 +0000 Subject: [PATCH 7/8] refactor: enhance clarity and specificity in init.md and related components; update template instructions and metadata handling --- PRD.md | 11 +-- README.md | 4 +- init.md | 59 ++++++++----- src/App.tsx | 2 +- src/components/sections/HeroSection.tsx | 10 +-- src/components/tabs/ContextTab.tsx | 8 +- src/components/tabs/GuideTab.tsx | 20 ++--- src/components/tabs/OverviewTab.tsx | 17 ++-- src/components/tabs/TemplatesTab.tsx | 111 ++++++++++-------------- src/data/templates.ts | 20 ++--- src/prd.md | 9 +- 11 files changed, 134 insertions(+), 137 deletions(-) diff --git a/PRD.md b/PRD.md index d8023261b..34be6a89e 100644 --- a/PRD.md +++ b/PRD.md @@ -49,15 +49,16 @@ Examples: - Generate a snapshot only when a point-in-time record is useful. - Generate a server report only for server or infrastructure targets. -## Template Source And Copy Behavior +## Canonical Markdown Source -The Markdown files under `templates/` are the canonical source for template metadata. The public copy action must copy practical init instructions, not raw source Markdown, YAML frontmatter, or template-system metadata. +The Markdown files under `templates/` are the canonical source of template content. The website imports those Markdown files directly with Vite raw imports. The template browser must: +- render content from the canonical Markdown files; - parse and display template metadata; -- show the exact plain instruction that will be copied; -- copy concise root and template init instructions without YAML frontmatter; +- copy root `init.md` as a complete usable procedure; +- copy complete template Markdown bodies without frontmatter metadata; - avoid storing complete template bodies as TypeScript strings. The build runs a template integrity check that verifies the expected template files and metadata fields exist. @@ -107,7 +108,7 @@ GitHub Pages remains the public interface. The existing deploy workflow builds t - Existing minimal, server, and dry-run template concepts are preserved and corrected. - Development-project and agent templates exist. - Templates include metadata and optional outputs. -- The website displays template metadata and copies concise, functional init instructions without source metadata. +- The website renders canonical Markdown template files and copies complete usable instruction bodies. - GitHub and BIThub links are visible in the header and footer only. - README and PRD describe the corrected model. - Production build succeeds without adding a backend or execution runtime. \ No newline at end of file diff --git a/README.md b/README.md index e162ff6ae..bea8e5806 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Create an AGENTS.md file only if this project would benefit from one. ## 8. Usage For Developers -This repository preserves a static Vite and React website for browsing init templates and copying practical init instructions. +This repository preserves a static Vite and React website for browsing templates and copying canonical Markdown content. Common commands: @@ -83,7 +83,7 @@ The build runs `scripts/check-templates.mjs` before compiling the site. That che ## 9. Website -The public site is deployed with GitHub Pages from the existing Vite build. It uses the Markdown files under `templates/` for metadata and keeps copy-to-clipboard behavior focused on concise init instructions, not raw template source. +The public site is deployed with GitHub Pages from the existing Vite build. It renders the Markdown files under `templates/` as the canonical source and keeps copy-to-clipboard behavior for root `init.md` and complete usable template bodies. GitHub Pages must use **Build and deployment > Source: GitHub Actions** for this repository. Do not use **Deploy from a branch > root**, because that serves the unbuilt Vite source files and the browser will try to load `/src/main.tsx` directly. diff --git a/init.md b/init.md index afd278cbb..4f42ea871 100644 --- a/init.md +++ b/init.md @@ -1,8 +1,34 @@ -# init.md — General Operational Initialization Protocol +# init.md - General Operational Initialization Protocol -`init.md` is a human- and machine-readable procedure for inspecting a target, determining what it requires, applying the appropriate initialization pattern, validating the result, and reporting its operational state. +`init.md` is a general initialization procedure that inspects a target, determines what it needs to become operational, creates and configures what applies, validates the result, and reports its operational state. -It is not one fixed scaffold. It does not assume that every target is a server, repository, AI agent, application, or development project. Templates provide concrete initialization patterns for specific target types, while this root protocol remains general. +`init.md` is a target-specific initialization protocol for making a project, agent, service, server, workspace, or other system operational. + +It does not impose one universal scaffold. It first inspects what already exists, identifies the target's purpose and requirements, determines what is missing or misconfigured, and then creates or configures only what applies. + +Depending on the target, this may involve: + +- creating directories or files; +- generating project documentation; +- adding an `AGENTS.md` file; +- configuring dependencies, tools, services, or environments; +- establishing startup procedures; +- creating snapshots or context files; +- defining tests or readiness checks. + +It then validates that the initialized target works as intended and reports: + +- what was inspected; +- what was created or changed; +- what was successfully validated; +- what remains incomplete or blocked; +- whether the target is operational. + +Its core sequence is: + +**Inspect -> Determine -> Create -> Configure -> Validate -> Report** + +Templates provide complete concrete initialization procedures for different kinds of targets, while the canonical `init.md` defines the general method. ## 1. Purpose @@ -206,9 +232,9 @@ The procedure should: This is not a restrictive safety framework. It is basic initialization correctness. -## Conventions +## 9. Instruction Vocabulary -Use a small, general vocabulary for structured steps: +Use a small vocabulary when a step needs structure: - `description` — what the step accomplishes; - `condition` — when the step applies; @@ -219,26 +245,15 @@ Use a small, general vocabulary for structured steps: - `source` — evidence or input used; - `status` — resulting operational state. -Do not require every field in every step. Do not make shell commands the default representation. Templates may provide commands when commands are appropriate. - -## Template System +Do not require every field in every step. Do not make shell commands the default representation. Use commands only when commands are the right validation or configuration tool. -Templates are the concrete layer. They specialize the general procedure for a target category, mode, or operating context. +## 10. Templates -Each template should declare metadata: +Templates are complete concrete initialization procedures for target categories, modes, or operating contexts. -```yaml -name: -target: -purpose: -mode: -creates: -configures: -validates: -optional_outputs: -``` +Use a template when it better matches the target than the root procedure alone. A template may be used directly, adapted, or combined with compatible sections from another template when the target requires it. -Metadata describes likely behavior. It does not force universal outputs. +Template source files may contain site metadata for indexing and display, but the usable instruction body is the protocol content itself. ## Final Product Statement @@ -246,6 +261,6 @@ Metadata describes likely behavior. It does not force universal outputs. It is a general procedure for determining what a target needs in order to become operational. -Templates provide concrete initialization patterns for different targets. +Templates provide complete concrete initialization procedures for different targets. Inspect what exists. Determine what is needed. Create what applies. Configure what is required. Validate the result. Report what became operational. \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index b654c328e..6bc072eb5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -61,7 +61,7 @@ function App() {

init.md

- Copy a plain init instruction. Keep only what applies to the target. + Copy init.md or an init template. Keep only what applies to the target.

diff --git a/src/components/tabs/ContextTab.tsx b/src/components/tabs/ContextTab.tsx index e217032fc..1870e505f 100644 --- a/src/components/tabs/ContextTab.tsx +++ b/src/components/tabs/ContextTab.tsx @@ -5,11 +5,11 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/com const relationships = [ { title: "Root protocol", - body: "Copy the root instruction when you need the general inspect, determine, create, configure, validate, and report flow.", + body: "Copy init.md when you need the complete general method: inspect, determine, create, configure, validate, report.", }, { title: "Template", - body: "Copy a template instruction when the target is a project, agent, server, dry run, or small gap.", + body: "Copy a complete template when the target is a project, agent, server, dry run, or small scoped gap.", }, { title: "Generated output", @@ -35,9 +35,9 @@ export function ContextTab() {
- The target determines the implementation + The target determines the work - Useful init work depends on the target. init.md stays general; templates hold the target-specific details. + init.md is the method. Templates are complete target-specific procedures. Neither one forces universal files. diff --git a/src/components/tabs/GuideTab.tsx b/src/components/tabs/GuideTab.tsx index 8bf1a9627..c66be2f45 100644 --- a/src/components/tabs/GuideTab.tsx +++ b/src/components/tabs/GuideTab.tsx @@ -9,12 +9,12 @@ const workflow = [ body: "Name what init.md is being used on, where it lives, and what ready means for that target.", }, { - title: "Choose root or template", - body: "Use the root instruction for general init. Use a template instruction when the target has a clearer shape.", + title: "Choose init.md or a template", + body: "Use init.md for the general method. Use a complete template when the target has a clear type.", }, { - title: "Copy only useful init text", - body: "Copy the exact file, then remove instructions that do not apply before using it on the target.", + title: "Copy the usable body", + body: "Copy buttons paste the complete Markdown instructions, not the label data used by this page.", }, { title: "Run the init procedure", @@ -31,10 +31,10 @@ const workflow = [ ] const examples = [ - "Use the root init instruction to initialize this target. Apply only what fits.", - "Use the development-project init instruction to initialize this repository.", - "Use the dry-run init instruction and report proposed work without changing files.", - "Use the agent init instruction only if this target needs agent guidance.", + "Use the complete init.md procedure to inspect this target, initialize what applies, validate it, and report status.", + "Use the complete development project init template to initialize this repository and validate the developer workflow.", + "Use the complete dry-run init template to inspect this target and report proposed init work without changing files.", + "Use the complete agent init template only if this target needs agent instructions, tools, prompts, or state.", ] export function GuideTab() { @@ -53,7 +53,7 @@ export function GuideTab() { Use init.md directly - Start with the target. Copy the plain instruction that fits, then keep only the init work that applies. + Start with the target. Copy init.md or a complete template, then run the procedure against that target. @@ -85,7 +85,7 @@ export function GuideTab() { for agent instructions, and server for host or deployment readiness.

- If no template fits, use the root instruction and write a short target-specific init plan before making changes. + If no template fits, copy init.md and write a short target-specific init plan before making changes.

diff --git a/src/components/tabs/OverviewTab.tsx b/src/components/tabs/OverviewTab.tsx index 721bd8157..01ff49520 100644 --- a/src/components/tabs/OverviewTab.tsx +++ b/src/components/tabs/OverviewTab.tsx @@ -47,26 +47,27 @@ export function OverviewTab() {
- A procedure, not a scaffold + What init.md is - Copy a practical init instruction, not source metadata. Use the root flow or a target-specific template. + A target-specific initialization protocol for making a project, agent, service, server, workspace, or other + system operational.

- init.md helps determine what a target needs to become ready. A target might be a repository, an agent - workspace, a server, a research directory, or a service being restored in a new environment. + It does not impose one universal scaffold. It inspects what exists, identifies the target's purpose and + requirements, determines what is missing or misconfigured, then creates or configures only what applies.

- The target decides the work. A server may need host checks. A project may need build commands. An agent may - need instructions and tool boundaries. A small target may need one file and one validation step. + Templates are complete concrete procedures for common targets. Use the root protocol for the general + method, or copy the template that matches the target.

- Possible targets + Targets
{targetExamples.map((target) => ( @@ -105,7 +106,7 @@ export function OverviewTab() {
-

Success requires a validation step tied to the target.

+

Success requires a validation step tied to the target's intended operation.

diff --git a/src/components/tabs/TemplatesTab.tsx b/src/components/tabs/TemplatesTab.tsx index 1515572b8..1e5bcfc63 100644 --- a/src/components/tabs/TemplatesTab.tsx +++ b/src/components/tabs/TemplatesTab.tsx @@ -1,43 +1,18 @@ import { createElement, useCallback, useMemo, useState } from "react" +import { marked } from "marked" import { toast } from "sonner" import { CaretLeft, CaretRight, CheckCircle, Copy, FileText } from "@phosphor-icons/react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" -import { templates, type TemplateDefinition } from "@/data/templates" +import { templates } from "@/data/templates" +import rootProtocolContent from "../../../init.md?raw" -const rootInstruction = `Use init.md to initialize this target. - -Target: [describe the target] -Mode: active -Goal: make the target ready for its intended use. - -Do this: -1. Inspect only the target and directly relevant files, settings, or services. -2. Determine what the target actually needs. -3. Create or configure only the missing init work that applies. -4. Preserve valid existing work. Do not create universal files by default. -5. Validate with a check tied to the target's real use. -6. Report what was inspected, changed, validated, warnings or blockers, and final status.` - -function buildTemplateInstruction(template: TemplateDefinition) { - return `Use ${template.metadata.name} to initialize this target. - -Target: [describe the target] -Best fit: ${template.metadata.target} -Mode: ${template.metadata.mode.join(" or ")} -Goal: ${template.metadata.purpose} - -Do this: -1. Inspect the target and existing work before changing anything. -2. Apply this template only where it fits the target. -3. Create or configure only what is required for this target. -4. Skip optional outputs unless they clearly help operation. -5. Validate with checks that prove this target is ready. -6. Report inspected evidence, changes made, validation result, remaining blockers, and final status.` +function stripFrontmatter(content: string) { + return content.replace(/^---\n[\s\S]*?\n---\n?/, "") } -function ReferenceList({ title, items }: { title: string; items: string[] }) { +function MetadataList({ title, items }: { title: string; items: string[] }) { return (
{title}
@@ -53,39 +28,26 @@ function ReferenceList({ title, items }: { title: string; items: string[] }) { ) } -function CopyPreview({ content }: { content: string }) { - return ( -
-
-
Copied text
- - no metadata - -
-
-        {content}
-      
-
- ) -} - export function TemplatesTab() { const [activeTemplate, setActiveTemplate] = useState(0) const [copiedStates, setCopiedStates] = useState>({}) const template = templates[activeTemplate] - const templateInstruction = useMemo(() => buildTemplateInstruction(template), [template]) + const copiedRootContent = rootProtocolContent.trim() + const renderedRootProtocol = useMemo(() => marked.parse(copiedRootContent, { async: false }) as string, [copiedRootContent]) + const copiedTemplateContent = useMemo(() => stripFrontmatter(template.content).trim(), [template.content]) + const renderedTemplate = useMemo(() => marked.parse(copiedTemplateContent, { async: false }) as string, [copiedTemplateContent]) - const copyToClipboard = useCallback(async (content: string, id: string) => { + const copyToClipboard = useCallback(async (content: string, id: string, label: string) => { try { await navigator.clipboard.writeText(content) setCopiedStates((prev) => ({ ...prev, [id]: true })) - toast.success("Instruction copied") + toast.success(`${label} copied`) setTimeout(() => { setCopiedStates((prev) => ({ ...prev, [id]: false })) }, 2000) } catch { - toast.error("Failed to copy instruction") + toast.error(`Failed to copy ${label}`) } }, []) @@ -101,9 +63,9 @@ export function TemplatesTab() {
-

Copy init instructions

+

Copy complete init instructions

- Buttons copy the plain instruction shown on the card. They do not copy YAML metadata or the full source file. + The buttons copy complete Markdown instructions. Template copy leaves out the label data used by this page.

@@ -130,23 +92,32 @@ export function TemplatesTab() { init.md - Copy this when the target needs the general init flow and no specific template fits yet. + Copies the complete root procedure from init.md: inspect, determine, create, configure, validate, and + report. Use it when no specific template is the better fit.
- +
+

Copied content preview

+

+ This is the complete init.md procedure copied by the button above. +

+
+
+
+
@@ -172,7 +143,8 @@ export function TemplatesTab() { {template.metadata.name}

Target: {template.metadata.target}

- {template.description} + {template.description} The copy button gives the complete usable template body, without page label + data.
@@ -180,11 +152,11 @@ export function TemplatesTab() {
@@ -198,17 +170,15 @@ export function TemplatesTab() { - -
- - - + + +
- Optional outputs, reference only + Optional outputs
{template.metadata.optional_outputs.map((output) => ( @@ -219,6 +189,15 @@ export function TemplatesTab() {
+
+

Copied content preview

+

+ This is the complete Markdown body copied by the button above. Page label data is not copied. +

+
+
+
+
diff --git a/src/data/templates.ts b/src/data/templates.ts index c61d9e6fa..855ad07cd 100644 --- a/src/data/templates.ts +++ b/src/data/templates.ts @@ -92,9 +92,9 @@ export const templates: TemplateDefinition[] = [ { id: "minimal", title: "Minimal", - summary: "Small init pass for one clear gap.", + summary: "Complete init procedure for one clear gap.", description: - "Inspect a small target, add only the missing requirement, validate it, and report status.", + "A complete procedure for inspecting a small target, adding only the missing requirement, validating it, and reporting status.", category: "General", sourcePath: "templates/minimal_init_protocol.md", sourceUrl: sourceUrl("templates/minimal_init_protocol.md"), @@ -106,9 +106,9 @@ export const templates: TemplateDefinition[] = [ { id: "dry-run", title: "Dry Run", - summary: "Plan init work without changing files or systems.", + summary: "Complete no-change init planning procedure.", description: - "Inspect the target, list required work, and report what would become operational.", + "A complete procedure for inspecting the target, listing required work, and reporting what would become operational without changes.", category: "General", sourcePath: "templates/dry_run_init_protocol.md", sourceUrl: sourceUrl("templates/dry_run_init_protocol.md"), @@ -120,9 +120,9 @@ export const templates: TemplateDefinition[] = [ { id: "development-project", title: "Development Project", - summary: "Init template for repositories and software projects.", + summary: "Complete init procedure for software projects.", description: - "Inspect project shape, choose the right artifacts and commands, then validate development readiness.", + "A complete procedure for inspecting project shape, choosing artifacts and commands, and validating development readiness.", category: "Target-specific", sourcePath: "templates/development_project_init_protocol.md", sourceUrl: sourceUrl("templates/development_project_init_protocol.md"), @@ -134,9 +134,9 @@ export const templates: TemplateDefinition[] = [ { id: "agent", title: "Agent", - summary: "Init template for agent instructions and tool boundaries.", + summary: "Complete init procedure for agent targets.", description: - "Define what the agent target needs, keep valid instructions, add missing parts, and validate readiness.", + "A complete procedure for defining what the agent target needs, preserving valid instructions, adding missing parts, and validating readiness.", category: "Target-specific", sourcePath: "templates/agent_init_protocol.md", sourceUrl: sourceUrl("templates/agent_init_protocol.md"), @@ -148,9 +148,9 @@ export const templates: TemplateDefinition[] = [ { id: "server", title: "Server", - summary: "Init template for server and deployment readiness.", + summary: "Complete init procedure for server readiness.", description: - "Handle host checks, services, networking, and deployment validation in a server-specific flow.", + "A complete procedure for host checks, services, networking, and deployment validation in a server-specific flow.", category: "Target-specific", sourcePath: "templates/server_init_protocol.md", sourceUrl: sourceUrl("templates/server_init_protocol.md"), diff --git a/src/prd.md b/src/prd.md index f8cf1746e..e136f6649 100644 --- a/src/prd.md +++ b/src/prd.md @@ -2,7 +2,7 @@ ## Definition -`init.md` is a human- and machine-readable procedure for inspecting a target, determining what it requires, applying the appropriate initialization pattern, validating the result, and reporting its operational state. +`init.md` is a general initialization procedure that inspects a target, determines what it needs to become operational, creates and configures what applies, validates the result, and reports its operational state. ## Core Model @@ -15,15 +15,16 @@ The root protocol remains general: 5. Validate the result. 6. Report what became operational. -Templates define concrete initialization patterns for specific targets. +Templates define complete concrete initialization procedures for specific targets. ## Current Implementation - Static Vite and React website. - GitHub Pages deployment. -- Root and template instruction browser with copy-to-clipboard behavior. -- Canonical Markdown files under `templates/` provide template metadata. +- Root init.md and template browser with copy-to-clipboard behavior. +- Canonical Markdown files under `templates/` imported with Vite raw imports. - Template metadata parsed from Markdown frontmatter. +- Copy buttons copy complete usable instruction bodies, not frontmatter metadata. - Build-time template metadata check. - GitHub and BIThub links limited to header and footer. From e8a0baa137b3cdc289d8f264cdd2892660fd61b4 Mon Sep 17 00:00:00 2001 From: Alejandro <23019072+iamcapote@users.noreply.github.com> Date: Sun, 14 Jun 2026 22:51:02 +0000 Subject: [PATCH 8/8] refactor: streamline template selection and copying process; enhance user interface for choosing copy targets --- src/components/tabs/TemplatesTab.tsx | 232 +++++++++++++++------------ 1 file changed, 127 insertions(+), 105 deletions(-) diff --git a/src/components/tabs/TemplatesTab.tsx b/src/components/tabs/TemplatesTab.tsx index 1e5bcfc63..c9b242253 100644 --- a/src/components/tabs/TemplatesTab.tsx +++ b/src/components/tabs/TemplatesTab.tsx @@ -29,14 +29,55 @@ function MetadataList({ title, items }: { title: string; items: string[] }) { } export function TemplatesTab() { - const [activeTemplate, setActiveTemplate] = useState(0) + const [activeTargetId, setActiveTargetId] = useState("development-project") const [copiedStates, setCopiedStates] = useState>({}) - const template = templates[activeTemplate] const copiedRootContent = rootProtocolContent.trim() - const renderedRootProtocol = useMemo(() => marked.parse(copiedRootContent, { async: false }) as string, [copiedRootContent]) - const copiedTemplateContent = useMemo(() => stripFrontmatter(template.content).trim(), [template.content]) - const renderedTemplate = useMemo(() => marked.parse(copiedTemplateContent, { async: false }) as string, [copiedTemplateContent]) + const copyTargets = useMemo( + () => [ + { + id: "root-protocol", + title: "init.md", + heading: "init.md", + eyebrow: "Root", + summary: "General initialization method.", + description: + "Copy the complete root procedure when no specific template is the better fit. It covers inspect, determine, create, configure, validate, and report.", + content: copiedRootContent, + icon: FileText, + badges: ["Root"], + copyLabel: "init.md", + copyButtonLabel: "Copy init.md", + template: null, + }, + ...templates.map((item) => ({ + id: item.id, + title: item.title, + heading: item.metadata.name, + eyebrow: item.category, + summary: item.summary, + description: `${item.description} Copying gives the complete usable template body without page label data.`, + content: stripFrontmatter(item.content).trim(), + icon: item.icon, + badges: [item.category, ...item.metadata.mode], + copyLabel: item.metadata.name, + copyButtonLabel: "Copy complete template", + template: item, + })), + ], + [copiedRootContent], + ) + + const activeTargetIndex = Math.max( + copyTargets.findIndex((target) => target.id === activeTargetId), + 0, + ) + const activeTarget = copyTargets[activeTargetIndex] + const activeTemplate = activeTarget.template + const renderedActiveContent = useMemo( + () => marked.parse(activeTarget.content, { async: false }) as string, + [activeTarget.content], + ) const copyToClipboard = useCallback(async (content: string, id: string, label: string) => { try { @@ -51,100 +92,79 @@ export function TemplatesTab() { } }, []) - const nextTemplate = () => { - setActiveTemplate((prev) => (prev + 1) % templates.length) + const nextTarget = () => { + setActiveTargetId(copyTargets[(activeTargetIndex + 1) % copyTargets.length].id) } - const prevTemplate = () => { - setActiveTemplate((prev) => (prev - 1 + templates.length) % templates.length) + const prevTarget = () => { + setActiveTargetId(copyTargets[(activeTargetIndex - 1 + copyTargets.length) % copyTargets.length].id) } return (
-

Copy complete init instructions

+

Choose what to copy

- The buttons copy complete Markdown instructions. Template copy leaves out the label data used by this page. + Pick the root procedure or a complete target-specific template. The detail pane shows exactly what the copy + button will place on the clipboard.

- - {activeTemplate + 1} of {templates.length} + {activeTargetIndex + 1} of {copyTargets.length} -
- - -
-
- +
+ {copyTargets.map((target) => ( + -
- - -
-

Copied content preview

-

- This is the complete init.md procedure copied by the button above. -

-
-
-
-
- - +

{target.summary}

+ + ))} +
- {createElement(template.icon, { + {createElement(activeTarget.icon, { size: 28, className: "mt-1 shrink-0 text-primary", })}
- - {template.category} - - {template.metadata.mode.map((mode) => ( - - {mode} + {activeTarget.badges.map((badge, index) => ( + + {badge} ))}
- {template.metadata.name} -

Target: {template.metadata.target}

+ {activeTarget.heading} + {activeTemplate ? ( +

Target: {activeTemplate.metadata.target}

+ ) : null} - {template.description} The copy button gives the complete usable template body, without page label - data. + {activeTarget.description}
@@ -152,71 +172,73 @@ export function TemplatesTab() {
-
- {template.features.map((feature) => ( - - {feature} - - ))} -
+ {activeTemplate ? ( +
+ {activeTemplate.features.map((feature) => ( + + {feature} + + ))} +
+ ) : null} -
- - - -
+ {activeTemplate ? ( + <> +
+ + + +
+ +
+
+ Optional outputs +
+
+ {activeTemplate.metadata.optional_outputs.map((output) => ( +
+ {output} +
+ ))} +
+
+ + ) : null} -
-
- Optional outputs -
-
- {template.metadata.optional_outputs.map((output) => ( -
- {output} + {!activeTemplate ? ( +
+ {[ + "Use when the target needs the general init method.", + "Switch to a template when the target clearly matches one.", + ].map((item) => ( +
+ {item}
))}
-
+ ) : null}

Copied content preview

- This is the complete Markdown body copied by the button above. Page label data is not copied. + This is the complete Markdown copied by the button above.

-
+
- -
- {templates.map((item, index) => ( - - ))} -
) -} \ No newline at end of file +}