diff --git a/.execs/build.flow b/.execs/build.flow index d304966e..c2dae785 100644 --- a/.execs/build.flow +++ b/.execs/build.flow @@ -40,8 +40,6 @@ executables: execs: - cmd: go run ./tools/docsgen/. - cmd: ./scripts/completions.sh - # HACK: Copy the index.html to 404.html GitHub Pages redirect with the history router - - cmd: cp docs/index.html docs/404.html - verb: generate name: cli diff --git a/.execs/docs.flow b/.execs/docs.flow index 1d5f60fa..dcc4ddf9 100644 --- a/.execs/docs.flow +++ b/.execs/docs.flow @@ -2,31 +2,6 @@ visibility: public tags: [docs] executables: - - verb: start - name: site - aliases: [docs] - description: Run the documentation site locally (from prerendered content) - serial: - dir: // - execs: - - ref: build docs - - cmd: npx serve dist -l 3000 - - - verb: start - name: docsify - description: Run the documentation site locally using the docsify CLI - exec: - dir: // - cmd: docsify serve docs --open - - - verb: build - name: docs - description: Prerender docsify documentation site for the project - exec: - dir: // - cmd: - node ./scripts/prerender.js - - verb: show name: flowfile aliases: [executables, exec, executable] diff --git a/desktop/scripts/generate-rust-types.sh b/desktop/scripts/generate-rust-types.sh index d14a014d..fec10a50 100755 --- a/desktop/scripts/generate-rust-types.sh +++ b/desktop/scripts/generate-rust-types.sh @@ -1,7 +1,7 @@ #!/bin/bash set -euo pipefail -SCHEMAS_DIR="../docs/schemas" +SCHEMAS_DIR="../docs/public/schemas" OUTPUT_DIR="src-tauri/src/types/generated" mkdir -p "$OUTPUT_DIR" diff --git a/desktop/scripts/generate-ts-types.ts b/desktop/scripts/generate-ts-types.ts index ca549427..4d9ae0ff 100644 --- a/desktop/scripts/generate-ts-types.ts +++ b/desktop/scripts/generate-ts-types.ts @@ -5,7 +5,7 @@ import fs from "fs/promises"; import { compile } from "json-schema-to-typescript"; import path from "path"; -const SCHEMAS_DIR = path.resolve(process.cwd(), "../docs/schemas"); +const SCHEMAS_DIR = path.resolve(process.cwd(), "../docs/public/schemas"); const OUTPUT_DIR = path.resolve(process.cwd(), "src/types/generated"); async function generateTypes() { diff --git a/desktop/src-tauri/src/types/generated/template.rs b/desktop/src-tauri/src/types/generated/template.rs index f14a6b49..dc8dae0f 100644 --- a/desktop/src-tauri/src/types/generated/template.rs +++ b/desktop/src-tauri/src/types/generated/template.rs @@ -373,7 +373,7 @@ impl ::std::default::Default for FieldType { #[doc = " }"] #[doc = " },"] #[doc = " \"form\": {"] -#[doc = " \"description\": \"Form fields to be displayed to the user when generating a flow file from a template. \\nThe form will be rendered first, and the user's input can be used to render the template.\\nFor example, a form field with the key `name` can be used in the template as `{{.name}}`.\\n\","] +#[doc = " \"description\": \"Form fields to be displayed to the user when generating a flow file from a template. \\nThe form will be rendered first, and the user's input can be used to render the template.\\n\","] #[doc = " \"default\": [],"] #[doc = " \"type\": \"array\","] #[doc = " \"items\": {"] @@ -407,7 +407,7 @@ pub struct Template { #[doc = "A list of artifacts to be copied after generating the flow file."] #[serde(default, skip_serializing_if = "::std::vec::Vec::is_empty")] pub artifacts: ::std::vec::Vec, - #[doc = "Form fields to be displayed to the user when generating a flow file from a template. \nThe form will be rendered first, and the user's input can be used to render the template.\nFor example, a form field with the key `name` can be used in the template as `{{.name}}`.\n"] + #[doc = "Form fields to be displayed to the user when generating a flow file from a template. \nThe form will be rendered first, and the user's input can be used to render the template.\n"] #[serde(default, skip_serializing_if = "::std::vec::Vec::is_empty")] pub form: ::std::vec::Vec, #[doc = "A list of exec executables to run after generating the flow file."] diff --git a/desktop/src/types/generated/template.ts b/desktop/src/types/generated/template.ts index bbfb0e5e..b1305dde 100644 --- a/desktop/src/types/generated/template.ts +++ b/desktop/src/types/generated/template.ts @@ -14,7 +14,6 @@ export interface Template { /** * Form fields to be displayed to the user when generating a flow file from a template. * The form will be rendered first, and the user's input can be used to render the template. - * For example, a form field with the key `name` can be used in the template as `{{.name}}`. * */ form?: Field[]; diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..47da7e42 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,12 @@ +# Astro / Starlight +node_modules/ +.dist/ +.next/ +.DS_Store +.vitepress/cache +.vitepress/dist/ +dist/ +.env +.env.* +# Pagefind search index +pagefind/ diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts new file mode 100644 index 00000000..a3093bf1 --- /dev/null +++ b/docs/.vitepress/config.mts @@ -0,0 +1,202 @@ +import { defineConfig } from 'vitepress' +import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "flow", + description: "Local developer automation platform that flows with you.", + base: '/', + outDir: './dist', + + head: [ + ['link', { rel: 'icon', href: '/favicon.ico' }] + ], + + markdown: { + config(md) { + md.use(tabsMarkdownPlugin) + }, + }, + + themeConfig: { + logo: { + light: '/logo-light.png', + dark: '/logo-dark.png' + }, + + siteTitle: false, + + nav: [ + { text: 'Home', link: '/' }, + { text: 'Guides', link: '/guides/', activeMatch: '/guides/'}, + { text: 'CLI Reference', link: '/cli/', activeMatch: '/cli/' }, + { text: 'Config Reference', link: '/types/', activeMatch: '/types/' } + ], + + sidebar: { + '/guides/': [ + { + text: 'User Guides', + items: [ + { text: 'Overview', link: '/guides/' }, + { text: 'Getting Started', + items: [ + { text: 'Concepts', link: '/guides/concepts' }, + { text: 'Your First Workflow', link: '/guides/first-workflow' }, + ] + }, + { text: 'Essentials', + items: [ + { text: 'Executables', link: '/guides/executables' }, + { text: 'Workspaces', link: '/guides/workspaces' }, + { text: 'Secrets', link: '/guides/secrets' }, + ]}, + { text: 'Advanced', + items: [ + { text: 'Imported Executables', link: '/guides/generated-config' }, + { text: 'Templates & Workflow Generation', link: '/guides/templating' }, + { text: 'Advanced Workflows', link: '/guides/advanced' }, + { text: 'Interactive UI', link: '/guides/interactive' }, + { text: 'Integrations', link: '/guides/integrations' }, + ]}, + ] + } + ], + '/cli/': [ + { + text: 'CLI Reference', + items: [ + { text: 'Overview', link: '/cli/flow' }, + { text: 'flow browse', link: '/cli/flow_browse' }, + { text: 'flow exec', link: '/cli/flow_exec' }, + { text: 'flow logs', link: '/cli/flow_logs' }, + { text: 'flow mcp', link: '/cli/flow_mcp' }, + { text: 'flow sync', link: '/cli/flow_sync' }, + { + text: 'Cache', + collapsed: true, + items: [ + { text: 'flow cache', link: '/cli/flow_cache' }, + { text: 'flow cache clear', link: '/cli/flow_cache_clear' }, + { text: 'flow cache get', link: '/cli/flow_cache_get' }, + { text: 'flow cache list', link: '/cli/flow_cache_list' }, + { text: 'flow cache remove', link: '/cli/flow_cache_remove' }, + { text: 'flow cache set', link: '/cli/flow_cache_set' } + ] + }, + { + text: 'Config', + collapsed: true, + items: [ + { text: 'flow config', link: '/cli/flow_config' }, + { text: 'flow config get', link: '/cli/flow_config_get' }, + { text: 'flow config reset', link: '/cli/flow_config_reset' }, + { text: 'flow config set', link: '/cli/flow_config_set' }, + { text: 'flow config set log-mode', link: '/cli/flow_config_set_log-mode' }, + { text: 'flow config set namespace', link: '/cli/flow_config_set_namespace' }, + { text: 'flow config set notifications', link: '/cli/flow_config_set_notifications' }, + { text: 'flow config set theme', link: '/cli/flow_config_set_theme' }, + { text: 'flow config set timeout', link: '/cli/flow_config_set_timeout' }, + { text: 'flow config set tui', link: '/cli/flow_config_set_tui' }, + { text: 'flow config set workspace', link: '/cli/flow_config_set_workspace' }, + { text: 'flow config set workspace-mode', link: '/cli/flow_config_set_workspace-mode' } + ] + }, + { + text: 'Secret', + collapsed: true, + items: [ + { text: 'flow secret', link: '/cli/flow_secret' }, + { text: 'flow secret get', link: '/cli/flow_secret_get' }, + { text: 'flow secret list', link: '/cli/flow_secret_list' }, + { text: 'flow secret remove', link: '/cli/flow_secret_remove' }, + { text: 'flow secret set', link: '/cli/flow_secret_set' } + ] + }, + { + text: 'Template', + collapsed: true, + items: [ + { text: 'flow template', link: '/cli/flow_template' }, + { text: 'flow template add', link: '/cli/flow_template_add' }, + { text: 'flow template generate', link: '/cli/flow_template_generate' }, + { text: 'flow template get', link: '/cli/flow_template_get' }, + { text: 'flow template list', link: '/cli/flow_template_list' } + ] + }, + { + text: 'Vault', + collapsed: true, + items: [ + { text: 'flow vault', link: '/cli/flow_vault' }, + { text: 'flow vault create', link: '/cli/flow_vault_create' }, + { text: 'flow vault edit', link: '/cli/flow_vault_edit' }, + { text: 'flow vault get', link: '/cli/flow_vault_get' }, + { text: 'flow vault list', link: '/cli/flow_vault_list' }, + { text: 'flow vault remove', link: '/cli/flow_vault_remove' }, + { text: 'flow vault switch', link: '/cli/flow_vault_switch' } + ] + }, + { + text: 'Workspace', + collapsed: true, + items: [ + { text: 'flow workspace', link: '/cli/flow_workspace' }, + { text: 'flow workspace add', link: '/cli/flow_workspace_add' }, + { text: 'flow workspace get', link: '/cli/flow_workspace_get' }, + { text: 'flow workspace list', link: '/cli/flow_workspace_list' }, + { text: 'flow workspace remove', link: '/cli/flow_workspace_remove' }, + { text: 'flow workspace switch', link: '/cli/flow_workspace_switch' }, + { text: 'flow workspace view', link: '/cli/flow_workspace_view' } + ] + } + ] + } + ], + '/types/': [ + { + text: 'Configuration Reference', + items: [ + { text: 'Overview', link: '/types/' }, + { text: 'Config', link: '/types/config' }, + { text: 'Flow File', link: '/types/flowfile' }, + { text: 'Template', link: '/types/template' }, + { text: 'Workspace', link: '/types/workspace' } + ] + } + ], + '/': [ + { + text: 'Getting Started', + items: [ + { text: 'Installation', link: '/installation' }, + { text: 'Quick Start', link: '/quickstart' } + ] + }, + { + text: 'More', + items: [ + { text: 'User Guides', link: '/guides/' }, + { text: 'CLI Reference', link: '/cli/' }, + { text: 'Configuration Reference', link: '/types/' }, + { text: 'Contributing', link: '/development' }, + { text: 'TUI Kit', link: '/tuikit' } + ] + } + ] + }, + + socialLinks: [ + { icon: 'github', link: 'https://github.com/flowexec/flow' }, + { icon: 'discord', link: 'https://discord.gg/CtByNKNMxM' } + ], + + search: { + provider: 'local' + }, + + outline: { + level: [2, 3] + } + } +}) diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css new file mode 100644 index 00000000..59decd19 --- /dev/null +++ b/docs/.vitepress/theme/custom.css @@ -0,0 +1,26 @@ +:root { + --vp-c-brand-1: #7FBBB3; + --vp-c-brand-2: #83C092; + --vp-c-brand-3: #D699B6; + --vp-home-hero-name-color: #D699B6; +} + +/* Hero image glow effect */ +.VPHero .image-src { + filter: drop-shadow(5px 5px 100px #D699B6); +} + +.VPHero .name { + font-size: 1.8em !important; + line-height: 1.8em !important; +} + +.VPHero .text { + font-size: 3.2em !important; + line-height: 1.2em !important; +} + +.VPHero .tagline { + font-size: 1.4em !important; + line-height: 1.8em !important; +} \ No newline at end of file diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 00000000..c27c4068 --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,11 @@ +import type { Theme } from 'vitepress' +import DefaultTheme from 'vitepress/theme' +import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client' +import './custom.css' + +export default { + extends: DefaultTheme, + enhanceApp({ app }) { + enhanceAppWithTabs(app) + }, +} satisfies Theme \ No newline at end of file diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index 32ef661a..00000000 --- a/docs/404.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - flow - - - - - - - - - - -
thinking...
- - - - - - - - - - - diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 566114be..00000000 --- a/docs/README.md +++ /dev/null @@ -1,37 +0,0 @@ -

