ananke-plexus 0.3.0__tar.gz → 0.3.2__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.
Files changed (350) hide show
  1. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/PKG-INFO +4 -1
  2. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/README.md +2 -0
  3. ananke_plexus-0.3.2/docs/assets/ananke_plexus_architecture_overview.png +0 -0
  4. ananke_plexus-0.3.2/docs/assets/ananke_plexus_governed_software_architecture.png +0 -0
  5. ananke_plexus-0.3.2/docs/assets/branding/ananke-logo-offline.png +0 -0
  6. ananke_plexus-0.3.2/docs/assets/branding/ananke-logo.png +0 -0
  7. ananke_plexus-0.3.2/docs/assets/code_graph_intelligence_infographic.png +0 -0
  8. ananke_plexus-0.3.2/docs/assets/from_intent_to_implementation.png +0 -0
  9. ananke_plexus-0.3.2/docs/assets/governed_agentic_execution_pipeline.png +0 -0
  10. ananke_plexus-0.3.2/docs/assets/open_ecosystem_getting_started.png +0 -0
  11. ananke_plexus-0.3.2/docs/assets/verifiable_pipeline_for_autonomous_engineering.png +0 -0
  12. ananke_plexus-0.3.2/docs/assets/why_adlc_matters_governed_autonomous_development.png +0 -0
  13. ananke_plexus-0.3.2/docs/concepts/architecture.md +172 -0
  14. ananke_plexus-0.3.2/docs/concepts/bmad.md +196 -0
  15. ananke_plexus-0.3.2/docs/concepts/evaluation.md +147 -0
  16. ananke_plexus-0.3.2/docs/concepts/graph.md +201 -0
  17. ananke_plexus-0.3.2/docs/concepts/mcp-apm.md +246 -0
  18. ananke_plexus-0.3.2/docs/concepts/policy-security.md +220 -0
  19. ananke_plexus-0.3.2/docs/concepts/registry.md +302 -0
  20. ananke_plexus-0.3.2/docs/concepts/testing.md +85 -0
  21. ananke_plexus-0.3.2/docs/concepts/why-ananke.md +144 -0
  22. ananke_plexus-0.3.2/docs/guides/getting-started.md +303 -0
  23. ananke_plexus-0.3.2/docs/guides/implementation-log.md +145 -0
  24. ananke_plexus-0.3.2/docs/guides/registry-guide.md +332 -0
  25. ananke_plexus-0.3.2/docs/guides/release.md +156 -0
  26. ananke_plexus-0.3.2/docs/guides/setup-and-capabilities.md +289 -0
  27. ananke_plexus-0.3.2/docs/guides/workflows.md +124 -0
  28. ananke_plexus-0.3.2/docs/index.md +145 -0
  29. ananke_plexus-0.3.2/docs/reference/commands.md +298 -0
  30. ananke_plexus-0.3.2/docs/reference/configuration.md +121 -0
  31. ananke_plexus-0.3.2/docs/reference/eval-harness.md +308 -0
  32. ananke_plexus-0.3.2/docs/reference/policy.md +137 -0
  33. ananke_plexus-0.3.2/docs/reference/registry.md +355 -0
  34. ananke_plexus-0.3.2/docs/reference/test-harness.md +87 -0
  35. ananke_plexus-0.3.2/hatch_build.py +54 -0
  36. ananke_plexus-0.3.2/mkdocs.yml +93 -0
  37. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/pyproject.toml +12 -0
  38. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/cli/app.py +223 -0
  39. ananke_plexus-0.3.2/src/ananke/plexus/docs_site.py +164 -0
  40. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/base.py +14 -1
  41. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/common.py +57 -0
  42. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/filesystem.py +119 -20
  43. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/registry.py +25 -2
  44. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/version.py +1 -1
  45. ananke_plexus-0.3.2/src/ananke/plexus/workflows/__init__.py +29 -0
  46. ananke_plexus-0.3.2/src/ananke/plexus/workflows/models.py +42 -0
  47. ananke_plexus-0.3.2/src/ananke/plexus/workflows/presets.py +128 -0
  48. ananke_plexus-0.3.2/src/ananke/plexus/workflows/runner.py +168 -0
  49. ananke_plexus-0.3.2/src/ananke/plexus/workflows/storage.py +68 -0
  50. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/.gitignore +0 -0
  51. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/LICENSE +0 -0
  52. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/NOTICE +0 -0
  53. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/assets/ananke_plexus_architecture_overview.png +0 -0
  54. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/assets/ananke_plexus_governed_software_architecture.png +0 -0
  55. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/assets/branding/ananke-logo.png +0 -0
  56. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/assets/code_graph_intelligence_infographic.png +0 -0
  57. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/assets/from_intent_to_implementation.png +0 -0
  58. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/assets/governed_agentic_execution_pipeline.png +0 -0
  59. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/assets/open_ecosystem_getting_started.png +0 -0
  60. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/assets/verifiable_pipeline_for_autonomous_engineering.png +0 -0
  61. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/assets/why_adlc_matters_governed_autonomous_development.png +0 -0
  62. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/__init__.py +0 -0
  63. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/__main__.py +0 -0
  64. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/__init__.py +0 -0
  65. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/api.py +0 -0
  66. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/__init__.py +0 -0
  67. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/audit.py +0 -0
  68. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/bundle.py +0 -0
  69. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/cli.py +0 -0
  70. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/importers/copilot.py +0 -0
  71. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/installer.py +0 -0
  72. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/lockfile.py +0 -0
  73. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/manifest.py +0 -0
  74. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/provenance.py +0 -0
  75. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/registry.py +0 -0
  76. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/resolver.py +0 -0
  77. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/apm/sandbox.py +0 -0
  78. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/architecture/calm.py +0 -0
  79. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/__init__.py +0 -0
  80. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/adapters/__init__.py +0 -0
  81. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/adapters/amazon_q.py +0 -0
  82. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/adapters/copilot.py +0 -0
  83. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/adapters/fake.py +0 -0
  84. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/adapters/generic_cli.py +0 -0
  85. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/adapters/hermes.py +0 -0
  86. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/adapters/kiro.py +0 -0
  87. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/base.py +0 -0
  88. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/capabilities.py +0 -0
  89. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/backends/registry.py +0 -0
  90. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/cli/__init__.py +0 -0
  91. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/cli/rendering.py +0 -0
  92. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/config/__init__.py +0 -0
  93. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/config/credentials.py +0 -0
  94. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/config/loader.py +0 -0
  95. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/config/migration.py +0 -0
  96. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/config/models.py +0 -0
  97. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/config/secrets.py +0 -0
  98. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/contracts/__init__.py +0 -0
  99. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/contracts/architecture.py +0 -0
  100. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/contracts/behavior.py +0 -0
  101. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/contracts/bmad.py +0 -0
  102. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/contracts/model.py +0 -0
  103. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/core/__init__.py +0 -0
  104. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/core/ids.py +0 -0
  105. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/core/paths.py +0 -0
  106. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/core/result.py +0 -0
  107. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/core/workflow_audit.py +0 -0
  108. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/__init__.py +0 -0
  109. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/__init__.py +0 -0
  110. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/agentevals/__init__.py +0 -0
  111. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/agentevals/adapter.py +0 -0
  112. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/deepeval/__init__.py +0 -0
  113. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/deepeval/adapter.py +0 -0
  114. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/inspect_ai/__init__.py +0 -0
  115. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/inspect_ai/adapter.py +0 -0
  116. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/mlflow/__init__.py +0 -0
  117. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/mlflow/adapter.py +0 -0
  118. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/openevals/__init__.py +0 -0
  119. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/openevals/adapter.py +0 -0
  120. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/ragas/__init__.py +0 -0
  121. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/adapters/ragas/adapter.py +0 -0
  122. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/api.py +0 -0
  123. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/context.py +0 -0
  124. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/datasets/__init__.py +0 -0
  125. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/datasets/loader.py +0 -0
  126. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/datasets/validator.py +0 -0
  127. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/datasets/versioning.py +0 -0
  128. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/__init__.py +0 -0
  129. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/architecture/__init__.py +0 -0
  130. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/architecture/engineering.py +0 -0
  131. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/base.py +0 -0
  132. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/efficiency/__init__.py +0 -0
  133. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/efficiency/budget.py +0 -0
  134. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/meta/__init__.py +0 -0
  135. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/meta/calibration.py +0 -0
  136. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/multi_agent/__init__.py +0 -0
  137. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/multi_agent/coordination.py +0 -0
  138. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/outcome/__init__.py +0 -0
  139. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/outcome/exact.py +0 -0
  140. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/planning/__init__.py +0 -0
  141. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/planning/plan.py +0 -0
  142. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/registry.py +0 -0
  143. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/resilience/__init__.py +0 -0
  144. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/resilience/recovery.py +0 -0
  145. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/retrieval/__init__.py +0 -0
  146. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/retrieval/rag.py +0 -0
  147. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/safety/__init__.py +0 -0
  148. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/safety/governance.py +0 -0
  149. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/tool_use/__init__.py +0 -0
  150. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/tool_use/tools.py +0 -0
  151. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/trajectory/__init__.py +0 -0
  152. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/evaluators/trajectory/matching.py +0 -0
  153. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/exceptions.py +0 -0
  154. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/judges/__init__.py +0 -0
  155. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/judges/base.py +0 -0
  156. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/judges/calibration.py +0 -0
  157. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/judges/ensemble.py +0 -0
  158. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/judges/gateway.py +0 -0
  159. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/models/__init__.py +0 -0
  160. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/models/baseline.py +0 -0
  161. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/models/case.py +0 -0
  162. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/models/dataset.py +0 -0
  163. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/models/report.py +0 -0
  164. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/models/rubric.py +0 -0
  165. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/models/score.py +0 -0
  166. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/models/suite.py +0 -0
  167. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/models/trace.py +0 -0
  168. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/policy/__init__.py +0 -0
  169. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/policy/decisions.py +0 -0
  170. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/policy/thresholds.py +0 -0
  171. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/regression/__init__.py +0 -0
  172. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/regression/compare.py +0 -0
  173. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/regression/policy.py +0 -0
  174. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/regression/statistics.py +0 -0
  175. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/reports/__init__.py +0 -0
  176. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/reports/console.py +0 -0
  177. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/reports/json.py +0 -0
  178. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/reports/junit.py +0 -0
  179. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/reports/markdown.py +0 -0
  180. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/runner.py +0 -0
  181. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/traces/__init__.py +0 -0
  182. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/traces/exporters.py +0 -0
  183. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/traces/importers.py +0 -0
  184. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/traces/normalize.py +0 -0
  185. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evals/traces/otel.py +0 -0
  186. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/events/__init__.py +0 -0
  187. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/events/bus.py +0 -0
  188. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/events/models.py +0 -0
  189. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/events/subscribers.py +0 -0
  190. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evidence/__init__.py +0 -0
  191. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evidence/bundle.py +0 -0
  192. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evidence/hash.py +0 -0
  193. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evidence/retention.py +0 -0
  194. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/evidence/sarif.py +0 -0
  195. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/execution/__init__.py +0 -0
  196. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/execution/approvals.py +0 -0
  197. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/execution/checkpoint.py +0 -0
  198. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/execution/compensation.py +0 -0
  199. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/execution/plan.py +0 -0
  200. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/execution/scheduler.py +0 -0
  201. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/execution/state.py +0 -0
  202. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/gates/__init__.py +0 -0
  203. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/gates/runner.py +0 -0
  204. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/graph/__init__.py +0 -0
  205. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/graph/models.py +0 -0
  206. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/graph/providers/__init__.py +0 -0
  207. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/graph/providers/base.py +0 -0
  208. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/graph/providers/code_review_graph.py +0 -0
  209. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/graph/providers/graphifyy.py +0 -0
  210. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/graph/providers/native.py +0 -0
  211. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/graph/providers/registry.py +0 -0
  212. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/graph/service.py +0 -0
  213. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/hooks/__init__.py +0 -0
  214. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/hooks/manager.py +0 -0
  215. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/hooks/models.py +0 -0
  216. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/hooks/runner.py +0 -0
  217. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/hooks/stages.py +0 -0
  218. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/__init__.py +0 -0
  219. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/adapters.py +0 -0
  220. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/compensation.py +0 -0
  221. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/confluence.py +0 -0
  222. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/evidence.py +0 -0
  223. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/git.py +0 -0
  224. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/http_client.py +0 -0
  225. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/issues.py +0 -0
  226. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/pr_evidence.py +0 -0
  227. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/scm.py +0 -0
  228. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/store.py +0 -0
  229. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/telemetry.py +0 -0
  230. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/lifecycle/worktree.py +0 -0
  231. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/mcp/__init__.py +0 -0
  232. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/mcp/auth.py +0 -0
  233. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/mcp/http.py +0 -0
  234. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/mcp/prompts.py +0 -0
  235. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/mcp/resources.py +0 -0
  236. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/mcp/server.py +0 -0
  237. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/mcp/tools.py +0 -0
  238. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/plugins/__init__.py +0 -0
  239. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/plugins/discovery.py +0 -0
  240. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/plugins/metadata.py +0 -0
  241. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/policy/__init__.py +0 -0
  242. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/policy/engine.py +0 -0
  243. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/policy/packs.py +0 -0
  244. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/__init__.py +0 -0
  245. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/activation.py +0 -0
  246. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/bench.py +0 -0
  247. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/cache.py +0 -0
  248. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/cas.py +0 -0
  249. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/cli.py +0 -0
  250. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/compression.py +0 -0
  251. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/diff.py +0 -0
  252. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/docsgen/__init__.py +0 -0
  253. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/docsgen/assets.py +0 -0
  254. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/docsgen/builder.py +0 -0
  255. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/docsgen/markdown.py +0 -0
  256. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/docsgen/model.py +0 -0
  257. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/docsgen/render.py +0 -0
  258. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/docsgen/svg.py +0 -0
  259. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/duplicates.py +0 -0
  260. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/ed25519.py +0 -0
  261. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/errors.py +0 -0
  262. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/events.py +0 -0
  263. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/evidence.py +0 -0
  264. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/gc.py +0 -0
  265. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/hashing.py +0 -0
  266. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/framework.py +0 -0
  267. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/manifest.py +0 -0
  268. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/mcp.py +0 -0
  269. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/python_pkg.py +0 -0
  270. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/rust_crate.py +0 -0
  271. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/importers/vcs_archive.py +0 -0
  272. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/introspect.py +0 -0
  273. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/jsonschema_util.py +0 -0
  274. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/learn.py +0 -0
  275. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/lockfile.py +0 -0
  276. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/mcp_interface.py +0 -0
  277. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/models.py +0 -0
  278. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/payload.py +0 -0
  279. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/policy.py +0 -0
  280. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/portable.py +0 -0
  281. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/present.py +0 -0
  282. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/quality.py +0 -0
  283. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/registry.py +0 -0
  284. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/remote.py +0 -0
  285. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/reports.py +0 -0
  286. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/resolver.py +0 -0
  287. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/schemas.py +0 -0
  288. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/search.py +0 -0
  289. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/secrets.py +0 -0
  290. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/semantic.py +0 -0
  291. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/semver.py +0 -0
  292. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/server.py +0 -0
  293. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/signing.py +0 -0
  294. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/sources.py +0 -0
  295. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/store.py +0 -0
  296. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/sync.py +0 -0
  297. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/tomlw.py +0 -0
  298. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/translate.py +0 -0
  299. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/verify.py +0 -0
  300. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/views.py +0 -0
  301. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/registry/watcher.py +0 -0
  302. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/__init__.py +0 -0
  303. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/lock.py +0 -0
  304. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/models.py +0 -0
  305. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/pipeline.py +0 -0
  306. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/providers/__init__.py +0 -0
  307. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/providers/base.py +0 -0
  308. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/providers/native.py +0 -0
  309. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/providers/registry.py +0 -0
  310. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/providers/speckit.py +0 -0
  311. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/specs/service.py +0 -0
  312. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/__init__.py +0 -0
  313. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/adapters/__init__.py +0 -0
  314. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/adapters/base.py +0 -0
  315. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/adapters/cargo_fuzz.py +0 -0
  316. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/adapters/hypothesis.py +0 -0
  317. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/adapters/kani.py +0 -0
  318. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/adapters/mutmut.py +0 -0
  319. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/adapters/nextest.py +0 -0
  320. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/adapters/pytest.py +0 -0
  321. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/adapters/schemathesis.py +0 -0
  322. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/api.py +0 -0
  323. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/compilers/__init__.py +0 -0
  324. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/compilers/spec.py +0 -0
  325. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/context.py +0 -0
  326. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/discovery.py +0 -0
  327. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/evidence.py +0 -0
  328. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/__init__.py +0 -0
  329. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/contract.py +0 -0
  330. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/fuzz.py +0 -0
  331. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/performance.py +0 -0
  332. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/profile.py +0 -0
  333. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/property.py +0 -0
  334. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/result.py +0 -0
  335. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/security.py +0 -0
  336. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/state.py +0 -0
  337. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/suite.py +0 -0
  338. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/models/test.py +0 -0
  339. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/policy/__init__.py +0 -0
  340. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/policy/gates.py +0 -0
  341. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/policy/thresholds.py +0 -0
  342. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/registry.py +0 -0
  343. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/reports/__init__.py +0 -0
  344. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/reports/console.py +0 -0
  345. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/reports/json.py +0 -0
  346. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/reports/junit.py +0 -0
  347. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/reports/markdown.py +0 -0
  348. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/reports/sarif.py +0 -0
  349. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/runner.py +0 -0
  350. {ananke_plexus-0.3.0 → ananke_plexus-0.3.2}/src/ananke/plexus/testing/selection.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ananke-plexus
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: A local-first ADLC control plane for governed agentic software engineering.
5
5
  Project-URL: Homepage, https://github.com/Neo-Pragnya/Ananke-Plexus
