[haik]: overhaul docs/gen_pages.py: replace hardcoded reference/guides/frontend output dirs with a dynamic per-folder section model where every top-level repo folder becomes its own sidebar section and root-level Markdown groups under a synthetic general/ section; switch file discovery from rglob to git ls-files so .gitignore exclusions (venvs, caches, build output) apply automatically; introduce a SourceRule dataclass pattern for declaring discover/dest/render per source type; add docs/.gen_manifest for precise cleanup of previously generated files instead of wiping entire directories; update docs/.gitignore to use content/* with explicit preserves; update zensical.toml comments and site_name to Open Swarm -- Developer Documentation; change content/index.md title to match; fix broken relative links in backend/CLAUDE.md, electron/CLAUDE.md, frontend/CLAUDE.md (link syntax to backtick); escape square brackets in backend/ENV_README.md; add init.py for dashboards, health, nine_router, settings backend apps

This commit is contained in:
haikdc
2026-06-16 05:59:51 -07:00
parent 019a71c26d
commit 7c66cb977d
1062 changed files with 40221 additions and 119 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ FastAPI orchestrator. Entry: `backend/main.py` (uvicorn `:8324`, REST `/api/*`,
## Coding precedences
Full precedences live in root [CLAUDE.md](../.claude/CLAUDE.md). Always: **understand the end goal before coding** (what does the user actually need?); **reuse before you write** (grep existing routes / SubApps / helpers, most needs already have one); ~300 LOC/file ceiling; downward-tree imports; comments only when necessary (the non-obvious WHY), one line each; **no em-dashes or en-dashes anywhere** (`—`, ``); say IDK to the user when you don't know, then go find out; test after meaningful changes; weigh speed, efficiency, robustness, UX, and security on every change.
Full precedences live in root `CLAUDE.md`. Always: **understand the end goal before coding** (what does the user actually need?); **reuse before you write** (grep existing routes / SubApps / helpers, most needs already have one); ~300 LOC/file ceiling; downward-tree imports; comments only when necessary (the non-obvious WHY), one line each; **no em-dashes or en-dashes anywhere** (`—`, ``); say IDK to the user when you don't know, then go find out; test after meaningful changes; weigh speed, efficiency, robustness, UX, and security on every change.
## Run / test
+1 -1
View File
@@ -120,7 +120,7 @@ Apple doesn't let you use your regular password for automated tools. You need to
### Step 1 — Turn on two-factor authentication (if you haven't already)
1. On your Mac, go to **System Settings** > **[your name]** > **Sign-In & Security** > **Two-Factor Authentication**.
1. On your Mac, go to **System Settings** > **\[your name\]** > **Sign-In & Security** > **Two-Factor Authentication**.
2. Turn it on and follow the prompts.
### Step 2 — Generate the app-specific password
View File
View File
View File
+10 -3
View File
@@ -2,8 +2,15 @@
.venv/
site/
# Manifest of files written by gen_pages.py (used for precise cleanup).
.gen_manifest
# Doc pages generated from the codebase by gen_pages.py (real files on disk now,
# since Zensical builds from disk rather than a plugin's virtual filesystem).
content/reference/
content/guides/
content/frontend/
# Sections are dynamic (one per top-level repo folder), so ignore everything
# under content/ except the hand-written page and static assets.
content/*
!content/index.md
!content/assets/
!content/stylesheets/
!content/javascripts/
+14 -7
View File
@@ -19,22 +19,29 @@ there. Output lands in `docs/site/` (git-ignored).
## What it pulls in
The site **mirrors the repo**: every top-level folder becomes a sidebar section,
populated by whatever docs live under it.
| Source | Becomes (`content/…`) |
| --- | --- |
| `backend/**/*.py` docstrings | `reference/` — one [mkdocstrings](https://mkdocstrings.github.io/) page per module. |
| Any `**/*.py` in a real Python package (e.g. `backend/`) | `<folder>/…` — one [mkdocstrings](https://mkdocstrings.github.io/) page per module, in that folder's section. |
| Every `README.md` / loose `*.md` under a folder | `<folder>/…` — copied verbatim into that folder's section. |
| Root-level Markdown (`README.md`, `GETTING_STARTED.md`, …) | `general/` — grouped under a synthetic "General" section. |
| `frontend/src` (TSDoc) | `frontend/` — [TypeDoc](https://typedoc.org/) reference (best-effort; needs Node + one-time network). |
| Every `README.md`, `implementation_plan.md`, `relevant_context.md`, `frontend/DESIGN.md` | `guides/` — copied verbatim. |
Add a module or a README anywhere and it appears on the next run — Zensical
**infers the navigation from the directory tree**, so there's no nav to maintain.
Add a module, a README, or a whole new top-level folder and it appears on the
next run — Zensical **infers the navigation from the directory tree**, so there's
no nav to maintain. API pages are only generated where a real package exists (a
complete `__init__.py` chain); non-package folders contribute their Markdown only.
## How it differs from a plain Zensical site
Zensical doesn't run MkDocs plugins (no `mkdocs-gen-files` / `mkdocs-literate-nav`).
So instead of generating pages inside the build, `gen_pages.py` runs **before** the
build as a plain script and writes **real Markdown files** into `content/reference/`,
`content/guides/`, and `content/frontend/`. Those three directories are wiped and rebuilt
each run and are git-ignored; only `content/index.md` is hand-written.
build as a plain script and writes **real Markdown files** into per-folder sections
under `content/`. Generated files are tracked in `docs/.gen_manifest` and removed
precisely on the next run; the hand-written `content/index.md` and the static
`assets/`, `stylesheets/`, and `javascripts/` folders are left untouched.
## Files
+1 -1
View File
@@ -1,4 +1,4 @@
# Product Analytics — Documentation
# Open Swarm — Developer Documentation
This site is **auto-generated from the codebase** and built with
[Zensical](https://zensical.org/). Nothing here is written by hand except this
+309 -99
View File
@@ -3,140 +3,350 @@
Zensical doesn't run MkDocs plugins (no ``mkdocs-gen-files`` / ``literate-nav``),
so instead of synthesizing virtual pages we write **real** Markdown files into
``content/`` before ``zensical build`` runs. Zensical then infers the navigation
from the directory structure, so the site still mirrors the codebase on every run.
from the directory structure, so the sidebar mirrors the repo on every run.
Pure standard library — run it with any Python ≥3.9:
python docs/gen_pages.py
Sources:
1. ``backend/**/*.py`` -> ``content/reference/...`` (``::: module`` for mkdocstrings)
2. repo Markdown -> ``content/guides/...`` (READMEs + loose docs, verbatim)
3. ``frontend/.typedoc`` -> ``content/frontend/...`` (TypeDoc output, if present)
The site structure mirrors the repository: **every top-level folder becomes a
sidebar section**, populated by whatever docs live under it. Root-level Markdown
(``README.md`` and friends) is grouped under a synthetic ``General`` section.
The three generated directories are wiped and rebuilt each run; ``content/index.md``
(the hand-written landing page) is left untouched.
Sources are declared once in ``RULES`` (see below); the same engine discovers,
filters, and writes each of them:
1. ``**/*.py`` in real packages -> ``content/<pkg-path>/...`` (``::: module`` for mkdocstrings)
2. repo Markdown -> ``content/<top-dir>/...`` (root-level .md -> ``content/general/``)
3. ``frontend/.typedoc`` -> ``content/frontend/...`` (TypeDoc output, if present)
Discovery uses ``git ls-files`` so the generator inherits ``.gitignore`` for free
— virtualenvs (``backend/tests/.runner-venv``), caches, and build output never
leak in, and there's no denylist to keep patched. The set of generated files is
recorded in ``docs/.gen_manifest`` and removed on the next run, so cleanup is
precise. Hand-written content (``content/index.md`` and the ``assets`` /
``stylesheets`` / ``javascripts`` folders) is never touched.
"""
from __future__ import annotations
import logging
import shutil
import subprocess
from collections.abc import Callable, Iterable
from dataclasses import dataclass
from pathlib import Path
HERE = Path(__file__).resolve().parent
REPO_ROOT = HERE.parent
DOCS_DIR = HERE / "content"
CONTENT = HERE / "content"
REFERENCE_DIR = DOCS_DIR / "reference"
GUIDES_DIR = DOCS_DIR / "guides"
FRONTEND_DIR = DOCS_DIR / "frontend"
# Root-level Markdown is grouped here; TypeDoc output lands under the frontend
# folder section like any other source under ``frontend/``.
GENERAL_DIR = CONTENT / "general"
FRONTEND_DIR = CONTENT / "frontend"
# Directory names we never walk into when collecting Markdown.
SKIP_DIRS = {
# Record of everything we wrote last run, so we can clean precisely. Lives
# outside ``content/`` (the Zensical docs_dir) so it's never served, and is
# git-ignored via docs/.gitignore.
MANIFEST = HERE / ".gen_manifest"
# Hand-written / static content under ``content/`` that we must never delete.
PRESERVE = {"index.md", "assets", "stylesheets", "javascripts"}
# Top-level repo folders to never turn into sections. ``docs`` is this tool and
# its own generated output — ingesting it would be circular.
EXCLUDE_TOP_DIRS = {"docs"}
# Module path segments that never belong in the public API reference.
EXCLUDE_SEGMENTS = {"tests", "migrations", "webapp_template"}
# Only used by the rglob fallback when ``git ls-files`` is unavailable (e.g. a
# source tarball). Git's own ignore rules cover this and more in the normal path.
_FALLBACK_SKIP = {
".git", ".venv", "venv", "node_modules", "__pycache__", "site",
".pytest_cache", ".mypy_cache", "dist", "build", ".typedoc",
".runner-venv", ".ruff_cache",
}
log = logging.getLogger("gen_pages")
def _skipped(path: Path) -> bool:
return any(part in SKIP_DIRS for part in path.parts)
# --- File discovery -------------------------------------------------------
def tracked_files(root: Path, patterns: list[str]) -> list[Path]:
"""Return repository files matching ``patterns`` (git pathspecs).
Uses ``git ls-files`` so ignored paths (venvs, caches, build output) are
excluded for free. Falls back to a filtered ``rglob`` — with a loud warning
— when ``root`` isn't a git checkout, since that path can surface files git
would have hidden.
"""
try:
result = subprocess.run(
["git", "ls-files", "-z", "--", *patterns],
cwd=root,
capture_output=True,
text=True,
check=True,
)
except (FileNotFoundError, subprocess.CalledProcessError) as exc:
log.warning(
"git ls-files unavailable (%s); falling back to rglob — output may "
"include files git would ignore", exc,
)
return _rglob_fallback(root, patterns)
return [root / line for line in result.stdout.split("\0") if line]
def _rglob_fallback(root: Path, patterns: list[str]) -> list[Path]:
results: list[Path] = []
for pattern in patterns:
base, _, glob = pattern.rpartition("/")
start = root / base if base else root
suffix = glob.replace("*", "")
if not start.is_dir():
continue
for path in start.rglob(f"*{suffix}"):
if path.is_file() and not _is_skipped(path.relative_to(root)):
results.append(path)
return results
def _is_skipped(rel: Path) -> bool:
return any(part in _FALLBACK_SKIP for part in rel.parts)
# --- Filters / path mapping -----------------------------------------------
def is_documentable_top_dir(rel: Path) -> bool:
"""Whether ``rel`` lives under a top-level folder we turn into a section."""
return bool(rel.parts) and rel.parts[0] not in EXCLUDE_TOP_DIRS
def is_reference_module(rel: Path) -> bool:
"""Whether a ``*.py`` file should become an API reference page.
Excludes tests, migrations, and the app-builder scaffolding template, and
requires every path segment to be a valid (non-private) module name — which
also rejects junk like ``.runner-venv`` dotted paths in the fallback case.
Importability (a complete ``__init__.py`` chain) is checked separately.
"""
parts = rel.with_suffix("").parts
if not is_documentable_top_dir(rel):
return False
if any(seg in EXCLUDE_SEGMENTS for seg in parts):
return False
for seg in parts:
if seg == "__init__":
continue
if not seg.isidentifier():
return False
if seg.startswith("_") and not seg.startswith("__"):
return False
return True
def is_importable(py: Path) -> bool:
"""Whether ``py``'s package chain is complete enough for Griffe to collect it.
mkdocstrings resolves a dotted identifier (``backend.apps.settings.settings``)
by walking real packages, so every ancestor directory must contain an
``__init__.py``. Emitting a page for a module under an ``__init__``-less dir
(a namespace package) makes ``zensical build`` fail hard with
``Could not collect '<module>'``, so we skip those instead.
"""
dir_parts = py.relative_to(REPO_ROOT).parts[:-1]
return all(
(REPO_ROOT.joinpath(*dir_parts[:i]) / "__init__.py").exists()
for i in range(1, len(dir_parts) + 1)
)
def _is_package_dir(rel: Path) -> bool:
"""Whether ``rel``'s top-level folder is itself an importable package."""
return bool(rel.parts) and (REPO_ROOT / rel.parts[0] / "__init__.py").exists()
def _module_parts(py: Path) -> list[str]:
parts = list(py.relative_to(REPO_ROOT).with_suffix("").parts)
if parts and parts[-1] == "__init__":
parts = parts[:-1]
return parts
# --- Source rules ---------------------------------------------------------
@dataclass(frozen=True)
class SourceRule:
"""One declarative source: discover files, map each to a dest, render text."""
name: str
discover: Callable[[], Iterable[Path]]
dest: Callable[[Path], Path]
render: Callable[[Path], str]
def _discover_reference() -> Iterable[Path]:
skipped = 0
for py in tracked_files(REPO_ROOT, ["*.py"]):
rel = py.relative_to(REPO_ROOT)
if py.suffix != ".py" or not is_reference_module(rel):
continue
if not is_importable(py):
# Only flag the gap for folders that are otherwise API packages
# (a real misconfig, like a missing __init__.py in backend/). Plain
# tooling dirs that aren't packages at all are skipped silently.
if _is_package_dir(rel):
skipped += 1
log.warning(
"skipping %s: no __init__.py in its package chain "
"(mkdocstrings can't collect it)", rel,
)
continue
yield py
if skipped:
log.warning("skipped %d reference module(s) missing an __init__.py", skipped)
def _dest_reference(py: Path) -> Path:
# Mirror the repo path under content/, so the top-level package becomes its
# own sidebar section (e.g. backend/apps/foo.py -> content/backend/apps/foo.md).
parts = _module_parts(py)
if py.name == "__init__.py":
# Package → section/sub-section landing page (works with navigation.indexes).
return CONTENT.joinpath(*parts, "index.md")
return CONTENT.joinpath(*parts).with_suffix(".md")
def _render_reference(py: Path) -> str:
# No hand-written H1: mkdocstrings renders the heading, and the nav label is
# derived from the file/dir name (clean, short labels).
return f"::: {'.'.join(_module_parts(py))}\n"
def _discover_guides() -> Iterable[Path]:
for md in tracked_files(REPO_ROOT, ["*.md"]):
if md.suffix != ".md":
continue
rel = md.relative_to(REPO_ROOT)
# Nested under an excluded top dir (our own docs/ tree) → skip. Root-level
# Markdown has its filename as parts[0], so it's never excluded here.
if rel.parts[0] in EXCLUDE_TOP_DIRS:
continue
# Skip app-builder scaffolding — its docs describe generated apps, not
# this project. (Test/migration READMEs are still legitimate guides.)
if "webapp_template" in rel.parts:
continue
yield md
def _dest_guides(md: Path) -> Path:
rel = md.relative_to(REPO_ROOT)
if len(rel.parts) == 1:
# Root-level Markdown is grouped under the synthetic "General" section.
if rel.name == "README.md":
return GENERAL_DIR / "index.md"
return GENERAL_DIR / rel.name
# Otherwise mirror the repo path so each doc lands in its folder's section.
return CONTENT / rel
def _discover_frontend() -> Iterable[Path]:
typedoc = REPO_ROOT / "frontend" / ".typedoc"
if not typedoc.is_dir():
return
# TypeDoc output is untracked (regenerated by run.sh), so git can't see it;
# walk it directly.
for md in sorted(typedoc.rglob("*.md")):
yield md
def _dest_frontend(md: Path) -> Path:
typedoc = REPO_ROOT / "frontend" / ".typedoc"
return FRONTEND_DIR / md.relative_to(typedoc)
def _read_text(path: Path) -> str:
return path.read_text(encoding="utf-8")
RULES: list[SourceRule] = [
SourceRule("reference", _discover_reference, _dest_reference, _render_reference),
SourceRule("guides", _discover_guides, _dest_guides, _read_text),
SourceRule("frontend", _discover_frontend, _dest_frontend, _read_text),
]
# --- Engine ---------------------------------------------------------------
def _clean_previous() -> None:
"""Remove the files generated last run, per the manifest.
Falls back to removing every generated section under ``content/`` (anything
that isn't hand-written/static) when no manifest exists yet — e.g. the first
run after adopting the manifest, or a manually deleted manifest.
"""
if MANIFEST.exists():
for line in MANIFEST.read_text(encoding="utf-8").splitlines():
line = line.strip()
if not line:
continue
path = HERE / line
if path.is_file():
path.unlink()
MANIFEST.unlink()
elif CONTENT.is_dir():
for child in CONTENT.iterdir():
if child.name in PRESERVE:
continue
if child.is_dir():
shutil.rmtree(child)
elif child.is_file():
child.unlink()
_prune_empty_dirs(CONTENT)
def _prune_empty_dirs(root: Path) -> None:
if not root.is_dir():
return
# Deepest-first so a dir emptied by pruning its children is itself removed.
for sub in sorted(root.rglob("*"), key=lambda p: len(p.parts), reverse=True):
if sub.is_dir() and not any(sub.iterdir()):
sub.rmdir()
def _write(dest: Path, text: str) -> None:
dest.parent.mkdir(parents=True, exist_ok=True)
# Skip the rewrite when content is unchanged so ``zensical serve`` doesn't
# see a spurious modification (faster, quieter live reloads).
if dest.is_file() and dest.read_text(encoding="utf-8") == text:
return
dest.write_text(text, encoding="utf-8")
def clean() -> None:
for d in (REFERENCE_DIR, GUIDES_DIR, FRONTEND_DIR):
if d.exists():
shutil.rmtree(d)
# --- 1. Backend Python API -> mkdocstrings pages --------------------------
def gen_backend_reference() -> int:
backend = REPO_ROOT / "backend"
if not backend.is_dir():
return 0
def _run_rule(rule: SourceRule, written: set[Path]) -> int:
count = 0
for py in sorted(backend.rglob("*.py")):
if _skipped(py):
continue
parts = list(py.relative_to(REPO_ROOT).with_suffix("").parts) # backend, apps, ...
is_package = parts[-1] == "__init__"
if is_package:
parts = parts[:-1]
module = ".".join(parts) # e.g. backend.apps.export.snapshot
rel = parts[1:] # drop the leading "backend" for a flatter nav
if is_package:
# Package → section landing page (works with navigation.indexes).
dest = REFERENCE_DIR.joinpath(*rel, "index.md") if rel else REFERENCE_DIR / "index.md"
else:
dest = REFERENCE_DIR.joinpath(*rel).with_suffix(".md")
# No hand-written H1: mkdocstrings renders the heading, and the nav label
# is derived from the file/dir name (clean, short labels).
_write(dest, f"::: {module}\n")
count += 1
return count
# --- 2. Repo Markdown (READMEs + loose docs) ------------------------------
def gen_guides() -> int:
curated = [
REPO_ROOT / "README.md",
REPO_ROOT / "implementation_plan.md",
REPO_ROOT / "relevant_context.md",
REPO_ROOT / "frontend" / "DESIGN.md",
]
nested_readmes = sorted(REPO_ROOT.rglob("README.md"))
seen: set[Path] = set()
count = 0
for md in [*curated, *nested_readmes]:
if not md.is_file() or md in seen or _skipped(md):
continue
if DOCS_DIR in md.parents: # never re-ingest our own generated tree
continue
seen.add(md)
rel = md.relative_to(REPO_ROOT)
# Map the project root README to the Guides landing page.
if rel == Path("README.md"):
dest = GUIDES_DIR / "index.md"
else:
dest = GUIDES_DIR / rel
_write(dest, md.read_text(encoding="utf-8"))
count += 1
return count
# --- 3. Frontend TypeDoc output -------------------------------------------
def gen_frontend() -> int:
typedoc = REPO_ROOT / "frontend" / ".typedoc"
if not typedoc.is_dir():
return 0
count = 0
for md in sorted(typedoc.rglob("*.md")):
rel = md.relative_to(typedoc)
if any(p in SKIP_DIRS for p in rel.parts):
continue
_write(FRONTEND_DIR / rel, md.read_text(encoding="utf-8"))
for src in rule.discover():
dest = rule.dest(src)
_write(dest, rule.render(src))
written.add(dest)
count += 1
return count
def main() -> int:
clean()
n_api = gen_backend_reference()
n_guides = gen_guides()
n_front = gen_frontend()
print(f"gen_pages: {n_api} API pages, {n_guides} guides, {n_front} frontend pages "
f"written under {DOCS_DIR}")
logging.basicConfig(level=logging.INFO, format="%(name)s: %(message)s")
_clean_previous()
written: set[Path] = set()
counts = {rule.name: _run_rule(rule, written) for rule in RULES}
manifest_lines = sorted(str(p.relative_to(HERE)) for p in written)
MANIFEST.write_text("\n".join(manifest_lines) + "\n", encoding="utf-8")
summary = ", ".join(f"{n} {name}" for name, n in counts.items())
log.info("wrote %s pages under %s", summary, CONTENT)
return 0
+7 -5
View File
@@ -4,13 +4,15 @@
#
# Navigation is INFERRED from the directory tree under content/ (Zensical doesn't
# run the mkdocs-literate-nav plugin). gen_pages.py writes that tree on each run,
# so the nav mirrors the codebase automatically — top-level dirs become sections:
# content/reference/ -> "reference" (backend API, from docstrings via mkdocstrings)
# content/guides/ -> "guides" (every README + loose Markdown doc)
# content/frontend/ -> "frontend" (TypeDoc reference, when present)
# so the nav mirrors the codebase automatically — every top-level repo folder
# becomes a sidebar section:
# content/<folder>/ -> "<folder>" (its Markdown + mkdocstrings API pages for
# any real Python package, e.g. backend/, frontend/, linter/)
# content/general/ -> "general" (root-level Markdown: README, GETTING_STARTED, ...)
# content/frontend/ -> also receives the TypeDoc reference, when present
[project]
site_name = "Open Swarm Analytics — Docs"
site_name = "Open Swarm — Developer Documentation"
site_description = "Auto-generated docs sourced from docstrings, READMEs, and the frontend."
docs_dir = "content"
site_dir = "site"
+1 -1
View File
@@ -4,7 +4,7 @@ Electron 40.x (CastLabs DRM build) desktop shell + auto-updater via GitHub Relea
## Coding precedences
Full precedences live in root [CLAUDE.md](../.claude/CLAUDE.md). Always: **understand the end goal before coding** (what does the user actually need?); **reuse before you write** (grep existing IPC handlers / helpers in `main.js`, most needs already have one); ~300 LOC/file ceiling; downward-tree imports; comments only when necessary (the non-obvious WHY), one line each; **no em-dashes or en-dashes anywhere** (`—`, ``); say IDK to the user when you don't know, then go find out; test the packaged build path after meaningful changes (not just dev); weigh speed (startup time), efficiency (memory), robustness (auto-updater, OAuth windows), UX, and security (signed binaries, no plaintext secrets) on every change.
Full precedences live in root `CLAUDE.md`. Always: **understand the end goal before coding** (what does the user actually need?); **reuse before you write** (grep existing IPC handlers / helpers in `main.js`, most needs already have one); ~300 LOC/file ceiling; downward-tree imports; comments only when necessary (the non-obvious WHY), one line each; **no em-dashes or en-dashes anywhere** (`—`, ``); say IDK to the user when you don't know, then go find out; test the packaged build path after meaningful changes (not just dev); weigh speed (startup time), efficiency (memory), robustness (auto-updater, OAuth windows), UX, and security (signed binaries, no plaintext secrets) on every change.
## Build / release
+274
View File
@@ -0,0 +1,274 @@
**open-swarm**
***
# open-swarm
## Modules
- [app/components/editor/CommandPicker](app/components/editor/CommandPicker/README.md)
- [app/components/editor/DirectoryBrowser](app/components/editor/DirectoryBrowser/README.md)
- [app/components/editor/ElementSelectionContext](app/components/editor/ElementSelectionContext/README.md)
- [app/components/editor/richEditorUtils](app/components/editor/richEditorUtils/README.md)
- [app/components/editor/RichPromptEditor](app/components/editor/RichPromptEditor/README.md)
- [app/components/editor/SelectionOverlay](app/components/editor/SelectionOverlay/README.md)
- [app/components/editor/useDomElementSelector](app/components/editor/useDomElementSelector/README.md)
- [app/components/feedback/Animated](app/components/feedback/Animated/README.md)
- [app/components/feedback/ErrorBoundary](app/components/feedback/ErrorBoundary/README.md)
- [app/components/feedback/ErrorSlime](app/components/feedback/ErrorSlime/README.md)
- [app/components/feedback/Loading](app/components/feedback/Loading/README.md)
- [app/components/feedback/PixelBlast](app/components/feedback/PixelBlast/README.md)
- [app/components/Layout/animatedIcons](app/components/Layout/animatedIcons/README.md)
- [app/components/Layout/AppShell](app/components/Layout/AppShell/README.md)
- [app/components/Layout/DashboardHost](app/components/Layout/DashboardHost/README.md)
- [app/components/Onboarding](app/components/Onboarding/README.md)
- [app/components/Onboarding/\_motionWin](app/components/Onboarding/_motionWin/README.md)
- [app/components/Onboarding/ac/ACGestures](app/components/Onboarding/ac/ACGestures/README.md)
- [app/components/Onboarding/ac/ACMultiChoice](app/components/Onboarding/ac/ACMultiChoice/README.md)
- [app/components/Onboarding/ac/ACPopup](app/components/Onboarding/ac/ACPopup/README.md)
- [app/components/Onboarding/ac/acRuntime](app/components/Onboarding/ac/acRuntime/README.md)
- [app/components/Onboarding/ac/ACTypewriter](app/components/Onboarding/ac/ACTypewriter/README.md)
- [app/components/Onboarding/ac/AgenticCursor](app/components/Onboarding/ac/AgenticCursor/README.md)
- [app/components/Onboarding/ac/cursorStore](app/components/Onboarding/ac/cursorStore/README.md)
- [app/components/Onboarding/eventBus](app/components/Onboarding/eventBus/README.md)
- [app/components/Onboarding/hooks/useOnboardingProgress](app/components/Onboarding/hooks/useOnboardingProgress/README.md)
- [app/components/Onboarding/OnboardingDirector](app/components/Onboarding/OnboardingDirector/README.md)
- [app/components/Onboarding/OnboardingPanel](app/components/Onboarding/OnboardingPanel/README.md)
- [app/components/Onboarding/OnboardingRoadmapModal](app/components/Onboarding/OnboardingRoadmapModal/README.md)
- [app/components/Onboarding/OnboardingRoot](app/components/Onboarding/OnboardingRoot/README.md)
- [app/components/Onboarding/selectors](app/components/Onboarding/selectors/README.md)
- [app/components/Onboarding/steps](app/components/Onboarding/steps/README.md)
- [app/components/Onboarding/steps/skipPredicates](app/components/Onboarding/steps/skipPredicates/README.md)
- [app/components/Onboarding/steps/step01\_connectModel](app/components/Onboarding/steps/step01_connectModel/README.md)
- [app/components/Onboarding/steps/step02\_enableActions](app/components/Onboarding/steps/step02_enableActions/README.md)
- [app/components/Onboarding/steps/step03\_launchAgent](app/components/Onboarding/steps/step03_launchAgent/README.md)
- [app/components/Onboarding/steps/step04\_useBrowser](app/components/Onboarding/steps/step04_useBrowser/README.md)
- [app/components/Onboarding/steps/step05\_agentUseBrowser](app/components/Onboarding/steps/step05_agentUseBrowser/README.md)
- [app/components/Onboarding/steps/step06\_agentControlAgents](app/components/Onboarding/steps/step06_agentControlAgents/README.md)
- [app/components/Onboarding/steps/step07\_installSkill](app/components/Onboarding/steps/step07_installSkill/README.md)
- [app/components/Onboarding/steps/step08\_makeApp](app/components/Onboarding/steps/step08_makeApp/README.md)
- [app/components/Onboarding/steps/stepUnlock](app/components/Onboarding/steps/stepUnlock/README.md)
- [app/components/Onboarding/steps/types](app/components/Onboarding/steps/types/README.md)
- [app/components/Onboarding/telemetry](app/components/Onboarding/telemetry/README.md)
- [app/components/overlays/DynamicIsland](app/components/overlays/DynamicIsland/README.md)
- [app/components/overlays/GlobalSearchPalette](app/components/overlays/GlobalSearchPalette/README.md)
- [app/components/overlays/PlanPicker](app/components/overlays/PlanPicker/README.md)
- [app/components/overlays/PlanPickerModal](app/components/overlays/PlanPickerModal/README.md)
- [app/components/overlays/SignInDialog](app/components/overlays/SignInDialog/README.md)
- [app/components/overlays/TrustedFilePatterns](app/components/overlays/TrustedFilePatterns/README.md)
- [app/Main](app/Main/README.md)
- [app/pages/AgentChat/AgentChat](app/pages/AgentChat/AgentChat/README.md)
- [app/pages/AgentChat/bubbles/CompactionMarker](app/pages/AgentChat/bubbles/CompactionMarker/README.md)
- [app/pages/AgentChat/bubbles/markdownMeasure](app/pages/AgentChat/bubbles/markdownMeasure/README.md)
- [app/pages/AgentChat/bubbles/MessageBubble](app/pages/AgentChat/bubbles/MessageBubble/README.md)
- [app/pages/AgentChat/bubbles/StreamingBubble](app/pages/AgentChat/bubbles/StreamingBubble/README.md)
- [app/pages/AgentChat/bubbles/useSmoothText](app/pages/AgentChat/bubbles/useSmoothText/README.md)
- [app/pages/AgentChat/bubbles/WindowedMarkdown](app/pages/AgentChat/bubbles/WindowedMarkdown/README.md)
- [app/pages/AgentChat/ChatInput](app/pages/AgentChat/ChatInput/README.md)
- [app/pages/AgentChat/ChatInput/helpers](app/pages/AgentChat/ChatInput/helpers/README.md)
- [app/pages/AgentChat/ChatInput/hooks/draftStore](app/pages/AgentChat/ChatInput/hooks/draftStore/README.md)
- [app/pages/AgentChat/ChatInput/hooks/pasteCards](app/pages/AgentChat/ChatInput/hooks/pasteCards/README.md)
- [app/pages/AgentChat/ChatInput/hooks/slashCommands](app/pages/AgentChat/ChatInput/hooks/slashCommands/README.md)
- [app/pages/AgentChat/ChatInput/hooks/useChatInputModel](app/pages/AgentChat/ChatInput/hooks/useChatInputModel/README.md)
- [app/pages/AgentChat/ChatInput/hooks/useContextFiles](app/pages/AgentChat/ChatInput/hooks/useContextFiles/README.md)
- [app/pages/AgentChat/ChatInput/hooks/useEditorHandlers](app/pages/AgentChat/ChatInput/hooks/useEditorHandlers/README.md)
- [app/pages/AgentChat/ChatInput/hooks/useImageAttachments](app/pages/AgentChat/ChatInput/hooks/useImageAttachments/README.md)
- [app/pages/AgentChat/ChatInput/hooks/useModelPicker](app/pages/AgentChat/ChatInput/hooks/useModelPicker/README.md)
- [app/pages/AgentChat/ChatInput/modeConfig](app/pages/AgentChat/ChatInput/modeConfig/README.md)
- [app/pages/AgentChat/ChatInput/model-picker/modelPicker](app/pages/AgentChat/ChatInput/model-picker/modelPicker/README.md)
- [app/pages/AgentChat/ChatInput/model-picker/ModelPickerFooter](app/pages/AgentChat/ChatInput/model-picker/ModelPickerFooter/README.md)
- [app/pages/AgentChat/ChatInput/model-picker/ModelPickerHeader](app/pages/AgentChat/ChatInput/model-picker/ModelPickerHeader/README.md)
- [app/pages/AgentChat/ChatInput/model-picker/ModelPickerList](app/pages/AgentChat/ChatInput/model-picker/ModelPickerList/README.md)
- [app/pages/AgentChat/ChatInput/model-picker/ModelPickerMenu](app/pages/AgentChat/ChatInput/model-picker/ModelPickerMenu/README.md)
- [app/pages/AgentChat/ChatInput/model-picker/ModelPickerRecents](app/pages/AgentChat/ChatInput/model-picker/ModelPickerRecents/README.md)
- [app/pages/AgentChat/ChatInput/model-picker/modelTooltip](app/pages/AgentChat/ChatInput/model-picker/modelTooltip/README.md)
- [app/pages/AgentChat/ChatInput/sendHelpers](app/pages/AgentChat/ChatInput/sendHelpers/README.md)
- [app/pages/AgentChat/ChatInput/toolbar/ChatInputToolbar](app/pages/AgentChat/ChatInput/toolbar/ChatInputToolbar/README.md)
- [app/pages/AgentChat/ChatInput/toolbar/ContextRing](app/pages/AgentChat/ChatInput/toolbar/ContextRing/README.md)
- [app/pages/AgentChat/ChatInput/toolbar/ModeControl](app/pages/AgentChat/ChatInput/toolbar/ModeControl/README.md)
- [app/pages/AgentChat/ChatInput/toolbar/ThinkingLevelControl](app/pages/AgentChat/ChatInput/toolbar/ThinkingLevelControl/README.md)
- [app/pages/AgentChat/ChatInput/toolbar/ToolbarActions](app/pages/AgentChat/ChatInput/toolbar/ToolbarActions/README.md)
- [app/pages/AgentChat/ChatInput/types](app/pages/AgentChat/ChatInput/types/README.md)
- [app/pages/AgentChat/ChatInput/view/AttachmentChips](app/pages/AgentChat/ChatInput/view/AttachmentChips/README.md)
- [app/pages/AgentChat/ChatInput/view/ChatInputOverlays](app/pages/AgentChat/ChatInput/view/ChatInputOverlays/README.md)
- [app/pages/AgentChat/ChatInput/view/ChatInputView](app/pages/AgentChat/ChatInput/view/ChatInputView/README.md)
- [app/pages/AgentChat/ChatInput/view/EditorSurface](app/pages/AgentChat/ChatInput/view/EditorSurface/README.md)
- [app/pages/AgentChat/ChatInput/view/SendBlockBanner](app/pages/AgentChat/ChatInput/view/SendBlockBanner/README.md)
- [app/pages/AgentChat/mcp-cards/CalendarCard](app/pages/AgentChat/mcp-cards/CalendarCard/README.md)
- [app/pages/AgentChat/mcp-cards/cardColors](app/pages/AgentChat/mcp-cards/cardColors/README.md)
- [app/pages/AgentChat/mcp-cards/DriveCard](app/pages/AgentChat/mcp-cards/DriveCard/README.md)
- [app/pages/AgentChat/mcp-cards/GenericMcpCard](app/pages/AgentChat/mcp-cards/GenericMcpCard/README.md)
- [app/pages/AgentChat/mcp-cards/GmailCard](app/pages/AgentChat/mcp-cards/GmailCard/README.md)
- [app/pages/AgentChat/mcp-cards/GoogleServiceIcon](app/pages/AgentChat/mcp-cards/GoogleServiceIcon/README.md)
- [app/pages/AgentChat/mcp-cards/mcpCardHelpers](app/pages/AgentChat/mcp-cards/mcpCardHelpers/README.md)
- [app/pages/AgentChat/mcp-cards/McpResultCard](app/pages/AgentChat/mcp-cards/McpResultCard/README.md)
- [app/pages/AgentChat/parsing/agentToolParsing](app/pages/AgentChat/parsing/agentToolParsing/README.md)
- [app/pages/AgentChat/parsing/toolBubbleChrome](app/pages/AgentChat/parsing/toolBubbleChrome/README.md)
- [app/pages/AgentChat/parsing/toolColorize](app/pages/AgentChat/parsing/toolColorize/README.md)
- [app/pages/AgentChat/parsing/toolLabels](app/pages/AgentChat/parsing/toolLabels/README.md)
- [app/pages/AgentChat/parsing/toolResultParsing](app/pages/AgentChat/parsing/toolResultParsing/README.md)
- [app/pages/AgentChat/shell/ApprovalBar](app/pages/AgentChat/shell/ApprovalBar/README.md)
- [app/pages/AgentChat/shell/BranchNavigator](app/pages/AgentChat/shell/BranchNavigator/README.md)
- [app/pages/AgentChat/shell/BrowserAgentInlineFeed](app/pages/AgentChat/shell/BrowserAgentInlineFeed/README.md)
- [app/pages/AgentChat/shell/ContextDrawer](app/pages/AgentChat/shell/ContextDrawer/README.md)
- [app/pages/AgentChat/shell/FeedbackDialog](app/pages/AgentChat/shell/FeedbackDialog/README.md)
- [app/pages/AgentChat/shell/MessageActionBar](app/pages/AgentChat/shell/MessageActionBar/README.md)
- [app/pages/AgentChat/tool-bubbles/AgentResponseBody](app/pages/AgentChat/tool-bubbles/AgentResponseBody/README.md)
- [app/pages/AgentChat/tool-bubbles/CompactMcpBubble](app/pages/AgentChat/tool-bubbles/CompactMcpBubble/README.md)
- [app/pages/AgentChat/tool-bubbles/CreateAgentBubble](app/pages/AgentChat/tool-bubbles/CreateAgentBubble/README.md)
- [app/pages/AgentChat/tool-bubbles/DefaultToolBubble](app/pages/AgentChat/tool-bubbles/DefaultToolBubble/README.md)
- [app/pages/AgentChat/tool-bubbles/InvokeAgentBubble](app/pages/AgentChat/tool-bubbles/InvokeAgentBubble/README.md)
- [app/pages/AgentChat/tool-bubbles/ToolCallBubble](app/pages/AgentChat/tool-bubbles/ToolCallBubble/README.md)
- [app/pages/AgentChat/tool-bubbles/ToolGroupBubble](app/pages/AgentChat/tool-bubbles/ToolGroupBubble/README.md)
- [app/pages/AgentChat/tool-bubbles/useMountReveal](app/pages/AgentChat/tool-bubbles/useMountReveal/README.md)
- [app/pages/Analytics/Analytics](app/pages/Analytics/Analytics/README.md)
- [app/pages/Analytics/PixelChart](app/pages/Analytics/PixelChart/README.md)
- [app/pages/Commands/Commands](app/pages/Commands/Commands/README.md)
- [app/pages/Customization/Customization](app/pages/Customization/Customization/README.md)
- [app/pages/Dashboard/canvas/DashboardCanvas](app/pages/Dashboard/canvas/DashboardCanvas/README.md)
- [app/pages/Dashboard/canvas/DashboardCardLayer](app/pages/Dashboard/canvas/DashboardCardLayer/README.md)
- [app/pages/Dashboard/canvas/DashboardEmptyState](app/pages/Dashboard/canvas/DashboardEmptyState/README.md)
- [app/pages/Dashboard/canvas/DashboardHeader](app/pages/Dashboard/canvas/DashboardHeader/README.md)
- [app/pages/Dashboard/canvas/DashboardOverlays](app/pages/Dashboard/canvas/DashboardOverlays/README.md)
- [app/pages/Dashboard/canvas/TetherLayer](app/pages/Dashboard/canvas/TetherLayer/README.md)
- [app/pages/Dashboard/cards/AgentCard](app/pages/Dashboard/cards/AgentCard/README.md)
- [app/pages/Dashboard/cards/BrowserAgentOverlay](app/pages/Dashboard/cards/BrowserAgentOverlay/README.md)
- [app/pages/Dashboard/cards/BrowserCard](app/pages/Dashboard/cards/BrowserCard/README.md)
- [app/pages/Dashboard/cards/BrowserReplayOverlay](app/pages/Dashboard/cards/BrowserReplayOverlay/README.md)
- [app/pages/Dashboard/cards/DashboardViewCard](app/pages/Dashboard/cards/DashboardViewCard/README.md)
- [app/pages/Dashboard/cards/NoteCard](app/pages/Dashboard/cards/NoteCard/README.md)
- [app/pages/Dashboard/ChatBubbleTeardrop](app/pages/Dashboard/ChatBubbleTeardrop/README.md)
- [app/pages/Dashboard/controls/CanvasControls](app/pages/Dashboard/controls/CanvasControls/README.md)
- [app/pages/Dashboard/controls/CardSearchPalette](app/pages/Dashboard/controls/CardSearchPalette/README.md)
- [app/pages/Dashboard/controls/CloseAgentDialog](app/pages/Dashboard/controls/CloseAgentDialog/README.md)
- [app/pages/Dashboard/controls/DirectionHints](app/pages/Dashboard/controls/DirectionHints/README.md)
- [app/pages/Dashboard/controls/Minimap](app/pages/Dashboard/controls/Minimap/README.md)
- [app/pages/Dashboard/Dashboard](app/pages/Dashboard/Dashboard/README.md)
- [app/pages/Dashboard/DashboardToolbar](app/pages/Dashboard/DashboardToolbar/README.md)
- [app/pages/Dashboard/geometry/captureDashboardThumbnail](app/pages/Dashboard/geometry/captureDashboardThumbnail/README.md)
- [app/pages/Dashboard/geometry/contentBounds](app/pages/Dashboard/geometry/contentBounds/README.md)
- [app/pages/Dashboard/geometry/dashboardTethers](app/pages/Dashboard/geometry/dashboardTethers/README.md)
- [app/pages/Dashboard/geometry/getCardRect](app/pages/Dashboard/geometry/getCardRect/README.md)
- [app/pages/Dashboard/hooks/interaction/useArrowNav](app/pages/Dashboard/hooks/interaction/useArrowNav/README.md)
- [app/pages/Dashboard/hooks/interaction/useCanvasControls](app/pages/Dashboard/hooks/interaction/useCanvasControls/README.md)
- [app/pages/Dashboard/hooks/interaction/useCardDrag](app/pages/Dashboard/hooks/interaction/useCardDrag/README.md)
- [app/pages/Dashboard/hooks/interaction/useDashboardClipboard](app/pages/Dashboard/hooks/interaction/useDashboardClipboard/README.md)
- [app/pages/Dashboard/hooks/interaction/useDashboardInteractions](app/pages/Dashboard/hooks/interaction/useDashboardInteractions/README.md)
- [app/pages/Dashboard/hooks/interaction/useDashboardShortcuts](app/pages/Dashboard/hooks/interaction/useDashboardShortcuts/README.md)
- [app/pages/Dashboard/hooks/interaction/useOverlayScrollPassthrough](app/pages/Dashboard/hooks/interaction/useOverlayScrollPassthrough/README.md)
- [app/pages/Dashboard/hooks/interaction/useWebviewSuspend](app/pages/Dashboard/hooks/interaction/useWebviewSuspend/README.md)
- [app/pages/Dashboard/hooks/lifecycle/useAgentSpawn](app/pages/Dashboard/hooks/lifecycle/useAgentSpawn/README.md)
- [app/pages/Dashboard/hooks/lifecycle/useDashboardCardActions](app/pages/Dashboard/hooks/lifecycle/useDashboardCardActions/README.md)
- [app/pages/Dashboard/hooks/lifecycle/useDashboardLifecycle](app/pages/Dashboard/hooks/lifecycle/useDashboardLifecycle/README.md)
- [app/pages/Dashboard/hooks/lifecycle/useSiblingRestack](app/pages/Dashboard/hooks/lifecycle/useSiblingRestack/README.md)
- [app/pages/Dashboard/hooks/lifecycle/useSubAgentLifecycle](app/pages/Dashboard/hooks/lifecycle/useSubAgentLifecycle/README.md)
- [app/pages/Dashboard/hooks/state/useDashboardController](app/pages/Dashboard/hooks/state/useDashboardController/README.md)
- [app/pages/Dashboard/hooks/state/useDashboardSelection](app/pages/Dashboard/hooks/state/useDashboardSelection/README.md)
- [app/pages/Dashboard/hooks/state/useDashboardSelectors](app/pages/Dashboard/hooks/state/useDashboardSelectors/README.md)
- [app/pages/Dashboard/hooks/state/useDashboardThumbnail](app/pages/Dashboard/hooks/state/useDashboardThumbnail/README.md)
- [app/pages/Dashboard/hooks/state/useDashboardUiState](app/pages/Dashboard/hooks/state/useDashboardUiState/README.md)
- [app/pages/Dashboard/hooks/state/useLayoutSave](app/pages/Dashboard/hooks/state/useLayoutSave/README.md)
- [app/pages/DashboardSelection/DashboardSelection](app/pages/DashboardSelection/DashboardSelection/README.md)
- [app/pages/Modes/Modes](app/pages/Modes/Modes/README.md)
- [app/pages/Settings/sections/general/GeneralAdvanced](app/pages/Settings/sections/general/GeneralAdvanced/README.md)
- [app/pages/Settings/sections/general/GeneralAgentDefaults](app/pages/Settings/sections/general/GeneralAgentDefaults/README.md)
- [app/pages/Settings/sections/general/GeneralInterface](app/pages/Settings/sections/general/GeneralInterface/README.md)
- [app/pages/Settings/sections/general/GeneralTab](app/pages/Settings/sections/general/GeneralTab/README.md)
- [app/pages/Settings/sections/general/SoftwareUpdateRow](app/pages/Settings/sections/general/SoftwareUpdateRow/README.md)
- [app/pages/Settings/sections/models/ApiKeyCard](app/pages/Settings/sections/models/ApiKeyCard/README.md)
- [app/pages/Settings/sections/models/CustomProvidersEditor](app/pages/Settings/sections/models/CustomProvidersEditor/README.md)
- [app/pages/Settings/sections/models/ModelsTab](app/pages/Settings/sections/models/ModelsTab/README.md)
- [app/pages/Settings/sections/SettingsHeader](app/pages/Settings/sections/SettingsHeader/README.md)
- [app/pages/Settings/sections/settingsStyles](app/pages/Settings/sections/settingsStyles/README.md)
- [app/pages/Settings/sections/subscription/AccountCard](app/pages/Settings/sections/subscription/AccountCard/README.md)
- [app/pages/Settings/sections/subscription/OpenSwarmProCard](app/pages/Settings/sections/subscription/OpenSwarmProCard/README.md)
- [app/pages/Settings/sections/subscription/SubscriptionCard](app/pages/Settings/sections/subscription/SubscriptionCard/README.md)
- [app/pages/Settings/sections/subscription/SubscriptionCards](app/pages/Settings/sections/subscription/SubscriptionCards/README.md)
- [app/pages/Settings/sections/subscription/subscriptionConnect](app/pages/Settings/sections/subscription/subscriptionConnect/README.md)
- [app/pages/Settings/sections/subscription/subscriptionProviders](app/pages/Settings/sections/subscription/subscriptionProviders/README.md)
- [app/pages/Settings/sections/usage/PixelBar](app/pages/Settings/sections/usage/PixelBar/README.md)
- [app/pages/Settings/sections/usage/UsageStats](app/pages/Settings/sections/usage/UsageStats/README.md)
- [app/pages/Settings/Settings](app/pages/Settings/Settings/README.md)
- [app/pages/Skills/SkillBuilderChat](app/pages/Skills/SkillBuilderChat/README.md)
- [app/pages/Skills/Skills](app/pages/Skills/Skills/README.md)
- [app/pages/Tools/cards/BrowserPermissionCard](app/pages/Tools/cards/BrowserPermissionCard/README.md)
- [app/pages/Tools/cards/CustomToolCard](app/pages/Tools/cards/CustomToolCard/README.md)
- [app/pages/Tools/cards/CustomToolConnect](app/pages/Tools/cards/CustomToolConnect/README.md)
- [app/pages/Tools/cards/CustomToolDevInfo](app/pages/Tools/cards/CustomToolDevInfo/README.md)
- [app/pages/Tools/cards/IntegrationGalleryCard](app/pages/Tools/cards/IntegrationGalleryCard/README.md)
- [app/pages/Tools/cards/ServiceGroup](app/pages/Tools/cards/ServiceGroup/README.md)
- [app/pages/Tools/cards/ToolSection](app/pages/Tools/cards/ToolSection/README.md)
- [app/pages/Tools/dialogs/McpConfigDialog](app/pages/Tools/dialogs/McpConfigDialog/README.md)
- [app/pages/Tools/dialogs/RegistryBrowserDialog](app/pages/Tools/dialogs/RegistryBrowserDialog/README.md)
- [app/pages/Tools/dialogs/RegistryServerRow](app/pages/Tools/dialogs/RegistryServerRow/README.md)
- [app/pages/Tools/dialogs/ToolDialogs](app/pages/Tools/dialogs/ToolDialogs/README.md)
- [app/pages/Tools/hooks/useBuiltinSections](app/pages/Tools/hooks/useBuiltinSections/README.md)
- [app/pages/Tools/hooks/useRegistryBrowser](app/pages/Tools/hooks/useRegistryBrowser/README.md)
- [app/pages/Tools/hooks/useToolConnections](app/pages/Tools/hooks/useToolConnections/README.md)
- [app/pages/Tools/hooks/useToolsActions](app/pages/Tools/hooks/useToolsActions/README.md)
- [app/pages/Tools/integrations](app/pages/Tools/integrations/README.md)
- [app/pages/Tools/Tools](app/pages/Tools/Tools/README.md)
- [app/pages/Tools/toolsHelpers](app/pages/Tools/toolsHelpers/README.md)
- [app/pages/Views/CodeEditor](app/pages/Views/CodeEditor/README.md)
- [app/pages/Views/InputSchemaForm](app/pages/Views/InputSchemaForm/README.md)
- [app/pages/Views/TerminalPanel](app/pages/Views/TerminalPanel/README.md)
- [app/pages/Views/useIframeElementSelector](app/pages/Views/useIframeElementSelector/README.md)
- [app/pages/Views/ViewCard](app/pages/Views/ViewCard/README.md)
- [app/pages/Views/ViewEditor](app/pages/Views/ViewEditor/README.md)
- [app/pages/Views/ViewPreview](app/pages/Views/ViewPreview/README.md)
- [app/pages/Views/ViewRunDialog](app/pages/Views/ViewRunDialog/README.md)
- [app/pages/Views/Views](app/pages/Views/Views/README.md)
- [index](index/README.md)
- [shared/agentWorkTime](shared/agentWorkTime/README.md)
- [shared/browserCommandHandler](shared/browserCommandHandler/README.md)
- [shared/browserRegistry](shared/browserRegistry/README.md)
- [shared/browserSettle](shared/browserSettle/README.md)
- [shared/canvasInteractionState](shared/canvasInteractionState/README.md)
- [shared/config](shared/config/README.md)
- [shared/dashboardClipboard](shared/dashboardClipboard/README.md)
- [shared/hooks](shared/hooks/README.md)
- [shared/hooks/useDashboardActive](shared/hooks/useDashboardActive/README.md)
- [shared/hooks/useDeepLink](shared/hooks/useDeepLink/README.md)
- [shared/hooks/useInteractionHeartbeat](shared/hooks/useInteractionHeartbeat/README.md)
- [shared/hooks/useLastDashboardId](shared/hooks/useLastDashboardId/README.md)
- [shared/hooks/useReducedMotion](shared/hooks/useReducedMotion/README.md)
- [shared/hooks/useRouteTracker](shared/hooks/useRouteTracker/README.md)
- [shared/hooks/useRuntimePreviewUrl](shared/hooks/useRuntimePreviewUrl/README.md)
- [shared/hooks/useWindowFocus](shared/hooks/useWindowFocus/README.md)
- [shared/inputSchemaDefaults](shared/inputSchemaDefaults/README.md)
- [shared/interactiveRanking](shared/interactiveRanking/README.md)
- [shared/mcpToolMeta](shared/mcpToolMeta/README.md)
- [shared/migrations](shared/migrations/README.md)
- [shared/modals/UnderConstruction/UnderConstruction](shared/modals/UnderConstruction/UnderConstruction/README.md)
- [shared/notifications](shared/notifications/README.md)
- [shared/previewOrder](shared/previewOrder/README.md)
- [shared/resolveUrl](shared/resolveUrl/README.md)
- [shared/sanitizeSvg](shared/sanitizeSvg/README.md)
- [shared/serviceClient](shared/serviceClient/README.md)
- [shared/state/agentsSlice](shared/state/agentsSlice/README.md)
- [shared/state/dashboardLayoutSlice](shared/state/dashboardLayoutSlice/README.md)
- [shared/state/dashboardsSlice](shared/state/dashboardsSlice/README.md)
- [shared/state/interactionSlice](shared/state/interactionSlice/README.md)
- [shared/state/mcpRegistrySlice](shared/state/mcpRegistrySlice/README.md)
- [shared/state/modelsSlice](shared/state/modelsSlice/README.md)
- [shared/state/modesSlice](shared/state/modesSlice/README.md)
- [shared/state/onboardingProgressSlice](shared/state/onboardingProgressSlice/README.md)
- [shared/state/outputsSlice](shared/state/outputsSlice/README.md)
- [shared/state/settingsSlice](shared/state/settingsSlice/README.md)
- [shared/state/skillRegistrySlice](shared/state/skillRegistrySlice/README.md)
- [shared/state/skillsSlice](shared/state/skillsSlice/README.md)
- [shared/state/store](shared/state/store/README.md)
- [shared/state/streamingSlice](shared/state/streamingSlice/README.md)
- [shared/state/subscriptionsSlice](shared/state/subscriptionsSlice/README.md)
- [shared/state/tempStateSlice](shared/state/tempStateSlice/README.md)
- [shared/state/toolsSlice](shared/state/toolsSlice/README.md)
- [shared/state/updateSlice](shared/state/updateSlice/README.md)
- [shared/statusLabel](shared/statusLabel/README.md)
- [shared/styles/claudeTokens](shared/styles/claudeTokens/README.md)
- [shared/styles/motionTokens](shared/styles/motionTokens/README.md)
- [shared/styles/ThemeContext](shared/styles/ThemeContext/README.md)
- [shared/subscription/checkout](shared/subscription/checkout/README.md)
- [shared/useBrowserActivity](shared/useBrowserActivity/README.md)
- [shared/ws/WebSocketManager](shared/ws/WebSocketManager/README.md)
- [types/css-modules](types/css-modules/README.md)
- [types/electron](types/electron/README.md)
+11
View File
@@ -0,0 +1,11 @@
[**open-swarm**](../../README.md)
***
[open-swarm](../../README.md) / app/Main
# app/Main
## Variables
- [default](variables/default.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../README.md)
***
[open-swarm](../../../README.md) / [app/Main](../README.md) / default
# Variable: default
> `const` **default**: `React.FC`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/Main.tsx:532](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/Main.tsx#L532)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Layout/AppShell
# app/components/Layout/AppShell
## Variables
- [default](variables/default.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Layout/AppShell](../README.md) / default
# Variable: default
> `const` **default**: `React.FC`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Layout/AppShell.tsx:67](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Layout/AppShell.tsx#L67)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Layout/DashboardHost
# app/components/Layout/DashboardHost
## Variables
- [default](variables/default.md)
@@ -0,0 +1,13 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Layout/DashboardHost](../README.md) / default
# Variable: default
> `const` **default**: `React.FC`\<`DashboardHostProps`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Layout/DashboardHost.tsx:10](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Layout/DashboardHost.tsx#L10)
Stable container that hides Dashboard via CSS so embedded webviews survive non-dashboard nav.
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Layout/animatedIcons
# app/components/Layout/animatedIcons
## Functions
- [AnimatedPanelLeft](functions/AnimatedPanelLeft.md)
@@ -0,0 +1,21 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Layout/animatedIcons](../README.md) / AnimatedPanelLeft
# Function: AnimatedPanelLeft()
> **AnimatedPanelLeft**(`__namedParameters`): `Element`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Layout/animatedIcons.tsx:22](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Layout/animatedIcons.tsx#L22)
## Parameters
### \_\_namedParameters
`Props`
## Returns
`Element`
@@ -0,0 +1,15 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Onboarding/OnboardingDirector
# app/components/Onboarding/OnboardingDirector
## Variables
- [onboardingDirector](variables/onboardingDirector.md)
## Functions
- [getRoadmap](functions/getRoadmap.md)
@@ -0,0 +1,17 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/OnboardingDirector](../README.md) / getRoadmap
# Function: getRoadmap()
> **getRoadmap**(): [`OnboardingStep`](../../steps/types/interfaces/OnboardingStep.md)[]
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/OnboardingDirector.ts:129](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/OnboardingDirector.ts#L129)
Ordered roadmap (1..10); STEPS is the source of truth.
## Returns
[`OnboardingStep`](../../steps/types/interfaces/OnboardingStep.md)[]
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/OnboardingDirector](../README.md) / onboardingDirector
# Variable: onboardingDirector
> `const` **onboardingDirector**: `OnboardingDirector`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/OnboardingDirector.ts:126](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/OnboardingDirector.ts#L126)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Onboarding/OnboardingPanel
# app/components/Onboarding/OnboardingPanel
## Variables
- [default](variables/default.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/OnboardingPanel](../README.md) / default
# Variable: default
> `const` **default**: `React.FC`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/OnboardingPanel.tsx:51](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/OnboardingPanel.tsx#L51)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Onboarding/OnboardingRoadmapModal
# app/components/Onboarding/OnboardingRoadmapModal
## Variables
- [default](variables/default.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/OnboardingRoadmapModal](../README.md) / default
# Variable: default
> `const` **default**: `React.FC`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/OnboardingRoadmapModal.tsx:18](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/OnboardingRoadmapModal.tsx#L18)
@@ -0,0 +1,13 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Onboarding/OnboardingRoot
# app/components/Onboarding/OnboardingRoot
## References
### default
Renames and re-exports [OnboardingRoot](../variables/OnboardingRoot.md)
@@ -0,0 +1,41 @@
[**open-swarm**](../../../README.md)
***
[open-swarm](../../../README.md) / app/components/Onboarding
# app/components/Onboarding
## Variables
- [OnboardingRoot](variables/OnboardingRoot.md)
## References
### onboardingBus
Re-exports [onboardingBus](eventBus/variables/onboardingBus.md)
***
### onboardingDirector
Re-exports [onboardingDirector](OnboardingDirector/variables/onboardingDirector.md)
***
### OnboardingEvent
Re-exports [OnboardingEvent](eventBus/type-aliases/OnboardingEvent.md)
***
### OnboardingSelectors
Renames and re-exports [S](selectors/variables/S.md)
***
### useOnboardingProgress
Re-exports [useOnboardingProgress](hooks/useOnboardingProgress/functions/useOnboardingProgress.md)
@@ -0,0 +1,13 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Onboarding/\_motionWin
# app/components/Onboarding/\_motionWin
## Variables
- [AnimatePresence](variables/AnimatePresence.md)
- [motion](variables/motion.md)
- [useAnimationControls](variables/useAnimationControls.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/\_motionWin](../README.md) / AnimatePresence
# Variable: AnimatePresence
> `const` **AnimatePresence**: *typeof* `fm.AnimatePresence`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/\_motionWin.tsx:65](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/_motionWin.tsx#L65)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/\_motionWin](../README.md) / motion
# Variable: motion
> `const` **motion**: *typeof* `fm.motion`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/\_motionWin.tsx:64](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/_motionWin.tsx#L64)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/\_motionWin](../README.md) / useAnimationControls
# Variable: useAnimationControls
> `const` **useAnimationControls**: *typeof* `fm.useAnimationControls`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/\_motionWin.tsx:75](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/_motionWin.tsx#L75)
@@ -0,0 +1,18 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/ac/ACGestures
# app/components/Onboarding/ac/ACGestures
## Interfaces
- [DragRect](interfaces/DragRect.md)
## Functions
- [animateDragSelect](functions/animateDragSelect.md)
- [clickRipple](functions/clickRipple.md)
- [sleep](functions/sleep.md)
- [spawnGlowRect](functions/spawnGlowRect.md)
@@ -0,0 +1,29 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/ACGestures](../README.md) / animateDragSelect
# Function: animateDragSelect()
> **animateDragSelect**(`rect`, `color`, `durationMs?`): `Promise`\<`void`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACGestures.ts:35](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACGestures.ts#L35)
## Parameters
### rect
[`DragRect`](../interfaces/DragRect.md)
### color
`string`
### durationMs?
`number` = `600`
## Returns
`Promise`\<`void`\>
@@ -0,0 +1,29 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/ACGestures](../README.md) / clickRipple
# Function: clickRipple()
> **clickRipple**(`x`, `y`, `color`): `void`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACGestures.ts:3](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACGestures.ts#L3)
## Parameters
### x
`number`
### y
`number`
### color
`string`
## Returns
`void`
@@ -0,0 +1,23 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/ACGestures](../README.md) / sleep
# Function: sleep()
> **sleep**(`ms`): `Promise`\<`void`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACGestures.ts:100](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACGestures.ts#L100)
Promise-wrapped setTimeout for use between ops.
## Parameters
### ms
`number`
## Returns
`Promise`\<`void`\>
@@ -0,0 +1,27 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/ACGestures](../README.md) / spawnGlowRect
# Function: spawnGlowRect()
> **spawnGlowRect**(`target`, `color`): () => `void`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACGestures.ts:71](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACGestures.ts#L71)
Soft glow rect over a target (no click); caller must invoke the returned cleanup.
## Parameters
### target
`HTMLElement`
### color
`string`
## Returns
() => `void`
@@ -0,0 +1,41 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/ACGestures](../README.md) / DragRect
# Interface: DragRect
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACGestures.ts:28](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACGestures.ts#L28)
## Properties
### fromX
> **fromX**: `number`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACGestures.ts:29](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACGestures.ts#L29)
***
### fromY
> **fromY**: `number`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACGestures.ts:30](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACGestures.ts#L30)
***
### toX
> **toX**: `number`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACGestures.ts:31](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACGestures.ts#L31)
***
### toY
> **toY**: `number`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACGestures.ts:32](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACGestures.ts#L32)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/ac/ACMultiChoice
# app/components/Onboarding/ac/ACMultiChoice
## Variables
- [default](variables/default.md)
@@ -0,0 +1,15 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/ACMultiChoice](../README.md) / default
# Variable: default
> `const` **default**: `React.FC`\<`Props`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACMultiChoice.tsx:24](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACMultiChoice.tsx#L24)
Single-select multi-choice popup. Same chrome as ACPopup but with
answer chips. Captures pointer events (auto) so chips are clickable.
Stays mounted until user picks (or runtime aborts via hidePopup).
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/ac/ACPopup
# app/components/Onboarding/ac/ACPopup
## Variables
- [default](variables/default.md)
@@ -0,0 +1,13 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/ACPopup](../README.md) / default
# Variable: default
> `const` **default**: `React.FC`\<`Props`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACPopup.tsx:24](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACPopup.tsx#L24)
Non-blocking cursor popup; streams char-by-char above the cursor (flips below if no room).
@@ -0,0 +1,15 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/ac/ACTypewriter
# app/components/Onboarding/ac/ACTypewriter
## Interfaces
- [TypeIntoOptions](interfaces/TypeIntoOptions.md)
## Functions
- [typeInto](functions/typeInto.md)
@@ -0,0 +1,29 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/ACTypewriter](../README.md) / typeInto
# Function: typeInto()
> **typeInto**(`el`, `text`, `opts?`): `Promise`\<`void`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACTypewriter.ts:89](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACTypewriter.ts#L89)
## Parameters
### el
`HTMLElement`
### text
`string`
### opts?
[`TypeIntoOptions`](../interfaces/TypeIntoOptions.md) = `{}`
## Returns
`Promise`\<`void`\>
@@ -0,0 +1,31 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/ACTypewriter](../README.md) / TypeIntoOptions
# Interface: TypeIntoOptions
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACTypewriter.ts:75](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACTypewriter.ts#L75)
## Properties
### onTick?
> `optional` **onTick?**: () => `void`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACTypewriter.ts:78](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACTypewriter.ts#L78)
Per-char callback so the cursor can re-align to the input's right edge as text grows.
#### Returns
`void`
***
### speedMs?
> `optional` **speedMs?**: `number`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/ACTypewriter.ts:76](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/ACTypewriter.ts#L76)
@@ -0,0 +1,15 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/ac/AgenticCursor
# app/components/Onboarding/ac/AgenticCursor
## Interfaces
- [AgenticCursorHandle](interfaces/AgenticCursorHandle.md)
## Variables
- [default](variables/default.md)
@@ -0,0 +1,218 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/AgenticCursor](../README.md) / AgenticCursorHandle
# Interface: AgenticCursorHandle
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:17](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L17)
## Properties
### fadeIn
> **fadeIn**: (`from`) => `Promise`\<`void`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:18](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L18)
#### Parameters
##### from
###### x
`number`
###### y
`number`
#### Returns
`Promise`\<`void`\>
***
### fadeOut
> **fadeOut**: (`to`) => `Promise`\<`void`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:19](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L19)
#### Parameters
##### to
###### x
`number`
###### y
`number`
#### Returns
`Promise`\<`void`\>
***
### getPosition
> **getPosition**: () => `object`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:40](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L40)
#### Returns
`object`
##### x
> **x**: `number`
##### y
> **y**: `number`
***
### hidePopup
> **hidePopup**: () => `void`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:39](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L39)
#### Returns
`void`
***
### moveTo
> **moveTo**: (`x`, `y`, `transition?`) => `Promise`\<`void`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:26](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L26)
Animated jump to (x, y). Defaults to the spring used for normal hops;
pass an override (e.g. a tween) when the cursor needs to ride alongside
a CSS-transitioned visual like the drag-select rect, where spring
overshoot would visibly desync from the rect's bottom-right corner.
#### Parameters
##### x
`number`
##### y
`number`
##### transition?
`Record`\<`string`, `unknown`\>
#### Returns
`Promise`\<`void`\>
***
### pressClick
> **pressClick**: () => `Promise`\<`void`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:31](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L31)
#### Returns
`Promise`\<`void`\>
***
### showMultiChoice
> **showMultiChoice**: (`q`, `opts`) => `Promise`\<`string`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:38](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L38)
Single-select multi-choice; resolves with the chosen option id.
#### Parameters
##### q
`string`
##### opts
[`ACMultiChoiceOption`](../../../steps/types/type-aliases/ACMultiChoiceOption.md)[]
#### Returns
`Promise`\<`string`\>
***
### showPopup
> **showPopup**: (`text`) => `void`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:36](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L36)
Non-blocking popup above cursor; auto-clears on next physical-move op.
#### Parameters
##### text
`string`
#### Returns
`void`
***
### startTracking
> **startTracking**: (`selector`, `offset?`) => `void`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:33](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L33)
Pin cursor to a live selector; rAF re-resolves so it follows reflows + React node swaps.
#### Parameters
##### selector
`string`
##### offset?
###### x
`number`
###### y
`number`
#### Returns
`void`
***
### stopTracking
> **stopTracking**: () => `void`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:34](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L34)
#### Returns
`void`
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/AgenticCursor](../README.md) / default
# Variable: default
> `const` **default**: `ForwardRefExoticComponent`\<`RefAttributes`\<[`AgenticCursorHandle`](../interfaces/AgenticCursorHandle.md)\>\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx:65](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx#L65)
@@ -0,0 +1,15 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/ac/acRuntime
# app/components/Onboarding/ac/acRuntime
## Interfaces
- [RunStepArgs](interfaces/RunStepArgs.md)
## Functions
- [runStep](functions/runStep.md)
@@ -0,0 +1,21 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/acRuntime](../README.md) / runStep
# Function: runStep()
> **runStep**(`args`): `Promise`\<`void`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:80](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L80)
## Parameters
### args
[`RunStepArgs`](../interfaces/RunStepArgs.md)
## Returns
`Promise`\<`void`\>
@@ -0,0 +1,101 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/acRuntime](../README.md) / RunStepArgs
# Interface: RunStepArgs
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:69](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L69)
## Properties
### ac
> **ac**: [`AgenticCursorHandle`](../../AgenticCursor/interfaces/AgenticCursorHandle.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:72](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L72)
***
### accentColor
> **accentColor**: `string`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:74](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L74)
***
### findStep
> **findStep**: (`id`) => [`OnboardingStep`](../../../steps/types/interfaces/OnboardingStep.md) \| `undefined`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:76](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L76)
#### Parameters
##### id
`string`
#### Returns
[`OnboardingStep`](../../../steps/types/interfaces/OnboardingStep.md) \| `undefined`
***
### isDependencySatisfied?
> `optional` **isDependencySatisfied?**: (`depId`) => `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:77](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L77)
#### Parameters
##### depId
`string`
#### Returns
`boolean`
***
### signal
> **signal**: `AbortSignal`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:75](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L75)
***
### spawnPoint
> **spawnPoint**: `object`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:71](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L71)
#### x
> **x**: `number`
#### y
> **y**: `number`
***
### step
> **step**: [`OnboardingStep`](../../../steps/types/interfaces/OnboardingStep.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:70](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L70)
***
### store
> **store**: `Store`\<\{ `agents`: `AgentsState`; `dashboardLayout`: [`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md); `dashboards`: `DashboardsState`; `interaction`: `InteractionState`; `mcpRegistry`: `McpRegistryState`; `models`: `ModelsState`; `modes`: `ModesState`; `onboardingProgress`: [`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md); `outputs`: `OutputsState`; `settings`: `SettingsState`; `skillRegistry`: `SkillRegistryState`; `skills`: `SkillsState`; `streaming`: `StreamingState`; `subscriptions`: [`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md); `tempState`: `TempState`; `tools`: `ToolsState`; `update`: `UpdateState`; \}\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/acRuntime.ts:73](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/acRuntime.ts#L73)
@@ -0,0 +1,15 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/ac/cursorStore
# app/components/Onboarding/ac/cursorStore
## Variables
- [cursorStore](variables/cursorStore.md)
## Functions
- [useCursorPosition](functions/useCursorPosition.md)
@@ -0,0 +1,15 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/cursorStore](../README.md) / useCursorPosition
# Function: useCursorPosition()
> **useCursorPosition**(): `CursorPos`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/cursorStore.ts:73](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/cursorStore.ts#L73)
## Returns
`CursorPos`
@@ -0,0 +1,49 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/ac/cursorStore](../README.md) / cursorStore
# Variable: cursorStore
> `const` **cursorStore**: `object`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/ac/cursorStore.ts:29](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/ac/cursorStore.ts#L29)
## Type Declaration
### get
> **get**: () => `CursorPos`
#### Returns
`CursorPos`
### set()
> **set**(`next`): `void`
#### Parameters
##### next
`Partial`\<`CursorPos`\>
#### Returns
`void`
### subscribe()
> **subscribe**(`listener`): () => `boolean`
#### Parameters
##### listener
() => `void`
#### Returns
() => `boolean`
@@ -0,0 +1,15 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Onboarding/eventBus
# app/components/Onboarding/eventBus
## Type Aliases
- [OnboardingEvent](type-aliases/OnboardingEvent.md)
## Variables
- [onboardingBus](variables/onboardingBus.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/eventBus](../README.md) / OnboardingEvent
# Type Alias: OnboardingEvent
> **OnboardingEvent** = `"browser:spawned"` \| `"browser:navigated"` \| `"settings:closed"` \| `"chat:message_sent"` \| `"app:generation_started"` \| `"app:generation_done"` \| `"skill:installed"` \| `"action:toggled"` \| `"mode:created"` \| `"note:created"` \| `"element_selection:toggled"` \| `"agent:spawned"` \| `"agent:completed"` \| `"agent:attached_to_browser"`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/eventBus.ts:3](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/eventBus.ts#L3)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/eventBus](../README.md) / onboardingBus
# Variable: onboardingBus
> `const` **onboardingBus**: `OnboardingBus`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/eventBus.ts:87](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/eventBus.ts#L87)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/hooks/useOnboardingProgress
# app/components/Onboarding/hooks/useOnboardingProgress
## Functions
- [useOnboardingProgress](functions/useOnboardingProgress.md)
@@ -0,0 +1,227 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/hooks/useOnboardingProgress](../README.md) / useOnboardingProgress
# Function: useOnboardingProgress()
> **useOnboardingProgress**(): `object`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/hooks/useOnboardingProgress.ts:13](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/hooks/useOnboardingProgress.ts#L13)
## Returns
### clearJustCompleted
> **clearJustCompleted**: () => `object`
#### Returns
`object`
##### payload
> **payload**: `undefined`
##### type
> **type**: `"onboardingProgress/clearJustCompleted"`
### completedSteps
> **completedSteps**: `string`[]
### currentStepId
> **currentStepId**: `string` \| `null`
### disableSkipIf
> **disableSkipIf**: `boolean`
True after explicit restart-from-Settings; suppresses skipIf so the tour feels fresh.
### dismissedAt
> **dismissedAt**: `number` \| `null`
### initialized
> **initialized**: `boolean`
Set on first-launch detection so we don't re-init defaults on every mount.
### justCompletedStepId
> **justCompletedStepId**: `string` \| `null`
Brief celebration marker; clearJustCompleted clears it ~1.5s after the animation.
### markCompleted
> **markCompleted**: (`id`) => `object`
#### Parameters
##### id
`string`
#### Returns
`object`
##### payload
> **payload**: `string`
##### type
> **type**: `"onboardingProgress/markStepCompleted"`
### panelMode
> **panelMode**: [`PanelMode`](../../../../../../shared/state/onboardingProgressSlice/type-aliases/PanelMode.md)
### perStepState
> **perStepState**: `Record`\<`string`, [`PerStepState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/PerStepState.md)\>
### recordMultiChoice
> **recordMultiChoice**: (`stepId`, `opId`, `answerId`) => `object`
#### Parameters
##### stepId
`string`
##### opId
`string`
##### answerId
`string`
#### Returns
`object`
##### payload
> **payload**: `object`
###### payload.answerId
> **answerId**: `string`
###### payload.opId
> **opId**: `string`
###### payload.stepId
> **stepId**: `string`
##### type
> **type**: `"onboardingProgress/recordMultiChoice"`
### resetTour
> **resetTour**: () => `object`
#### Returns
`object`
##### payload
> **payload**: `undefined`
##### type
> **type**: `"onboardingProgress/resetTour"`
### running
> **running**: `boolean`
Runtime-only; true while AC is executing a step's ops.
### setCurrentStep
> **setCurrentStep**: (`id`) => `object`
#### Parameters
##### id
`string` \| `null`
#### Returns
`object`
##### payload
> **payload**: `string` \| `null`
##### type
> **type**: `"onboardingProgress/setCurrentStep"`
### setPanelMode
> **setPanelMode**: (`m`) => `object`
#### Parameters
##### m
[`PanelMode`](../../../../../../shared/state/onboardingProgressSlice/type-aliases/PanelMode.md)
#### Returns
`object`
##### payload
> **payload**: [`PanelMode`](../../../../../../shared/state/onboardingProgressSlice/type-aliases/PanelMode.md)
##### type
> **type**: `"onboardingProgress/setPanelMode"`
### setRunning
> **setRunning**: (`running`) => `object`
#### Parameters
##### running
`boolean`
#### Returns
`object`
##### payload
> **payload**: `boolean`
##### type
> **type**: `"onboardingProgress/setRunning"`
### startedAt
> **startedAt**: `number`
### version
> **version**: `2`
@@ -0,0 +1,20 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Onboarding/selectors
# app/components/Onboarding/selectors
## Type Aliases
- [SelectorKey](type-aliases/SelectorKey.md)
## Variables
- [S](variables/S.md)
## Functions
- [resolveSelector](functions/resolveSelector.md)
- [waitForSelector](functions/waitForSelector.md)
@@ -0,0 +1,23 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/selectors](../README.md) / resolveSelector
# Function: resolveSelector()
> **resolveSelector**(`target`): `HTMLElement` \| `null`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/selectors.ts:69](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/selectors.ts#L69)
Resolve a selector to a DOM node; per-agent selectors pick the newest spawn.
## Parameters
### target
`string`
## Returns
`HTMLElement` \| `null`
@@ -0,0 +1,27 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/selectors](../README.md) / waitForSelector
# Function: waitForSelector()
> **waitForSelector**(`target`, `timeoutMs?`): `Promise`\<`HTMLElement`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/selectors.ts:133](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/selectors.ts#L133)
Resolve when target mounts; 15s default to ride out heavy main-thread load on /apps/new.
## Parameters
### target
`string`
### timeoutMs?
`number` = `15000`
## Returns
`Promise`\<`HTMLElement`\>
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/selectors](../README.md) / SelectorKey
# Type Alias: SelectorKey
> **SelectorKey** = *typeof* [`S`](../variables/S.md)\[keyof *typeof* [`S`](../variables/S.md)\]
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/selectors.ts:59](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/selectors.ts#L59)
@@ -0,0 +1,173 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/selectors](../README.md) / S
# Variable: S
> `const` **S**: `object`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/selectors.ts:3](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/selectors.ts#L3)
## Type Declaration
### actionsPermissionToggle
> `readonly` **actionsPermissionToggle**: `"actions-permission-toggle"` = `'actions-permission-toggle'`
### actionsRedditChevron
> `readonly` **actionsRedditChevron**: `"actions-reddit-chevron"` = `'actions-reddit-chevron'`
### actionsRedditToggle
> `readonly` **actionsRedditToggle**: `"actions-reddit-toggle"` = `'actions-reddit-toggle'`
### actionsSubredditsChevron
> `readonly` **actionsSubredditsChevron**: `"actions-subreddits-chevron"` = `'actions-subreddits-chevron'`
### actionsYoutubeChevron
> `readonly` **actionsYoutubeChevron**: `"actions-youtube-chevron"` = `'actions-youtube-chevron'`
### actionsYoutubeToggle
> `readonly` **actionsYoutubeToggle**: `"actions-youtube-toggle"` = `'actions-youtube-toggle'`
### agentCard
> `readonly` **agentCard**: `"agent-card"` = `'agent-card'`
Matched via data-select-type as fallback.
### appCardLatest
> `readonly` **appCardLatest**: `"app-card-latest"` = `'app-card-latest'`
### appsNewButton
> `readonly` **appsNewButton**: `"apps-new-button"` = `'apps-new-button'`
### browserButton
> `readonly` **browserButton**: `"browser-button"` = `'browser-button'`
### browserUrlBar
> `readonly` **browserUrlBar**: `"browser-url-bar"` = `'browser-url-bar'`
### canvasControls
> `readonly` **canvasControls**: `"canvas-controls"` = `'canvas-controls'`
### canvasFitToView
> `readonly` **canvasFitToView**: `"canvas-fit-to-view"` = `'canvas-fit-to-view'`
### canvasMinimapToggle
> `readonly` **canvasMinimapToggle**: `"canvas-minimap-toggle"` = `'canvas-minimap-toggle'`
### canvasTidyLayout
> `readonly` **canvasTidyLayout**: `"canvas-tidy-layout"` = `'canvas-tidy-layout'`
### chatInput
> `readonly` **chatInput**: `"chat-input"` = `'chat-input'`
### chatSendButton
> `readonly` **chatSendButton**: `"chat-send-button"` = `'chat-send-button'`
### dashboardRowFirst
> `readonly` **dashboardRowFirst**: `"dashboard-row-first"` = `'dashboard-row-first'`
First row in Dashboards section; "click into a dashboard" hop targets this.
### dashboardToolbarApps
> `readonly` **dashboardToolbarApps**: `"dashboard-toolbar-apps"` = `'dashboard-toolbar-apps'`
### elementSelectionToggle
> `readonly` **elementSelectionToggle**: `"element-selection-toggle"` = `'element-selection-toggle'`
### newAgentButton
> `readonly` **newAgentButton**: `"new-agent-button"` = `'new-agent-button'`
### settingsApiKeys
> `readonly` **settingsApiKeys**: `"settings-api-keys"` = `'settings-api-keys'`
### settingsCloseButton
> `readonly` **settingsCloseButton**: `"settings-close-button"` = `'settings-close-button'`
### settingsExternalSubs
> `readonly` **settingsExternalSubs**: `"settings-external-subs"` = `'settings-external-subs'`
### settingsModelsTab
> `readonly` **settingsModelsTab**: `"settings-models-tab"` = `'settings-models-tab'`
### settingsProSection
> `readonly` **settingsProSection**: `"settings-pro-section"` = `'settings-pro-section'`
### settingsRestartTour
> `readonly` **settingsRestartTour**: `"settings-restart-tour"` = `'settings-restart-tour'`
### sidebarActions
> `readonly` **sidebarActions**: `"sidebar-actions"` = `'sidebar-actions'`
### sidebarApps
> `readonly` **sidebarApps**: `"sidebar-apps"` = `'sidebar-apps'`
### sidebarCustomization
> `readonly` **sidebarCustomization**: `"sidebar-customization"` = `'sidebar-customization'`
Header for sidebar's Customization section; runtime auto-expands before targeting children.
### sidebarDashboards
> `readonly` **sidebarDashboards**: `"sidebar-dashboards"` = `'sidebar-dashboards'`
### sidebarModes
> `readonly` **sidebarModes**: `"sidebar-modes"` = `'sidebar-modes'`
### sidebarSettingsButton
> `readonly` **sidebarSettingsButton**: `"sidebar-settings-button"` = `'sidebar-settings-button'`
### sidebarSkills
> `readonly` **sidebarSkills**: `"sidebar-skills"` = `'sidebar-skills'`
### sidebarToggle
> `readonly` **sidebarToggle**: `"sidebar-toggle"` = `'sidebar-toggle'`
Top-bar ViewSidebar toggle; aria-expanded drives the expand-sidebar preflight.
### skillBuilderFab
> `readonly` **skillBuilderFab**: `"skill-builder-fab"` = `'skill-builder-fab'`
### skillInstallButton
> `readonly` **skillInstallButton**: `"skill-install-button"` = `'skill-install-button'`
### skillItemPdf
> `readonly` **skillItemPdf**: `"skill-item-pdf"` = `'skill-item-pdf'`
@@ -0,0 +1,16 @@
[**open-swarm**](../../../../README.md)
***
[open-swarm](../../../../README.md) / app/components/Onboarding/steps
# app/components/Onboarding/steps
## Variables
- [STAGE\_GROUPS](variables/STAGE_GROUPS.md)
- [STEPS](variables/STEPS.md)
## Functions
- [findStepById](functions/findStepById.md)
@@ -0,0 +1,21 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / [app/components/Onboarding/steps](../README.md) / findStepById
# Function: findStepById()
> **findStepById**(`id`): [`OnboardingStep`](../types/interfaces/OnboardingStep.md) \| `undefined`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/index.ts:25](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/index.ts#L25)
## Parameters
### id
`string`
## Returns
[`OnboardingStep`](../types/interfaces/OnboardingStep.md) \| `undefined`
@@ -0,0 +1,19 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/skipPredicates
# app/components/Onboarding/steps/skipPredicates
## Functions
- [freeRunsLow](functions/freeRunsLow.md)
- [hasAnyAgentLaunched](functions/hasAnyAgentLaunched.md)
- [hasAnyBrowserSpawned](functions/hasAnyBrowserSpawned.md)
- [hasAnySkillInstalled](functions/hasAnySkillInstalled.md)
- [hasAnyToolEnabled](functions/hasAnyToolEnabled.md)
- [hasFreeTrialActive](functions/hasFreeTrialActive.md)
- [hasModelConnected](functions/hasModelConnected.md)
- [hasPdfSkillInstalled](functions/hasPdfSkillInstalled.md)
- [isYoutubeEnabled](functions/isYoutubeEnabled.md)
@@ -0,0 +1,89 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/skipPredicates](../README.md) / freeRunsLow
# Function: freeRunsLow()
> **freeRunsLow**(`s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/skipPredicates.ts:36](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/skipPredicates.ts#L36)
True when free runs are running out (or already armed-and-spent). Surfaces the connect-model step.
## Parameters
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,87 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/skipPredicates](../README.md) / hasAnyAgentLaunched
# Function: hasAnyAgentLaunched()
> **hasAnyAgentLaunched**(`s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/skipPredicates.ts:60](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/skipPredicates.ts#L60)
## Parameters
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,89 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/skipPredicates](../README.md) / hasAnyBrowserSpawned
# Function: hasAnyBrowserSpawned()
> **hasAnyBrowserSpawned**(`s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/skipPredicates.ts:84](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/skipPredicates.ts#L84)
True if a browser card exists; step 4 auto-skips the open-a-browser walkthrough.
## Parameters
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,87 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/skipPredicates](../README.md) / hasAnySkillInstalled
# Function: hasAnySkillInstalled()
> **hasAnySkillInstalled**(`s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/skipPredicates.ts:65](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/skipPredicates.ts#L65)
## Parameters
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,87 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/skipPredicates](../README.md) / hasAnyToolEnabled
# Function: hasAnyToolEnabled()
> **hasAnyToolEnabled**(`s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/skipPredicates.ts:43](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/skipPredicates.ts#L43)
## Parameters
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,89 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/skipPredicates](../README.md) / hasFreeTrialActive
# Function: hasFreeTrialActive()
> **hasFreeTrialActive**(`s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/skipPredicates.ts:30](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/skipPredicates.ts#L30)
True while the server-funded free trial is armed (no key needed yet).
## Parameters
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,87 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/skipPredicates](../README.md) / hasModelConnected
# Function: hasModelConnected()
> **hasModelConnected**(`s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/skipPredicates.ts:8](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/skipPredicates.ts#L8)
## Parameters
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,89 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/skipPredicates](../README.md) / hasPdfSkillInstalled
# Function: hasPdfSkillInstalled()
> **hasPdfSkillInstalled**(`s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/skipPredicates.ts:72](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/skipPredicates.ts#L72)
True if PDF skill installed (id/name/command); step 7 uses this so other skills don't auto-skip.
## Parameters
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,89 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/skipPredicates](../README.md) / isYoutubeEnabled
# Function: isYoutubeEnabled()
> **isYoutubeEnabled**(`s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/skipPredicates.ts:50](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/skipPredicates.ts#L50)
True when a YouTube-shaped tool is on; step 2 waits on this so toggle-flapping stays in sync.
## Parameters
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/step01\_connectModel
# app/components/Onboarding/steps/step01\_connectModel
## Variables
- [step01](variables/step01.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/step01\_connectModel](../README.md) / step01
# Variable: step01
> `const` **step01**: [`OnboardingStep`](../../types/interfaces/OnboardingStep.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/step01\_connectModel.ts:5](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/step01_connectModel.ts#L5)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/step02\_enableActions
# app/components/Onboarding/steps/step02\_enableActions
## Variables
- [step02](variables/step02.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/step02\_enableActions](../README.md) / step02
# Variable: step02
> `const` **step02**: [`OnboardingStep`](../../types/interfaces/OnboardingStep.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/step02\_enableActions.ts:5](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/step02_enableActions.ts#L5)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/step03\_launchAgent
# app/components/Onboarding/steps/step03\_launchAgent
## Variables
- [step03](variables/step03.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/step03\_launchAgent](../README.md) / step03
# Variable: step03
> `const` **step03**: [`OnboardingStep`](../../types/interfaces/OnboardingStep.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/step03\_launchAgent.ts:11](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/step03_launchAgent.ts#L11)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/step04\_useBrowser
# app/components/Onboarding/steps/step04\_useBrowser
## Variables
- [step04](variables/step04.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/step04\_useBrowser](../README.md) / step04
# Variable: step04
> `const` **step04**: [`OnboardingStep`](../../types/interfaces/OnboardingStep.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/step04\_useBrowser.ts:5](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/step04_useBrowser.ts#L5)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/step05\_agentUseBrowser
# app/components/Onboarding/steps/step05\_agentUseBrowser
## Variables
- [step05](variables/step05.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/step05\_agentUseBrowser](../README.md) / step05
# Variable: step05
> `const` **step05**: [`OnboardingStep`](../../types/interfaces/OnboardingStep.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/step05\_agentUseBrowser.ts:4](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/step05_agentUseBrowser.ts#L4)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/step06\_agentControlAgents
# app/components/Onboarding/steps/step06\_agentControlAgents
## Variables
- [step06](variables/step06.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/step06\_agentControlAgents](../README.md) / step06
# Variable: step06
> `const` **step06**: [`OnboardingStep`](../../types/interfaces/OnboardingStep.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/step06\_agentControlAgents.ts:4](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/step06_agentControlAgents.ts#L4)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/step07\_installSkill
# app/components/Onboarding/steps/step07\_installSkill
## Variables
- [step07](variables/step07.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/step07\_installSkill](../README.md) / step07
# Variable: step07
> `const` **step07**: [`OnboardingStep`](../../types/interfaces/OnboardingStep.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/step07\_installSkill.ts:5](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/step07_installSkill.ts#L5)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/step08\_makeApp
# app/components/Onboarding/steps/step08\_makeApp
## Variables
- [step08](variables/step08.md)
@@ -0,0 +1,11 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/step08\_makeApp](../README.md) / step08
# Variable: step08
> `const` **step08**: [`OnboardingStep`](../../types/interfaces/OnboardingStep.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/step08\_makeApp.ts:4](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/step08_makeApp.ts#L4)
@@ -0,0 +1,13 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/stepUnlock
# app/components/Onboarding/steps/stepUnlock
## Functions
- [isStepUnlocked](functions/isStepUnlocked.md)
- [unlockHintFor](functions/unlockHintFor.md)
- [useUnlockedStepIds](functions/useUnlockedStepIds.md)
@@ -0,0 +1,91 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/stepUnlock](../README.md) / isStepUnlocked
# Function: isStepUnlocked()
> **isStepUnlocked**(`stepId`, `s`): `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/stepUnlock.ts:29](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/stepUnlock.ts#L29)
## Parameters
### stepId
`string`
### s
#### agents
`AgentsState` = `agentsReducer`
#### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
#### dashboards
`DashboardsState` = `dashboardsReducer`
#### interaction
`InteractionState` = `interactionReducer`
#### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
#### models
`ModelsState` = `modelsReducer`
#### modes
`ModesState` = `modesReducer`
#### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
#### outputs
`OutputsState` = `outputsReducer`
#### settings
`SettingsState` = `settingsReducer`
#### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
#### skills
`SkillsState` = `skillsReducer`
#### streaming
`StreamingState` = `streamingReducer`
#### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
#### tempState
`TempState` = `tempStateReducer`
#### tools
`ToolsState` = `toolsReducer`
#### update
`UpdateState` = `updateReducer`
## Returns
`boolean`
@@ -0,0 +1,21 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/stepUnlock](../README.md) / unlockHintFor
# Function: unlockHintFor()
> **unlockHintFor**(`stepId`): `string` \| `null`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/stepUnlock.ts:34](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/stepUnlock.ts#L34)
## Parameters
### stepId
`string`
## Returns
`string` \| `null`
@@ -0,0 +1,18 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/stepUnlock](../README.md) / useUnlockedStepIds
# Function: useUnlockedStepIds()
> **useUnlockedStepIds**(): `Set`\<`string`\>
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/stepUnlock.ts:40](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/stepUnlock.ts#L40)
Set of currently-unlocked step ids. Keyed on a stable string so the selector
only re-renders when the unlock set actually changes.
## Returns
`Set`\<`string`\>
@@ -0,0 +1,24 @@
[**open-swarm**](../../../../../README.md)
***
[open-swarm](../../../../../README.md) / app/components/Onboarding/steps/types
# app/components/Onboarding/steps/types
## Interfaces
- [OnboardingStep](interfaces/OnboardingStep.md)
- [StepDependency](interfaces/StepDependency.md)
## Type Aliases
- [ACMultiChoiceOption](type-aliases/ACMultiChoiceOption.md)
- [ACOp](type-aliases/ACOp.md)
- [AdvanceCondition](type-aliases/AdvanceCondition.md)
- [Selector](type-aliases/Selector.md)
- [StepStage](type-aliases/StepStage.md)
## Variables
- [STAGE\_LABELS](variables/STAGE_LABELS.md)
@@ -0,0 +1,181 @@
[**open-swarm**](../../../../../../README.md)
***
[open-swarm](../../../../../../README.md) / [app/components/Onboarding/steps/types](../README.md) / OnboardingStep
# Interface: OnboardingStep
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:47](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L47)
## Properties
### dependsOn?
> `optional` **dependsOn?**: [`StepDependency`](StepDependency.md)[]
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:58](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L58)
***
### description
> **description**: `string`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:53](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L53)
***
### id
> **id**: `string`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:48](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L48)
***
### index
> **index**: `number`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:51](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L51)
1..N (currently 1..8).
***
### ops
> **ops**: [`ACOp`](../type-aliases/ACOp.md)[]
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:57](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L57)
***
### requiresDashboard?
> `optional` **requiresDashboard?**: `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:62](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L62)
True when ops target dashboard-toolbar elements; runtime auto-prepends a click-into-dashboard hop.
***
### skipIf?
> `optional` **skipIf?**: (`state`) => `boolean`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:60](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L60)
Mark a step already-done at launch / Show me click without running its flow.
#### Parameters
##### state
###### agents
`AgentsState` = `agentsReducer`
###### dashboardLayout
[`DashboardLayoutState`](../../../../../../shared/state/dashboardLayoutSlice/interfaces/DashboardLayoutState.md) = `dashboardLayoutReducer`
###### dashboards
`DashboardsState` = `dashboardsReducer`
###### interaction
`InteractionState` = `interactionReducer`
###### mcpRegistry
`McpRegistryState` = `mcpRegistryReducer`
###### models
`ModelsState` = `modelsReducer`
###### modes
`ModesState` = `modesReducer`
###### onboardingProgress
[`OnboardingProgressState`](../../../../../../shared/state/onboardingProgressSlice/interfaces/OnboardingProgressState.md) = `onboardingProgressReducer`
###### outputs
`OutputsState` = `outputsReducer`
###### settings
`SettingsState` = `settingsReducer`
###### skillRegistry
`SkillRegistryState` = `skillRegistryReducer`
###### skills
`SkillsState` = `skillsReducer`
###### streaming
`StreamingState` = `streamingReducer`
###### subscriptions
[`SubscriptionsState`](../../../../../../shared/state/subscriptionsSlice/interfaces/SubscriptionsState.md) = `subscriptionsReducer`
###### tempState
`TempState` = `tempStateReducer`
###### tools
`ToolsState` = `toolsReducer`
###### update
`UpdateState` = `updateReducer`
#### Returns
`boolean`
***
### stage
> **stage**: [`StepStage`](../type-aliases/StepStage.md)
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:49](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L49)
***
### title
> **title**: `string`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:52](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L52)
***
### videoDurationLabel?
> `optional` **videoDurationLabel?**: `string`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:56](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L56)
Shown in the panel preview chip, e.g. "0:24".
***
### videoSrc?
> `optional` **videoSrc?**: `string`
Defined in: [Desktop/openswarm-ai/all-things-analytics/openswarm/frontend/src/app/components/Onboarding/steps/types.ts:54](https://github.com/openswarm-ai/openswarm/blob/019a71c26d428a6c93dd027186193f1e068bd25e/frontend/src/app/components/Onboarding/steps/types.ts#L54)

Some files were not shown because too many files have changed in this diff Show More