hypermind 0.22.0__tar.gz → 0.23.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.22.0 → hypermind-0.23.0}/PKG-INFO +1 -1
- {hypermind-0.22.0 → hypermind-0.23.0}/pyproject.toml +1 -1
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/__init__.py +1 -1
- hypermind-0.23.0/src/hypermind/orgs/distributed/__init__.py +103 -0
- hypermind-0.23.0/src/hypermind/orgs/distributed/__main__.py +110 -0
- hypermind-0.23.0/src/hypermind/orgs/distributed/coordinator.py +175 -0
- hypermind-0.23.0/src/hypermind/orgs/distributed/planning.py +139 -0
- hypermind-0.23.0/src/hypermind/orgs/distributed/protocol.py +47 -0
- hypermind-0.23.0/src/hypermind/orgs/distributed/serde.py +71 -0
- hypermind-0.23.0/src/hypermind/orgs/distributed/worker.py +119 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/sim.py +41 -0
- hypermind-0.23.0/tests/orgs/test_distributed.py +423 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.editorconfig +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.gitattributes +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/FUNDING.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/renovate.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/check-license.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/code-review-pr.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/hotfix-security.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/issue-auto-fix.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/issue-triage.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/pr-standards.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/quality.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/release.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/security.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows/stale.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/branch-flow-check.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/chaos.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/check-license.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/ci.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/code-freeze.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/code-review-pr.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/code-review.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/codeql.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/dco.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/docs-to-wiki.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/docs.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/formal.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/fuzz.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/hotfix-security.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/issue-auto-fix.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/issue-triage.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/merge-comment.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/pip-audit.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/pr-standards.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/quality.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/release.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/sbom.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/scorecard.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/security.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/sprint-retro.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.github/workflows-disabled/stale.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.gitignore +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.pre-commit-config.yaml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/.tool-versions +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/CHANGELOG.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/CHARTER.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/CODEOWNERS +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/CODE_OF_CONDUCT.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/CONTRIBUTING.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/GOVERNANCE.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/LICENSE +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/MAINTAINERS.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/Makefile +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/RELATA_COMPATIBILITY.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/RELATA_INTEGRATION_PLAN.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/RELATA_STORAGE.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/ROADMAP.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/SECURITY.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/baselines/v0.6.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/bench_consult.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/bench_dispute.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/bench_publish.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/coordination/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/coordination/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/coordination/baselines/v0.10.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/coordination/bench_rfp_latency.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/coordination/bench_task_throughput.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/coordination/bench_workflow_replay.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/coordination/run_all.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/question_sets/geopolitics_q20.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/question_sets/msft_outlook_q10.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/bench/run_bench.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/p1_partition_recovery.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/p2_witness_compromise.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/p3_key_rotation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/p4_dispute_backlog.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/p5_wire_cutover.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/p6_quorum_loss.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/p7_clock_skew.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/p8_recorder_outage.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/chaos/run_chaos.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/Dockerfile +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/docker-compose.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/grafana/dashboards/hypermind-coordination.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/grafana/dashboards/hypermind-v06.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/grafana/dashboards/hypermind.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/grafana/provisioning/dashboards/hypermind.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/grafana/provisioning/datasources/prometheus.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/k8s/hypermind-deployment.yaml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/prometheus/prometheus.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/deploy/systemd/hypermind.service +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/SIMLAB.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/SIMLAB_AUDIT_PLAN.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/_meta/glossary.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/_meta/provenance.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/_meta/public-surface.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/_meta/standards-map.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/agent.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/agent_card.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/capability.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/crypto.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/dispute.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/knowledge.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/observability.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/simlab-openapi.yaml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/sync.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/tasks.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/transport.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/api/wire.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/architecture-v0.6.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/assets/hero-swarm.svg +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/audit/findings.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/audit/scope.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/concepts.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/conformance/authority.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/conformance/bake-off-report.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/conformance/mark-policy.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/decide/01-disqualifiers.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/decide/02-alternatives.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/decide/03-incentive-aligned-cases.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/decide/04-use-cases.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/design/01-architecture.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/design/02-traces.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/design/03-failure-modes.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/design/04-poisoning-defenses.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/design/05-deployment-topology.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/feature-matrix.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/getting-started.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/governance/cna.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/governance/foundation-evaluation.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/hypermind-protocol-spec.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/index.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/legal/export-classification.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/lts.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/migrate/v0.x-to-v1.0.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/migration/v0.7.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/00-prerequisites.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/after.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/exercises/e01-run-the-loop.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/exercises/e02-draw-the-architecture.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/exercises/e03-trace-a-claim.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/exercises/e04-read-a-spec-section.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/exercises/e05-break-it.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/exercises/e06-add-a-test.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/exercises/e07-first-pr.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/glossary.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/00-what-is-hypermind.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/01-agents-and-swarms.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/02-architecture-tour.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/03-spec-literacy.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/04-cryptography.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/05-cbor-cose.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/06-transparency-logs.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/07-distributed-systems.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/08-async-python.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/topics/09-security-mindset.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/week-1-foundations.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/onboarding/week-2-deep-dive.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/01-deployment.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/02-runbook.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/03-resource-budget.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/backup-restore.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/data-residency.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/key-rotation.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/dispute-backlog-drain.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/key-rotation.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/kms-rotation.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/multi-host-deploy.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/partition-heal.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/quorum-loss.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/rfp-dispute-triage.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/wire-cutover.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/witness-compromise.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/runbooks/workflow-replay.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/operate/slo.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/paper/00-patent.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/paper/hypermind-paper-draft.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/paper/hypermind-paper.docx +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/paper/hypermind-paper.tex +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/release-notes/v1.0-checklist.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/release-notes/v1.0.0.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/security/threat-model.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/simlab/modes.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/simulations.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/00-overview.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/01-transport.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/02-cryptography.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/03-messages.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/04-knowledge-model.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/05-routing.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/06-conformance.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/07-trust-access-layer.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/08-onboarding-contract.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/09-agent-sdk.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/10-disputes.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/11-witness-transparency.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/12-governance.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/13-observability.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/14-threat-model.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/15-living-transmission.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/16-reference-comparisons.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/17-upgrade-v1.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/18-revocation.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/19-autonomy-contract.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/20-swarm-intelligence.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/21-belief-state.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/21-private-namespaces.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/22-transport-mtls.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/23-envelope-encryption.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/24-namespace-identity.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/25-capability-extensions.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/26-workflow.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/27-contract-net.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/28-distributed-trace.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/_meta/gaps-closed.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/appendix-N-calibration.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/appendix-TLA.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/appendix-z.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/errata.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/index.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/invariants.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/spec/normative-trace.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/supply-chain/sbom.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/supply-chain/slsa.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/supply-chain/verify-self.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/docs/sustainability.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/01_hello_world.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/02_two_agents_dispute.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/03_consult_panel.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/04_oracle_resolve.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/05_consult_to_synthesis.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/06_hybrid_pq.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/07_frost_threshold.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/08_ramp_and_diagnostics.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/09_audit_export_chain.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/10_autonomous_agent.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/11_swarm_deliberation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/12_swarm_iq_scorecard.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/13_role_specialisation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/14_active_learning_loop.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/16_wire_message.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/17_tool_delegation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/18_custom_responder.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/19_governance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/20_conformance_check.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/21_revocation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/22_agent_card.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/23_task_delegation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/24_mcp_tool_call.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/25_swarm_trace.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/01_durable_workflow.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/02_contract_net.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/03_belief_and_plan.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/ai_01_fed_benchmark.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/ai_alignment_redteam.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/cy_05_ir_swarm.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/cy_11_ransomware_intel.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/ed_credentials.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/en_grid_coordinate.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/fi_04_bsa_314b.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/fi_22_ma_dataroom.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/gv_01_intel_sharing.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/gv_21_red_team.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/hc_06_rare_disease.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/hc_21_fed_learning.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/lg_ediscovery.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/coordination/usecases/mf_supply_chain.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/e2e_many_agents.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/full_e2e_demo.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/lifecycle.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/org_university.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_aar.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_backtest.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_capability_attenuation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_conformance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_crisis_tabletop.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_cross_namespace_federation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_decision_tournament.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_dispute_lifecycle_async.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_evaluation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_geopolitical_crisis.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_geopolitical_traced.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_governance_committee.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_information_pipeline.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_learning_loop.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_namespace_trust.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_persona_panel.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_private_namespace.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_red_team.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_regulated_consortium.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_threat_intel.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_vouch_chain.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/scenario_what_if_tree.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/serve_api.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/examples/two_node_tcp.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/formal/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/formal/hax-rust/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/formal/hax-rust/scope.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/formal/proverif/dispute_fsm.pv +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/formal/proverif/dispute_liveness.pv +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/formal/tamarin/capability_chain.spthy +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/formal/tamarin/dispute_fsm.spthy +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/formal/tamarin/signed_statement.spthy +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/formal/tamarin/wire_security.spthy +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/fuzz/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/fuzz/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/fuzz/fuzz_agent_card.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/fuzz/fuzz_anti_entropy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/fuzz/fuzz_capability.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/fuzz/fuzz_dispute.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/fuzz/fuzz_inclusion_proof.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/fuzz/fuzz_wire.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/fuzz/seed_corpus.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/__main__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/assertions.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/fixtures.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/report.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/roles.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/runner.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/scenario.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/scenarios/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/scenarios/autonomous_evolution.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/scenarios/swarm_iq_benchmark.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/harness/scenarios/threat_intel.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/mkdocs.yml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/reference_verifier/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/reference_verifier/schemas/encrypted_statement.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/reference_verifier/schemas/namespace_accept.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/reference_verifier/schemas/namespace_create.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/reference_verifier/schemas/namespace_founding_attest.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/reference_verifier/schemas/namespace_invite.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/reference_verifier/schemas/wire-v0.1.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/reference_verifier/verifier.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/review/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/review/__main__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/review/agents.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/review/models.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/review/runner.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hmctl/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hmctl/cli.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/_deprecations.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/agent.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/agent_card.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/api/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/api/app.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/capability.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/consult.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/consult_bias.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/contract_net.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/cose_encrypt.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/dkg.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/domain.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/frost.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/hashing.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/hlc.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/hpke.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/kms.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/kms_backends/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/kms_backends/aws.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/kms_backends/azure.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/kms_backends/gcp.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/kms_backends/vault.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/namespace_root.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/pq.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/room_epoch.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/crypto/signing.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/deliberation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/did_web.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/dispute.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/errors.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/eval/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/eval/calibration.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/eval/comparison.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/eval/replay.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/eval/swarm_iq.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/knowledge/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/knowledge/citation_graph.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/knowledge/correlated_agreement.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/knowledge/embedding_registry.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/knowledge/kernel_store.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/knowledge/rekor.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/knowledge/reputation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/knowledge/swarm_memory.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/knowledge/transparency.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mcp/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mcp/bridge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mcp/client.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mcp/provenance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mcp/relata_tools.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mcp/server.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mcp/transport.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/active.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/belief.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/deliberator.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/diversity.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/evolve.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/federation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/goals.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/integration.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/mediator.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/memory_store.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/policy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/records.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/roles.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/sybil_guard.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/mind/world_model.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/namespace.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/namespace_policy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/observability/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/observability/asgi.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/observability/cost.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/observability/otel_export.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/observability/recorder.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/observability/swarm_trace.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/context.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/deliberate.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/experiment.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/groundtruth.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/interaction.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/intervention.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/metrics.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/model.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/quality.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/query.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/receipt.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/report.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/retrieval.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/stream.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/templates/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/think.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/orgs/tools.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/pin_policy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/py.typed +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/responders/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/responders/anthropic.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/responders/base.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/responders/openai.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/responders/router.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/responders/structured.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/responders/tools.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/revocation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/rule_ids.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/schemas/encrypted_statement.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/schemas/namespace_accept.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/schemas/namespace_create.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/schemas/namespace_founding_attest.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/schemas/namespace_invite.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/schemas/wire-v0.1.cddl +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/_persona_registry.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/_scenario_impl.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/app.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/backends/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/backends/anchor.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/backends/local.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/backends/server.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/cli_command.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/config.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/deployment.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/knowledge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/learning.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/_eval_real_llm.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/aar.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/backtest.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/binary_forecast.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/conformance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/evaluation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/governance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/redteam.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/tabletop.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/tournament.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/modes/whatif.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/namespace.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/personas.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/prompt_generator.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/question_sets/geopolitics_q20.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/question_sets/governance_q5.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/question_sets/msft_outlook_q10.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/question_sets/whatif_q3.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/registry.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/runner.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/scenario.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/swarms.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/alpha_vantage.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/brave.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/newsapi.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/openweather.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/pinecone.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/qdrant.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/query_knowledge_base.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/relata_recall.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/retrieve_document.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/serper.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/tavily.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/weaviate.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/wikipedia.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/wolfram.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_handlers/yahoo_finance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/tool_registry.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/topic_adapter.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/simlab/topic_questions.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/storage/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/storage/backend.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/storage/relata.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/storage/sqlite.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/sync.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/tal.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/tasks.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/testing.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/tools/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/tools/registry.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/transport/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/transport/anti_entropy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/transport/bus.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/transport/knows_delta.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/transport/libp2p.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/transport/placement.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/transport/tcp.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/transport/tls_profile.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/types.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/uncertainty.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/wire.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/workflow/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/workflow/engine.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/workflow/plan.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/src/hypermind/workflow/repair.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/storage-backend-requirements.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/api/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/api/test_eval_endpoints.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/api/test_events_stream.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/api/test_management_app.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/chaos/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/chaos/test_gossip_amplification.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/chaos/test_kill_agent_during_rfp.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/chaos/test_partition_during_workflow.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/chaos/test_slow_consumer_backpressure.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/chaos/test_slow_peer.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/generate_vectors.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/SIGNING.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/agent-card-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/agent-card-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/capability-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/capability-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/capability-03.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/dispute-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/dispute-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/dispute-03.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/dispute-04.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/dispute-05.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/frost-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/frost-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/frost-03.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/knows-delta-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/knows-delta-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/mcp-prov-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/mcp-prov-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/merkle-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/merkle-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/merkle-03.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/merkle-04.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/rep-decay-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/task-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/task-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/trace-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/trace-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/wire-envelope-01.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/wire-envelope-02.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/wire-envelope-03.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/wire-envelope-04.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conformance/vectors/wire-envelope-05.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/conftest.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/fake_kms.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/harness/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/harness/conftest.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/harness/test_assertion_library.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/harness/test_runner_lifecycle.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/harness/test_threat_intel_harness.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/integration/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/integration/test_kms_aws.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/integration/test_kms_azure.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/integration/test_kms_gcp.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/integration/test_kms_vault.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/integration/test_relata_server.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/_fakes.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_adversarial.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_concurrency.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_context.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_convergence.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_deliberator.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_embeddings.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_experiment.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_graph_retrieval.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_groundtruth.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_hybrid_retriever.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_interaction.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_intervention.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_lightweight.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_metrics.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_model.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_ner.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_quality.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_query.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_rag.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_receipt.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_report.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_scale.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_sim.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_stream.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_templates.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_think.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_tool_traces.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/orgs/test_tools.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/responders/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/responders/test_responders.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/responders/test_router.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/responders/test_structured_response.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/responders/test_tools.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/review/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/review/test_agents_parser.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/review/test_models.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/review/test_runner.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/conftest.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_app_endpoints.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_knowledge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_knowledge_reuse.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_modes_aar.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_modes_backtest.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_modes_conformance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_modes_evaluation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_modes_governance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_modes_redteam.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_modes_tabletop.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_modes_tournament.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_modes_whatif.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_personas.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_personas_endpoints.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_recorder_scoping.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_registry.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_resolve_outcomes.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_responder_timeout.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_runner.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/simlab/test_swarms.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/storage/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/storage/test_relata_backend.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/storage/test_sqlite_backend.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_active_multi_step.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_agent_card.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_agent_e2e.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_agent_edge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_anti_entropy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_anti_entropy_multiround.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_anti_entropy_selfheal.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_appendix_z_conformance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_appendix_z_vectors.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_arg_dag_edge_types.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_backpressure.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_belief_revision.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_bias_detector.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_block_reason.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_calibration.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_capability.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_capability_canonical.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_capability_chain.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_capability_edge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_capability_enforcement.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_capability_namespace_caveat.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_capability_revocation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_citation_graph.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_cli.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_cli_interop.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_composite_lamps_prefix.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_consult.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_consult_stream.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_consult_stream_t4.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_contract_net_disputed_award.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_contract_net_frost_award.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_contract_net_happy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_contract_net_reputation_scoring.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_contract_net_sybil_filter.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_correlated_agreement.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_cose_encrypt_roundtrip.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_cost_tracker.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_cross_namespace_consult.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_crypto.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_deliberation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_deliberator_cap.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_deliberator_observe.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_deprecation_registry.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_determinism_corpus.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_dispute.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_dispute_fsm_full.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_dispute_mediate.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_dispute_quorum.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_dissent.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_diversity_quorum.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_dkg.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_embedding_registry.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_eval_comparison.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_examples_runnable.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_final_coverage.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_frost.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_frost_edge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_frost_hedged_nonces.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_frost_persistence.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_frost_transcript_store_swap.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_hlc_clock_source.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_hpke_vectors.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_info_gain_routing.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_kernel_store.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_kms_backends.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_kms_fake.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_knows_delta.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_lamps_oid_canonical.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_last_lines.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_libp2p_peer_id.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_libp2p_scaffold.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_libp2p_stub.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mcp_bridge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mcp_provenance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mcp_tools_list.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mcp_transport.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_merkle_transparency.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mind_active.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mind_deliberator.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mind_diversity_sybil_mediator.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mind_evolve.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mind_goals_policy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mind_records.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mind_roles.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mind_world_model.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_misc_edge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_mtls_profile.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_namespace_lifecycle.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_namespace_policy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_namespace_policy_acl.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_observability_asgi.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_observability_otel.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_open_factory.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_oracle_backprop.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_otel_export.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_pin_policy.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_placement_consistent_hash.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_placement_hint.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_plan_dag.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_plan_repair.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_portable_inclusion_proof.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_pq_default.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_pq_dual_vendor.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_pq_signing.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_priv_ns_conformance_coverage.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_property_based.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_protocol_version.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_public_surface_v05.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_pursue_workflow.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_rate_caveat.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_recorder_bounded.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_recorder_tail.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_reference_verifier_v2.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_rekor_client.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_rekor_downgrade.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_relata_memory_store.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_relata_tools.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_remaining_gaps.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_replay.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_reputation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_reputation_memory.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_reputation_staleness.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_review_fixes.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_revocation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_revocation_lifecycle.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_room_epoch.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_schema_hash_pinned.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_secret_redaction.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_self_heal_cycle1.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_self_heal_cycle2.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_self_heal_cycle3.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_self_heal_cycle3_cascade_isolate.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_self_heal_cycle3_governance.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_self_heal_cycle4.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_self_heal_cycle4_deliberator_broadcast.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_self_heal_cycle5.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_signer_protocol.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_sth_cross_gossip.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_swarm_iq.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_swarm_iq_at_scale.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_swarm_iq_recommend.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_swarm_memory.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_swarm_memory_federation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_swarm_trace.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_swarm_vector_overflow.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_sync_agent.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_tal.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_task_handle.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_task_handle_network.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_tcp_duplicate_kid_attack.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_tcp_edge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_tcp_final.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_tcp_read_loop_cleanup.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_tcp_transport.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_theory_of_mind.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_transport.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_two_impl_interop.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_uncertainty.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_uncertainty_edge.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_wire.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_wire_edge_cases.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_wire_kid_stability.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_wire_p3.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_wire_v2.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_wire_version.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_witness_preimage_length_prefix.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_workflow_compensation.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_workflow_engine.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/test_workflow_replay.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/__init__.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/conftest.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_ai_01_fed_benchmark.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_ai_alignment_redteam.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_cy_05_ir_swarm.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_cy_11_ransomware_intel.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_ed_credentials.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_en_grid_coordinate.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_fi_04_bsa_314b.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_fi_22_ma_dataroom.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_gv_01_intel_sharing.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_gv_21_red_team.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_hc_06_rare_disease.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_hc_21_fed_learning.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_lg_ediscovery.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/tests/usecases/test_mf_supply_chain.py +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/transport-rust/Cargo.toml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/transport-rust/README.md +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/transport-rust/pyproject.toml +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/transport-rust/src/lib.rs +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/index.html +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/package-lock.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/package.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/App.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/api/client.ts +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/ActivityCanvas.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/AgentContribution.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/BrierHeatmap.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/CIQTrajectory.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/CitationGraph.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/DisputeTimeline.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/DissentList.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/Logo.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/NowAsking.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/PersonaRadar.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/PopulationGenerator.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/Term.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/forms/SchemaForm.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/AARTimeline.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/BacktestScorecard.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/ConformanceReport.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/CrisisTabletop.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/DecisionBracket.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/EvaluationReport.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/GovernanceReceipt.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/MethodNote.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/RedTeamReport.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/components/result/ScenarioTree.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/docs/index.ts +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/docs/render.ts +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/main.ts +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/router.ts +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/stores/sims.ts +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/styles.css +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/types/trace.ts +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/Agents.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/Docs.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/Evidence.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/Home.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/HowItWorks.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/Knowledge.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/Namespaces.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/Report.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/Security.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/SimCompare.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/SimDetail.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/SimList.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/SimLive.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/SimNew.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/Tools.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/src/views/UseCases.vue +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/tsconfig.json +0 -0
- {hypermind-0.22.0 → hypermind-0.23.0}/webui/vite.config.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hypermind
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.23.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
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "hypermind"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.23.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.23.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
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"""Distributed, Locust-style execution for OrgSim (#177).
|
|
2
|
+
|
|
3
|
+
A **master coordinator** shards a swarm across **workers** (processes on the
|
|
4
|
+
same box or other machines) over a TCP control plane; every worker runs its
|
|
5
|
+
shard as an ``OrgSim(lightweight=True)`` against the **shared Relata namespace**
|
|
6
|
+
(the source of truth) and returns bounded aggregates, which the coordinator
|
|
7
|
+
merges into one :class:`~hypermind.orgs.report.OrgReport`.
|
|
8
|
+
|
|
9
|
+
Multi-machine (the Locust model)::
|
|
10
|
+
|
|
11
|
+
# on the master host
|
|
12
|
+
python -m hypermind.orgs.distributed master \
|
|
13
|
+
--template university --members 10000 --rounds 8 \
|
|
14
|
+
--expected-workers 4 --host 0.0.0.0 --port 8765
|
|
15
|
+
|
|
16
|
+
# on each worker host
|
|
17
|
+
python -m hypermind.orgs.distributed worker \
|
|
18
|
+
--master-host <master-ip> --port 8765 --capacity 2500 \
|
|
19
|
+
--llm openai --llm-model openai/gpt-4o-mini
|
|
20
|
+
|
|
21
|
+
Single host (convenience — coordinator + in-process workers over loopback)::
|
|
22
|
+
|
|
23
|
+
from hypermind.orgs.distributed import run_distributed
|
|
24
|
+
from hypermind.orgs.templates import university
|
|
25
|
+
report = await run_distributed(university(), "protein folding",
|
|
26
|
+
members=2000, rounds=6, workers=8, config={...})
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from __future__ import annotations
|
|
30
|
+
|
|
31
|
+
import asyncio
|
|
32
|
+
from typing import Any
|
|
33
|
+
|
|
34
|
+
from hypermind.orgs.distributed.coordinator import Coordinator
|
|
35
|
+
from hypermind.orgs.distributed.planning import merge_results, plan_shards
|
|
36
|
+
from hypermind.orgs.distributed.worker import Worker, default_shard_runner
|
|
37
|
+
from hypermind.orgs.model import OrgModel
|
|
38
|
+
from hypermind.orgs.report import OrgReport
|
|
39
|
+
|
|
40
|
+
__all__ = [
|
|
41
|
+
"Coordinator",
|
|
42
|
+
"Worker",
|
|
43
|
+
"default_shard_runner",
|
|
44
|
+
"merge_results",
|
|
45
|
+
"plan_shards",
|
|
46
|
+
"run_distributed",
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
async def run_distributed(
|
|
51
|
+
model: OrgModel,
|
|
52
|
+
topic: str,
|
|
53
|
+
*,
|
|
54
|
+
members: int,
|
|
55
|
+
rounds: int,
|
|
56
|
+
workers: int = 4,
|
|
57
|
+
capacity_each: int = 1,
|
|
58
|
+
config: dict[str, Any] | None = None,
|
|
59
|
+
host: str = "127.0.0.1",
|
|
60
|
+
shard_runner: Any = None,
|
|
61
|
+
) -> OrgReport:
|
|
62
|
+
"""Run a distributed simulation on this host: start a coordinator and
|
|
63
|
+
``workers`` in-process workers (over loopback), shard ``members`` across
|
|
64
|
+
them, and return the merged report.
|
|
65
|
+
|
|
66
|
+
Same code path as multi-machine — the only difference is the workers live in
|
|
67
|
+
this process instead of on remote hosts. Pass ``shard_runner`` to stub the
|
|
68
|
+
per-shard work (tests); omit it for the real ``OrgSim`` runner.
|
|
69
|
+
"""
|
|
70
|
+
coord = Coordinator(
|
|
71
|
+
model,
|
|
72
|
+
topic,
|
|
73
|
+
members=members,
|
|
74
|
+
rounds=rounds,
|
|
75
|
+
expected_workers=workers,
|
|
76
|
+
host=host,
|
|
77
|
+
port=0,
|
|
78
|
+
config=config,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
async def _serve() -> OrgReport:
|
|
82
|
+
return await coord.run()
|
|
83
|
+
|
|
84
|
+
coord_task = asyncio.create_task(_serve())
|
|
85
|
+
# Wait for the server to bind before workers dial in.
|
|
86
|
+
while coord.port == 0:
|
|
87
|
+
await asyncio.sleep(0.005)
|
|
88
|
+
|
|
89
|
+
worker_tasks = [
|
|
90
|
+
asyncio.create_task(
|
|
91
|
+
Worker(
|
|
92
|
+
host,
|
|
93
|
+
coord.port,
|
|
94
|
+
worker_id=f"w{i}",
|
|
95
|
+
capacity=capacity_each,
|
|
96
|
+
shard_runner=shard_runner,
|
|
97
|
+
).run()
|
|
98
|
+
)
|
|
99
|
+
for i in range(workers)
|
|
100
|
+
]
|
|
101
|
+
report = await coord_task
|
|
102
|
+
await asyncio.gather(*worker_tasks, return_exceptions=True)
|
|
103
|
+
return report
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""CLI for distributed OrgSim (#177): ``master`` and ``worker`` subcommands.
|
|
2
|
+
|
|
3
|
+
python -m hypermind.orgs.distributed master --template university \
|
|
4
|
+
--members 10000 --rounds 8 --expected-workers 4 --host 0.0.0.0 --port 8765
|
|
5
|
+
|
|
6
|
+
python -m hypermind.orgs.distributed worker --master-host <ip> --port 8765 \
|
|
7
|
+
--capacity 2500 --llm openai --llm-model openai/gpt-4o-mini
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import argparse
|
|
13
|
+
import asyncio
|
|
14
|
+
import json
|
|
15
|
+
import sys
|
|
16
|
+
|
|
17
|
+
from hypermind.orgs.distributed.coordinator import Coordinator
|
|
18
|
+
from hypermind.orgs.distributed.worker import Worker
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _load_model(args: argparse.Namespace):
|
|
22
|
+
from hypermind.orgs.templates import get_template
|
|
23
|
+
|
|
24
|
+
return get_template(args.template)(namespace=args.namespace)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
async def _run_master(args: argparse.Namespace) -> int:
|
|
28
|
+
model = _load_model(args)
|
|
29
|
+
config = {
|
|
30
|
+
"llm": args.llm,
|
|
31
|
+
"llm_model": args.llm_model,
|
|
32
|
+
"relata_url": args.relata_url,
|
|
33
|
+
"relata_token": args.relata_token,
|
|
34
|
+
"base_url": args.base_url,
|
|
35
|
+
"api_key_env": args.api_key_env,
|
|
36
|
+
}
|
|
37
|
+
coord = Coordinator(
|
|
38
|
+
model,
|
|
39
|
+
args.topic,
|
|
40
|
+
members=args.members,
|
|
41
|
+
rounds=args.rounds,
|
|
42
|
+
expected_workers=args.expected_workers,
|
|
43
|
+
host=args.host,
|
|
44
|
+
port=args.port,
|
|
45
|
+
config=config,
|
|
46
|
+
)
|
|
47
|
+
print(
|
|
48
|
+
f"master: binding {args.host}:{args.port}, waiting for {args.expected_workers} worker(s)…"
|
|
49
|
+
)
|
|
50
|
+
report = await coord.run()
|
|
51
|
+
out = (
|
|
52
|
+
report.to_json() if hasattr(report, "to_json") else json.dumps(report.__dict__, default=str)
|
|
53
|
+
)
|
|
54
|
+
if args.output:
|
|
55
|
+
with open(args.output, "w") as f:
|
|
56
|
+
f.write(out)
|
|
57
|
+
print(f"master: wrote report → {args.output}")
|
|
58
|
+
else:
|
|
59
|
+
report.print()
|
|
60
|
+
return 0
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
async def _run_worker(args: argparse.Namespace) -> int:
|
|
64
|
+
print(
|
|
65
|
+
f"worker {args.worker_id}: connecting to {args.master_host}:{args.port} (cap {args.capacity})…"
|
|
66
|
+
)
|
|
67
|
+
await Worker(
|
|
68
|
+
args.master_host, args.port, worker_id=args.worker_id, capacity=args.capacity
|
|
69
|
+
).run()
|
|
70
|
+
print(f"worker {args.worker_id}: done")
|
|
71
|
+
return 0
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _build_parser() -> argparse.ArgumentParser:
|
|
75
|
+
ap = argparse.ArgumentParser(prog="python -m hypermind.orgs.distributed")
|
|
76
|
+
sub = ap.add_subparsers(dest="cmd", required=True)
|
|
77
|
+
|
|
78
|
+
m = sub.add_parser("master", help="run the coordinator")
|
|
79
|
+
m.add_argument("--template", default="university")
|
|
80
|
+
m.add_argument("--namespace", default="dist-run")
|
|
81
|
+
m.add_argument("--topic", required=True)
|
|
82
|
+
m.add_argument("--members", type=int, required=True)
|
|
83
|
+
m.add_argument("--rounds", type=int, default=6)
|
|
84
|
+
m.add_argument("--expected-workers", type=int, required=True)
|
|
85
|
+
m.add_argument("--host", default="0.0.0.0")
|
|
86
|
+
m.add_argument("--port", type=int, default=8765)
|
|
87
|
+
m.add_argument("--llm", default="openai")
|
|
88
|
+
m.add_argument("--llm-model", default=None)
|
|
89
|
+
m.add_argument("--base-url", default=None)
|
|
90
|
+
m.add_argument("--api-key-env", default="OPENAI_API_KEY")
|
|
91
|
+
m.add_argument("--relata-url", default="http://localhost:9090")
|
|
92
|
+
m.add_argument("--relata-token", default=None)
|
|
93
|
+
m.add_argument("--output", default=None)
|
|
94
|
+
|
|
95
|
+
w = sub.add_parser("worker", help="run a worker")
|
|
96
|
+
w.add_argument("--master-host", required=True)
|
|
97
|
+
w.add_argument("--port", type=int, default=8765)
|
|
98
|
+
w.add_argument("--worker-id", default="worker-1")
|
|
99
|
+
w.add_argument("--capacity", type=int, default=1)
|
|
100
|
+
return ap
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def main(argv: list[str] | None = None) -> int:
|
|
104
|
+
args = _build_parser().parse_args(argv)
|
|
105
|
+
runner = _run_master if args.cmd == "master" else _run_worker
|
|
106
|
+
return asyncio.run(runner(args))
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
if __name__ == "__main__":
|
|
110
|
+
sys.exit(main())
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"""The master: a Locust-style coordinator over a TCP control plane (#177).
|
|
2
|
+
|
|
3
|
+
Waits for workers to announce capacity, shards the swarm across them, streams
|
|
4
|
+
each an assignment, collects bounded aggregates (heartbeating meanwhile), and
|
|
5
|
+
merges everything into one :class:`OrgReport`. Workers that drop before
|
|
6
|
+
returning a result don't hang the run — their shard is recorded as failed and
|
|
7
|
+
the merge proceeds with a clear note.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import asyncio
|
|
13
|
+
import contextlib
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
from hypermind.orgs.distributed import protocol as p
|
|
17
|
+
from hypermind.orgs.distributed.planning import merge_results, plan_shards
|
|
18
|
+
from hypermind.orgs.distributed.serde import model_to_dict
|
|
19
|
+
from hypermind.orgs.model import OrgModel
|
|
20
|
+
from hypermind.orgs.report import OrgReport
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class Coordinator:
|
|
24
|
+
"""Master coordinator. Bind, gather ``expected_workers``, shard, merge."""
|
|
25
|
+
|
|
26
|
+
def __init__(
|
|
27
|
+
self,
|
|
28
|
+
model: OrgModel,
|
|
29
|
+
topic: str,
|
|
30
|
+
*,
|
|
31
|
+
members: int,
|
|
32
|
+
rounds: int,
|
|
33
|
+
expected_workers: int,
|
|
34
|
+
host: str = "127.0.0.1",
|
|
35
|
+
port: int = 0,
|
|
36
|
+
config: dict[str, Any] | None = None,
|
|
37
|
+
worker_timeout_s: float = 600.0,
|
|
38
|
+
) -> None:
|
|
39
|
+
self.model = model
|
|
40
|
+
self.topic = topic
|
|
41
|
+
self.members = members
|
|
42
|
+
self.rounds = rounds
|
|
43
|
+
self.expected_workers = expected_workers
|
|
44
|
+
self.host = host
|
|
45
|
+
self.port = port
|
|
46
|
+
self.config = dict(config or {})
|
|
47
|
+
self.worker_timeout_s = worker_timeout_s
|
|
48
|
+
|
|
49
|
+
self._writers: dict[str, asyncio.StreamWriter] = {}
|
|
50
|
+
self._order: list[str] = [] # worker_ids in arrival order
|
|
51
|
+
self._capacity: dict[str, int] = {}
|
|
52
|
+
self._results: dict[int, dict[str, Any]] = {}
|
|
53
|
+
self._failed: dict[int, str] = {}
|
|
54
|
+
self._worker_shard: dict[str, int] = {}
|
|
55
|
+
self._n_shards = 0
|
|
56
|
+
self._enough_workers = asyncio.Event()
|
|
57
|
+
self._complete = asyncio.Event()
|
|
58
|
+
self._lock = asyncio.Lock()
|
|
59
|
+
self._assigned = False
|
|
60
|
+
|
|
61
|
+
async def run(self) -> OrgReport:
|
|
62
|
+
server = await asyncio.start_server(self._on_conn, self.host, self.port)
|
|
63
|
+
self.port = server.sockets[0].getsockname()[1]
|
|
64
|
+
async with server:
|
|
65
|
+
try:
|
|
66
|
+
await asyncio.wait_for(self._enough_workers.wait(), self.worker_timeout_s)
|
|
67
|
+
await self._assign()
|
|
68
|
+
await asyncio.wait_for(self._complete.wait(), self.worker_timeout_s)
|
|
69
|
+
finally:
|
|
70
|
+
await self._quit_all()
|
|
71
|
+
return self._merge()
|
|
72
|
+
|
|
73
|
+
async def _on_conn(self, reader: asyncio.StreamReader, writer: asyncio.StreamWriter) -> None:
|
|
74
|
+
worker_id: str | None = None
|
|
75
|
+
try:
|
|
76
|
+
hello = await p.read_frame(reader)
|
|
77
|
+
if hello.get("type") != p.HELLO:
|
|
78
|
+
await writer.wait_closed()
|
|
79
|
+
return
|
|
80
|
+
worker_id = str(hello["worker_id"])
|
|
81
|
+
async with self._lock:
|
|
82
|
+
self._writers[worker_id] = writer
|
|
83
|
+
self._capacity[worker_id] = max(0, int(hello.get("capacity", 1)))
|
|
84
|
+
self._order.append(worker_id)
|
|
85
|
+
if len(self._order) >= self.expected_workers:
|
|
86
|
+
self._enough_workers.set()
|
|
87
|
+
await self._read_loop(worker_id, reader)
|
|
88
|
+
except (asyncio.IncompleteReadError, ConnectionError, RuntimeError):
|
|
89
|
+
pass
|
|
90
|
+
finally:
|
|
91
|
+
if worker_id is not None:
|
|
92
|
+
await self._on_worker_gone(worker_id)
|
|
93
|
+
|
|
94
|
+
async def _read_loop(self, worker_id: str, reader: asyncio.StreamReader) -> None:
|
|
95
|
+
while True:
|
|
96
|
+
msg = await p.read_frame(reader)
|
|
97
|
+
mtype = msg.get("type")
|
|
98
|
+
if mtype == p.RESULT:
|
|
99
|
+
async with self._lock:
|
|
100
|
+
self._results[int(msg["shard_id"])] = msg["aggregates"]
|
|
101
|
+
self._maybe_complete()
|
|
102
|
+
return
|
|
103
|
+
if mtype == p.ERROR:
|
|
104
|
+
async with self._lock:
|
|
105
|
+
sid = self._worker_shard.get(worker_id)
|
|
106
|
+
if sid is not None:
|
|
107
|
+
self._failed[sid] = str(msg.get("message", "worker error"))
|
|
108
|
+
self._maybe_complete()
|
|
109
|
+
return
|
|
110
|
+
# HEARTBEAT and anything else: keep listening.
|
|
111
|
+
|
|
112
|
+
async def _assign(self) -> None:
|
|
113
|
+
async with self._lock:
|
|
114
|
+
if self._assigned:
|
|
115
|
+
return
|
|
116
|
+
self._assigned = True
|
|
117
|
+
ids = list(self._order)
|
|
118
|
+
caps = [self._capacity[w] for w in ids]
|
|
119
|
+
counts = plan_shards(self.members, caps)
|
|
120
|
+
model_d = model_to_dict(self.model)
|
|
121
|
+
shard_id = 0
|
|
122
|
+
for w, n in zip(ids, counts, strict=True):
|
|
123
|
+
if n <= 0:
|
|
124
|
+
await p.write_frame(self._writers[w], {"type": p.QUIT})
|
|
125
|
+
continue
|
|
126
|
+
self._worker_shard[w] = shard_id
|
|
127
|
+
await p.write_frame(
|
|
128
|
+
self._writers[w],
|
|
129
|
+
{
|
|
130
|
+
"type": p.ASSIGN,
|
|
131
|
+
"shard_id": shard_id,
|
|
132
|
+
"model": model_d,
|
|
133
|
+
"topic": self.topic,
|
|
134
|
+
"rounds": self.rounds,
|
|
135
|
+
"members": n,
|
|
136
|
+
"namespace": self.model.namespace,
|
|
137
|
+
"config": self.config,
|
|
138
|
+
},
|
|
139
|
+
)
|
|
140
|
+
shard_id += 1
|
|
141
|
+
self._n_shards = shard_id
|
|
142
|
+
if self._n_shards == 0:
|
|
143
|
+
self._complete.set()
|
|
144
|
+
|
|
145
|
+
async def _on_worker_gone(self, worker_id: str) -> None:
|
|
146
|
+
async with self._lock:
|
|
147
|
+
sid = self._worker_shard.get(worker_id)
|
|
148
|
+
if sid is not None and sid not in self._results and sid not in self._failed:
|
|
149
|
+
self._failed[sid] = "worker disconnected before returning a result"
|
|
150
|
+
self._maybe_complete()
|
|
151
|
+
|
|
152
|
+
def _maybe_complete(self) -> None:
|
|
153
|
+
if self._n_shards and len(self._results) + len(self._failed) >= self._n_shards:
|
|
154
|
+
self._complete.set()
|
|
155
|
+
|
|
156
|
+
async def _quit_all(self) -> None:
|
|
157
|
+
for writer in self._writers.values():
|
|
158
|
+
with contextlib.suppress(Exception):
|
|
159
|
+
await p.write_frame(writer, {"type": p.QUIT})
|
|
160
|
+
writer.close()
|
|
161
|
+
|
|
162
|
+
def _merge(self) -> OrgReport:
|
|
163
|
+
results = [{"shard_id": sid, **agg} for sid, agg in sorted(self._results.items())]
|
|
164
|
+
report = merge_results(
|
|
165
|
+
org=self.model.name,
|
|
166
|
+
topic=self.topic,
|
|
167
|
+
rounds=self.rounds,
|
|
168
|
+
interaction=self.model.dynamics.interaction,
|
|
169
|
+
results=results,
|
|
170
|
+
)
|
|
171
|
+
if self._failed:
|
|
172
|
+
report.events.append(
|
|
173
|
+
{"event": "shards_failed", "count": len(self._failed), "detail": dict(self._failed)}
|
|
174
|
+
)
|
|
175
|
+
return report
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""Shard planning + result merge (#177) — pure, no I/O.
|
|
2
|
+
|
|
3
|
+
The coordinator splits a swarm of ``members`` across workers weighted by each
|
|
4
|
+
worker's declared capacity, then merges the workers' bounded aggregates
|
|
5
|
+
(:meth:`OrgSim.export_aggregates`) into one :class:`OrgReport`. Merging is exact
|
|
6
|
+
for counts and Brier; per-worker member labels are namespaced by shard so they
|
|
7
|
+
never collide.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
from hypermind.orgs.metrics import scorecard_from_aggregates
|
|
15
|
+
from hypermind.orgs.report import MemberStanding, OrgReport
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def plan_shards(members: int, capacities: list[int]) -> list[int]:
|
|
19
|
+
"""Split ``members`` across workers proportional to ``capacities``.
|
|
20
|
+
|
|
21
|
+
Largest-remainder apportionment. When ``members`` ≥ the number of workers
|
|
22
|
+
with capacity, every such worker gets at least 1 (no capable worker idles);
|
|
23
|
+
when ``members`` is smaller, the highest-capacity workers get the members
|
|
24
|
+
and the rest get 0. The result always sums to ``members``.
|
|
25
|
+
"""
|
|
26
|
+
caps = [max(0, c) for c in capacities]
|
|
27
|
+
total_cap = sum(caps)
|
|
28
|
+
if members < 1 or total_cap == 0:
|
|
29
|
+
return [0 for _ in caps]
|
|
30
|
+
|
|
31
|
+
capable = [i for i, c in enumerate(caps) if c > 0]
|
|
32
|
+
alloc = [0 for _ in caps]
|
|
33
|
+
|
|
34
|
+
# Fewer members than capable workers → the biggest workers each take one.
|
|
35
|
+
if members < len(capable):
|
|
36
|
+
for i in sorted(capable, key=lambda i: caps[i], reverse=True)[:members]:
|
|
37
|
+
alloc[i] = 1
|
|
38
|
+
return alloc
|
|
39
|
+
|
|
40
|
+
# Every capable worker gets 1 (affordable: members ≥ #capable), then the
|
|
41
|
+
# remainder is handed out proportional to capacity (largest-remainder).
|
|
42
|
+
for i in capable:
|
|
43
|
+
alloc[i] = 1
|
|
44
|
+
remaining = members - len(capable)
|
|
45
|
+
if remaining > 0:
|
|
46
|
+
share = [remaining * caps[i] / total_cap for i in range(len(caps))]
|
|
47
|
+
for i in range(len(caps)):
|
|
48
|
+
alloc[i] += int(share[i])
|
|
49
|
+
leftover = remaining - sum(int(s) for s in share)
|
|
50
|
+
for i in sorted(capable, key=lambda i: share[i] - int(share[i]), reverse=True)[:leftover]:
|
|
51
|
+
alloc[i] += 1
|
|
52
|
+
return alloc
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _prefix(shard_id: int, label: str) -> str:
|
|
56
|
+
return f"s{shard_id}:{label}"
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def merge_results(
|
|
60
|
+
*,
|
|
61
|
+
org: str,
|
|
62
|
+
topic: str,
|
|
63
|
+
rounds: int,
|
|
64
|
+
interaction: str,
|
|
65
|
+
results: list[dict[str, Any]],
|
|
66
|
+
) -> OrgReport:
|
|
67
|
+
"""Merge worker shard aggregates into one OrgReport.
|
|
68
|
+
|
|
69
|
+
Each entry in ``results`` is ``{"shard_id": int, **export_aggregates()}``.
|
|
70
|
+
Labels are namespaced by shard id so standings/aggregates never collide.
|
|
71
|
+
"""
|
|
72
|
+
standings: list[MemberStanding] = []
|
|
73
|
+
n_claims = n_citations = n_disputes = 0
|
|
74
|
+
brier_sums: dict[str, tuple[float, int]] = {}
|
|
75
|
+
influence: dict[str, float] = {}
|
|
76
|
+
publishers: set[str] = set()
|
|
77
|
+
member_units: dict[str, str] = {}
|
|
78
|
+
# Per-round posteriors merged across shards (rounds align by index).
|
|
79
|
+
per_round: list[dict[str, float]] = []
|
|
80
|
+
|
|
81
|
+
for r in results:
|
|
82
|
+
sid = r["shard_id"]
|
|
83
|
+
n_claims += r.get("n_claims", 0)
|
|
84
|
+
n_citations += r.get("n_citations", 0)
|
|
85
|
+
n_disputes += r.get("n_disputes", 0)
|
|
86
|
+
for s in r.get("standings", []):
|
|
87
|
+
standings.append(
|
|
88
|
+
MemberStanding(
|
|
89
|
+
label=_prefix(sid, s["label"]),
|
|
90
|
+
unit=s["unit"],
|
|
91
|
+
role=s["role"],
|
|
92
|
+
reputation=s["reputation"],
|
|
93
|
+
claims=s["claims"],
|
|
94
|
+
citations_received=s["citations_received"],
|
|
95
|
+
disputes_received=s["disputes_received"],
|
|
96
|
+
tools=list(s.get("tools", [])),
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
for lbl, sn in r.get("brier_sums", {}).items():
|
|
100
|
+
brier_sums[_prefix(sid, lbl)] = (sn[0], sn[1])
|
|
101
|
+
for lbl, v in r.get("influence", {}).items():
|
|
102
|
+
influence[_prefix(sid, lbl)] = v
|
|
103
|
+
for lbl in r.get("publishers", []):
|
|
104
|
+
publishers.add(_prefix(sid, lbl))
|
|
105
|
+
for lbl, unit in r.get("member_units", {}).items():
|
|
106
|
+
member_units[_prefix(sid, lbl)] = unit
|
|
107
|
+
for i, p in enumerate(r.get("per_round_posteriors", [])):
|
|
108
|
+
if i >= len(per_round):
|
|
109
|
+
per_round.append({})
|
|
110
|
+
for lbl, mean in p.items():
|
|
111
|
+
per_round[i][_prefix(sid, lbl)] = mean
|
|
112
|
+
|
|
113
|
+
standings.sort(key=lambda s: s.reputation, reverse=True)
|
|
114
|
+
scorecard = scorecard_from_aggregates(
|
|
115
|
+
per_round_posteriors=per_round,
|
|
116
|
+
member_units=member_units,
|
|
117
|
+
brier_sums=brier_sums,
|
|
118
|
+
influence=influence,
|
|
119
|
+
publishers=publishers,
|
|
120
|
+
claims_count=n_claims,
|
|
121
|
+
citations_count=n_citations,
|
|
122
|
+
disputes_count=n_disputes,
|
|
123
|
+
)
|
|
124
|
+
return OrgReport(
|
|
125
|
+
org=org,
|
|
126
|
+
topic=topic,
|
|
127
|
+
rounds=rounds,
|
|
128
|
+
interaction=interaction,
|
|
129
|
+
standings=standings,
|
|
130
|
+
claims=[], # payloads never leave the workers; totals live in scorecard
|
|
131
|
+
citations=[],
|
|
132
|
+
disputes=[],
|
|
133
|
+
tool_grants={},
|
|
134
|
+
scorecard=scorecard.to_dict(),
|
|
135
|
+
stop_reason="distributed",
|
|
136
|
+
events=[{"event": "distributed", "shards": len(results), "members": len(standings)}],
|
|
137
|
+
interaction_state={},
|
|
138
|
+
decisions=[],
|
|
139
|
+
)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Master↔worker wire protocol (#177).
|
|
2
|
+
|
|
3
|
+
Length-prefixed CBOR frames — the same framing the SDK's TCP transport uses:
|
|
4
|
+
``[u32 BE length][CBOR map {"type": str, ...}]``. A tiny message set drives a
|
|
5
|
+
Locust-style control plane: workers announce capacity, the master assigns
|
|
6
|
+
shards, workers heartbeat and return bounded aggregates, the master quits them.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import asyncio
|
|
12
|
+
import struct
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
import cbor2
|
|
16
|
+
|
|
17
|
+
FRAME_HEADER = struct.Struct(">I")
|
|
18
|
+
MAX_FRAME = 64 * 1024 * 1024 # 64 MB — a shard's model + aggregates, generously
|
|
19
|
+
|
|
20
|
+
# Message types.
|
|
21
|
+
HELLO = "hello" # worker → master: {worker_id, capacity}
|
|
22
|
+
ASSIGN = "assign" # master → worker: {job_id, shard_id, model, topic, rounds, members, config}
|
|
23
|
+
HEARTBEAT = "heartbeat" # worker → master: {shard_id, phase}
|
|
24
|
+
RESULT = "result" # worker → master: {shard_id, aggregates}
|
|
25
|
+
QUIT = "quit" # master → worker: {}
|
|
26
|
+
ERROR = "error" # either way: {shard_id?, message}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
async def read_frame(reader: asyncio.StreamReader) -> dict[str, Any]:
|
|
30
|
+
header = await reader.readexactly(FRAME_HEADER.size)
|
|
31
|
+
(length,) = FRAME_HEADER.unpack(header)
|
|
32
|
+
if length > MAX_FRAME:
|
|
33
|
+
raise RuntimeError(f"frame too large: {length} bytes")
|
|
34
|
+
body = await reader.readexactly(length)
|
|
35
|
+
msg = cbor2.loads(body)
|
|
36
|
+
if not isinstance(msg, dict) or "type" not in msg:
|
|
37
|
+
raise RuntimeError("malformed frame: expected a map with a 'type' key")
|
|
38
|
+
return msg
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
async def write_frame(writer: asyncio.StreamWriter, msg: dict[str, Any]) -> None:
|
|
42
|
+
body = cbor2.dumps(msg, canonical=True)
|
|
43
|
+
if len(body) > MAX_FRAME:
|
|
44
|
+
raise RuntimeError(f"frame too large: {len(body)} bytes")
|
|
45
|
+
writer.write(FRAME_HEADER.pack(len(body)))
|
|
46
|
+
writer.write(body)
|
|
47
|
+
await writer.drain()
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""CBOR/JSON-friendly (de)serialisation of an OrgModel for the wire (#177).
|
|
2
|
+
|
|
3
|
+
The model core stays dependency-free, so serialisation lives here. Everything
|
|
4
|
+
in an OrgModel is primitive (str/float/int/tuple/dict), so this is a plain
|
|
5
|
+
structural round-trip — no pickling of code across the network.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from hypermind.orgs.model import DynamicsConfig, OrgModel, Seat, Unit
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def model_to_dict(model: OrgModel) -> dict[str, Any]:
|
|
16
|
+
return {
|
|
17
|
+
"name": model.name,
|
|
18
|
+
"namespace": model.namespace,
|
|
19
|
+
"lexicon": dict(model.lexicon),
|
|
20
|
+
"dynamics": vars(model.dynamics),
|
|
21
|
+
"units": [
|
|
22
|
+
{
|
|
23
|
+
"name": u.name,
|
|
24
|
+
"tools": list(u.tools),
|
|
25
|
+
"seats": [
|
|
26
|
+
{
|
|
27
|
+
"title": s.title,
|
|
28
|
+
"role": s.role,
|
|
29
|
+
"system": s.system,
|
|
30
|
+
"authority": s.authority,
|
|
31
|
+
"headcount": s.headcount,
|
|
32
|
+
"llm": s.llm,
|
|
33
|
+
"model": s.model,
|
|
34
|
+
"tools": list(s.tools),
|
|
35
|
+
}
|
|
36
|
+
for s in u.seats
|
|
37
|
+
],
|
|
38
|
+
}
|
|
39
|
+
for u in model.units
|
|
40
|
+
],
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def model_from_dict(data: dict[str, Any]) -> OrgModel:
|
|
45
|
+
units = tuple(
|
|
46
|
+
Unit(
|
|
47
|
+
name=u["name"],
|
|
48
|
+
tools=tuple(u.get("tools", ())),
|
|
49
|
+
seats=tuple(
|
|
50
|
+
Seat(
|
|
51
|
+
title=s["title"],
|
|
52
|
+
role=s.get("role", "generalist"),
|
|
53
|
+
system=s.get("system"),
|
|
54
|
+
authority=s.get("authority", 0.5),
|
|
55
|
+
headcount=s.get("headcount", 1),
|
|
56
|
+
llm=s.get("llm"),
|
|
57
|
+
model=s.get("model"),
|
|
58
|
+
tools=tuple(s.get("tools", ())),
|
|
59
|
+
)
|
|
60
|
+
for s in u["seats"]
|
|
61
|
+
),
|
|
62
|
+
)
|
|
63
|
+
for u in data["units"]
|
|
64
|
+
)
|
|
65
|
+
return OrgModel(
|
|
66
|
+
name=data["name"],
|
|
67
|
+
namespace=data["namespace"],
|
|
68
|
+
units=units,
|
|
69
|
+
lexicon=dict(data.get("lexicon", {})),
|
|
70
|
+
dynamics=DynamicsConfig(**data.get("dynamics", {})),
|
|
71
|
+
)
|