6
6
  Project-URL: Documentation, https://neo-pragnya.github.io/Ananke-Plexus/
@@ -55,6 +55,7 @@ Requires-Dist: pytest>=8; extra == 'all'
55
55
  Requires-Dist: watchfiles>=0.21; extra == 'all'
56
56
  Requires-Dist: zstandard>=0.22; extra == 'all'
57
57
  Provides-Extra: dev
58
+ Requires-Dist: hatchling>=1.26; extra == 'dev'
58
59
  Requires-Dist: mypy>=1.15; extra == 'dev'
59
60
  Requires-Dist: pre-commit>=4; extra == 'dev'
60
61
  Requires-Dist: pytest-asyncio>=0.25; extra == 'dev'
@@ -770,6 +771,8 @@ ananke doctor [--json] # environment diagnostics
770
771
  ananke verify # full local gate suite
771
772
  ananke config show # show effective config
772
773
  ananke config migrate [--apply] # migrate config schema
774
+ ananke docs build | serve # offline docs site (bundled — no PyPI/GitHub needed)
775
+ ananke workflow install-pack setup && ananke workflow run setup # bundle commands, run together
773
776
  ```
774
777
 
775
778
  ### `ananke spec` — specification lifecycle
@@ -623,6 +623,8 @@ ananke doctor [--json] # environment diagnostics
623
623
  ananke verify # full local gate suite
624
624
  ananke config show # show effective config
625
625
  ananke config migrate [--apply] # migrate config schema
626
+ ananke docs build | serve # offline docs site (bundled — no PyPI/GitHub needed)
627
+ ananke workflow install-pack setup && ananke workflow run setup # bundle commands, run together
626
628
  ```
