feat: unify docs portal and MCP servers into one config-driven service

- add config.yml as single source of truth for collected repos/categories
- add collect.py CLI to pull lib/api/wiki site builds and mcp bundles from
  source repos and regenerate nginx.conf + _index/index.html
- port mcp runtime (main.py/core.py/config.py): nginx + health + FastMCP
  servers started from config.yml
- docker: python:3.13-slim + nginx, expose 8000-8006 + 9000 (html portal)
- drone: publish html (6007:9000) and MCP ports 8000-8006
- move mongo-ops docs to wiki/, add auth-server (api) and hexa (lib)
- refresh lib site builds (lib/ prefix) and collect mcp bundles
This commit is contained in:
2026-09-11 15:14:51 +05:30
parent 0e49f02c4c
commit 0c25cbb19f
609 changed files with 175303 additions and 4274 deletions

View File

@@ -16,25 +16,17 @@ volumes:
path: /var/run/docker.sock path: /var/run/docker.sock
steps: steps:
# # 🏗️ Step 1: Build static docs for all projects # 🐳 Step 1: Build Docker image
# - name: build-docs
# image: squidfunk/mkdocs-material
# commands:
# - echo "🧱 Building documentation for all projects..."
# - cd mongo-ops && mkdocs build --clean && cd ..
# - echo "✅ All docs built successfully."
# 🐳 Step 2: Build Docker image for docs site
- name: build-image - name: build-image
image: docker:24 image: docker:24
volumes: volumes:
- name: dockersock - name: dockersock
path: /var/run/docker.sock path: /var/run/docker.sock
commands: commands:
- echo "🔨 Building Docker image for docs..." - echo "🔨 Building Docker image for aetos-docs..."
- docker build -t aetos/docs:latest . - docker build -t aetos/docs:latest .
# 📤 Step 3: Push image to private registry # 📤 Step 2: Push image to private registry
- name: push-image - name: push-image
image: docker:24 image: docker:24
environment: environment:
@@ -69,12 +61,18 @@ steps:
- name: dockersock - name: dockersock
path: /var/run/docker.sock path: /var/run/docker.sock
commands: commands:
- echo "🚀 Starting container aetos/docs:latest ..." - echo "🚀 Starting aetos/docs:latest ..."
- | - |
docker run -d \ docker run -d \
--name docs \ --name docs \
-p 6007:80 \ -p 6007:9000 \
-e NODE_ENV=production \ -p 8000:8000 \
-p 8001:8001 \
-p 8002:8002 \
-p 8003:8003 \
-p 8004:8004 \
-p 8005:8005 \
-p 8006:8006 \
--restart always \ --restart always \
aetos/docs:latest aetos/docs:latest

2
.gitignore vendored
View File

@@ -1,2 +1,4 @@
.venv .venv
.idea .idea
__pycache__/
*.pyc

View File

