diff --git a/.github/workflows/alienmark-docs-deploy.yml b/.github/workflows/alienmark-docs-deploy.yml index c7aa6cc..291ed50 100644 --- a/.github/workflows/alienmark-docs-deploy.yml +++ b/.github/workflows/alienmark-docs-deploy.yml @@ -43,8 +43,11 @@ jobs: - name: Install docs dependencies run: uv sync --project ../.. --locked --package alienmark-docs - - name: Build MkDocs site - run: uv run --project ../.. --package alienmark-docs mkdocs build --strict + - name: Build English Zensical site + run: uv run --project ../.. --package alienmark-docs zensical build --strict + + - name: Build Chinese Zensical site + run: uv run --project ../.. --package alienmark-docs zensical build --strict --config-file zensical.zh.toml - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v6 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b4cf18..18abbfe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -242,8 +242,11 @@ jobs: - name: Install documentation dependencies run: uv sync --project ../.. --locked --package aliencommons-contributor-docs - - name: Build and validate MkDocs site - run: uv run --project ../.. --package aliencommons-contributor-docs mkdocs build --strict + - name: Build and validate English Zensical site + run: uv run --project ../.. --package aliencommons-contributor-docs zensical build --strict + + - name: Build and validate Chinese Zensical site + run: uv run --project ../.. --package aliencommons-contributor-docs zensical build --strict --config-file zensical.zh.toml docs-alienmark: runs-on: ubuntu-latest @@ -274,8 +277,11 @@ jobs: - name: Install documentation dependencies run: uv sync --project ../.. --locked --package alienmark-docs - - name: Build and validate MkDocs site - run: uv run --project ../.. --package alienmark-docs mkdocs build --strict + - name: Build and validate English Zensical site + run: uv run --project ../.. --package alienmark-docs zensical build --strict + + - name: Build and validate Chinese Zensical site + run: uv run --project ../.. --package alienmark-docs zensical build --strict --config-file zensical.zh.toml docs-users: runs-on: ubuntu-latest @@ -306,5 +312,8 @@ jobs: - name: Install documentation dependencies run: uv sync --project ../.. --locked --package aliencommons-user-guide - - name: Build and validate MkDocs site - run: uv run --project ../.. --package aliencommons-user-guide mkdocs build --strict + - name: Build and validate English Zensical site + run: uv run --project ../.. --package aliencommons-user-guide zensical build --strict + + - name: Build and validate Chinese Zensical site + run: uv run --project ../.. --package aliencommons-user-guide zensical build --strict --config-file zensical.zh.toml diff --git a/.github/workflows/contributors-docs-deploy.yml b/.github/workflows/contributors-docs-deploy.yml index 58c8d75..50aa555 100644 --- a/.github/workflows/contributors-docs-deploy.yml +++ b/.github/workflows/contributors-docs-deploy.yml @@ -51,8 +51,11 @@ jobs: - name: Install documentation dependencies run: uv sync --project ../.. --locked --package aliencommons-contributor-docs - - name: Build MkDocs site - run: uv run --project ../.. --package aliencommons-contributor-docs mkdocs build --strict + - name: Build English Zensical site + run: uv run --project ../.. --package aliencommons-contributor-docs zensical build --strict + + - name: Build Chinese Zensical site + run: uv run --project ../.. --package aliencommons-contributor-docs zensical build --strict --config-file zensical.zh.toml - name: Upload Pages artifact uses: actions/upload-pages-artifact@v5 diff --git a/AGENTS.md b/AGENTS.md index 907bc94..45530fe 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,7 +5,7 @@ ## What this is -AlienCommons is a community platform for Technical Minecraft players. It is a polyglot monorepo: a Django 6 backend, a Nuxt 4 frontend, an internal Fastify Markdown-rendering service, a TypeScript Markdown parser library, a DRF envelope library, three MkDocs documentation sites, and the Docker/observability wiring to run all of it. +AlienCommons is a community platform for Technical Minecraft players. It is a polyglot monorepo: a Django 6 backend, a Nuxt 4 frontend, an internal Fastify Markdown-rendering service, a TypeScript Markdown parser library, a DRF envelope library, three Zensical documentation sites, and the Docker/observability wiring to run all of it. ## Repository map @@ -18,7 +18,7 @@ aliencommons/ ├── packages/ │ ├── alienmark/ TypeScript Markdown parser + HTML renderer (published to GitHub Packages). │ └── drf-std-response/ DRF response-envelope + exception-handler library used by the backend. -├── docs/ Three MkDocs sites (users, contributors, alienmark). See docs/AGENTS.md. +├── docs/ Three Zensical sites (users, contributors, alienmark). See docs/AGENTS.md. ├── infra/compose/ Docker Compose files for dev / stg / pro / proxy. ├── o11y/ Grafana, Loki, Grafana Alloy configs. ├── make/ docker.mk + node.mk, included by the root Makefile. @@ -81,7 +81,8 @@ make dev-backend-check # python manage.py check inside the backend-api cont # uv run ruff check manage.py # Docs subproject (matches CI `docs-*` jobs); run inside docs// -uv run mkdocs build --strict +uv run zensical build --strict +uv run zensical build --strict --config-file zensical.zh.toml # Single Node package via Turbo filter pnpm turbo run check --filter=frontend @@ -100,7 +101,7 @@ Run the **smallest** check that covers your change. If a check cannot be run, sa | Any Node package (`apps/frontend`, `apps/alienmark`, `packages/alienmark`) | `pnpm run check` (full workspace) or `pnpm turbo run check --filter=` (single package) | | Backend behavior | `uv run python manage.py test` from `apps/backend/`, or `make dev-backend-test` | | Backend lint | `uv run ruff check manage.py` from `apps/backend/` | -| Docs site | `uv run mkdocs build --strict` from `docs//` | +| Docs site | Run both strict Zensical builds from `docs//` (default English config, then `zensical.zh.toml`) | | Unused-code audit (advisory) | `pnpm run knip` | CI mirrors these in `.github/workflows/ci.yml`. If your change alters app names, settings modules, build commands, or verification steps, update the workflow too. diff --git a/README.md b/README.md index 569696a..4400189 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,7 @@ aliencommons/ | Contributors | Architecture, setup, development workflow | [`docs/contributors/`](docs/contributors/) | | AlienMark | Markdown syntax reference and API | [`docs/alienmark/`](docs/alienmark/) | -All documentation is available in English and Chinese (中文) and built with [MkDocs](https://www.mkdocs.org/) using the [Material](https://squidfunk.github.io/mkdocs-material/) theme. +All documentation is available in English and Chinese (中文) and built with [Zensical](https://zensical.org/). Please note that some materials may be not fully up-to-date in this stage. diff --git a/README.zh.md b/README.zh.md index 6d7cb5c..380c36f 100644 --- a/README.zh.md +++ b/README.zh.md @@ -143,7 +143,7 @@ aliencommons/ | 贡献者 | 架构、环境搭建、开发流程 | [`docs/contributors/`](docs/contributors/) | | AlienMark | Markdown 语法参考和 API | [`docs/alienmark/`](docs/alienmark/) | -所有文档均提供英文和中文版本,使用 [MkDocs](https://www.mkdocs.org/) 和 [Material](https://squidfunk.github.io/mkdocs-material/) 主题构建。 +所有文档均提供英文和中文版本,使用 [Zensical](https://zensical.org/) 构建。 请注意,在当前阶段,部分资料可能尚未完全保持最新。 diff --git a/docs/AGENTS.md b/docs/AGENTS.md index 062a798..58f8178 100644 --- a/docs/AGENTS.md +++ b/docs/AGENTS.md @@ -1,36 +1,38 @@ # Documentation Agent Guide — `docs/` -Three independent MkDocs sites. Each is its own uv workspace package and has its own `mkdocs.yml`, `pyproject.toml`, and `docs/` content tree. +Three independent Zensical sites. Each is its own uv workspace package and has a default English `zensical.toml`, a Chinese `zensical.zh.toml`, a `pyproject.toml`, and a `docs/` content tree. ## Sites | Subproject | Package name | Site name | CI build job | CI deploy workflow | |---|---|---|---|---| -| `docs/users/` | `aliencommons-users-docs` | AlienCommons User Guide | `docs-users` | (none) | -| `docs/contributors/` | `aliencommons-contributors-docs` | AlienCommons Docs | `docs-contributors` | `.github/workflows/contributors-docs-deploy.yml` | -| `docs/alienmark/` | `aliencommons-alienmark-docs` | AlienMark Docs | `docs-alienmark` | `.github/workflows/alienmark-docs-deploy.yml` | +| `docs/users/` | `aliencommons-user-guide` | AlienCommons User Guide | `docs-users` | (none) | +| `docs/contributors/` | `aliencommons-contributor-docs` | AlienCommons Docs | `docs-contributors` | `.github/workflows/contributors-docs-deploy.yml` | +| `docs/alienmark/` | `alienmark-docs` | AlienMark Docs | `docs-alienmark` | `.github/workflows/alienmark-docs-deploy.yml` | -## Stack (all three sites) +## Stack and configuration (all three sites) -- MkDocs `1.6.1`, Material for MkDocs `9.7.6`, `mkdocs-static-i18n` `1.3.1` (exact pins, Python `>=3.14`). -- `mkdocs-static-i18n` configured with `docs_structure: suffix`, locales `en` (default, `build: true`) and `zh` (`build: true`). -- Theme: Material, default language `en`. Each locale can supply `nav_translations`. +- Zensical is exactly pinned in each site's `pyproject.toml` (Python `>=3.14`). +- `zensical.toml` builds English from `docs/en/` into `site/`. +- `zensical.zh.toml` builds Chinese from `docs/zh/` into `site/zh/`. +- Each configuration sets its own theme language and navigation labels. Both expose the English/Chinese language selector. +- Always build English first, then Chinese. The English build owns `site/`; the Chinese build adds the `site/zh/` subtree. -## Filename convention (i18n suffix) +## Bilingual content convention -Because `docs_structure: suffix` is on, every translatable page exists as two files: +Every translatable page exists at the same relative path below both language roots: ``` -docs//docs/.en.md -docs//docs/.zh.md +docs//docs/en/.md +docs//docs/zh/.md ``` -`mkdocs.yml` nav entries use the bare stem (e.g. `index.md`, `syntax.md`, `product/roles.md`). The plugin resolves the per-locale file at build time. +Links stay language-local because each build has its own `docs_dir`. Use ordinary relative Markdown links such as `syntax.md` or `product/roles.md`; do not add language suffixes or prefixes. ## Writing rules -- **Update both `*.en.md` and `*.zh.md` together.** They must be equivalent in meaning; wording need not be literal. -- **Keep nav in sync.** Adding, moving, or removing a page requires updating that site's `mkdocs.yml` `nav:` block, in both languages if `nav_translations` are present. +- **Update matching files under `docs/en/` and `docs/zh/` together.** They must be equivalent in meaning; wording need not be literal. +- **Keep nav in sync.** Adding, moving, or removing a page requires updating `nav` in both `zensical.toml` and `zensical.zh.toml`. - **Don't invent.** No features, commands, or deployment steps that don't exist in the project. Cross-check against source (`apps/`, `packages/`) when documenting behavior. - **Match the existing page style**: heading depth, tone, terminology. - **Don't commit generated `site/` output** unless the task is explicitly about it. @@ -42,24 +44,29 @@ Run inside the relevant `docs//` directory. ```bash # Live preview -uv run mkdocs serve +uv run zensical serve + +# Preview Chinese on a separate port +uv run zensical serve --config-file zensical.zh.toml --dev-addr localhost:8001 # Strict build (matches CI; fails on warnings, missing pages, broken links) -uv run mkdocs build --strict +uv run zensical build --strict +uv run zensical build --strict --config-file zensical.zh.toml ``` -CI runs each docs job from inside `docs//` via `uv sync --project ../.. --locked --package aliencommons--docs` then `mkdocs build --strict`. Run the same `--strict` build locally before pushing. +CI runs each docs job from inside `docs//` via `uv sync --project ../.. --locked --package `, then runs both strict Zensical builds in the order above. Run the same commands locally before pushing. ## Cross-references -- AlienMark syntax docs (`docs/alienmark/docs/syntax.*.md`) must stay in sync with the parser's actual supported subset in [`packages/alienmark/`](../../packages/alienmark/AGENTS.md). When you change supported syntax, update the parser, its tests, and these docs together. +- AlienMark syntax docs (`docs/alienmark/docs/{en,zh}/syntax.md`) must stay in sync with the parser's actual supported subset in [`packages/alienmark/`](../../packages/alienmark/AGENTS.md). When you change supported syntax, update the parser, its tests, and these docs together. - Contributor docs reference the backend/frontend/architecture — keep them consistent with the code in [`apps/backend/`](../../apps/backend/AGENTS.md) and [`apps/frontend/`](../../apps/frontend/AGENTS.md). ## Verification ```bash # From docs// — strict build matches the CI docs-* jobs -uv run mkdocs build --strict +uv run zensical build --strict +uv run zensical build --strict --config-file zensical.zh.toml ``` If the build warns, treat it as a failure — CI runs with `--strict`. diff --git a/docs/alienmark/docs/index.en.md b/docs/alienmark/docs/en/index.md similarity index 95% rename from docs/alienmark/docs/index.en.md rename to docs/alienmark/docs/en/index.md index e2004b3..ed7e812 100644 --- a/docs/alienmark/docs/index.en.md +++ b/docs/alienmark/docs/en/index.md @@ -33,4 +33,4 @@ Supported today: ## Read Next -- [Syntax Reference](syntax.en.md) +- [Syntax Reference](syntax.md) diff --git a/docs/alienmark/docs/syntax.en.md b/docs/alienmark/docs/en/syntax.md similarity index 100% rename from docs/alienmark/docs/syntax.en.md rename to docs/alienmark/docs/en/syntax.md diff --git a/docs/alienmark/docs/index.zh.md b/docs/alienmark/docs/zh/index.md similarity index 95% rename from docs/alienmark/docs/index.zh.md rename to docs/alienmark/docs/zh/index.md index 0d371d2..7eac3b7 100644 --- a/docs/alienmark/docs/index.zh.md +++ b/docs/alienmark/docs/zh/index.md @@ -33,4 +33,4 @@ AlienMark 当前提供: ## 继续阅读 -- [语法参考](syntax.zh.md) +- [语法参考](syntax.md) diff --git a/docs/alienmark/docs/syntax.zh.md b/docs/alienmark/docs/zh/syntax.md similarity index 100% rename from docs/alienmark/docs/syntax.zh.md rename to docs/alienmark/docs/zh/syntax.md diff --git a/docs/alienmark/mkdocs.yml b/docs/alienmark/mkdocs.yml deleted file mode 100644 index ca5a834..0000000 --- a/docs/alienmark/mkdocs.yml +++ /dev/null @@ -1,28 +0,0 @@ -site_name: AlienMark Docs - -nav: - - Home: index.md - - Syntax: syntax.md - -theme: - name: material - language: en - -plugins: - - search - - i18n: - docs_structure: suffix - fallback_to_default: true - reconfigure_material: true - reconfigure_search: true - languages: - - locale: en - name: English - default: true - build: true - - locale: zh - name: 中文 - build: true - nav_translations: - Home: 首页 - Syntax: 语法 diff --git a/docs/alienmark/pyproject.toml b/docs/alienmark/pyproject.toml index 8d0ec8a..55c0809 100644 --- a/docs/alienmark/pyproject.toml +++ b/docs/alienmark/pyproject.toml @@ -2,11 +2,7 @@ name = "alienmark-docs" version = "0.1.0" requires-python = ">=3.14" -dependencies = [ - "mkdocs==1.6.1", - "mkdocs-material==9.7.6", - "mkdocs-static-i18n==1.3.1", -] +dependencies = ["zensical==0.0.50"] [tool.uv] add-bounds = "exact" diff --git a/docs/alienmark/zensical.toml b/docs/alienmark/zensical.toml new file mode 100644 index 0000000..9251a2f --- /dev/null +++ b/docs/alienmark/zensical.toml @@ -0,0 +1,14 @@ +[project] +site_name = "AlienMark Docs" +docs_dir = "docs/en" +site_dir = "site" +nav = [{ Home = "index.md" }, { Syntax = "syntax.md" }] + +[project.theme] +language = "en" + +[project.extra] +alternate = [ + { name = "English", link = "/", lang = "en" }, + { name = "中文", link = "/zh/", lang = "zh" }, +] diff --git a/docs/alienmark/zensical.zh.toml b/docs/alienmark/zensical.zh.toml new file mode 100644 index 0000000..1a23acc --- /dev/null +++ b/docs/alienmark/zensical.zh.toml @@ -0,0 +1,14 @@ +[project] +site_name = "AlienMark 文档" +docs_dir = "docs/zh" +site_dir = "site/zh" +nav = [{ "首页" = "index.md" }, { "语法" = "syntax.md" }] + +[project.theme] +language = "zh" + +[project.extra] +alternate = [ + { name = "English", link = "/", lang = "en" }, + { name = "中文", link = "/zh/", lang = "zh" }, +] diff --git a/docs/contributors/docs/architecture.en.md b/docs/contributors/docs/en/architecture.md similarity index 100% rename from docs/contributors/docs/architecture.en.md rename to docs/contributors/docs/en/architecture.md diff --git a/docs/contributors/docs/development/node-tooling.en.md b/docs/contributors/docs/en/development/node-tooling.md similarity index 100% rename from docs/contributors/docs/development/node-tooling.en.md rename to docs/contributors/docs/en/development/node-tooling.md diff --git a/docs/contributors/docs/development/setup.en.md b/docs/contributors/docs/en/development/setup.md similarity index 100% rename from docs/contributors/docs/development/setup.en.md rename to docs/contributors/docs/en/development/setup.md diff --git a/docs/contributors/docs/index.en.md b/docs/contributors/docs/en/index.md similarity index 72% rename from docs/contributors/docs/index.en.md rename to docs/contributors/docs/en/index.md index 0e45d85..6a2acf1 100644 --- a/docs/contributors/docs/index.en.md +++ b/docs/contributors/docs/en/index.md @@ -11,6 +11,6 @@ It provides a space for players to publish articles and participate in discussio If you are new to this project, start from the following links: -- [Product Design](product/index.en.md) -- [Development Setup](development/setup.en.md) -- [Project Architecture](architecture.en.md) +- [Product Design](product/index.md) +- [Development Setup](development/setup.md) +- [Project Architecture](architecture.md) diff --git a/docs/contributors/docs/overview.en.md b/docs/contributors/docs/en/overview.md similarity index 100% rename from docs/contributors/docs/overview.en.md rename to docs/contributors/docs/en/overview.md diff --git a/docs/contributors/docs/product/articles.en.md b/docs/contributors/docs/en/product/articles.md similarity index 99% rename from docs/contributors/docs/product/articles.en.md rename to docs/contributors/docs/en/product/articles.md index 4632161..215dc16 100644 --- a/docs/contributors/docs/product/articles.en.md +++ b/docs/contributors/docs/en/product/articles.md @@ -61,7 +61,7 @@ Confirmed rules: - The new version replaces the public version only after approval. - A work unpublished by an editor is not deleted. -The state entered after unpublishing and whether an `Archived` state should be added are still undecided. See [Open Questions](open-questions.en.md). +The state entered after unpublishing and whether an `Archived` state should be added are still undecided. See [Open Questions](open-questions.md). ## Collections diff --git a/docs/contributors/docs/product/community.en.md b/docs/contributors/docs/en/product/community.md similarity index 100% rename from docs/contributors/docs/product/community.en.md rename to docs/contributors/docs/en/product/community.md diff --git a/docs/contributors/docs/product/discovery.en.md b/docs/contributors/docs/en/product/discovery.md similarity index 100% rename from docs/contributors/docs/product/discovery.en.md rename to docs/contributors/docs/en/product/discovery.md diff --git a/docs/contributors/docs/product/index.en.md b/docs/contributors/docs/en/product/index.md similarity index 91% rename from docs/contributors/docs/product/index.en.md rename to docs/contributors/docs/en/product/index.md index d4c2815..762ddbc 100644 --- a/docs/contributors/docs/product/index.en.md +++ b/docs/contributors/docs/en/product/index.md @@ -40,9 +40,9 @@ AlienCommons primarily serves two groups: ## Continue Reading -- [User Roles](roles.en.md) -- [Columns](articles.en.md) -- [Content Discovery](discovery.en.md) -- [Community Interaction](community.en.md) -- [Reports and Administration](moderation.en.md) -- [Open Questions](open-questions.en.md) +- [User Roles](roles.md) +- [Columns](articles.md) +- [Content Discovery](discovery.md) +- [Community Interaction](community.md) +- [Reports and Administration](moderation.md) +- [Open Questions](open-questions.md) diff --git a/docs/contributors/docs/product/moderation.en.md b/docs/contributors/docs/en/product/moderation.md similarity index 100% rename from docs/contributors/docs/product/moderation.en.md rename to docs/contributors/docs/en/product/moderation.md diff --git a/docs/contributors/docs/product/open-questions.en.md b/docs/contributors/docs/en/product/open-questions.md similarity index 100% rename from docs/contributors/docs/product/open-questions.en.md rename to docs/contributors/docs/en/product/open-questions.md diff --git a/docs/contributors/docs/product/roles.en.md b/docs/contributors/docs/en/product/roles.md similarity index 100% rename from docs/contributors/docs/product/roles.en.md rename to docs/contributors/docs/en/product/roles.md diff --git a/docs/contributors/docs/architecture.zh.md b/docs/contributors/docs/zh/architecture.md similarity index 100% rename from docs/contributors/docs/architecture.zh.md rename to docs/contributors/docs/zh/architecture.md diff --git a/docs/contributors/docs/development/node-tooling.zh.md b/docs/contributors/docs/zh/development/node-tooling.md similarity index 100% rename from docs/contributors/docs/development/node-tooling.zh.md rename to docs/contributors/docs/zh/development/node-tooling.md diff --git a/docs/contributors/docs/development/setup.zh.md b/docs/contributors/docs/zh/development/setup.md similarity index 100% rename from docs/contributors/docs/development/setup.zh.md rename to docs/contributors/docs/zh/development/setup.md diff --git a/docs/contributors/docs/index.zh.md b/docs/contributors/docs/zh/index.md similarity index 72% rename from docs/contributors/docs/index.zh.md rename to docs/contributors/docs/zh/index.md index 0764114..5c05d62 100644 --- a/docs/contributors/docs/index.zh.md +++ b/docs/contributors/docs/zh/index.md @@ -11,6 +11,6 @@ 如果你第一次接触这个项目,请从以下链接开始: -- [产品设计](product/index.zh.md) -- [开发设置](development/setup.zh.md) -- [项目架构](architecture.zh.md) +- [产品设计](product/index.md) +- [开发设置](development/setup.md) +- [项目架构](architecture.md) diff --git a/docs/contributors/docs/overview.zh.md b/docs/contributors/docs/zh/overview.md similarity index 100% rename from docs/contributors/docs/overview.zh.md rename to docs/contributors/docs/zh/overview.md diff --git a/docs/contributors/docs/product/articles.zh.md b/docs/contributors/docs/zh/product/articles.md similarity index 96% rename from docs/contributors/docs/product/articles.zh.md rename to docs/contributors/docs/zh/product/articles.md index 9eed9d4..1f41d69 100644 --- a/docs/contributors/docs/product/articles.zh.md +++ b/docs/contributors/docs/zh/product/articles.md @@ -61,7 +61,7 @@ stateDiagram-v2 - 新版本审核通过后,才会替换线上公开版本。 - 被编辑撤稿的作品不会被删除。 -撤稿后应进入何种状态,以及是否增加 `Archived` 状态,仍待确定。参见[开放问题](open-questions.zh.md)。 +撤稿后应进入何种状态,以及是否增加 `Archived` 状态,仍待确定。参见[开放问题](open-questions.md)。 ## 文集 diff --git a/docs/contributors/docs/product/community.zh.md b/docs/contributors/docs/zh/product/community.md similarity index 100% rename from docs/contributors/docs/product/community.zh.md rename to docs/contributors/docs/zh/product/community.md diff --git a/docs/contributors/docs/product/discovery.zh.md b/docs/contributors/docs/zh/product/discovery.md similarity index 100% rename from docs/contributors/docs/product/discovery.zh.md rename to docs/contributors/docs/zh/product/discovery.md diff --git a/docs/contributors/docs/product/index.zh.md b/docs/contributors/docs/zh/product/index.md similarity index 90% rename from docs/contributors/docs/product/index.zh.md rename to docs/contributors/docs/zh/product/index.md index 3546e93..60c077c 100644 --- a/docs/contributors/docs/product/index.zh.md +++ b/docs/contributors/docs/zh/product/index.md @@ -40,9 +40,9 @@ AlienCommons 主要服务于两类用户: ## 继续阅读 -- [用户角色](roles.zh.md) -- [专栏作品](articles.zh.md) -- [内容发现](discovery.zh.md) -- [社区互动](community.zh.md) -- [举报与管理](moderation.zh.md) -- [开放问题](open-questions.zh.md) +- [用户角色](roles.md) +- [专栏作品](articles.md) +- [内容发现](discovery.md) +- [社区互动](community.md) +- [举报与管理](moderation.md) +- [开放问题](open-questions.md) diff --git a/docs/contributors/docs/product/moderation.zh.md b/docs/contributors/docs/zh/product/moderation.md similarity index 100% rename from docs/contributors/docs/product/moderation.zh.md rename to docs/contributors/docs/zh/product/moderation.md diff --git a/docs/contributors/docs/product/open-questions.zh.md b/docs/contributors/docs/zh/product/open-questions.md similarity index 100% rename from docs/contributors/docs/product/open-questions.zh.md rename to docs/contributors/docs/zh/product/open-questions.md diff --git a/docs/contributors/docs/product/roles.zh.md b/docs/contributors/docs/zh/product/roles.md similarity index 100% rename from docs/contributors/docs/product/roles.zh.md rename to docs/contributors/docs/zh/product/roles.md diff --git a/docs/contributors/mkdocs.yml b/docs/contributors/mkdocs.yml deleted file mode 100644 index 93010be..0000000 --- a/docs/contributors/mkdocs.yml +++ /dev/null @@ -1,44 +0,0 @@ -site_name: AlienCommons Docs -site_url: https://lazyalienserver.github.io/aliencommons/ - -nav: - - Home: index.md - - Overview: overview.md - - Product: - - product/index.md - - product/roles.md - - product/articles.md - - product/discovery.md - - product/community.md - - product/moderation.md - - product/open-questions.md - - Architecture: architecture.md - - Development: - - development/setup.md - - development/node-tooling.md - -theme: - name: material - language: en - -plugins: - - search - - i18n: - docs_structure: suffix - fallback_to_default: true - reconfigure_material: true - reconfigure_search: true - languages: - - locale: en - name: English - default: true - build: true - - locale: zh - name: 中文 - build: true - nav_translations: - Home: 首页 - Overview: 概览 - Product: 产品设计 - Architecture: 架构 - Development: 开发 diff --git a/docs/contributors/pyproject.toml b/docs/contributors/pyproject.toml index f0b3ffb..285ba0e 100644 --- a/docs/contributors/pyproject.toml +++ b/docs/contributors/pyproject.toml @@ -2,11 +2,7 @@ name = "aliencommons-contributor-docs" version = "0.0.1" requires-python = ">=3.14" -dependencies = [ - "mkdocs==1.6.1", - "mkdocs-material==9.7.6", - "mkdocs-static-i18n==1.3.1", -] +dependencies = ["zensical==0.0.50"] [tool.uv] add-bounds = "exact" diff --git a/docs/contributors/zensical.toml b/docs/contributors/zensical.toml new file mode 100644 index 0000000..24f9cf3 --- /dev/null +++ b/docs/contributors/zensical.toml @@ -0,0 +1,32 @@ +[project] +site_name = "AlienCommons Docs" +site_url = "https://lazyalienserver.github.io/aliencommons/" +docs_dir = "docs/en" +site_dir = "site" +nav = [ + { Home = "index.md" }, + { Overview = "overview.md" }, + { Product = [ + "product/index.md", + { Roles = "product/roles.md" }, + { Columns = "product/articles.md" }, + { Discovery = "product/discovery.md" }, + { Community = "product/community.md" }, + { Moderation = "product/moderation.md" }, + { "Open Questions" = "product/open-questions.md" }, + ] }, + { Architecture = "architecture.md" }, + { Development = [ + { Setup = "development/setup.md" }, + { "Node Tooling" = "development/node-tooling.md" }, + ] }, +] + +[project.theme] +language = "en" + +[project.extra] +alternate = [ + { name = "English", link = "/aliencommons/", lang = "en" }, + { name = "中文", link = "/aliencommons/zh/", lang = "zh" }, +] diff --git a/docs/contributors/zensical.zh.toml b/docs/contributors/zensical.zh.toml new file mode 100644 index 0000000..63a0d78 --- /dev/null +++ b/docs/contributors/zensical.zh.toml @@ -0,0 +1,32 @@ +[project] +site_name = "AlienCommons 文档" +site_url = "https://lazyalienserver.github.io/aliencommons/zh/" +docs_dir = "docs/zh" +site_dir = "site/zh" +nav = [ + { "首页" = "index.md" }, + { "概览" = "overview.md" }, + { "产品设计" = [ + "product/index.md", + { "用户角色" = "product/roles.md" }, + { "专栏作品" = "product/articles.md" }, + { "内容发现" = "product/discovery.md" }, + { "社区互动" = "product/community.md" }, + { "举报与管理" = "product/moderation.md" }, + { "开放问题" = "product/open-questions.md" }, + ] }, + { "架构" = "architecture.md" }, + { "开发" = [ + { "开发设置" = "development/setup.md" }, + { "Node 工具链" = "development/node-tooling.md" }, + ] }, +] + +[project.theme] +language = "zh" + +[project.extra] +alternate = [ + { name = "English", link = "/aliencommons/", lang = "en" }, + { name = "中文", link = "/aliencommons/zh/", lang = "zh" }, +] diff --git a/docs/users/docs/index.en.md b/docs/users/docs/en/index.md similarity index 100% rename from docs/users/docs/index.en.md rename to docs/users/docs/en/index.md diff --git a/docs/users/docs/index.zh.md b/docs/users/docs/zh/index.md similarity index 100% rename from docs/users/docs/index.zh.md rename to docs/users/docs/zh/index.md diff --git a/docs/users/mkdocs.yml b/docs/users/mkdocs.yml deleted file mode 100644 index 8a50cc1..0000000 --- a/docs/users/mkdocs.yml +++ /dev/null @@ -1,26 +0,0 @@ -site_name: AlienCommons User Guide - -nav: - - Home: index.md - -theme: - name: material - language: en - -plugins: - - search - - i18n: - docs_structure: suffix - fallback_to_default: true - reconfigure_material: true - reconfigure_search: true - languages: - - locale: en - name: English - default: true - build: true - - locale: zh - name: 中文 - build: true - nav_translations: - Home: 首页 diff --git a/docs/users/pyproject.toml b/docs/users/pyproject.toml index b3dccd4..71afa7d 100644 --- a/docs/users/pyproject.toml +++ b/docs/users/pyproject.toml @@ -2,11 +2,7 @@ name = "aliencommons-user-guide" version = "0.1.0" requires-python = ">=3.14" -dependencies = [ - "mkdocs==1.6.1", - "mkdocs-material==9.7.6", - "mkdocs-static-i18n==1.3.1", -] +dependencies = ["zensical==0.0.50"] [tool.uv] add-bounds = "exact" diff --git a/docs/users/zensical.toml b/docs/users/zensical.toml new file mode 100644 index 0000000..b1380b1 --- /dev/null +++ b/docs/users/zensical.toml @@ -0,0 +1,14 @@ +[project] +site_name = "AlienCommons User Guide" +docs_dir = "docs/en" +site_dir = "site" +nav = [{ Home = "index.md" }] + +[project.theme] +language = "en" + +[project.extra] +alternate = [ + { name = "English", link = "/", lang = "en" }, + { name = "中文", link = "/zh/", lang = "zh" }, +] diff --git a/docs/users/zensical.zh.toml b/docs/users/zensical.zh.toml new file mode 100644 index 0000000..ec20661 --- /dev/null +++ b/docs/users/zensical.zh.toml @@ -0,0 +1,14 @@ +[project] +site_name = "AlienCommons 用户指南" +docs_dir = "docs/zh" +site_dir = "site/zh" +nav = [{ "首页" = "index.md" }] + +[project.theme] +language = "zh" + +[project.extra] +alternate = [ + { name = "English", link = "/", lang = "en" }, + { name = "中文", link = "/zh/", lang = "zh" }, +] diff --git a/uv.lock b/uv.lock index 309f9f6..d7f78af 100644 --- a/uv.lock +++ b/uv.lock @@ -67,51 +67,33 @@ name = "aliencommons-contributor-docs" version = "0.0.1" source = { virtual = "docs/contributors" } dependencies = [ - { name = "mkdocs" }, - { name = "mkdocs-material" }, - { name = "mkdocs-static-i18n" }, + { name = "zensical" }, ] [package.metadata] -requires-dist = [ - { name = "mkdocs", specifier = "==1.6.1" }, - { name = "mkdocs-material", specifier = "==9.7.6" }, - { name = "mkdocs-static-i18n", specifier = "==1.3.1" }, -] +requires-dist = [{ name = "zensical", specifier = "==0.0.50" }] [[package]] name = "aliencommons-user-guide" version = "0.1.0" source = { virtual = "docs/users" } dependencies = [ - { name = "mkdocs" }, - { name = "mkdocs-material" }, - { name = "mkdocs-static-i18n" }, + { name = "zensical" }, ] [package.metadata] -requires-dist = [ - { name = "mkdocs", specifier = "==1.6.1" }, - { name = "mkdocs-material", specifier = "==9.7.6" }, - { name = "mkdocs-static-i18n", specifier = "==1.3.1" }, -] +requires-dist = [{ name = "zensical", specifier = "==0.0.50" }] [[package]] name = "alienmark-docs" version = "0.1.0" source = { virtual = "docs/alienmark" } dependencies = [ - { name = "mkdocs" }, - { name = "mkdocs-material" }, - { name = "mkdocs-static-i18n" }, + { name = "zensical" }, ] [package.metadata] -requires-dist = [ - { name = "mkdocs", specifier = "==1.6.1" }, - { name = "mkdocs-material", specifier = "==9.7.6" }, - { name = "mkdocs-static-i18n", specifier = "==1.3.1" }, -] +requires-dist = [{ name = "zensical", specifier = "==0.0.50" }] [[package]] name = "asgiref" @@ -162,28 +144,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/02/ff/1175b0b7371e46244032d43a56862d0af455823b5280a50c63d99cc50f18/automat-25.4.16-py3-none-any.whl", hash = "sha256:04e9bce696a8d5671ee698005af6e5a9fa15354140a87f4870744604dcdd3ba1", size = 42842, upload-time = "2025-04-16T20:12:14.447Z" }, ] -[[package]] -name = "babel" -version = "2.18.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, -] - -[[package]] -name = "backrefs" -version = "7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/a7dd63622beef68cc0d3c3c36d472e143dd95443d5ebf14cd1a5b4dfbf11/backrefs-7.0.tar.gz", hash = "sha256:4989bb9e1e99eb23647c7160ed51fb21d0b41b5d200f2d3017da41e023097e82", size = 7012453, upload-time = "2026-04-28T16:28:04.215Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/39/39a31d7eae729ea14ed10c3ccef79371197177b9355a86cb3525709e8502/backrefs-7.0-py310-none-any.whl", hash = "sha256:b57cd227ea556b0aed3dc9b8da4628db4eabc0402c6d7fcfc69283a93955f7e9", size = 380824, upload-time = "2026-04-28T16:27:55.647Z" }, - { url = "https://files.pythonhosted.org/packages/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-none-any.whl", hash = "sha256:a0fa7360c63509e9e077e174ef4e6d3c21c8db94189b9d957289ae6d794b9475", size = 392626, upload-time = "2026-04-28T16:27:57.42Z" }, - { url = "https://files.pythonhosted.org/packages/36/da/87912ddec6e06feffbaa3d7aa18fc6352bee2e8f1fee185d7d1690f8f4e8/backrefs-7.0-py312-none-any.whl", hash = "sha256:ca42ce6a49ace3d75684dfa9937f3373902a63284ecb385ce36d15e5dcb41c12", size = 398537, upload-time = "2026-04-28T16:27:58.913Z" }, - { url = "https://files.pythonhosted.org/packages/00/bb/90ba423612b6aa0adccc6b1874bcd4a9b44b660c0c16f346611e00f64ac3/backrefs-7.0-py313-none-any.whl", hash = "sha256:f2c52955d631b9e1ac4cd56209f0a3a946d592b98e7790e77699339ae01c102a", size = 400491, upload-time = "2026-04-28T16:28:00.928Z" }, - { url = "https://files.pythonhosted.org/packages/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-none-any.whl", hash = "sha256:a6448b28180e3ca01134c9cf09dcebafad8531072e09903c5451748a05f24bc9", size = 412349, upload-time = "2026-04-28T16:28:02.412Z" }, -] - [[package]] name = "boto3" version = "1.43.34" @@ -441,6 +401,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/ab/85534d9cbca09f3c10f58fc2093659062280ed5703707c0b41dbca8ec297/daphne-4.2.2-py3-none-any.whl", hash = "sha256:466ba8a7c31c5b758953095b451dbad9dc23e5783c68a3716e5fc7aa5f26d168", size = 29466, upload-time = "2026-06-03T10:53:11.841Z" }, ] +[[package]] +name = "deepmerge" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/78/6e9e20106224083cfb817d2d3c26e80e72258d617b616721a169b87081e0/deepmerge-2.1.0.tar.gz", hash = "sha256:07ca7a7b8935df596c512fa8161877c0487ac61f691c07766e7d71d2b23bdd2f", size = 21449, upload-time = "2026-06-22T05:46:07.669Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/25/2a75b47cb057b1e164c604fb81ab690a6cdb5e2260ce651194eae90f64a3/deepmerge-2.1.0-py3-none-any.whl", hash = "sha256:8f148339a91d680a75ecb74ade235d9e759a93df373a0b04e9d31c8666cfeb75", size = 14345, upload-time = "2026-06-22T05:46:06.742Z" }, +] + [[package]] name = "django" version = "6.0.7" @@ -621,18 +590,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5e/2e/b41d8a1a917d6581fc27a35d05561037b048e47df50f27f8ac9c7e27a710/freezegun-1.5.5-py3-none-any.whl", hash = "sha256:cd557f4a75cf074e84bc374249b9dd491eaeacd61376b9eb3c423282211619d2", size = 19266, upload-time = "2025-08-09T10:39:06.636Z" }, ] -[[package]] -name = "ghp-import" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, -] - [[package]] name = "hyperlink" version = "21.0.0" @@ -735,96 +692,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f4/e0/ff24e25218bb59eb6290a530cea40651b14068b6e3659b20f9c175179632/marshmallow-4.3.0-py3-none-any.whl", hash = "sha256:46c4fe6984707e3cbd485dfebbf0a59874f58d695aad05c1668d15e8c6e13b46", size = 49148, upload-time = "2026-04-03T21:46:31.241Z" }, ] -[[package]] -name = "mergedeep" -version = "1.3.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, -] - -[[package]] -name = "mkdocs" -version = "1.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "ghp-import" }, - { name = "jinja2" }, - { name = "markdown" }, - { name = "markupsafe" }, - { name = "mergedeep" }, - { name = "mkdocs-get-deps" }, - { name = "packaging" }, - { name = "pathspec" }, - { name = "pyyaml" }, - { name = "pyyaml-env-tag" }, - { name = "watchdog" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, -] - -[[package]] -name = "mkdocs-get-deps" -version = "0.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mergedeep" }, - { name = "platformdirs" }, - { name = "pyyaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" }, -] - -[[package]] -name = "mkdocs-material" -version = "9.7.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "babel" }, - { name = "backrefs" }, - { name = "colorama" }, - { name = "jinja2" }, - { name = "markdown" }, - { name = "mkdocs" }, - { name = "mkdocs-material-extensions" }, - { name = "paginate" }, - { name = "pygments" }, - { name = "pymdown-extensions" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/45/29/6d2bcf41ae40802c4beda2432396fff97b8456fb496371d1bc7aad6512ec/mkdocs_material-9.7.6.tar.gz", hash = "sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69", size = 4097959, upload-time = "2026-03-19T15:41:58.161Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl", hash = "sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba", size = 9305470, upload-time = "2026-03-19T15:41:55.217Z" }, -] - -[[package]] -name = "mkdocs-material-extensions" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, -] - -[[package]] -name = "mkdocs-static-i18n" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mkdocs" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ce/f9/51e2ffda9c7210bc35a24f3717b08c052cd4b728dfa87f901c00d8005259/mkdocs_static_i18n-1.3.1.tar.gz", hash = "sha256:a6125ea7db6cc1a900d76a967f262535af09831160a93c56d7f0d522a79b5faf", size = 1371325, upload-time = "2026-02-20T10:42:41.835Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/0b/43ff4afb6b438d47718b1959a22075ed95d8460d8c47381878b37a40de63/mkdocs_static_i18n-1.3.1-py3-none-any.whl", hash = "sha256:4036e24795a150c9c4d4b001ed24a43aec01335f76188dbe5a5d8fb4a27eba65", size = 21853, upload-time = "2026-02-20T10:42:40.551Z" }, -] - [[package]] name = "msgpack" version = "1.2.1" @@ -864,24 +731,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, ] -[[package]] -name = "paginate" -version = "0.5.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, -] - -[[package]] -name = "pathspec" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, -] - [[package]] name = "pillow" version = "12.3.0" @@ -932,15 +781,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" }, ] -[[package]] -name = "platformdirs" -version = "4.10.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } -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" }, -] - [[package]] name = "psycopg" version = "3.3.4" @@ -1066,18 +906,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] -[[package]] -name = "pyyaml-env-tag" -version = "1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyyaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, -] - [[package]] name = "redis" version = "8.0.0" @@ -1199,6 +1027,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl", hash = "sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba", size = 46138, upload-time = "2025-12-19T07:17:46.573Z" }, ] +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + [[package]] name = "twisted" version = "26.4.0" @@ -1336,21 +1191,33 @@ wheels = [ ] [[package]] -name = "watchdog" -version = "6.0.0" +name = "zensical" +version = "0.0.50" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, - { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, - { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, - { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, - { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, - { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, +dependencies = [ + { name = "click" }, + { name = "deepmerge" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "pyyaml" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/14/79/f7959b13c766a831f1248779bb718555f70f40c5b8e68db7de1de9936662/zensical-0.0.50.tar.gz", hash = "sha256:7040e52ebe5e6a275e4edeb351bf2bc314d007f3fb5750f178a38d840723e69c", size = 3979246, upload-time = "2026-07-09T13:52:11.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/d2/e126d56642a5fd437eeb5a067b7c0d1f766c08e22d6a708bb923986f1d44/zensical-0.0.50-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:26dda9dbacab84db2743726f83202798e1893fbfddecb6a845812d7a331043ad", size = 12817706, upload-time = "2026-07-09T13:51:29.624Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9b/e1a22fb4ea8fc3e8377d7b394ee06cf0349e7f9a64ecb4c9873dee79b102/zensical-0.0.50-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:376887def6470c57509b48519870f74e2b987e30509cf5c819fcf372771f9403", size = 12691061, upload-time = "2026-07-09T13:51:33.194Z" }, + { url = "https://files.pythonhosted.org/packages/38/f5/16c087635680efb39e1d7b7aa3c2cca548305aa29ad51dee04f37b32b65f/zensical-0.0.50-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bbf3034a2cb1a9d2a72a5ee7047688717c93da0d8a90d25dd871db8d5f33a6d", size = 13129505, upload-time = "2026-07-09T13:51:36.383Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/50d02402e53aa01a5c5c116a3522c7bb18d6ae4da964d8b236173b6fa086/zensical-0.0.50-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26fe4167663d544ca385ef420a49d3b738c7606a79d7a62a6bedcbf74cd383e7", size = 13055300, upload-time = "2026-07-09T13:51:39.748Z" }, + { url = "https://files.pythonhosted.org/packages/cf/0f/45f4f3e56a6483ea9f88478b20d6b434718e7c46579239589202e5135ec1/zensical-0.0.50-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8813d1f8895b19520d4a982d6bfcfd06372d73d96e6a63f0d2cf8f3b6036d5a1", size = 13445447, upload-time = "2026-07-09T13:51:43.106Z" }, + { url = "https://files.pythonhosted.org/packages/33/9b/1f5065c664afde6a63e0ada8c14eae75f9e6960df597a5ca28c07340f938/zensical-0.0.50-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a64f957f94f7d8e8847a7f1e8205509ba4b188c93c157c5e7be49bcb8556a127", size = 13098775, upload-time = "2026-07-09T13:51:46.437Z" }, + { url = "https://files.pythonhosted.org/packages/46/65/1e42e18d8f9a0cb9fcc8b871852810c7fe196237b79aaa831e863325091e/zensical-0.0.50-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:781d333bcb42c6a6b92360e05eadc944e2674794e1a95537971de1bf64cb9f89", size = 13305922, upload-time = "2026-07-09T13:51:51.107Z" }, + { url = "https://files.pythonhosted.org/packages/50/36/9cace194ba13aef3bdde8ca2d327f3a05cdf5c456e94f6d896852e2cbd38/zensical-0.0.50-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:5d0f86eec76c23efb04566cd444bf025845ac8a02e75c8a6b4af13a39a2a9955", size = 13325488, upload-time = "2026-07-09T13:51:54.883Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/2891a9316e486794dae43151561b49f3313499cfb2c95c7886abad7bcf2d/zensical-0.0.50-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:392a7299a3c4d1ac7ff288bbed181d77a9fd23e6614180476e01630aaee0d67e", size = 13496866, upload-time = "2026-07-09T13:51:58.257Z" }, + { url = "https://files.pythonhosted.org/packages/7e/09/fbd3af58081a0d399fa913ef1f2fd6a007f2f06f7026c8d6a6096e34b996/zensical-0.0.50-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cac3448d8c8a76dfb43e55908b4ca9ad17596aee89a9287a184c1a0ba7dce2a2", size = 13437565, upload-time = "2026-07-09T13:52:01.766Z" }, + { url = "https://files.pythonhosted.org/packages/d3/79/709311ff202326260ff223fb6e9ddefa3100474c428e3c70a04036cefe0e/zensical-0.0.50-cp310-abi3-win32.whl", hash = "sha256:32b244f96a930f68e049b2e03d50790c120ef701b6277ddd854905a33040c75f", size = 12371966, upload-time = "2026-07-09T13:52:05.207Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e1/4babb30544d7465c95a6a93abc0680b1c51752411a225c2b7f2cb44e80c7/zensical-0.0.50-cp310-abi3-win_amd64.whl", hash = "sha256:2f054769bf96ae46353de3eca2463ad4db6df1da9fde515c6d7fc54c3608e615", size = 12604832, upload-time = "2026-07-09T13:52:09.013Z" }, ] [[package]]