627
629
 
628
630
  ### `ananke spec` — specification lifecycle
@@ -0,0 +1,172 @@
1
+ # System Architecture
2
+
3
+ ## Overview
4
+
5
+ Ananke Plexus follows a **core + ports + adapters** hexagonal architecture. The stable center contains Ananke's governance semantics. External tooling remains fully replaceable.
6
+
7
+ ```mermaid
8
+ flowchart TB
9
+ subgraph Entry["👤 Entrypoints"]
10
+ CLI["⌨️ ananke CLI"]
11
+ APMCLI["📦 apm CLI"]
12
+ HOOKS["🪝 Git Hooks"]
13
+ MCP["🔌 MCP Clients"]
14
+ CI["⚙️ CI/CD"]
15
+ end
16
+
17
+ subgraph Core["⚖️ Ananke Core"]
18
+ CONFIG["⚙️ Config"]
19
+ POLICY["🛡️ Policy Engine"]
20
+ EXEC["🤖 Execution Director"]
21
+ EVENTS["📡 Event Bus"]
22
+ TELEMETRY["📊 Telemetry"]
23
+ PERM["🔐 Permissions"]
24
+ STATE["🔁 Run State Machine"]
25
+ end
26
+
27
+ subgraph Domain["🧠 Domain Subsystems"]
28
+ SPEC["📜 Spec / BMAD"]
29
+ CALM["🏗️ CALM Architecture"]
30
+ GRAPH["🕸️ Graph Intelligence"]
31
+ APM["📦 APM"]
32
+ REGISTRY["🗂️ Skill & Agent Registry"]
33
+ GATES["🧪 Verification Gates"]
34
+ EVIDENCE["🧾 Evidence"]
35
+ end
36
+
37
+ subgraph Adapters["🔌 Adapters"]
38
+ JIRA["Jira"]
39
+ SCM["GitHub / Bitbucket"]
40
+ GRAPHIFY["Graphifyy"]
41
+ CRG["Code Review Graph"]
42
+ COPILOT["Copilot"]
43
+ Q["Amazon Q"]
44
+ KIRO["Kiro"]
45
+ HERMES["Hermes"]
46
+ end
47
+
48
+ Entry --> Core
49
+ Core --> Domain
50
+ Domain --> Adapters
51
+ Adapters -. Results .-> Domain
52
+ ```
53
+
54
+ ---
55
+
56
+ ## Package layout
57
+
58
+ ```
59
+ ananke-plexus/
60
+ └── src/ananke/plexus/
61
+ ├── cli/ — Typer CLI entrypoints (ananke + apm)
62
+ ├── core/ — IDs, result types, path helpers, workflow audit
63
+ ├── config/ — Config models, loader, migration, secrets resolver
64
+ ├── contracts/ — BMAD compiler: behavior, model, architecture
65
+ ├── specs/ — Spec models, service, providers, lock, drift
66
+ ├── architecture/ — CALM loader, validation, delta, Mermaid rendering
67
+ ├── graph/ — Canonical graph models, providers (native/Graphifyy/CRG)
68
+ ├── policy/ — Policy engine, rule schema, builtin packs
69
+ ├── gates/ — Gate runner, adapters (ruff, mypy, pytest, semgrep...)
70
+ ├── execution/ — Plan DAG, scheduler, checkpoint, approvals, compensation
71
+ ├── backends/ — AgentBackend protocol, Copilot/Q/Kiro/Hermes/fake adapters
72
+ ├── lifecycle/ — Git service, worktrees, Jira, Bitbucket, PR evidence
73
+ ├── hooks/ — Git hook manager, stages, runner
74
+ ├── mcp/ — MCP server, tools, resources, prompts, auth
75
+ ├── apm/ — Skill manifests, registry, installer, sandbox, lockfile
76
+ ├── evidence/ — Evidence bundle, SARIF 2.1.0, hash, retention (+ registry capability snapshot)
77
+ ├── registry/ — Skill & Agent Registry: SQLite + content-addressed store, importers,
78
+ │ resolver, ananke.lock, activation, docs generator, HTTP server
79
+ ├── evals/ — Enterprise evaluation harness: traces, evaluators, judges, regression
80
+ ├── testing/ — Unified test & quality harness: adapters, profiles, quality gate
81
+ ├── events/ — In-process event bus with JSONL audit log
82
+ ├── telemetry/ — OpenTelemetry adapter, noop
83
+ └── plugins/ — Entry-point discovery, plugin metadata
84
+ ```
85
+
86
+ ---
87
+
88
+ ## Design principles
89
+
90
+ ### Local-first
91
+
92
+ Code, specs, graph state, verification, and evidence can remain entirely local. No hosted service is required.
93
+
94
+ ### Ports and adapters
95
+
96
+ Every external integration is isolated behind a protocol/interface:
97
+
98
+ ```python
99
+ GraphProvider → NativeGraphProvider | GraphifyyAdapter | CodeReviewGraphAdapter
100
+ AgentBackend → CopilotBackend | AmazonQBackend | KiroBackend | HermesBackend | FakeBackend
101
+ SCMPort → BitbucketAdapter | GitHubAdapter
102
+ IssuePort → JiraAdapter
103
+ ScannerPort → RuffAdapter | SemgrepAdapter | GitleaksAdapter | TrivyAdapter
104
+ ```
105
+
106
+ ### Immutable, content-addressed capabilities
107
+
108
+ Skills and agents live in the [registry](registry.md): every version is an immutable, hash-verified payload; mutable state (trust, channel, lifecycle) is separate and audited. Resolution is deterministic, policy-aware and explainable, and produces a reproducible `ananke.lock`.
109
+
110
+ ### Fail closed for hard gates
111
+
112
+ When a configured hard gate cannot execute, the default result is **BLOCKED**, not "pass."
113
+
114
+ Soft gates return: `PASS | WARN | SKIPPED | UNAVAILABLE`
115
+ Hard gates return: `PASS | BLOCKED | ERROR`
116
+
117
+ ### Evidence before mutation
118
+
119
+ Every mutating step records:
120
+
121
+ 1. Requested intent
122
+ 2. Policy decision
123
+ 3. Preconditions
124
+ 4. Execution result
125
+ 5. Verification result
126
+ 6. Artifact hashes
127
+ 7. Audit record
128
+
129
+ ### Capability discovery
130
+
131
+ Every backend declares a `BackendCapabilities` model. The orchestrator asks the registry for capabilities and constructs a compatible execution plan.
132
+
133
+ ---
134
+
135
+ ## Configuration precedence
136
+
137
+ Highest wins:
138
+
139
+ 1. CLI flags (`--project`, `--offline`, `--json`)
140
+ 2. Process environment variables
141
+ 3. `.ananke/config.local.toml`
142
+ 4. `.ananke/config.toml`
143
+ 5. User config
144
+ 6. Built-in defaults
145
+
146
+ ---
147
+
148
+ ## Event system
149
+
150
+ Every subsystem emits typed domain events to an in-process event bus. Events are appended to `.ananke/evidence/*.jsonl` for audit trails.
151
+
152
+ Registry events (`artifact.registered`, `artifact.promoted`, `artifact.yanked`, `artifact.quarantined`, …) are also written to an append-only `registry_events` table.
153
+
154
+ Key events: `RequirementCaptured`, `SpecCreated`, `SpecLocked`, `GateCompleted`, `BackendInvoked`, `PullRequestCreated`, `EvidenceFinalized`, `ApprovalRequested`, `ApprovalGranted`
155
+
156
+ ---
157
+
158
+ ## Exit codes
159
+
160
+ | Code | Meaning |
161
+ |---|---|
162
+ | 0 | success |
163
+ | 1 | generic failure |
164
+ | 2 | invalid usage/config |
165
+ | 3 | policy blocked |
166
+ | 4 | verification failed |
167
+ | 5 | dependency/tool unavailable |
168
+ | 6 | integration failure |
169
+ | 7 | authentication/authorization |
170
+ | 8 | spec drift |
171
+ | 9 | architecture violation |
172
+ | 10 | cancelled |
@@ -0,0 +1,196 @@
1
+ # Ananke BMAD — Behavior, Model, Architecture
2
+
3
+ Within Ananke Plexus, **BMAD** means:
4
+
5
+ > **Behavior — Model — Architecture Driven Development**
6
+
7
+ These represent three distinct forms of engineering truth that must all align for a change to be considered proven.
8
+
9
+ ```mermaid
10
+ flowchart TB
11
+ SPEC["📜 Specification"]
12
+ B["🧪 Behavior<br/>What must happen?"]
13
+ M["🧱 Model<br/>What structures exist?"]
14
+ A["🏗️ Architecture<br/>How may they interact?"]
15
+ IMPL["💻 Implementation"]
16
+
17
+ SPEC --> B
18
+ SPEC --> M
19
+ SPEC --> A
20
+
21
+ B --> IMPL
22
+ M --> IMPL
23
+ A --> IMPL
24
+
25
+ IMPL -->|"Tests"| B
26
+ IMPL -->|"Schema Validation"| M
27
+ IMPL -->|"Graph Reconciliation"| A
28
+ ```
29
+
30
+ ---
31
+
32
+ ## Compiling BMAD from a requirement
33
+
34
+ ```bash
35
+ # Create a requirement with acceptance criteria
36
+ ananke spec create \
37
+ --id PROJ-101 \
38
+ --title "Add idempotent payment webhook" \
39
+ --acceptance "Duplicate events are deduplicated" \
40
+ --acceptance "Idempotency key is stored per transaction"
41
+
42
+ # Compile all BMAD artifacts
43
+ ananke bmad compile --feature-dir .ananke/specs/PROJ-101
44
+ ```
45
+
46
+ This produces:
47
+
48
+ ```
49
+ .ananke/specs/PROJ-101/
50
+ ├── bmad.yaml — BMAD index
51
+ ├── model-contract.yaml — API schema skeleton
52
+ ├── architecture-contract.yaml — CALM + allow/deny rules
53
+ └── tests/
54
+ ├── test_proj_101_behavior.py — Failing pytest skeleton
55
+ └── proj_101.feature — Gherkin scenarios
56
+ ```
57
+
58
+ ---
59
+
60
+ ## Behavior contract
61
+
62
+ Behavior is expressed through failing tests and Gherkin scenarios. Every generated test records its full traceability chain:
63
+
64
+ ```
65
+ Requirement → Acceptance Criterion → Scenario → Test ID
66
+ ```
67
+
68
+ Generated pytest skeleton (`tests/test_proj_101_behavior.py`):
69
+
70
+ ```python
71
+ import pytest
72
+
73
+ # Traceability: PROJ-101 -> AC-1 -> test_ac_1_duplicate_events_are_deduplicated
74
+ @pytest.mark.requirement('PROJ-101')
75
+ @pytest.mark.ac('1')
76
+ def test_ac_1_duplicate_events_are_deduplicated() -> None:
77
+ """AC-1: Duplicate events are deduplicated"""
78
+ # TODO: implement acceptance criterion assertion
79
+ pytest.fail('not implemented')
80
+ ```
81
+
82
+ Generated Gherkin feature:
83
+
84
+ ```gherkin
85
+ Feature: Add idempotent payment webhook
86
+ # Requirement: PROJ-101
87
+
88
+ Scenario: AC-1 — Duplicate events are deduplicated
89
+ Given the system is in a known state
90
+ When the condition for AC-1 is met
91
+ Then the system satisfies the acceptance criterion
92
+ ```
93
+
94
+ ### Behavior principle
95
+
96
+ Never claim that an automatically generated test proves the requirement unless traceability exists. Every test records `Requirement → AC → Scenario → Test ID`.
97
+
98
+ ---
99
+
100
+ ## Model contract
101
+
102
+ Model contracts define API schemas, event payloads, domain value objects, and compatibility rules.
103
+
104
+ Generated `model-contract.yaml`:
105
+
106
+ ```yaml
107
+ contract_id: model-proj-101
108
+ requirement_id: PROJ-101
109
+ title: Add idempotent payment webhook
110
+ schemas:
111
+ - name: proj-101_request
112
+ type: object
113
+ description: API request boundary for this requirement
114
+ - name: proj-101_response
115
+ type: object
116
+ description: API response boundary for this requirement
117
+ compatibility_policy: backward_compatible
118
+ boundary_types:
119
+ - api_request
120
+ - api_response
121
+ ```
122
+
123
+ Example domain model:
124
+
125
+ ```python
126
+ from pydantic import BaseModel
127
+ from datetime import datetime
128
+ from decimal import Decimal
129
+ from uuid import UUID
130
+
131
+ class PaymentWebhookPayload(BaseModel):
132
+ transaction_id: UUID
133
+ customer_id: UUID
134
+ amount: Decimal
135
+ currency: str
136
+ occurred_at: datetime
137
+ idempotency_key: str
138
+ ```
139
+
140
+ ---
141
+
142
+ ## Architecture contract
143
+
144
+ Architecture contracts are checked against the CALM system document, graph provider facts, and component allow/deny rules.
145
+
146
+ Generated `architecture-contract.yaml`:
147
+
148
+ ```yaml
149
+ contract_id: arch-proj-101
150
+ requirement_id: PROJ-101
151
+ calm_ref: .ananke/architecture/system.calm.json
152
+ allowed_dependencies: []
153
+ denied_dependencies: []
154
+ invariant_ids: []
155
+ import_rules:
156
+ deny_cross_domain_imports: true
157
+ deny_circular_imports: true
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Verifying BMAD artifacts
163
+
164
+ ```bash
165
+ ananke bmad verify --feature-dir .ananke/specs/PROJ-101
166
+ # exits 0 if all artifacts present, 4 if missing
167
+
168
+ ananke bmad show --feature-dir .ananke/specs/PROJ-101
169
+ # prints the bmad.yaml index
170
+
171
+ ananke bmad trace --feature-dir .ananke/specs/PROJ-101
172
+ # shows requirement → AC → test traceability
173
+ ```
174
+
175
+ ---
176
+
177
+ ## BMAD vs BMAD-METHOD
178
+
179
+ Ananke uses **Ananke BMAD** (Behavior, Model, Architecture) as its internal contract triad.
180
+
181
+ The external **BMAD-METHOD** ecosystem is separate. If supported, it lives under `ananke.plexus.integrations.bmad_method` to avoid semantic collision.
182
+
183
+ ---
184
+
185
+ ## Drift detection
186
+
187
+ After locking the spec, Ananke detects when artifacts have changed:
188
+
189
+ ```bash
190
+ ananke spec lock --feature-dir .ananke/specs/PROJ-101
191
+ ananke spec diff --feature-dir .ananke/specs/PROJ-101
192
+ # → [] if no drift
193
+ # → ["HASH_MISMATCH:spec.md"] if spec changed after lock
194
+ ```
195
+
196
+ Drift types: `REQUIREMENT_DRIFT`, `SPEC_DRIFT`, `ARCHITECTURE_DRIFT`, `MODEL_DRIFT`, `POLICY_DRIFT`, `TOOLCHAIN_DRIFT`, `GRAPH_DRIFT`
@@ -0,0 +1,147 @@
1
+ # Enterprise Agent Evaluation Harness
2
+
3
+ The Ananke Plexus evaluation harness is the **quality-intelligence plane** of the ADLC. It provides enterprise-grade, runtime-neutral agent quality assurance — without making any single evaluation library a hard dependency.
4
+
5
+ ## Design Philosophy
6
+
7
+ ### Deterministic-First
8
+ Every native evaluator is deterministic: given identical inputs, it produces identical scores. Non-deterministic LLM judges are isolated behind the `JudgeGateway` and used only when no deterministic signal exists.
9
+
10
+ ### Trace-Only Rescoring
11
+ Evaluations operate on `AgentTrace` — a canonical span model that normalises traces from Pydantic AI, Microsoft Agent Framework, Hermes, or any OTel-compliant system. You can **re-evaluate historical traces** without re-running the agent.
12
+
13
+ ### Enterprise Dependency Policy
14
+ The core `ananke-plexus` package has zero evaluation-library dependencies. Every third-party adapter (`mlflow`, `deepeval`, `ragas`, etc.) is a **lazy import** activated only when the appropriate `[eval-*]` extra is installed:
15
+
16
+ | Extra | Activates |
17
+ |---|---|
18
+ | `eval-otel` | OpenTelemetry trace export |
19
+ | `eval-mlflow` | MLflow experiment tracking (preferred enterprise backend) |
20
+ | `eval-deepeval` | DeepEval metrics |
21
+ | `eval-inspect` | Inspect AI |
22
+ | `eval-ragas` | Ragas RAG evaluators |
23
+ | `eval-openevals` | OpenEvals |
24
+ | `eval-agentevals` | AgentEvals trajectory matching |
25
+ | `eval-enterprise` | OTel + MLflow + jsonschema bundle |
26
+
27
+ ## Canonical Trace Model
28
+
29
+ ```python
30
+ from ananke.plexus.evals import AgentTrace, AgentSpan, SpanKind, Usage
31
+
32
+ trace = AgentTrace(
33
+ trace_id="t-001",
34
+ run_id="run-001",
35
+ runtime="pydantic-ai",
36
+ spans=[
37
+ AgentSpan(
38
+ span_id="s-001",
39
+ kind=SpanKind.TOOL,
40
+ name="read_file",
41
+ start_time=...,
42
+ end_time=...,
43
+ attributes={"file": "spec.md"},
44
+ )
45
+ ],
46
+ usage=Usage(prompt_tokens=1200, completion_tokens=300, total_tokens=1500),
47
+ )
48
+ ```
49
+
50
+ `SpanKind` values: `agent | model | planning | tool | retrieval | subagent | approval | verification | policy | filesystem | shell`
51
+
52
+ ## Evaluation Domains
53
+
54
+ Ananke ships 80+ native evaluators across 9 quality dimensions:
55
+
56
+ | Domain | Example Evaluators |
57
+ |---|---|
58
+ | **Outcome** | ExactMatch, Regex, JsonEquality, SchemaConformance, TaskCompletion |
59
+ | **Trajectory** | StrictTrajectory, LoopDetection, ForbiddenStep, StepEfficiency |
60
+ | **Tool Use** | ToolSelection, ToolAllowlist, ToolDenylist, IdempotencyCheck |
61
+ | **Planning** | PlanCoverage, PlanDependency, PlanFeasibility, PlanAdherence |
62
+ | **Retrieval/RAG** | ContextPrecision, ContextRecall, Faithfulness, AnswerRelevance |
63
+ | **Safety/Governance** | PermissionBoundary, SecretLeakage, ApprovalGate, ShellPolicy |
64
+ | **Architecture** | SpecAdherence, BehaviorCoverage, ArchitectureConformance |
65
+ | **Efficiency** | TokenBudget, CostBudget, Latency, RetryCount, CacheEfficiency |
66
+ | **Resilience** | FailureRecognition, RecoveryPath, CheckpointUsage, Rollback |
67
+
68
+ Plus multi-agent (`DelegationAccuracy`, `HandoffCompleteness`) and meta-evaluation (`cohens_kappa`, `judge_human_agreement`, `detect_positional_bias`).
69
+
70
+ ## Evaluation Status
71
+
72
+ Each `EvalScore` carries an `EvalStatus`:
73
+
74
+ | Status | Meaning |
75
+ |---|---|
76
+ | `pass` | Meets threshold |
77
+ | `warn` | Marginal — review recommended |
78
+ | `review` | Human judgement required |
79
+ | `fail` | Below threshold |
80
+ | `error` | Evaluator threw an exception |
81
+ | `skipped` | Evaluator requires optional package not installed |
82
+
83
+ ## Gate Policy
84
+
85
+ After evaluation, the policy engine converts `EvalScore[]` into an `EvalGateDecision`:
86
+
87
+ | Verdict | Meaning |
88
+ |---|---|
89
+ | `PASS` | All hard requirements met |
90
+ | `WARN` | Soft thresholds missed; proceed with caution |
91
+ | `REVIEW` | Human approval required before merge |
92
+ | `BLOCK` | Hard failure; pipeline blocked |
93
+
94
+ Configure thresholds in `.ananke/evals/config.yaml`:
95
+
96
+ ```yaml
97
+ suites:
98
+ standard:
99
+ hard_fail_on: [safety, outcome]
100
+ warn_on: [efficiency, resilience]
101
+ pass_threshold: 0.8
102
+ warn_threshold: 0.6
103
+ ```
104
+
105
+ ## LLM Judge Governance
106
+
107
+ The `EnterpriseJudgeGateway` ensures:
108
+ - Only approved providers are used (`azure | bedrock | anthropic | openai | local | custom`)
109
+ - Secret patterns are redacted before any text is sent to a provider
110
+ - Trusted rubrics are separated from untrusted agent output via `JudgeInputEnvelope.to_prompt()`
111
+ - Credentials are resolved from the Ananke secrets resolver — never hardcoded
112
+
113
+ ## Baseline Regression
114
+
115
+ Compare a candidate run against an approved baseline:
116
+
117
+ ```bash
118
+ ananke eval baseline create --run my-run-id --id v1.0-baseline
119
+ ananke eval compare --baseline v1.0-baseline --run my-new-run
120
+ ```
121
+
122
+ Policy enforcement uses bootstrap confidence intervals to distinguish statistical noise from real regressions.
123
+
124
+ ## Evidence Bundle
125
+
126
+ Every evaluation run writes a tamper-evident bundle:
127
+
128
+ ```
129
+ .ananke/evidence/<run-id>/eval/
130
+ scores.json # EvalScore[] with normalized values
131
+ policy-decision.json # EvalGateDecision
132
+ manifest.json # SHA-256 checksums
133
+ reports/
134
+ report.md # PR-ready Markdown table
135
+ summary.json # Machine-readable JSON
136
+ junit.xml # JUnit XML for CI integration
137
+ ```
138
+
139
+ ## ADLC Integration
140
+
141
+ The evaluation harness is wired into the ADLC at the **Evaluation Gate**:
142
+
143
+ ```
144
+ Spec → Plan → Implement → [Eval Gate] → Evidence → Deploy
145
+ ```
146
+
147
+ When `gate_decision.blocks` is true, `ananke eval run` exits with code 1, blocking the pipeline. CI pipelines consume `junit.xml` for test result reporting.