@@ -1,36 +1,44 @@
# Stage 1: Base Nginx static server # ---------------------------------------------------------------------------
FROM nginx:1.27-alpine # aetos-docs — serves both the HTML documentation portal (nginx) and the
# per-library MCP servers (FastMCP streamable-http).
# ---------------------------------------------------------------------------
FROM python:3.13-slim
# Metadata
LABEL maintainer="Aetoskia <dev@aetoskia.com>" LABEL maintainer="Aetoskia <dev@aetoskia.com>"
LABEL description="Static documentation host for Aetoskia projects" LABEL description="Unified documentation portal and MCP server for Aetoskia projects"
# Copy custom Nginx configuration # --- system deps -----------------------------------------------------------
RUN apt-get update && \
apt-get install -y --no-install-recommends nginx && \
rm -rf /var/lib/apt/lists/*
# --- python deps -----------------------------------------------------------
WORKDIR /app
ARG PIP_USERNAME
ARG PIP_PASSWORD
ARG PIP_REPO_URL
COPY requirements.txt .
RUN pip install --no-cache-dir uv && \
uv pip install --system -r requirements.txt
# --- application files -----------------------------------------------------
COPY main.py core.py config.py collect.py config.yml ./
COPY nginx.conf /etc/nginx/conf.d/default.conf COPY nginx.conf /etc/nginx/conf.d/default.conf
RUN rm -f /etc/nginx/sites-enabled/default
# Copy Index # --- collected documentation tree -----------------------------------------
COPY ./_index /usr/share/nginx/html/ COPY _index /usr/share/nginx/html/
COPY libs /usr/share/nginx/html/libs
COPY apis /usr/share/nginx/html/apis
COPY wiki /usr/share/nginx/html/wiki
COPY tutorials /usr/share/nginx/html/tutorials
# Copy Libs # --- MCP bundles -----------------------------------------------------------
COPY ./libs/dagpipe/site /usr/share/nginx/html/libs/dagpipe/ COPY mcp /app/mcp
COPY ./libs/doc-forge/site /usr/share/nginx/html/libs/doc-forge/
COPY ./libs/mail-intake/site /usr/share/nginx/html/libs/mail-intake/
COPY ./libs/mongo-ops/site /usr/share/nginx/html/libs/mongo-ops/
COPY ./libs/omniread/site /usr/share/nginx/html/libs/omniread/
COPY ./libs/openapi-first/site /usr/share/nginx/html/libs/openapi-first/
COPY ./libs/py-jwt/site /usr/share/nginx/html/libs/py-jwt/
# Copy Apis EXPOSE 8000 8001 8002 8003 8004 8005 8006 9000
COPY ./apis/blog/site /usr/share/nginx/html/apis/blog/
# Copy Tutorials CMD ["python", "main.py"]
COPY ./tutorials/media-manager/site /usr/share/nginx/html/tutorials/media-manager/
# Expose HTTP port
EXPOSE 80
# Healthcheck
HEALTHCHECK --interval=30s --timeout=5s CMD wget -qO- http://localhost/ || exit 1
# Start Nginx
CMD ["nginx", "-g", "daemon off;"]

View File

@@ -16,202 +16,136 @@
--font-main: 'Inter', 'Roboto', sans-serif; --font-main: 'Inter', 'Roboto', sans-serif;
--font-code: 'JetBrains Mono', monospace; --font-code: 'JetBrains Mono', monospace;
} }
* { margin:0; padding:0; box-sizing:border-box; }
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body { body {
background: var(--bg); background:var(--bg); color:var(--text); font-family:var(--font-main);
color: var(--text); min-height:100vh; display:flex; flex-direction:column;
font-family: var(--font-main); align-items:center; justify-content:flex-start; padding:3rem 1.5rem;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
padding: 3rem 1.5rem;
} }
header { text-align:center; margin-bottom:3rem; }
header { h1 { font-size:2.5rem; color:var(--accent); letter-spacing:0.5px; margin-bottom:0.5rem; }
text-align: center; .subtitle { color:var(--muted); font-size:1rem; }
margin-bottom: 3rem; .badge {
display:inline-block; margin-top:0.8rem; background:#30363d; color:#fff;
padding:3px 8px; border-radius:6px; font-size:0.85rem; font-weight:600;
border:1px solid #484f58;
} }
.section { width:100%; max-width:900px; margin-bottom:2.5rem; }
h1 { .section h2 {
font-size: 2.5rem; font-size:1.2rem; color:var(--muted); text-transform:uppercase;
color: var(--accent); letter-spacing:1.5px; margin-bottom:1rem; border-bottom:1px solid var(--border);
letter-spacing: 0.5px; padding-bottom:0.4rem;
margin-bottom: 0.5rem;
} }
p {
color: var(--muted);
font-size: 1rem;
margin-bottom: 0.5rem;
}
.grid { .grid {
display: grid; display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap:1.5rem; width:100%;
gap: 1.5rem;
width: 100%;
max-width: 900px;
} }
.card { .card {
background: var(--card); background:var(--card); border:1px solid var(--border); border-radius:12px;
border: 1px solid var(--border); padding:1.8rem; text-align:left;
border-radius: 12px; transition:transform 0.15s ease,box-shadow 0.15s ease;
padding: 1.8rem;
text-align: left;
transition: transform 0.15s ease, box-shadow 0.15s ease;
} }
.card:hover { .card:hover {
transform: translateY(-4px); transform:translateY(-4px); box-shadow:0 0 20px rgba(45,212,191,0.2);
box-shadow: 0 0 20px rgba(45, 212, 191, 0.2); border-color:var(--accent);
border-color: var(--accent);
} }
.card h3 { color:var(--accent); font-size:1.4rem; margin-bottom:0.4rem; }
.card h2 { .card p { color:var(--muted); font-size:0.95rem; line-height:1.6; }
color: var(--accent);
font-size: 1.4rem;
margin-bottom: 0.4rem;
}
.card p {
color: var(--muted);
font-size: 0.95rem;
line-height: 1.6;
}
.card a { .card a {
color: var(--accent); color:var(--accent); text-decoration:none; display:inline-block;
text-decoration: none; margin-top:0.8rem; font-weight:500;
display: inline-block;
margin-top: 0.8rem;
font-weight: 500;
}
.card a:hover {
color: var(--accent-dim);
text-decoration: underline;
}
footer {
margin-top: 4rem;
text-align: center;
color: var(--muted);
font-size: 0.9rem;
} }
.card a:hover { color:var(--accent-dim); text-decoration:underline; }
footer { margin-top:4rem; text-align:center; color:var(--muted); font-size:0.9rem; }
</style> </style>
</head> </head>
<body> <body>
<header> <header>
<h1>Aetoskia Developer Docs</h1> <h1>Aetoskia Developer Docs</h1>
<p>Central documentation hub for Aetoskia projects</p> <p class="subtitle">Central documentation hub for Aetoskia projects</p>
<span style="
background: #30363d;
color: #fff;
padding: 3px 8px;
border-radius: 6px;
font-size: 0.85rem;
font-weight: 600;
border: 1px solid #484f58;
">
Build: 0.1.8
</span>
</header> </header>
<div class="grid"> <section class="section">
<div class="card"> <h2>Libraries</h2>
<h2>Mongo Ops</h2> <div class="grid">
<p> <div class="card">
A modular, async MongoDB operations layer for FastAPI microservices. <h3>OpenAPI First</h3>
Simplifies CRUD, transactions, and model management. <p>Design-first API development toolkit enforcing OpenAPI contracts as the single source of truth.</p>
</p> <a href="/libs/openapi-first/" target="_blank">View Documentation &rarr;</a>
<a href="/libs/mongo-ops/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Blog API</h2>
<p>
A modular, async Blog API backend for FastAPI microservices.
Provides streamlined CRUD operations for articles and authors, supports nested author details within article endpoints, and enables simple association management between content and contributors.
</p>
<a href="/apis/blog/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Media Manager Tutorial</h2>
<p>
Step-by-step guide to the Media Manager architecture, ingestion pipeline,
automation workflows, and integration with Radarr, Sonarr, and your custom
dashboard services.
</p>
<a href="/tutorials/media-manager/" target="_blank">View Tutorial →</a>
</div>
<div class="card">
<h2>Doc Forge</h2>
<p>
Renderer-agnostic Python documentation compiler powering MkDocs and MCP
generation across Aetoskia projects.
</p>
<a href="/libs/doc-forge/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>DAG Pipe</h2>
<p>
Deterministic pipeline framework for executing state transformations through a directed acyclic graph (DAG).
Each node receives an immutable state and emits derived states for downstream processing.
</p>
<a href="/libs/dagpipe/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Mail Intake</h2>
<p>
High-performance email ingestion and processing framework with pluggable
adapters and automation workflows.
</p>
<a href="/libs/mail-intake/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Omniread</h2>
<p>
Unified ingestion and normalization layer for structured and unstructured
data sources.
</p>
<a href="/libs/omniread/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>OpenAPI First</h2>
<p>
Design-first API development toolkit enforcing OpenAPI contracts as the
single source of truth.
</p>
<a href="/libs/openapi-first/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Py JWT</h2>
<p>
Lightweight, explicit JWT utilities for Python services with strong
validation and minimal magic.
</p>
<a href="/libs/py-jwt/" target="_blank">View Documentation →</a>
</div>
</div> </div>
<div class="card">
<h3>Doc Forge</h3>
<p>Renderer-agnostic Python documentation compiler powering MkDocs and MCP generation across Aetoskia projects.</p>
<a href="/libs/doc-forge/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>DAG Pipe</h3>
<p>Deterministic pipeline framework for executing state transformations through a directed acyclic graph (DAG).</p>
<a href="/libs/dagpipe/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Mail Intake</h3>
<p>High-performance email ingestion and processing framework with pluggable adapters and automation workflows.</p>
<a href="/libs/mail-intake/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Omniread</h3>
<p>Unified ingestion and normalization layer for structured and unstructured data sources.</p>
<a href="/libs/omniread/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Py JWT</h3>
<p>Lightweight, explicit JWT utilities for Python services with strong validation and minimal magic.</p>
<a href="/libs/py-jwt/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Hexa</h3>
<p>Hexagonal architecture framework and toolbox for Python services.</p>
<a href="/libs/hexa/" target="_blank">View Documentation &rarr;</a>
</div>
</div>
</section>
<section class="section">
<h2>APIs</h2>
<div class="grid">
<div class="card">
<h3>Auth Server</h3>
<p>Aetoskia authentication service. OpenAPI-driven, FastAPI backend for auth flows.</p>
<a href="/apis/auth-server/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Blog API</h3>
<p>A modular, async Blog API backend for FastAPI microservices. Provides streamlined CRUD operations for articles and authors.</p>
<a href="/apis/blog/" target="_blank">View Documentation &rarr;</a>
</div>
</div>
</section>
<section class="section">
<h2>Wiki</h2>
<div class="grid">
<div class="card">
<h3>Mongo Ops</h3>
<p>A modular, async MongoDB operations layer for FastAPI microservices. Simplifies CRUD, transactions, and model management.</p>
<a href="/wiki/mongo-ops/" target="_blank">View Documentation &rarr;</a>
</div>
</div>
</section>
<section class="section">
<h2>Tutorials</h2>
<div class="grid">
<div class="card">
<h3>Media Manager Tutorial</h3>
<p>Step-by-step guide to the Media Manager architecture, ingestion pipeline, automation workflows, and integrations.</p>
<a href="/tutorials/media-manager/" target="_blank">View Tutorial &rarr;</a>
</div>
</div>
</section>
<footer> <footer>
© 2025 Aetoskia Developer Network — Built with ❤️ on Raspberry Pi &copy; 2025 Aetoskia Developer Network
</footer> </footer>
</body> </body>
</html> </html>

View File

@@ -0,0 +1,309 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="
The Aetoskia Authentication Service.
Provides identity, access control, and JWT token issuance for the Aetoskia
ecosystem. Fully async, built with FastAPI and MongoDB.
">
<meta name="author" content="Aetoskia Dev Team">
<link rel="icon" href="/assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>Aetoskia Auth Server</title>
<link rel="stylesheet" href="/assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="/assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Inter";--md-code-font:"JetBrains Mono"}</style>
<link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="deep-purple" data-md-color-accent="cyan">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="/." title="Aetoskia Auth Server" class="md-header__button md-logo" aria-label="Aetoskia Auth Server" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3C7.58 3 4 4.79 4 7s3.58 4 8 4 8-1.79 8-4-3.58-4-8-4M4 9v3c0 2.21 3.58 4 8 4s8-1.79 8-4V9c0 2.21-3.58 4-8 4s-8-1.79-8-4m0 5v3c0 2.21 3.58 4 8 4s8-1.79 8-4v-3c0 2.21-3.58 4-8 4s-8-1.79-8-4"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Aetoskia Auth Server
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="deep-purple" data-md-color-accent="cyan" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--integrated" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="/." title="Aetoskia Auth Server" class="md-nav__button md-logo" aria-label="Aetoskia Auth Server" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3C7.58 3 4 4.79 4 7s3.58 4 8 4 8-1.79 8-4-3.58-4-8-4M4 9v3c0 2.21 3.58 4 8 4s8-1.79 8-4V9c0 2.21-3.58 4-8 4s-8-1.79-8-4m0 5v3c0 2.21 3.58 4 8 4s8-1.79 8-4v-3c0 2.21-3.58 4-8 4s-8-1.79-8-4"/></svg>
</a>
Aetoskia Auth Server
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/api/" class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>404 - Not found</h1>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "/", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest", "toc.integrate", "header.autohide", "announce.dismiss", "footer.social", "content.code.select", "content.code.line_numbers", "content.tooltips"], "search": "/assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="/assets/javascripts/bundle.f55a23d4.min.js"></script>
</body>
</html>

View File

@@ -0,0 +1,234 @@
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width,initial-scale=1" name="viewport"/>
<meta content="
The Aetoskia Authentication Service.
Provides identity, access control, and JWT token issuance for the Aetoskia
ecosystem. Fully async, built with FastAPI and MongoDB.
" name="description"/>
<meta content="Aetoskia Dev Team" name="author"/>
<link href="../assets/images/favicon.png" rel="icon"/>
<meta content="mkdocs-1.6.1, mkdocs-material-9.6.23" name="generator"/>
<title>Home - Aetoskia Auth Server</title>
<link href="../assets/stylesheets/main.84d31ad4.min.css" rel="stylesheet"/>
<link href="../assets/stylesheets/palette.06af60db.min.css" rel="stylesheet"/>
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
<link href="https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&amp;display=fallback" rel="stylesheet"/>
<style>:root{--md-text-font:"Inter";--md-code-font:"JetBrains Mono"}</style>
<link href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css" rel="stylesheet"/>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body data-md-color-accent="cyan" data-md-color-primary="deep-purple" data-md-color-scheme="slate" dir="ltr">
<input autocomplete="off" class="md-toggle" data-md-toggle="drawer" id="__drawer" type="checkbox"/>
<input autocomplete="off" class="md-toggle" data-md-toggle="search" id="__search" type="checkbox"/>
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a class="md-skip" href="#api-reference">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav aria-label="Header" class="md-header__inner md-grid">
<a aria-label="Aetoskia Auth Server" class="md-header__button md-logo" data-md-component="logo" href=".." title="Aetoskia Auth Server">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 3C7.58 3 4 4.79 4 7s3.58 4 8 4 8-1.79 8-4-3.58-4-8-4M4 9v3c0 2.21 3.58 4 8 4s8-1.79 8-4V9c0 2.21-3.58 4-8 4s-8-1.79-8-4m0 5v3c0 2.21 3.58 4 8 4s8-1.79 8-4v-3c0 2.21-3.58 4-8 4s-8-1.79-8-4"></path></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"></path></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Aetoskia Auth Server
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Home
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input aria-hidden="true" class="md-option" data-md-color-accent="cyan" data-md-color-media="" data-md-color-primary="deep-purple" data-md-color-scheme="slate" id="__palette_0" name="__palette" type="radio"/>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input aria-label="Search" autocapitalize="off" autocomplete="off" autocorrect="off" class="md-search__input" data-md-component="search-query" name="query" placeholder="Search" required="" spellcheck="false" type="text"/>
<label class="md-search__icon md-icon" for="__search">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"></path></svg>
</label>
<nav aria-label="Search" class="md-search__options">
<a aria-label="Share" class="md-search__icon md-icon" data-clipboard="" data-clipboard-text="" data-md-component="search-share" href="javascript:void(0)" tabindex="-1" title="Share">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"></path></svg>
</a>
<button aria-label="Clear" class="md-search__icon md-icon" tabindex="-1" title="Clear" type="reset">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix="" tabindex="0">
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav aria-label="Navigation" class="md-nav md-nav--primary md-nav--integrated" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a aria-label="Aetoskia Auth Server" class="md-nav__button md-logo" data-md-component="logo" href=".." title="Aetoskia Auth Server">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 3C7.58 3 4 4.79 4 7s3.58 4 8 4 8-1.79 8-4-3.58-4-8-4M4 9v3c0 2.21 3.58 4 8 4s8-1.79 8-4V9c0 2.21-3.58 4-8 4s-8-1.79-8-4m0 5v3c0 2.21 3.58 4 8 4s8-1.79 8-4v-3c0 2.21-3.58 4-8 4s-8-1.79-8-4"></path></svg>
</a>
Aetoskia Auth Server
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" id="__toc" type="checkbox"/>
<a class="md-nav__link md-nav__link--active" href="./">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="api-reference">API Reference</h1>
<p><iframe class="swagger-ui-iframe" frameborder="0" id="59bba1e2" onload="this.style.display = 'block'; this.style.overflow = 'hidden'; this.style.width = '100%';" src="swagger-59bba1e2.html" style="display:none;" width="100%"></iframe></p>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button class="md-top md-icon" data-md-component="top" hidden="" type="button">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"></path></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" rel="noopener" target="_blank">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest", "toc.integrate", "header.autohide", "announce.dismiss", "footer.social", "content.code.select", "content.code.line_numbers", "content.tooltips"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script>
<script>document$.subscribe(() => {
window.update_swagger_ui_iframe_height = function (id) {
var iFrameID = document.getElementById(id);
if (iFrameID) {
full_height = (iFrameID.contentWindow.document.body.scrollHeight + 80) + "px";
iFrameID.height = full_height;
iFrameID.style.height = full_height;
}
}
let iframe_id_list = []
var iframes = document.getElementsByClassName("swagger-ui-iframe");
for (var i = 0; i < iframes.length; i++) {
iframe_id_list.push(iframes[i].getAttribute("id"))
}
let ticking = false;
document.addEventListener('scroll', function(e) {
if (!ticking) {
window.requestAnimationFrame(()=> {
let half_vh = window.innerHeight/2;
for(var i = 0; i < iframe_id_list.length; i++) {
let element = document.getElementById(iframe_id_list[i])
if(element==null){
return
}
let diff = element.getBoundingClientRect().top
if(element.contentWindow.update_top_val){
element.contentWindow.update_top_val(half_vh - diff)
}
}
ticking = false;
});
ticking = true;
}
});
const dark_scheme_name = "slate"
const schemeAttr = document.body.getAttribute("data-md-color-scheme");
const isMediaPrefersScheme = document.body.getAttribute("data-md-color-media") === "(prefers-color-scheme: dark)";
if (!isMediaPrefersScheme) {
window.__init_is_dark_mode = (schemeAttr === dark_scheme_name);
} else {
const computedScheme = window.getComputedStyle(document.body).getPropertyValue('color-scheme');
window.__init_is_dark_mode = computedScheme === "dark";
}
const options = {
attributeFilter: ['data-md-color-scheme'],
};
function color_scheme_callback(mutations) {
for (let mutation of mutations) {
if (mutation.attributeName === "data-md-color-scheme") {
scheme = document.body.getAttribute("data-md-color-scheme")
var iframe_list = document.getElementsByClassName("swagger-ui-iframe")
for(var i = 0; i < iframe_list.length; i++) {
var ele = iframe_list.item(i);
if (ele) {
if (scheme === dark_scheme_name) {
ele.contentWindow.enable_dark_mode();
} else {
ele.contentWindow.disable_dark_mode();
}
}
}
}
}
}
observer = new MutationObserver(color_scheme_callback);
observer.observe(document.body, options);
})</script></body>
</html>

View File

@@ -0,0 +1,562 @@
{
"openapi": "3.1.0",
"info": {
"title": "Aetoskia Auth Server",
"description": "\n The Aetoskia Authentication Service.\n\n Provides identity, access control, and JWT token issuance for the Aetoskia\n ecosystem. Fully async, built with FastAPI and MongoDB.\n ",
"termsOfService": "https://aetoskia.com/terms",
"contact": {
"name": "Aetoskia Dev Team",
"url": "https://dev.aetoskia.com/contact",
"email": "dev@aetoskia.com"
},
"license": {
"name": "MIT License",
"url": "https://opensource.org/licenses/MIT"
},
"version": "0.0.5"
},
"servers": [
{
"url": "https://auth.aetoskia.com",
"description": "Production Authentication Service"
},
{
"url": "http://server-pi:9002",
"description": "Internal staging environment"
},
{
"url": "http://localhost:8000",
"description": "Local development server"
}
],
"paths": {
"/register": {
"post": {
"tags": [
"Auth"
],
"summary": "Register a new user",
"description": "Creates a new user account and returns the public user profile.",
"operationId": "create_user_register_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RegisterRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PublicUser"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/login": {
"post": {
"tags": [
"Auth"
],
"summary": "Login user",
"description": "Authenticates a user and issues a JWT access token.",
"operationId": "login_login_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LoginRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LoginResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/me": {
"get": {
"tags": [
"Auth"
],
"summary": "Get current user",
"description": "Returns the currently authenticated user's public profile.",
"operationId": "read_users_me_me_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PublicUser"
}
}
}
}
},
"security": [
{
"HTTPBearer": []
}
]
}
},
"/logout": {
"post": {
"tags": [
"Auth"
],
"summary": "Logout user",
"description": "Stateless logout endpoint. The client must discard the JWT access token.",
"operationId": "logout_logout_post",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LogoutResponse"
}
}
}
}
},
"security": [
{
"HTTPBearer": []
}
]
}
},
"/introspect": {
"post": {
"tags": [
"Auth",
"Internal"
],
"summary": "Token introspection (internal)",
"description": "Internal service-to-service endpoint for verifying JWTs. Not intended for direct client use.",
"operationId": "introspect_introspect_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/IntrospectRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/IntrospectResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/health": {
"get": {
"tags": [
"Health"
],
"summary": "Health Check",
"operationId": "health_check_health_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
}
}
}
}
},
"components": {
"schemas": {
"HTTPValidationError": {
"properties": {
"detail": {
"items": {
"$ref": "#/components/schemas/ValidationError"
},
"type": "array",
"title": "Detail"
}
},
"type": "object",
"title": "HTTPValidationError"
},
"IntrospectRequest": {
"properties": {
"token": {
"type": "string",
"title": "Token",
"description": "JWT access token to introspect",
"examples": [
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
]
}
},
"type": "object",
"required": [
"token"
],
"title": "IntrospectRequest",
"description": "Payload for requesting token introspection.\n\nUsed by internal services to verify the validity of a JWT and retrieve\nthe associated public user information.\n\nFields:\n token: JWT access token to introspect.\n\nNotes:\n - Intended for service-to-service communication.\n - Not meant for direct end-user consumption.",
"example": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
},
"IntrospectResponse": {
"properties": {
"active": {
"type": "boolean",
"title": "Active",
"description": "Indicates whether the provided token is valid and active",
"examples": [
true,
false
]
},
"user": {
"anyOf": [
{
"$ref": "#/components/schemas/PublicUser"
},
{
"type": "null"
}
],
"description": "Public user details if the token is valid; null otherwise"
}
},
"type": "object",
"required": [
"active"
],
"title": "IntrospectResponse",
"description": "Result of a token introspection operation.\n\nThis model communicates whether a JWT is valid and, if so, provides\nthe associated public user information.\n\nFields:\n active: Indicates whether the token is valid and active.\n user: Public user details if the token is valid; otherwise null.\n\nNotes:\n - This model is designed to avoid raising exceptions.\n - All introspection outcomes are represented as data.",
"example": {
"active": true,
"user": {
"email": "tester@example.com",
"is_active": true,
"username": "tester"
}
}
},
"LoginRequest": {
"properties": {
"password": {
"type": "string",
"minLength": 6,
"title": "Password",
"description": "User password (minimum 6 characters). Stored only as a hash.",
"examples": [
"SuperSecure123"
]
},
"username": {
"type": "string",
"maxLength": 50,
"minLength": 3,
"title": "Username",
"description": "Unique username used for authentication and display",
"examples": [
"tester"
]
},
"email": {
"anyOf": [
{
"type": "string",
"format": "email"
},
{
"type": "null"
}
],
"title": "Email",
"description": "Primary email address associated with the account",
"examples": [
"tester@example.com"
]
}
},
"type": "object",
"required": [
"password",
"username"
],
"title": "LoginRequest",
"description": "Payload for authenticating a user and issuing a JWT.\n\nThis model is used to verify user credentials and request an access token.\n\nFields:\n username: Username identifier.\n password: Plain-text password to be verified.\n\nNotes:\n - Successful authentication results in a LoginResponse.\n - Failed authentication raises an AuthError.",
"example": {
"password": "SuperSecure123",
"username": "tester"
}
},
"LoginResponse": {
"properties": {
"access_token": {
"type": "string",
"title": "Access Token",
"description": "JWT access token to be used for authenticated requests",
"examples": [
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
]
},
"user": {
"$ref": "#/components/schemas/PublicUser",
"description": "Authenticated user's public profile"
}
},
"type": "object",
"required": [
"access_token",
"user"
],
"title": "LoginResponse",
"description": "Response returned after successful authentication.\n\nContains the issued JWT access token and the authenticated user's\npublic profile.\n\nFields:\n access_token: JWT access token for authenticated requests.\n user: Public profile of the authenticated user.\n\nNotes:\n - The token is stateless and must be stored client-side.\n - Token expiration and validation are handled elsewhere.",
"example": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"email": "tester@example.com",
"is_active": true,
"username": "tester"
}
}
},
"LogoutResponse": {
"properties": {
"message": {
"type": "string",
"title": "Message",
"description": "Human-readable logout confirmation message",
"examples": [
"Successfully logged out"
]
}
},
"type": "object",
"required": [
"message"
],
"title": "LogoutResponse",
"description": "Response returned after a logout operation.\n\nSince logout is stateless, this response serves only as a confirmation\nmessage instructing the client to discard its token.\n\nFields:\n message: Human-readable logout confirmation.",
"example": {
"message": "Successfully logged out"
}
},
"PublicUser": {
"properties": {
"is_active": {
"type": "boolean",
"title": "Is Active",
"description": "Indicates whether the account is active and allowed to authenticate",
"default": true,
"examples": [
true
]
},
"username": {
"type": "string",
"maxLength": 50,
"minLength": 3,
"title": "Username",
"description": "Unique username used for authentication and display",
"examples": [
"tester"
]
},
"email": {
"anyOf": [
{
"type": "string",
"format": "email"
},
{
"type": "null"
}
],
"title": "Email",
"description": "Primary email address associated with the account",
"examples": [
"tester@example.com"
]
}
},
"type": "object",
"required": [
"username"
],
"title": "PublicUser",
"description": "Public-facing user representation returned by authentication APIs.\n\nThis model represents a user profile that is safe to expose outside\nthe authentication system.\n\nFields:\n username: Unique username identifier.\n email: User's email address.\n is_active: Whether the user account is active.\n\nNotes:\n - Contains no sensitive data.\n - Can be constructed from persistence models via `from_attributes`.",
"example": {
"email": "tester@example.com",
"is_active": true,
"username": "tester"
}
},
"RegisterRequest": {
"properties": {
"password": {
"type": "string",
"minLength": 6,
"title": "Password",
"description": "User password (minimum 6 characters). Stored only as a hash.",
"examples": [
"SuperSecure123"
]
},
"username": {
"type": "string",
"maxLength": 50,
"minLength": 3,
"title": "Username",
"description": "Unique username used for authentication and display",
"examples": [
"tester"
]
},
"email": {
"anyOf": [
{
"type": "string",
"format": "email"
},
{
"type": "null"
}
],
"title": "Email",
"description": "Primary email address associated with the account",
"examples": [
"tester@example.com"
]
}
},
"type": "object",
"required": [
"password",
"username"
],
"title": "RegisterRequest",
"description": "Payload for registering a new user account.\n\nThis model contains the minimum required identity and credential\ninformation to create a new user.\n\nFields:\n username: Unique username identifier.\n email: User's email address.\n password: Plain-text password (to be hashed by the repository layer).\n\nNotes:\n - Validation and normalization handled by mixins.\n - This model is never returned in responses.",
"example": {
"email": "tester@example.com",
"password": "SuperSecure123",
"username": "tester"
}
},
"ValidationError": {
"properties": {
"loc": {
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
]
},
"type": "array",
"title": "Location"
},
"msg": {
"type": "string",
"title": "Message"
},
"type": {
"type": "string",
"title": "Error Type"
}
},
"type": "object",
"required": [
"loc",
"msg",
"type"
],
"title": "ValidationError"
}
},
"securitySchemes": {
"HTTPBearer": {
"type": "http",
"scheme": "bearer"
}
}
},
"tags": [
{
"name": "Auth",
"description": "Login, registration, token issuance, refresh, and identity operations."
},
{
"name": "Health",
"description": "Service health and diagnostics."
}
]
}

View File

@@ -0,0 +1,120 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Swagger UI</title>
<link rel="stylesheet" type="text/css" href="../assets/stylesheets/swagger-ui.css" />
<link rel="stylesheet" type="text/css" id="slate-css" media="none" href="../assets/stylesheets/swagger-ui-dark.css" />
</head>
<body style="overflow:hidden;">
<div id="swagger-ui"></div>
<script src="../assets/javascripts/swagger-ui-bundle.js" charset="UTF-8"> </script>
<script src="../assets/javascripts/swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
<script>
window.onload = function () {
window.ui = SwaggerUIBundle({
dom_id: "#swagger-ui",
onComplete: onComplete,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
url: "openapi.json",
"oauth2RedirectUrl": new URL("../assets/swagger-ui/oauth2-redirect.html",window.location.href).href,
"validatorUrl": "none",
"docExpansion": "list",
"filter": false,
"tryItOutEnabled": false,
"supportedSubmitMethods": [
"get",
"put",
"post",
"delete",
"options",
"head",
"patch",
"trace"
],
"validatorUrl": "none",
"extra_css": [],
"dark_scheme_name": "slate",
"filter_files": [],
"syntaxHighlight.theme": "agate"
})
if (parent.__init_is_dark_mode) {
enable_dark_mode();
}
}
enable_dark_mode = function(){
document.getElementById("slate-css").media = ""
}
disable_dark_mode = function(){
document.getElementById("slate-css").media = "none"
}
const resize_ob = new ResizeObserver(function(entries) {
parent.update_swagger_ui_iframe_height("59bba1e2");
});
// start observing for resizing
resize_ob.observe(document.querySelector("body"));
// authorize modal position
var modal_top = 0;
const mutation_ob = new MutationObserver(function (mutations) {
if(mutations && mutations[0].addedNodes && mutations[0].addedNodes.length > 0){
update_modal_top()
}
});
onComplete = function(){
// start observing for auth-wrapper after Swagger UI loaded
const div = document.querySelector("div.auth-wrapper");
if(div){
mutation_ob.observe(div, {
childList: true,
});
}
}
update_top_val = function(top){
modal_top = top
update_modal_top()
}
update_modal_top = function(){
let modal_list = document.getElementsByClassName('modal-ux')
if(modal_list.length > 0){
let modal = modal_list.item(0)
const modal_height = modal.offsetHeight
const padding = 60
min = parseInt(modal_height/2 + padding)
max = document.body.scrollHeight - min + padding
if (modal_top < min) {
modal.style.top = `${min}px`
} else if (modal_top > max) {
modal.style.top = `${max}px`
} else {
modal.style.top = `${modal_top}px`
}
}
}
</script>
</body>
</html>

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,849 @@
a { color: #8c8cfa; }
::-webkit-scrollbar-track-piece { background-color: rgba(255, 255, 255, .2) !important; }
::-webkit-scrollbar-track { background-color: rgba(255, 255, 255, .3) !important; }
::-webkit-scrollbar-thumb { background-color: rgba(255, 255, 255, .5) !important; }
embed[type="application/pdf"] { filter: invert(90%); }
html {
background: #1e2129 !important;
box-sizing: border-box;
filter: contrast(100%) brightness(100%) saturate(100%);
overflow-y: scroll;
}
body {
background: #1e2129;
background-color: #1e2129;
background-image: none !important;
}
button, input, select, textarea {
background-color: #1e2129;
color: #bfbfbf;
}
font, html { color: #bfbfbf; }
.swagger-ui, .swagger-ui section h3 { color: rgb(233, 235, 252); }
.swagger-ui a { background-color: transparent; }
.swagger-ui mark {
background-color: #664b00;
color: #bfbfbf;
}
.swagger-ui legend { color: inherit; }
.swagger-ui .debug * { outline: #e6da99 solid 1px; }
.swagger-ui .debug-white * { outline: #fff solid 1px; }
.swagger-ui .debug-black * { outline: #bfbfbf solid 1px; }
.swagger-ui .debug-grid { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) 0 0; }
.swagger-ui .debug-grid-16 { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) 0 0; }
.swagger-ui .debug-grid-8-solid { background: url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) 0 0 #1e2129; }
.swagger-ui .debug-grid-16-solid { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) 0 0 #1e2129; }
.swagger-ui .b--black { border-color: #000; }
.swagger-ui .b--near-black { border-color: #121212; }
.swagger-ui .b--dark-gray { border-color: #333; }
.swagger-ui .b--mid-gray { border-color: #545454; }
.swagger-ui .b--gray { border-color: #787878; }
.swagger-ui .b--silver { border-color: #999; }
.swagger-ui .b--light-silver { border-color: #6e6e6e; }
.swagger-ui .b--moon-gray { border-color: #4d4d4d; }
.swagger-ui .b--light-gray { border-color: #2b2b2b; }
.swagger-ui .b--near-white { border-color: #242424; }
.swagger-ui .b--white { border-color: #1e2129; }
.swagger-ui .b--white-90 { border-color: rgba(46, 48, 62, .9); }
.swagger-ui .b--white-80 { border-color: rgba(46, 48, 62, .8); }
.swagger-ui .b--white-70 { border-color: rgba(46, 48, 62, .7); }
.swagger-ui .b--white-60 { border-color: rgba(46, 48, 62, .6); }
.swagger-ui .b--white-50 { border-color: rgba(46, 48, 62, .5); }
.swagger-ui .b--white-40 { border-color: rgba(46, 48, 62, .4); }
.swagger-ui .b--white-30 { border-color: rgba(46, 48, 62, .3); }
.swagger-ui .b--white-20 { border-color: rgba(46, 48, 62, .2); }
.swagger-ui .b--white-10 { border-color: rgba(46, 48, 62, .1); }
.swagger-ui .b--white-05 { border-color: rgba(46, 48, 62, .05); }
.swagger-ui .b--white-025 { border-color: rgba(46, 48, 62, .024); }
.swagger-ui .b--white-0125 { border-color: rgba(46, 48, 62, .01); }
.swagger-ui .b--black-90 { border-color: rgba(0, 0, 0, .9); }
.swagger-ui .b--black-80 { border-color: rgba(0, 0, 0, .8); }
.swagger-ui .b--black-70 { border-color: rgba(0, 0, 0, .7); }
.swagger-ui .b--black-60 { border-color: rgba(0, 0, 0, .6); }
.swagger-ui .b--black-50 { border-color: rgba(0, 0, 0, .5); }
.swagger-ui .b--black-40 { border-color: rgba(0, 0, 0, .4); }
.swagger-ui .b--black-30 { border-color: rgba(0, 0, 0, .3); }
.swagger-ui .b--black-20 { border-color: rgba(0, 0, 0, .2); }
.swagger-ui .b--black-10 { border-color: rgba(0, 0, 0, .1); }
.swagger-ui .b--black-05 { border-color: rgba(0, 0, 0, .05); }
.swagger-ui .b--black-025 { border-color: rgba(0, 0, 0, .024); }
.swagger-ui .b--black-0125 { border-color: rgba(0, 0, 0, .01); }
.swagger-ui .b--dark-red { border-color: #bc2f36; }
.swagger-ui .b--red { border-color: #c83932; }
.swagger-ui .b--light-red { border-color: #ab3c2b; }
.swagger-ui .b--orange { border-color: #cc6e33; }
.swagger-ui .b--purple { border-color: #5e2ca5; }
.swagger-ui .b--light-purple { border-color: #672caf; }
.swagger-ui .b--dark-pink { border-color: #ab2b81; }
.swagger-ui .b--hot-pink { border-color: #c03086; }
.swagger-ui .b--pink { border-color: #8f2464; }
.swagger-ui .b--light-pink { border-color: #721d4d; }
.swagger-ui .b--dark-green { border-color: #1c6e50; }
.swagger-ui .b--green { border-color: #279b70; }
.swagger-ui .b--light-green { border-color: #228762; }
.swagger-ui .b--navy { border-color: #0d1d35; }
.swagger-ui .b--dark-blue { border-color: #20497e; }
.swagger-ui .b--blue { border-color: #4380d0; }
.swagger-ui .b--light-blue { border-color: #20517e; }
.swagger-ui .b--lightest-blue { border-color: #143a52; }
.swagger-ui .b--washed-blue { border-color: #0c312d; }
.swagger-ui .b--washed-green { border-color: #0f3d2c; }
.swagger-ui .b--washed-red { border-color: #411010; }
.swagger-ui .b--transparent { border-color: transparent; }
.swagger-ui .b--gold, .swagger-ui .b--light-yellow, .swagger-ui .b--washed-yellow, .swagger-ui .b--yellow { border-color: #664b00; }
.swagger-ui .shadow-1 { box-shadow: rgba(0, 0, 0, .2) 0 0 4px 2px; }
.swagger-ui .shadow-2 { box-shadow: rgba(0, 0, 0, .2) 0 0 8px 2px; }
.swagger-ui .shadow-3 { box-shadow: rgba(0, 0, 0, .2) 2px 2px 4px 2px; }
.swagger-ui .shadow-4 { box-shadow: rgba(0, 0, 0, .2) 2px 2px 8px 0; }
.swagger-ui .shadow-5 { box-shadow: rgba(0, 0, 0, .2) 4px 4px 8px 0; }
@media screen and (min-width: 30em) {
.swagger-ui .shadow-1-ns { box-shadow: rgba(0, 0, 0, .2) 0 0 4px 2px; }
.swagger-ui .shadow-2-ns { box-shadow: rgba(0, 0, 0, .2) 0 0 8px 2px; }
.swagger-ui .shadow-3-ns { box-shadow: rgba(0, 0, 0, .2) 2px 2px 4px 2px; }
.swagger-ui .shadow-4-ns { box-shadow: rgba(0, 0, 0, .2) 2px 2px 8px 0; }
.swagger-ui .shadow-5-ns { box-shadow: rgba(0, 0, 0, .2) 4px 4px 8px 0; }
}
@media screen and (max-width: 60em) and (min-width: 30em) {
.swagger-ui .shadow-1-m { box-shadow: rgba(0, 0, 0, .2) 0 0 4px 2px; }
.swagger-ui .shadow-2-m { box-shadow: rgba(0, 0, 0, .2) 0 0 8px 2px; }
.swagger-ui .shadow-3-m { box-shadow: rgba(0, 0, 0, .2) 2px 2px 4px 2px; }
.swagger-ui .shadow-4-m { box-shadow: rgba(0, 0, 0, .2) 2px 2px 8px 0; }
.swagger-ui .shadow-5-m { box-shadow: rgba(0, 0, 0, .2) 4px 4px 8px 0; }
}
@media screen and (min-width: 60em) {
.swagger-ui .shadow-1-l { box-shadow: rgba(0, 0, 0, .2) 0 0 4px 2px; }
.swagger-ui .shadow-2-l { box-shadow: rgba(0, 0, 0, .2) 0 0 8px 2px; }
.swagger-ui .shadow-3-l { box-shadow: rgba(0, 0, 0, .2) 2px 2px 4px 2px; }
.swagger-ui .shadow-4-l { box-shadow: rgba(0, 0, 0, .2) 2px 2px 8px 0; }
.swagger-ui .shadow-5-l { box-shadow: rgba(0, 0, 0, .2) 4px 4px 8px 0; }
}
.swagger-ui .black-05 { color: rgba(191, 191, 191, .05); }
.swagger-ui .bg-black-05 { background-color: rgba(0, 0, 0, .05); }
.swagger-ui .black-90, .swagger-ui .hover-black-90:focus, .swagger-ui .hover-black-90:hover { color: rgba(191, 191, 191, .9); }
.swagger-ui .black-80, .swagger-ui .hover-black-80:focus, .swagger-ui .hover-black-80:hover { color: rgba(191, 191, 191, .8); }
.swagger-ui .black-70, .swagger-ui .hover-black-70:focus, .swagger-ui .hover-black-70:hover { color: rgba(191, 191, 191, .7); }
.swagger-ui .black-60, .swagger-ui .hover-black-60:focus, .swagger-ui .hover-black-60:hover { color: rgba(191, 191, 191, .6); }
.swagger-ui .black-50, .swagger-ui .hover-black-50:focus, .swagger-ui .hover-black-50:hover { color: rgba(191, 191, 191, .5); }
.swagger-ui .black-40, .swagger-ui .hover-black-40:focus, .swagger-ui .hover-black-40:hover { color: rgba(191, 191, 191, .4); }
.swagger-ui .black-30, .swagger-ui .hover-black-30:focus, .swagger-ui .hover-black-30:hover { color: rgba(191, 191, 191, .3); }
.swagger-ui .black-20, .swagger-ui .hover-black-20:focus, .swagger-ui .hover-black-20:hover { color: rgba(191, 191, 191, .2); }
.swagger-ui .black-10, .swagger-ui .hover-black-10:focus, .swagger-ui .hover-black-10:hover { color: rgba(191, 191, 191, .1); }
.swagger-ui .hover-white-90:focus, .swagger-ui .hover-white-90:hover, .swagger-ui .white-90 { color: rgba(255, 255, 255, .9); }
.swagger-ui .hover-white-80:focus, .swagger-ui .hover-white-80:hover, .swagger-ui .white-80 { color: rgba(255, 255, 255, .8); }
.swagger-ui .hover-white-70:focus, .swagger-ui .hover-white-70:hover, .swagger-ui .white-70 { color: rgba(255, 255, 255, .7); }
.swagger-ui .hover-white-60:focus, .swagger-ui .hover-white-60:hover, .swagger-ui .white-60 { color: rgba(255, 255, 255, .6); }
.swagger-ui .hover-white-50:focus, .swagger-ui .hover-white-50:hover, .swagger-ui .white-50 { color: rgba(255, 255, 255, .5); }
.swagger-ui .hover-white-40:focus, .swagger-ui .hover-white-40:hover, .swagger-ui .white-40 { color: rgba(255, 255, 255, .4); }
.swagger-ui .hover-white-30:focus, .swagger-ui .hover-white-30:hover, .swagger-ui .white-30 { color: rgba(255, 255, 255, .3); }
.swagger-ui .hover-white-20:focus, .swagger-ui .hover-white-20:hover, .swagger-ui .white-20 { color: rgba(255, 255, 255, .2); }
.swagger-ui .hover-white-10:focus, .swagger-ui .hover-white-10:hover, .swagger-ui .white-10 { color: rgba(255, 255, 255, .1); }
.swagger-ui .hover-moon-gray:focus, .swagger-ui .hover-moon-gray:hover, .swagger-ui .moon-gray { color: #ccc; }
.swagger-ui .hover-light-gray:focus, .swagger-ui .hover-light-gray:hover, .swagger-ui .light-gray { color: #ededed; }
.swagger-ui .hover-near-white:focus, .swagger-ui .hover-near-white:hover, .swagger-ui .near-white { color: #f5f5f5; }
.swagger-ui .dark-red, .swagger-ui .hover-dark-red:focus, .swagger-ui .hover-dark-red:hover { color: #e6999d; }
.swagger-ui .hover-red:focus, .swagger-ui .hover-red:hover, .swagger-ui .red { color: #e69d99; }
.swagger-ui .hover-light-red:focus, .swagger-ui .hover-light-red:hover, .swagger-ui .light-red { color: #e6a399; }
.swagger-ui .hover-orange:focus, .swagger-ui .hover-orange:hover, .swagger-ui .orange { color: #e6b699; }
.swagger-ui .gold, .swagger-ui .hover-gold:focus, .swagger-ui .hover-gold:hover { color: #e6d099; }
.swagger-ui .hover-yellow:focus, .swagger-ui .hover-yellow:hover, .swagger-ui .yellow { color: #e6da99; }
.swagger-ui .hover-light-yellow:focus, .swagger-ui .hover-light-yellow:hover, .swagger-ui .light-yellow { color: #ede6b6; }
.swagger-ui .hover-purple:focus, .swagger-ui .hover-purple:hover, .swagger-ui .purple { color: #b99ae4; }
.swagger-ui .hover-light-purple:focus, .swagger-ui .hover-light-purple:hover, .swagger-ui .light-purple { color: #bb99e6; }
.swagger-ui .dark-pink, .swagger-ui .hover-dark-pink:focus, .swagger-ui .hover-dark-pink:hover { color: #e699cc; }
.swagger-ui .hot-pink, .swagger-ui .hover-hot-pink:focus, .swagger-ui .hover-hot-pink:hover, .swagger-ui .hover-pink:focus, .swagger-ui .hover-pink:hover, .swagger-ui .pink { color: #e699c7; }
.swagger-ui .hover-light-pink:focus, .swagger-ui .hover-light-pink:hover, .swagger-ui .light-pink { color: #edb6d5; }
.swagger-ui .dark-green, .swagger-ui .green, .swagger-ui .hover-dark-green:focus, .swagger-ui .hover-dark-green:hover, .swagger-ui .hover-green:focus, .swagger-ui .hover-green:hover { color: #99e6c9; }
.swagger-ui .hover-light-green:focus, .swagger-ui .hover-light-green:hover, .swagger-ui .light-green { color: #a1e8ce; }
.swagger-ui .hover-navy:focus, .swagger-ui .hover-navy:hover, .swagger-ui .navy { color: #99b8e6; }
.swagger-ui .blue, .swagger-ui .dark-blue, .swagger-ui .hover-blue:focus, .swagger-ui .hover-blue:hover, .swagger-ui .hover-dark-blue:focus, .swagger-ui .hover-dark-blue:hover { color: #99bae6; }
.swagger-ui .hover-light-blue:focus, .swagger-ui .hover-light-blue:hover, .swagger-ui .light-blue { color: #a9cbea; }
.swagger-ui .hover-lightest-blue:focus, .swagger-ui .hover-lightest-blue:hover, .swagger-ui .lightest-blue { color: #d6e9f5; }
.swagger-ui .hover-washed-blue:focus, .swagger-ui .hover-washed-blue:hover, .swagger-ui .washed-blue { color: #f7fdfc; }
.swagger-ui .hover-washed-green:focus, .swagger-ui .hover-washed-green:hover, .swagger-ui .washed-green { color: #ebfaf4; }
.swagger-ui .hover-washed-yellow:focus, .swagger-ui .hover-washed-yellow:hover, .swagger-ui .washed-yellow { color: #fbf9ef; }
.swagger-ui .hover-washed-red:focus, .swagger-ui .hover-washed-red:hover, .swagger-ui .washed-red { color: #f9e7e7; }
.swagger-ui .color-inherit, .swagger-ui .hover-inherit:focus, .swagger-ui .hover-inherit:hover { color: inherit; }
.swagger-ui .bg-black-90, .swagger-ui .hover-bg-black-90:focus, .swagger-ui .hover-bg-black-90:hover { background-color: rgba(0, 0, 0, .9); }
.swagger-ui .bg-black-80, .swagger-ui .hover-bg-black-80:focus, .swagger-ui .hover-bg-black-80:hover { background-color: rgba(0, 0, 0, .8); }
.swagger-ui .bg-black-70, .swagger-ui .hover-bg-black-70:focus, .swagger-ui .hover-bg-black-70:hover { background-color: rgba(0, 0, 0, .7); }
.swagger-ui .bg-black-60, .swagger-ui .hover-bg-black-60:focus, .swagger-ui .hover-bg-black-60:hover { background-color: rgba(0, 0, 0, .6); }
.swagger-ui .bg-black-50, .swagger-ui .hover-bg-black-50:focus, .swagger-ui .hover-bg-black-50:hover { background-color: rgba(0, 0, 0, .5); }
.swagger-ui .bg-black-40, .swagger-ui .hover-bg-black-40:focus, .swagger-ui .hover-bg-black-40:hover { background-color: rgba(0, 0, 0, .4); }
.swagger-ui .bg-black-30, .swagger-ui .hover-bg-black-30:focus, .swagger-ui .hover-bg-black-30:hover { background-color: rgba(0, 0, 0, .3); }
.swagger-ui .bg-black-20, .swagger-ui .hover-bg-black-20:focus, .swagger-ui .hover-bg-black-20:hover { background-color: rgba(0, 0, 0, .2); }
.swagger-ui .bg-white-90, .swagger-ui .hover-bg-white-90:focus, .swagger-ui .hover-bg-white-90:hover { background-color: rgba(46, 48, 62, .9); }
.swagger-ui .bg-white-80, .swagger-ui .hover-bg-white-80:focus, .swagger-ui .hover-bg-white-80:hover { background-color: rgba(46, 48, 62, .8); }
.swagger-ui .bg-white-70, .swagger-ui .hover-bg-white-70:focus, .swagger-ui .hover-bg-white-70:hover { background-color: rgba(46, 48, 62, .7); }
.swagger-ui .bg-white-60, .swagger-ui .hover-bg-white-60:focus, .swagger-ui .hover-bg-white-60:hover { background-color: rgba(46, 48, 62, .6); }
.swagger-ui .bg-white-50, .swagger-ui .hover-bg-white-50:focus, .swagger-ui .hover-bg-white-50:hover { background-color: rgba(46, 48, 62, .5); }
.swagger-ui .bg-white-40, .swagger-ui .hover-bg-white-40:focus, .swagger-ui .hover-bg-white-40:hover { background-color: rgba(46, 48, 62, .4); }
.swagger-ui .bg-white-30, .swagger-ui .hover-bg-white-30:focus, .swagger-ui .hover-bg-white-30:hover { background-color: rgba(46, 48, 62, .3); }
.swagger-ui .bg-white-20, .swagger-ui .hover-bg-white-20:focus, .swagger-ui .hover-bg-white-20:hover { background-color: rgba(46, 48, 62, .2); }
.swagger-ui .bg-black, .swagger-ui .hover-bg-black:focus, .swagger-ui .hover-bg-black:hover { background-color: #000; }
.swagger-ui .bg-near-black, .swagger-ui .hover-bg-near-black:focus, .swagger-ui .hover-bg-near-black:hover { background-color: #121212; }
.swagger-ui .bg-dark-gray, .swagger-ui .hover-bg-dark-gray:focus, .swagger-ui .hover-bg-dark-gray:hover { background-color: #333; }
.swagger-ui .bg-mid-gray, .swagger-ui .hover-bg-mid-gray:focus, .swagger-ui .hover-bg-mid-gray:hover { background-color: #545454; }
.swagger-ui .bg-gray, .swagger-ui .hover-bg-gray:focus, .swagger-ui .hover-bg-gray:hover { background-color: #787878; }
.swagger-ui .bg-silver, .swagger-ui .hover-bg-silver:focus, .swagger-ui .hover-bg-silver:hover { background-color: #999; }
.swagger-ui .bg-white, .swagger-ui .hover-bg-white:focus, .swagger-ui .hover-bg-white:hover { background-color: #1e2129; }
.swagger-ui .bg-transparent, .swagger-ui .hover-bg-transparent:focus, .swagger-ui .hover-bg-transparent:hover { background-color: transparent; }
.swagger-ui .bg-dark-red, .swagger-ui .hover-bg-dark-red:focus, .swagger-ui .hover-bg-dark-red:hover { background-color: #bc2f36; }
.swagger-ui .bg-red, .swagger-ui .hover-bg-red:focus, .swagger-ui .hover-bg-red:hover { background-color: #c83932; }
.swagger-ui .bg-light-red, .swagger-ui .hover-bg-light-red:focus, .swagger-ui .hover-bg-light-red:hover { background-color: #ab3c2b; }
.swagger-ui .bg-orange, .swagger-ui .hover-bg-orange:focus, .swagger-ui .hover-bg-orange:hover { background-color: #cc6e33; }
.swagger-ui .bg-gold, .swagger-ui .bg-light-yellow, .swagger-ui .bg-washed-yellow, .swagger-ui .bg-yellow, .swagger-ui .hover-bg-gold:focus, .swagger-ui .hover-bg-gold:hover, .swagger-ui .hover-bg-light-yellow:focus, .swagger-ui .hover-bg-light-yellow:hover, .swagger-ui .hover-bg-washed-yellow:focus, .swagger-ui .hover-bg-washed-yellow:hover, .swagger-ui .hover-bg-yellow:focus, .swagger-ui .hover-bg-yellow:hover { background-color: #664b00; }
.swagger-ui .bg-purple, .swagger-ui .hover-bg-purple:focus, .swagger-ui .hover-bg-purple:hover { background-color: #5e2ca5; }
.swagger-ui .bg-light-purple, .swagger-ui .hover-bg-light-purple:focus, .swagger-ui .hover-bg-light-purple:hover { background-color: #672caf; }
.swagger-ui .bg-dark-pink, .swagger-ui .hover-bg-dark-pink:focus, .swagger-ui .hover-bg-dark-pink:hover { background-color: #ab2b81; }
.swagger-ui .bg-hot-pink, .swagger-ui .hover-bg-hot-pink:focus, .swagger-ui .hover-bg-hot-pink:hover { background-color: #c03086; }
.swagger-ui .bg-pink, .swagger-ui .hover-bg-pink:focus, .swagger-ui .hover-bg-pink:hover { background-color: #8f2464; }
.swagger-ui .bg-light-pink, .swagger-ui .hover-bg-light-pink:focus, .swagger-ui .hover-bg-light-pink:hover { background-color: #721d4d; }
.swagger-ui .bg-dark-green, .swagger-ui .hover-bg-dark-green:focus, .swagger-ui .hover-bg-dark-green:hover { background-color: #1c6e50; }
.swagger-ui .bg-green, .swagger-ui .hover-bg-green:focus, .swagger-ui .hover-bg-green:hover { background-color: #279b70; }
.swagger-ui .bg-light-green, .swagger-ui .hover-bg-light-green:focus, .swagger-ui .hover-bg-light-green:hover { background-color: #228762; }
.swagger-ui .bg-navy, .swagger-ui .hover-bg-navy:focus, .swagger-ui .hover-bg-navy:hover { background-color: #0d1d35; }
.swagger-ui .bg-dark-blue, .swagger-ui .hover-bg-dark-blue:focus, .swagger-ui .hover-bg-dark-blue:hover { background-color: #20497e; }
.swagger-ui .bg-blue, .swagger-ui .hover-bg-blue:focus, .swagger-ui .hover-bg-blue:hover { background-color: #4380d0; }
.swagger-ui .bg-light-blue, .swagger-ui .hover-bg-light-blue:focus, .swagger-ui .hover-bg-light-blue:hover { background-color: #20517e; }
.swagger-ui .bg-lightest-blue, .swagger-ui .hover-bg-lightest-blue:focus, .swagger-ui .hover-bg-lightest-blue:hover { background-color: #143a52; }
.swagger-ui .bg-washed-blue, .swagger-ui .hover-bg-washed-blue:focus, .swagger-ui .hover-bg-washed-blue:hover { background-color: #0c312d; }
.swagger-ui .bg-washed-green, .swagger-ui .hover-bg-washed-green:focus, .swagger-ui .hover-bg-washed-green:hover { background-color: #0f3d2c; }
.swagger-ui .bg-washed-red, .swagger-ui .hover-bg-washed-red:focus, .swagger-ui .hover-bg-washed-red:hover { background-color: #411010; }
.swagger-ui .bg-inherit, .swagger-ui .hover-bg-inherit:focus, .swagger-ui .hover-bg-inherit:hover { background-color: inherit; }
.swagger-ui .shadow-hover { transition: all .5s cubic-bezier(.165, .84, .44, 1) 0s; }
.swagger-ui .shadow-hover::after {
border-radius: inherit;
box-shadow: rgba(0, 0, 0, .2) 0 0 16px 2px;
content: "";
height: 100%;
left: 0;
opacity: 0;
position: absolute;
top: 0;
transition: opacity .5s cubic-bezier(.165, .84, .44, 1) 0s;
width: 100%;
z-index: -1;
}
.swagger-ui .bg-animate, .swagger-ui .bg-animate:focus, .swagger-ui .bg-animate:hover { transition: background-color .15s ease-in-out 0s; }
.swagger-ui .nested-links a {
color: #99bae6;
transition: color .15s ease-in 0s;
}
.swagger-ui .nested-links a:focus, .swagger-ui .nested-links a:hover {
color: #a9cbea;
transition: color .15s ease-in 0s;
}
.swagger-ui .opblock-tag {
border-bottom: 1px solid rgba(58, 64, 80, .3);
color: rgb(233, 235, 252);
transition: all .2s ease 0s;
}
.swagger-ui .opblock-tag svg, .swagger-ui section.models h4 svg { transition: all .4s ease 0s; }
.swagger-ui .opblock {
border: 1px solid #000;
border-radius: 4px;
box-shadow: rgba(0, 0, 0, .19) 0 0 3px;
margin: 0 0 15px;
}
.swagger-ui .opblock .tab-header .tab-item.active h4 span::after { background: gray; }
.swagger-ui .opblock.is-open .opblock-summary { border-bottom: 1px solid #000; }
.swagger-ui .opblock .opblock-section-header {
background: rgba(46, 48, 62, .8);
box-shadow: rgba(0, 0, 0, .1) 0 1px 2px;
}
.swagger-ui .opblock .opblock-section-header > label > span { padding: 0 10px 0 0; }
.swagger-ui .opblock .opblock-summary-method {
background: #000;
color: #fff;
text-shadow: rgba(0, 0, 0, .1) 0 1px 0;
}
.swagger-ui .opblock.opblock-post {
background: rgba(72, 203, 144, .1);
border-color: #48cb90;
}
.swagger-ui .opblock.opblock-post .opblock-summary-method, .swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span::after { background: #48cb90; }
.swagger-ui .opblock.opblock-post .opblock-summary { border-color: #48cb90; }
.swagger-ui .opblock.opblock-put {
background: rgba(213, 157, 88, .1);
border-color: #d59d58;
}
.swagger-ui .opblock.opblock-put .opblock-summary-method, .swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span::after { background: #d59d58; }
.swagger-ui .opblock.opblock-put .opblock-summary { border-color: #d59d58; }
.swagger-ui .opblock.opblock-delete {
background: rgba(200, 50, 50, .1);
border-color: #c83232;
}
.swagger-ui .opblock.opblock-delete .opblock-summary-method, .swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span::after { background: #c83232; }
.swagger-ui .opblock.opblock-delete .opblock-summary { border-color: #c83232; }
.swagger-ui .opblock.opblock-get {
background: rgba(42, 105, 167, .1);
border-color: #2a69a7;
}
.swagger-ui .opblock.opblock-get .opblock-summary-method, .swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span::after { background: #2a69a7; }
.swagger-ui .opblock.opblock-get .opblock-summary { border-color: #2a69a7; }
.swagger-ui .opblock.opblock-patch {
background: rgba(92, 214, 188, .1);
border-color: #5cd6bc;
}
.swagger-ui .opblock.opblock-patch .opblock-summary-method, .swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span::after { background: #5cd6bc; }
.swagger-ui .opblock.opblock-patch .opblock-summary { border-color: #5cd6bc; }
.swagger-ui .opblock.opblock-head {
background: rgba(140, 63, 207, .1);
border-color: #8c3fcf;
}
.swagger-ui .opblock.opblock-head .opblock-summary-method, .swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span::after { background: #8c3fcf; }
.swagger-ui .opblock.opblock-head .opblock-summary { border-color: #8c3fcf; }
.swagger-ui .opblock.opblock-options {
background: rgba(36, 89, 143, .1);
border-color: #24598f;
}
.swagger-ui .opblock.opblock-options .opblock-summary-method, .swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span::after { background: #24598f; }
.swagger-ui .opblock.opblock-options .opblock-summary { border-color: #24598f; }
.swagger-ui .opblock.opblock-deprecated {
background: rgba(46, 46, 46, .1);
border-color: rgb(58, 64, 80);
opacity: .6;
}
.swagger-ui .opblock.opblock-deprecated .opblock-summary-method, .swagger-ui .opblock.opblock-deprecated .tab-header .tab-item.active h4 span::after { background: #2e2e2e; }
.swagger-ui .opblock.opblock-deprecated .opblock-summary { border-color: #2e2e2e; }
.swagger-ui .filter .operation-filter-input { border: 2px solid rgb(58, 64, 80); }
.swagger-ui .tab li:first-of-type::after { background: rgba(0, 0, 0, .2); }
.swagger-ui .download-contents {
background: #7c8192;
color: #fff;
}
.swagger-ui .scheme-container {
background: #1e2129;
box-shadow: rgba(0, 0, 0, .15) 0 1px 2px 0;
border: rgb(33, 34, 44, 0.5) 0.1rem solid;
/* box-shadow: rgb(0 0 0 / 20%) 0px 4.4px 11px 0px, rgb(0 0 0 / 10%) 0px 0px 1.1px 0px; */
}
.swagger-ui .loading-container .loading::before {
animation: 1s linear 0s infinite normal none running rotation, .5s ease 0s 1 normal none running opacity;
border-color: rgba(0, 0, 0, .6) rgba(84, 84, 84, .1) rgba(84, 84, 84, .1);
}
.swagger-ui .response-control-media-type--accept-controller select { border-color: #196619; }
.swagger-ui .response-control-media-type__accept-message { color: #99e699; }
.swagger-ui .version-pragma__message code { background-color: #3b3b3b; }
.swagger-ui .btn {
background: 0 0;
border: 2px solid gray;
box-shadow: rgba(0, 0, 0, .1) 0 1px 2px;
color: rgb(233, 235, 252);
}
.swagger-ui .btn:hover { box-shadow: rgba(0, 0, 0, .3) 0 0 5px; }
.swagger-ui .btn.authorize, .swagger-ui .btn.cancel {
background-color: transparent;
border-color: #a72a2a;
color: #e69999;
}
.swagger-ui .btn.authorize {
border-color: #48cb90;
color: #9ce3c3;
}
.swagger-ui .btn.authorize svg { fill: #9ce3c3; }
.swagger-ui .authorization__btn svg { fill: rgb(233, 235, 252); }
.swagger-ui .btn.execute {
background-color: #5892d5;
border-color: #5892d5;
color: #fff;
}
.swagger-ui .copy-to-clipboard { background: #7c8192; }
.swagger-ui .copy-to-clipboard button { background: url("data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path fill=\"%23fff\" fill-rule=\"evenodd\" d=\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"/></svg>") 50% center no-repeat; }
.swagger-ui select {
background: url("data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path d=\"M13.418 7.859a.695.695 0 01.978 0 .68.68 0 010 .969l-3.908 3.83a.697.697 0 01-.979 0l-3.908-3.83a.68.68 0 010-.969.695.695 0 01.978 0L10 11l3.418-3.141z\"/></svg>") right 10px center/20px no-repeat #212121;
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wICg0MDM1YTRmYjQ5LCAyMDIwLTA1LTAxKSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZG93bmxvYWQuc3ZnIgogICBpZD0ic3ZnNCIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMjAgMjAiPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTEwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzOCIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnNCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTkiCiAgICAgaW5rc2NhcGU6Y3k9IjEwIgogICAgIGlua3NjYXBlOmN4PSIxMCIKICAgICBpbmtzY2FwZTp6b29tPSI0MS41IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpZD0ibmFtZWR2aWV3NiIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDAxIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZiIKICAgICBpZD0icGF0aDIiCiAgICAgZD0iTTEzLjQxOCA3Ljg1OWEuNjk1LjY5NSAwIDAxLjk3OCAwIC42OC42OCAwIDAxMCAuOTY5bC0zLjkwOCAzLjgzYS42OTcuNjk3IDAgMDEtLjk3OSAwbC0zLjkwOC0zLjgzYS42OC42OCAwIDAxMC0uOTY5LjY5NS42OTUgMCAwMS45NzggMEwxMCAxMWwzLjQxOC0zLjE0MXoiIC8+Cjwvc3ZnPgo=) right 10px center/20px no-repeat #1e2129;
border: 2px solid #41444e;
}
.swagger-ui select[multiple] { background: #212121; }
.swagger-ui button.invalid, .swagger-ui input[type=email].invalid, .swagger-ui input[type=file].invalid, .swagger-ui input[type=password].invalid, .swagger-ui input[type=search].invalid, .swagger-ui input[type=text].invalid, .swagger-ui select.invalid, .swagger-ui textarea.invalid {
background: #390e0e;
border-color: #c83232;
}
.swagger-ui input[type=email], .swagger-ui input[type=file], .swagger-ui input[type=password], .swagger-ui input[type=search], .swagger-ui input[type=text], .swagger-ui textarea {
background: #1e2129;
border: 1px solid #404040;
}
.swagger-ui textarea {
background: rgba(46, 48, 62, .8);
color: rgb(233, 235, 252);
}
.swagger-ui input[disabled], .swagger-ui select[disabled] {
background-color: #1e2129;
color: #bfbfbf;
}
.swagger-ui textarea[disabled] {
background-color: #41444e;
color: #fff;
}
.swagger-ui select[disabled] { border-color: #878787; }
.swagger-ui textarea:focus { border: 2px solid #2a69a7; }
.swagger-ui .checkbox input[type=checkbox] + label > .item {
background: #303030;
box-shadow: #303030 0 0 0 2px;
}
.swagger-ui .checkbox input[type=checkbox]:checked + label > .item { background: url("data:image/svg+xml;charset=utf-8,<svg width=\"10\" height=\"8\" viewBox=\"3 7 10 8\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"%2341474E\" fill-rule=\"evenodd\" d=\"M6.333 15L3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z\"/></svg>") 50% center no-repeat rgb(233, 235, 252); }
.swagger-ui .dialog-ux .backdrop-ux { background: rgba(0, 0, 0, .8); }
.swagger-ui .dialog-ux .modal-ux {
background: #1e2129;
border: 1px solid #2e2e2e;
box-shadow: rgba(0, 0, 0, .2) 0 10px 30px 0;
}
.swagger-ui .dialog-ux .modal-ux-header .close-modal { background: 0 0; }
.swagger-ui .model .deprecated span, .swagger-ui .model .deprecated td { color: #bfbfbf !important; }
.swagger-ui .model-toggle::after { background: url("data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>") 50% center/100% no-repeat; }
.swagger-ui .model-hint {
background: rgba(0, 0, 0, .7);
color: #ebebeb;
}
.swagger-ui section.models { border: 2px solid rgb(58, 64, 80); }
.swagger-ui section.models.is-open h4 { border-bottom: 2px solid rgb(58, 64, 80); }
.swagger-ui section.models .model-container { background: rgba(0, 0, 0, .05); }
.swagger-ui section.models .model-container:hover { background: rgba(0, 0, 0, .07); }
.swagger-ui .model-box { background: rgba(0, 0, 0, .1); }
.swagger-ui .prop-type { color: #aaaad4; }
.swagger-ui table thead tr td, .swagger-ui table thead tr th {
border-bottom: 1px solid rgba(58, 64, 80, .2);
color: rgb(233, 235, 252);
}
.swagger-ui .parameter__name.required::after { color: rgba(230, 153, 153, .6); }
.swagger-ui .topbar .download-url-wrapper .select-label { color: #f0f0f0; }
.swagger-ui .topbar .download-url-wrapper .download-url-button {
background: #63a040;
color: #fff;
}
.swagger-ui .info .title small { background: #7c8492; }
.swagger-ui .info .title small.version-stamp { background-color: #7a9b27; }
.swagger-ui .auth-container .errors {
background-color: #350d0d;
color: rgb(233, 235, 252);
}
.swagger-ui .errors-wrapper {
background: rgba(200, 50, 50, .1);
border: 2px solid #c83232;
}
.swagger-ui .markdown code, .swagger-ui .renderedmarkdown code {
background: rgba(0, 0, 0, .05);
color: #c299e6;
}
.swagger-ui .model-toggle:after { background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wICg0MDM1YTRmYjQ5LCAyMDIwLTA1LTAxKSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZG93bmxvYWQyLnN2ZyIKICAgaWQ9InN2ZzQiCiAgIHZlcnNpb249IjEuMSIKICAgaGVpZ2h0PSIyNCIKICAgd2lkdGg9IjI0Ij4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExMCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczgiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzQiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTkiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii05IgogICAgIGlua3NjYXBlOmN5PSIxMiIKICAgICBpbmtzY2FwZTpjeD0iMTIiCiAgICAgaW5rc2NhcGU6em9vbT0iMzQuNTgzMzMzIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpZD0ibmFtZWR2aWV3NiIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDAxIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZiIKICAgICBpZD0icGF0aDIiCiAgICAgZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiIgLz4KPC9zdmc+Cg==) 50% no-repeat; }
.swagger-ui .expand-operation svg, .swagger-ui section.models h4 svg, .swagger-ui .opblock-summary-control svg { fill: #fff; }
::-webkit-scrollbar-track { background-color: #646464 !important; }
::-webkit-scrollbar-thumb {
background-color: #242424 !important;
border: 2px solid #1e2129 !important;
}
::-webkit-scrollbar-button:vertical:start:decrement {
background: linear-gradient(130deg, #696969 40%, rgba(255, 0, 0, 0) 41%), linear-gradient(230deg, #696969 40%, transparent 41%), linear-gradient(0deg, #696969 40%, transparent 31%);
background-color: #b6b6b6;
}
::-webkit-scrollbar-button:vertical:end:increment {
background: linear-gradient(310deg, #696969 40%, transparent 41%), linear-gradient(50deg, #696969 40%, transparent 41%), linear-gradient(180deg, #696969 40%, transparent 31%);
background-color: #b6b6b6;
}
::-webkit-scrollbar-button:horizontal:end:increment {
background: linear-gradient(210deg, #696969 40%, transparent 41%), linear-gradient(330deg, #696969 40%, transparent 41%), linear-gradient(90deg, #696969 30%, transparent 31%);
background-color: #b6b6b6;
}
::-webkit-scrollbar-button:horizontal:start:decrement {
background: linear-gradient(30deg, #696969 40%, transparent 41%), linear-gradient(150deg, #696969 40%, transparent 41%), linear-gradient(270deg, #696969 30%, transparent 31%);
background-color: #b6b6b6;
}
::-webkit-scrollbar-button, ::-webkit-scrollbar-track-piece { background-color: #1e2129 !important; }
.swagger-ui .black, .swagger-ui .checkbox, .swagger-ui .dark-gray, .swagger-ui .download-url-wrapper .loading, .swagger-ui .errors-wrapper .errors small, .swagger-ui .fallback, .swagger-ui .filter .loading, .swagger-ui .gray, .swagger-ui .hover-black:focus, .swagger-ui .hover-black:hover, .swagger-ui .hover-dark-gray:focus, .swagger-ui .hover-dark-gray:hover, .swagger-ui .hover-gray:focus, .swagger-ui .hover-gray:hover, .swagger-ui .hover-light-silver:focus, .swagger-ui .hover-light-silver:hover, .swagger-ui .hover-mid-gray:focus, .swagger-ui .hover-mid-gray:hover, .swagger-ui .hover-near-black:focus, .swagger-ui .hover-near-black:hover, .swagger-ui .hover-silver:focus, .swagger-ui .hover-silver:hover, .swagger-ui .light-silver, .swagger-ui .markdown pre, .swagger-ui .mid-gray, .swagger-ui .model .property, .swagger-ui .model .property.primitive, .swagger-ui .model-title, .swagger-ui .near-black, .swagger-ui .parameter__extension, .swagger-ui .parameter__in, .swagger-ui .prop-format, .swagger-ui .renderedmarkdown pre, .swagger-ui .response-col_links .response-undocumented, .swagger-ui .response-col_status .response-undocumented, .swagger-ui .silver, .swagger-ui section.models h4, .swagger-ui section.models h5, .swagger-ui span.token-not-formatted, .swagger-ui span.token-string, .swagger-ui table.headers .header-example, .swagger-ui table.model tr.description, .swagger-ui table.model tr.extension { color: #bfbfbf; }
.swagger-ui .hover-white:focus, .swagger-ui .hover-white:hover, .swagger-ui .info .title small pre, .swagger-ui .topbar a, .swagger-ui .white { color: #fff; }
.swagger-ui .bg-black-10, .swagger-ui .hover-bg-black-10:focus, .swagger-ui .hover-bg-black-10:hover, .swagger-ui .stripe-dark:nth-child(2n + 1) { background-color: rgba(0, 0, 0, .1); }
.swagger-ui .bg-white-10, .swagger-ui .hover-bg-white-10:focus, .swagger-ui .hover-bg-white-10:hover, .swagger-ui .stripe-light:nth-child(2n + 1) { background-color: rgba(46, 48, 62, .1); }
.swagger-ui .bg-light-silver, .swagger-ui .hover-bg-light-silver:focus, .swagger-ui .hover-bg-light-silver:hover, .swagger-ui .striped--light-silver:nth-child(2n + 1) { background-color: #6e6e6e; }
.swagger-ui .bg-moon-gray, .swagger-ui .hover-bg-moon-gray:focus, .swagger-ui .hover-bg-moon-gray:hover, .swagger-ui .striped--moon-gray:nth-child(2n + 1) { background-color: #4d4d4d; }
.swagger-ui .bg-light-gray, .swagger-ui .hover-bg-light-gray:focus, .swagger-ui .hover-bg-light-gray:hover, .swagger-ui .striped--light-gray:nth-child(2n + 1) { background-color: #2b2b2b; }
.swagger-ui .bg-near-white, .swagger-ui .hover-bg-near-white:focus, .swagger-ui .hover-bg-near-white:hover, .swagger-ui .striped--near-white:nth-child(2n + 1) { background-color: #242424; }
.swagger-ui .opblock-tag:hover, .swagger-ui section.models h4:hover { background: rgba(0, 0, 0, .02); }
.swagger-ui .checkbox p, .swagger-ui .dialog-ux .modal-ux-content h4, .swagger-ui .dialog-ux .modal-ux-content p, .swagger-ui .dialog-ux .modal-ux-header h3, .swagger-ui .errors-wrapper .errors h4, .swagger-ui .errors-wrapper hgroup h4, .swagger-ui .info .base-url, .swagger-ui .info .title, .swagger-ui .info h1, .swagger-ui .info h2, .swagger-ui .info h3, .swagger-ui .info h4, .swagger-ui .info h5, .swagger-ui .info li, .swagger-ui .info p, .swagger-ui .info table, .swagger-ui .loading-container .loading::after, .swagger-ui .model, .swagger-ui .opblock .opblock-section-header h4, .swagger-ui .opblock .opblock-section-header > label, .swagger-ui .opblock .opblock-summary-description, .swagger-ui .opblock .opblock-summary-operation-id, .swagger-ui .opblock .opblock-summary-path, .swagger-ui .opblock .opblock-summary-path__deprecated, .swagger-ui .opblock-description-wrapper, .swagger-ui .opblock-description-wrapper h4, .swagger-ui .opblock-description-wrapper p, .swagger-ui .opblock-external-docs-wrapper, .swagger-ui .opblock-external-docs-wrapper h4, .swagger-ui .opblock-external-docs-wrapper p, .swagger-ui .opblock-tag small, .swagger-ui .opblock-title_normal, .swagger-ui .opblock-title_normal h4, .swagger-ui .opblock-title_normal p, .swagger-ui .parameter__name, .swagger-ui .parameter__type, .swagger-ui .response-col_links, .swagger-ui .response-col_status, .swagger-ui .responses-inner h4, .swagger-ui .responses-inner h5, .swagger-ui .scheme-container .schemes > label, .swagger-ui .scopes h2, .swagger-ui .servers > label, .swagger-ui .tab li, .swagger-ui label, .swagger-ui select, .swagger-ui table.headers td { color: rgb(233, 235, 252); }
.swagger-ui .download-url-wrapper .failed, .swagger-ui .filter .failed, .swagger-ui .model-deprecated-warning, .swagger-ui .parameter__deprecated, .swagger-ui .parameter__name.required span, .swagger-ui table.model tr.property-row .star { color: #e69999; }
.swagger-ui .opblock-body pre.microlight, .swagger-ui textarea.curl {
background: #41444e;
border-radius: 4px;
color: #fff;
}
.swagger-ui .expand-methods svg, .swagger-ui .expand-methods:hover svg { fill: #bfbfbf; }
.swagger-ui .auth-container, .swagger-ui .dialog-ux .modal-ux-header { border-bottom: 1px solid #2e2e2e; }
.swagger-ui .topbar .download-url-wrapper .select-label select, .swagger-ui .topbar .download-url-wrapper input[type=text] { border: 2px solid #63a040; }
.swagger-ui .info a, .swagger-ui .info a:hover, .swagger-ui .scopes h2 a { color: #99bde6; }
/* Dark Scrollbar */
::-webkit-scrollbar {
width: 14px;
height: 14px;
}
::-webkit-scrollbar-button {
background-color: #1e2129 !important;
}
::-webkit-scrollbar-track {
background-color: #646464 !important;
}
::-webkit-scrollbar-track-piece {
background-color: #1e2129 !important;
}
::-webkit-scrollbar-thumb {
height: 50px;
background-color: #242424 !important;
border: 2px solid #1e2129 !important;
}
::-webkit-scrollbar-corner {}
::-webkit-resizer {}
::-webkit-scrollbar-button:vertical:start:decrement {
background:
linear-gradient(130deg, #696969 40%, rgba(255, 0, 0, 0) 41%),
linear-gradient(230deg, #696969 40%, rgba(0, 0, 0, 0) 41%),
linear-gradient(0deg, #696969 40%, rgba(0, 0, 0, 0) 31%);
background-color: #b6b6b6;
}
::-webkit-scrollbar-button:vertical:end:increment {
background:
linear-gradient(310deg, #696969 40%, rgba(0, 0, 0, 0) 41%),
linear-gradient(50deg, #696969 40%, rgba(0, 0, 0, 0) 41%),
linear-gradient(180deg, #696969 40%, rgba(0, 0, 0, 0) 31%);
background-color: #b6b6b6;
}
::-webkit-scrollbar-button:horizontal:end:increment {
background:
linear-gradient(210deg, #696969 40%, rgba(0, 0, 0, 0) 41%),
linear-gradient(330deg, #696969 40%, rgba(0, 0, 0, 0) 41%),
linear-gradient(90deg, #696969 30%, rgba(0, 0, 0, 0) 31%);
background-color: #b6b6b6;
}
::-webkit-scrollbar-button:horizontal:start:decrement {
background:
linear-gradient(30deg, #696969 40%, rgba(0, 0, 0, 0) 41%),
linear-gradient(150deg, #696969 40%, rgba(0, 0, 0, 0) 41%),
linear-gradient(270deg, #696969 30%, rgba(0, 0, 0, 0) 31%);
background-color: #b6b6b6;
}
.json-schema-2020-12__title {
color: #e9ebfc !important;
}
.json-schema-2020-12__attribute {
color: #c2c2e0 !important;
}
.swagger-ui .opblock-control-arrow svg {
fill: #c2c2e0;
}
.json-schema-2020-12-accordion__icon svg {
fill: #c2c2e0;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,79 @@
<!doctype html>
<html lang="en-US">
<head>
<title>Swagger UI: OAuth2 Redirect</title>
</head>
<body>
<script>
'use strict';
function run () {
var oauth2 = window.opener.swaggerUIRedirectOauth2;
var sentState = oauth2.state;
var redirectUrl = oauth2.redirectUrl;
var isValid, qp, arr;
if (/code|token|error/.test(window.location.hash)) {
qp = window.location.hash.substring(1).replace('?', '&');
} else {
qp = location.search.substring(1);
}
arr = qp.split("&");
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';});
qp = qp ? JSON.parse('{' + arr.join() + '}',
function (key, value) {
return key === "" ? value : decodeURIComponent(value);
}
) : {};
isValid = qp.state === sentState;
if ((
oauth2.auth.schema.get("flow") === "accessCode" ||
oauth2.auth.schema.get("flow") === "authorizationCode" ||
oauth2.auth.schema.get("flow") === "authorization_code"
) && !oauth2.auth.code) {
if (!isValid) {
oauth2.errCb({
authId: oauth2.auth.name,
source: "auth",
level: "warning",
message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server."
});
}
if (qp.code) {
delete oauth2.state;
oauth2.auth.code = qp.code;
oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
} else {
let oauthErrorMsg;
if (qp.error) {
oauthErrorMsg = "["+qp.error+"]: " +
(qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
(qp.error_uri ? "More info: "+qp.error_uri : "");
}
oauth2.errCb({
authId: oauth2.auth.name,
source: "auth",
level: "error",
message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server."
});
}
} else {
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
}
window.close();
}
if (document.readyState !== 'loading') {
run();
} else {
document.addEventListener('DOMContentLoaded', function () {
run();
});
}
</script>
</body>
</html>

View File

@@ -0,0 +1 @@
{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"api/","title":"API Reference","text":""}]}

298
collect.py Normal file
View File

@@ -0,0 +1,298 @@
#!/usr/bin/env python
"""Collect documentation from source repos into this repository and regenerate
the static index and nginx configuration.
Usage:
python collect.py # copy artifacts, regenerate outputs
python collect.py --dry-run # list planned actions without writing
"""
from __future__ import annotations
import argparse
import shutil
import sys
from pathlib import Path
import yaml
ROOT = Path(__file__).resolve().parent
CONFIG_FILE = ROOT / "config.yml"
KIND_DIR = {"lib": "libs", "api": "apis", "wiki": "wiki"}
SITE_DIR = "site"
MCP_DIR = "mcp"
TITLE_CSS = "font-size:1.6rem;margin-bottom:1.2rem;color:#2dd4bf;"
CARD_CSS = (
"background:#161b22;border:1px solid #30363d;border-radius:12px;"
"padding:1.8rem;text-align:left;"
"transition:transform 0.15s ease,box-shadow 0.15s ease;"
)
INDENT = " "
# ── helpers ──────────────────────────────────────────────────────────────────
def load_config() -> dict:
data = yaml.safe_load(CONFIG_FILE.read_text(encoding="utf-8"))
if "service" not in data or "repos" not in data:
print("ERROR: config.yml must define 'service' and 'repos' keys", file=sys.stderr)
sys.exit(1)
return data
def _copy_dir(src: Path, dst: Path) -> None:
if dst.exists():
shutil.rmtree(dst, ignore_errors=True)
dst.parent.mkdir(parents=True, exist_ok=True)
shutil.copytree(src, dst)
def _safe_title(entry: dict) -> str:
return entry.get("title") or entry["name"].replace("-", " ").title()
def _safe_description(entry: dict) -> str:
return entry.get("description") or f"Documentation for {_safe_title(entry)}"
# ── index.html generator ────────────────────────────────────────────────────
INDEX_TEMPLATE = r"""<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Aetoskia Developer Documentation</title>
<style>
:root {{
--bg: #0d1117;
--card: #161b22;
--text: #e6edf3;
--muted: #8b949e;
--accent: #2dd4bf;
--accent-dim: #1e9184;
--border: #30363d;
--font-main: 'Inter', 'Roboto', sans-serif;
--font-code: 'JetBrains Mono', monospace;
}}
* {{ margin:0; padding:0; box-sizing:border-box; }}
body {{
background:var(--bg); color:var(--text); font-family:var(--font-main);
min-height:100vh; display:flex; flex-direction:column;
align-items:center; justify-content:flex-start; padding:3rem 1.5rem;
}}
header {{ text-align:center; margin-bottom:3rem; }}
h1 {{ font-size:2.5rem; color:var(--accent); letter-spacing:0.5px; margin-bottom:0.5rem; }}
.subtitle {{ color:var(--muted); font-size:1rem; }}
.badge {{
display:inline-block; margin-top:0.8rem; background:#30363d; color:#fff;
padding:3px 8px; border-radius:6px; font-size:0.85rem; font-weight:600;
border:1px solid #484f58;
}}
.section {{ width:100%; max-width:900px; margin-bottom:2.5rem; }}
.section h2 {{
font-size:1.2rem; color:var(--muted); text-transform:uppercase;
letter-spacing:1.5px; margin-bottom:1rem; border-bottom:1px solid var(--border);
padding-bottom:0.4rem;
}}
.grid {{
display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
gap:1.5rem; width:100%;
}}
.card {{
background:var(--card); border:1px solid var(--border); border-radius:12px;
padding:1.8rem; text-align:left;
transition:transform 0.15s ease,box-shadow 0.15s ease;
}}
.card:hover {{
transform:translateY(-4px); box-shadow:0 0 20px rgba(45,212,191,0.2);
border-color:var(--accent);
}}
.card h3 {{ color:var(--accent); font-size:1.4rem; margin-bottom:0.4rem; }}
.card p {{ color:var(--muted); font-size:0.95rem; line-height:1.6; }}
.card a {{
color:var(--accent); text-decoration:none; display:inline-block;
margin-top:0.8rem; font-weight:500;
}}
.card a:hover {{ color:var(--accent-dim); text-decoration:underline; }}
footer {{ margin-top:4rem; text-align:center; color:var(--muted); font-size:0.9rem; }}
</style>
</head>
<body>
<header>
<h1>Aetoskia Developer Docs</h1>
<p class="subtitle">Central documentation hub for Aetoskia projects</p>
</header>
{body}
<footer>
&copy; 2025 Aetoskia Developer Network
</footer>
</body>
</html>"""
def _render_section(title: str, cards: list[tuple[str, str, str, str]]) -> str:
"""cards = [(safe_title, description, href, label), ...]"""
if not cards:
return ""
lines = [f'<section class="section">', f"<h2>{title}</h2>", '<div class="grid">']
for t, desc, href, label in cards:
lines.append(f' <div class="card">')
lines.append(f" <h3>{t}</h3>")
lines.append(f" <p>{desc}</p>")
lines.append(f' <a href="{href}" target="_blank">{label} &rarr;</a>')
lines.append(f" </div>")
lines.append("</div>")
lines.append("</section>")
return "\n".join(lines)
def build_index_html(config: dict) -> str:
lib_cards: list[tuple[str, str, str, str]] = []
api_cards: list[tuple[str, str, str, str]] = []
wiki_cards: list[tuple[str, str, str, str]] = []
tutorial_cards: list[tuple[str, str, str, str]] = []
for entry in config.get("repos", []):
docs = entry.get("docs") or {}
name = entry["name"]
title = _safe_title(entry)
desc = _safe_description(entry)
if docs.get("lib"):
lib_cards.append((title, desc, f"/libs/{name}/", "View Documentation"))
if docs.get("api"):
api_cards.append((title, desc, f"/apis/{name}/", "View Documentation"))
if docs.get("wiki"):
wiki_cards.append((title, desc, f"/wiki/{name}/", "View Documentation"))
for entry in config.get("static", []):
kind = entry.get("kind")
name = entry["repo"]
title = _safe_title(entry)
desc = _safe_description(entry)
if kind == "api":
api_cards.append((title, desc, f"/apis/{name}/", "View Documentation"))
elif kind == "tutorial":
tutorial_cards.append((title, desc, f"/tutorials/{name}/", "View Tutorial"))
body = "\n\n".join(filter(None, [
_render_section("Libraries", lib_cards),
_render_section("APIs", api_cards),
_render_section("Wiki", wiki_cards),
_render_section("Tutorials", tutorial_cards),
]))
return INDEX_TEMPLATE.format(body=body)
# ── nginx.conf generator ────────────────────────────────────────────────────
NGINX_TEMPLATE = r"""server {{
listen {port};
server_name _;
root /usr/share/nginx/html;
index index.html api/index.html;
location / {{
try_files $uri $uri/ /index.html;
}}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}}
"""
def build_nginx_conf(port: int) -> str:
return NGINX_TEMPLATE.format(port=port)
# ── collect logic ────────────────────────────────────────────────────────────
def collect(config: dict, dry_run: bool = False) -> list[str]:
service = config["service"]
errors: list[str] = []
copied: list[str] = []
for entry in config.get("repos", []):
name = entry["name"]
source = Path(entry["source"]).resolve()
docs = entry.get("docs") or {}
if not source.is_dir():
errors.append(f"{name}: source repo not found ({source})")
continue
for kind in ("lib", "api", "wiki"):
site_rel = docs.get(kind)
if not site_rel:
continue
src = source / site_rel
if not src.is_dir():
errors.append(f"{name}: {kind} site missing ({src})")
continue
dst = ROOT / KIND_DIR[kind] / name / SITE_DIR
copied.append(f"{kind:>4} {name} {dst.relative_to(ROOT)}")
if not dry_run:
_copy_dir(src, dst)
mcp = docs.get("mcp")
if mcp:
src = source / mcp["bundle"]
if not src.is_dir():
errors.append(f"{name}: mcp bundle missing ({src})")
continue
dst = ROOT / MCP_DIR / name
copied.append(f" mcp {name} {dst.relative_to(ROOT)}")
if not dry_run:
_copy_dir(src, dst)
for entry in config.get("static", []):
p = ROOT / entry["path"]
if not p.is_dir():
errors.append(f"static {entry['repo']}: path missing ({p})")
else:
copied.append(f"static {entry['repo']} {entry['path']}")
if not dry_run:
index_html = build_index_html(config)
(ROOT / "_index" / "index.html").write_text(index_html, encoding="utf-8")
nginx_conf = build_nginx_conf(service["html_port"])
(ROOT / "nginx.conf").write_text(nginx_conf, encoding="utf-8")
print(f"[OK] _index/index.html regenerated")
print(f"[OK] nginx.conf regenerated (listen {service['html_port']})")
for line in copied:
print(f"[COP]{line}")
if errors:
print("\nERRORS:", file=sys.stderr)
for e in errors:
print(f" - {e}", file=sys.stderr)
return errors
# ── CLI ──────────────────────────────────────────────────────────────────────
def main() -> None:
parser = argparse.ArgumentParser(description="Collect docs into the aetos-docs service repo")
parser.add_argument("--dry-run", action="store_true", help="Show planned actions without writing")
args = parser.parse_args()
config = load_config()
errors = collect(config, dry_run=args.dry_run)
if errors:
sys.exit(1)
if __name__ == "__main__":
main()

68
config.py Normal file
View File

@@ -0,0 +1,68 @@
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
import yaml
@dataclass(frozen=True)
class MCPBundle:
root: Path
name: str
port: int
@dataclass(frozen=True)
class RepoDoc:
name: str
description: str | None
lib: str | None
api: str | None
wiki: str | None
mcp_bundle: str | None # source-relative path in the repo (collect use)
mcp_server: str | None # MCP server / namespace name
mcp_port: int | None
@dataclass(frozen=True)
class ServiceConfig:
name: str
html_port: int
health_port: int
repos: tuple[RepoDoc, ...]
@property
def mcp_servers(self) -> dict[str, MCPBundle]:
"""Return only repos that expose an MCP server."""
return {
r.name: MCPBundle(root=Path("mcp") / r.name, name=r.mcp_server, port=r.mcp_port)
for r in self.repos
if r.mcp_port is not None
}
def load_config(path: Path | str = "config.yml") -> ServiceConfig:
p = Path(path)
data = yaml.safe_load(p.read_text(encoding="utf-8"))
service = data.get("service") or {}
repos: list[RepoDoc] = []
for entry in data.get("repos", []):
docs = entry.get("docs") or {}
mcp = docs.get("mcp")
repos.append(RepoDoc(
name=entry["name"],
description=entry.get("description"),
lib=docs.get("lib"),
api=docs.get("api"),
wiki=docs.get("wiki"),
mcp_bundle=mcp["bundle"] if mcp else None,
mcp_server=mcp["server"] if mcp else None,
mcp_port=mcp["port"] if mcp else None,
))
return ServiceConfig(
name=service.get("name", "aetos-docs"),
html_port=service.get("html_port", 9000),
health_port=service.get("health_port", 8000),
repos=tuple(repos),
)

101
config.yml Normal file
View File

@@ -0,0 +1,101 @@
# aetos-docs configuration
# Single source of truth for which repositories the docs service serves.
#
# repos: documentation collected from sibling source repositories via collect.py
# (refreshed manually: run `python collect.py` after rebuilding each repo's docs)
# static: docs already vendored inside this repository (never collected)
#
# Each repo may provide any of the doc kinds: lib, api, wiki (web sites) and mcp (MCP bundle).
# Category -> served path:
# lib -> /libs/<repo>/
# api -> /apis/<repo>/
# wiki -> /wiki/<repo>/
# mcp -> MCP server on its configured port
service:
name: aetos-docs
html_port: 9000 # nginx: html portal
health_port: 8000 # mcp: /healthz
repos:
- name: openapi-first
source: ../openapi-first
title: OpenAPI First
description: Design-first API development toolkit enforcing OpenAPI contracts as the single source of truth.
docs:
lib: site
mcp: { bundle: docs/mcp, server: openapi_first, port: 8004 }
- name: doc-forge
source: ../doc-forge
title: Doc Forge
description: Renderer-agnostic Python documentation compiler powering MkDocs and MCP generation across Aetoskia projects.
docs:
lib: site
mcp: { bundle: docs/mcp, server: docforge, port: 8001 }
- name: dagpipe
source: ../dagpipe
title: DAG Pipe
description: Deterministic pipeline framework for executing state transformations through a directed acyclic graph (DAG).
docs:
lib: site
mcp: { bundle: docs/mcp, server: dagpipe, port: 8006 }
- name: mail-intake
source: ../mail-intake
title: Mail Intake
description: High-performance email ingestion and processing framework with pluggable adapters and automation workflows.
docs:
lib: site
mcp: { bundle: docs/mcp, server: mail_intake, port: 8002 }
- name: omniread
source: ../omniread
title: Omniread
description: Unified ingestion and normalization layer for structured and unstructured data sources.
docs:
lib: site
mcp: { bundle: docs/mcp, server: omniread, port: 8003 }
- name: py-jwt
source: ../py-jwt
title: Py JWT
description: Lightweight, explicit JWT utilities for Python services with strong validation and minimal magic.
docs:
lib: site
mcp: { bundle: docs/mcp, server: jwtlib, port: 8005 }
- name: hexa
source: ../hexa
title: Hexa
description: Hexagonal architecture framework and toolbox for Python services.
docs:
lib: site
- name: mongo-ops
source: ../mongo-ops
title: Mongo Ops
description: A modular, async MongoDB operations layer for FastAPI microservices. Simplifies CRUD, transactions, and model management.
docs:
wiki: site
- name: auth-server
source: ../auth-server
title: Auth Server
description: Aetoskia authentication service. OpenAPI-driven, FastAPI backend for auth flows.
docs:
api: site
static:
- kind: api
repo: blog
title: Blog API
description: A modular, async Blog API backend for FastAPI microservices. Provides streamlined CRUD operations for articles and authors.
path: apis/blog/site
- kind: tutorial
repo: media-manager
title: Media Manager Tutorial
description: Step-by-step guide to the Media Manager architecture, ingestion pipeline, automation workflows, and integrations.
path: tutorials/media-manager/site

63
core.py Normal file
View File

@@ -0,0 +1,63 @@
import json
from pathlib import Path
from typing import Any
from config import MCPBundle
from mcp.server.fastmcp import FastMCP
class MCPServer:
"""MCP server serving a pre-built documentation bundle."""
def __init__(self, bundle: MCPBundle) -> None:
self.mcp_root = bundle.root
self.app = FastMCP(
name=f"{bundle.name}-mcp",
host="0.0.0.0",
port=bundle.port,
)
self._register_resources()
self._register_tools()
# ------------------------------------------------------------------
# Helpers
# ------------------------------------------------------------------
def _read_json(self, path: Path) -> Any:
if not path.exists():
return {"error": "not_found", "path": str(path)}
return json.loads(path.read_text(encoding="utf-8"))
# ------------------------------------------------------------------
# MCP resources
# ------------------------------------------------------------------
def _register_resources(self) -> None:
@self.app.resource("doc://index")
def index():
return self._read_json(self.mcp_root / "index.json")
@self.app.resource("doc://nav")
def nav():
return self._read_json(self.mcp_root / "nav.json")
@self.app.resource("doc://modules/{module}")
def module(module: str):
return self._read_json(self.mcp_root / "modules" / f"{module}.json")
# ------------------------------------------------------------------
# MCP tools
# ------------------------------------------------------------------
def _register_tools(self) -> None:
@self.app.tool()
def ping() -> str:
return "pong"
# ------------------------------------------------------------------
# ASGI exposure
# ------------------------------------------------------------------
@property
def asgi(self):
return self.app

View File

@@ -44,6 +44,8 @@
<link rel="stylesheet" href="/assets/_mkdocstrings.css"> <link rel="stylesheet" href="/assets/_mkdocstrings.css">
<link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -84,7 +86,7 @@
<a href="/." title="dagpipe" class="md-header__button md-logo" aria-label="dagpipe" data-md-component="logo"> <a href="/." title="dagpipe" class="md-header__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 2v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6h-2v-3c0-1.11-.89-2-2-2h-6V8h2V2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -201,7 +203,7 @@
<a href="/." title="dagpipe" class="md-nav__button md-logo" aria-label="dagpipe" data-md-component="logo"> <a href="/." title="dagpipe" class="md-nav__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 2v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6h-2v-3c0-1.11-.89-2-2-2h-6V8h2V2z"/></svg>
</a> </a>
dagpipe dagpipe
@@ -216,7 +218,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/." class="md-nav__link"> <a href="/lib/" class="md-nav__link">
@@ -287,7 +289,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/state/" class="md-nav__link"> <a href="/lib/state/" class="md-nav__link">
@@ -366,7 +368,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/node/" class="md-nav__link"> <a href="/lib/node/" class="md-nav__link">
@@ -445,7 +447,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/graph/" class="md-nav__link"> <a href="/lib/graph/" class="md-nav__link">
@@ -524,7 +526,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/engine/" class="md-nav__link"> <a href="/lib/engine/" class="md-nav__link">
@@ -603,7 +605,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/yaml_loader/" class="md-nav__link"> <a href="/lib/yaml_loader/" class="md-nav__link">

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,7 @@
<link rel="next" href="../engine/"> <link rel="next" href="../engine/">
<link rel="icon" href="../assets/images/favicon.png"> <link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="dagpipe" class="md-header__button md-logo" aria-label="dagpipe" data-md-component="logo"> <a href="../.." title="dagpipe" class="md-header__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 2v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6h-2v-3c0-1.11-.89-2-2-2h-6V8h2V2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href=".." title="dagpipe" class="md-nav__button md-logo" aria-label="dagpipe" data-md-component="logo"> <a href="../.." title="dagpipe" class="md-nav__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 2v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6h-2v-3c0-1.11-.89-2-2-2h-6V8h2V2z"/></svg>
</a> </a>
dagpipe dagpipe
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href=".." class="md-nav__link"> <a href="../" class="md-nav__link">
@@ -1327,7 +1329,7 @@
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">children</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">children</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1375,7 +1377,7 @@
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="../node/#dagpipe.node.Node">Node</a>, ...]</code> <code>tuple[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="../node/#dagpipe.node.Node">Node</a>, ...]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1399,7 +1401,7 @@ Outgoing neighbors.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">nodes</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">nodes</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1418,7 +1420,7 @@ Outgoing neighbors.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="../node/#dagpipe.node.Node">Node</a>, ...]</code> <code>tuple[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="../node/#dagpipe.node.Node">Node</a>, ...]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1442,7 +1444,7 @@ All registered nodes.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">parents</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">parents</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1490,7 +1492,7 @@ All registered nodes.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="../node/#dagpipe.node.Node">Node</a>, ...]</code> <code>tuple[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="../node/#dagpipe.node.Node">Node</a>, ...]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1514,7 +1516,7 @@ Incoming neighbors.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">roots</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">roots</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1533,7 +1535,7 @@ Incoming neighbors.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="../node/#dagpipe.node.Node">Node</a>, ...]</code> <code>tuple[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="../node/#dagpipe.node.Node">Node</a>, ...]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1621,10 +1623,10 @@ Entry point nodes.</p>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

File diff suppressed because it is too large Load Diff

View File

@@ -9,13 +9,13 @@
<link rel="prev" href=".."> <link rel="prev" href="../">
<link rel="next" href="../node/"> <link rel="next" href="../node/">
<link rel="icon" href="../assets/images/favicon.png"> <link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="dagpipe" class="md-header__button md-logo" aria-label="dagpipe" data-md-component="logo"> <a href="../.." title="dagpipe" class="md-header__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 2v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6h-2v-3c0-1.11-.89-2-2-2h-6V8h2V2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href=".." title="dagpipe" class="md-nav__button md-logo" aria-label="dagpipe" data-md-component="logo"> <a href="../.." title="dagpipe" class="md-nav__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 2v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6h-2v-3c0-1.11-.89-2-2-2h-6V8h2V2z"/></svg>
</a> </a>
dagpipe dagpipe
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href=".." class="md-nav__link"> <a href="../" class="md-nav__link">
@@ -1356,7 +1358,7 @@ modifying an existing state, nodes create new child states via <code>fork()</cod
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="dagpipe.state.Payload._data">_data</span></code></td> <td><code><span title="dagpipe.state.Payload._data">_data</span></code></td>
<td> <td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code> <code><span title="collections.abc.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1418,7 +1420,7 @@ modifying an existing state, nodes create new child states via <code>fork()</cod
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code> <code><span title="collections.abc.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1602,7 +1604,11 @@ Read-only view of the underlying data.</p>
</span> </span>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">iter_paths</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">iter_paths</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">data</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1624,7 +1630,7 @@ Read-only view of the underlying data.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>data</code></td> <td><code>data</code></td>
<td> <td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code> <code><span title="collections.abc.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1664,7 +1670,7 @@ Read-only view of the underlying data.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Iterable">Iterable</span>[str]</code> <code><span title="collections.abc.Iterable">Iterable</span>[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1707,7 +1713,7 @@ Generator yielding dot-paths.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Iterable">Iterable</span>[str]</code> <code><span title="collections.abc.Iterable">Iterable</span>[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1753,7 +1759,7 @@ Iterator over top-level keys.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>updates</code></td> <td><code>updates</code></td>
<td> <td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code> <code><span title="collections.abc.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1846,7 +1852,7 @@ Iterator over top-level keys.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="dagpipe.state.Schema.tree">tree</span></code></td> <td><code><span title="dagpipe.state.Schema.tree">tree</span></code></td>
<td> <td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="dagpipe.state.SchemaNode">SchemaNode</span>]</code> <code><span title="collections.abc.Mapping">Mapping</span>[str, <span title="dagpipe.state.SchemaNode">SchemaNode</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1982,7 +1988,7 @@ Iterator over top-level keys.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>updates</code></td> <td><code>updates</code></td>
<td> <td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code> <code><span title="collections.abc.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2068,7 +2074,21 @@ Iterator over top-level keys.</p>
</span> </span>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">State</span><span class="p">(</span><span class="n">payload</span><span class="p">:</span> <span class="n">Payload</span><span class="p">,</span> <span class="n">confidence</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">parent</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">State</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">history</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(),</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">())</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span>
<span class="normal"><a href="#__codelineno-0-6">6</a></span>
<span class="normal"><a href="#__codelineno-0-7">7</a></span>
<span class="normal"><a href="#__codelineno-0-8">8</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">State</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">payload</span><span class="p">:</span> <span class="n">Payload</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">confidence</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">parent</span><span class="p">:</span> <span class="n">State</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a> <span class="n">history</span><span class="p">:</span> <span class="nb">tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(),</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a> <span class="n">metadata</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(),</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8"></a><span class="p">)</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -2145,7 +2165,7 @@ Iterator over top-level keys.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="dagpipe.state.State.history">history</span></code></td> <td><code><span title="dagpipe.state.State.history">history</span></code></td>
<td> <td>
<code><span title="typing.Tuple">Tuple</span>[str, ...]</code> <code>Tuple[str, ...]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2156,7 +2176,7 @@ Iterator over top-level keys.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="dagpipe.state.State.metadata">metadata</span></code></td> <td><code><span title="dagpipe.state.State.metadata">metadata</span></code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <span title="typing.Any">Any</span>]</code> <code>Dict[str, <span title="typing.Any">Any</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2221,7 +2241,19 @@ Iterator over top-level keys.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">fork</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">payload_update</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">confidence_delta</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">node_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">metadata_update</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">State</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span>
<span class="normal"><a href="#__codelineno-0-6">6</a></span>
<span class="normal"><a href="#__codelineno-0-7">7</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">fork</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="o">*</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">payload_update</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">confidence_delta</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a> <span class="n">node_id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a> <span class="n">metadata_update</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">State</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -2243,7 +2275,7 @@ Iterator over top-level keys.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>payload_update</code></td> <td><code>payload_update</code></td>
<td> <td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code> <code><span title="collections.abc.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2285,7 +2317,7 @@ Iterator over top-level keys.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>metadata_update</code></td> <td><code>metadata_update</code></td>
<td> <td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code> <code><span title="collections.abc.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2501,7 +2533,7 @@ Iterator over top-level keys.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">lineage</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">State</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">lineage</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">tuple</span><span class="p">[</span><span class="n">State</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -2520,7 +2552,7 @@ Iterator over top-level keys.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="#dagpipe.state.State">State</a>, ...]</code> <code>tuple[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="#dagpipe.state.State">State</a>, ...]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2608,10 +2640,10 @@ Ordered execution lineage (root first).</p>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -13,7 +13,7 @@
<link rel="icon" href="../assets/images/favicon.png"> <link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -22,10 +22,10 @@
<link rel="stylesheet" href="../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -44,9 +44,11 @@
<link rel="stylesheet" href="../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -88,10 +90,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="dagpipe" class="md-header__button md-logo" aria-label="dagpipe" data-md-component="logo"> <a href="../.." title="dagpipe" class="md-header__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 2v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6h-2v-3c0-1.11-.89-2-2-2h-6V8h2V2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -205,10 +207,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href=".." title="dagpipe" class="md-nav__button md-logo" aria-label="dagpipe" data-md-component="logo"> <a href="../.." title="dagpipe" class="md-nav__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 2v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6h-2v-3c0-1.11-.89-2-2-2h-6V8h2V2z"/></svg>
</a> </a>
dagpipe dagpipe
@@ -223,7 +225,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href=".." class="md-nav__link"> <a href="../" class="md-nav__link">
@@ -966,7 +968,15 @@ and initial payloads.</p>
</span> </span>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Pipeline</span><span class="p">(</span><span class="n">engine</span><span class="p">:</span> <span class="n">Engine</span><span class="p">,</span> <span class="n">state_cls</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="n">State</span><span class="p">],</span> <span class="n">initial_payload</span><span class="p">:</span> <span class="n">Payload</span><span class="p">)</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Pipeline</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">engine</span><span class="p">:</span> <span class="n">Engine</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">state_cls</span><span class="p">:</span> <span class="nb">type</span><span class="p">[</span><span class="n">State</span><span class="p">],</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">initial_payload</span><span class="p">:</span> <span class="n">Payload</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="p">)</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -999,7 +1009,7 @@ and initial payloads.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="dagpipe.yaml_loader.Pipeline.state_cls">state_cls</span></code></td> <td><code><span title="dagpipe.yaml_loader.Pipeline.state_cls">state_cls</span></code></td>
<td> <td>
<code><span title="typing.Type">Type</span>[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="../state/#dagpipe.state.State">State</a>]</code> <code>Type[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="../state/#dagpipe.state.State">State</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1053,7 +1063,11 @@ and initial payloads.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">run</span><span class="p">(</span><span class="n">payload_override</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">State</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">run</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">payload_override</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">State</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1075,7 +1089,7 @@ and initial payloads.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>payload_override</code></td> <td><code>payload_override</code></td>
<td> <td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code> <code><span title="collections.abc.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1280,10 +1294,10 @@ Terminal execution states.</p>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -0,0 +1,6 @@
{
"project": "dagpipe",
"type": "docforge-model",
"modules_count": 6,
"source": "docforge"
}

View File

@@ -0,0 +1,485 @@
{
"module": "dagpipe.engine",
"content": {
"path": "dagpipe.engine",
"docstring": "# Summary\n\nExecution engine responsible for running pipelines and graphs.\n\nThe `Engine` executes `Node` objects and propagates immutable `State` instances\nthrough either a linear sequence or a directed acyclic graph (`Graph`).\nIt orchestrates execution order, branching, and state propagation.\n\n---\n\n# Guarantees\n\n- Deterministic execution and consistent state lineage.\n- Orchestrates execution without modifying `Graph`, `Node`, or `State` objects.",
"objects": {
"deque": {
"name": "deque",
"kind": "alias",
"path": "dagpipe.engine.deque",
"signature": "<bound method Alias.signature of Alias('deque', 'collections.deque')>",
"docstring": null
},
"AsyncIterator": {
"name": "AsyncIterator",
"kind": "alias",
"path": "dagpipe.engine.AsyncIterator",
"signature": "<bound method Alias.signature of Alias('AsyncIterator', 'collections.abc.AsyncIterator')>",
"docstring": null
},
"Awaitable": {
"name": "Awaitable",
"kind": "alias",
"path": "dagpipe.engine.Awaitable",
"signature": "<bound method Alias.signature of Alias('Awaitable', 'collections.abc.Awaitable')>",
"docstring": null
},
"Callable": {
"name": "Callable",
"kind": "alias",
"path": "dagpipe.engine.Callable",
"signature": "<bound method Alias.signature of Alias('Callable', 'collections.abc.Callable')>",
"docstring": null
},
"Iterator": {
"name": "Iterator",
"kind": "alias",
"path": "dagpipe.engine.Iterator",
"signature": "<bound method Alias.signature of Alias('Iterator', 'collections.abc.Iterator')>",
"docstring": null
},
"Sequence": {
"name": "Sequence",
"kind": "alias",
"path": "dagpipe.engine.Sequence",
"signature": "<bound method Alias.signature of Alias('Sequence', 'collections.abc.Sequence')>",
"docstring": null
},
"Any": {
"name": "Any",
"kind": "alias",
"path": "dagpipe.engine.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "dagpipe.engine.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"Graph": {
"name": "Graph",
"kind": "class",
"path": "dagpipe.engine.Graph",
"signature": "<bound method Alias.signature of Alias('Graph', 'dagpipe.graph.Graph')>",
"docstring": "Directed Acyclic Graph defining execution topology of `Node` objects.\n\nNotes:\n **Responsibilities:**\n\n - Stores node connectivity and validates that the topology remains acyclic.\n - Structure determines how `State` flows between nodes during execution.\n\n **Guarantees:**\n\n - Topology is acyclic. Node relationships remain consistent.\n - Thread-safe for concurrent reads after construction.",
"members": {
"add_edge": {
"name": "add_edge",
"kind": "function",
"path": "dagpipe.engine.Graph.add_edge",
"signature": "<bound method Alias.signature of Alias('add_edge', 'dagpipe.graph.Graph.add_edge')>",
"docstring": "Add a directed edge from `src` to `dst`.\n\nArgs:\n src (Node):\n Source node.\n\n dst (Node):\n Destination node.\n\nRaises:\n TypeError:\n If `src` or `dst` is not a `Node`.\n\n ValueError:\n If the edge would create a cycle or if `src` and `dst` are common.\n\nNotes:\n - Validates node types.\n - Prevents cycles.\n - Registers nodes if not present.\n - Updates parent and child mappings."
},
"add_root": {
"name": "add_root",
"kind": "function",
"path": "dagpipe.engine.Graph.add_root",
"signature": "<bound method Alias.signature of Alias('add_root', 'dagpipe.graph.Graph.add_root')>",
"docstring": "Add a root node with no parents.\n\nArgs:\n node (Node):\n Node to add as a root.\n\nRaises:\n TypeError:\n If node is not a Node instance."
},
"children": {
"name": "children",
"kind": "function",
"path": "dagpipe.engine.Graph.children",
"signature": "<bound method Alias.signature of Alias('children', 'dagpipe.graph.Graph.children')>",
"docstring": "Return child nodes of a node.\n\nArgs:\n node (Node):\n Node to query.\n\nReturns:\n Tuple[Node, ...]:\n Outgoing neighbors."
},
"parents": {
"name": "parents",
"kind": "function",
"path": "dagpipe.engine.Graph.parents",
"signature": "<bound method Alias.signature of Alias('parents', 'dagpipe.graph.Graph.parents')>",
"docstring": "Return parent nodes of a node.\n\nArgs:\n node (Node):\n Node to query.\n\nReturns:\n Tuple[Node, ...]:\n Incoming neighbors."
},
"roots": {
"name": "roots",
"kind": "function",
"path": "dagpipe.engine.Graph.roots",
"signature": "<bound method Alias.signature of Alias('roots', 'dagpipe.graph.Graph.roots')>",
"docstring": "Return root nodes (nodes with no incoming edges).\n\nReturns:\n Tuple[Node, ...]:\n Entry point nodes."
},
"nodes": {
"name": "nodes",
"kind": "function",
"path": "dagpipe.engine.Graph.nodes",
"signature": "<bound method Alias.signature of Alias('nodes', 'dagpipe.graph.Graph.nodes')>",
"docstring": "Return all nodes in the graph.\n\nReturns:\n Tuple[Node, ...]:\n All registered nodes."
}
}
},
"AsyncNode": {
"name": "AsyncNode",
"kind": "class",
"path": "dagpipe.engine.AsyncNode",
"signature": "<bound method Alias.signature of Alias('AsyncNode', 'dagpipe.node.AsyncNode')>",
"docstring": "Base class for nodes whose execution is asynchronous.\n\nSubclasses implement `resolve_async` (an async generator yielding derived\n`State` objects). The engine dispatches to `resolve_async` when running an\nasync traversal (see `Engine.run_async`).\n\nSync-only engines (and the base `Node.run`) treat an `AsyncNode` as a no-op\nconsumer: calling `run` on an `AsyncNode` returns no states, signalling that\nan async engine is required.",
"members": {
"resolve": {
"name": "resolve",
"kind": "function",
"path": "dagpipe.engine.AsyncNode.resolve",
"signature": "<bound method Alias.signature of Alias('resolve', 'dagpipe.node.AsyncNode.resolve')>",
"docstring": null
},
"resolve_async": {
"name": "resolve_async",
"kind": "function",
"path": "dagpipe.engine.AsyncNode.resolve_async",
"signature": "<bound method Alias.signature of Alias('resolve_async', 'dagpipe.node.AsyncNode.resolve_async')>",
"docstring": "Execute node logic asynchronously.\n\nArgs:\n state (State):\n Input execution state.\n\nReturns:\n Iterable[State]:\n Derived execution state(s).\n\nNotes:\n Subclasses implement this. Must not mutate the input state.\n Should use `fork()` to create child states."
},
"run_async": {
"name": "run_async",
"kind": "function",
"path": "dagpipe.engine.AsyncNode.run_async",
"signature": "<bound method Alias.signature of Alias('run_async', 'dagpipe.node.AsyncNode.run_async')>",
"docstring": "Execute this node asynchronously on a state, validating outputs."
}
}
},
"Node": {
"name": "Node",
"kind": "class",
"path": "dagpipe.engine.Node",
"signature": "<bound method Alias.signature of Alias('Node', 'dagpipe.node.Node')>",
"docstring": "Base class for all dagpipe execution nodes.\n\nAttributes:\n id (str):\n Unique identifier of the node (snake_case dotted format).\n\n name (str):\n Human-readable display name.\n\nNotes:\n **Responsibilities:**\n\n - Represents a deterministic unit of execution in the pipeline graph.\n - Consumes one `State` and produces zero, one, or many derived states.\n - Defines execution logic and enables branching, filtering, and transformation.\n\n **Guarantees:**\n\n - Nodes must never mutate the input `State`.\n - Instances are singletons per subclass and reused across executions.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "dagpipe.engine.Node.id",
"signature": "<bound method Alias.signature of Alias('id', 'dagpipe.node.Node.id')>",
"docstring": null
},
"name": {
"name": "name",
"kind": "attribute",
"path": "dagpipe.engine.Node.name",
"signature": "<bound method Alias.signature of Alias('name', 'dagpipe.node.Node.name')>",
"docstring": null
},
"node_id_to_name": {
"name": "node_id_to_name",
"kind": "function",
"path": "dagpipe.engine.Node.node_id_to_name",
"signature": "<bound method Alias.signature of Alias('node_id_to_name', 'dagpipe.node.Node.node_id_to_name')>",
"docstring": "Convert a dotted snake_case node ID into a human-readable name.\n\nArgs:\n node_id (str):\n Unique node identifier (e.g., 'entity.resolve.numeric_merchant').\n\nReturns:\n str:\n Human-readable display name (e.g., 'Entity › Resolve › Numeric Merchant')."
},
"clean_id_and_name": {
"name": "clean_id_and_name",
"kind": "function",
"path": "dagpipe.engine.Node.clean_id_and_name",
"signature": "<bound method Alias.signature of Alias('clean_id_and_name', 'dagpipe.node.Node.clean_id_and_name')>",
"docstring": "Normalize and validate node ID and display name.\n\nRaises:\n TypeError:\n If ID is not a string.\n ValueError:\n If ID format is invalid.\n\nNotes:\n **Guarantees:**\n\n - Generates ID from module and class name if missing.\n - Validates ID format.\n - Generates human-readable name if missing."
},
"run": {
"name": "run",
"kind": "function",
"path": "dagpipe.engine.Node.run",
"signature": "<bound method Alias.signature of Alias('run', 'dagpipe.node.Node.run')>",
"docstring": "Execute this node on a `State`.\n\nArgs:\n state (State):\n Input execution state.\n\nReturns:\n tuple[State, ...]:\n Derived execution states.\n\nRaises:\n TypeError:\n If `resolve()` yields a non-`State` object."
},
"fork": {
"name": "fork",
"kind": "function",
"path": "dagpipe.engine.Node.fork",
"signature": "<bound method Alias.signature of Alias('fork', 'dagpipe.node.Node.fork')>",
"docstring": "Create a child `State` attributed to this node.\n\nArgs:\n state (State):\n Parent execution state.\n\n payload_update (Mapping[str, Any], optional):\n Dot-path payload updates.\n\n confidence_delta (float, optional):\n Confidence adjustment.\n\n metadata_update (Mapping[str, Any], optional):\n Metadata updates.\n\nReturns:\n State:\n New child execution state.\n\nNotes:\n **Responsibilities:**\n\n - Convenience wrapper around `State.fork()` that automatically\n records this node's ID in state history."
},
"resolve": {
"name": "resolve",
"kind": "function",
"path": "dagpipe.engine.Node.resolve",
"signature": "<bound method Alias.signature of Alias('resolve', 'dagpipe.node.Node.resolve')>",
"docstring": "Execute node logic.\n\nArgs:\n state (State):\n Input execution state.\n\nYields:\n State:\n Derived execution state(s).\n\nNotes:\n **Responsibilities:**\n\n - Subclasses implement specific resolution behavior.\n - Must not mutate input state.\n - Should use `fork()` to create child states.\n - May yield zero states to terminate a branch."
},
"is_async": {
"name": "is_async",
"kind": "function",
"path": "dagpipe.engine.Node.is_async",
"signature": "<bound method Alias.signature of Alias('is_async', 'dagpipe.node.Node.is_async')>",
"docstring": "Return whether this node executes asynchronously."
}
}
},
"State": {
"name": "State",
"kind": "class",
"path": "dagpipe.engine.State",
"signature": "<bound method Alias.signature of Alias('State', 'dagpipe.state.State')>",
"docstring": "Immutable execution state propagated through dagpipe pipeline.\n\nAttributes:\n payload (Payload):\n Execution data container.\n\n schema (ClassVar[Schema]):\n Payload validation schema.\n\n confidence (float):\n Execution confidence score.\n\n parent (Optional[State]):\n Parent state reference.\n\n depth (int):\n Execution depth.\n\n history (Tuple[str, ...]):\n Ordered node execution lineage.\n\n metadata (Dict[str, Any]):\n Execution metadata.\n\nNotes:\n **Responsibilities:**\n\n - Represents a complete execution snapshot at a specific point in\n pipeline traversal.\n - Fundamental unit of execution in `dagpipe`.\n - Fully thread-safe due to immutability.",
"members": {
"payload": {
"name": "payload",
"kind": "attribute",
"path": "dagpipe.engine.State.payload",
"signature": "<bound method Alias.signature of Alias('payload', 'dagpipe.state.State.payload')>",
"docstring": null
},
"schema": {
"name": "schema",
"kind": "attribute",
"path": "dagpipe.engine.State.schema",
"signature": "<bound method Alias.signature of Alias('schema', 'dagpipe.state.State.schema')>",
"docstring": null
},
"confidence": {
"name": "confidence",
"kind": "attribute",
"path": "dagpipe.engine.State.confidence",
"signature": "<bound method Alias.signature of Alias('confidence', 'dagpipe.state.State.confidence')>",
"docstring": null
},
"parent": {
"name": "parent",
"kind": "attribute",
"path": "dagpipe.engine.State.parent",
"signature": "<bound method Alias.signature of Alias('parent', 'dagpipe.state.State.parent')>",
"docstring": null
},
"depth": {
"name": "depth",
"kind": "attribute",
"path": "dagpipe.engine.State.depth",
"signature": "<bound method Alias.signature of Alias('depth', 'dagpipe.state.State.depth')>",
"docstring": null
},
"history": {
"name": "history",
"kind": "attribute",
"path": "dagpipe.engine.State.history",
"signature": "<bound method Alias.signature of Alias('history', 'dagpipe.state.State.history')>",
"docstring": null
},
"metadata": {
"name": "metadata",
"kind": "attribute",
"path": "dagpipe.engine.State.metadata",
"signature": "<bound method Alias.signature of Alias('metadata', 'dagpipe.state.State.metadata')>",
"docstring": null
},
"fork": {
"name": "fork",
"kind": "function",
"path": "dagpipe.engine.State.fork",
"signature": "<bound method Alias.signature of Alias('fork', 'dagpipe.state.State.fork')>",
"docstring": "Create a new child `State` derived from this state.\n\nArgs:\n payload_update (Mapping[str, Any], optional):\n Dot-path updates applied to the payload.\n\n confidence_delta (float, optional):\n Adjustment applied to current confidence.\n\n node_id (str, optional):\n Identifier of the node creating this state.\n\n metadata_update (Mapping[str, Any], optional):\n Updates merged into state metadata.\n\nReturns:\n State:\n A new immutable `State` instance.\n\nNotes:\n **Guarantees:**\n\n - This is the only supported mechanism for modifying execution data.\n - Validates payload updates, preserves lineage, increments depth,\n and appends to history."
},
"lineage": {
"name": "lineage",
"kind": "function",
"path": "dagpipe.engine.State.lineage",
"signature": "<bound method Alias.signature of Alias('lineage', 'dagpipe.state.State.lineage')>",
"docstring": "Return lineage from root to this State.\n\nReturns:\n Tuple[State, ...]:\n Ordered execution lineage (root first)."
},
"get": {
"name": "get",
"kind": "function",
"path": "dagpipe.engine.State.get",
"signature": "<bound method Alias.signature of Alias('get', 'dagpipe.state.State.get')>",
"docstring": "Retrieve payload value.\n\nArgs:\n key (str):\n Dot-path key.\n default (Any, optional):\n Fallback value.\n\nReturns:\n Any:\n Stored value or default."
},
"has": {
"name": "has",
"kind": "function",
"path": "dagpipe.engine.State.has",
"signature": "<bound method Alias.signature of Alias('has', 'dagpipe.state.State.has')>",
"docstring": "Check whether payload contains key.\n\nArgs:\n key (str):\n Dot-path key.\n\nReturns:\n bool:\n Existence of the key."
}
}
},
"StepHook": {
"name": "StepHook",
"kind": "attribute",
"path": "dagpipe.engine.StepHook",
"signature": null,
"docstring": null
},
"AsyncStepHook": {
"name": "AsyncStepHook",
"kind": "attribute",
"path": "dagpipe.engine.AsyncStepHook",
"signature": null,
"docstring": null
},
"ProgressMessage": {
"name": "ProgressMessage",
"kind": "class",
"path": "dagpipe.engine.ProgressMessage",
"signature": "<bound method Class.signature of Class('ProgressMessage', 33, 82)>",
"docstring": "Lightweight progress payload emitted by engine step hooks.\n\nMirrors the imperative `ProgressMessage` used by the legacy orchestrator so\ncallers can surface counts/lines/errors without coupling the engine to pydantic.",
"members": {
"lines": {
"name": "lines",
"kind": "attribute",
"path": "dagpipe.engine.ProgressMessage.lines",
"signature": null,
"docstring": null
},
"blocks": {
"name": "blocks",
"kind": "attribute",
"path": "dagpipe.engine.ProgressMessage.blocks",
"signature": null,
"docstring": null
},
"count": {
"name": "count",
"kind": "attribute",
"path": "dagpipe.engine.ProgressMessage.count",
"signature": null,
"docstring": null
},
"unit": {
"name": "unit",
"kind": "attribute",
"path": "dagpipe.engine.ProgressMessage.unit",
"signature": null,
"docstring": null
},
"raw_ocr_line": {
"name": "raw_ocr_line",
"kind": "attribute",
"path": "dagpipe.engine.ProgressMessage.raw_ocr_line",
"signature": null,
"docstring": null
},
"error": {
"name": "error",
"kind": "attribute",
"path": "dagpipe.engine.ProgressMessage.error",
"signature": null,
"docstring": null
},
"step": {
"name": "step",
"kind": "attribute",
"path": "dagpipe.engine.ProgressMessage.step",
"signature": null,
"docstring": null
},
"status": {
"name": "status",
"kind": "attribute",
"path": "dagpipe.engine.ProgressMessage.status",
"signature": null,
"docstring": null
},
"as_dict": {
"name": "as_dict",
"kind": "function",
"path": "dagpipe.engine.ProgressMessage.as_dict",
"signature": "<bound method Function.signature of Function('as_dict', 72, 82)>",
"docstring": null
}
}
},
"StepResult": {
"name": "StepResult",
"kind": "class",
"path": "dagpipe.engine.StepResult",
"signature": "<bound method Class.signature of Class('StepResult', 85, 103)>",
"docstring": "A single checkpointed step within an async/resumable engine run.\n\nAttributes:\n index (int): Ordinal index of the step.\n node_id (str): Identifier of the node associated with this step.\n states (Tuple[State, ...]): States produced by running this step.\n completed (bool): Whether this step succeeded (vs. paused/interrupted).",
"members": {
"index": {
"name": "index",
"kind": "attribute",
"path": "dagpipe.engine.StepResult.index",
"signature": null,
"docstring": null
},
"node_id": {
"name": "node_id",
"kind": "attribute",
"path": "dagpipe.engine.StepResult.node_id",
"signature": null,
"docstring": null
},
"states": {
"name": "states",
"kind": "attribute",
"path": "dagpipe.engine.StepResult.states",
"signature": null,
"docstring": null
},
"completed": {
"name": "completed",
"kind": "attribute",
"path": "dagpipe.engine.StepResult.completed",
"signature": null,
"docstring": null
}
}
},
"Engine": {
"name": "Engine",
"kind": "class",
"path": "dagpipe.engine.Engine",
"signature": "<bound method Class.signature of Class('Engine', 106, 537)>",
"docstring": "Execution engine responsible for running pipeline logic.\n\nNotes:\n **Responsibilities:**\n\n - Accepts either a linear sequence of `Node` objects or a `Graph`\n defining execution topology.\n - Propagates immutable `State` objects through `Node` objects and\n collects terminal states.\n - Supports synchronous (`run`) and asynchronous (`run_async`)\n execution, dispatching per-node.\n - Supports step-wise / resumable execution and progress hooks.\n\n **Guarantees:**\n\n - Never mutates `State`, `Node`, or `Graph` instances.\n - `State` objects are never modified in place; each branch produces\n independent instances.\n - Execution order is deterministic and follows graph or pipeline topology.\n - Thread-safe for concurrent execution.",
"members": {
"MODE_LINEAR": {
"name": "MODE_LINEAR",
"kind": "attribute",
"path": "dagpipe.engine.Engine.MODE_LINEAR",
"signature": null,
"docstring": null
},
"MODE_GRAPH": {
"name": "MODE_GRAPH",
"kind": "attribute",
"path": "dagpipe.engine.Engine.MODE_GRAPH",
"signature": null,
"docstring": null
},
"run": {
"name": "run",
"kind": "function",
"path": "dagpipe.engine.Engine.run",
"signature": "<bound method Function.signature of Function('run', 165, 200)>",
"docstring": "Execute the pipeline starting from a root `State`.\n\nArgs:\n root (State):\n Initial execution state.\n\nReturns:\n list[State]:\n Terminal execution states produced by the pipeline.\n\nRaises:\n TypeError:\n If `root` is not a `State` instance.\n\n RuntimeError:\n If the engine execution mode is invalid.\n\nNotes:\n **Responsibilities:**\n\n - Selects execution mode, propagates state through nodes, creates\n new instances for branches, and collects terminal states."
},
"run_async": {
"name": "run_async",
"kind": "function",
"path": "dagpipe.engine.Engine.run_async",
"signature": "<bound method Function.signature of Function('run_async', 206, 232)>",
"docstring": "Execute the pipeline starting from `root`, dispatching sync vs async nodes.\n\nArgs:\n root (State):\n Initial execution state.\n\nReturns:\n list[State]:\n Terminal execution states produced by the pipeline.\n\nNotes:\n Each node is executed with `Node.run` when synchronous and\n `AsyncNode.run_async` when asynchronous. Linear and graph topologies\n are both supported."
},
"run_steps": {
"name": "run_steps",
"kind": "function",
"path": "dagpipe.engine.Engine.run_steps",
"signature": "<bound method Function.signature of Function('run_steps', 322, 384)>",
"docstring": "Execute the pipeline step-by-step, yielding one `StepResult` per step.\n\nArgs:\n root (State):\n Initial execution state.\n\n resume_from (int, optional):\n Skip steps at index < `resume_from` (for resume-after-partial).\n Steps are 0-indexed.\n\n on_step (StepHook, optional):\n Callback `(step, status, message)` invoked per step; falls back\n to the engine-level hook when unset.\n\nYields:\n StepResult:\n One per executed node/step, carrying the produced states.\n\nNotes:\n This is a synchronous, generator-based checkpoint interface compatible\n with the imperative resume-by-step behaviour of the legacy\n orchestrator. Use `run_steps_async` for async nodes."
},
"run_steps_async": {
"name": "run_steps_async",
"kind": "function",
"path": "dagpipe.engine.Engine.run_steps_async",
"signature": "<bound method Function.signature of Function('run_steps_async', 386, 440)>",
"docstring": "Async variant of `run_steps` supporting `AsyncNode` execution.\n\nArgs:\n root (State):\n Initial execution state.\n\n resume_from (int, optional):\n Skip steps at index < `resume_from`.\n\n on_step (AsyncStepHook, optional):\n Async callback `(step, status, message)` invoked per step.\n\nYields:\n StepResult:\n One per executed node/step."
},
"nodes": {
"name": "nodes",
"kind": "attribute",
"path": "dagpipe.engine.Engine.nodes",
"signature": null,
"docstring": "Return nodes managed by this engine.\n\nReturns:\n tuple[Node, ...]:\n Ordered sequence in linear mode or all nodes in graph mode."
}
}
},
"Incomplete": {
"name": "Incomplete",
"kind": "alias",
"path": "dagpipe.engine.Incomplete",
"signature": "<bound method Alias.signature of Alias('Incomplete', '_typeshed.Incomplete')>",
"docstring": null
}
}
}
}

View File

@@ -0,0 +1,132 @@
{
"module": "dagpipe.graph",
"content": {
"path": "dagpipe.graph",
"docstring": "# Summary\n\nDefines DAG structure connecting nodes.\n\nA `Graph` describes execution topology only. It does not execute nodes or manage\n`State`. Execution is handled by an `Engine`.\n\n---\n\n# Responsibilities\n\n- Multiple roots, branching, and merging support.\n- Deterministic traversal based on topology.\n- Graph is mutable during construction but treated as immutable at runtime.",
"objects": {
"defaultdict": {
"name": "defaultdict",
"kind": "alias",
"path": "dagpipe.graph.defaultdict",
"signature": "<bound method Alias.signature of Alias('defaultdict', 'collections.defaultdict')>",
"docstring": null
},
"Node": {
"name": "Node",
"kind": "class",
"path": "dagpipe.graph.Node",
"signature": "<bound method Alias.signature of Alias('Node', 'dagpipe.node.Node')>",
"docstring": "Base class for all dagpipe execution nodes.\n\nAttributes:\n id (str):\n Unique identifier of the node (snake_case dotted format).\n\n name (str):\n Human-readable display name.\n\nNotes:\n **Responsibilities:**\n\n - Represents a deterministic unit of execution in the pipeline graph.\n - Consumes one `State` and produces zero, one, or many derived states.\n - Defines execution logic and enables branching, filtering, and transformation.\n\n **Guarantees:**\n\n - Nodes must never mutate the input `State`.\n - Instances are singletons per subclass and reused across executions.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "dagpipe.graph.Node.id",
"signature": "<bound method Alias.signature of Alias('id', 'dagpipe.node.Node.id')>",
"docstring": null
},
"name": {
"name": "name",
"kind": "attribute",
"path": "dagpipe.graph.Node.name",
"signature": "<bound method Alias.signature of Alias('name', 'dagpipe.node.Node.name')>",
"docstring": null
},
"node_id_to_name": {
"name": "node_id_to_name",
"kind": "function",
"path": "dagpipe.graph.Node.node_id_to_name",
"signature": "<bound method Alias.signature of Alias('node_id_to_name', 'dagpipe.node.Node.node_id_to_name')>",
"docstring": "Convert a dotted snake_case node ID into a human-readable name.\n\nArgs:\n node_id (str):\n Unique node identifier (e.g., 'entity.resolve.numeric_merchant').\n\nReturns:\n str:\n Human-readable display name (e.g., 'Entity › Resolve › Numeric Merchant')."
},
"clean_id_and_name": {
"name": "clean_id_and_name",
"kind": "function",
"path": "dagpipe.graph.Node.clean_id_and_name",
"signature": "<bound method Alias.signature of Alias('clean_id_and_name', 'dagpipe.node.Node.clean_id_and_name')>",
"docstring": "Normalize and validate node ID and display name.\n\nRaises:\n TypeError:\n If ID is not a string.\n ValueError:\n If ID format is invalid.\n\nNotes:\n **Guarantees:**\n\n - Generates ID from module and class name if missing.\n - Validates ID format.\n - Generates human-readable name if missing."
},
"run": {
"name": "run",
"kind": "function",
"path": "dagpipe.graph.Node.run",
"signature": "<bound method Alias.signature of Alias('run', 'dagpipe.node.Node.run')>",
"docstring": "Execute this node on a `State`.\n\nArgs:\n state (State):\n Input execution state.\n\nReturns:\n tuple[State, ...]:\n Derived execution states.\n\nRaises:\n TypeError:\n If `resolve()` yields a non-`State` object."
},
"fork": {
"name": "fork",
"kind": "function",
"path": "dagpipe.graph.Node.fork",
"signature": "<bound method Alias.signature of Alias('fork', 'dagpipe.node.Node.fork')>",
"docstring": "Create a child `State` attributed to this node.\n\nArgs:\n state (State):\n Parent execution state.\n\n payload_update (Mapping[str, Any], optional):\n Dot-path payload updates.\n\n confidence_delta (float, optional):\n Confidence adjustment.\n\n metadata_update (Mapping[str, Any], optional):\n Metadata updates.\n\nReturns:\n State:\n New child execution state.\n\nNotes:\n **Responsibilities:**\n\n - Convenience wrapper around `State.fork()` that automatically\n records this node's ID in state history."
},
"resolve": {
"name": "resolve",
"kind": "function",
"path": "dagpipe.graph.Node.resolve",
"signature": "<bound method Alias.signature of Alias('resolve', 'dagpipe.node.Node.resolve')>",
"docstring": "Execute node logic.\n\nArgs:\n state (State):\n Input execution state.\n\nYields:\n State:\n Derived execution state(s).\n\nNotes:\n **Responsibilities:**\n\n - Subclasses implement specific resolution behavior.\n - Must not mutate input state.\n - Should use `fork()` to create child states.\n - May yield zero states to terminate a branch."
},
"is_async": {
"name": "is_async",
"kind": "function",
"path": "dagpipe.graph.Node.is_async",
"signature": "<bound method Alias.signature of Alias('is_async', 'dagpipe.node.Node.is_async')>",
"docstring": "Return whether this node executes asynchronously."
}
}
},
"Graph": {
"name": "Graph",
"kind": "class",
"path": "dagpipe.graph.Graph",
"signature": "<bound method Class.signature of Class('Graph', 23, 212)>",
"docstring": "Directed Acyclic Graph defining execution topology of `Node` objects.\n\nNotes:\n **Responsibilities:**\n\n - Stores node connectivity and validates that the topology remains acyclic.\n - Structure determines how `State` flows between nodes during execution.\n\n **Guarantees:**\n\n - Topology is acyclic. Node relationships remain consistent.\n - Thread-safe for concurrent reads after construction.",
"members": {
"add_edge": {
"name": "add_edge",
"kind": "function",
"path": "dagpipe.graph.Graph.add_edge",
"signature": "<bound method Function.signature of Function('add_edge', 84, 125)>",
"docstring": "Add a directed edge from `src` to `dst`.\n\nArgs:\n src (Node):\n Source node.\n\n dst (Node):\n Destination node.\n\nRaises:\n TypeError:\n If `src` or `dst` is not a `Node`.\n\n ValueError:\n If the edge would create a cycle or if `src` and `dst` are common.\n\nNotes:\n - Validates node types.\n - Prevents cycles.\n - Registers nodes if not present.\n - Updates parent and child mappings."
},
"add_root": {
"name": "add_root",
"kind": "function",
"path": "dagpipe.graph.Graph.add_root",
"signature": "<bound method Function.signature of Function('add_root', 127, 146)>",
"docstring": "Add a root node with no parents.\n\nArgs:\n node (Node):\n Node to add as a root.\n\nRaises:\n TypeError:\n If node is not a Node instance."
},
"children": {
"name": "children",
"kind": "function",
"path": "dagpipe.graph.Graph.children",
"signature": "<bound method Function.signature of Function('children', 148, 161)>",
"docstring": "Return child nodes of a node.\n\nArgs:\n node (Node):\n Node to query.\n\nReturns:\n Tuple[Node, ...]:\n Outgoing neighbors."
},
"parents": {
"name": "parents",
"kind": "function",
"path": "dagpipe.graph.Graph.parents",
"signature": "<bound method Function.signature of Function('parents', 163, 176)>",
"docstring": "Return parent nodes of a node.\n\nArgs:\n node (Node):\n Node to query.\n\nReturns:\n Tuple[Node, ...]:\n Incoming neighbors."
},
"roots": {
"name": "roots",
"kind": "function",
"path": "dagpipe.graph.Graph.roots",
"signature": "<bound method Function.signature of Function('roots', 178, 187)>",
"docstring": "Return root nodes (nodes with no incoming edges).\n\nReturns:\n Tuple[Node, ...]:\n Entry point nodes."
},
"nodes": {
"name": "nodes",
"kind": "function",
"path": "dagpipe.graph.Graph.nodes",
"signature": "<bound method Function.signature of Function('nodes', 189, 198)>",
"docstring": "Return all nodes in the graph.\n\nReturns:\n Tuple[Node, ...]:\n All registered nodes."
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,253 @@
{
"module": "dagpipe.node",
"content": {
"path": "dagpipe.node",
"docstring": "# Summary\n\nDefines the `Node` abstraction used by `dagpipe`.\n\nA node represents a single unit of pipeline execution logic. It consumes one\n`State` and produces zero, one, or many new `State` objects.\n\nNodes are connected using a `Graph` and executed by an `Engine`.\n\n---\n\n# Design principles\n\n- **Pure:** Must not mutate input state.\n- **Deterministic:** Same input produces same output.\n- **Stateless:** Recommended to be stateless for reuse.\n- **Composable:** Nodes enable branching execution graphs.",
"objects": {
"inspect": {
"name": "inspect",
"kind": "alias",
"path": "dagpipe.node.inspect",
"signature": "<bound method Alias.signature of Alias('inspect', 'inspect')>",
"docstring": null
},
"re": {
"name": "re",
"kind": "alias",
"path": "dagpipe.node.re",
"signature": "<bound method Alias.signature of Alias('re', 're')>",
"docstring": null
},
"ABC": {
"name": "ABC",
"kind": "alias",
"path": "dagpipe.node.ABC",
"signature": "<bound method Alias.signature of Alias('ABC', 'abc.ABC')>",
"docstring": null
},
"abstractmethod": {
"name": "abstractmethod",
"kind": "alias",
"path": "dagpipe.node.abstractmethod",
"signature": "<bound method Alias.signature of Alias('abstractmethod', 'abc.abstractmethod')>",
"docstring": null
},
"Iterable": {
"name": "Iterable",
"kind": "alias",
"path": "dagpipe.node.Iterable",
"signature": "<bound method Alias.signature of Alias('Iterable', 'collections.abc.Iterable')>",
"docstring": null
},
"Iterator": {
"name": "Iterator",
"kind": "alias",
"path": "dagpipe.node.Iterator",
"signature": "<bound method Alias.signature of Alias('Iterator', 'collections.abc.Iterator')>",
"docstring": null
},
"Any": {
"name": "Any",
"kind": "alias",
"path": "dagpipe.node.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"cast": {
"name": "cast",
"kind": "alias",
"path": "dagpipe.node.cast",
"signature": "<bound method Alias.signature of Alias('cast', 'typing.cast')>",
"docstring": null
},
"State": {
"name": "State",
"kind": "class",
"path": "dagpipe.node.State",
"signature": "<bound method Alias.signature of Alias('State', 'dagpipe.state.State')>",
"docstring": "Immutable execution state propagated through dagpipe pipeline.\n\nAttributes:\n payload (Payload):\n Execution data container.\n\n schema (ClassVar[Schema]):\n Payload validation schema.\n\n confidence (float):\n Execution confidence score.\n\n parent (Optional[State]):\n Parent state reference.\n\n depth (int):\n Execution depth.\n\n history (Tuple[str, ...]):\n Ordered node execution lineage.\n\n metadata (Dict[str, Any]):\n Execution metadata.\n\nNotes:\n **Responsibilities:**\n\n - Represents a complete execution snapshot at a specific point in\n pipeline traversal.\n - Fundamental unit of execution in `dagpipe`.\n - Fully thread-safe due to immutability.",
"members": {
"payload": {
"name": "payload",
"kind": "attribute",
"path": "dagpipe.node.State.payload",
"signature": "<bound method Alias.signature of Alias('payload', 'dagpipe.state.State.payload')>",
"docstring": null
},
"schema": {
"name": "schema",
"kind": "attribute",
"path": "dagpipe.node.State.schema",
"signature": "<bound method Alias.signature of Alias('schema', 'dagpipe.state.State.schema')>",
"docstring": null
},
"confidence": {
"name": "confidence",
"kind": "attribute",
"path": "dagpipe.node.State.confidence",
"signature": "<bound method Alias.signature of Alias('confidence', 'dagpipe.state.State.confidence')>",
"docstring": null
},
"parent": {
"name": "parent",
"kind": "attribute",
"path": "dagpipe.node.State.parent",
"signature": "<bound method Alias.signature of Alias('parent', 'dagpipe.state.State.parent')>",
"docstring": null
},
"depth": {
"name": "depth",
"kind": "attribute",
"path": "dagpipe.node.State.depth",
"signature": "<bound method Alias.signature of Alias('depth', 'dagpipe.state.State.depth')>",
"docstring": null
},
"history": {
"name": "history",
"kind": "attribute",
"path": "dagpipe.node.State.history",
"signature": "<bound method Alias.signature of Alias('history', 'dagpipe.state.State.history')>",
"docstring": null
},
"metadata": {
"name": "metadata",
"kind": "attribute",
"path": "dagpipe.node.State.metadata",
"signature": "<bound method Alias.signature of Alias('metadata', 'dagpipe.state.State.metadata')>",
"docstring": null
},
"fork": {
"name": "fork",
"kind": "function",
"path": "dagpipe.node.State.fork",
"signature": "<bound method Alias.signature of Alias('fork', 'dagpipe.state.State.fork')>",
"docstring": "Create a new child `State` derived from this state.\n\nArgs:\n payload_update (Mapping[str, Any], optional):\n Dot-path updates applied to the payload.\n\n confidence_delta (float, optional):\n Adjustment applied to current confidence.\n\n node_id (str, optional):\n Identifier of the node creating this state.\n\n metadata_update (Mapping[str, Any], optional):\n Updates merged into state metadata.\n\nReturns:\n State:\n A new immutable `State` instance.\n\nNotes:\n **Guarantees:**\n\n - This is the only supported mechanism for modifying execution data.\n - Validates payload updates, preserves lineage, increments depth,\n and appends to history."
},
"lineage": {
"name": "lineage",
"kind": "function",
"path": "dagpipe.node.State.lineage",
"signature": "<bound method Alias.signature of Alias('lineage', 'dagpipe.state.State.lineage')>",
"docstring": "Return lineage from root to this State.\n\nReturns:\n Tuple[State, ...]:\n Ordered execution lineage (root first)."
},
"get": {
"name": "get",
"kind": "function",
"path": "dagpipe.node.State.get",
"signature": "<bound method Alias.signature of Alias('get', 'dagpipe.state.State.get')>",
"docstring": "Retrieve payload value.\n\nArgs:\n key (str):\n Dot-path key.\n default (Any, optional):\n Fallback value.\n\nReturns:\n Any:\n Stored value or default."
},
"has": {
"name": "has",
"kind": "function",
"path": "dagpipe.node.State.has",
"signature": "<bound method Alias.signature of Alias('has', 'dagpipe.state.State.has')>",
"docstring": "Check whether payload contains key.\n\nArgs:\n key (str):\n Dot-path key.\n\nReturns:\n bool:\n Existence of the key."
}
}
},
"Node": {
"name": "Node",
"kind": "class",
"path": "dagpipe.node.Node",
"signature": "<bound method Class.signature of Class('Node', 32, 276)>",
"docstring": "Base class for all dagpipe execution nodes.\n\nAttributes:\n id (str):\n Unique identifier of the node (snake_case dotted format).\n\n name (str):\n Human-readable display name.\n\nNotes:\n **Responsibilities:**\n\n - Represents a deterministic unit of execution in the pipeline graph.\n - Consumes one `State` and produces zero, one, or many derived states.\n - Defines execution logic and enables branching, filtering, and transformation.\n\n **Guarantees:**\n\n - Nodes must never mutate the input `State`.\n - Instances are singletons per subclass and reused across executions.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "dagpipe.node.Node.id",
"signature": null,
"docstring": null
},
"name": {
"name": "name",
"kind": "attribute",
"path": "dagpipe.node.Node.name",
"signature": null,
"docstring": null
},
"node_id_to_name": {
"name": "node_id_to_name",
"kind": "function",
"path": "dagpipe.node.Node.node_id_to_name",
"signature": "<bound method Function.signature of Function('node_id_to_name', 60, 80)>",
"docstring": "Convert a dotted snake_case node ID into a human-readable name.\n\nArgs:\n node_id (str):\n Unique node identifier (e.g., 'entity.resolve.numeric_merchant').\n\nReturns:\n str:\n Human-readable display name (e.g., 'Entity › Resolve › Numeric Merchant')."
},
"clean_id_and_name": {
"name": "clean_id_and_name",
"kind": "function",
"path": "dagpipe.node.Node.clean_id_and_name",
"signature": "<bound method Function.signature of Function('clean_id_and_name', 82, 119)>",
"docstring": "Normalize and validate node ID and display name.\n\nRaises:\n TypeError:\n If ID is not a string.\n ValueError:\n If ID format is invalid.\n\nNotes:\n **Guarantees:**\n\n - Generates ID from module and class name if missing.\n - Validates ID format.\n - Generates human-readable name if missing."
},
"run": {
"name": "run",
"kind": "function",
"path": "dagpipe.node.Node.run",
"signature": "<bound method Function.signature of Function('run', 149, 166)>",
"docstring": "Execute this node on a `State`.\n\nArgs:\n state (State):\n Input execution state.\n\nReturns:\n tuple[State, ...]:\n Derived execution states.\n\nRaises:\n TypeError:\n If `resolve()` yields a non-`State` object."
},
"fork": {
"name": "fork",
"kind": "function",
"path": "dagpipe.node.Node.fork",
"signature": "<bound method Function.signature of Function('fork', 178, 218)>",
"docstring": "Create a child `State` attributed to this node.\n\nArgs:\n state (State):\n Parent execution state.\n\n payload_update (Mapping[str, Any], optional):\n Dot-path payload updates.\n\n confidence_delta (float, optional):\n Confidence adjustment.\n\n metadata_update (Mapping[str, Any], optional):\n Metadata updates.\n\nReturns:\n State:\n New child execution state.\n\nNotes:\n **Responsibilities:**\n\n - Convenience wrapper around `State.fork()` that automatically\n records this node's ID in state history."
},
"resolve": {
"name": "resolve",
"kind": "function",
"path": "dagpipe.node.Node.resolve",
"signature": "<bound method Function.signature of Function('resolve', 250, 272)>",
"docstring": "Execute node logic.\n\nArgs:\n state (State):\n Input execution state.\n\nYields:\n State:\n Derived execution state(s).\n\nNotes:\n **Responsibilities:**\n\n - Subclasses implement specific resolution behavior.\n - Must not mutate input state.\n - Should use `fork()` to create child states.\n - May yield zero states to terminate a branch."
},
"is_async": {
"name": "is_async",
"kind": "function",
"path": "dagpipe.node.Node.is_async",
"signature": "<bound method Function.signature of Function('is_async', 274, 276)>",
"docstring": "Return whether this node executes asynchronously."
}
}
},
"AsyncNode": {
"name": "AsyncNode",
"kind": "class",
"path": "dagpipe.node.AsyncNode",
"signature": "<bound method Class.signature of Class('AsyncNode', 279, 342)>",
"docstring": "Base class for nodes whose execution is asynchronous.\n\nSubclasses implement `resolve_async` (an async generator yielding derived\n`State` objects). The engine dispatches to `resolve_async` when running an\nasync traversal (see `Engine.run_async`).\n\nSync-only engines (and the base `Node.run`) treat an `AsyncNode` as a no-op\nconsumer: calling `run` on an `AsyncNode` returns no states, signalling that\nan async engine is required.",
"members": {
"resolve": {
"name": "resolve",
"kind": "function",
"path": "dagpipe.node.AsyncNode.resolve",
"signature": "<bound method Function.signature of Function('resolve', 308, 309)>",
"docstring": null
},
"resolve_async": {
"name": "resolve_async",
"kind": "function",
"path": "dagpipe.node.AsyncNode.resolve_async",
"signature": "<bound method Function.signature of Function('resolve_async', 311, 327)>",
"docstring": "Execute node logic asynchronously.\n\nArgs:\n state (State):\n Input execution state.\n\nReturns:\n Iterable[State]:\n Derived execution state(s).\n\nNotes:\n Subclasses implement this. Must not mutate the input state.\n Should use `fork()` to create child states."
},
"run_async": {
"name": "run_async",
"kind": "function",
"path": "dagpipe.node.AsyncNode.run_async",
"signature": "<bound method Function.signature of Function('run_async', 329, 342)>",
"docstring": "Execute this node asynchronously on a state, validating outputs."
}
}
},
"abc": {
"name": "abc",
"kind": "alias",
"path": "dagpipe.node.abc",
"signature": "<bound method Alias.signature of Alias('abc', 'abc')>",
"docstring": null
}
}
}
}

View File

@@ -0,0 +1,267 @@
{
"module": "dagpipe.state",
"content": {
"path": "dagpipe.state",
"docstring": "# Summary\n\nDefines the core `State` object used by `dagpipe`.\n\nThe `State` represents a single point in pipeline execution. It contains\narbitrary data and metadata and is designed to be immutable. Instead of\nmodifying an existing state, nodes create new child states via `fork()`.\n\n---\n\n# Design principles\n\n- **Immutability:** States must never be modified after creation.\n All transformations must create a new state via `fork()`.\n- **Cheap cloning:** Forking must be efficient since branching may create many states.\n- **Lineage tracking:** Each state maintains a reference to its parent and\n execution metadata for debugging and observability.\n- **Domain agnostic:** State contains generic key-value data and does not\n assume any schema.\n- **Engine-friendly:** State contains execution metadata such as depth and history.",
"objects": {
"Iterable": {
"name": "Iterable",
"kind": "alias",
"path": "dagpipe.state.Iterable",
"signature": "<bound method Alias.signature of Alias('Iterable', 'collections.abc.Iterable')>",
"docstring": null
},
"Mapping": {
"name": "Mapping",
"kind": "alias",
"path": "dagpipe.state.Mapping",
"signature": "<bound method Alias.signature of Alias('Mapping', 'collections.abc.Mapping')>",
"docstring": null
},
"dataclass": {
"name": "dataclass",
"kind": "alias",
"path": "dagpipe.state.dataclass",
"signature": "<bound method Alias.signature of Alias('dataclass', 'dataclasses.dataclass')>",
"docstring": null
},
"field": {
"name": "field",
"kind": "alias",
"path": "dagpipe.state.field",
"signature": "<bound method Alias.signature of Alias('field', 'dataclasses.field')>",
"docstring": null
},
"UnionType": {
"name": "UnionType",
"kind": "alias",
"path": "dagpipe.state.UnionType",
"signature": "<bound method Alias.signature of Alias('UnionType', 'types.UnionType')>",
"docstring": null
},
"Any": {
"name": "Any",
"kind": "alias",
"path": "dagpipe.state.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"ClassVar": {
"name": "ClassVar",
"kind": "alias",
"path": "dagpipe.state.ClassVar",
"signature": "<bound method Alias.signature of Alias('ClassVar', 'typing.ClassVar')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "dagpipe.state.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"Union": {
"name": "Union",
"kind": "alias",
"path": "dagpipe.state.Union",
"signature": "<bound method Alias.signature of Alias('Union', 'typing.Union')>",
"docstring": null
},
"get_args": {
"name": "get_args",
"kind": "alias",
"path": "dagpipe.state.get_args",
"signature": "<bound method Alias.signature of Alias('get_args', 'typing.get_args')>",
"docstring": null
},
"Payload": {
"name": "Payload",
"kind": "class",
"path": "dagpipe.state.Payload",
"signature": "<bound method Class.signature of Class('Payload', 36, 193)>",
"docstring": "Immutable hierarchical container with dot-path access.\n\nAttributes:\n _data (Mapping[str, Any]):\n Immutable hierarchical data structure.\n\nNotes:\n **Responsibilities:**\n\n - Stores execution data used by `State`.\n - Supports efficient atomic updates without modifying existing instances.\n - `Payload` instances are fully thread-safe due to immutability.",
"members": {
"iter_paths": {
"name": "iter_paths",
"kind": "function",
"path": "dagpipe.state.Payload.iter_paths",
"signature": "<bound method Function.signature of Function('iter_paths', 55, 77)>",
"docstring": "Recursively yield dot-paths for all leaf nodes.\n\nArgs:\n data (Mapping[str, Any]):\n The mapping to iterate over.\n prefix (str, optional):\n Current path prefix.\n\nReturns:\n Iterable[str]:\n Generator yielding dot-paths."
},
"get": {
"name": "get",
"kind": "function",
"path": "dagpipe.state.Payload.get",
"signature": "<bound method Function.signature of Function('get', 83, 106)>",
"docstring": "Retrieve value using dot-path.\n\nArgs:\n path (str):\n Dot-separated path to the value.\n default (Any, optional):\n Default value if path doesn't exist.\n\nReturns:\n Any:\n The retrieved value or default."
},
"has": {
"name": "has",
"kind": "function",
"path": "dagpipe.state.Payload.has",
"signature": "<bound method Function.signature of Function('has', 108, 122)>",
"docstring": "Return True if path exists.\n\nArgs:\n path (str):\n Dot-separated path to check.\n\nReturns:\n bool:\n Existence of the path."
},
"update": {
"name": "update",
"kind": "function",
"path": "dagpipe.state.Payload.update",
"signature": "<bound method Function.signature of Function('update', 128, 166)>",
"docstring": "Create a new `Payload` with dot-path updates applied.\n\nArgs:\n updates (Mapping[str, Any]):\n Dot-path to value mapping.\n\nReturns:\n Payload:\n New immutable payload instance with updates.\n\nNotes:\n **Guarantees:**\n\n - Preserves existing data by copying only modified branches.\n - Returns a new immutable `Payload`."
},
"keys": {
"name": "keys",
"kind": "function",
"path": "dagpipe.state.Payload.keys",
"signature": "<bound method Function.signature of Function('keys', 172, 180)>",
"docstring": "Return top-level keys.\n\nReturns:\n Iterable[str]:\n Iterator over top-level keys."
},
"as_dict": {
"name": "as_dict",
"kind": "function",
"path": "dagpipe.state.Payload.as_dict",
"signature": "<bound method Function.signature of Function('as_dict', 182, 190)>",
"docstring": "Return underlying mapping.\n\nReturns:\n Mapping[str, Any]:\n Read-only view of the underlying data."
}
}
},
"SchemaNode": {
"name": "SchemaNode",
"kind": "attribute",
"path": "dagpipe.state.SchemaNode",
"signature": null,
"docstring": null
},
"Schema": {
"name": "Schema",
"kind": "class",
"path": "dagpipe.state.Schema",
"signature": "<bound method Class.signature of Class('Schema', 204, 337)>",
"docstring": "Immutable hierarchical schema defining allowed payload structure.\n\nAttributes:\n tree (Mapping[str, SchemaNode]):\n Hierarchical schema definition.\n\nNotes:\n **Responsibilities:**\n\n - Validates `State` payloads and updates.\n - Reusable across all `State` instances.\n - Fully thread-safe due to immutability.",
"members": {
"tree": {
"name": "tree",
"kind": "attribute",
"path": "dagpipe.state.Schema.tree",
"signature": null,
"docstring": null
},
"validate_payload": {
"name": "validate_payload",
"kind": "function",
"path": "dagpipe.state.Schema.validate_payload",
"signature": "<bound method Function.signature of Function('validate_payload', 227, 239)>",
"docstring": "Validate complete payload structure.\n\nArgs:\n payload (Payload):\n Payload to validate.\n\nRaises:\n SchemaError:\n If payload violates schema."
},
"validate_update": {
"name": "validate_update",
"kind": "function",
"path": "dagpipe.state.Schema.validate_update",
"signature": "<bound method Function.signature of Function('validate_update', 241, 254)>",
"docstring": "Validate payload update paths.\n\nArgs:\n updates (Mapping[str, Any]):\n Dot-path updates to validate.\n\nRaises:\n SchemaError:\n If any path is invalid according to the schema."
}
}
},
"SchemaError": {
"name": "SchemaError",
"kind": "class",
"path": "dagpipe.state.SchemaError",
"signature": "<bound method Class.signature of Class('SchemaError', 340, 348)>",
"docstring": "Raised when payload data violates the declared schema.\n\nIndicates invalid structure, invalid path, or invalid type.\n---"
},
"State": {
"name": "State",
"kind": "class",
"path": "dagpipe.state.State",
"signature": "<bound method Class.signature of Class('State', 351, 531)>",
"docstring": "Immutable execution state propagated through dagpipe pipeline.\n\nAttributes:\n payload (Payload):\n Execution data container.\n\n schema (ClassVar[Schema]):\n Payload validation schema.\n\n confidence (float):\n Execution confidence score.\n\n parent (Optional[State]):\n Parent state reference.\n\n depth (int):\n Execution depth.\n\n history (Tuple[str, ...]):\n Ordered node execution lineage.\n\n metadata (Dict[str, Any]):\n Execution metadata.\n\nNotes:\n **Responsibilities:**\n\n - Represents a complete execution snapshot at a specific point in\n pipeline traversal.\n - Fundamental unit of execution in `dagpipe`.\n - Fully thread-safe due to immutability.",
"members": {
"payload": {
"name": "payload",
"kind": "attribute",
"path": "dagpipe.state.State.payload",
"signature": null,
"docstring": null
},
"schema": {
"name": "schema",
"kind": "attribute",
"path": "dagpipe.state.State.schema",
"signature": null,
"docstring": null
},
"confidence": {
"name": "confidence",
"kind": "attribute",
"path": "dagpipe.state.State.confidence",
"signature": null,
"docstring": null
},
"parent": {
"name": "parent",
"kind": "attribute",
"path": "dagpipe.state.State.parent",
"signature": null,
"docstring": null
},
"depth": {
"name": "depth",
"kind": "attribute",
"path": "dagpipe.state.State.depth",
"signature": null,
"docstring": null
},
"history": {
"name": "history",
"kind": "attribute",
"path": "dagpipe.state.State.history",
"signature": null,
"docstring": null
},
"metadata": {
"name": "metadata",
"kind": "attribute",
"path": "dagpipe.state.State.metadata",
"signature": null,
"docstring": null
},
"fork": {
"name": "fork",
"kind": "function",
"path": "dagpipe.state.State.fork",
"signature": "<bound method Function.signature of Function('fork', 404, 467)>",
"docstring": "Create a new child `State` derived from this state.\n\nArgs:\n payload_update (Mapping[str, Any], optional):\n Dot-path updates applied to the payload.\n\n confidence_delta (float, optional):\n Adjustment applied to current confidence.\n\n node_id (str, optional):\n Identifier of the node creating this state.\n\n metadata_update (Mapping[str, Any], optional):\n Updates merged into state metadata.\n\nReturns:\n State:\n A new immutable `State` instance.\n\nNotes:\n **Guarantees:**\n\n - This is the only supported mechanism for modifying execution data.\n - Validates payload updates, preserves lineage, increments depth,\n and appends to history."
},
"lineage": {
"name": "lineage",
"kind": "function",
"path": "dagpipe.state.State.lineage",
"signature": "<bound method Function.signature of Function('lineage', 469, 486)>",
"docstring": "Return lineage from root to this State.\n\nReturns:\n Tuple[State, ...]:\n Ordered execution lineage (root first)."
},
"get": {
"name": "get",
"kind": "function",
"path": "dagpipe.state.State.get",
"signature": "<bound method Function.signature of Function('get', 488, 503)>",
"docstring": "Retrieve payload value.\n\nArgs:\n key (str):\n Dot-path key.\n default (Any, optional):\n Fallback value.\n\nReturns:\n Any:\n Stored value or default."
},
"has": {
"name": "has",
"kind": "function",
"path": "dagpipe.state.State.has",
"signature": "<bound method Function.signature of Function('has', 505, 518)>",
"docstring": "Check whether payload contains key.\n\nArgs:\n key (str):\n Dot-path key.\n\nReturns:\n bool:\n Existence of the key."
}
}
},
"Incomplete": {
"name": "Incomplete",
"kind": "alias",
"path": "dagpipe.state.Incomplete",
"signature": "<bound method Alias.signature of Alias('Incomplete', '_typeshed.Incomplete')>",
"docstring": null
}
}
}
}

View File

@@ -0,0 +1,443 @@
{
"module": "dagpipe.yaml_loader",
"content": {
"path": "dagpipe.yaml_loader",
"docstring": "# Summary\n\nLoads dagpipe pipelines from YAML configuration.\n\nCreates fully configured pipeline objects from declarative YAML definitions,\nincluding `Schema`, `State` subclasses, `Node` instances, `Graph` topology,\nand initial payloads.",
"objects": {
"importlib": {
"name": "importlib",
"kind": "alias",
"path": "dagpipe.yaml_loader.importlib",
"signature": "<bound method Alias.signature of Alias('importlib', 'importlib')>",
"docstring": null
},
"types": {
"name": "types",
"kind": "alias",
"path": "dagpipe.yaml_loader.types",
"signature": "<bound method Alias.signature of Alias('types', 'types')>",
"docstring": null
},
"Mapping": {
"name": "Mapping",
"kind": "alias",
"path": "dagpipe.yaml_loader.Mapping",
"signature": "<bound method Alias.signature of Alias('Mapping', 'collections.abc.Mapping')>",
"docstring": null
},
"dataclass": {
"name": "dataclass",
"kind": "alias",
"path": "dagpipe.yaml_loader.dataclass",
"signature": "<bound method Alias.signature of Alias('dataclass', 'dataclasses.dataclass')>",
"docstring": null
},
"Any": {
"name": "Any",
"kind": "alias",
"path": "dagpipe.yaml_loader.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"cast": {
"name": "cast",
"kind": "alias",
"path": "dagpipe.yaml_loader.cast",
"signature": "<bound method Alias.signature of Alias('cast', 'typing.cast')>",
"docstring": null
},
"yaml": {
"name": "yaml",
"kind": "alias",
"path": "dagpipe.yaml_loader.yaml",
"signature": "<bound method Alias.signature of Alias('yaml', 'yaml')>",
"docstring": null
},
"Engine": {
"name": "Engine",
"kind": "class",
"path": "dagpipe.yaml_loader.Engine",
"signature": "<bound method Alias.signature of Alias('Engine', 'dagpipe.engine.Engine')>",
"docstring": "Execution engine responsible for running pipeline logic.\n\nNotes:\n **Responsibilities:**\n\n - Accepts either a linear sequence of `Node` objects or a `Graph`\n defining execution topology.\n - Propagates immutable `State` objects through `Node` objects and\n collects terminal states.\n - Supports synchronous (`run`) and asynchronous (`run_async`)\n execution, dispatching per-node.\n - Supports step-wise / resumable execution and progress hooks.\n\n **Guarantees:**\n\n - Never mutates `State`, `Node`, or `Graph` instances.\n - `State` objects are never modified in place; each branch produces\n independent instances.\n - Execution order is deterministic and follows graph or pipeline topology.\n - Thread-safe for concurrent execution.",
"members": {
"MODE_LINEAR": {
"name": "MODE_LINEAR",
"kind": "attribute",
"path": "dagpipe.yaml_loader.Engine.MODE_LINEAR",
"signature": "<bound method Alias.signature of Alias('MODE_LINEAR', 'dagpipe.engine.Engine.MODE_LINEAR')>",
"docstring": null
},
"MODE_GRAPH": {
"name": "MODE_GRAPH",
"kind": "attribute",
"path": "dagpipe.yaml_loader.Engine.MODE_GRAPH",
"signature": "<bound method Alias.signature of Alias('MODE_GRAPH', 'dagpipe.engine.Engine.MODE_GRAPH')>",
"docstring": null
},
"run": {
"name": "run",
"kind": "function",
"path": "dagpipe.yaml_loader.Engine.run",
"signature": "<bound method Alias.signature of Alias('run', 'dagpipe.engine.Engine.run')>",
"docstring": "Execute the pipeline starting from a root `State`.\n\nArgs:\n root (State):\n Initial execution state.\n\nReturns:\n list[State]:\n Terminal execution states produced by the pipeline.\n\nRaises:\n TypeError:\n If `root` is not a `State` instance.\n\n RuntimeError:\n If the engine execution mode is invalid.\n\nNotes:\n **Responsibilities:**\n\n - Selects execution mode, propagates state through nodes, creates\n new instances for branches, and collects terminal states."
},
"run_async": {
"name": "run_async",
"kind": "function",
"path": "dagpipe.yaml_loader.Engine.run_async",
"signature": "<bound method Alias.signature of Alias('run_async', 'dagpipe.engine.Engine.run_async')>",
"docstring": "Execute the pipeline starting from `root`, dispatching sync vs async nodes.\n\nArgs:\n root (State):\n Initial execution state.\n\nReturns:\n list[State]:\n Terminal execution states produced by the pipeline.\n\nNotes:\n Each node is executed with `Node.run` when synchronous and\n `AsyncNode.run_async` when asynchronous. Linear and graph topologies\n are both supported."
},
"run_steps": {
"name": "run_steps",
"kind": "function",
"path": "dagpipe.yaml_loader.Engine.run_steps",
"signature": "<bound method Alias.signature of Alias('run_steps', 'dagpipe.engine.Engine.run_steps')>",
"docstring": "Execute the pipeline step-by-step, yielding one `StepResult` per step.\n\nArgs:\n root (State):\n Initial execution state.\n\n resume_from (int, optional):\n Skip steps at index < `resume_from` (for resume-after-partial).\n Steps are 0-indexed.\n\n on_step (StepHook, optional):\n Callback `(step, status, message)` invoked per step; falls back\n to the engine-level hook when unset.\n\nYields:\n StepResult:\n One per executed node/step, carrying the produced states.\n\nNotes:\n This is a synchronous, generator-based checkpoint interface compatible\n with the imperative resume-by-step behaviour of the legacy\n orchestrator. Use `run_steps_async` for async nodes."
},
"run_steps_async": {
"name": "run_steps_async",
"kind": "function",
"path": "dagpipe.yaml_loader.Engine.run_steps_async",
"signature": "<bound method Alias.signature of Alias('run_steps_async', 'dagpipe.engine.Engine.run_steps_async')>",
"docstring": "Async variant of `run_steps` supporting `AsyncNode` execution.\n\nArgs:\n root (State):\n Initial execution state.\n\n resume_from (int, optional):\n Skip steps at index < `resume_from`.\n\n on_step (AsyncStepHook, optional):\n Async callback `(step, status, message)` invoked per step.\n\nYields:\n StepResult:\n One per executed node/step."
},
"nodes": {
"name": "nodes",
"kind": "attribute",
"path": "dagpipe.yaml_loader.Engine.nodes",
"signature": "<bound method Alias.signature of Alias('nodes', 'dagpipe.engine.Engine.nodes')>",
"docstring": "Return nodes managed by this engine.\n\nReturns:\n tuple[Node, ...]:\n Ordered sequence in linear mode or all nodes in graph mode."
}
}
},
"Graph": {
"name": "Graph",
"kind": "class",
"path": "dagpipe.yaml_loader.Graph",
"signature": "<bound method Alias.signature of Alias('Graph', 'dagpipe.graph.Graph')>",
"docstring": "Directed Acyclic Graph defining execution topology of `Node` objects.\n\nNotes:\n **Responsibilities:**\n\n - Stores node connectivity and validates that the topology remains acyclic.\n - Structure determines how `State` flows between nodes during execution.\n\n **Guarantees:**\n\n - Topology is acyclic. Node relationships remain consistent.\n - Thread-safe for concurrent reads after construction.",
"members": {
"add_edge": {
"name": "add_edge",
"kind": "function",
"path": "dagpipe.yaml_loader.Graph.add_edge",
"signature": "<bound method Alias.signature of Alias('add_edge', 'dagpipe.graph.Graph.add_edge')>",
"docstring": "Add a directed edge from `src` to `dst`.\n\nArgs:\n src (Node):\n Source node.\n\n dst (Node):\n Destination node.\n\nRaises:\n TypeError:\n If `src` or `dst` is not a `Node`.\n\n ValueError:\n If the edge would create a cycle or if `src` and `dst` are common.\n\nNotes:\n - Validates node types.\n - Prevents cycles.\n - Registers nodes if not present.\n - Updates parent and child mappings."
},
"add_root": {
"name": "add_root",
"kind": "function",
"path": "dagpipe.yaml_loader.Graph.add_root",
"signature": "<bound method Alias.signature of Alias('add_root', 'dagpipe.graph.Graph.add_root')>",
"docstring": "Add a root node with no parents.\n\nArgs:\n node (Node):\n Node to add as a root.\n\nRaises:\n TypeError:\n If node is not a Node instance."
},
"children": {
"name": "children",
"kind": "function",
"path": "dagpipe.yaml_loader.Graph.children",
"signature": "<bound method Alias.signature of Alias('children', 'dagpipe.graph.Graph.children')>",
"docstring": "Return child nodes of a node.\n\nArgs:\n node (Node):\n Node to query.\n\nReturns:\n Tuple[Node, ...]:\n Outgoing neighbors."
},
"parents": {
"name": "parents",
"kind": "function",
"path": "dagpipe.yaml_loader.Graph.parents",
"signature": "<bound method Alias.signature of Alias('parents', 'dagpipe.graph.Graph.parents')>",
"docstring": "Return parent nodes of a node.\n\nArgs:\n node (Node):\n Node to query.\n\nReturns:\n Tuple[Node, ...]:\n Incoming neighbors."
},
"roots": {
"name": "roots",
"kind": "function",
"path": "dagpipe.yaml_loader.Graph.roots",
"signature": "<bound method Alias.signature of Alias('roots', 'dagpipe.graph.Graph.roots')>",
"docstring": "Return root nodes (nodes with no incoming edges).\n\nReturns:\n Tuple[Node, ...]:\n Entry point nodes."
},
"nodes": {
"name": "nodes",
"kind": "function",
"path": "dagpipe.yaml_loader.Graph.nodes",
"signature": "<bound method Alias.signature of Alias('nodes', 'dagpipe.graph.Graph.nodes')>",
"docstring": "Return all nodes in the graph.\n\nReturns:\n Tuple[Node, ...]:\n All registered nodes."
}
}
},
"Node": {
"name": "Node",
"kind": "class",
"path": "dagpipe.yaml_loader.Node",
"signature": "<bound method Alias.signature of Alias('Node', 'dagpipe.node.Node')>",
"docstring": "Base class for all dagpipe execution nodes.\n\nAttributes:\n id (str):\n Unique identifier of the node (snake_case dotted format).\n\n name (str):\n Human-readable display name.\n\nNotes:\n **Responsibilities:**\n\n - Represents a deterministic unit of execution in the pipeline graph.\n - Consumes one `State` and produces zero, one, or many derived states.\n - Defines execution logic and enables branching, filtering, and transformation.\n\n **Guarantees:**\n\n - Nodes must never mutate the input `State`.\n - Instances are singletons per subclass and reused across executions.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "dagpipe.yaml_loader.Node.id",
"signature": "<bound method Alias.signature of Alias('id', 'dagpipe.node.Node.id')>",
"docstring": null
},
"name": {
"name": "name",
"kind": "attribute",
"path": "dagpipe.yaml_loader.Node.name",
"signature": "<bound method Alias.signature of Alias('name', 'dagpipe.node.Node.name')>",
"docstring": null
},
"node_id_to_name": {
"name": "node_id_to_name",
"kind": "function",
"path": "dagpipe.yaml_loader.Node.node_id_to_name",
"signature": "<bound method Alias.signature of Alias('node_id_to_name', 'dagpipe.node.Node.node_id_to_name')>",
"docstring": "Convert a dotted snake_case node ID into a human-readable name.\n\nArgs:\n node_id (str):\n Unique node identifier (e.g., 'entity.resolve.numeric_merchant').\n\nReturns:\n str:\n Human-readable display name (e.g., 'Entity › Resolve › Numeric Merchant')."
},
"clean_id_and_name": {
"name": "clean_id_and_name",
"kind": "function",
"path": "dagpipe.yaml_loader.Node.clean_id_and_name",
"signature": "<bound method Alias.signature of Alias('clean_id_and_name', 'dagpipe.node.Node.clean_id_and_name')>",
"docstring": "Normalize and validate node ID and display name.\n\nRaises:\n TypeError:\n If ID is not a string.\n ValueError:\n If ID format is invalid.\n\nNotes:\n **Guarantees:**\n\n - Generates ID from module and class name if missing.\n - Validates ID format.\n - Generates human-readable name if missing."
},
"run": {
"name": "run",
"kind": "function",
"path": "dagpipe.yaml_loader.Node.run",
"signature": "<bound method Alias.signature of Alias('run', 'dagpipe.node.Node.run')>",
"docstring": "Execute this node on a `State`.\n\nArgs:\n state (State):\n Input execution state.\n\nReturns:\n tuple[State, ...]:\n Derived execution states.\n\nRaises:\n TypeError:\n If `resolve()` yields a non-`State` object."
},
"fork": {
"name": "fork",
"kind": "function",
"path": "dagpipe.yaml_loader.Node.fork",
"signature": "<bound method Alias.signature of Alias('fork', 'dagpipe.node.Node.fork')>",
"docstring": "Create a child `State` attributed to this node.\n\nArgs:\n state (State):\n Parent execution state.\n\n payload_update (Mapping[str, Any], optional):\n Dot-path payload updates.\n\n confidence_delta (float, optional):\n Confidence adjustment.\n\n metadata_update (Mapping[str, Any], optional):\n Metadata updates.\n\nReturns:\n State:\n New child execution state.\n\nNotes:\n **Responsibilities:**\n\n - Convenience wrapper around `State.fork()` that automatically\n records this node's ID in state history."
},
"resolve": {
"name": "resolve",
"kind": "function",
"path": "dagpipe.yaml_loader.Node.resolve",
"signature": "<bound method Alias.signature of Alias('resolve', 'dagpipe.node.Node.resolve')>",
"docstring": "Execute node logic.\n\nArgs:\n state (State):\n Input execution state.\n\nYields:\n State:\n Derived execution state(s).\n\nNotes:\n **Responsibilities:**\n\n - Subclasses implement specific resolution behavior.\n - Must not mutate input state.\n - Should use `fork()` to create child states.\n - May yield zero states to terminate a branch."
},
"is_async": {
"name": "is_async",
"kind": "function",
"path": "dagpipe.yaml_loader.Node.is_async",
"signature": "<bound method Alias.signature of Alias('is_async', 'dagpipe.node.Node.is_async')>",
"docstring": "Return whether this node executes asynchronously."
}
}
},
"Payload": {
"name": "Payload",
"kind": "class",
"path": "dagpipe.yaml_loader.Payload",
"signature": "<bound method Alias.signature of Alias('Payload', 'dagpipe.state.Payload')>",
"docstring": "Immutable hierarchical container with dot-path access.\n\nAttributes:\n _data (Mapping[str, Any]):\n Immutable hierarchical data structure.\n\nNotes:\n **Responsibilities:**\n\n - Stores execution data used by `State`.\n - Supports efficient atomic updates without modifying existing instances.\n - `Payload` instances are fully thread-safe due to immutability.",
"members": {
"iter_paths": {
"name": "iter_paths",
"kind": "function",
"path": "dagpipe.yaml_loader.Payload.iter_paths",
"signature": "<bound method Alias.signature of Alias('iter_paths', 'dagpipe.state.Payload.iter_paths')>",
"docstring": "Recursively yield dot-paths for all leaf nodes.\n\nArgs:\n data (Mapping[str, Any]):\n The mapping to iterate over.\n prefix (str, optional):\n Current path prefix.\n\nReturns:\n Iterable[str]:\n Generator yielding dot-paths."
},
"get": {
"name": "get",
"kind": "function",
"path": "dagpipe.yaml_loader.Payload.get",
"signature": "<bound method Alias.signature of Alias('get', 'dagpipe.state.Payload.get')>",
"docstring": "Retrieve value using dot-path.\n\nArgs:\n path (str):\n Dot-separated path to the value.\n default (Any, optional):\n Default value if path doesn't exist.\n\nReturns:\n Any:\n The retrieved value or default."
},
"has": {
"name": "has",
"kind": "function",
"path": "dagpipe.yaml_loader.Payload.has",
"signature": "<bound method Alias.signature of Alias('has', 'dagpipe.state.Payload.has')>",
"docstring": "Return True if path exists.\n\nArgs:\n path (str):\n Dot-separated path to check.\n\nReturns:\n bool:\n Existence of the path."
},
"update": {
"name": "update",
"kind": "function",
"path": "dagpipe.yaml_loader.Payload.update",
"signature": "<bound method Alias.signature of Alias('update', 'dagpipe.state.Payload.update')>",
"docstring": "Create a new `Payload` with dot-path updates applied.\n\nArgs:\n updates (Mapping[str, Any]):\n Dot-path to value mapping.\n\nReturns:\n Payload:\n New immutable payload instance with updates.\n\nNotes:\n **Guarantees:**\n\n - Preserves existing data by copying only modified branches.\n - Returns a new immutable `Payload`."
},
"keys": {
"name": "keys",
"kind": "function",
"path": "dagpipe.yaml_loader.Payload.keys",
"signature": "<bound method Alias.signature of Alias('keys', 'dagpipe.state.Payload.keys')>",
"docstring": "Return top-level keys.\n\nReturns:\n Iterable[str]:\n Iterator over top-level keys."
},
"as_dict": {
"name": "as_dict",
"kind": "function",
"path": "dagpipe.yaml_loader.Payload.as_dict",
"signature": "<bound method Alias.signature of Alias('as_dict', 'dagpipe.state.Payload.as_dict')>",
"docstring": "Return underlying mapping.\n\nReturns:\n Mapping[str, Any]:\n Read-only view of the underlying data."
}
}
},
"Schema": {
"name": "Schema",
"kind": "class",
"path": "dagpipe.yaml_loader.Schema",
"signature": "<bound method Alias.signature of Alias('Schema', 'dagpipe.state.Schema')>",
"docstring": "Immutable hierarchical schema defining allowed payload structure.\n\nAttributes:\n tree (Mapping[str, SchemaNode]):\n Hierarchical schema definition.\n\nNotes:\n **Responsibilities:**\n\n - Validates `State` payloads and updates.\n - Reusable across all `State` instances.\n - Fully thread-safe due to immutability.",
"members": {
"tree": {
"name": "tree",
"kind": "attribute",
"path": "dagpipe.yaml_loader.Schema.tree",
"signature": "<bound method Alias.signature of Alias('tree', 'dagpipe.state.Schema.tree')>",
"docstring": null
},
"validate_payload": {
"name": "validate_payload",
"kind": "function",
"path": "dagpipe.yaml_loader.Schema.validate_payload",
"signature": "<bound method Alias.signature of Alias('validate_payload', 'dagpipe.state.Schema.validate_payload')>",
"docstring": "Validate complete payload structure.\n\nArgs:\n payload (Payload):\n Payload to validate.\n\nRaises:\n SchemaError:\n If payload violates schema."
},
"validate_update": {
"name": "validate_update",
"kind": "function",
"path": "dagpipe.yaml_loader.Schema.validate_update",
"signature": "<bound method Alias.signature of Alias('validate_update', 'dagpipe.state.Schema.validate_update')>",
"docstring": "Validate payload update paths.\n\nArgs:\n updates (Mapping[str, Any]):\n Dot-path updates to validate.\n\nRaises:\n SchemaError:\n If any path is invalid according to the schema."
}
}
},
"State": {
"name": "State",
"kind": "class",
"path": "dagpipe.yaml_loader.State",
"signature": "<bound method Alias.signature of Alias('State', 'dagpipe.state.State')>",
"docstring": "Immutable execution state propagated through dagpipe pipeline.\n\nAttributes:\n payload (Payload):\n Execution data container.\n\n schema (ClassVar[Schema]):\n Payload validation schema.\n\n confidence (float):\n Execution confidence score.\n\n parent (Optional[State]):\n Parent state reference.\n\n depth (int):\n Execution depth.\n\n history (Tuple[str, ...]):\n Ordered node execution lineage.\n\n metadata (Dict[str, Any]):\n Execution metadata.\n\nNotes:\n **Responsibilities:**\n\n - Represents a complete execution snapshot at a specific point in\n pipeline traversal.\n - Fundamental unit of execution in `dagpipe`.\n - Fully thread-safe due to immutability.",
"members": {
"payload": {
"name": "payload",
"kind": "attribute",
"path": "dagpipe.yaml_loader.State.payload",
"signature": "<bound method Alias.signature of Alias('payload', 'dagpipe.state.State.payload')>",
"docstring": null
},
"schema": {
"name": "schema",
"kind": "attribute",
"path": "dagpipe.yaml_loader.State.schema",
"signature": "<bound method Alias.signature of Alias('schema', 'dagpipe.state.State.schema')>",
"docstring": null
},
"confidence": {
"name": "confidence",
"kind": "attribute",
"path": "dagpipe.yaml_loader.State.confidence",
"signature": "<bound method Alias.signature of Alias('confidence', 'dagpipe.state.State.confidence')>",
"docstring": null
},
"parent": {
"name": "parent",
"kind": "attribute",
"path": "dagpipe.yaml_loader.State.parent",
"signature": "<bound method Alias.signature of Alias('parent', 'dagpipe.state.State.parent')>",
"docstring": null
},
"depth": {
"name": "depth",
"kind": "attribute",
"path": "dagpipe.yaml_loader.State.depth",
"signature": "<bound method Alias.signature of Alias('depth', 'dagpipe.state.State.depth')>",
"docstring": null
},
"history": {
"name": "history",
"kind": "attribute",
"path": "dagpipe.yaml_loader.State.history",
"signature": "<bound method Alias.signature of Alias('history', 'dagpipe.state.State.history')>",
"docstring": null
},
"metadata": {
"name": "metadata",
"kind": "attribute",
"path": "dagpipe.yaml_loader.State.metadata",
"signature": "<bound method Alias.signature of Alias('metadata', 'dagpipe.state.State.metadata')>",
"docstring": null
},
"fork": {
"name": "fork",
"kind": "function",
"path": "dagpipe.yaml_loader.State.fork",
"signature": "<bound method Alias.signature of Alias('fork', 'dagpipe.state.State.fork')>",
"docstring": "Create a new child `State` derived from this state.\n\nArgs:\n payload_update (Mapping[str, Any], optional):\n Dot-path updates applied to the payload.\n\n confidence_delta (float, optional):\n Adjustment applied to current confidence.\n\n node_id (str, optional):\n Identifier of the node creating this state.\n\n metadata_update (Mapping[str, Any], optional):\n Updates merged into state metadata.\n\nReturns:\n State:\n A new immutable `State` instance.\n\nNotes:\n **Guarantees:**\n\n - This is the only supported mechanism for modifying execution data.\n - Validates payload updates, preserves lineage, increments depth,\n and appends to history."
},
"lineage": {
"name": "lineage",
"kind": "function",
"path": "dagpipe.yaml_loader.State.lineage",
"signature": "<bound method Alias.signature of Alias('lineage', 'dagpipe.state.State.lineage')>",
"docstring": "Return lineage from root to this State.\n\nReturns:\n Tuple[State, ...]:\n Ordered execution lineage (root first)."
},
"get": {
"name": "get",
"kind": "function",
"path": "dagpipe.yaml_loader.State.get",
"signature": "<bound method Alias.signature of Alias('get', 'dagpipe.state.State.get')>",
"docstring": "Retrieve payload value.\n\nArgs:\n key (str):\n Dot-path key.\n default (Any, optional):\n Fallback value.\n\nReturns:\n Any:\n Stored value or default."
},
"has": {
"name": "has",
"kind": "function",
"path": "dagpipe.yaml_loader.State.has",
"signature": "<bound method Alias.signature of Alias('has', 'dagpipe.state.State.has')>",
"docstring": "Check whether payload contains key.\n\nArgs:\n key (str):\n Dot-path key.\n\nReturns:\n bool:\n Existence of the key."
}
}
},
"Pipeline": {
"name": "Pipeline",
"kind": "class",
"path": "dagpipe.yaml_loader.Pipeline",
"signature": "<bound method Class.signature of Class('Pipeline', 29, 83)>",
"docstring": "Executable pipeline created from YAML configuration.\n\nAttributes:\n engine (Engine):\n Execution engine responsible for running the pipeline.\n\n state_cls (Type[State]):\n Dynamically created `State` subclass with configured schema.\n\n initial_payload (Payload):\n Default payload used when execution begins.\n\nNotes:\n **Responsibilities:**\n\n - Encapsulates engine, state type, and initial payload.\n - Provides a simplified interface for executing configured pipelines.\n - Safe for concurrent execution if underlying nodes are thread-safe.",
"members": {
"engine": {
"name": "engine",
"kind": "attribute",
"path": "dagpipe.yaml_loader.Pipeline.engine",
"signature": null,
"docstring": null
},
"state_cls": {
"name": "state_cls",
"kind": "attribute",
"path": "dagpipe.yaml_loader.Pipeline.state_cls",
"signature": null,
"docstring": null
},
"initial_payload": {
"name": "initial_payload",
"kind": "attribute",
"path": "dagpipe.yaml_loader.Pipeline.initial_payload",
"signature": null,
"docstring": null
},
"run": {
"name": "run",
"kind": "function",
"path": "dagpipe.yaml_loader.Pipeline.run",
"signature": "<bound method Function.signature of Function('run', 56, 83)>",
"docstring": "Execute the pipeline.\n\nArgs:\n payload_override (Mapping[str, Any], optional):\n Payload values overriding initial payload.\n\nReturns:\n list[State]:\n Terminal execution states.\n\nNotes:\n **Responsibilities:**\n\n - Merges override payload with initial payload.\n - Creates root `State` and executes engine."
}
}
},
"load_pipeline": {
"name": "load_pipeline",
"kind": "function",
"path": "dagpipe.yaml_loader.load_pipeline",
"signature": "<bound method Function.signature of Function('load_pipeline', 91, 125)>",
"docstring": "Load pipeline from YAML file.\n\nArgs:\n path (str):\n Path to YAML configuration file.\n\nReturns:\n Pipeline:\n Executable pipeline instance.\n\nNotes:\n **Responsibilities:**\n\n - Loads YAML configuration and builds schema.\n - Creates `State` subclass and loads `Node` instances.\n - Builds `Graph` topology and initializes `Engine`."
}
}
}
}

View File

@@ -0,0 +1,26 @@
[
{
"module": "dagpipe",
"resource": "doc://modules/dagpipe"
},
{
"module": "dagpipe.engine",
"resource": "doc://modules/dagpipe.engine"
},
{
"module": "dagpipe.graph",
"resource": "doc://modules/dagpipe.graph"
},
{
"module": "dagpipe.node",
"resource": "doc://modules/dagpipe.node"
},
{
"module": "dagpipe.state",
"resource": "doc://modules/dagpipe.state"
},
{
"module": "dagpipe.yaml_loader",
"resource": "doc://modules/dagpipe.yaml_loader"
}
]

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -44,6 +44,8 @@
<link rel="stylesheet" href="/assets/_mkdocstrings.css"> <link rel="stylesheet" href="/assets/_mkdocstrings.css">
<link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -84,7 +86,7 @@
<a href="/." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="/." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -201,7 +203,7 @@
<a href="/." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="/." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -216,7 +218,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/." class="md-nav__link"> <a href="/lib/" class="md-nav__link">
@@ -265,7 +267,7 @@
<div class="md-nav__link md-nav__container"> <div class="md-nav__link md-nav__container">
<a href="/loaders/" class="md-nav__link "> <a href="/lib/loaders/" class="md-nav__link ">
@@ -300,7 +302,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/loaders/griffe_loader/" class="md-nav__link"> <a href="/lib/loaders/griffe_loader/" class="md-nav__link">
@@ -361,7 +363,7 @@
<div class="md-nav__link md-nav__container"> <div class="md-nav__link md-nav__container">
<a href="/models/" class="md-nav__link "> <a href="/lib/models/" class="md-nav__link ">
@@ -396,7 +398,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/models/module/" class="md-nav__link"> <a href="/lib/models/module/" class="md-nav__link">
@@ -419,7 +421,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/models/object/" class="md-nav__link"> <a href="/lib/models/object/" class="md-nav__link">
@@ -442,7 +444,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/models/project/" class="md-nav__link"> <a href="/lib/models/project/" class="md-nav__link">
@@ -503,7 +505,7 @@
<div class="md-nav__link md-nav__container"> <div class="md-nav__link md-nav__container">
<a href="/nav/" class="md-nav__link "> <a href="/lib/nav/" class="md-nav__link ">
@@ -538,7 +540,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/nav/spec/" class="md-nav__link"> <a href="/lib/nav/spec/" class="md-nav__link">
@@ -561,7 +563,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/nav/resolver/" class="md-nav__link"> <a href="/lib/nav/resolver/" class="md-nav__link">
@@ -584,7 +586,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/nav/mkdocs/" class="md-nav__link"> <a href="/lib/nav/mkdocs/" class="md-nav__link">
@@ -645,7 +647,7 @@
<div class="md-nav__link md-nav__container"> <div class="md-nav__link md-nav__container">
<a href="/renderers/" class="md-nav__link "> <a href="/lib/renderers/" class="md-nav__link ">
@@ -680,7 +682,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/renderers/base/" class="md-nav__link"> <a href="/lib/renderers/base/" class="md-nav__link">
@@ -703,7 +705,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/renderers/mkdocs_renderer/" class="md-nav__link"> <a href="/lib/renderers/mkdocs_renderer/" class="md-nav__link">
@@ -726,7 +728,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/renderers/mcp_renderer/" class="md-nav__link"> <a href="/lib/renderers/mcp_renderer/" class="md-nav__link">
@@ -776,6 +778,8 @@
@@ -789,7 +793,7 @@
<div class="md-nav__link md-nav__container"> <div class="md-nav__link md-nav__container">
<a href="/cli/" class="md-nav__link "> <a href="/lib/cli/" class="md-nav__link ">
@@ -824,7 +828,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/cli/main/" class="md-nav__link"> <a href="/lib/cli/main/" class="md-nav__link">
@@ -847,7 +851,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/cli/commands/" class="md-nav__link"> <a href="/lib/cli/commands/" class="md-nav__link">
@@ -870,7 +874,30 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/cli/mcp_utils/" class="md-nav__link"> <a href="/lib/cli/api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/lib/cli/mcp_utils/" class="md-nav__link">
@@ -893,7 +920,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="/cli/mkdocs_utils/" class="md-nav__link"> <a href="/lib/cli/mkdocs_utils/" class="md-nav__link">

File diff suppressed because it is too large Load Diff

View File

@@ -12,10 +12,10 @@
<link rel="prev" href="../main/"> <link rel="prev" href="../main/">
<link rel="next" href="../mcp_utils/"> <link rel="next" href="../api_utils/">
<link rel="icon" href="../../assets/images/favicon.png"> <link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../.." class="md-nav__link"> <a href="../../" class="md-nav__link">
@@ -787,6 +789,8 @@
@@ -995,6 +999,29 @@
<li class="md-nav__item">
<a href="../api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../mcp_utils/" class="md-nav__link"> <a href="../mcp_utils/" class="md-nav__link">
@@ -1198,21 +1225,47 @@
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">build</span><span class="p">(</span><span class="n">mcp</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">mkdocs</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">module_is_source</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">module</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">project_name</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">site_name</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">docs_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">nav_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">template</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Path</span><span class="p">],</span> <span class="n">mkdocs_yml</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">out_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-0-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-0-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-0-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-0-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-0-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-0-10">10</a></span>
<span class="normal"><a href="#__codelineno-0-11">11</a></span>
<span class="normal"><a href="#__codelineno-0-12">12</a></span>
<span class="normal"><a href="#__codelineno-0-13">13</a></span>
<span class="normal"><a href="#__codelineno-0-14">14</a></span>
<span class="normal"><a href="#__codelineno-0-15">15</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">build</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">mcp</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">mkdocs</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">api</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a> <span class="n">module_is_source</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a> <span class="n">module</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a> <span class="n">openapi_spec</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8"></a> <span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9"></a> <span class="n">site_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10"></a> <span class="n">docs_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11"></a> <span class="n">nav_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12"></a> <span class="n">template</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-13"><a id="__codelineno-0-13" name="__codelineno-0-13"></a> <span class="n">mkdocs_yml</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-14"><a id="__codelineno-0-14" name="__codelineno-0-14"></a> <span class="n">out_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-15"><a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
<p>Build documentation artifacts.</p> <p>Build documentation artifacts.</p>
<p>This command performs the full documentation build pipeline:</p> <p>This command performs the full documentation build pipeline:
<ol> style of the selected platform, generates renderer-specific
<li>Introspects the Python project using Griffe</li> documentation sources, and optionally builds the final output.</p>
<li>Generates renderer-specific documentation sources</li>
<li>Optionally builds the final documentation output</li>
</ol>
<p>Depending on the selected options, the build can target:</p> <p>Depending on the selected options, the build can target:</p>
<ul> <ul>
<li>MkDocs static documentation sites</li> <li>MkDocs static documentation sites for library reference docs</li>
<li>Swagger-enabled API docs generated from an OpenAPI spec</li>
<li>MCP structured documentation resources</li> <li>MCP structured documentation resources</li>
</ul> </ul>
@@ -1249,7 +1302,21 @@
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
<p>Enable MkDocs documentation generation.</p> <p>Enable MkDocs library documentation generation.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td><code>api</code></td>
<td>
<code>bool</code>
</td>
<td>
<div class="doc-md-description">
<p>Enable API documentation generation from an OpenAPI spec.</p>
</div> </div>
</td> </td>
<td> <td>
@@ -1273,7 +1340,7 @@
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>module</code></td> <td><code>module</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1284,10 +1351,24 @@
<em>required</em> <em>required</em>
</td> </td>
</tr> </tr>
<tr class="doc-section-item">
<td><code>openapi_spec</code></td>
<td>
<code>Optional[<span title="pathlib.Path">Path</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Path to the OpenAPI JSON specification used for API docs.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>project_name</code></td> <td><code>project_name</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1301,7 +1382,7 @@
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>site_name</code></td> <td><code>site_name</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1319,7 +1400,7 @@
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
<p>Directory where Markdown documentation sources will be generated.</p> <p>Shared documentation root used as the MkDocs <code>docs_dir</code>.</p>
</div> </div>
</td> </td>
<td> <td>
@@ -1343,7 +1424,7 @@
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>template</code></td> <td><code>template</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[<span title="pathlib.Path">Path</span>]</code> <code>Optional[<span title="pathlib.Path">Path</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1420,7 +1501,19 @@
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">serve</span><span class="p">(</span><span class="n">mcp</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">mkdocs</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">module</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">mkdocs_yml</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">out_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span>
<span class="normal"><a href="#__codelineno-0-6">6</a></span>
<span class="normal"><a href="#__codelineno-0-7">7</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">serve</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">mcp</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">mkdocs</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">module</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a> <span class="n">mkdocs_yml</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a> <span class="n">out_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1475,7 +1568,7 @@
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>module</code></td> <td><code>module</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1552,7 +1645,7 @@
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">tree</span><span class="p">(</span><span class="n">module</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_name</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">tree</span><span class="p">(</span><span class="n">module</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1591,7 +1684,7 @@ objects, including modules, classes, functions, and members.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>project_name</code></td> <td><code>project_name</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1672,10 +1765,10 @@ objects, including modules, classes, functions, and members.</p>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -15,7 +15,7 @@
<link rel="next" href="main/"> <link rel="next" href="main/">
<link rel="icon" href="../assets/images/favicon.png"> <link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href=".." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href=".." class="md-nav__link"> <a href="../" class="md-nav__link">
@@ -787,6 +789,8 @@
@@ -878,6 +882,29 @@
<li class="md-nav__item">
<a href="api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="mcp_utils/" class="md-nav__link"> <a href="mcp_utils/" class="md-nav__link">
@@ -1117,10 +1144,10 @@ main()
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -15,7 +15,7 @@
<link rel="next" href="../commands/"> <link rel="next" href="../commands/">
<link rel="icon" href="../../assets/images/favicon.png"> <link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../.." class="md-nav__link"> <a href="../../" class="md-nav__link">
@@ -787,6 +789,8 @@
@@ -968,6 +972,29 @@
<li class="md-nav__item">
<a href="../api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../mcp_utils/" class="md-nav__link"> <a href="../mcp_utils/" class="md-nav__link">
@@ -1222,10 +1249,10 @@ from the command line.</p>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -9,13 +9,13 @@
<link rel="prev" href="../commands/"> <link rel="prev" href="../api_utils/">
<link rel="next" href="../mkdocs_utils/"> <link rel="next" href="../mkdocs_utils/">
<link rel="icon" href="../../assets/images/favicon.png"> <link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../.." class="md-nav__link"> <a href="../../" class="md-nav__link">
@@ -787,6 +789,8 @@
@@ -878,6 +882,29 @@
<li class="md-nav__item">
<a href="../api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active"> <li class="md-nav__item md-nav__item--active">
@@ -1179,7 +1206,11 @@
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_resources</span><span class="p">(</span><span class="n">module</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span> <span class="n">out_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_resources</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">module</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span> <span class="n">out_dir</span><span class="p">:</span> <span class="n">Path</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1405,10 +1436,10 @@ bundle (index.json, nav.json, and modules/).</p>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -13,7 +13,7 @@
<link rel="icon" href="../../assets/images/favicon.png"> <link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -22,10 +22,10 @@
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -44,9 +44,11 @@
<link rel="stylesheet" href="../../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -88,10 +90,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -205,10 +207,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -223,7 +225,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../.." class="md-nav__link"> <a href="../../" class="md-nav__link">
@@ -785,6 +787,8 @@
@@ -876,6 +880,29 @@
<li class="md-nav__item">
<a href="../api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../mcp_utils/" class="md-nav__link"> <a href="../mcp_utils/" class="md-nav__link">
@@ -1286,7 +1313,25 @@ build command to generate the final static documentation site.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_config</span><span class="p">(</span><span class="n">docs_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">nav_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">template</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span> <span class="n">out</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">site_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-0-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-0-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-0-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-0-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-0-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-0-10">10</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_config</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">docs_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">nav_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">template</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a> <span class="n">out</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a> <span class="n">site_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a> <span class="n">modes</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8"></a> <span class="n">site_description</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9"></a> <span class="n">site_author</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1295,6 +1340,9 @@ build command to generate the final static documentation site.</p>
<p>The configuration is created by combining a template configuration <p>The configuration is created by combining a template configuration
with a navigation structure derived from the docforge navigation with a navigation structure derived from the docforge navigation
specification.</p> specification.</p>
<p>The <code>docs_dir</code> is always written relative to the MkDocs root and is
expected to be the shared documentation parent (for example <code>docs</code>),
with generated sources nested under <code>lib/</code> or <code>api/</code> subdirectories.</p>
<p><span class="doc-section-title">Parameters:</span></p> <p><span class="doc-section-title">Parameters:</span></p>
@@ -1315,7 +1363,7 @@ specification.</p>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
<p>Directory containing generated documentation Markdown files.</p> <p>Shared documentation root used as the MkDocs <code>docs_dir</code>.</p>
</div> </div>
</td> </td>
<td> <td>
@@ -1343,8 +1391,9 @@ specification.</p>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
<p>Optional path to a custom MkDocs configuration template. If not <p>Optional path to a fully custom MkDocs configuration template.
provided, a built-in template will be used.</p> If not provided, built-in templates are merged; the provided
template replaces the built-in templates entirely.</p>
</div> </div>
</td> </td>
<td> <td>
@@ -1379,6 +1428,50 @@ provided, a built-in template will be used.</p>
<em>required</em> <em>required</em>
</td> </td>
</tr> </tr>
<tr class="doc-section-item">
<td><code>modes</code></td>
<td>
<code>Optional[<span title="collections.abc.Iterable">Iterable</span>[str]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Documentation modes to enable. Each mode contributes its own
built-in template fragment (for example <code>lib</code> or <code>api</code>),
merged on top of the shared <code>mkdocs.common.yml</code> template.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td><code>site_description</code></td>
<td>
<code>Optional[str]</code>
</td>
<td>
<div class="doc-md-description">
<p>Optional site description written into the configuration.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td><code>site_author</code></td>
<td>
<code>Optional[str]</code>
</td>
<td>
<div class="doc-md-description">
<p>Optional site author written into the configuration.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody> </tbody>
</table> </table>
@@ -1417,7 +1510,19 @@ provided, a built-in template will be used.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_sources</span><span class="p">(</span><span class="n">module</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">docs_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">module_is_source</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span>
<span class="normal"><a href="#__codelineno-0-6">6</a></span>
<span class="normal"><a href="#__codelineno-0-7">7</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_sources</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">module</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">docs_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a> <span class="n">module_is_source</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a> <span class="n">readme_dir</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1497,6 +1602,21 @@ rather than a nested module.</p>
<code>None</code> <code>None</code>
</td> </td>
</tr> </tr>
<tr class="doc-section-item">
<td><code>readme_dir</code></td>
<td>
<code>Optional[<span title="pathlib.Path">Path</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Directory where the generated README.md should be written. If not
provided, defaults to the parent of <code>docs_dir</code>.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody> </tbody>
</table> </table>
@@ -1640,10 +1760,10 @@ the site when changes are detected.</p>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -13,19 +13,19 @@
<link rel="next" href="loaders/"> <link rel="next" href="loaders/">
<link rel="icon" href="assets/images/favicon.png"> <link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>docforge</title> <title>Home - docforge</title>
<link rel="stylesheet" href="assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
@@ -44,9 +44,11 @@
<link rel="stylesheet" href="assets/_mkdocstrings.css"> <link rel="stylesheet" href="../assets/_mkdocstrings.css">
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -88,10 +90,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href="." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href=".." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -205,10 +207,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href="." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href=".." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -245,7 +247,7 @@
<span class="md-nav__icon md-icon"></span> <span class="md-nav__icon md-icon"></span>
</label> </label>
<a href="." class="md-nav__link md-nav__link--active"> <a href="./" class="md-nav__link md-nav__link--active">
@@ -1308,6 +1310,8 @@
@@ -1401,6 +1405,29 @@
<li class="md-nav__item">
<a href="cli/api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="cli/mcp_utils/" class="md-nav__link"> <a href="cli/mcp_utils/" class="md-nav__link">
@@ -2836,7 +2863,15 @@ a doc-forge <code>Module</code> model.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">load_project</span><span class="p">(</span><span class="n">module_paths</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">project_name</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_import_errors</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Project</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">load_project</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">module_paths</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">skip_import_errors</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Project</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -2861,7 +2896,7 @@ object.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>module_paths</code></td> <td><code>module_paths</code></td>
<td> <td>
<code><span title="typing.List">List</span>[str]</code> <code>List[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -3115,7 +3150,17 @@ allowing MkDocs to render API documentation dynamically.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_readme</span><span class="p">(</span><span class="n">project</span><span class="p">:</span> <span class="n">Project</span><span class="p">,</span> <span class="n">docs_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">module_is_source</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span>
<span class="normal"><a href="#__codelineno-0-6">6</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_readme</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">project</span><span class="p">:</span> <span class="n">Project</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">docs_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">module_is_source</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a> <span class="n">readme_dir</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -3171,7 +3216,7 @@ allowing MkDocs to render API documentation dynamically.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>module_is_source</code></td> <td><code>module_is_source</code></td>
<td> <td>
<code>bool</code> <code>Optional[bool]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -3182,6 +3227,21 @@ allowing MkDocs to render API documentation dynamically.</p>
<code>None</code> <code>None</code>
</td> </td>
</tr> </tr>
<tr class="doc-section-item">
<td><code>readme_dir</code></td>
<td>
<code>Optional[<span title="pathlib.Path">Path</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Directory where the generated README.md should be written.
Defaults to the parent of <code>docs_dir</code>.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody> </tbody>
</table> </table>
@@ -3197,7 +3257,15 @@ allowing MkDocs to render API documentation dynamically.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_sources</span><span class="p">(</span><span class="n">project</span><span class="p">:</span> <span class="n">Project</span><span class="p">,</span> <span class="n">out_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">module_is_source</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">generate_sources</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">project</span><span class="p">:</span> <span class="n">Project</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">out_dir</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">module_is_source</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -3286,7 +3354,11 @@ rather than nesting it inside a folder.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">discover_module_paths</span><span class="p">(</span><span class="n">module_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_root</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">discover_module_paths</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">module_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_root</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -3357,7 +3429,7 @@ current working directory is used.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.List">List</span>[str]</code> <code>list[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -3459,10 +3531,10 @@ A sorted list of unique dotted module import paths.</p>
<script id="__config" type="application/json">{"base": ".", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -15,7 +15,7 @@
<link rel="next" href="../../models/"> <link rel="next" href="../../models/">
<link rel="icon" href="../../assets/images/favicon.png"> <link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../.." class="md-nav__link"> <a href="../../" class="md-nav__link">
@@ -938,6 +940,8 @@
@@ -1031,6 +1035,29 @@
<li class="md-nav__item">
<a href="../../cli/api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../../cli/mcp_utils/" class="md-nav__link"> <a href="../../cli/mcp_utils/" class="md-nav__link">
@@ -1381,7 +1408,15 @@ a doc-forge <code>Module</code> model.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">load_project</span><span class="p">(</span><span class="n">module_paths</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">project_name</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_import_errors</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Project</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">load_project</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">module_paths</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">skip_import_errors</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Project</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1406,7 +1441,7 @@ object.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>module_paths</code></td> <td><code>module_paths</code></td>
<td> <td>
<code><span title="typing.List">List</span>[str]</code> <code>List[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1526,7 +1561,11 @@ name of the first module.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">discover_module_paths</span><span class="p">(</span><span class="n">module_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_root</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">discover_module_paths</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">module_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_root</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1597,7 +1636,7 @@ current working directory is used.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.List">List</span>[str]</code> <code>list[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1699,10 +1738,10 @@ A sorted list of unique dotted module import paths.</p>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -9,13 +9,13 @@
<link rel="prev" href=".."> <link rel="prev" href="../">
<link rel="next" href="griffe_loader/"> <link rel="next" href="griffe_loader/">
<link rel="icon" href="../assets/images/favicon.png"> <link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href=".." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href=".." class="md-nav__link"> <a href="../" class="md-nav__link">
@@ -785,6 +787,8 @@
@@ -878,6 +882,29 @@
<li class="md-nav__item">
<a href="../cli/api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../cli/mcp_utils/" class="md-nav__link"> <a href="../cli/mcp_utils/" class="md-nav__link">
@@ -1250,7 +1277,15 @@ a doc-forge <code>Module</code> model.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">load_project</span><span class="p">(</span><span class="n">module_paths</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">project_name</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_import_errors</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Project</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">load_project</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">module_paths</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">skip_import_errors</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Project</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1275,7 +1310,7 @@ object.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>module_paths</code></td> <td><code>module_paths</code></td>
<td> <td>
<code><span title="typing.List">List</span>[str]</code> <code>List[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1395,7 +1430,11 @@ name of the first module.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">discover_module_paths</span><span class="p">(</span><span class="n">module_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_root</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">discover_module_paths</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">module_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">project_root</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1466,7 +1505,7 @@ current working directory is used.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.List">List</span>[str]</code> <code>list[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1568,10 +1607,10 @@ A sorted list of unique dotted module import paths.</p>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -15,7 +15,7 @@
<link rel="next" href="module/"> <link rel="next" href="module/">
<link rel="icon" href="../assets/images/favicon.png"> <link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href=".." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href=".." class="md-nav__link"> <a href="../" class="md-nav__link">
@@ -785,6 +787,8 @@
@@ -878,6 +882,29 @@
<li class="md-nav__item">
<a href="../cli/api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../cli/mcp_utils/" class="md-nav__link"> <a href="../cli/mcp_utils/" class="md-nav__link">
@@ -1253,7 +1280,19 @@ documentation structure to be transformed into multiple output formats
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">DocObject</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">signature</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">docstring</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span>
<span class="normal"><a href="#__codelineno-0-6">6</a></span>
<span class="normal"><a href="#__codelineno-0-7">7</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">DocObject</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a> <span class="n">signature</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a> <span class="n">docstring</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="p">)</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1311,7 +1350,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.DocObject.signature">signature</span></code></td> <td><code><span title="docforge.models.DocObject.signature">signature</span></code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1322,7 +1361,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.DocObject.docstring">docstring</span></code></td> <td><code><span title="docforge.models.DocObject.docstring">docstring</span></code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1333,7 +1372,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.DocObject.members">members</span></code></td> <td><code><span title="docforge.models.DocObject.members">members</span></code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="object/#docforge.models.object.DocObject">DocObject</a>]</code> <code>Dict[str, <a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="object/#docforge.models.object.DocObject">DocObject</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1403,7 +1442,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>signature</code></td> <td><code>signature</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1417,7 +1456,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>docstring</code></td> <td><code>docstring</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1521,7 +1560,7 @@ nested objects to their parent containers.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="object/#docforge.models.object.DocObject">DocObject</a>]</code> <code><span title="collections.abc.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="object/#docforge.models.object.DocObject">DocObject</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1648,7 +1687,7 @@ An iterable of <code>DocObject</code> instances representing nested members.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Module</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">docstring</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Module</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">docstring</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1684,7 +1723,7 @@ introspection.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.Module.docstring">docstring</span></code></td> <td><code><span title="docforge.models.Module.docstring">docstring</span></code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1695,7 +1734,7 @@ introspection.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.Module.members">members</span></code></td> <td><code><span title="docforge.models.Module.members">members</span></code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="object/#docforge.models.object.DocObject">DocObject</a>]</code> <code>Dict[str, <a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="object/#docforge.models.object.DocObject">DocObject</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1737,7 +1776,7 @@ introspection.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>docstring</code></td> <td><code>docstring</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1839,7 +1878,7 @@ introspection.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="object/#docforge.models.object.DocObject">DocObject</a>]</code> <code><span title="collections.abc.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="object/#docforge.models.object.DocObject">DocObject</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2001,7 +2040,7 @@ introspection. Each module is stored by its dotted import path.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.Project.modules">modules</span></code></td> <td><code><span title="docforge.models.Project.modules">modules</span></code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <a class="autorefs autorefs-internal" title="docforge.models.module.Module" href="module/#docforge.models.module.Module">Module</a>]</code> <code>Dict[str, <a class="autorefs autorefs-internal" title="docforge.models.module.Module" href="module/#docforge.models.module.Module">Module</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2131,7 +2170,7 @@ introspection. Each module is stored by its dotted import path.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.module.Module" href="module/#docforge.models.module.Module">Module</a>]</code> <code><span title="collections.abc.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.module.Module" href="module/#docforge.models.module.Module">Module</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2356,10 +2395,10 @@ A list containing the dotted paths of all modules in the project.</p>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -15,7 +15,7 @@
<link rel="next" href="../object/"> <link rel="next" href="../object/">
<link rel="icon" href="../../assets/images/favicon.png"> <link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../.." class="md-nav__link"> <a href="../../" class="md-nav__link">
@@ -923,6 +925,8 @@
@@ -1016,6 +1020,29 @@
<li class="md-nav__item">
<a href="../../cli/api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../../cli/mcp_utils/" class="md-nav__link"> <a href="../../cli/mcp_utils/" class="md-nav__link">
@@ -1243,7 +1270,7 @@ introspection.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Module</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">docstring</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Module</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">docstring</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1279,7 +1306,7 @@ introspection.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.module.Module.docstring">docstring</span></code></td> <td><code><span title="docforge.models.module.Module.docstring">docstring</span></code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1290,7 +1317,7 @@ introspection.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.module.Module.members">members</span></code></td> <td><code><span title="docforge.models.module.Module.members">members</span></code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="../object/#docforge.models.object.DocObject">DocObject</a>]</code> <code>Dict[str, <a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="../object/#docforge.models.object.DocObject">DocObject</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1332,7 +1359,7 @@ introspection.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>docstring</code></td> <td><code>docstring</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1434,7 +1461,7 @@ introspection.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="../object/#docforge.models.object.DocObject">DocObject</a>]</code> <code><span title="collections.abc.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="../object/#docforge.models.object.DocObject">DocObject</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1616,10 +1643,10 @@ An iterable of <code>DocObject</code> instances representing the module's public
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -15,7 +15,7 @@
<link rel="next" href="../project/"> <link rel="next" href="../project/">
<link rel="icon" href="../../assets/images/favicon.png"> <link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../.." class="md-nav__link"> <a href="../../" class="md-nav__link">
@@ -923,6 +925,8 @@
@@ -1016,6 +1020,29 @@
<li class="md-nav__item">
<a href="../../cli/api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../../cli/mcp_utils/" class="md-nav__link"> <a href="../../cli/mcp_utils/" class="md-nav__link">
@@ -1243,7 +1270,19 @@ members that form a hierarchical documentation structure.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">DocObject</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">signature</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">docstring</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span>
<span class="normal"><a href="#__codelineno-0-6">6</a></span>
<span class="normal"><a href="#__codelineno-0-7">7</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">DocObject</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a> <span class="n">signature</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a> <span class="n">docstring</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="p">)</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1301,7 +1340,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.object.DocObject.signature">signature</span></code></td> <td><code><span title="docforge.models.object.DocObject.signature">signature</span></code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1312,7 +1351,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.object.DocObject.docstring">docstring</span></code></td> <td><code><span title="docforge.models.object.DocObject.docstring">docstring</span></code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1323,7 +1362,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.object.DocObject.members">members</span></code></td> <td><code><span title="docforge.models.object.DocObject.members">members</span></code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="#docforge.models.object.DocObject">DocObject</a>]</code> <code>Dict[str, <a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="#docforge.models.object.DocObject">DocObject</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1393,7 +1432,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>signature</code></td> <td><code>signature</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1407,7 +1446,7 @@ of modules, classes, and other containers to be represented recursively.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>docstring</code></td> <td><code>docstring</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>Optional[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1511,7 +1550,7 @@ nested objects to their parent containers.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="#docforge.models.object.DocObject">DocObject</a>]</code> <code><span title="collections.abc.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.object.DocObject" href="#docforge.models.object.DocObject">DocObject</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1693,10 +1732,10 @@ An iterable of <code>DocObject</code> instances representing nested members.</p>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -15,7 +15,7 @@
<link rel="next" href="../../nav/"> <link rel="next" href="../../nav/">
<link rel="icon" href="../../assets/images/favicon.png"> <link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../.." class="md-nav__link"> <a href="../../" class="md-nav__link">
@@ -932,6 +934,8 @@
@@ -1025,6 +1029,29 @@
<li class="md-nav__item">
<a href="../../cli/api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../../cli/mcp_utils/" class="md-nav__link"> <a href="../../cli/mcp_utils/" class="md-nav__link">
@@ -1295,7 +1322,7 @@ introspection. Each module is stored by its dotted import path.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.models.project.Project.modules">modules</span></code></td> <td><code><span title="docforge.models.project.Project.modules">modules</span></code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <a class="autorefs autorefs-internal" title="docforge.models.module.Module" href="../module/#docforge.models.module.Module">Module</a>]</code> <code>Dict[str, <a class="autorefs autorefs-internal" title="docforge.models.module.Module" href="../module/#docforge.models.module.Module">Module</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1425,7 +1452,7 @@ introspection. Each module is stored by its dotted import path.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.module.Module" href="../module/#docforge.models.module.Module">Module</a>]</code> <code><span title="collections.abc.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="docforge.models.module.Module" href="../module/#docforge.models.module.Module">Module</a>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1650,10 +1677,10 @@ A list containing the dotted paths of all modules in the project.</p>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

View File

@@ -15,7 +15,7 @@
<link rel="next" href="spec/"> <link rel="next" href="spec/">
<link rel="icon" href="../assets/images/favicon.png"> <link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
@@ -24,10 +24,10 @@
<link rel="stylesheet" href="../assets/stylesheets/main.84d31ad4.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -46,9 +46,11 @@
<link rel="stylesheet" href="../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
@@ -90,10 +92,10 @@
<header class="md-header md-header--shadow" data-md-component="header"> <header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header"> <nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../.." title="docforge" class="md-header__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
<label class="md-header__button md-icon" for="__drawer"> <label class="md-header__button md-icon" for="__drawer">
@@ -207,10 +209,10 @@
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer"> <label class="md-nav__title" for="__drawer">
<a href=".." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo"> <a href="../.." title="docforge" class="md-nav__button md-logo" aria-label="docforge" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4v18h16v2H4c-1.1 0-2-.9-2-2V4zm11 3h5.5L15 1.5zM8 0h8l6 6v12c0 1.11-.89 2-2 2H8a2 2 0 0 1-2-2V2c0-1.11.89-2 2-2m9 16v-2H8v2zm3-4v-2H8v2z"/></svg>
</a> </a>
docforge docforge
@@ -225,7 +227,7 @@
<li class="md-nav__item"> <li class="md-nav__item">
<a href=".." class="md-nav__link"> <a href="../" class="md-nav__link">
@@ -785,6 +787,8 @@
@@ -878,6 +882,29 @@
<li class="md-nav__item">
<a href="../cli/api_utils/" class="md-nav__link">
<span class="md-ellipsis">
Api Utils
</span>
</a>
</li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="../cli/mcp_utils/" class="md-nav__link"> <a href="../cli/mcp_utils/" class="md-nav__link">
@@ -1248,7 +1275,7 @@ list structure expected by the MkDocs <code>nav</code> configuration field.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">emit</span><span class="p">(</span><span class="n">nav</span><span class="p">:</span> <span class="n">ResolvedNav</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">emit</span><span class="p">(</span><span class="n">nav</span><span class="p">:</span> <span class="n">ResolvedNav</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1297,7 +1324,7 @@ and their associated Markdown files.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.List">List</span>[<span title="typing.Dict">Dict</span>[str, <span title="typing.Any">Any</span>]]</code> <code>list[dict[str, <span title="typing.Any">Any</span>]]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1307,7 +1334,7 @@ and their associated Markdown files.</p>
</tr> </tr>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.List">List</span>[<span title="typing.Dict">Dict</span>[str, <span title="typing.Any">Any</span>]]</code> <code>list[dict[str, <span title="typing.Any">Any</span>]]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1317,7 +1344,7 @@ and their associated Markdown files.</p>
</tr> </tr>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.List">List</span>[<span title="typing.Dict">Dict</span>[str, <span title="typing.Any">Any</span>]]</code> <code>list[dict[str, <span title="typing.Any">Any</span>]]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1349,7 +1376,15 @@ and their associated Markdown files.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">NavSpec</span><span class="p">(</span><span class="n">home</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">groups</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]])</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">NavSpec</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">home</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">groups</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]],</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">icon</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="p">)</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1373,7 +1408,7 @@ it is resolved against the filesystem.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.nav.NavSpec.home">home</span></code></td> <td><code><span title="docforge.nav.NavSpec.home">home</span></code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>str | None</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1385,7 +1420,7 @@ it is resolved against the filesystem.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.nav.NavSpec.groups">groups</span></code></td> <td><code><span title="docforge.nav.NavSpec.groups">groups</span></code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <span title="typing.List">List</span>[str]]</code> <code>dict[str, list[str]]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1394,6 +1429,18 @@ or glob expressions.</p>
</div> </div>
</td> </td>
</tr> </tr>
<tr class="doc-section-item">
<td><code><span title="docforge.nav.NavSpec.icon">icon</span></code></td>
<td>
</td>
<td>
<div class="doc-md-description">
<p>Optional mapping of theme icon entries (for example
<code>{"logo": "material/code-tags"}</code>) injected into the MkDocs
theme as <code>theme.icon</code>.</p>
</div>
</td>
</tr>
</tbody> </tbody>
</table> </table>
@@ -1414,7 +1461,7 @@ or glob expressions.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>home</code></td> <td><code>home</code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>str | None</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1428,7 +1475,7 @@ or glob expressions.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>groups</code></td> <td><code>groups</code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <span title="typing.List">List</span>[str]]</code> <code>dict[str, list[str]]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1440,6 +1487,21 @@ or glob expressions.</p>
<em>required</em> <em>required</em>
</td> </td>
</tr> </tr>
<tr class="doc-section-item">
<td><code>icon</code></td>
<td>
<code>dict[str, str] | None</code>
</td>
<td>
<div class="doc-md-description">
<p>Optional mapping of theme icon entries applied to the
generated MkDocs configuration.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody> </tbody>
</table> </table>
@@ -1464,7 +1526,7 @@ or glob expressions.</p>
</h6> </h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">all_patterns</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">all_patterns</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1483,7 +1545,7 @@ or glob expressions.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.List">List</span>[str]</code> <code>list[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1493,7 +1555,7 @@ or glob expressions.</p>
</tr> </tr>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.List">List</span>[str]</code> <code>list[str]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1634,7 +1696,15 @@ specification.</p>
</h4> </h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">ResolvedNav</span><span class="p">(</span><span class="n">home</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span> <span class="n">groups</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="n">Path</span><span class="p">]],</span> <span class="n">docs_root</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span>
<span class="normal"><a href="#__codelineno-0-4">4</a></span>
<span class="normal"><a href="#__codelineno-0-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">ResolvedNav</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a> <span class="n">home</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a> <span class="n">groups</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">list</span><span class="p">[</span><span class="n">Path</span><span class="p">]],</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a> <span class="n">docs_root</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="p">)</span>
</span></code></pre></div></td></tr></table></div> </span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
@@ -1658,7 +1728,7 @@ expanded and paths validated against the filesystem.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.nav.ResolvedNav.home">home</span></code></td> <td><code><span title="docforge.nav.ResolvedNav.home">home</span></code></td>
<td> <td>
<code><span title="typing.Optional">Optional</span>[str]</code> <code>str | None</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1669,7 +1739,7 @@ expanded and paths validated against the filesystem.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code><span title="docforge.nav.ResolvedNav.groups">groups</span></code></td> <td><code><span title="docforge.nav.ResolvedNav.groups">groups</span></code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <span title="typing.List">List</span>[<span title="pathlib.Path">Path</span>]]</code> <code>dict[str, list[<span title="pathlib.Path">Path</span>]]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1712,7 +1782,7 @@ documentation file paths.</p>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td><code>groups</code></td> <td><code>groups</code></td>
<td> <td>
<code><span title="typing.Dict">Dict</span>[str, <span title="typing.List">List</span>[<span title="pathlib.Path">Path</span>]]</code> <code>dict[str, list[<span title="pathlib.Path">Path</span>]]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -1780,7 +1850,7 @@ documentation file paths.</p>
<tbody> <tbody>
<tr class="doc-section-item"> <tr class="doc-section-item">
<td> <td>
<code><span title="typing.Iterable">Iterable</span>[<span title="pathlib.Path">Path</span>]</code> <code><span title="collections.abc.Iterable">Iterable</span>[<span title="pathlib.Path">Path</span>]</code>
</td> </td>
<td> <td>
<div class="doc-md-description"> <div class="doc-md-description">
@@ -2108,10 +2178,10 @@ navigation pattern does not match any files.</p>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script> <script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body> </body>

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