尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Palladin zero-knowledge password manager backend — a security-first .NET modular monolith for identity, vault, agents, audit, and notifications.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Palladin is a zero-knowledge password manager for AI agents. This repository contains the .NET 10 backend: a modular monolith that coordinates identities, encrypted vault data, agents, grants, notifications, search, and audit records without receiving plaintext credentials or client-held encryption keys.
The backend is pre-production. Its current migration baseline intentionally assumes empty databases and may be incompatible with earlier development data.
Project overview and public repositories · Mobile client · Website
Each component owns its setup and contribution guide. This repository can be used independently of the private project workspace.
Security is an architectural constraint, not an optional feature:
AllowAnonymous().DomainWriteContext, invoke domain behavior, and commit through the domain context so invariants and events cannot be bypassed.The canonical vault wire contract and cryptographic boundaries are documented in Vault protocol 2. Start an architecture review at docs/architecture/README.md.
Every running build exposes its corresponding source revision and license through the anonymous GET /api/health response. Official container images also carry OCI source, revision, and license labels.
Do not report suspected vulnerabilities in a public issue. Use GitHub private vulnerability reporting from the repository's Security tab, or contact the maintainers privately through the Palladin organization.
The application is one deployable API with isolated bounded contexts:
| Area | Responsibility |
|---|---|
src/Palladin.Api | Process entry point, HTTP pipeline, health checks, and module composition |
src/core | Shared security, persistence, messaging, API, analytics, and infrastructure building blocks |
| Identity | Accounts, authentication, organizations, membership, recovery, and key-directory metadata |
| Vault | Encrypted vaults and entries, grants, delivery envelopes, synchronization, and key rotation |
| Agents | Agent enrollment, API keys, proof-of-possession authentication, and lifecycle |
| Audit | Append-only audit records and asynchronous export |
| Notification | Inbox, SignalR, email, and push orchestration |
| Search | Event-fed, access-scoped read models |
| PublicAssetCatalog | Safely acquired and published public icons and presentation assets |
Modules communicate asynchronously through MassTransit contracts. Read and write persistence are split per module, and cross-module read concerns use event-fed OpenHost modules instead of live database queries.
Key technologies include FastEndpoints, Entity Framework Core with PostgreSQL, MassTransit with RabbitMQ, Hangfire, SignalR, NodaTime, Serilog, xUnit, Shouldly, NSubstitute, and Testcontainers.
Prerequisites:
Start PostgreSQL, RabbitMQ, and the local S3-compatible storage used by presentation assets:
docker compose up -d --wait
The compose stack binds every service to loopback only and initializes isolated development and test databases. The committed development configuration points storage-dependent features at the LocalStack S3 endpoint on http://localhost:4566; the API creates the required public-asset bucket when it starts.
Restore, build, and run the API:
dotnet restore Palladin.sln
dotnet build Palladin.sln --no-restore
dotnet run --project src/Palladin.Api/Palladin.Api.csproj
The development API listens on http://localhost:5000. Check GET /api/health; Scalar API documentation is available at /scalar only in Development.
For local overrides, copy the tracked placeholder template to the ignored local settings file and fill in your own Google Web client ID:
cp src/Palladin.Api/appsettings.Local.example.json \
src/Palladin.Api/appsettings.Local.json
Alternatively, use ASP.NET's double-underscore environment syntax. Environment variables take precedence over the local settings file:
Modules__Identity__Google__ClientId=your-local-client-id \
dotnet run --project src/Palladin.Api/Palladin.Api.csproj
The Google client ID is public client configuration rather than a secret, but Palladin's value stays outside tracked defaults so a public clone or fork cannot silently use Palladin's OAuth project. Never commit appsettings.Local.json, .env files, service-account JSON, signing keys, tokens, or production connection strings.
Run the same pipeline as CI:
dotnet restore Palladin.sln
dotnet build Palladin.sln --no-restore
dotnet test Palladin.sln --no-build --verbosity normal
The unit project can be run independently:
dotnet test tests/Palladin.Tests.Unit/Palladin.Tests.Unit.csproj
Integration tests require the local PostgreSQL test databases. A fresh docker compose up -d postgres initializes them; external delivery and storage boundaries are replaced with test doubles where the suite requires isolation.
The Shared Unlock fixture scanner checks
document the public-vector provenance and test the narrowly scoped Gitleaks
exceptions. Run bash scripts/test-gitleaks-fixtures.sh when changing those
fixtures or the scanner configuration.
Read AGENTS.md before changing code and the relevant module document before implementing a feature. Keep changes within a vertical slice, preserve zero-knowledge boundaries, add behavior-focused tests, and run the full build and test pipeline before opening a pull request.
All changes are reviewed through pull requests to main. Security boundary changes, integration-contract changes, and schema changes should be called out explicitly in the pull request description.
Copyright 2026 Patryk Roguszewski, trading as Patryk Roguszewski IT Solutions.
The backend is licensed under the GNU Affero General Public License v3.0 only, identified as AGPL-3.0-only. See NOTICE, TRADEMARKS.md, THIRD_PARTY_NOTICES.md, and the CycloneDX SBOM for additional information.