Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 660ca88e47 | |||
| e60fc4b27b | |||
| 8817d2586f |
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
icon: lucide/file-text
|
||||||
|
---
|
||||||
|
|
||||||
# Content Contract
|
# Content Contract
|
||||||
|
|
||||||
This page defines the authored content contract for the docs-first MCP architecture.
|
This page defines the authored content contract for the docs-first MCP architecture.
|
||||||
|
|||||||
+12
-5
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
icon: lucide/braces
|
||||||
|
---
|
||||||
|
|
||||||
# Frontmatter Contract
|
# Frontmatter Contract
|
||||||
|
|
||||||
This page defines the `SKILL.md` frontmatter and FastMCP metadata contract.
|
This page defines the `SKILL.md` frontmatter and FastMCP metadata contract.
|
||||||
@@ -72,6 +76,8 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/<skill-id>/document
|
- resource://skills/<skill-id>/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
|
# Optional: overrides and nested references only.
|
||||||
|
# Top-level references/*.md are auto-discovered.
|
||||||
references:
|
references:
|
||||||
<ref-id>:
|
<ref-id>:
|
||||||
path: references/<file>.md
|
path: references/<file>.md
|
||||||
@@ -89,16 +95,17 @@ Rules for `x-personal-mcp`:
|
|||||||
3. `tags` is optional and should be a list of kebab-case discovery labels.
|
3. `tags` is optional and should be a list of kebab-case discovery labels.
|
||||||
4. `capabilities` is required and lists the MCP URIs the skill publishes.
|
4. `capabilities` is required and lists the MCP URIs the skill publishes.
|
||||||
5. `depends_on` is optional and lists other skill ids.
|
5. `depends_on` is optional and lists other skill ids.
|
||||||
6. `references` is an optional map keyed by `ref-id`.
|
6. `references` is an optional map keyed by `ref-id` for overrides and nested entries.
|
||||||
|
|
||||||
Reference entry rules:
|
Reference entry rules:
|
||||||
|
|
||||||
1. `ref-id` is lowercase kebab-case.
|
1. `ref-id` is lowercase kebab-case.
|
||||||
2. `path` is a skill-relative markdown path and must stay inside the same skill directory.
|
2. `path` is a skill-relative markdown path and must stay inside the same skill directory.
|
||||||
3. Nested folders under `references/` are allowed.
|
3. Top-level files under `references/*.md` are auto-discovered with `ref-id` derived from a normalized filename stem (lowercase kebab-case).
|
||||||
4. `mime_type` defaults to `text/markdown` when omitted.
|
4. Nested folders under `references/` are not auto-discovered and must be declared explicitly.
|
||||||
5. `title` is an optional display label.
|
5. `mime_type` defaults to `text/markdown` when omitted.
|
||||||
6. Renaming `ref-id` values is allowed when needed; optional aliases may be used during transitions.
|
6. `title` is an optional display label.
|
||||||
|
7. Renaming `ref-id` values is allowed when needed; optional aliases may be used during transitions.
|
||||||
|
|
||||||
## Validation Models
|
## Validation Models
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
icon: lucide/server
|
||||||
|
---
|
||||||
|
|
||||||
# Static Docs Hosting Pattern
|
# Static Docs Hosting Pattern
|
||||||
|
|
||||||
## Purpose
|
## Purpose
|
||||||
|
|||||||
+10
-2
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
icon: lucide/file-plus
|
||||||
|
---
|
||||||
|
|
||||||
# Hooking Up a New Skill
|
# Hooking Up a New Skill
|
||||||
|
|
||||||
Use this checklist to add a new skill in the docs-first model.
|
Use this checklist to add a new skill in the docs-first model.
|
||||||
@@ -60,6 +64,7 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/<skill-id>/document
|
- resource://skills/<skill-id>/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
|
# Optional: only for nested references or metadata overrides.
|
||||||
references:
|
references:
|
||||||
<ref-id>:
|
<ref-id>:
|
||||||
path: references/<file>.md
|
path: references/<file>.md
|
||||||
@@ -72,7 +77,9 @@ Reference manifest rules:
|
|||||||
|
|
||||||
1. `ref-id` is lowercase kebab-case.
|
1. `ref-id` is lowercase kebab-case.
|
||||||
2. `path` is skill-relative and must stay under `references/`.
|
2. `path` is skill-relative and must stay under `references/`.
|
||||||
3. Reference paths are markdown files.
|
3. Top-level `references/*.md` files are auto-discovered, and `ref-id` is derived from a normalized filename stem.
|
||||||
|
4. Nested `references/**` markdown files must be declared explicitly.
|
||||||
|
5. Reference paths are markdown files.
|
||||||
|
|
||||||
No `metadata.yaml` sidecar is part of this model.
|
No `metadata.yaml` sidecar is part of this model.
|
||||||
|
|
||||||
@@ -104,7 +111,8 @@ Compatibility rule:
|
|||||||
3. Populate frontmatter with `name`, `description`, and `x-personal-mcp` metadata.
|
3. Populate frontmatter with `name`, `description`, and `x-personal-mcp` metadata.
|
||||||
4. Ensure `x-personal-mcp.id` equals `name` and directory `<skill-id>`.
|
4. Ensure `x-personal-mcp.id` equals `name` and directory `<skill-id>`.
|
||||||
5. Ensure `capabilities` includes `resource://skills/<skill-id>/document`.
|
5. Ensure `capabilities` includes `resource://skills/<skill-id>/document`.
|
||||||
6. If references are exposed, declare each `ref-id` in `x-personal-mcp.references`.
|
6. Add supporting docs under `references/`; top-level markdown files are exposed automatically.
|
||||||
|
7. Declare `x-personal-mcp.references` only for nested paths or to override defaults.
|
||||||
|
|
||||||
## Quick Validation
|
## Quick Validation
|
||||||
|
|
||||||
|
|||||||
@@ -22,11 +22,6 @@ x-personal-mcp:
|
|||||||
depends_on:
|
depends_on:
|
||||||
- new-skill
|
- new-skill
|
||||||
- zensical-docs
|
- zensical-docs
|
||||||
references:
|
|
||||||
vscode-customization:
|
|
||||||
path: references/vscode-customization.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: VS Code Customization
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Copilot Customization
|
# Copilot Customization
|
||||||
|
|||||||
@@ -13,35 +13,6 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/fastapi-async-sqlalchemy-modernization/document
|
- resource://skills/fastapi-async-sqlalchemy-modernization/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
references:
|
|
||||||
index:
|
|
||||||
path: references/index.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Index
|
|
||||||
engine:
|
|
||||||
path: references/engine.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Engine
|
|
||||||
session:
|
|
||||||
path: references/session.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Session
|
|
||||||
transactions:
|
|
||||||
path: references/transactions.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Transactions
|
|
||||||
implicit-io:
|
|
||||||
path: references/implicit_io.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Implicit IO
|
|
||||||
observability:
|
|
||||||
path: references/observability.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Observability
|
|
||||||
template:
|
|
||||||
path: references/template.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Template
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# FastAPI Async SQLAlchemy Modernization Plan
|
# FastAPI Async SQLAlchemy Modernization Plan
|
||||||
|
|||||||
@@ -12,23 +12,6 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/fastapi-uv-docker/document
|
- resource://skills/fastapi-uv-docker/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
references:
|
|
||||||
fastapi-best-practices:
|
|
||||||
path: references/fastapi-best-practices.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: FastAPI Best Practices
|
|
||||||
uv-project-layout:
|
|
||||||
path: references/uv-project-layout.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: uv Project Layout
|
|
||||||
uvicorn-settings:
|
|
||||||
path: references/uvicorn-settings.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Uvicorn Settings
|
|
||||||
docker-cloud-native:
|
|
||||||
path: references/docker-cloud-native.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Docker Cloud Native
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# FastAPI Project Best Practices
|
# FastAPI Project Best Practices
|
||||||
|
|||||||
@@ -13,19 +13,6 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/nicegui-ui-customization/document
|
- resource://skills/nicegui-ui-customization/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
references:
|
|
||||||
architecture-and-styling:
|
|
||||||
path: references/architecture-and-styling.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Architecture and Styling
|
|
||||||
interaction-patterns:
|
|
||||||
path: references/interaction-patterns.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Interaction Patterns
|
|
||||||
troubleshooting-and-quality-gates:
|
|
||||||
path: references/troubleshooting-and-quality-gates.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Troubleshooting and Quality Gates
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# NiceGUI UI Customization Workflow
|
# NiceGUI UI Customization Workflow
|
||||||
|
|||||||
@@ -13,15 +13,6 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/nicegui/document
|
- resource://skills/nicegui/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
references:
|
|
||||||
architecture:
|
|
||||||
path: references/architecture.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Architecture
|
|
||||||
source-documentation:
|
|
||||||
path: references/source-documentation.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Source Documentation
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# NiceGUI
|
# NiceGUI
|
||||||
|
|||||||
@@ -12,19 +12,6 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/pytest-scaffolding/document
|
- resource://skills/pytest-scaffolding/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
references:
|
|
||||||
pytest-docs:
|
|
||||||
path: references/pytest-docs.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Pytest Docs
|
|
||||||
fastapi-testing:
|
|
||||||
path: references/fastapi-testing.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: FastAPI Testing
|
|
||||||
sqlalchemy-testing:
|
|
||||||
path: references/sqlalchemy-testing.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: SQLAlchemy Testing
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Pytest Scaffolding
|
# Pytest Scaffolding
|
||||||
|
|||||||
@@ -12,11 +12,6 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/python-logging-dictconfig/document
|
- resource://skills/python-logging-dictconfig/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
references:
|
|
||||||
python-logging-docs:
|
|
||||||
path: references/python-logging-docs.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Python Logging Docs
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Idiomatic Python Logging with dictConfig
|
# Idiomatic Python Logging with dictConfig
|
||||||
|
|||||||
@@ -16,19 +16,6 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/vscode-configuration/document
|
- resource://skills/vscode-configuration/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
references:
|
|
||||||
debug-launch-configurations:
|
|
||||||
path: references/debug-launch-configurations.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Debug Launch Configurations
|
|
||||||
fastapi-debugpy-launch:
|
|
||||||
path: references/fastapi-debugpy-launch.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: FastAPI Debugpy Launch
|
|
||||||
tasks-json-configuration:
|
|
||||||
path: references/tasks-json-configuration.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Tasks JSON Configuration
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# VS Code Configuration
|
# VS Code Configuration
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: zensical-docs
|
name: zensical-docs
|
||||||
description: 'Reference skill for Zensical documentation mechanics. Use for quick lookup of docs structure, feature options, and source links, then edit this skill over time to record project preferences for when each feature should be used.'
|
description: 'Reference skill for Zensical documentation mechanics. Use for quick lookup of docs structure, feature options, and source links. Prefer inline Markdown links to source docs and avoid bare URLs because this content is rendered as human docs and MCP resources.'
|
||||||
argument-hint: 'What are you documenting, who is the audience, and what Zensical features are in scope?'
|
argument-hint: 'What are you documenting, who is the audience, and what Zensical features are in scope?'
|
||||||
x-personal-mcp:
|
x-personal-mcp:
|
||||||
id: zensical-docs
|
id: zensical-docs
|
||||||
@@ -20,31 +20,6 @@ x-personal-mcp:
|
|||||||
capabilities:
|
capabilities:
|
||||||
- resource://skills/zensical-docs/document
|
- resource://skills/zensical-docs/document
|
||||||
depends_on: []
|
depends_on: []
|
||||||
references:
|
|
||||||
index:
|
|
||||||
path: references/index.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Source Map
|
|
||||||
zensical-features:
|
|
||||||
path: references/zensical-features.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Feature Catalog
|
|
||||||
theme-customization-and-icons:
|
|
||||||
path: references/theme-customization-and-icons.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Theme Customization and Icons
|
|
||||||
documentation-quality:
|
|
||||||
path: references/documentation-quality.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Documentation Quality
|
|
||||||
discoverability-and-ia:
|
|
||||||
path: references/discoverability-and-ia.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Discoverability and IA
|
|
||||||
code-heavy-docs-and-mkdocstrings:
|
|
||||||
path: references/code-heavy-docs-and-mkdocstrings.md
|
|
||||||
mime_type: text/markdown
|
|
||||||
title: Code-Heavy Docs and Mkdocstrings
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Zensical Documentation Authoring
|
# Zensical Documentation Authoring
|
||||||
@@ -124,6 +99,30 @@ Keep this section short and revise it over time.
|
|||||||
|
|
||||||
When making a recommendation, link back to the relevant reference file first, and when possible to the upstream docs linked from that reference.
|
When making a recommendation, link back to the relevant reference file first, and when possible to the upstream docs linked from that reference.
|
||||||
|
|
||||||
|
## Link Formatting Rule
|
||||||
|
|
||||||
|
Because this project publishes the same markdown for both `/docs` and MCP resources, link quality is part of the content contract.
|
||||||
|
|
||||||
|
- Never leave a bare URL in prose or list items.
|
||||||
|
- Prefer using in-place Markdown links with meaningful labels.
|
||||||
|
- For external sources, prefer `[descriptive label](https://...)` over raw `https://...`.
|
||||||
|
- For internal files, prefer relative Markdown links so rendered docs remain navigable.
|
||||||
|
- Any mention of a library or a specific library feature should include a link to source documentation somewhere on the page.
|
||||||
|
- If inline linking is awkward or the citation payload is too large, use a footnote or tooltip citation instead.
|
||||||
|
|
||||||
|
Example preferred style:
|
||||||
|
|
||||||
|
- `See [importlib.resources](https://docs.python.org/3/library/importlib.resources.html) for packaging details.`
|
||||||
|
|
||||||
|
Example to avoid:
|
||||||
|
|
||||||
|
- `See https://docs.python.org/3/library/importlib.resources.html for packaging details.`
|
||||||
|
|
||||||
|
Acceptable alternatives when inline links are not ideal:
|
||||||
|
|
||||||
|
- Add a footnote-style source citation at the end of the section or page.
|
||||||
|
- Add a tooltip citation when the docs pattern supports it.
|
||||||
|
|
||||||
## Compatibility Rule
|
## Compatibility Rule
|
||||||
|
|
||||||
Prefer the Zensical-native way of doing something when it exists and is well-supported.
|
Prefer the Zensical-native way of doing something when it exists and is well-supported.
|
||||||
@@ -136,3 +135,4 @@ Return only what is useful for the current docs task:
|
|||||||
1. Which reference to read next.
|
1. Which reference to read next.
|
||||||
2. The smallest recommended docs or config change.
|
2. The smallest recommended docs or config change.
|
||||||
3. Any repo-specific preference this suggests should be added back into this skill.
|
3. Any repo-specific preference this suggests should be added back into this skill.
|
||||||
|
4. For any library or feature-level claim, include a source-doc citation somewhere (inline link preferred; footnote or tooltip acceptable).
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
icon: lucide/link
|
||||||
|
---
|
||||||
|
|
||||||
# URI Contract
|
# URI Contract
|
||||||
|
|
||||||
This page defines the canonical resource URI contract, template parameter rules, and compatibility policy.
|
This page defines the canonical resource URI contract, template parameter rules, and compatibility policy.
|
||||||
|
|||||||
@@ -20,3 +20,9 @@ build-backend = "hatchling.build"
|
|||||||
|
|
||||||
[tool.hatch.build.targets.wheel]
|
[tool.hatch.build.targets.wheel]
|
||||||
packages = ["src/personal_mcp"]
|
packages = ["src/personal_mcp"]
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = [
|
||||||
|
"pre-commit>=4.6.0",
|
||||||
|
"ruff>=0.15.18",
|
||||||
|
]
|
||||||
|
|||||||
@@ -258,6 +258,51 @@ def _normalize_docs_path(path: str) -> str:
|
|||||||
return normalized.as_posix()
|
return normalized.as_posix()
|
||||||
|
|
||||||
|
|
||||||
|
def _title_from_reference_filename(filename: str) -> str:
|
||||||
|
stem = PurePosixPath(filename).stem
|
||||||
|
normalized = stem.replace("-", " ").replace("_", " ").split()
|
||||||
|
if not normalized:
|
||||||
|
return stem
|
||||||
|
return " ".join(token.capitalize() for token in normalized)
|
||||||
|
|
||||||
|
|
||||||
|
def _reference_id_from_filename(filename: str) -> str | None:
|
||||||
|
stem = PurePosixPath(filename).stem.strip().lower().replace("_", "-")
|
||||||
|
normalized = re.sub(r"[^a-z0-9-]+", "-", stem)
|
||||||
|
normalized = re.sub(r"-+", "-", normalized).strip("-")
|
||||||
|
if not normalized:
|
||||||
|
return None
|
||||||
|
if not SKILL_ID_RE.fullmatch(normalized):
|
||||||
|
return None
|
||||||
|
return normalized
|
||||||
|
|
||||||
|
|
||||||
|
def _discover_top_level_references(
|
||||||
|
*,
|
||||||
|
skill_dir: Traversable,
|
||||||
|
) -> dict[str, ReferenceEntry]:
|
||||||
|
references_dir = skill_dir.joinpath("references")
|
||||||
|
if not references_dir.is_dir():
|
||||||
|
return {}
|
||||||
|
|
||||||
|
discovered: dict[str, ReferenceEntry] = {}
|
||||||
|
for child in sorted(references_dir.iterdir(), key=lambda item: item.name):
|
||||||
|
if child.is_dir() or not child.is_file():
|
||||||
|
continue
|
||||||
|
if not child.name.lower().endswith(".md"):
|
||||||
|
continue
|
||||||
|
|
||||||
|
ref_id = _reference_id_from_filename(child.name)
|
||||||
|
if ref_id is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
discovered[ref_id] = ReferenceEntry(
|
||||||
|
path=PurePosixPath("references").joinpath(child.name).as_posix(),
|
||||||
|
title=_title_from_reference_filename(child.name),
|
||||||
|
)
|
||||||
|
return discovered
|
||||||
|
|
||||||
|
|
||||||
def _ensure_no_cycles(skills_by_id: dict[str, SkillRecord]) -> list[tuple[str, str]]:
|
def _ensure_no_cycles(skills_by_id: dict[str, SkillRecord]) -> list[tuple[str, str]]:
|
||||||
visiting: set[str] = set()
|
visiting: set[str] = set()
|
||||||
visited: set[str] = set()
|
visited: set[str] = set()
|
||||||
@@ -370,8 +415,11 @@ def load_docs_registry(
|
|||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
effective_reference_entries = _discover_top_level_references(skill_dir=skill_dir)
|
||||||
|
effective_reference_entries.update(frontmatter.x_personal_mcp.references)
|
||||||
|
|
||||||
references: dict[str, ReferenceRecord] = {}
|
references: dict[str, ReferenceRecord] = {}
|
||||||
for ref_id, ref_entry in frontmatter.x_personal_mcp.references.items():
|
for ref_id, ref_entry in effective_reference_entries.items():
|
||||||
ref_relpath = skill_rel_root.joinpath(ref_entry.path).as_posix()
|
ref_relpath = skill_rel_root.joinpath(ref_entry.path).as_posix()
|
||||||
if ref_relpath not in docs_markdown_by_path:
|
if ref_relpath not in docs_markdown_by_path:
|
||||||
issues.append(
|
issues.append(
|
||||||
|
|||||||
@@ -178,6 +178,15 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" },
|
{ url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cfgv"
|
||||||
|
version = "3.5.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "click"
|
name = "click"
|
||||||
version = "8.4.1"
|
version = "8.4.1"
|
||||||
@@ -273,6 +282,15 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/2d/82/e5d2c1c67d19841e9edc74954c827444ae826978499bde3dfc1d007c8c11/deepmerge-2.0-py3-none-any.whl", hash = "sha256:6de9ce507115cff0bed95ff0ce9ecc31088ef50cbdf09bc90a09349a318b3d00", size = 13475, upload-time = "2024-08-30T05:31:48.659Z" },
|
{ url = "https://files.pythonhosted.org/packages/2d/82/e5d2c1c67d19841e9edc74954c827444ae826978499bde3dfc1d007c8c11/deepmerge-2.0-py3-none-any.whl", hash = "sha256:6de9ce507115cff0bed95ff0ce9ecc31088ef50cbdf09bc90a09349a318b3d00", size = 13475, upload-time = "2024-08-30T05:31:48.659Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "distlib"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dnspython"
|
name = "dnspython"
|
||||||
version = "2.8.0"
|
version = "2.8.0"
|
||||||
@@ -395,6 +413,15 @@ server = [
|
|||||||
{ name = "websockets" },
|
{ name = "websockets" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "filelock"
|
||||||
|
version = "3.29.4"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/e6/dc/be6cbe99670cd6e4ad387123647cb08e0c32975e223f82551e914c5568a6/filelock-3.29.4.tar.gz", hash = "sha256:10cdb3656fc44541cdf30652a93fb10ec6b05325620eb316bd26893e4201538a", size = 63028, upload-time = "2026-06-13T16:12:00.744Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl", hash = "sha256:dac1648087d5115554850d113e7dd8c83ab2d38e3435dde2d4f163847e57b767", size = 42757, upload-time = "2026-06-13T16:11:59.582Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "griffelib"
|
name = "griffelib"
|
||||||
version = "2.0.2"
|
version = "2.0.2"
|
||||||
@@ -486,6 +513,15 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" },
|
{ url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "identify"
|
||||||
|
version = "2.6.19"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "3.18"
|
version = "3.18"
|
||||||
@@ -756,6 +792,15 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl", hash = "sha256:4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192", size = 72226, upload-time = "2026-05-22T14:14:28.824Z" },
|
{ url = "https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl", hash = "sha256:4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192", size = 72226, upload-time = "2026-05-22T14:14:28.824Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nodeenv"
|
||||||
|
version = "1.10.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openapi-pydantic"
|
name = "openapi-pydantic"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
@@ -807,6 +852,22 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" },
|
{ url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pre-commit"
|
||||||
|
version = "4.6.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "cfgv" },
|
||||||
|
{ name = "identify" },
|
||||||
|
{ name = "nodeenv" },
|
||||||
|
{ name = "pyyaml" },
|
||||||
|
{ name = "virtualenv" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "prompts"
|
name = "prompts"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -820,6 +881,12 @@ dependencies = [
|
|||||||
{ name = "zensical" },
|
{ name = "zensical" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[package.dev-dependencies]
|
||||||
|
dev = [
|
||||||
|
{ name = "pre-commit" },
|
||||||
|
{ name = "ruff" },
|
||||||
|
]
|
||||||
|
|
||||||
[package.metadata]
|
[package.metadata]
|
||||||
requires-dist = [
|
requires-dist = [
|
||||||
{ name = "fastapi", specifier = ">=0.115.0" },
|
{ name = "fastapi", specifier = ">=0.115.0" },
|
||||||
@@ -830,6 +897,12 @@ requires-dist = [
|
|||||||
{ name = "zensical", specifier = ">=0.0.45" },
|
{ name = "zensical", specifier = ">=0.0.45" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[package.metadata.requires-dev]
|
||||||
|
dev = [
|
||||||
|
{ name = "pre-commit", specifier = ">=4.6.0" },
|
||||||
|
{ name = "ruff", specifier = ">=0.15.18" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "py-key-value-aio"
|
name = "py-key-value-aio"
|
||||||
version = "0.4.5"
|
version = "0.4.5"
|
||||||
@@ -1018,6 +1091,19 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" },
|
{ url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "python-discovery"
|
||||||
|
version = "1.4.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "filelock" },
|
||||||
|
{ name = "platformdirs" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/0b/1a/cbbaf13b730abb0a16b964d984e19f2fe520c21a4dc664051359a3f5a9e7/python_discovery-1.4.2.tar.gz", hash = "sha256:8f3746c4b4968d22afbb97d36e1a0e5b66e6c0f297290f2e95f05b9b8bf18690", size = 70277, upload-time = "2026-06-11T16:10:42.383Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl", hash = "sha256:475803f53b7b2ed6e490e27373f9d8340f7d2eebf9acdaf645d7d714c97bb500", size = 33886, upload-time = "2026-06-11T16:10:41.192Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "python-dotenv"
|
name = "python-dotenv"
|
||||||
version = "1.2.2"
|
version = "1.2.2"
|
||||||
@@ -1260,6 +1346,31 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441, upload-time = "2026-05-28T12:01:51.408Z" },
|
{ url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441, upload-time = "2026-05-28T12:01:51.408Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ruff"
|
||||||
|
version = "0.15.18"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/74/98/1295ad5a5aa9bc85bdcdfa5d82fe7b49c61af5657df4f227637ff9de0da6/ruff-0.15.18.tar.gz", hash = "sha256:2698a964c70e8bf402dcb99c8810472d270d141e7aa8c4e13599fd52033a2f33", size = 4761437, upload-time = "2026-06-18T18:25:39.224Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b9/d0/686e984941269621e2be72612d5c1e461f8f7b38415a2a7d7a81c8ae6715/ruff-0.15.18-py3-none-linux_armv6l.whl", hash = "sha256:8b6850172348c8381b8b3084c5915a4393c2373b9b54cd5b5e1ea15812bc10df", size = 10887308, upload-time = "2026-06-18T18:25:03.062Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ed/21/bc4123e3f5515ee99f8ce1eb93a14a0628fe4d1678663cd08f933ac16931/ruff-0.15.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3fccc153a85417dcd976883160cacce486997b0a0058dd18f54b8aaaac7d1ce2", size = 11281305, upload-time = "2026-06-18T18:25:30.026Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/51/93/4769464c25cf7ab2acb3c7dda9cad3d867eb41c59565b3e2a9d17249c90c/ruff-0.15.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08d4c86a68f2c3ec2c9d56380a71fb4a4f65373055cbb8caabd645e9102f38d4", size = 10641215, upload-time = "2026-06-18T18:25:15.802Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6c/42/56926d17120db2c208d76bf60a1a019644dd9e91dc27f0f95c9caddb1366/ruff-0.15.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e5108745c2c0705da916d7d4de533ddf547051ef45f62888c31bae73f66318", size = 10957224, upload-time = "2026-06-18T18:25:36.955Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/22/4f/d43fab8d8189afde803103022d000a8ef9f230616d436d52a8b2b8d63b50/ruff-0.15.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56949a6ce8b3abde54c0bcb22cebfe57e8771cadc84b407ae8b8eaf67ebdcd43", size = 10699024, upload-time = "2026-06-18T18:25:05.707Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/63/42/1e3e4c68bd408b9768cf3e439acbe2c78245225faef253f7028a0cdb63e0/ruff-0.15.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01a754cd6a1b630d3f97e33eb452cf7a98040482318e870f8bc52a5a30e62657", size = 11491458, upload-time = "2026-06-18T18:25:20.275Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/20/77/47a3484bea8521e14a203d98c389c5c97846675e4f02734672da4a69b52a/ruff-0.15.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba7a07e03a44dbf10bb086ee06705b173625014ec99f73a7e6836a5e5590a0c", size = 12383752, upload-time = "2026-06-18T18:25:22.535Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0a/ca/054159590787023d83b658a1a1819c4c8910114e7015069340b71c0961cb/ruff-0.15.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a2c40a41a4cadbcf5897b548ab29dfe248b20c540961c0247d98a3973c70403", size = 11577923, upload-time = "2026-06-18T18:25:10.702Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6d/ff/d353d6b7bbd73cc0ec37f4463d7540e45e894338abdd9964eee0de332708/ruff-0.15.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0480ce690cbb6c4db6e5d08f19fce98e10ba131a8b60c1bcdac42771e3ae2d", size = 11583925, upload-time = "2026-06-18T18:25:32.391Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c1/4a/891f89b9c296ed3e5f3ece1a5629badc989d9a8fdaa30431aaf4774bc1c2/ruff-0.15.18-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2330215f1f393fa8733f55edce04fcf94c36a2c460fcde31f78cc84e4951e9b1", size = 11582834, upload-time = "2026-06-18T18:25:27.309Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/32/a3/ed9e370154bf85de360b93c03026157f02d4943b2d01ff4945f4429f8e8a/ruff-0.15.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a6aa6a3d979e48ae617578183674bf264fbe7d0114a796a26bd678d67963c7ff", size = 10927328, upload-time = "2026-06-18T18:25:34.676Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f5/d1/5cf5909329fedb5d39d555ee818ba5cf4638e1a301b89785d34f2905bfcb/ruff-0.15.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a81beadbbff2c9c245561ae3f77b16709d87f35eec650d0501679239d3449b22", size = 10693187, upload-time = "2026-06-18T18:25:08.245Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fd/44/ff6c635cf2c4f4e7b618b6640da057376baa36014695487d88aed4794268/ruff-0.15.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2186d9e940ae332ab293623a75b5f4fe49565f449954d50a72a046683aa6b809", size = 11208721, upload-time = "2026-06-18T18:25:41.327Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/88/d9/5baa2a30861adfb7022cf33c1e35b2fc18085b08c16f83eff4c7b99a5f48/ruff-0.15.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5c2abf140438032bc77b2284a6c9944ecd8a19e5f1c7b52b1b8e4a0a80d19a7a", size = 11678599, upload-time = "2026-06-18T18:25:13.607Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c3/1a/0725a7cfdc32ff769efb96ee782bec882e16448c5d9e3be947ec4c04ce27/ruff-0.15.18-py3-none-win32.whl", hash = "sha256:02299e6e9fa5b297a3f6d5d10d7bcd655c925b028bb8b9d4588214549c6b9ec4", size = 10901903, upload-time = "2026-06-18T18:25:24.755Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f3/51/805d9f6fb7970505c3504794a5ec350f605361b807fef4dcf214ebd35e72/ruff-0.15.18-py3-none-win_amd64.whl", hash = "sha256:dac80dc8d26b2257dbefabed62f5d255c3937b4ccb122da1fc634794fa3578b3", size = 12041189, upload-time = "2026-06-18T18:25:17.915Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/29/4c/67bb45e41609eb4726f1bfeb59e083cf91d14c696d4bd14c234a980be93d/ruff-0.15.18-py3-none-win_arm64.whl", hash = "sha256:b2c9257fcbd4a3e5b977a1904e6facca016bafe2edc17df24db67cfaee03b4e4", size = 11329958, upload-time = "2026-06-18T18:25:43.686Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "secretstorage"
|
name = "secretstorage"
|
||||||
version = "3.5.0"
|
version = "3.5.0"
|
||||||
@@ -1430,6 +1541,21 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" },
|
{ url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "virtualenv"
|
||||||
|
version = "21.5.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "distlib" },
|
||||||
|
{ name = "filelock" },
|
||||||
|
{ name = "platformdirs" },
|
||||||
|
{ name = "python-discovery" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/f1/a5/81f987504738e6defeed61ec1c47e2aefab3c35d8eeb87e1b3f38cf28254/virtualenv-21.5.1.tar.gz", hash = "sha256:dca3bf98275a59c652b69d68e73433e597d977c2da9198882479d1a7188009c8", size = 4578798, upload-time = "2026-06-16T16:23:58.603Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl", hash = "sha256:55aa670b67bbfb991b03fda39bd3276d92c419d702376e98c5df1c9989a26783", size = 4558820, upload-time = "2026-06-16T16:23:56.963Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "watchfiles"
|
name = "watchfiles"
|
||||||
version = "1.2.0"
|
version = "1.2.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user