flow

- -

- GitHub release - Go Reference - Join Discord - GitHub Repo stars -

- -flow is a local-first developer platform - organize automation across all your projects with built-in secrets, templates, and cross-project workflows. -Go beyond task running to workflow management that scales with your development ecosystem. - -#### _Why flow?_ - -- **Unified automation hub**: Organize workflows across all your projects in one place -- **Built-in security**: Encrypted vaults keep your secrets safe and shareable -- **Cross-project power**: Reference workflows from other projects and share common tools -- **Template-driven**: Generate new projects and workflows from reusable templates -- **Visual discovery**: Browse and search workflows across your entire development ecosystem - -#### _Core Capabilities_ - -- **Workflow Management**: Define, organize, and run workflows across multiple projects -- **Secure Secret Storage**: Built-in encrypted vaults with multiple backend options -- **Project Generation**: Create new projects and workflows from customizable templates -- **Cross-Project Composition**: Reference and share workflows between different projects -- **Visual Workflow Browser**: Discover and run workflows with powerful filtering and search -- **Flexible Configuration**: YAML-based definitions with arguments, secrets, and conditional logic -- **Platform Integrations**: GitHub Actions, AI assistants (MCP), and more - -**Ready to organize your automation?** → [Install flow](installation.md) → [Quick start guide](quickstart.md) - ---- - -

