hypermind 0.23.0__tar.gz → 0.24.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {hypermind-0.23.0 → hypermind-0.24.0}/CHANGELOG.md +38 -1
- {hypermind-0.23.0 → hypermind-0.24.0}/PKG-INFO +7 -3
- {hypermind-0.23.0 → hypermind-0.24.0}/README.md +6 -2
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/README.md +1 -0
- hypermind-0.24.0/examples/org_distributed.py +74 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/pyproject.toml +1 -1
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/__init__.py +1 -1
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/distributed/__init__.py +33 -1
- hypermind-0.24.0/src/hypermind/orgs/distributed/coordinator.py +251 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/distributed/planning.py +31 -0
- hypermind-0.24.0/src/hypermind/orgs/distributed/provision.py +57 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_distributed.py +151 -8
- hypermind-0.23.0/src/hypermind/orgs/distributed/coordinator.py +0 -175
- {hypermind-0.23.0 → hypermind-0.24.0}/.editorconfig +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.gitattributes +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/FUNDING.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/renovate.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/check-license.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/code-review-pr.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/hotfix-security.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/issue-auto-fix.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/issue-triage.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/pr-standards.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/quality.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/release.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/security.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows/stale.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/branch-flow-check.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/chaos.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/check-license.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/ci.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/code-freeze.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/code-review-pr.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/code-review.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/codeql.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/dco.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/docs-to-wiki.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/docs.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/formal.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/fuzz.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/hotfix-security.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/issue-auto-fix.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/issue-triage.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/merge-comment.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/pip-audit.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/pr-standards.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/quality.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/release.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/sbom.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/scorecard.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/security.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/sprint-retro.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.github/workflows-disabled/stale.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.gitignore +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.pre-commit-config.yaml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/.tool-versions +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/CHARTER.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/CODEOWNERS +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/CODE_OF_CONDUCT.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/CONTRIBUTING.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/GOVERNANCE.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/LICENSE +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/MAINTAINERS.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/Makefile +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/RELATA_COMPATIBILITY.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/RELATA_INTEGRATION_PLAN.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/RELATA_STORAGE.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/ROADMAP.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/SECURITY.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/baselines/v0.6.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/bench_consult.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/bench_dispute.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/bench_publish.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/coordination/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/coordination/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/coordination/baselines/v0.10.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/coordination/bench_rfp_latency.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/coordination/bench_task_throughput.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/coordination/bench_workflow_replay.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/coordination/run_all.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/question_sets/geopolitics_q20.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/question_sets/msft_outlook_q10.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/bench/run_bench.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/p1_partition_recovery.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/p2_witness_compromise.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/p3_key_rotation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/p4_dispute_backlog.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/p5_wire_cutover.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/p6_quorum_loss.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/p7_clock_skew.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/p8_recorder_outage.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/chaos/run_chaos.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/Dockerfile +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/docker-compose.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/grafana/dashboards/hypermind-coordination.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/grafana/dashboards/hypermind-v06.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/grafana/dashboards/hypermind.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/grafana/provisioning/dashboards/hypermind.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/grafana/provisioning/datasources/prometheus.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/k8s/hypermind-deployment.yaml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/prometheus/prometheus.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/deploy/systemd/hypermind.service +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/SIMLAB.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/SIMLAB_AUDIT_PLAN.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/_meta/glossary.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/_meta/provenance.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/_meta/public-surface.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/_meta/standards-map.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/agent.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/agent_card.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/capability.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/crypto.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/dispute.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/knowledge.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/observability.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/simlab-openapi.yaml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/sync.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/tasks.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/transport.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/api/wire.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/architecture-v0.6.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/assets/hero-swarm.svg +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/audit/findings.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/audit/scope.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/concepts.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/conformance/authority.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/conformance/bake-off-report.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/conformance/mark-policy.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/decide/01-disqualifiers.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/decide/02-alternatives.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/decide/03-incentive-aligned-cases.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/decide/04-use-cases.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/design/01-architecture.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/design/02-traces.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/design/03-failure-modes.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/design/04-poisoning-defenses.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/design/05-deployment-topology.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/feature-matrix.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/getting-started.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/governance/cna.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/governance/foundation-evaluation.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/hypermind-protocol-spec.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/index.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/legal/export-classification.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/lts.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/migrate/v0.x-to-v1.0.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/migration/v0.7.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/00-prerequisites.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/after.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/exercises/e01-run-the-loop.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/exercises/e02-draw-the-architecture.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/exercises/e03-trace-a-claim.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/exercises/e04-read-a-spec-section.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/exercises/e05-break-it.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/exercises/e06-add-a-test.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/exercises/e07-first-pr.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/glossary.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/00-what-is-hypermind.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/01-agents-and-swarms.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/02-architecture-tour.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/03-spec-literacy.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/04-cryptography.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/05-cbor-cose.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/06-transparency-logs.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/07-distributed-systems.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/08-async-python.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/topics/09-security-mindset.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/week-1-foundations.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/onboarding/week-2-deep-dive.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/01-deployment.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/02-runbook.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/03-resource-budget.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/backup-restore.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/data-residency.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/key-rotation.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/dispute-backlog-drain.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/key-rotation.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/kms-rotation.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/multi-host-deploy.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/partition-heal.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/quorum-loss.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/rfp-dispute-triage.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/wire-cutover.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/witness-compromise.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/runbooks/workflow-replay.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/operate/slo.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/paper/00-patent.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/paper/hypermind-paper-draft.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/paper/hypermind-paper.docx +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/paper/hypermind-paper.tex +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/release-notes/v1.0-checklist.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/release-notes/v1.0.0.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/security/threat-model.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/simlab/modes.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/simulations.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/00-overview.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/01-transport.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/02-cryptography.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/03-messages.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/04-knowledge-model.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/05-routing.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/06-conformance.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/07-trust-access-layer.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/08-onboarding-contract.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/09-agent-sdk.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/10-disputes.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/11-witness-transparency.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/12-governance.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/13-observability.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/14-threat-model.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/15-living-transmission.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/16-reference-comparisons.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/17-upgrade-v1.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/18-revocation.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/19-autonomy-contract.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/20-swarm-intelligence.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/21-belief-state.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/21-private-namespaces.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/22-transport-mtls.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/23-envelope-encryption.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/24-namespace-identity.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/25-capability-extensions.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/26-workflow.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/27-contract-net.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/28-distributed-trace.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/_meta/gaps-closed.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/appendix-N-calibration.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/appendix-TLA.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/appendix-z.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/errata.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/index.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/invariants.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/spec/normative-trace.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/supply-chain/sbom.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/supply-chain/slsa.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/supply-chain/verify-self.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/docs/sustainability.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/01_hello_world.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/02_two_agents_dispute.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/03_consult_panel.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/04_oracle_resolve.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/05_consult_to_synthesis.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/06_hybrid_pq.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/07_frost_threshold.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/08_ramp_and_diagnostics.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/09_audit_export_chain.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/10_autonomous_agent.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/11_swarm_deliberation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/12_swarm_iq_scorecard.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/13_role_specialisation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/14_active_learning_loop.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/16_wire_message.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/17_tool_delegation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/18_custom_responder.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/19_governance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/20_conformance_check.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/21_revocation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/22_agent_card.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/23_task_delegation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/24_mcp_tool_call.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/25_swarm_trace.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/01_durable_workflow.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/02_contract_net.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/03_belief_and_plan.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/ai_01_fed_benchmark.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/ai_alignment_redteam.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/cy_05_ir_swarm.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/cy_11_ransomware_intel.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/ed_credentials.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/en_grid_coordinate.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/fi_04_bsa_314b.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/fi_22_ma_dataroom.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/gv_01_intel_sharing.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/gv_21_red_team.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/hc_06_rare_disease.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/hc_21_fed_learning.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/lg_ediscovery.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/coordination/usecases/mf_supply_chain.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/e2e_many_agents.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/full_e2e_demo.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/lifecycle.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/org_university.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_aar.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_backtest.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_capability_attenuation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_conformance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_crisis_tabletop.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_cross_namespace_federation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_decision_tournament.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_dispute_lifecycle_async.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_evaluation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_geopolitical_crisis.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_geopolitical_traced.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_governance_committee.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_information_pipeline.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_learning_loop.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_namespace_trust.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_persona_panel.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_private_namespace.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_red_team.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_regulated_consortium.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_threat_intel.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_vouch_chain.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/scenario_what_if_tree.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/serve_api.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/examples/two_node_tcp.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/formal/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/formal/hax-rust/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/formal/hax-rust/scope.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/formal/proverif/dispute_fsm.pv +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/formal/proverif/dispute_liveness.pv +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/formal/tamarin/capability_chain.spthy +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/formal/tamarin/dispute_fsm.spthy +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/formal/tamarin/signed_statement.spthy +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/formal/tamarin/wire_security.spthy +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/fuzz/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/fuzz/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/fuzz/fuzz_agent_card.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/fuzz/fuzz_anti_entropy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/fuzz/fuzz_capability.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/fuzz/fuzz_dispute.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/fuzz/fuzz_inclusion_proof.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/fuzz/fuzz_wire.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/fuzz/seed_corpus.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/__main__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/assertions.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/fixtures.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/report.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/roles.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/runner.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/scenario.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/scenarios/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/scenarios/autonomous_evolution.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/scenarios/swarm_iq_benchmark.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/harness/scenarios/threat_intel.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/mkdocs.yml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/reference_verifier/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/reference_verifier/schemas/encrypted_statement.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/reference_verifier/schemas/namespace_accept.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/reference_verifier/schemas/namespace_create.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/reference_verifier/schemas/namespace_founding_attest.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/reference_verifier/schemas/namespace_invite.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/reference_verifier/schemas/wire-v0.1.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/reference_verifier/verifier.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/review/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/review/__main__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/review/agents.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/review/models.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/review/runner.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hmctl/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hmctl/cli.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/_deprecations.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/agent.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/agent_card.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/api/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/api/app.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/capability.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/consult.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/consult_bias.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/contract_net.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/cose_encrypt.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/dkg.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/domain.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/frost.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/hashing.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/hlc.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/hpke.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/kms.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/kms_backends/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/kms_backends/aws.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/kms_backends/azure.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/kms_backends/gcp.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/kms_backends/vault.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/namespace_root.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/pq.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/room_epoch.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/crypto/signing.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/deliberation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/did_web.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/dispute.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/errors.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/eval/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/eval/calibration.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/eval/comparison.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/eval/replay.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/eval/swarm_iq.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/knowledge/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/knowledge/citation_graph.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/knowledge/correlated_agreement.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/knowledge/embedding_registry.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/knowledge/kernel_store.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/knowledge/rekor.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/knowledge/reputation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/knowledge/swarm_memory.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/knowledge/transparency.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mcp/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mcp/bridge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mcp/client.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mcp/provenance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mcp/relata_tools.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mcp/server.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mcp/transport.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/active.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/belief.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/deliberator.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/diversity.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/evolve.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/federation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/goals.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/integration.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/mediator.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/memory_store.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/policy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/records.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/roles.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/sybil_guard.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/mind/world_model.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/namespace.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/namespace_policy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/observability/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/observability/asgi.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/observability/cost.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/observability/otel_export.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/observability/recorder.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/observability/swarm_trace.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/context.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/deliberate.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/distributed/__main__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/distributed/protocol.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/distributed/serde.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/distributed/worker.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/experiment.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/groundtruth.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/interaction.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/intervention.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/metrics.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/model.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/quality.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/query.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/receipt.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/report.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/retrieval.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/sim.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/stream.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/templates/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/think.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/orgs/tools.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/pin_policy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/py.typed +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/responders/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/responders/anthropic.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/responders/base.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/responders/openai.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/responders/router.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/responders/structured.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/responders/tools.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/revocation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/rule_ids.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/schemas/encrypted_statement.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/schemas/namespace_accept.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/schemas/namespace_create.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/schemas/namespace_founding_attest.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/schemas/namespace_invite.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/schemas/wire-v0.1.cddl +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/_persona_registry.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/_scenario_impl.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/app.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/backends/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/backends/anchor.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/backends/local.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/backends/server.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/cli_command.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/config.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/deployment.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/knowledge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/learning.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/_eval_real_llm.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/aar.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/backtest.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/binary_forecast.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/conformance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/evaluation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/governance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/redteam.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/tabletop.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/tournament.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/modes/whatif.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/namespace.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/personas.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/prompt_generator.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/question_sets/geopolitics_q20.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/question_sets/governance_q5.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/question_sets/msft_outlook_q10.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/question_sets/whatif_q3.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/registry.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/runner.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/scenario.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/swarms.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/alpha_vantage.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/brave.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/newsapi.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/openweather.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/pinecone.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/qdrant.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/query_knowledge_base.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/relata_recall.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/retrieve_document.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/serper.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/tavily.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/weaviate.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/wikipedia.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/wolfram.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_handlers/yahoo_finance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/tool_registry.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/topic_adapter.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/simlab/topic_questions.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/storage/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/storage/backend.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/storage/relata.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/storage/sqlite.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/sync.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/tal.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/tasks.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/testing.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/tools/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/tools/registry.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/transport/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/transport/anti_entropy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/transport/bus.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/transport/knows_delta.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/transport/libp2p.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/transport/placement.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/transport/tcp.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/transport/tls_profile.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/types.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/uncertainty.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/wire.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/workflow/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/workflow/engine.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/workflow/plan.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/src/hypermind/workflow/repair.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/storage-backend-requirements.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/api/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/api/test_eval_endpoints.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/api/test_events_stream.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/api/test_management_app.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/chaos/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/chaos/test_gossip_amplification.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/chaos/test_kill_agent_during_rfp.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/chaos/test_partition_during_workflow.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/chaos/test_slow_consumer_backpressure.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/chaos/test_slow_peer.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/generate_vectors.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/SIGNING.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/agent-card-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/agent-card-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/capability-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/capability-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/capability-03.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/dispute-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/dispute-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/dispute-03.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/dispute-04.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/dispute-05.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/frost-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/frost-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/frost-03.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/knows-delta-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/knows-delta-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/mcp-prov-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/mcp-prov-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/merkle-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/merkle-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/merkle-03.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/merkle-04.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/rep-decay-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/task-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/task-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/trace-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/trace-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/wire-envelope-01.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/wire-envelope-02.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/wire-envelope-03.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/wire-envelope-04.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conformance/vectors/wire-envelope-05.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/conftest.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/fake_kms.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/harness/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/harness/conftest.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/harness/test_assertion_library.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/harness/test_runner_lifecycle.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/harness/test_threat_intel_harness.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/integration/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/integration/test_kms_aws.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/integration/test_kms_azure.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/integration/test_kms_gcp.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/integration/test_kms_vault.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/integration/test_relata_server.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/_fakes.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_adversarial.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_concurrency.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_context.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_convergence.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_deliberator.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_embeddings.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_experiment.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_graph_retrieval.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_groundtruth.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_hybrid_retriever.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_interaction.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_intervention.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_lightweight.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_metrics.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_model.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_ner.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_quality.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_query.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_rag.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_receipt.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_report.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_scale.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_sim.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_stream.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_templates.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_think.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_tool_traces.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/orgs/test_tools.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/responders/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/responders/test_responders.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/responders/test_router.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/responders/test_structured_response.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/responders/test_tools.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/review/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/review/test_agents_parser.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/review/test_models.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/review/test_runner.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/conftest.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_app_endpoints.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_knowledge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_knowledge_reuse.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_modes_aar.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_modes_backtest.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_modes_conformance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_modes_evaluation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_modes_governance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_modes_redteam.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_modes_tabletop.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_modes_tournament.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_modes_whatif.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_personas.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_personas_endpoints.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_recorder_scoping.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_registry.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_resolve_outcomes.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_responder_timeout.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_runner.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/simlab/test_swarms.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/storage/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/storage/test_relata_backend.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/storage/test_sqlite_backend.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_active_multi_step.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_agent_card.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_agent_e2e.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_agent_edge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_anti_entropy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_anti_entropy_multiround.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_anti_entropy_selfheal.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_appendix_z_conformance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_appendix_z_vectors.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_arg_dag_edge_types.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_backpressure.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_belief_revision.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_bias_detector.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_block_reason.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_calibration.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_capability.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_capability_canonical.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_capability_chain.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_capability_edge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_capability_enforcement.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_capability_namespace_caveat.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_capability_revocation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_citation_graph.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_cli.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_cli_interop.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_composite_lamps_prefix.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_consult.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_consult_stream.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_consult_stream_t4.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_contract_net_disputed_award.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_contract_net_frost_award.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_contract_net_happy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_contract_net_reputation_scoring.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_contract_net_sybil_filter.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_correlated_agreement.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_cose_encrypt_roundtrip.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_cost_tracker.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_cross_namespace_consult.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_crypto.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_deliberation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_deliberator_cap.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_deliberator_observe.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_deprecation_registry.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_determinism_corpus.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_dispute.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_dispute_fsm_full.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_dispute_mediate.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_dispute_quorum.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_dissent.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_diversity_quorum.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_dkg.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_embedding_registry.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_eval_comparison.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_examples_runnable.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_final_coverage.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_frost.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_frost_edge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_frost_hedged_nonces.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_frost_persistence.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_frost_transcript_store_swap.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_hlc_clock_source.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_hpke_vectors.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_info_gain_routing.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_kernel_store.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_kms_backends.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_kms_fake.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_knows_delta.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_lamps_oid_canonical.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_last_lines.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_libp2p_peer_id.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_libp2p_scaffold.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_libp2p_stub.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mcp_bridge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mcp_provenance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mcp_tools_list.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mcp_transport.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_merkle_transparency.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mind_active.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mind_deliberator.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mind_diversity_sybil_mediator.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mind_evolve.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mind_goals_policy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mind_records.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mind_roles.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mind_world_model.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_misc_edge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_mtls_profile.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_namespace_lifecycle.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_namespace_policy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_namespace_policy_acl.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_observability_asgi.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_observability_otel.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_open_factory.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_oracle_backprop.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_otel_export.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_pin_policy.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_placement_consistent_hash.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_placement_hint.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_plan_dag.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_plan_repair.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_portable_inclusion_proof.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_pq_default.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_pq_dual_vendor.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_pq_signing.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_priv_ns_conformance_coverage.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_property_based.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_protocol_version.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_public_surface_v05.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_pursue_workflow.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_rate_caveat.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_recorder_bounded.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_recorder_tail.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_reference_verifier_v2.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_rekor_client.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_rekor_downgrade.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_relata_memory_store.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_relata_tools.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_remaining_gaps.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_replay.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_reputation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_reputation_memory.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_reputation_staleness.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_review_fixes.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_revocation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_revocation_lifecycle.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_room_epoch.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_schema_hash_pinned.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_secret_redaction.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_self_heal_cycle1.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_self_heal_cycle2.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_self_heal_cycle3.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_self_heal_cycle3_cascade_isolate.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_self_heal_cycle3_governance.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_self_heal_cycle4.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_self_heal_cycle4_deliberator_broadcast.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_self_heal_cycle5.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_signer_protocol.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_sth_cross_gossip.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_swarm_iq.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_swarm_iq_at_scale.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_swarm_iq_recommend.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_swarm_memory.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_swarm_memory_federation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_swarm_trace.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_swarm_vector_overflow.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_sync_agent.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_tal.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_task_handle.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_task_handle_network.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_tcp_duplicate_kid_attack.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_tcp_edge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_tcp_final.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_tcp_read_loop_cleanup.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_tcp_transport.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_theory_of_mind.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_transport.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_two_impl_interop.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_uncertainty.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_uncertainty_edge.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_wire.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_wire_edge_cases.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_wire_kid_stability.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_wire_p3.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_wire_v2.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_wire_version.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_witness_preimage_length_prefix.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_workflow_compensation.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_workflow_engine.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/test_workflow_replay.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/__init__.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/conftest.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_ai_01_fed_benchmark.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_ai_alignment_redteam.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_cy_05_ir_swarm.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_cy_11_ransomware_intel.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_ed_credentials.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_en_grid_coordinate.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_fi_04_bsa_314b.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_fi_22_ma_dataroom.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_gv_01_intel_sharing.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_gv_21_red_team.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_hc_06_rare_disease.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_hc_21_fed_learning.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_lg_ediscovery.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/tests/usecases/test_mf_supply_chain.py +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/transport-rust/Cargo.toml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/transport-rust/README.md +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/transport-rust/pyproject.toml +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/transport-rust/src/lib.rs +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/index.html +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/package-lock.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/package.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/App.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/api/client.ts +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/ActivityCanvas.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/AgentContribution.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/BrierHeatmap.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/CIQTrajectory.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/CitationGraph.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/DisputeTimeline.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/DissentList.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/Logo.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/NowAsking.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/PersonaRadar.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/PopulationGenerator.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/Term.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/forms/SchemaForm.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/AARTimeline.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/BacktestScorecard.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/ConformanceReport.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/CrisisTabletop.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/DecisionBracket.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/EvaluationReport.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/GovernanceReceipt.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/MethodNote.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/RedTeamReport.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/components/result/ScenarioTree.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/docs/index.ts +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/docs/render.ts +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/main.ts +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/router.ts +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/stores/sims.ts +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/styles.css +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/types/trace.ts +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/Agents.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/Docs.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/Evidence.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/Home.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/HowItWorks.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/Knowledge.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/Namespaces.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/Report.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/Security.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/SimCompare.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/SimDetail.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/SimList.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/SimLive.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/SimNew.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/Tools.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/src/views/UseCases.vue +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/tsconfig.json +0 -0
- {hypermind-0.23.0 → hypermind-0.24.0}/webui/vite.config.ts +0 -0
|
@@ -14,7 +14,44 @@ changes only on major-version bumps.
|
|
|
14
14
|
|
|
15
15
|
## [Unreleased]
|
|
16
16
|
|
|
17
|
-
_Current trunk
|
|
17
|
+
_Current trunk._
|
|
18
|
+
|
|
19
|
+
## [0.23.0] — 2026-07-08
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
- **Distributed, Locust-style execution** — `hypermind.orgs.distributed`. A master coordinator shards a swarm across workers (other machines or local processes) over a TCP control plane (length-prefixed CBOR frames); each worker runs its shard as `OrgSim(lightweight=True)` against the **shared Relata namespace** and returns bounded aggregates, merged into one `OrgReport` (#177).
|
|
23
|
+
- `Coordinator` / `Worker`, `run_distributed(...)` (single-host convenience), and a `master` / `worker` CLI (`python -m hypermind.orgs.distributed`).
|
|
24
|
+
- Capacity-weighted shard planning; a worker that drops before returning is recorded as a failed shard — the run completes and notes it, never hangs.
|
|
25
|
+
- `OrgSim.export_aggregates()` for the merge; `OrgModel` wire (de)serialisation.
|
|
26
|
+
|
|
27
|
+
## [0.22.0] — 2026-07-08
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
- **Batched Relata writes** — `RelataBackend(write_batch_size=N)` buffers claim rows and flushes via one bulk `batch_upsert` instead of a per-claim round-trip; `OrgSim` defaults to 64. ~batch× fewer round-trips at scale (#175).
|
|
31
|
+
- **Bounded / streaming report** — `OrgSim(lightweight=True)` caps memory to O(members + windows), not O(records): per-member streaming aggregates + a rolling claim window, exact scorecard totals. `metrics.scorecard_from_aggregates(...)` (#176).
|
|
32
|
+
- Parallel keypair generation at `testbed()` spin-up (thread pool; the crypto releases the GIL) — part of #177.
|
|
33
|
+
|
|
34
|
+
## [0.21.0] — 2026-07-08
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
- **Native response-quality rubrics** — `hypermind.orgs.quality`: `sim.assess(question)` → `QualityReport`. Four rubric groups, all on by default, switchable via `disable`: native/deterministic (provenance coverage, dispute exposure, reputation support, consensus, abstention — verifiable from the signed ledger), judge-based faithfulness (grounding, hallucination rate, answer relevance, context precision), calibration (Brier, self-consistency), and context recall. Missing deps degrade to informational notes. `llm_judge(...)` factory.
|
|
38
|
+
|
|
39
|
+
## [0.20.0] — 2026-07-08
|
|
40
|
+
|
|
41
|
+
### Added
|
|
42
|
+
- **Hybrid retrieval** — `reciprocal_rank_fusion(...)` and `hybrid_retriever(*retrievers, reranker=None)` fuse dense + entity-graph + lexical signals (RRF) with an optional cross-encoder rerank, over our own Relata data. Plugs into the existing `OrgSim(retriever=...)` seam.
|
|
43
|
+
|
|
44
|
+
## [0.12.0] – [0.19.0] — 2026-06 … 2026-07
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
- **`hypermind.orgs` — the living-simulation engine.** Turn a declarative `OrgModel` / `Unit` / `Seat` into a running multi-agent simulation (research → publish → cite → dispute → resolve → learn → evolve) persisted to Relata, driven by pluggable `Interaction` strategies (`cooperative` / `adversarial` / `crowd`).
|
|
48
|
+
- **Template library**: `university`, `hospital`, `city_at_war`, `foreign_policy_cabinet`, `un_security_council`, `internet_crowd`, `research_lab`, … via `list_templates()` / `get_template()` — the core never imports them.
|
|
49
|
+
- **Per-agent models** (per-seat provider/model or a router) and **group-scoped native tools** (declarative or random grants; ungranted tools are absent, not refused).
|
|
50
|
+
- **Study → ask**: `sim.study(topic)` then `sim.ask(question)` — a transparent, queryable swarm that answers from what it learned, weighted by earned standing.
|
|
51
|
+
- **Proper RAG** for `ask`: lexical → semantic embeddings (`embedder=`, `openai_embedder`) → claim↔entity graph (`use_graph_retrieval`, `MentionGraph`) → real NER hooks (`llm_ner_extractor`, `chat_ner_extractor`, `pioneer_ner_extractor`) → Relata-backed retrieval (`relata_retriever`).
|
|
52
|
+
- **Scorecard & analysis**: reputation ranking, citation DAG, dispute ledger, Brier calibration (#151), convergence metrics (#152), memory-RAG (#153), deliberator mode (#154), tool-trace capture (#155), adversarial dynamics (#156), pluggable ground truth (#157), experiment/variant harness (#158), interventions (#159), visualization snapshots (#160), verifiable receipts (#161).
|
|
53
|
+
- **Scalability hardening** across the engine: bounded peer window, O(1) member indices, top-k cross-pollination, concurrent think phase (`asyncio.gather` + semaphore) and concurrent blocking I/O (`asyncio.to_thread`).
|
|
54
|
+
- `examples/org_university.py` and an expanded examples index.
|
|
18
55
|
|
|
19
56
|
## [0.11.0] — 2026-05-10
|
|
20
57
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hypermind
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.24.0
|
|
4
4
|
Summary: Federated agent intelligence — reference SDK for the HyperMind SCITT contested-claims profile
|
|
5
5
|
Project-URL: Homepage, https://github.com/ZySec-AI/hypermind
|
|
6
6
|
Project-URL: Documentation, https://github.com/ZySec-AI/hypermind/tree/main/docs
|
|
@@ -102,7 +102,7 @@ Agents share what they learn. Dispute what they doubt. Build trust over time.
|
|
|
102
102
|
[](https://pypi.org/project/hypermind/)
|
|
103
103
|
[](https://pypi.org/project/hypermind/)
|
|
104
104
|
[](LICENSE)
|
|
105
|
-
[](#testing--quality)
|
|
106
106
|
[](#testing--quality)
|
|
107
107
|
[](#project-status)
|
|
108
108
|
|
|
@@ -147,7 +147,7 @@ Open **http://127.0.0.1:8765** and you'll see:
|
|
|
147
147
|
```bash
|
|
148
148
|
make run-fast # skip the webui rebuild (when JS hasn't changed)
|
|
149
149
|
make webui-dev # Vite dev server with hot-reload on :5173
|
|
150
|
-
make test #
|
|
150
|
+
make test # 2133 tests pass, ~80s
|
|
151
151
|
make demo # examples/01_hello_world from the CLI
|
|
152
152
|
make demos # all numbered tutorials + scenarios sequentially
|
|
153
153
|
make help # show all targets
|
|
@@ -232,6 +232,10 @@ report.print() # reputation ranking · citation graph · dispute ledger
|
|
|
232
232
|
- **Per-agent models.** Any seat can pin its own provider/model (`Seat("Professor", llm="anthropic", model="claude-opus-4-8")`), or hand `OrgSim` a router for random / cost-aware assignment.
|
|
233
233
|
- **Native tools, group-scoped.** Tools (web search, retrieval, KB query, Relata research) are granted per unit/seat and enforced — an ungranted tool is *absent* from that agent's toolset. Grants can be declarative or randomised; register your own with `hypermind.orgs.register_tool(...)`.
|
|
234
234
|
- **Relata end-to-end.** Organisation → tenant; member → private memory session (agent kid); claims / disputes / reputation → tenant-scoped ledger rows; chain of custody → the Merkle log. Restart replays the whole org.
|
|
235
|
+
- **Study → ask (a queryable swarm).** Let the swarm learn a topic, then question it: `await sim.study(topic)` then `await sim.ask("...")` — every member recalls what it learned, reasons, and the answers are aggregated weighted by earned standing. `sim.ask` studies first automatically if you skip the explicit step.
|
|
236
|
+
- **Proper RAG.** Retrieval for `ask` is pluggable: lexical (default), semantic embeddings (`embedder=`), the claim↔entity graph (`use_graph_retrieval=True`), or `hybrid_retriever(...)` which fuses dense + graph + lexical via Reciprocal Rank Fusion with an optional cross-encoder rerank. Relata *is* the vector store + graph (`relata_retriever(..., "search_knowledge" / "find_connections")`).
|
|
237
|
+
- **Answer quality, natively.** `await sim.assess(question)` returns a `QualityReport` scoring grounding, hallucination rate, calibration (Brier), self-consistency, and hm-native rubrics that are *verifiable from the signed ledger* — provenance coverage, dispute exposure, reputation-weighted support. All rubrics on by default; missing deps (judge / ground-truth) degrade to informational notes.
|
|
238
|
+
- **Scales like Locust.** `OrgSim(lightweight=True)` caps RAM to O(members), not O(records); Relata writes are batched. For horizontal scale, `hypermind.orgs.distributed` runs a **master/worker** control plane — shard a swarm across processes or machines against the shared Relata namespace, merged into one report (`python -m hypermind.orgs.distributed master/worker`, or `run_distributed(...)`).
|
|
235
239
|
|
|
236
240
|
Worked example: [`examples/org_university.py`](examples/org_university.py). Discover all presets via `hypermind.orgs.templates.list_templates()`.
|
|
237
241
|
|
|
@@ -14,7 +14,7 @@ Agents share what they learn. Dispute what they doubt. Build trust over time.
|
|
|
14
14
|
[](https://pypi.org/project/hypermind/)
|
|
15
15
|
[](https://pypi.org/project/hypermind/)
|
|
16
16
|
[](LICENSE)
|
|
17
|
-
[](#testing--quality)
|
|
18
18
|
[](#testing--quality)
|
|
19
19
|
[](#project-status)
|
|
20
20
|
|
|
@@ -59,7 +59,7 @@ Open **http://127.0.0.1:8765** and you'll see:
|
|
|
59
59
|
```bash
|
|
60
60
|
make run-fast # skip the webui rebuild (when JS hasn't changed)
|
|
61
61
|
make webui-dev # Vite dev server with hot-reload on :5173
|
|
62
|
-
make test #
|
|
62
|
+
make test # 2133 tests pass, ~80s
|
|
63
63
|
make demo # examples/01_hello_world from the CLI
|
|
64
64
|
make demos # all numbered tutorials + scenarios sequentially
|
|
65
65
|
make help # show all targets
|
|
@@ -144,6 +144,10 @@ report.print() # reputation ranking · citation graph · dispute ledger
|
|
|
144
144
|
- **Per-agent models.** Any seat can pin its own provider/model (`Seat("Professor", llm="anthropic", model="claude-opus-4-8")`), or hand `OrgSim` a router for random / cost-aware assignment.
|
|
145
145
|
- **Native tools, group-scoped.** Tools (web search, retrieval, KB query, Relata research) are granted per unit/seat and enforced — an ungranted tool is *absent* from that agent's toolset. Grants can be declarative or randomised; register your own with `hypermind.orgs.register_tool(...)`.
|
|
146
146
|
- **Relata end-to-end.** Organisation → tenant; member → private memory session (agent kid); claims / disputes / reputation → tenant-scoped ledger rows; chain of custody → the Merkle log. Restart replays the whole org.
|
|
147
|
+
- **Study → ask (a queryable swarm).** Let the swarm learn a topic, then question it: `await sim.study(topic)` then `await sim.ask("...")` — every member recalls what it learned, reasons, and the answers are aggregated weighted by earned standing. `sim.ask` studies first automatically if you skip the explicit step.
|
|
148
|
+
- **Proper RAG.** Retrieval for `ask` is pluggable: lexical (default), semantic embeddings (`embedder=`), the claim↔entity graph (`use_graph_retrieval=True`), or `hybrid_retriever(...)` which fuses dense + graph + lexical via Reciprocal Rank Fusion with an optional cross-encoder rerank. Relata *is* the vector store + graph (`relata_retriever(..., "search_knowledge" / "find_connections")`).
|
|
149
|
+
- **Answer quality, natively.** `await sim.assess(question)` returns a `QualityReport` scoring grounding, hallucination rate, calibration (Brier), self-consistency, and hm-native rubrics that are *verifiable from the signed ledger* — provenance coverage, dispute exposure, reputation-weighted support. All rubrics on by default; missing deps (judge / ground-truth) degrade to informational notes.
|
|
150
|
+
- **Scales like Locust.** `OrgSim(lightweight=True)` caps RAM to O(members), not O(records); Relata writes are batched. For horizontal scale, `hypermind.orgs.distributed` runs a **master/worker** control plane — shard a swarm across processes or machines against the shared Relata namespace, merged into one report (`python -m hypermind.orgs.distributed master/worker`, or `run_distributed(...)`).
|
|
147
151
|
|
|
148
152
|
Worked example: [`examples/org_university.py`](examples/org_university.py). Discover all presets via `hypermind.orgs.templates.list_templates()`.
|
|
149
153
|
|
|
@@ -87,6 +87,7 @@ Pick one that matches your domain.
|
|
|
87
87
|
| File | Domain | What it shows |
|
|
88
88
|
|---|---|---|
|
|
89
89
|
| [`org_university.py`](org_university.py) | Any network | Spin up a templated org (university / city / UNO / crowd), run research → cite → dispute → resolve → evolve, print a reputation + citation report. Per-agent models + group-scoped tools, persisted to Relata. |
|
|
90
|
+
| [`org_distributed.py`](org_distributed.py) | Scale-out | Locust-style distributed run: a master coordinator shards the swarm across workers (processes or machines) against the shared Relata namespace, merged into one report (`hypermind.orgs.distributed`). Single-host convenience + multi-machine CLI. |
|
|
90
91
|
|
|
91
92
|
### Pilot-shaped demonstrations
|
|
92
93
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""THE STORY — one swarm, many workers: scale a simulation like Locust.
|
|
2
|
+
|
|
3
|
+
The single-process engine (``examples/org_university.py``) is great to ~1000s of
|
|
4
|
+
agents. Beyond that you scale *out*: ``hypermind.orgs.distributed`` runs a
|
|
5
|
+
**master coordinator** that shards the swarm across **workers** — processes on
|
|
6
|
+
this box or on other machines — each running its slice as
|
|
7
|
+
``OrgSim(lightweight=True)`` against the **shared Relata namespace** (the source
|
|
8
|
+
of truth). The coordinator merges every worker's bounded aggregates into one
|
|
9
|
+
``OrgReport``.
|
|
10
|
+
|
|
11
|
+
This script shows the single-host convenience path (``run_distributed`` starts a
|
|
12
|
+
coordinator plus in-process workers over loopback) — the *same* code path as
|
|
13
|
+
multi-machine. For true multi-machine, use the CLI instead::
|
|
14
|
+
|
|
15
|
+
# on the master host
|
|
16
|
+
python -m hypermind.orgs.distributed master --template university \
|
|
17
|
+
--topic "..." --members 10000 --rounds 8 --expected-workers 4 \
|
|
18
|
+
--host 0.0.0.0 --port 8765 --llm openai --llm-model openai/gpt-4o-mini
|
|
19
|
+
|
|
20
|
+
# on each worker host
|
|
21
|
+
python -m hypermind.orgs.distributed worker \
|
|
22
|
+
--master-host <master-ip> --port 8765 --capacity 2500
|
|
23
|
+
|
|
24
|
+
PREREQUISITES
|
|
25
|
+
* A running Relata instance: docker compose -f deploy/docker-compose.yml up -d relata
|
|
26
|
+
* export RELATA_URL=http://localhost:9090 RELATA_TOKEN=...
|
|
27
|
+
* export OPENAI_API_KEY=... (workers build their own client from env)
|
|
28
|
+
|
|
29
|
+
Run with: python -m examples.org_distributed
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
import asyncio
|
|
35
|
+
import os
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
async def main() -> None:
|
|
39
|
+
from hypermind.orgs.distributed import run_distributed
|
|
40
|
+
from hypermind.orgs.templates import university
|
|
41
|
+
|
|
42
|
+
relata_url = os.environ.get("RELATA_URL")
|
|
43
|
+
if not relata_url:
|
|
44
|
+
raise SystemExit(
|
|
45
|
+
"Set RELATA_URL (and RELATA_TOKEN) to a running Relata instance. "
|
|
46
|
+
"See deploy/docker-compose.yml."
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
model = university() # the shape; run_distributed scales it across workers
|
|
50
|
+
report = await run_distributed(
|
|
51
|
+
model,
|
|
52
|
+
topic="What limits the accuracy of ab-initio protein folding?",
|
|
53
|
+
members=48, # sharded across the workers below
|
|
54
|
+
rounds=4,
|
|
55
|
+
workers=4, # 4 in-process workers over loopback (each ~12 members)
|
|
56
|
+
config={
|
|
57
|
+
"llm": "openai",
|
|
58
|
+
"llm_model": "openai/gpt-4o-mini",
|
|
59
|
+
"base_url": os.environ.get("OPENAI_BASE_URL"), # e.g. OpenRouter
|
|
60
|
+
"relata_url": relata_url,
|
|
61
|
+
"relata_token": os.environ.get("RELATA_TOKEN"),
|
|
62
|
+
},
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
report.print()
|
|
66
|
+
sc = report.scorecard
|
|
67
|
+
print(
|
|
68
|
+
f"\nmerged across workers → {sc['claims']} claims · {sc['citations']} citations · "
|
|
69
|
+
f"{len(report.standings)} members"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
if __name__ == "__main__":
|
|
74
|
+
asyncio.run(main())
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "hypermind"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.24.0"
|
|
8
8
|
description = "Federated agent intelligence — reference SDK for the HyperMind SCITT contested-claims profile"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11,<3.14"
|
|
@@ -73,7 +73,7 @@ open = HyperMindAgent.open
|
|
|
73
73
|
#: is held until the §External & human gates clear (IETF I-D, IANA,
|
|
74
74
|
#: third-party audit, OpenSSF acceptance, ≥3 pilots) — at that point we
|
|
75
75
|
#: cut ``1.0.0`` GA. See ROADMAP.md §Status snapshot.
|
|
76
|
-
__version__ = "0.
|
|
76
|
+
__version__ = "0.24.0"
|
|
77
77
|
|
|
78
78
|
#: SLSA build-provenance level committed for every release artefact.
|
|
79
79
|
#: Cosign keyless signing + slsa-github-generator + PEP 740 attestations
|
|
@@ -29,24 +29,41 @@ Single host (convenience — coordinator + in-process workers over loopback)::
|
|
|
29
29
|
from __future__ import annotations
|
|
30
30
|
|
|
31
31
|
import asyncio
|
|
32
|
+
import logging
|
|
32
33
|
from typing import Any
|
|
33
34
|
|
|
34
35
|
from hypermind.orgs.distributed.coordinator import Coordinator
|
|
35
|
-
from hypermind.orgs.distributed.planning import
|
|
36
|
+
from hypermind.orgs.distributed.planning import (
|
|
37
|
+
merge_results,
|
|
38
|
+
plan_shards,
|
|
39
|
+
seat_count,
|
|
40
|
+
validate_shardable,
|
|
41
|
+
)
|
|
42
|
+
from hypermind.orgs.distributed.provision import provision_hm_types
|
|
36
43
|
from hypermind.orgs.distributed.worker import Worker, default_shard_runner
|
|
37
44
|
from hypermind.orgs.model import OrgModel
|
|
38
45
|
from hypermind.orgs.report import OrgReport
|
|
39
46
|
|
|
47
|
+
logger = logging.getLogger("hypermind.orgs.distributed")
|
|
48
|
+
|
|
40
49
|
__all__ = [
|
|
41
50
|
"Coordinator",
|
|
51
|
+
"DistributedError",
|
|
42
52
|
"Worker",
|
|
43
53
|
"default_shard_runner",
|
|
44
54
|
"merge_results",
|
|
45
55
|
"plan_shards",
|
|
56
|
+
"provision_hm_types",
|
|
46
57
|
"run_distributed",
|
|
58
|
+
"seat_count",
|
|
59
|
+
"validate_shardable",
|
|
47
60
|
]
|
|
48
61
|
|
|
49
62
|
|
|
63
|
+
class DistributedError(RuntimeError):
|
|
64
|
+
"""Raised when a distributed run cannot produce any result (all shards failed)."""
|
|
65
|
+
|
|
66
|
+
|
|
50
67
|
async def run_distributed(
|
|
51
68
|
model: OrgModel,
|
|
52
69
|
topic: str,
|
|
@@ -66,7 +83,13 @@ async def run_distributed(
|
|
|
66
83
|
Same code path as multi-machine — the only difference is the workers live in
|
|
67
84
|
this process instead of on remote hosts. Pass ``shard_runner`` to stub the
|
|
68
85
|
per-shard work (tests); omit it for the real ``OrgSim`` runner.
|
|
86
|
+
|
|
87
|
+
Raises ``ValueError`` up front if the shard plan isn't viable (#190) and
|
|
88
|
+
``DistributedError`` if every shard fails (#191).
|
|
69
89
|
"""
|
|
90
|
+
# Pre-flight: fail fast with a clear message if a shard would be too small.
|
|
91
|
+
validate_shardable(model, members, [capacity_each] * workers)
|
|
92
|
+
|
|
70
93
|
coord = Coordinator(
|
|
71
94
|
model,
|
|
72
95
|
topic,
|
|
@@ -100,4 +123,13 @@ async def run_distributed(
|
|
|
100
123
|
]
|
|
101
124
|
report = await coord_task
|
|
102
125
|
await asyncio.gather(*worker_tasks, return_exceptions=True)
|
|
126
|
+
|
|
127
|
+
# Surface shard failures loudly (#191).
|
|
128
|
+
failed = next((e for e in report.events if e["event"] == "shards_failed"), None)
|
|
129
|
+
succeeded = next((e["shards"] for e in report.events if e["event"] == "distributed"), 0)
|
|
130
|
+
if failed:
|
|
131
|
+
msg = f"{failed['count']} shard(s) failed: {failed['detail']}"
|
|
132
|
+
if succeeded == 0:
|
|
133
|
+
raise DistributedError(f"distributed run produced no results — {msg}")
|
|
134
|
+
logger.warning("distributed run completed with failures — %s", msg)
|
|
103
135
|
return report
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"""The master: a resilient, Locust-style coordinator over a TCP control plane (#177).
|
|
2
|
+
|
|
3
|
+
Drives the whole run: provisions the shared Relata state (#192), gathers workers,
|
|
4
|
+
plans shards, and dispatches them from a **work queue**. A shard whose worker
|
|
5
|
+
errors or disconnects is **requeued and reassigned** to another available worker
|
|
6
|
+
(bounded retries, #191/resilience) — the run only fails a shard after exhausting
|
|
7
|
+
retries, and never hangs. Results merge into one :class:`OrgReport`.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import asyncio
|
|
13
|
+
import contextlib
|
|
14
|
+
import logging
|
|
15
|
+
from collections import deque
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
from hypermind.orgs.distributed import protocol as p
|
|
19
|
+
from hypermind.orgs.distributed.planning import merge_results, validate_shardable
|
|
20
|
+
from hypermind.orgs.distributed.provision import provision_hm_types
|
|
21
|
+
from hypermind.orgs.distributed.serde import model_to_dict
|
|
22
|
+
from hypermind.orgs.model import OrgModel
|
|
23
|
+
from hypermind.orgs.report import OrgReport
|
|
24
|
+
|
|
25
|
+
logger = logging.getLogger("hypermind.orgs.distributed")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Coordinator:
|
|
29
|
+
"""Master coordinator. Provision → gather workers → dispatch (with retry) → merge."""
|
|
30
|
+
|
|
31
|
+
def __init__(
|
|
32
|
+
self,
|
|
33
|
+
model: OrgModel,
|
|
34
|
+
topic: str,
|
|
35
|
+
*,
|
|
36
|
+
members: int,
|
|
37
|
+
rounds: int,
|
|
38
|
+
expected_workers: int,
|
|
39
|
+
host: str = "127.0.0.1",
|
|
40
|
+
port: int = 0,
|
|
41
|
+
config: dict[str, Any] | None = None,
|
|
42
|
+
worker_timeout_s: float = 600.0,
|
|
43
|
+
max_retries: int = 2,
|
|
44
|
+
provision: bool = True,
|
|
45
|
+
) -> None:
|
|
46
|
+
self.model = model
|
|
47
|
+
self.topic = topic
|
|
48
|
+
self.members = members
|
|
49
|
+
self.rounds = rounds
|
|
50
|
+
self.expected_workers = expected_workers
|
|
51
|
+
self.host = host
|
|
52
|
+
self.port = port
|
|
53
|
+
self.config = dict(config or {})
|
|
54
|
+
self.worker_timeout_s = worker_timeout_s
|
|
55
|
+
self.max_retries = max(0, max_retries)
|
|
56
|
+
self.provision = provision
|
|
57
|
+
|
|
58
|
+
self._writers: dict[str, asyncio.StreamWriter] = {}
|
|
59
|
+
self._order: list[str] = []
|
|
60
|
+
self._capacity: dict[str, int] = {}
|
|
61
|
+
self._alive: set[str] = set()
|
|
62
|
+
self._idle: deque[str] = deque()
|
|
63
|
+
|
|
64
|
+
self._shard_members: dict[int, int] = {} # shard_id → member count
|
|
65
|
+
self._pending: deque[int] = deque() # shard_ids awaiting a worker
|
|
66
|
+
self._inflight: dict[str, int] = {} # worker_id → shard_id
|
|
67
|
+
self._attempts: dict[int, int] = {}
|
|
68
|
+
self._results: dict[int, dict[str, Any]] = {}
|
|
69
|
+
self._failed: dict[int, str] = {}
|
|
70
|
+
self._n_shards = 0
|
|
71
|
+
|
|
72
|
+
self._enough_workers = asyncio.Event()
|
|
73
|
+
self._complete = asyncio.Event()
|
|
74
|
+
self._planned = False
|
|
75
|
+
self._lock = asyncio.Lock()
|
|
76
|
+
|
|
77
|
+
async def run(self) -> OrgReport:
|
|
78
|
+
if self.provision and self.config.get("relata_url"):
|
|
79
|
+
# Master drives Relata state: register the ledger types up front.
|
|
80
|
+
result = await asyncio.to_thread(
|
|
81
|
+
provision_hm_types,
|
|
82
|
+
self.config["relata_url"],
|
|
83
|
+
namespace=self.model.namespace,
|
|
84
|
+
token=self.config.get("relata_token"),
|
|
85
|
+
)
|
|
86
|
+
logger.info("provisioned Hm types: %s", result)
|
|
87
|
+
|
|
88
|
+
server = await asyncio.start_server(self._on_conn, self.host, self.port)
|
|
89
|
+
self.port = server.sockets[0].getsockname()[1]
|
|
90
|
+
async with server:
|
|
91
|
+
try:
|
|
92
|
+
await asyncio.wait_for(self._enough_workers.wait(), self.worker_timeout_s)
|
|
93
|
+
await self._plan_and_dispatch()
|
|
94
|
+
await asyncio.wait_for(self._complete.wait(), self.worker_timeout_s)
|
|
95
|
+
finally:
|
|
96
|
+
await self._quit_all()
|
|
97
|
+
return self._merge()
|
|
98
|
+
|
|
99
|
+
# ---- connection lifecycle ------------------------------------------
|
|
100
|
+
async def _on_conn(self, reader: asyncio.StreamReader, writer: asyncio.StreamWriter) -> None:
|
|
101
|
+
worker_id: str | None = None
|
|
102
|
+
try:
|
|
103
|
+
hello = await p.read_frame(reader)
|
|
104
|
+
if hello.get("type") != p.HELLO:
|
|
105
|
+
writer.close()
|
|
106
|
+
return
|
|
107
|
+
worker_id = str(hello["worker_id"])
|
|
108
|
+
async with self._lock:
|
|
109
|
+
self._writers[worker_id] = writer
|
|
110
|
+
self._capacity[worker_id] = max(0, int(hello.get("capacity", 1)))
|
|
111
|
+
self._alive.add(worker_id)
|
|
112
|
+
self._order.append(worker_id)
|
|
113
|
+
self._idle.append(worker_id)
|
|
114
|
+
if len(self._order) >= self.expected_workers:
|
|
115
|
+
self._enough_workers.set()
|
|
116
|
+
if self._planned:
|
|
117
|
+
await self._dispatch() # a late worker can pick up pending/retry work
|
|
118
|
+
await self._read_loop(worker_id, reader)
|
|
119
|
+
except (asyncio.IncompleteReadError, ConnectionError, RuntimeError):
|
|
120
|
+
pass
|
|
121
|
+
finally:
|
|
122
|
+
if worker_id is not None:
|
|
123
|
+
await self._on_worker_gone(worker_id)
|
|
124
|
+
|
|
125
|
+
async def _read_loop(self, worker_id: str, reader: asyncio.StreamReader) -> None:
|
|
126
|
+
while True:
|
|
127
|
+
msg = await p.read_frame(reader)
|
|
128
|
+
mtype = msg.get("type")
|
|
129
|
+
if mtype == p.RESULT:
|
|
130
|
+
await self._on_result(worker_id, int(msg["shard_id"]), msg["aggregates"])
|
|
131
|
+
elif mtype == p.ERROR:
|
|
132
|
+
await self._on_shard_error(worker_id, int(msg["shard_id"]), str(msg.get("message", "worker error")))
|
|
133
|
+
# HEARTBEAT / unknown: keep listening.
|
|
134
|
+
|
|
135
|
+
# ---- scheduling ----------------------------------------------------
|
|
136
|
+
async def _plan_and_dispatch(self) -> None:
|
|
137
|
+
async with self._lock:
|
|
138
|
+
if self._planned:
|
|
139
|
+
return
|
|
140
|
+
caps = [self._capacity[w] for w in self._order]
|
|
141
|
+
counts = validate_shardable(self.model, self.members, caps) # raises on bad plan (#190)
|
|
142
|
+
for n in counts:
|
|
143
|
+
if n > 0:
|
|
144
|
+
sid = self._n_shards
|
|
145
|
+
self._shard_members[sid] = n
|
|
146
|
+
self._pending.append(sid)
|
|
147
|
+
self._n_shards += 1
|
|
148
|
+
self._planned = True
|
|
149
|
+
if self._n_shards == 0:
|
|
150
|
+
self._complete.set()
|
|
151
|
+
await self._dispatch()
|
|
152
|
+
|
|
153
|
+
async def _dispatch(self) -> None:
|
|
154
|
+
async with self._lock:
|
|
155
|
+
model_d = model_to_dict(self.model)
|
|
156
|
+
while self._idle and self._pending:
|
|
157
|
+
worker_id = self._idle.popleft()
|
|
158
|
+
if worker_id not in self._alive:
|
|
159
|
+
continue
|
|
160
|
+
sid = self._pending.popleft()
|
|
161
|
+
self._inflight[worker_id] = sid
|
|
162
|
+
self._attempts[sid] = self._attempts.get(sid, 0) + 1
|
|
163
|
+
await self._send(
|
|
164
|
+
worker_id,
|
|
165
|
+
{
|
|
166
|
+
"type": p.ASSIGN,
|
|
167
|
+
"shard_id": sid,
|
|
168
|
+
"model": model_d,
|
|
169
|
+
"topic": self.topic,
|
|
170
|
+
"rounds": self.rounds,
|
|
171
|
+
"members": self._shard_members[sid],
|
|
172
|
+
"namespace": self.model.namespace,
|
|
173
|
+
"config": self.config,
|
|
174
|
+
},
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
async def _on_result(self, worker_id: str, sid: int, agg: dict[str, Any]) -> None:
|
|
178
|
+
async with self._lock:
|
|
179
|
+
self._results[sid] = agg
|
|
180
|
+
self._inflight.pop(worker_id, None)
|
|
181
|
+
if worker_id in self._alive:
|
|
182
|
+
self._idle.append(worker_id)
|
|
183
|
+
self._maybe_complete()
|
|
184
|
+
await self._dispatch()
|
|
185
|
+
|
|
186
|
+
async def _on_shard_error(self, worker_id: str, sid: int, reason: str) -> None:
|
|
187
|
+
async with self._lock:
|
|
188
|
+
self._inflight.pop(worker_id, None)
|
|
189
|
+
self._requeue_or_fail(sid, reason)
|
|
190
|
+
if worker_id in self._alive:
|
|
191
|
+
self._idle.append(worker_id)
|
|
192
|
+
self._maybe_complete()
|
|
193
|
+
await self._dispatch()
|
|
194
|
+
|
|
195
|
+
async def _on_worker_gone(self, worker_id: str) -> None:
|
|
196
|
+
async with self._lock:
|
|
197
|
+
self._alive.discard(worker_id)
|
|
198
|
+
with contextlib.suppress(ValueError):
|
|
199
|
+
# deque has no remove-by-value guarantee across versions; rebuild
|
|
200
|
+
self._idle = deque(w for w in self._idle if w != worker_id)
|
|
201
|
+
sid = self._inflight.pop(worker_id, None)
|
|
202
|
+
if sid is not None and sid not in self._results:
|
|
203
|
+
self._requeue_or_fail(sid, "worker disconnected before returning a result")
|
|
204
|
+
self._maybe_complete()
|
|
205
|
+
await self._dispatch()
|
|
206
|
+
|
|
207
|
+
def _requeue_or_fail(self, sid: int, reason: str) -> None:
|
|
208
|
+
if sid in self._results:
|
|
209
|
+
return
|
|
210
|
+
if self._attempts.get(sid, 0) <= self.max_retries:
|
|
211
|
+
logger.warning("shard %d failed (%s) — requeuing (attempt %d)", sid, reason, self._attempts.get(sid, 0))
|
|
212
|
+
self._pending.append(sid)
|
|
213
|
+
else:
|
|
214
|
+
logger.error("shard %d permanently failed after %d attempts: %s", sid, self._attempts.get(sid, 0), reason)
|
|
215
|
+
self._failed[sid] = reason
|
|
216
|
+
|
|
217
|
+
def _maybe_complete(self) -> None:
|
|
218
|
+
if not self._planned:
|
|
219
|
+
return
|
|
220
|
+
# Done when every shard is resolved (result or permanent fail) and nothing
|
|
221
|
+
# is left to try or in flight.
|
|
222
|
+
settled = len(self._results) + len(self._failed)
|
|
223
|
+
if settled >= self._n_shards and not self._pending and not self._inflight:
|
|
224
|
+
self._complete.set()
|
|
225
|
+
|
|
226
|
+
async def _send(self, worker_id: str, msg: dict[str, Any]) -> None:
|
|
227
|
+
writer = self._writers.get(worker_id)
|
|
228
|
+
if writer is not None:
|
|
229
|
+
with contextlib.suppress(Exception):
|
|
230
|
+
await p.write_frame(writer, msg)
|
|
231
|
+
|
|
232
|
+
async def _quit_all(self) -> None:
|
|
233
|
+
for writer in list(self._writers.values()):
|
|
234
|
+
with contextlib.suppress(Exception):
|
|
235
|
+
await p.write_frame(writer, {"type": p.QUIT})
|
|
236
|
+
writer.close()
|
|
237
|
+
|
|
238
|
+
def _merge(self) -> OrgReport:
|
|
239
|
+
results = [{"shard_id": sid, **agg} for sid, agg in sorted(self._results.items())]
|
|
240
|
+
report = merge_results(
|
|
241
|
+
org=self.model.name,
|
|
242
|
+
topic=self.topic,
|
|
243
|
+
rounds=self.rounds,
|
|
244
|
+
interaction=self.model.dynamics.interaction,
|
|
245
|
+
results=results,
|
|
246
|
+
)
|
|
247
|
+
if self._failed:
|
|
248
|
+
report.events.append(
|
|
249
|
+
{"event": "shards_failed", "count": len(self._failed), "detail": dict(self._failed)}
|
|
250
|
+
)
|
|
251
|
+
return report
|
|
@@ -12,9 +12,40 @@ from __future__ import annotations
|
|
|
12
12
|
from typing import Any
|
|
13
13
|
|
|
14
14
|
from hypermind.orgs.metrics import scorecard_from_aggregates
|
|
15
|
+
from hypermind.orgs.model import OrgModel
|
|
15
16
|
from hypermind.orgs.report import MemberStanding, OrgReport
|
|
16
17
|
|
|
17
18
|
|
|
19
|
+
def seat_count(model: OrgModel) -> int:
|
|
20
|
+
"""Distinct seats in the model — the minimum members a shard can run."""
|
|
21
|
+
return sum(len(u.seats) for u in model.units)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def validate_shardable(model: OrgModel, members: int, capacities: list[int]) -> list[int]:
|
|
25
|
+
"""Plan the shards and ensure each is viable (#190).
|
|
26
|
+
|
|
27
|
+
Every worker runs the *whole* model scaled to its shard, so a shard needs at
|
|
28
|
+
least ``seat_count(model)`` members. Raises a clear ``ValueError`` up front
|
|
29
|
+
instead of letting each worker fail silently. Returns the shard plan.
|
|
30
|
+
"""
|
|
31
|
+
seats = seat_count(model)
|
|
32
|
+
if members < seats:
|
|
33
|
+
raise ValueError(
|
|
34
|
+
f"members={members} is fewer than the model's {seats} seats — "
|
|
35
|
+
f"even a single shard can't be built. Use members ≥ {seats}."
|
|
36
|
+
)
|
|
37
|
+
counts = plan_shards(members, capacities)
|
|
38
|
+
active = sum(1 for c in counts if c > 0)
|
|
39
|
+
smallest = min((c for c in counts if c > 0), default=0)
|
|
40
|
+
if smallest and smallest < seats:
|
|
41
|
+
raise ValueError(
|
|
42
|
+
f"{members} members across {active} workers ≈ {smallest}/shard, but the model "
|
|
43
|
+
f"has {seats} seats; each shard needs ≥{seats} members. "
|
|
44
|
+
f"Use members ≥ workers×{seats} (≥{active * seats}) or fewer workers."
|
|
45
|
+
)
|
|
46
|
+
return counts
|
|
47
|
+
|
|
48
|
+
|
|
18
49
|
def plan_shards(members: int, capacities: list[int]) -> list[int]:
|
|
19
50
|
"""Split ``members`` across workers proportional to ``capacities``.
|
|
20
51
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""Master-driven Relata provisioning (#192).
|
|
2
|
+
|
|
3
|
+
The governed Relata write path validates object types against the ontology, so
|
|
4
|
+
the four HyperMind ledger types must be registered before any worker writes. The
|
|
5
|
+
master calls :func:`provision_hm_types` on startup ("drive the state"), so a run
|
|
6
|
+
against a fresh Relata just works. Registration is idempotent and persists on the
|
|
7
|
+
server (replayed on restart).
|
|
8
|
+
|
|
9
|
+
Note: ontology *registration* is runtime (this call). Granting the unauthenticated
|
|
10
|
+
``api-user`` read+write on those types is a **boot-time** server setting in strict
|
|
11
|
+
deployments: ``RELATA_ACL_GRANT=HmClaim:read+write,HmDispute:read+write,``
|
|
12
|
+
``HmReputation:read+write,HmTranscript:read+write`` (or ``RELATA_ORG_MODE=open``
|
|
13
|
+
for dev). We can't set server env from here, so we surface a clear hint if a
|
|
14
|
+
write is later refused.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import json
|
|
20
|
+
import urllib.error
|
|
21
|
+
import urllib.request
|
|
22
|
+
|
|
23
|
+
HM_TYPES = ("HmClaim", "HmDispute", "HmReputation", "HmTranscript")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def provision_hm_types(
|
|
27
|
+
relata_url: str,
|
|
28
|
+
*,
|
|
29
|
+
namespace: str,
|
|
30
|
+
token: str | None = None,
|
|
31
|
+
types: tuple[str, ...] = HM_TYPES,
|
|
32
|
+
timeout_s: float = 10.0,
|
|
33
|
+
) -> dict[str, str]:
|
|
34
|
+
"""Register the Hm* ledger types on the Relata server (idempotent).
|
|
35
|
+
|
|
36
|
+
Returns ``{type_name: "registered" | "exists" | "error: ..."}``. Never
|
|
37
|
+
raises for an already-registered type; a transport error on one type is
|
|
38
|
+
recorded in the result rather than aborting the others.
|
|
39
|
+
"""
|
|
40
|
+
out: dict[str, str] = {}
|
|
41
|
+
base = relata_url.rstrip("/")
|
|
42
|
+
for t in types:
|
|
43
|
+
body = json.dumps({"name": t}).encode()
|
|
44
|
+
headers = {"Content-Type": "application/json", "X-Organization-Id": namespace}
|
|
45
|
+
if token:
|
|
46
|
+
headers["Authorization"] = f"Bearer {token}"
|
|
47
|
+
req = urllib.request.Request(f"{base}/types", data=body, headers=headers, method="POST")
|
|
48
|
+
try:
|
|
49
|
+
with urllib.request.urlopen(req, timeout=timeout_s) as resp:
|
|
50
|
+
out[t] = "registered" if resp.status in (200, 201) else f"http {resp.status}"
|
|
51
|
+
except urllib.error.HTTPError as e:
|
|
52
|
+
# 409/400 "already registered" is success for our purposes.
|
|
53
|
+
detail = e.read().decode(errors="replace")[:120]
|
|
54
|
+
out[t] = "exists" if ("registered" in detail or e.code in (409, 422)) else f"error: http {e.code} {detail}"
|
|
55
|
+
except Exception as e:
|
|
56
|
+
out[t] = f"error: {type(e).__name__}: {e}"
|
|
57
|
+
return out
|