- -Browse examples in the [examples repo](https://github.com/flowexec/examples) and [flow project](https://github.com/flowexec/flow/tree/main/.execs) \ No newline at end of file diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100644 index 751827f8..00000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,11 +0,0 @@ -flow - -# flow - -> _Local developer platform that flows with you._ - -- Define your _executables_ in YAML -- Browse and execute with ease - -[GitHub](https://github.com/flowexec/flow) -[Get Started](README.md) diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index 61fef469..00000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,6 +0,0 @@ -- [Install](installation.md "Installation guide") -- [Quick Start](quickstart.md "Quick start guide") -- [User Guides](guide/README.md "Complete guides for mastering flow automation") -- [CLI Reference](cli/README.md "Command line interface reference") -- [Configuration Reference](types/README.md "YAML configuration file reference") -- [Contributing](development.md "Development guide") diff --git a/docs/cli/_sidebar.md b/docs/cli/_sidebar.md deleted file mode 100644 index 3f4feaa4..00000000 --- a/docs/cli/_sidebar.md +++ /dev/null @@ -1,13 +0,0 @@ -- [← Back to Home](../README.md "flow documentation") - -- CLI Reference - - [flow](README.md "Command line interface reference") - - [flow exec](flow_exec.md) - - [flow browse](flow_browse.md) - - [flow template](flow_template.md) - - [flow config](flow_config.md) - - [flow workspace](flow_workspace.md) - - [flow secret](flow_secret.md) - - [flow vault](flow_vault.md) - - [flow sync](flow_sync.md) - - [flow logs](flow_logs.md) diff --git a/docs/cli/README.md b/docs/cli/flow.md similarity index 100% rename from docs/cli/README.md rename to docs/cli/flow.md diff --git a/docs/cli/flow_config_set_workspace.md b/docs/cli/flow_config_set_workspace.md index b26babc6..30bb0700 100644 --- a/docs/cli/flow_config_set_workspace.md +++ b/docs/cli/flow_config_set_workspace.md @@ -1,3 +1,7 @@ +--- +title: Flow Config Set Workspace +--- + ## flow config set workspace Change the current workspace. diff --git a/docs/cli/flow_workspace_view.md b/docs/cli/flow_workspace_view.md index dc00357f..d1ba5340 100644 --- a/docs/cli/flow_workspace_view.md +++ b/docs/cli/flow_workspace_view.md @@ -1,3 +1,7 @@ +--- +title: Flow Workspace View +--- + ## flow workspace view View the documentation for a workspace. If the name is omitted, the current workspace is used. diff --git a/docs/cli/index.md b/docs/cli/index.md new file mode 100644 index 00000000..0a4cdbf2 --- /dev/null +++ b/docs/cli/index.md @@ -0,0 +1,32 @@ +## flow + +flow is a command line interface designed to make managing and running development workflows easier. + +### Synopsis + +flow is a command line interface designed to make managing and running development workflows easier.It's driven by executables organized across workspaces and namespaces defined in a workspace. + +See https://flowexec.io for more information. + +### Options + +``` + -h, --help help for flow + -L, --log-level string Log verbosity level (debug, info, fatal) (default "info") + --sync Sync flow cache and workspaces +``` + +### SEE ALSO + +* [flow browse](flow_browse.md) - Discover and explore available executables. +* [flow cache](flow_cache.md) - Manage temporary key-value data. +* [flow config](flow_config.md) - Update flow configuration values. +* [flow exec](flow_exec.md) - Execute any executable by reference. +* [flow logs](flow_logs.md) - View execution history and logs. +* [flow mcp](flow_mcp.md) - Start Model Context Provider (MCP) server for AI assistant integration +* [flow secret](flow_secret.md) - Manage secrets stored in a vault. +* [flow sync](flow_sync.md) - Refresh workspace cache and discover new executables. +* [flow template](flow_template.md) - Manage flowfile templates. +* [flow vault](flow_vault.md) - Manage sensitive secret stores. +* [flow workspace](flow_workspace.md) - Manage development workspaces. + diff --git a/docs/development.md b/docs/development.md index dbe4427e..62edbd6b 100644 --- a/docs/development.md +++ b/docs/development.md @@ -1,3 +1,7 @@ +--- +title: Contributing to flow +--- + # Contributing to flow [![Go Report Card](https://goreportcard.com/badge/github.com/flowexec/flow)](https://goreportcard.com/report/github.com/flowexec/flow) @@ -95,7 +99,7 @@ flow generate cli **Important**: When modifying types, edit the `schemas/*.yaml` files, not the generated Go files in `types/`. -### Documentation Generation +### Documentation Generation CLI and type documentation is generated automatically: @@ -121,7 +125,7 @@ flow build binary ./bin/flow-dev ## Development Tools -### Required Tools +### Required Tools These are installed automatically by `flow install tools`: @@ -129,7 +133,7 @@ These are installed automatically by `flow install tools`: - [golangci-lint](https://golangci-lint.run/) - Code linting - [go-jsonschema](https://github.com/atombender/go-jsonschema) - Generate Go types from YAML schemas -### Additional Tools +### Additional Tools - [goreleaser](https://goreleaser.com/) - Binary builds and package distribution - [Docker Buildx](https://docs.docker.com/buildx/) - Multi-arch container builds (included with Docker Desktop) diff --git a/docs/docs.flow b/docs/docs.flow new file mode 100644 index 00000000..88564727 --- /dev/null +++ b/docs/docs.flow @@ -0,0 +1,3 @@ +namespace: docs +imports: + - package.json \ No newline at end of file diff --git a/docs/guide/_sidebar.md b/docs/guide/_sidebar.md deleted file mode 100644 index 1f1e9f2d..00000000 --- a/docs/guide/_sidebar.md +++ /dev/null @@ -1,16 +0,0 @@ -- [← Back to Home](../README.md "flow documentation") - -- Getting Started - - [Core Concepts](concepts.md "Understand workspaces, executables, and vaults") - - [Your First Workflow](first-workflow.md "Build a complete automation from scratch") - -- Essentials - - [Workspaces](workspaces.md "Organize your automation across projects") - - [Executables](executables.md "Complete reference for all executable types") - - [Working with Secrets](secrets.md "Secure your workflows with encrypted vaults") - -- Advanced - - [Templates & Workflow Generation](templating.md "Generate workflows and project scaffolding") - - [Advanced Workflows](advanced.md "Complex automation with conditionals and state") - - [Interactive UI](interactive.md "Customize and use the terminal interface") - - [Integrations](integrations.md "Run flow in CI/CD and containerized environments") \ No newline at end of file diff --git a/docs/guide/advanced.md b/docs/guides/advanced.md similarity index 93% rename from docs/guide/advanced.md rename to docs/guides/advanced.md index 39ff121f..f527a00c 100644 --- a/docs/guide/advanced.md +++ b/docs/guides/advanced.md @@ -1,3 +1,7 @@ +--- +title: Advanced Workflows +--- + # Advanced Workflows Once you're comfortable with basic executables, flow's real power comes from building sophisticated workflows that adapt @@ -7,7 +11,7 @@ to conditions, maintain state, and compose multiple operations into powerful aut Make your workflows smart by running different steps based on runtime conditions. -### Basic Operators +### Basic Operators The expression language supports standard comparison and logical operators: @@ -18,7 +22,7 @@ The expression language supports standard comparison and logical operators: **See the [Expr Language Definition](https://expr-lang.org/docs/language-definition) for all available operators and functions.** -### Basic Conditions +### Basic Conditions Use the `if` field to control when executables run: @@ -40,7 +44,7 @@ executables: - cmd: kubectl apply -f deployment.yaml ``` -### Environment-Based Conditions +### Environment-Based Conditions Check environment variables to customize behavior: @@ -63,7 +67,7 @@ executables: cmd: npm test ``` -### File System Conditions +### File System Conditions Check for files or directories to control execution: ```yaml @@ -84,7 +88,7 @@ executables: - cmd: docker build -t myapp . ``` -### Data-Driven Conditions +### Data-Driven Conditions Use stored data to control execution flow: @@ -106,7 +110,7 @@ executables: cmd: echo "Valid build on Linux" ``` -### Available Context +### Available Context Conditions have access to extensive runtime information: @@ -144,7 +148,7 @@ Additionally the following functions are provided alongside the Expr language de Persist data across executions and share information between workflow steps. -### Cache Basics +### Cache Basics The cache stores key-value data with different persistence scopes: @@ -167,7 +171,7 @@ executables: docker tag myapp:latest myapp:$build_id ``` -### Cache Persistence Scopes +### Cache Persistence Scopes Understanding cache persistence is crucial for complex workflows: @@ -224,7 +228,7 @@ flow cache clear --all See the [cache command reference](../cli/flow_cache.md) for detailed commands and options. -### Temporary Directories +### Temporary Directories Use isolated temporary directories for complex operations: @@ -247,7 +251,7 @@ When defined for a `serial` or `parallel` executable, the temporary directory is Build complex automations by combining executables in sophisticated ways. -### Serial vs Parallel Execution +### Serial vs Parallel Execution **Serial** - Steps run one after another: ```yaml @@ -278,7 +282,7 @@ executables: - cmd: npm run lint ``` -### Mixed Execution Patterns +### Mixed Execution Patterns Combine serial and parallel for sophisticated workflows by defining separate executables and referencing them: @@ -328,7 +332,7 @@ executables: > [!NOTE] > **Cross-workspace references**: To reference executables from other workspaces, they must have `visibility: public` in their configuration. Private, internal, and hidden executables cannot be referenced from other workspaces. -### Error Handling and Retries +### Error Handling and Retries Build resilient workflows that handle failures gracefully: @@ -355,7 +359,7 @@ executables: fi ``` -### Review Gates +### Review Gates Add human approval steps for critical operations: @@ -380,7 +384,7 @@ executables: Understanding how environment variables are resolved and prioritized in flow executables. -### Resolution Order +### Resolution Order Environment variables are resolved in this order (highest to lowest priority): @@ -427,7 +431,7 @@ flow deploy app verbose=false --param ENVIRONMENT=production # ENVIRONMENT=production (--param override wins over all) ``` -### Environment Variable Expansion +### Environment Variable Expansion Environment variables are expanded in certain contexts: @@ -456,7 +460,7 @@ executables: kubectl apply -f k8s/$ENV/ ``` -### Special Environment Variables +### Special Environment Variables flow provides special environment variables automatically: @@ -467,7 +471,7 @@ flow provides special environment variables automatically: - `FLOW_DEFINITION_DIR` - Directory containing the current flow file - `FLOW_TMP_DIR` - Temporary directory for current execution, if `f:tmp` is set -### Environment Inheritance +### Environment Inheritance Child executables inherit environment variables from their parents: diff --git a/docs/guide/concepts.md b/docs/guides/concepts.md similarity index 99% rename from docs/guide/concepts.md rename to docs/guides/concepts.md index d83cd563..7f2b8f10 100644 --- a/docs/guide/concepts.md +++ b/docs/guides/concepts.md @@ -1,3 +1,7 @@ +--- +title: Core Concepts +--- + # Core Concepts flow is built around three key concepts that work together to organize and run your automation workflows. @@ -264,7 +268,7 @@ flow run hello # By name flow build my-project/app # By full reference ``` -## What's Next? +## What's Next? Now that you understand the core concepts: diff --git a/docs/guide/executables.md b/docs/guides/executables.md similarity index 96% rename from docs/guide/executables.md rename to docs/guides/executables.md index 0b1bbd1e..b43277fc 100644 --- a/docs/guide/executables.md +++ b/docs/guides/executables.md @@ -1,3 +1,7 @@ +--- +title: Executables +--- + # Executables Executables are the building blocks of flow automation. They can be simple commands, complex multi-step workflows, HTTP requests, or even GUI applications. @@ -22,7 +26,7 @@ flow browse --all --filter "database" # Search names and descriptions ## Executable Configuration -### Basic Structure +### Basic Structure Every executable needs a verb and optionally a name: @@ -39,7 +43,7 @@ executables: cmd: echo "Hello, world!" ``` -### Common Fields +### Common Fields - **verb**: Action type (run, build, test, deploy, etc.) - **verbAliases**: Alternative names for the verb @@ -50,7 +54,7 @@ executables: - **timeout**: Maximum execution time (e.g., 30s, 5m, 1h) - **visibility**: Access control (public, private, internal, hidden) -### Visibility Levels +### Visibility Levels - **public**: Available from any workspace - **private**: Only available within the same workspace but shown in browse lists (default) @@ -67,7 +71,7 @@ Customize executable behavior with environment variables or temporary files usin > By default, values defined in the `.env` file at the workspace root are automatically loaded. This can be overriden > in the workspace configuration file with the `envFiles` field. -### Parameters (`params`) +### Parameters (`params`) Set environment data from various sources: @@ -108,7 +112,7 @@ executables: - `text`: Static value - `envFile`: Load environment variables from a file -### Arguments (`args`) +### Arguments (`args`) Handle command-line arguments: @@ -148,7 +152,7 @@ flow build container v1.2.3 publish=true registry=my-registry.com - `pos`: Positional argument (by position number, starting from 1) - `flag`: Named flag argument -### Command-Line Overrides +### Command-Line Overrides Override any environment variable with `--param`: @@ -199,7 +203,7 @@ executables: - `f:tmp`: Temporary directory (auto-cleaned) - `$VAR`: Environment variable expansion -## Executable Types +## Executable Types ### exec - Shell Commands @@ -396,7 +400,7 @@ imports: All imported executables are automatically tagged with `generated` and their file type (e.g., `docker-compose`, `makefile`, `package.json`). - + #### **Shell Scripts (.sh files)** @@ -493,7 +497,7 @@ This creates executables like: - `stop` (alias: all, services) - Stop all services - `build app` - Build the app service (if build config exists) - + ## Executable References @@ -540,7 +544,7 @@ executables: - Referenced executables must have `visibility: public` - Private, internal, and hidden executables cannot be cross-referenced -## What's Next? +## What's Next? Now that you understand all executable types and options: diff --git a/docs/guide/first-workflow.md b/docs/guides/first-workflow.md similarity index 98% rename from docs/guide/first-workflow.md rename to docs/guides/first-workflow.md index b9605402..94c6b7b8 100644 --- a/docs/guide/first-workflow.md +++ b/docs/guides/first-workflow.md @@ -1,4 +1,8 @@ -# Your First Workflow +--- +title: Your First Workflow +--- + +# Your First Workflow Now that you understand flow's [core concepts](concepts.md), let's build a real workflow that shows how executables, workspaces, and secrets work together. diff --git a/docs/guide/generated-config.md b/docs/guides/generated-config.md similarity index 94% rename from docs/guide/generated-config.md rename to docs/guides/generated-config.md index 25dd4964..6b687126 100644 --- a/docs/guide/generated-config.md +++ b/docs/guides/generated-config.md @@ -1,8 +1,12 @@ +--- +title: Imported Executables Config Reference +--- + # Imported Executables Config Reference flow can automatically generate executables from shell scripts and Makefiles using special comments. flow parses these comments during workspace synchronization and creates executable definitions that can be run -like any other flow executable. See [Importing Executables](../guide/executables.md#importing-executables) for more details. +like any other flow executable. See [Importing Executables](executables.md#importing-executables) for more details. > [!NOTE] The configuration comments must be at the top of the shell script or right above the Makefile target definition. diff --git a/docs/guide/README.md b/docs/guides/index.md similarity index 88% rename from docs/guide/README.md rename to docs/guides/index.md index cfea3bfa..0067ed40 100644 --- a/docs/guide/README.md +++ b/docs/guides/index.md @@ -1,3 +1,7 @@ +--- +title: User Guides +--- + # User Guides Welcome to the flow user guides! These guides will help you master flow automation, from basic concepts to advanced workflows. @@ -28,8 +32,8 @@ Take your automation to the next level: ## Other Resources -- **[CLI Reference](../cli/README.md)** - Complete command documentation -- **[Configuration Reference](../types/README.md)** - YAML file schemas and options +- **[CLI Reference](../cli/index.md)** - Complete command documentation +- **[Configuration Reference](../types/index.md)** - YAML file schemas and options - **[Examples Repository](https://github.com/flowexec/examples)** - Real-world workflow patterns Ready to get started? Begin with [Core Concepts](concepts.md) to understand how flow works, then build your first automation with [Your First Workflow](first-workflow.md)! \ No newline at end of file diff --git a/docs/guide/integrations.md b/docs/guides/integrations.md similarity index 91% rename from docs/guide/integrations.md rename to docs/guides/integrations.md index ced37150..3c28f5fa 100644 --- a/docs/guide/integrations.md +++ b/docs/guides/integrations.md @@ -1,3 +1,7 @@ +--- +title: Integrations +--- + # Integrations flow integrates with popular CI/CD platforms, AI assistants, and containerized environments to bring your automation anywhere. @@ -5,12 +9,12 @@ flow integrates with popular CI/CD platforms, AI assistants, and containerized e ## AI Assistant Integration -### Model Context Protocol (MCP) +### Model Context Protocol (MCP) Connect flow to AI assistants through the local Model Context Protocol server for natural language workflow management. The flow MCP server enables AI assistants to discover, understand, and execute your flow workflows through conversational interfaces. -#### Basic Usage +#### Basic Usage Add the MCP server command to your favorite MCP client: @@ -41,7 +45,7 @@ The server uses stdio transport and provides AI assistants with: > [!NOTE] > **Learn more about MCP**: Visit the [Model Context Protocol](https://modelcontextprotocol.io) documentation for client setup and integration details. -## CI/CD & Deployment +## CI/CD & Deployment ### GitHub Actions @@ -67,7 +71,7 @@ jobs: Run flow in containerized environments for CI/CD pipelines or isolated execution. -### Basic Usage +### Basic Usage ```shell # Run with default workspace @@ -83,7 +87,7 @@ docker run -it --rm ghcr.io/flowexec/flow validate - `WORKSPACE`: Workspace name to use (defaults to "flow") -### Workspace from Git +### Workspace from Git Automatically clone and configure a workspace: @@ -95,7 +99,7 @@ docker run -it --rm \ ghcr.io/flowexec/flow exec "deploy app" ``` -### Local Workspace +### Local Workspace Mount your local workspace: @@ -107,7 +111,7 @@ docker run -it --rm \ ghcr.io/flowexec/flow exec "build app" ``` -### In CI/CD Pipelines +### In CI/CD Pipelines Any CI/CD platform that supports Docker can run flow. The key is: diff --git a/docs/guide/interactive.md b/docs/guides/interactive.md similarity index 87% rename from docs/guide/interactive.md rename to docs/guides/interactive.md index a2347bc6..2aca61a7 100644 --- a/docs/guide/interactive.md +++ b/docs/guides/interactive.md @@ -1,3 +1,7 @@ +--- +title: Interactive UI +--- + # Interactive UI flow provides both a powerful terminal user interface (TUI) and flexible command-line options to fit your workflow. @@ -7,7 +11,7 @@ This guide covers using the interactive browser, customizing the experience, and The `flow browse` command launches an interactive browser for discovering and running executables. -### Basic Navigation +### Basic Navigation ```shell flow browse # Launch the interactive browser @@ -23,7 +27,7 @@ flow browse # Launch the interactive browser - H - Show help menu with all shortcuts - Q - Quit the browser -### Filtering and Search +### Filtering and Search Filter executables by various criteria: @@ -52,7 +56,7 @@ flow browse --all flow browse --workspace api --verb deploy --tag production ``` -### Running Executables +### Running Executables **From the browser:** - Select an executable and press R to run it @@ -71,7 +75,7 @@ flow deploy api:production Control how flow displays information with output format options. -### TUI vs Non-Interactive +### TUI vs Non-Interactive ```shell # Interactive TUI (default) @@ -85,7 +89,7 @@ flow workspace list --output json flow secret list --output yaml ``` -### Disabling the TUI +### Disabling the TUI For scripts, CI/CD, or personal preference: @@ -99,7 +103,7 @@ DISABLE_FLOW_INTERACTIVE=true flow browse ## Customization -### Themes +### Themes Choose from several built-in themes: @@ -112,7 +116,7 @@ flow config set theme dracula # Dracula flow config set theme tokyo-night # Tokyo Night ``` -### Custom Colors +### Custom Colors Override theme colors by editing your config file: @@ -128,7 +132,7 @@ colorOverride: > **Complete reference**: See the [config file reference](../types/config.md#ColorPalette) for all color options. -### Notifications +### Notifications Get notified when long-running executables complete: @@ -143,7 +147,7 @@ flow config set notifications true --sound flow config set notifications false ``` -### Log Display +### Log Display Control how command output is displayed: @@ -164,7 +168,7 @@ executables: cmd: echo "Debug output" ``` -### Workspace Modes +### Workspace Modes Control how flow determines your current workspace: @@ -178,7 +182,7 @@ flow config set workspace-mode fixed > **Learn more**: See the [Workspaces guide](workspaces.md) for detailed workspace mode explanations. -### Timeouts +### Timeouts Set default timeout for all executables: @@ -192,7 +196,7 @@ flow config set timeout 10m ## Configuration Management -### View Current Settings +### View Current Settings ```shell # View all settings @@ -202,7 +206,7 @@ flow config get flow config get --output json | jq '.theme' ``` -### Reset to Defaults +### Reset to Defaults ```shell # Reset all configuration @@ -211,7 +215,7 @@ flow config reset # Warning: This overwrites all customizations ``` -### Configuration File Location +### Configuration File Location Your config is stored in: - **Linux**: `~/.config/flow/config.yaml` diff --git a/docs/guide/secrets.md b/docs/guides/secrets.md similarity index 91% rename from docs/guide/secrets.md rename to docs/guides/secrets.md index 9a027a1e..41a8a3a4 100644 --- a/docs/guide/secrets.md +++ b/docs/guides/secrets.md @@ -1,3 +1,7 @@ +--- +title: Working with Secrets +--- + # Working with Secrets flow's built-in vault keeps your sensitive data secure while making it easy to use in your workflows. @@ -34,9 +38,9 @@ executables: flow supports multiple vault backends for different security needs: - +:::tabs -#### **AES256 (Default)** +== AES256 (Default) Symmetric encryption using a generated key. This is the simplest vault type - flow generates a random encryption key for you. @@ -74,7 +78,7 @@ flow vault create staging --key-env SHARED_VAULT_KEY > [!NOTE] > **Valid Key Format**: The existing key must be a base64-encoded 32-byte (256-bit) encryption key. You can generate a compatible key using `flow vault create` and copying the output, or by generating 32 random bytes and base64-encoding them. If the environment variable contains an invalid key format, vault creation will fail. -#### **Age** +== Age Asymmetric encryption using recipient keys. This is ideal for team vaults where multiple people need access. @@ -100,7 +104,7 @@ flow vault create team --type age --recipients key1,key2,key3 --identity-file ~/ flow vault create team --type age --recipients key1,key2,key3 --identity-env MY_IDENTITY ``` -#### **Unencrypted** +== Unencrypted A simple vault that stores secrets in plain text JSON files. This is not recommended for production use but can be useful for development or testing. @@ -110,7 +114,7 @@ flow vault create dev --type unencrypted ``` -#### **Keyring** +== Keyring A vault that uses your operating system's keyring for managing secrets. This is a good option for personal use where you want seamless integration with your OS security. @@ -120,7 +124,7 @@ This is a good option for personal use where you want seamless integration with flow vault create dev --type keyring ``` -#### **External (other CLI tools)** +== External (other CLI tools) An external vault that uses executes an external CLI tool via shell commands to manage secrets. This allows you to integrate with existing secret management systems. @@ -168,16 +172,17 @@ flow vault create passwords --type external --config /path/to/config.json Available in `cmd` and `output` fields: -- `{{key}}` - The secret key/name -- `{{value}}` - The secret value (for set operations) -- `{{env["VariableName"]}}`- Environment variable value -- `{{output}}` - Raw command output (for output templates) + +- `{{key}}` - The secret key/name +- `{{value}}` - The secret value (for set operations) +- `{{env["VariableName"]}}`- Environment variable value +- `{{output}}` - Raw command output (for output templates) All [Expr language](https://expr-lang.org/docs/language-definition) operators and functions can be used in the command templates, allowing for powerful dynamic secret management. - +::: -#### Authentication +### Authentication The environment variable or file that you provide at setup will be used to resolve the encryption key when accessing the vault. If you did not provide a key or file, these default environment variables will be used: @@ -203,7 +208,7 @@ flow vault create team --type age --identity-file ~/identities/identity.txt --id ## Using Secrets in Workflows -### Basic Usage +### Basic Usage ```yaml executables: @@ -218,7 +223,7 @@ executables: cmd: ./deploy.sh ``` -### Cross-Vault References +### Cross-Vault References Reference secrets from different vaults: @@ -237,7 +242,7 @@ executables: ## Secret Management -### Adding Secrets +### Adding Secrets ```shell # Interactive prompt (recommended) @@ -252,7 +257,7 @@ cat secret.txt | flow secret set my-secret flow secret set my-secret --file secret.txt ``` -### Viewing Secrets +### Viewing Secrets ```shell # List all secrets (values hidden) @@ -268,7 +273,7 @@ flow secret get my-secret --plaintext flow secret get my-secret --copy ``` -### Updating and Removing +### Updating and Removing ```shell # Update a secret (prompts for new value) @@ -278,7 +283,7 @@ flow secret set existing-secret flow secret remove old-secret ``` -### Working with Multiple Vaults +### Working with Multiple Vaults When working with multiple vaults, secrets are isolated per vault but the vault's name can be used to reference secrets across vaults. You can retrieve secrets from a specific vault without switching to it by using the vault name as a prefix: @@ -293,7 +298,7 @@ flow secret get development/api-key See the [vault command reference](../cli/flow_vault.md) for detailed commands and options. -### Vault Configuration +### Vault Configuration ```shell # View the current vault @@ -319,7 +324,7 @@ flow vault create myapp --path /storage/myapp This data is encrypted, so you can safely store it as-is without worrying about plaintext secrets being exposed. -### Managing Multiple Vaults +### Managing Multiple Vaults Switch between vaults for different projects or environments: @@ -337,7 +342,7 @@ flow secret set api-key flow secret list ``` -### Backup and Recovery +### Backup and Recovery Vault data is stored in your flow config directory: diff --git a/docs/guide/templating.md b/docs/guides/templating.md similarity index 82% rename from docs/guide/templating.md rename to docs/guides/templating.md index 51e25e98..6049ccf5 100644 --- a/docs/guide/templating.md +++ b/docs/guides/templating.md @@ -1,3 +1,7 @@ +--- +title: Templates & Workflow Generation +--- + # Templates & Workflow Generation Templates let you generate new workflows and project scaffolding with interactive forms. @@ -48,7 +52,7 @@ flow template generate my-app --template webapp Templates have four main parts: -### 1. Forms - Collect User Input +### 1. Forms - Collect User Input Forms define interactive prompts shown during generation: @@ -75,7 +79,7 @@ form: - `masked` - Hidden input for passwords - `confirm` - Yes/no question -### 2. Templates - Generate Flow Files +### 2. Templates - Generate Flow Files The main template creates your flow file: @@ -96,7 +100,7 @@ template: | cmd: kubectl scale deployment {{ name }} --replicas={{ form["replicas"] }} ``` -### 3. Artifacts - Copy Supporting Files +### 3. Artifacts - Copy Supporting Files Copy and optionally template additional files: @@ -116,7 +120,7 @@ artifacts: if: form["type"] == "helm" ``` -### 4. Hooks - Run Commands +### 4. Hooks - Run Commands Execute commands before/after generation: @@ -190,7 +194,7 @@ template: | See the [template command reference](../cli/flow_template.md) for all detailed commands and options. -### Register Templates +### Register Templates ```shell # From file @@ -203,7 +207,7 @@ flow template list flow template get -t webapp ``` -### Generate from Templates +### Generate from Templates ```shell # Using registered template @@ -222,22 +226,22 @@ flow template generate my-app \ ## Template Language flow uses [Expr](https://expr-lang.org) language for all template evaluation, but with Go template syntax. -You write templates using familiar `{{ }}` syntax, but the expressions inside are evaluated using Expr. +You write templates using familiar `{{ }}` syntax, but the expressions inside are evaluated using Expr. **Available Variables:** | Variable | Description | Example | |----------|-------------|---------| -| `name` | Generated file name | `{{ name }}` | -| `workspace` | Target workspace | `{{ workspace }}` | -| `form` | Form input values | `{{ form["replicas"] }}` | -| `env` | Environment variables | `{{ env["USER"] }}` | -| `os` | Operating system | `{{ os }}` | -| `arch` | System architecture | `{{ arch }}` | -| `workspacePath` | Full path to workspace | `{{ workspacePath }}` | -| `flowFilePath` | Full path to target flow file | `{{ flowFilePath }}` | -| `templatePath` | Path to template file | `{{ templatePath }}` | -| `directory` | Target directory | `{{ directory }}` | +| `name` | Generated file name | `{{ name }}` | +| `workspace` | Target workspace | `{{ workspace }}` | +| `form` | Form input values | `{{ form["replicas"] }}` | +| `env` | Environment variables | `{{ env["USER"] }}` | +| `os` | Operating system | `{{ os }}` | +| `arch` | System architecture | `{{ arch }}` | +| `workspacePath` | Full path to workspace | `{{ workspacePath }}` | +| `flowFilePath` | Full path to target flow file | `{{ flowFilePath }}` | +| `templatePath` | Path to template file | `{{ templatePath }}` | +| `directory` | Target directory | `{{ directory }}` | **Template Examples:** ```yaml @@ -266,7 +270,7 @@ template: | ``` **`if` fields in artifacts/hooks:** -For `if` fields in artifacts, preRun, and postRun sections, use Expr directly (no `{{ }}` needed): +For `if` fields in artifacts, preRun, and postRun sections, use Expr directly (no `{{ }}` needed): ```yaml artifacts: diff --git a/docs/guide/workspaces.md b/docs/guides/workspaces.md similarity index 89% rename from docs/guide/workspaces.md rename to docs/guides/workspaces.md index 34690ee6..7eca2838 100644 --- a/docs/guide/workspaces.md +++ b/docs/guides/workspaces.md @@ -1,10 +1,14 @@ +--- +title: Workspaces +--- + # Workspaces Workspaces organize your flow files and executables into logical projects. Think of them as containers for related automation. ## Workspace Management -### Adding Workspaces +### Adding Workspaces Register any directory as a workspace: @@ -21,7 +25,7 @@ flow workspace add my-project /path/to/project --set When you add a workspace, flow creates a `flow.yaml` configuration file in the root directory if one doesn't exist. -### Switching Workspaces +### Switching Workspaces Change your current workspace: @@ -33,7 +37,7 @@ flow workspace switch my-project flow workspace switch my-project --fixed ``` -### Listing and Viewing +### Listing and Viewing Explore your registered workspaces: @@ -51,7 +55,7 @@ flow workspace get flow workspace get my-project ``` -### Removing Workspaces +### Removing Workspaces Unregister a workspace: @@ -91,7 +95,7 @@ executables: excluded: ["node_modules/", ".git/", "tmp/"] ``` -### Configuration Options +### Configuration Options **Display and Documentation:** - `displayName`: Human-readable name for the workspace @@ -113,7 +117,7 @@ executables: Control how flow determines your current workspace: -### Dynamic Mode (Default) +### Dynamic Mode (Default) flow automatically switches to the workspace containing your current directory: ```shell @@ -125,7 +129,7 @@ cd ~/code/api-service # Uses api-service workspace cd ~/code/frontend # Uses frontend workspace ``` -### Fixed Mode +### Fixed Mode flow always uses the workspace you've explicitly set: ```shell @@ -140,7 +144,7 @@ flow workspace switch my-project ## Multi-Workspace Workflows -### Cross-Workspace References +### Cross-Workspace References Reference executables from other workspaces (requires `visibility: public`): @@ -155,7 +159,7 @@ executables: - ref: deploy infrastructure/k8s:services ``` -### Shared Workspaces +### Shared Workspaces Create workspaces for shared tools and utilities: @@ -167,7 +171,7 @@ flow workspace add shared-tools ~/shared flow send shared-tools/slack:notification "Deployment complete" ``` -## What's Next? +## What's Next? Now that you can organize your automation with workspaces: diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 32ef661a..00000000 --- a/docs/index.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - flow - - - - - - - - - - -
thinking...
- - - - - - - - - - - diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..42277f29 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,45 @@ +--- +layout: home + +hero: + name: "flow" + text: "Local developer automation platform that flows with you." + tagline: "Define your executables in YAML\nBrowse and execute with ease" + image: + src: /icon.png + alt: flow + actions: + - theme: brand + text: Install flow + link: /installation + - theme: alt + text: Quickstart + link: /quickstart + - theme: alt + text: View on GitHub + link: https://github.com/flowexec/flow + +features: + - icon: 📁 + title: Multi-Project Workspaces + details: Organize and share workflows across all your projects + - icon: 🖥️ + title: Interactive TUI Browser + details: Discover and execute workflows with filtering and search + - icon: 🔄 + title: Flexible Execution Types + details: Run tasks serially, in parallel, make requests, or launch apps + - icon: 📝 + title: Template Generation + details: Bootstrap new projects from customizable workflow templates + - icon: 🔒 + title: Encrypted Secret Vaults + details: Securely store credentials with multiple backend options + - icon: 🔌 + title: Platform Integrations + details: GitHub Actions, AI assistants via MCP, and more +--- + +

+ +Browse examples in the [examples repo](https://github.com/flowexec/examples) and [flow project](https://github.com/flowexec/flow/tree/main/.execs) diff --git a/docs/installation.md b/docs/installation.md index b584f88b..16eec181 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -1,4 +1,8 @@ -# Installation +--- +title: Installation +--- + +# Installation > **System Requirements:** flow supports Linux and macOS systems. On Linux, you'll need `xclip` installed to use clipboard features. @@ -58,4 +62,4 @@ Ready to start automating? → [Quick start guide](quickstart.md) ## CI/CD & Containers -For GitHub Actions, Docker, and other integrations, see the [integrations guide](guide/integrations.md). \ No newline at end of file +For GitHub Actions, Docker, and other integrations, see the [integrations guide](guides/integrations.md). \ No newline at end of file diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 00000000..3f4f9caf --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,2481 @@ +{ + "name": "flow-docs", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "flow-docs", + "version": "0.1.0", + "devDependencies": { + "vitepress": "^1.6.4", + "vitepress-plugin-tabs": "0.7.1", + "vue": "^3.5.13" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.6.1.tgz", + "integrity": "sha512-wV/gNRkzb7sI9vs1OneG129hwe3Q5zPj7zigz3Ps7M5Lpo2hSorrOnXNodHEOV+yXE/ks4Pd+G3CDFIjFTWhMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.40.1.tgz", + "integrity": "sha512-cxKNATPY5t+Mv8XAVTI57altkaPH+DZi4uMrnexPxPHODMljhGYY+GDZyHwv9a+8CbZHcY372OkxXrDMZA4Lnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.40.1.tgz", + "integrity": "sha512-XP008aMffJCRGAY8/70t+hyEyvqqV7YKm502VPu0+Ji30oefrTn2al7LXkITz7CK6I4eYXWRhN6NaIUi65F1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.40.1.tgz", + "integrity": "sha512-gWfQuQUBtzUboJv/apVGZMoxSaB0M4Imwl1c9Ap+HpCW7V0KhjBddqF2QQt5tJZCOFsfNIgBbZDGsEPaeKUosw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.40.1.tgz", + "integrity": "sha512-RTLjST/t+lsLMouQ4zeLJq2Ss+UNkLGyNVu+yWHanx6kQ3LT5jv8UvPwyht9s7R6jCPnlSI77WnL80J32ZuyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.40.1.tgz", + "integrity": "sha512-2FEK6bUomBzEYkTKzD0iRs7Ljtjb45rKK/VSkyHqeJnG+77qx557IeSO0qVFE3SfzapNcoytTofnZum0BQ6r3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.40.1.tgz", + "integrity": "sha512-Nju4NtxAvXjrV2hHZNLKVJLXjOlW6jAXHef/CwNzk1b2qIrCWDO589ELi5ZHH1uiWYoYyBXDQTtHmhaOVVoyXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.40.1.tgz", + "integrity": "sha512-Mw6pAUF121MfngQtcUb5quZVqMC68pSYYjCRZkSITC085S3zdk+h/g7i6FxnVdbSU6OztxikSDMh1r7Z+4iPlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.40.1.tgz", + "integrity": "sha512-z+BPlhs45VURKJIxsR99NNBWpUEEqIgwt10v/fATlNxc4UlXvALdOsWzaFfe89/lbP5Bu4+mbO59nqBC87ZM/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.40.1.tgz", + "integrity": "sha512-VJMUMbO0wD8Rd2VVV/nlFtLJsOAQvjnVNGkMkspFiFhpBA7s/xJOb+fJvvqwKFUjbKTUA7DjiSi1ljSMYBasXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.40.1.tgz", + "integrity": "sha512-ehvJLadKVwTp9Scg9NfzVSlBKH34KoWOQNTaN8i1Ac64AnO6iH2apJVSP6GOxssaghZ/s8mFQsDH3QIZoluFHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.40.1.tgz", + "integrity": "sha512-PbidVsPurUSQIr6X9/7s34mgOMdJnn0i6p+N6Ab+lsNhY5eiu+S33kZEpZwkITYBCIbhzDLOvb7xZD3gDi+USA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.40.1.tgz", + "integrity": "sha512-ThZ5j6uOZCF11fMw9IBkhigjOYdXGXQpj6h4k+T9UkZrF2RlKcPynFzDeRgaLdpYk8Yn3/MnFbwUmib7yxj5Lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.40.1.tgz", + "integrity": "sha512-H1gYPojO6krWHnUXu/T44DrEun/Wl95PJzMXRcM/szstNQczSbwq6wIFJPI9nyE95tarZfUNU3rgorT+wZ6iCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", + "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/react": "3.8.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.54", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.54.tgz", + "integrity": "sha512-OQQYl8yC5j3QklZOYnK31QYe5h47IhyCoxSLd53f0e0nA4dgi8VOZS30SgSAbsecQ+S0xlGJMjXIHTIqZ+ML3w==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "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/@rollup/rollup-android-arm-eabi": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", + "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", + "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", + "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", + "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", + "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", + "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", + "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", + "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", + "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", + "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", + "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz", + "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz", + "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz", + "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz", + "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", + "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz", + "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz", + "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz", + "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz", + "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", + "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", + "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", + "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", + "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^3.1.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", + "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", + "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", + "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", + "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/compiler-core": "3.5.22", + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.19", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.22.tgz", + "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.22.tgz", + "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz", + "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/runtime-core": "3.5.22", + "@vue/shared": "3.5.22", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.22.tgz", + "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "vue": "3.5.22" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", + "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vueuse/core": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/algoliasearch": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.40.1.tgz", + "integrity": "sha512-iUNxcXUNg9085TJx0HJLjqtDE0r1RZ0GOGrt8KNQqQT5ugu8lZsHuMUYW/e0lHhq6xBvmktU9Bw4CXP9VQeKrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.6.1", + "@algolia/client-abtesting": "5.40.1", + "@algolia/client-analytics": "5.40.1", + "@algolia/client-common": "5.40.1", + "@algolia/client-insights": "5.40.1", + "@algolia/client-personalization": "5.40.1", + "@algolia/client-query-suggestions": "5.40.1", + "@algolia/client-search": "5.40.1", + "@algolia/ingestion": "1.40.1", + "@algolia/monitoring": "1.40.1", + "@algolia/recommend": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/birpc": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.6.1.tgz", + "integrity": "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/focus-trap": { + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz", + "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "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, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", + "dev": true, + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/oniguruma-to-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.27.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz", + "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", + "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true, + "license": "MIT" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz", + "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.4", + "@rollup/rollup-android-arm64": "4.52.4", + "@rollup/rollup-darwin-arm64": "4.52.4", + "@rollup/rollup-darwin-x64": "4.52.4", + "@rollup/rollup-freebsd-arm64": "4.52.4", + "@rollup/rollup-freebsd-x64": "4.52.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.4", + "@rollup/rollup-linux-arm-musleabihf": "4.52.4", + "@rollup/rollup-linux-arm64-gnu": "4.52.4", + "@rollup/rollup-linux-arm64-musl": "4.52.4", + "@rollup/rollup-linux-loong64-gnu": "4.52.4", + "@rollup/rollup-linux-ppc64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-musl": "4.52.4", + "@rollup/rollup-linux-s390x-gnu": "4.52.4", + "@rollup/rollup-linux-x64-gnu": "4.52.4", + "@rollup/rollup-linux-x64-musl": "4.52.4", + "@rollup/rollup-openharmony-arm64": "4.52.4", + "@rollup/rollup-win32-arm64-msvc": "4.52.4", + "@rollup/rollup-win32-ia32-msvc": "4.52.4", + "@rollup/rollup-win32-x64-gnu": "4.52.4", + "@rollup/rollup-win32-x64-msvc": "4.52.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/shiki": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", + "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/langs": "2.5.0", + "@shikijs/themes": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true, + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.4.20", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", + "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz", + "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/css": "3.8.2", + "@docsearch/js": "3.8.2", + "@iconify-json/simple-icons": "^1.2.21", + "@shikijs/core": "^2.1.0", + "@shikijs/transformers": "^2.1.0", + "@shikijs/types": "^2.1.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/devtools-api": "^7.7.0", + "@vue/shared": "^3.5.13", + "@vueuse/core": "^12.4.0", + "@vueuse/integrations": "^12.4.0", + "focus-trap": "^7.6.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.1", + "shiki": "^2.1.0", + "vite": "^5.4.14", + "vue": "^3.5.13" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vitepress-plugin-tabs": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.7.1.tgz", + "integrity": "sha512-jxJvsicxnMSIYX9b8mAFLD2nwyKUcMO10dEt4nDSbinZhM8cGvAmMFOHPdf6TBX6gYZRl+/++/iYHtoM14fERQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "vitepress": "^1.0.0", + "vue": "^3.5.0" + } + }, + "node_modules/vue": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", + "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-sfc": "3.5.22", + "@vue/runtime-dom": "3.5.22", + "@vue/server-renderer": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000..a26ee178 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,16 @@ +{ + "name": "flow-docs", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vitepress dev", + "build": "vitepress build", + "preview": "vitepress preview" + }, + "devDependencies": { + "vitepress": "^1.6.4", + "vitepress-plugin-tabs": "0.7.1", + "vue": "^3.5.13" + } +} diff --git a/docs/_media/demo.gif b/docs/public/demo.gif similarity index 100% rename from docs/_media/demo.gif rename to docs/public/demo.gif diff --git a/docs/_media/favicon.ico b/docs/public/favicon.ico similarity index 100% rename from docs/_media/favicon.ico rename to docs/public/favicon.ico diff --git a/docs/_media/icon.png b/docs/public/icon.png similarity index 100% rename from docs/_media/icon.png rename to docs/public/icon.png diff --git a/docs/public/logo-dark.png b/docs/public/logo-dark.png new file mode 100644 index 00000000..e61fcf3a Binary files /dev/null and b/docs/public/logo-dark.png differ diff --git a/docs/_media/logo.png b/docs/public/logo-light.png similarity index 100% rename from docs/_media/logo.png rename to docs/public/logo-light.png diff --git a/docs/schemas/config_schema.json b/docs/public/schemas/config_schema.json similarity index 100% rename from docs/schemas/config_schema.json rename to docs/public/schemas/config_schema.json diff --git a/docs/schemas/flowfile_schema.json b/docs/public/schemas/flowfile_schema.json similarity index 100% rename from docs/schemas/flowfile_schema.json rename to docs/public/schemas/flowfile_schema.json diff --git a/docs/schemas/template_schema.json b/docs/public/schemas/template_schema.json similarity index 98% rename from docs/schemas/template_schema.json rename to docs/public/schemas/template_schema.json index abd01f58..e3ec1548 100644 --- a/docs/schemas/template_schema.json +++ b/docs/public/schemas/template_schema.json @@ -143,7 +143,7 @@ } }, "form": { - "description": "Form fields to be displayed to the user when generating a flow file from a template. \nThe form will be rendered first, and the user's input can be used to render the template.\nFor example, a form field with the key `name` can be used in the template as `{{.name}}`.\n", + "description": "Form fields to be displayed to the user when generating a flow file from a template. \nThe form will be rendered first, and the user's input can be used to render the template.\n", "type": "array", "default": [], "items": { diff --git a/docs/schemas/workspace_schema.json b/docs/public/schemas/workspace_schema.json similarity index 100% rename from docs/schemas/workspace_schema.json rename to docs/public/schemas/workspace_schema.json diff --git a/docs/quickstart.md b/docs/quickstart.md index 9a501138..93d3e1b7 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -1,4 +1,8 @@ -# Quick Start +--- +title: Quick Start +--- + +# Quick Start > [!NOTE] > Before getting started, install the latest `flow` version using one of the methods described in the @@ -120,10 +124,10 @@ You'll see real-world examples of builds, tests, and development workflows used Now that you've got the basics: -- **Learn the fundamentals** → [Core concepts](guide/concepts.md) -- **Secure your workflows** → [Working with secrets](guide/secrets.md) -- **Build complex automations** → [Advanced workflows](guide/advanced.md) -- **Customize your experience** → [Interactive UI](guide/interactive.md) +- **Learn the fundamentals** → [Core concepts](guides/concepts.md) +- **Secure your workflows** → [Working with secrets](guides/secrets.md) +- **Build complex automations** → [Advanced workflows](guides/advanced.md) +- **Customize your experience** → [Interactive UI](guides/interactive.md) ## Getting Help diff --git a/docs/tuikit.md b/docs/tuikit.md index f8141af6..76831ab2 100644 --- a/docs/tuikit.md +++ b/docs/tuikit.md @@ -1,4 +1,6 @@ +--- +title: Tuikit +--- + > [!NOTE] > You can find tuikit in the [github.com/flowexec/tuikit](https://github.com/flowexec/tuikit) GitHub repo. - -[tuikit](https://raw.githubusercontent.com/jahvon/tuikit/refs/heads/main/README.md ':include') \ No newline at end of file diff --git a/docs/types/_sidebar.md b/docs/types/_sidebar.md deleted file mode 100644 index be61b987..00000000 --- a/docs/types/_sidebar.md +++ /dev/null @@ -1,7 +0,0 @@ -- [← Back to Home](../README.md "flow documentation") - -- [Configuration Reference](README.md "Configuration file reference") - - [flow file (executables)](flowfile.md) - - [template file](template.md) - - [workspace file](workspace.md) - - [user configuration file](config.md) diff --git a/docs/types/config.md b/docs/types/config.md index f088a676..43bfbe38 100644 --- a/docs/types/config.md +++ b/docs/types/config.md @@ -1,4 +1,8 @@ -[comment]: # (Documentation autogenerated by docsgen. Do not edit directly.) +--- +title: Config +--- + + # Config @@ -23,18 +27,18 @@ Alternatively, a custom path can be set using the `FLOW_CONFIG_PATH` environment | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `colorOverride` | Override the default color palette for the interactive UI. This can be used to customize the colors of the UI. | [ColorPalette](#ColorPalette) | | | +| `colorOverride` | Override the default color palette for the interactive UI. This can be used to customize the colors of the UI. | [ColorPalette](#colorpalette) | | | | `currentNamespace` | The name of the current namespace. Namespaces are used to reference executables in the CLI using the format `workspace:namespace/name`. If the namespace is not set, only executables defined without a namespace will be discovered. | `string` | | | -| `currentVault` | The name of the current vault. This should match a key in the `vaults` map. | `string` | | | +| `currentVault` | The name of the current vault. This should match a key in the `vaults` map. | `string` | | | | `currentWorkspace` | The name of the current workspace. This should match a key in the `workspaces` or `remoteWorkspaces` map. | `string` | | | | `defaultLogMode` | The default log mode to use when running executables. This can either be `hidden`, `json`, `logfmt` or `text` `hidden` will not display any logs. `json` will display logs in JSON format. `logfmt` will display logs with a log level, timestamp, and message. `text` will just display the log message. | `string` | logfmt | | | `defaultTimeout` | The default timeout to use when running executables. This should be a valid duration string. | `string` | 30m | | -| `interactive` | | [Interactive](#Interactive) | | | +| `interactive` | | [Interactive](#interactive) | | | | `templates` | A map of flowfile template names to their paths. | `map` (`string` -> `string`) | map[] | | | `theme` | The theme of the interactive UI. | `string` | default | | -| `vaults` | A map of vault names to their paths. The path should be a valid absolute path to the vault file created by flow. | `map` (`string` -> `string`) | | | +| `vaults` | A map of vault names to their paths. The path should be a valid absolute path to the vault file created by flow. | `map` (`string` -> `string`) | | | | `workspaceMode` | The mode of the workspace. This can be either `fixed` or `dynamic`. In `fixed` mode, the current workspace used at runtime is always the one set in the currentWorkspace config field. In `dynamic` mode, the current workspace used at runtime is determined by the current directory. If the current directory is within a workspace, that workspace is used. | `string` | dynamic | | -| `workspaces` | Map of workspace names to their paths. The path should be a valid absolute path to the workspace directory. | `map` (`string` -> `string`) | | | +| `workspaces` | Map of workspace names to their paths. The path should be a valid absolute path to the workspace directory. | `map` (`string` -> `string`) | | | ## Definitions @@ -54,20 +58,20 @@ If unset, the default color for the current theme will be used. | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `black` | | `string` | | | -| `body` | | `string` | | | -| `border` | | `string` | | | -| `codeStyle` | The style of the code block. For example, `monokai`, `dracula`, `github`, etc. See [chroma styles](https://github.com/alecthomas/chroma/tree/master/styles) for available style names. | `string` | | | -| `emphasis` | | `string` | | | -| `error` | | `string` | | | -| `gray` | | `string` | | | -| `info` | | `string` | | | -| `primary` | | `string` | | | -| `secondary` | | `string` | | | -| `success` | | `string` | | | -| `tertiary` | | `string` | | | -| `warning` | | `string` | | | -| `white` | | `string` | | | +| `black` | | `string` | | | +| `body` | | `string` | | | +| `border` | | `string` | | | +| `codeStyle` | The style of the code block. For example, `monokai`, `dracula`, `github`, etc. See [chroma styles](https://github.com/alecthomas/chroma/tree/master/styles) for available style names. | `string` | | | +| `emphasis` | | `string` | | | +| `error` | | `string` | | | +| `gray` | | `string` | | | +| `info` | | `string` | | | +| `primary` | | `string` | | | +| `secondary` | | `string` | | | +| `success` | | `string` | | | +| `tertiary` | | `string` | | | +| `warning` | | `string` | | | +| `white` | | `string` | | | ### Interactive @@ -81,8 +85,8 @@ Configurations for the interactive UI. | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `enabled` | | `boolean` | | ✘ | -| `notifyOnCompletion` | Whether to send a desktop notification when a command completes. | `boolean` | | | -| `soundOnCompletion` | Whether to play a sound when a command completes. | `boolean` | | | +| `enabled` | | `boolean` | | ✘ | +| `notifyOnCompletion` | Whether to send a desktop notification when a command completes. | `boolean` | | | +| `soundOnCompletion` | Whether to play a sound when a command completes. | `boolean` | | | diff --git a/docs/types/flowfile.md b/docs/types/flowfile.md index 3ce3dbf5..2af0fc75 100644 --- a/docs/types/flowfile.md +++ b/docs/types/flowfile.md @@ -1,4 +1,8 @@ -[comment]: # (Documentation autogenerated by docsgen. Do not edit directly.) +--- +title: FlowFile +--- + + # FlowFile @@ -16,12 +20,12 @@ in order to be discovered by the CLI. It's configuration is used to define a gro | ----- | ----------- | ---- | ------- | :--------: | | `description` | A description of the executables defined within the flow file. This description will used as a shared description for all executables in the flow file. | `string` | | | | `descriptionFile` | A path to a markdown file that contains the description of the executables defined within the flow file. | `string` | | | -| `executables` | | `array` ([Executable](#Executable)) | [] | | -| `fromFile` | DEPRECATED: Use `imports` instead | [FromFile](#FromFile) | [] | | -| `imports` | | [FromFile](#FromFile) | [] | | +| `executables` | | `array` ([Executable](#executable)) | [] | | +| `fromFile` | DEPRECATED: Use `imports` instead | [FromFile](#fromfile) | [] | | +| `imports` | | [FromFile](#fromfile) | [] | | | `namespace` | The namespace to be given to all executables in the flow file. If not set, the executables in the file will be grouped into the root (*) namespace. Namespaces can be reused across multiple flow files. Namespaces are used to reference executables in the CLI using the format `workspace:namespace/name`. | `string` | | | | `tags` | Tags to be applied to all executables defined within the flow file. | `array` (`string`) | [] | | -| `visibility` | | [CommonVisibility](#CommonVisibility) | | | +| `visibility` | | [CommonVisibility](#commonvisibility) | | | ## Definitions @@ -81,20 +85,20 @@ Executables are the building blocks of workflows and are used to define the acti | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `aliases` | | [CommonAliases](#CommonAliases) | [] | | +| `aliases` | | [CommonAliases](#commonaliases) | [] | | | `description` | A description of the executable. This description is rendered as markdown in the interactive UI. | `string` | | | -| `exec` | | [ExecutableExecExecutableType](#ExecutableExecExecutableType) | | | -| `launch` | | [ExecutableLaunchExecutableType](#ExecutableLaunchExecutableType) | | | +| `exec` | | [ExecutableExecExecutableType](#executableexecexecutabletype) | | | +| `launch` | | [ExecutableLaunchExecutableType](#executablelaunchexecutabletype) | | | | `name` | An optional name for the executable. Name is used to reference the executable in the CLI using the format `workspace/namespace:name`. [Verb group + Name] must be unique within the namespace of the workspace. | `string` | | | -| `parallel` | | [ExecutableParallelExecutableType](#ExecutableParallelExecutableType) | | | -| `render` | | [ExecutableRenderExecutableType](#ExecutableRenderExecutableType) | | | -| `request` | | [ExecutableRequestExecutableType](#ExecutableRequestExecutableType) | | | -| `serial` | | [ExecutableSerialExecutableType](#ExecutableSerialExecutableType) | | | -| `tags` | | [CommonTags](#CommonTags) | [] | | -| `timeout` | The maximum amount of time the executable is allowed to run before being terminated. The timeout is specified in Go duration format (e.g. 30s, 5m, 1h). | `string` | | | -| `verb` | | [ExecutableVerb](#ExecutableVerb) | exec | ✘ | -| `verbAliases` | A list of aliases for the verb. This allows the executable to be referenced with multiple verbs. | `array` ([Verb](#Verb)) | [] | | -| `visibility` | | [CommonVisibility](#CommonVisibility) | | | +| `parallel` | | [ExecutableParallelExecutableType](#executableparallelexecutabletype) | | | +| `render` | | [ExecutableRenderExecutableType](#executablerenderexecutabletype) | | | +| `request` | | [ExecutableRequestExecutableType](#executablerequestexecutabletype) | | | +| `serial` | | [ExecutableSerialExecutableType](#executableserialexecutabletype) | | | +| `tags` | | [CommonTags](#commontags) | [] | | +| `timeout` | The maximum amount of time the executable is allowed to run before being terminated. The timeout is specified in Go duration format (e.g. 30s, 5m, 1h). | `string` | | | +| `verb` | | [ExecutableVerb](#executableverb) | exec | ✘ | +| `verbAliases` | A list of aliases for the verb. This allows the executable to be referenced with multiple verbs. | `array` ([Verb](#verb)) | [] | | +| `visibility` | | [CommonVisibility](#commonvisibility) | | | ### ExecutableArgument @@ -112,7 +116,7 @@ Executables are the building blocks of workflows and are used to define the acti | `envKey` | The name of the environment variable that will be assigned the value. | `string` | | | | `flag` | The flag to use when setting the argument from the command line. Either `flag` or `pos` must be set, but not both. | `string` | | | | `outputFile` | A path where the argument value will be temporarily written to disk. The file will be created before execution and cleaned up afterwards. | `string` | | | -| `pos` | The position of the argument in the command line ArgumentList. Values start at 1. Either `flag` or `pos` must be set, but not both. | `integer` | | | +| `pos` | The position of the argument in the command line ArgumentList. Values start at 1. Either `flag` or `pos` must be set, but not both. | `integer` | | | | `required` | If the argument is required, the executable will fail if the argument is not provided. If the argument is not required, the default value will be used if the argument is not provided. | `boolean` | false | | | `type` | The type of the argument. This is used to determine how to parse the value of the argument. | `string` | string | | @@ -120,7 +124,7 @@ Executables are the building blocks of workflows and are used to define the acti -**Type:** `array` ([ExecutableArgument](#ExecutableArgument)) +**Type:** `array` ([ExecutableArgument](#executableargument)) @@ -152,12 +156,12 @@ Standard executable type. Runs a command/file in a subprocess. | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `args` | | [ExecutableArgumentList](#ExecutableArgumentList) | | | +| `args` | | [ExecutableArgumentList](#executableargumentlist) | | | | `cmd` | The command to execute. Only one of `cmd` or `file` must be set. | `string` | | | -| `dir` | | [ExecutableDirectory](#ExecutableDirectory) | | | +| `dir` | | [ExecutableDirectory](#executabledirectory) | | | | `file` | The file to execute. Only one of `cmd` or `file` must be set. | `string` | | | | `logMode` | The log mode to use when running the executable. This can either be `hidden`, `json`, `logfmt` or `text` | `string` | logfmt | | -| `params` | | [ExecutableParameterList](#ExecutableParameterList) | | | +| `params` | | [ExecutableParameterList](#executableparameterlist) | | | ### ExecutableLaunchExecutableType @@ -172,8 +176,8 @@ Launches an application or opens a URI. | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | | `app` | The application to launch the URI with. | `string` | | | -| `args` | | [ExecutableArgumentList](#ExecutableArgumentList) | | | -| `params` | | [ExecutableParameterList](#ExecutableParameterList) | | | +| `args` | | [ExecutableArgumentList](#executableargumentlist) | | | +| `params` | | [ExecutableParameterList](#executableparameterlist) | | | | `uri` | The URI to launch. This can be a file path or a web URL. | `string` | | ✘ | ### ExecutableParallelExecutableType @@ -188,12 +192,12 @@ Launches an application or opens a URI. | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `args` | | [ExecutableArgumentList](#ExecutableArgumentList) | | | -| `dir` | | [ExecutableDirectory](#ExecutableDirectory) | | | -| `execs` | A list of executables to run in parallel. Each executable can be a command or a reference to another executable. | [ExecutableParallelRefConfigList](#ExecutableParallelRefConfigList) | | ✘ | -| `failFast` | End the parallel execution as soon as an exec exits with a non-zero status. This is the default behavior. When set to false, all execs will be run regardless of the exit status of parallel execs. | `boolean` | | | +| `args` | | [ExecutableArgumentList](#executableargumentlist) | | | +| `dir` | | [ExecutableDirectory](#executabledirectory) | | | +| `execs` | A list of executables to run in parallel. Each executable can be a command or a reference to another executable. | [ExecutableParallelRefConfigList](#executableparallelrefconfiglist) | | ✘ | +| `failFast` | End the parallel execution as soon as an exec exits with a non-zero status. This is the default behavior. When set to false, all execs will be run regardless of the exit status of parallel execs. | `boolean` | | | | `maxThreads` | The maximum number of threads to use when executing the parallel executables. | `integer` | 5 | | -| `params` | | [ExecutableParameterList](#ExecutableParameterList) | | | +| `params` | | [ExecutableParameterList](#executableparameterlist) | | | ### ExecutableParallelRefConfig @@ -210,7 +214,7 @@ Configuration for a parallel executable. | `args` | Arguments to pass to the executable. | `array` (`string`) | [] | | | `cmd` | The command to execute. One of `cmd` or `ref` must be set. | `string` | | | | `if` | An expression that determines whether the executable should run, using the Expr language syntax. The expression is evaluated at runtime and must resolve to a boolean value. The expression has access to OS/architecture information (os, arch), environment variables (env), stored data (store), and context information (ctx) like workspace and paths. For example, `os == "darwin"` will only run on macOS, `len(store["feature"]) > 0` will run if a value exists in the store, and `env["CI"] == "true"` will run in CI environments. See the [Expr documentation](https://expr-lang.org/docs/language-definition) for more information. | `string` | | | -| `ref` | A reference to another executable to run in serial. One of `cmd` or `ref` must be set. | [ExecutableRef](#ExecutableRef) | | | +| `ref` | A reference to another executable to run in serial. One of `cmd` or `ref` must be set. | [ExecutableRef](#executableref) | | | | `retries` | The number of times to retry the executable if it fails. | `integer` | 0 | | ### ExecutableParallelRefConfigList @@ -218,7 +222,7 @@ Configuration for a parallel executable. A list of executables to run in parallel. The executables can be defined by it's exec `cmd` or `ref`. -**Type:** `array` ([ExecutableParallelRefConfig](#ExecutableParallelRefConfig)) +**Type:** `array` ([ExecutableParallelRefConfig](#executableparallelrefconfig)) @@ -248,7 +252,7 @@ Only one of `text`, `secretRef`, `prompt`, or `file` must be set. Specifying mor -**Type:** `array` ([ExecutableParameter](#ExecutableParameter)) +**Type:** `array` ([ExecutableParameter](#executableparameter)) @@ -281,9 +285,9 @@ Renders a markdown template file with data. | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `args` | | [ExecutableArgumentList](#ExecutableArgumentList) | | | -| `dir` | | [ExecutableDirectory](#ExecutableDirectory) | | | -| `params` | | [ExecutableParameterList](#ExecutableParameterList) | | | +| `args` | | [ExecutableArgumentList](#executableargumentlist) | | | +| `dir` | | [ExecutableDirectory](#executabledirectory) | | | +| `params` | | [ExecutableParameterList](#executableparameterlist) | | | | `templateDataFile` | The path to the JSON or YAML file containing the template data. | `string` | | | | `templateFile` | The path to the markdown template file to render. | `string` | | | @@ -299,13 +303,13 @@ Makes an HTTP request. | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `args` | | [ExecutableArgumentList](#ExecutableArgumentList) | | | +| `args` | | [ExecutableArgumentList](#executableargumentlist) | | | | `body` | The body of the request. | `string` | | | | `headers` | A map of headers to include in the request. | `map` (`string` -> `string`) | map[] | | | `logResponse` | If set to true, the response will be logged as program output. | `boolean` | false | | | `method` | The HTTP method to use when making the request. | `string` | GET | | -| `params` | | [ExecutableParameterList](#ExecutableParameterList) | | | -| `responseFile` | | [ExecutableRequestResponseFile](#ExecutableRequestResponseFile) | | | +| `params` | | [ExecutableParameterList](#executableparameterlist) | | | +| `responseFile` | | [ExecutableRequestResponseFile](#executablerequestresponsefile) | | | | `timeout` | The timeout for the request in Go duration format (e.g. 30s, 5m, 1h). | `string` | 30m0s | | | `transformResponse` | [Expr](https://expr-lang.org/docs/language-definition) expression used to transform the response before saving it to a file or outputting it. The following variables are available in the expression: - `status`: The response status string. - `code`: The response status code. - `body`: The response body. - `headers`: The response headers. For example, to capitalize a JSON body field's value, you can use `upper(fromJSON(body)["field"])`. | `string` | | | | `url` | The URL to make the request to. | `string` | | ✘ | @@ -323,7 +327,7 @@ Configuration for saving the response of a request to a file. | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `dir` | | [ExecutableDirectory](#ExecutableDirectory) | | | +| `dir` | | [ExecutableDirectory](#executabledirectory) | | | | `filename` | The name of the file to save the response to. | `string` | | ✘ | | `saveAs` | The format to save the response as. | `string` | raw | | @@ -339,11 +343,11 @@ Executes a list of executables in serial. | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `args` | | [ExecutableArgumentList](#ExecutableArgumentList) | | | -| `dir` | | [ExecutableDirectory](#ExecutableDirectory) | | | -| `execs` | A list of executables to run in serial. Each executable can be a command or a reference to another executable. | [ExecutableSerialRefConfigList](#ExecutableSerialRefConfigList) | | ✘ | -| `failFast` | End the serial execution as soon as an exec exits with a non-zero status. This is the default behavior. When set to false, all execs will be run regardless of the exit status of the previous exec. | `boolean` | | | -| `params` | | [ExecutableParameterList](#ExecutableParameterList) | | | +| `args` | | [ExecutableArgumentList](#executableargumentlist) | | | +| `dir` | | [ExecutableDirectory](#executabledirectory) | | | +| `execs` | A list of executables to run in serial. Each executable can be a command or a reference to another executable. | [ExecutableSerialRefConfigList](#executableserialrefconfiglist) | | ✘ | +| `failFast` | End the serial execution as soon as an exec exits with a non-zero status. This is the default behavior. When set to false, all execs will be run regardless of the exit status of the previous exec. | `boolean` | | | +| `params` | | [ExecutableParameterList](#executableparameterlist) | | | ### ExecutableSerialRefConfig @@ -360,7 +364,7 @@ Configuration for a serial executable. | `args` | Arguments to pass to the executable. | `array` (`string`) | [] | | | `cmd` | The command to execute. One of `cmd` or `ref` must be set. | `string` | | | | `if` | An expression that determines whether the executable should run, using the Expr language syntax. The expression is evaluated at runtime and must resolve to a boolean value. The expression has access to OS/architecture information (os, arch), environment variables (env), stored data (store), and context information (ctx) like workspace and paths. For example, `os == "darwin"` will only run on macOS, `len(store["feature"]) > 0` will run if a value exists in the store, and `env["CI"] == "true"` will run in CI environments. See the [Expr documentation](https://expr-lang.org/docs/language-definition) for more information. | `string` | | | -| `ref` | A reference to another executable to run in serial. One of `cmd` or `ref` must be set. | [ExecutableRef](#ExecutableRef) | | | +| `ref` | A reference to another executable to run in serial. One of `cmd` or `ref` must be set. | [ExecutableRef](#executableref) | | | | `retries` | The number of times to retry the executable if it fails. | `integer` | 0 | | | `reviewRequired` | If set to true, the user will be prompted to review the output of the executable before continuing. | `boolean` | false | | @@ -369,7 +373,7 @@ Configuration for a serial executable. A list of executables to run in serial. The executables can be defined by it's exec `cmd` or `ref`. -**Type:** `array` ([ExecutableSerialRefConfig](#ExecutableSerialRefConfig)) +**Type:** `array` ([ExecutableSerialRefConfig](#executableserialrefconfig)) diff --git a/docs/types/README.md b/docs/types/index.md similarity index 96% rename from docs/types/README.md rename to docs/types/index.md index 81363397..c5c36b69 100644 --- a/docs/types/README.md +++ b/docs/types/index.md @@ -1,3 +1,7 @@ +--- +title: flow YAML Configurations +--- + # flow YAML Configurations - [FlowFile](flowfile.md) diff --git a/docs/types/template.md b/docs/types/template.md index ed5d6ce4..10cbc4b3 100644 --- a/docs/types/template.md +++ b/docs/types/template.md @@ -1,4 +1,8 @@ -[comment]: # (Documentation autogenerated by docsgen. Do not edit directly.) +--- +title: Template +--- + + # Template @@ -13,11 +17,11 @@ Configuration for a flowfile template; templates can be used to generate flow fi | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | -| `artifacts` | A list of artifacts to be copied after generating the flow file. | `array` ([Artifact](#Artifact)) | | | -| `form` | Form fields to be displayed to the user when generating a flow file from a template. The form will be rendered first, and the user's input can be used to render the template. For example, a form field with the key `name` can be used in the template as `{{.name}}`. | `array` ([Field](#Field)) | [] | | -| `postRun` | A list of exec executables to run after generating the flow file. | `array` ([TemplateRefConfig](#TemplateRefConfig)) | | | -| `preRun` | A list of exec executables to run before generating the flow file. | `array` ([TemplateRefConfig](#TemplateRefConfig)) | | | -| `template` | The flow file template to generate. The template must be a valid flow file after rendering. | `string` | | | +| `artifacts` | A list of artifacts to be copied after generating the flow file. | `array` ([Artifact](#artifact)) | | | +| `form` | Form fields to be displayed to the user when generating a flow file from a template. The form will be rendered first, and the user's input can be used to render the template. | `array` ([Field](#field)) | [] | | +| `postRun` | A list of exec executables to run after generating the flow file. | `array` ([TemplateRefConfig](#templaterefconfig)) | | | +| `preRun` | A list of exec executables to run before generating the flow file. | `array` ([TemplateRefConfig](#templaterefconfig)) | | | +| `template` | The flow file template to generate. The template must be a valid flow file after rendering. | `string` | | | ## Definitions @@ -41,7 +45,7 @@ Go templating from form data is supported in all fields. | `dstName` | The name of the file to copy to. If not set, the file will be copied with the same name. | `string` | | | | `if` | An expression that determines whether the the artifact should be copied, using the Expr language syntax. The expression is evaluated at runtime and must resolve to a boolean value. If the condition is not met, the artifact will not be copied. The expression has access to OS/architecture information (os, arch), environment variables (env), form input (form), and context information (name, workspace, directory, etc.). See the [flow documentation](https://flowexec.io/guide/templating) for more information. | `string` | | | | `srcDir` | The directory to copy the file from. If not set, the file will be copied from the directory of the template file. | `string` | | | -| `srcName` | The name of the file to copy. | `string` | | | +| `srcName` | The name of the file to copy. | `string` | | | ### ExecutableRef @@ -74,8 +78,8 @@ A field to be displayed to the user when generating a flow file from a template. | `default` | The default value to use if a value is not set. | `string` | | | | `description` | A description of the field. | `string` | | | | `group` | The group to display the field in. Fields with the same group will be displayed together. | `integer` | 0 | | -| `key` | The key to associate the data with. This is used as the key in the template data map. | `string` | | ✘ | -| `prompt` | A prompt to be displayed to the user when collecting an input value. | `string` | | ✘ | +| `key` | The key to associate the data with. This is used as the key in the template data map. | `string` | | ✘ | +| `prompt` | A prompt to be displayed to the user when collecting an input value. | `string` | | ✘ | | `required` | If true, a value must be set. If false, the default value will be used if a value is not set. | `boolean` | false | | | `type` | The type of input field to display. | `string` | text | | | `validate` | A regular expression to validate the input value against. | `string` | | | @@ -95,6 +99,6 @@ Configuration for a template executable. | `args` | Arguments to pass to the executable. | `array` (`string`) | [] | | | `cmd` | The command to execute. One of `cmd` or `ref` must be set. | `string` | | | | `if` | An expression that determines whether the executable should be run, using the Expr language syntax. The expression is evaluated at runtime and must resolve to a boolean value. If the condition is not met, the executable will be skipped. The expression has access to OS/architecture information (os, arch), environment variables (env), form input (form), and context information (name, workspace, directory, etc.). See the [flow documentation](https://flowexec.io/guide/templating) for more information. | `string` | | | -| `ref` | A reference to another executable to run in serial. One of `cmd` or `ref` must be set. | [ExecutableRef](#ExecutableRef) | | | +| `ref` | A reference to another executable to run in serial. One of `cmd` or `ref` must be set. | [ExecutableRef](#executableref) | | | diff --git a/docs/types/workspace.md b/docs/types/workspace.md index 4fbd0f31..8087da01 100644 --- a/docs/types/workspace.md +++ b/docs/types/workspace.md @@ -1,4 +1,8 @@ -[comment]: # (Documentation autogenerated by docsgen. Do not edit directly.) +--- +title: Workspace +--- + + # Workspace @@ -18,9 +22,9 @@ Every workspace has a workspace config file named `flow.yaml` in the root of the | `descriptionFile` | A path to a markdown file that contains the description of the workspace. | `string` | | | | `displayName` | The display name of the workspace. This is used in the interactive UI. | `string` | | | | `envFiles` | A list of environment variable files to load for the workspace. These files should contain key-value pairs of environment variables. By default, the `.env` file in the workspace root is loaded if it exists. | `array` (`string`) | [] | | -| `executables` | | [ExecutableFilter](#ExecutableFilter) | | | -| `tags` | | [CommonTags](#CommonTags) | [] | | -| `verbAliases` | | [VerbAliases](#VerbAliases) | | | +| `executables` | | [ExecutableFilter](#executablefilter) | | | +| `tags` | | [CommonTags](#commontags) | [] | | +| `verbAliases` | | [VerbAliases](#verbaliases) | | | ## Definitions diff --git a/internal/mcp/resources/template_schema.json b/internal/mcp/resources/template_schema.json index abd01f58..e3ec1548 100644 --- a/internal/mcp/resources/template_schema.json +++ b/internal/mcp/resources/template_schema.json @@ -143,7 +143,7 @@ } }, "form": { - "description": "Form fields to be displayed to the user when generating a flow file from a template. \nThe form will be rendered first, and the user's input can be used to render the template.\nFor example, a form field with the key `name` can be used in the template as `{{.name}}`.\n", + "description": "Form fields to be displayed to the user when generating a flow file from a template. \nThe form will be rendered first, and the user's input can be used to render the template.\n", "type": "array", "default": [], "items": { diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index e1cd4a0c..00000000 --- a/package-lock.json +++ /dev/null @@ -1,184 +0,0 @@ -{ - "name": "flow", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "docsify-server-renderer": "^4.13.1" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/docsify": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/docsify/-/docsify-4.13.1.tgz", - "integrity": "sha512-BsDypTBhw0mfslw9kZgAspCMZSM+sUIIDg5K/t1hNLkvbem9h64ZQc71e1IpY+iWsi/KdeqfazDfg52y2Lmm0A==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "marked": "^1.2.9", - "medium-zoom": "^1.0.6", - "opencollective-postinstall": "^2.0.2", - "prismjs": "^1.27.0", - "strip-indent": "^3.0.0", - "tinydate": "^1.3.0", - "tweezer.js": "^1.4.0" - } - }, - "node_modules/docsify-server-renderer": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/docsify-server-renderer/-/docsify-server-renderer-4.13.1.tgz", - "integrity": "sha512-XNJeCK3zp+mVO7JZFn0bH4hNBAMMC1MbuCU7CBsjLHYn4NHrjIgCBGmylzEan3/4Qm6kbSzQx8XzUK5T7GQxHw==", - "deprecated": "docsify-server-renderer 4.x and below is no longer supported while we investigate the future of SSR and SSG for Docsify", - "license": "MIT", - "dependencies": { - "debug": "^4.3.3", - "docsify": "^4.12.4", - "node-fetch": "^2.6.6", - "resolve-pathname": "^3.0.0" - } - }, - "node_modules/marked": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz", - "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==", - "license": "MIT", - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">= 8.16.2" - } - }, - "node_modules/medium-zoom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", - "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==", - "license": "MIT" - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "license": "MIT", - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", - "license": "MIT" - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tinydate": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", - "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/tweezer.js": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/tweezer.js/-/tweezer.js-1.5.0.tgz", - "integrity": "sha512-aSiJz7rGWNAQq7hjMK9ZYDuEawXupcCWgl3woQQSoDP2Oh8O4srWb/uO1PzzHIsrPEOqrjJ2sUb9FERfzuBabQ==", - "license": "MIT" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 37bdfdbd..00000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "docsify-server-renderer": "^4.13.1" - } -} diff --git a/tools/docsgen/json.go b/tools/docsgen/json.go index 9ecfbf85..8f9c6382 100644 --- a/tools/docsgen/json.go +++ b/tools/docsgen/json.go @@ -11,7 +11,7 @@ import ( ) const ( - schemaDir = "docs/schemas" + schemaDir = "docs/public/schemas" mcpSchemaDir = "internal/mcp/resources" idBase = "https://flowexec.io/schemas" ) diff --git a/tools/docsgen/main.go b/tools/docsgen/main.go index 6ee3c01a..64d15327 100644 --- a/tools/docsgen/main.go +++ b/tools/docsgen/main.go @@ -18,11 +18,6 @@ const ( cliDir = "cli" ) -var ( - oldCliRoot = filepath.Join(DocsDir, cliDir, "flow.md") - newCliRoot = filepath.Join(DocsDir, cliDir, "README.md") -) - func main() { fmt.Println("generating CLI docs...") bkgCtx, cancelFunc := stdCtx.WithCancel(stdCtx.Background()) @@ -35,9 +30,6 @@ func main() { if err := doc.GenMarkdownTree(rootCmd, filepath.Join(rootDir(), DocsDir, cliDir)); err != nil { panic(err) } - if err := os.Rename(oldCliRoot, newCliRoot); err != nil { - panic(err) - } fmt.Println("generating markdown docs...") generateMarkdownDocs() diff --git a/tools/docsgen/markdown.go b/tools/docsgen/markdown.go index 73fbba88..47a458ea 100644 --- a/tools/docsgen/markdown.go +++ b/tools/docsgen/markdown.go @@ -52,7 +52,12 @@ func generateMarkdownDocs() { } var buf bytes.Buffer tmpl, err := template.New(page.Filename). - Funcs(template.FuncMap{"TypeStr": typeStr, "OneLine": removeNewlines, "IsRequired": requiredStr}). + Funcs(template.FuncMap{ + "TypeStr": typeStr, + "OneLine": removeNewlines, + "IsRequired": requiredStr, + "DefaultStr": defaultStr, + }). Parse(typeTemplate) if err != nil { panic(err) @@ -140,7 +145,7 @@ func typeStr(s *schema.JSONSchema) string { strings.HasPrefix(name, "[]"): return fmt.Sprintf("`%s`", name) default: - return fmt.Sprintf("[%s](#%s)", name, name) + return fmt.Sprintf("[%s](#%s)", name, strings.ToLower(name)) } } @@ -156,3 +161,14 @@ func requiredStr(list []string, key schema.FieldKey) string { func removeNewlines(s string) string { return strings.ReplaceAll(s, "\n", " ") } + +func defaultStr(val interface{}) string { + if val == nil { + return "" + } + str := fmt.Sprintf("%v", val) + // Escape HTML-like tags to prevent VitePress parsing issues + str = strings.ReplaceAll(str, "<", "\\<") + str = strings.ReplaceAll(str, ">", "\\>") + return str +} diff --git a/tools/docsgen/type.md.tmpl b/tools/docsgen/type.md.tmpl index 1a90600b..5b5239ab 100644 --- a/tools/docsgen/type.md.tmpl +++ b/tools/docsgen/type.md.tmpl @@ -1,4 +1,8 @@ -[comment]: # (Documentation autogenerated by docsgen. Do not edit directly.) +--- +title: {{ .Title }} +--- + + # {{ .Title }} @@ -18,7 +22,7 @@ | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | {{ range $key, $prop := .Properties -}} -| `{{$key.Lower}}` | {{OneLine $prop.Description}} | {{TypeStr $prop}} | {{$prop.Default}} | {{IsRequired .Required $key}} | +| `{{$key.Lower}}` | {{OneLine $prop.Description}} | {{TypeStr $prop}} | {{DefaultStr $prop.Default}} | {{IsRequired .Required $key}} | {{ end -}} {{end}} @@ -31,7 +35,7 @@ {{ if $def.Description -}}{{$def.Description}}{{- end }} {{ if $def.Type -}}**Type:** {{ TypeStr $def }}{{ end }} -{{ if $def.Default -}}**Default:** `{{$def.Default}}`{{ end }} +{{ if $def.Default -}}**Default:** `{{DefaultStr $def.Default}}`{{ end }} {{if $def.Enum -}} **Valid values:** {{ range $def.Enum -}} @@ -45,7 +49,7 @@ | Field | Description | Type | Default | Required | | ----- | ----------- | ---- | ------- | :--------: | {{ range $propKey, $prop := .Properties -}} -| `{{$propKey.Lower}}` | {{OneLine $prop.Description}} | {{TypeStr $prop}} | {{$prop.Default}} | {{IsRequired $def.Required $propKey}} | +| `{{$propKey.Lower}}` | {{OneLine $prop.Description}} | {{TypeStr $prop}} | {{DefaultStr $prop.Default}} | {{IsRequired $def.Required $propKey}} | {{ end -}} {{end}} {{end}} diff --git a/types/executable/template.gen.go b/types/executable/template.gen.go index 6d6cbb61..bc666a88 100644 --- a/types/executable/template.gen.go +++ b/types/executable/template.gen.go @@ -100,8 +100,6 @@ type Template struct { // template. // The form will be rendered first, and the user's input can be used to render the // template. - // For example, a form field with the key `name` can be used in the template as - // `{{.name}}`. // Form FormFields `json:"form,omitempty" yaml:"form,omitempty" mapstructure:"form,omitempty"` diff --git a/types/executable/template_schema.yaml b/types/executable/template_schema.yaml index 41ddb7ec..a3f59041 100644 --- a/types/executable/template_schema.yaml +++ b/types/executable/template_schema.yaml @@ -160,7 +160,6 @@ properties: description: | Form fields to be displayed to the user when generating a flow file from a template. The form will be rendered first, and the user's input can be used to render the template. - For example, a form field with the key `name` can be used in the template as `{{.name}}`. items: $ref: '#/definitions/Field' goJSONSchema: