atomadic-forge 0.51.6__tar.gz → 0.52.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.
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/mcp-registry-publish.yml +8 -4
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/CHANGELOG.md +29 -0
- {atomadic_forge-0.51.6/src/atomadic_forge.egg-info → atomadic_forge-0.52.0}/PKG-INFO +4 -4
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/README.md +3 -3
- atomadic_forge-0.52.0/docs/commands/INDEX.md +34 -0
- atomadic_forge-0.52.0/docs/commands/absorb.md +9 -0
- atomadic_forge-0.52.0/docs/commands/audit.md +9 -0
- atomadic_forge-0.52.0/docs/commands/create.md +9 -0
- atomadic_forge-0.52.0/docs/commands/emergent-swarm.md +19 -0
- atomadic_forge-0.52.0/docs/commands/enhancement.md +9 -0
- atomadic_forge-0.52.0/docs/commands/guard-install.md +9 -0
- atomadic_forge-0.52.0/docs/commands/handoff.md +9 -0
- atomadic_forge-0.52.0/docs/commands/harvest.md +9 -0
- atomadic_forge-0.52.0/docs/commands/hive.md +9 -0
- atomadic_forge-0.52.0/docs/commands/materialize.md +9 -0
- atomadic_forge-0.52.0/docs/commands/metrics.md +9 -0
- atomadic_forge-0.52.0/docs/commands/recon-swarm.md +9 -0
- atomadic_forge-0.52.0/docs/commands/relay.md +9 -0
- atomadic_forge-0.52.0/docs/commands/surface.md +9 -0
- atomadic_forge-0.52.0/docs/commands/welcome.md +9 -0
- atomadic_forge-0.52.0/docs/commands/wisdom.md +9 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/pyproject.toml +1 -1
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +65 -1
- atomadic_forge-0.52.0/src/atomadic_forge/a1_at_functions/harvest_absorb.py +170 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +0 -13
- atomadic_forge-0.52.0/src/atomadic_forge/a3_og_features/absorb_feature.py +134 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/create_feature.py +7 -62
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +25 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +1 -1
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +3 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/_registry.py +28 -0
- atomadic_forge-0.52.0/src/atomadic_forge/commands/absorb.py +96 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0/src/atomadic_forge.egg-info}/PKG-INFO +4 -4
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/SOURCES.txt +19 -0
- atomadic_forge-0.51.6/docs/commands/INDEX.md +0 -18
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/FUNDING.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/customer-refactor.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/metrics-auto-regen.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/metrics-drift.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/publish-on-tag.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/release-readiness.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/surface-drift.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/uptime.yml +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/LICENSE +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/MANIFEST.in +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/SECURITY.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/02-commands.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/05-faq.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/AGENTS_GUIDE.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/CI_CD.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/COMMANDS.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/FIRST_10_MINUTES.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/FORMALIZATION.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/HIVE_PRIMITIVES.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/HIVE_STATUS.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/IDE_INTEGRATION.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/MIGRATION.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/PROVIDERS.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/README.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/RECEIPT.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/RELAY_PROTOCOL.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/WORLD_COLLISION.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/config.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/setup.cfg +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/mcp_server.py +1 -1
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/create.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/enhancement.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/guard_install.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/handoff.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/harvest.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/hive.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/materialize.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/metrics.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/relay.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/surface.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/welcome.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/wisdom.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_agent_hire_protocol.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_agent_plan_pkg_label.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_card_renderer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_chat.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_classify_tier_ast_signals.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_cli_smoke.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_cli_swarm_aliases.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_codex_5_complete.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_compliance_checker.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_config.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_copilots_copilot.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_create_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_cs1_renderer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_custom_provider.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_dedup_engine.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_demo.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_emergent_synthesize_imports.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_enhancement_proposal.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_evolve_js.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_handoff.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_hierarchical_memory.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_hive_sync.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_ling_provider.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_materialize_feature.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_mcp_protocol.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_nexus_bridge.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_cli_mcp.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_full_pipeline.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_hardening.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_symbol_parity.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_response_enricher.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_sbom_cmd_text_summary.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_smell_score_formula.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_stub_detector.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_surface_export.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_synergy.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_verify_suggested_recipe.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_welcome.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_welcome_enhancements.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_wire_suggest_repairs.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_wire_type_checking.py +0 -0
- {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_wisdom.py +0 -0
|
@@ -116,14 +116,18 @@ jobs:
|
|
|
116
116
|
run: |
|
|
117
117
|
set -euo pipefail
|
|
118
118
|
v="${{ steps.ver.outputs.version }}"
|
|
119
|
-
# Allow up to ~30s for the registry to propagate.
|
|
119
|
+
# Allow up to ~30s for the registry to propagate. The search
|
|
120
|
+
# endpoint returns ALL published versions; pick the one
|
|
121
|
+
# marked isLatest. (Earlier versions: we naively read [0]
|
|
122
|
+
# which returned a non-latest result.)
|
|
120
123
|
for i in 1 2 3 4 5 6; do
|
|
121
124
|
sleep 5
|
|
122
125
|
got=$(curl -fsS "https://registry.modelcontextprotocol.io/v0/servers?search=atomadic-forge" \
|
|
123
|
-
| jq -r '.servers[
|
|
124
|
-
|
|
126
|
+
| jq -r '.servers[] | select(._meta."io.modelcontextprotocol.registry/official".isLatest == true) | .server.version' \
|
|
127
|
+
|| echo "")
|
|
128
|
+
echo "registry reports latest version: $got (want $v)"
|
|
125
129
|
if [ "$got" = "$v" ]; then
|
|
126
|
-
echo "PASS: registry shows v$v"
|
|
130
|
+
echo "PASS: registry shows v$v as isLatest"
|
|
127
131
|
exit 0
|
|
128
132
|
fi
|
|
129
133
|
done
|
|
@@ -2,6 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
### feat(emergent-swarm): hub-node penalty in `emergent_swarm` scoring
|
|
6
|
+
|
|
7
|
+
Symbols that appear in more than 3 chains are now penalised in
|
|
8
|
+
`score_boosted`. For each doubling of cross-chain frequency above the
|
|
9
|
+
threshold, 10 points are deducted from `score_boosted` (floor at 0).
|
|
10
|
+
This prevents a single high-connectivity connector symbol from occupying
|
|
11
|
+
all top-N emergent candidates; genuinely novel cross-repo chains surface
|
|
12
|
+
instead. Affected candidates gain two new output fields:
|
|
13
|
+
`hub_penalty` and `hub_max_symbol_freq`.
|
|
14
|
+
|
|
15
|
+
### fix(forge_metrics): theorem count now reads from build attestation
|
|
16
|
+
|
|
17
|
+
`forge_metrics.py` now reads `dist/BUILD_ATTESTATION_*.json` when the
|
|
18
|
+
file exists, using the machine-verified Lean4 count as the canonical
|
|
19
|
+
source rather than a raw file scan. Count corrected: 886 → 872.
|
|
20
|
+
`forge_metrics.json` updated accordingly with `"basis": "build_attestation"`.
|
|
21
|
+
|
|
22
|
+
### feat(absorb): new `forge absorb` command and supporting a1/a3 modules
|
|
23
|
+
|
|
24
|
+
`harvest_absorb.py` (a1) — pure helpers for absorbing external Python
|
|
25
|
+
repos: layout detection, package resolution, fingerprinting.
|
|
26
|
+
`absorb_feature.py` (a3) — feature composing `harvest_absorb` and
|
|
27
|
+
`emergent_swarm` for cross-repo composition.
|
|
28
|
+
`commands/absorb.py` — CLI command exposing the absorb feature.
|
|
29
|
+
|
|
30
|
+
### fix(mcp_protocol): remove duplicate dict-key lint violations
|
|
31
|
+
|
|
32
|
+
Removed two pre-existing duplicate dict-key entries from `mcp_protocol.py`.
|
|
33
|
+
|
|
5
34
|
## v0.51.6 — 2026-05-07 — sequential cascade: registry fires AFTER PyPI lands
|
|
6
35
|
|
|
7
36
|
v0.51.5 fired release.yml + mcp-registry-publish.yml in parallel. The
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.52.0
|
|
4
4
|
Summary: Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code.
|
|
5
5
|
Author: Atomadic
|
|
6
6
|
License-Expression: BUSL-1.1
|
|
@@ -206,9 +206,9 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
206
206
|
|--------|-------|
|
|
207
207
|
| MCP tools | **10 tools · 64 actions** |
|
|
208
208
|
| CLI verbs | **71** |
|
|
209
|
-
| Source files | **211** (~40,
|
|
210
|
-
| Tests | **1,
|
|
211
|
-
| Lean4 formal proofs | **
|
|
209
|
+
| Source files | **211** (~40,195 LOC) |
|
|
210
|
+
| Tests | **1,495 passing** across **97 test files** (1,411 static · pytest expands parametrize to 1,495 collected) |
|
|
211
|
+
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected mhed-codex moat) |
|
|
212
212
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
213
213
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
214
214
|
| Infrastructure cost | **$5/mo** |
|
|
@@ -174,9 +174,9 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
174
174
|
|--------|-------|
|
|
175
175
|
| MCP tools | **10 tools · 64 actions** |
|
|
176
176
|
| CLI verbs | **71** |
|
|
177
|
-
| Source files | **211** (~40,
|
|
178
|
-
| Tests | **1,
|
|
179
|
-
| Lean4 formal proofs | **
|
|
177
|
+
| Source files | **211** (~40,195 LOC) |
|
|
178
|
+
| Tests | **1,495 passing** across **97 test files** (1,411 static · pytest expands parametrize to 1,495 collected) |
|
|
179
|
+
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected mhed-codex moat) |
|
|
180
180
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
181
181
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
182
182
|
| Infrastructure cost | **$5/mo** |
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# ASS-ADE Commands
|
|
2
|
+
|
|
3
|
+
Auto-generated index. One row per top-level CLI verb.
|
|
4
|
+
|
|
5
|
+
| Verb | Help | Source | Surface |
|
|
6
|
+
|------|------|--------|---------|
|
|
7
|
+
| `absorb` | Absorb any Python repo (crewAI, langgraph, autogen, babyagi, …) into a tier-organized Atomadic package. | `atomadic_forge_seed` | `typer_app` |
|
|
8
|
+
| `audit` | Surface the .atomadic-forge lineage log: list runs, inspect saved manifests, replay history. | `atomadic_forge_seed` | `typer_app` |
|
|
9
|
+
| `chat` | Chat with a Forge-aware AI copilot over optional repo context. | `atomadic_forge_seed` | `typer_app` |
|
|
10
|
+
| `commandsmith` | ``atomadic-forge commandsmith`` — manage the auto-wired CLI command registry. | `atomadic_forge_seed` | `typer_app` |
|
|
11
|
+
| `config` | Configure Atomadic Forge — setup wizard + config management. | `atomadic_forge_seed` | `typer_app` |
|
|
12
|
+
| `create` | One-command pipeline: scan local seed repos for emergent compositions and materialize the top-N into a shippable package. | `atomadic_forge_seed` | `typer_app` |
|
|
13
|
+
| `demo` | One-shot launch-video verb: preset evolve + DEMO.md artifact. | `atomadic_forge_seed` | `typer_app` |
|
|
14
|
+
| `emergent` | Synthesise new feature candidates from existing components. | `atomadic_forge_seed` | `typer_app` |
|
|
15
|
+
| `emergent-swarm` | Round-5: cross-repo emergent composition discovery. Find chains visible only across the union of N repos. | `atomadic_forge_seed` | `typer_app` |
|
|
16
|
+
| `emergent-then-synergy` | Run emergent to emit a JSON artifact, then feed it to synergy for the next phase. | `atomadic_forge_seed` | `typer_app` |
|
|
17
|
+
| `enhancement` | Submit / list / show / publish Forge enhancement proposals — the self-improvement loop. Trust-gated at submission, human-gated at publish. | `atomadic_forge_seed` | `typer_app` |
|
|
18
|
+
| `evolve` | Recursive self-improvement: run iterate N times, each round seeded by the previous round's growing catalog. | `atomadic_forge_seed` | `typer_app` |
|
|
19
|
+
| `evolve-then-iterate` | Run evolve to emit a JSON artifact, then feed it to iterate for the next phase. | `atomadic_forge_seed` | `typer_app` |
|
|
20
|
+
| `feature-then-emergent` | Run any feature, then fan its JSON output into emergent scan to surface novel compositions. | `atomadic_forge_seed` | `typer_app` |
|
|
21
|
+
| `guard-install` | Round-5: install the four-layer architectural guard (pre-commit, CI workflow, CONTRIBUTING note, .forge-guard.json). | `atomadic_forge_seed` | `typer_app` |
|
|
22
|
+
| `handoff` | Capture a structured session handoff so the next agent can pick up where this one left off. Writes JSON to .atomadic-forge/handoffs/<session_id>.json. | `atomadic_forge_seed` | `typer_app` |
|
|
23
|
+
| `harvest` | Round-4: find symbols the target lacks but source repos have. Trust-gated by trust threshold. | `atomadic_forge_seed` | `typer_app` |
|
|
24
|
+
| `hive` | Hive sync pipeline — agent registry + observation + consensus. The 4-agent collaboration substrate. | `atomadic_forge_seed` | `typer_app` |
|
|
25
|
+
| `iterate` | Architecturally-coherent code generation: LLM emits, Forge enforces, loop iterates until certify clears. | `atomadic_forge_seed` | `typer_app` |
|
|
26
|
+
| `materialize` | Turn emergent scan candidates into a shippable Python package (scaffold + features + certify). | `atomadic_forge_seed` | `typer_app` |
|
|
27
|
+
| `metrics` | Emit forge_metrics.json — canonical metrics for README/CHANGELOG/welcome/worker. | `atomadic_forge_seed` | `typer_app` |
|
|
28
|
+
| `recon-swarm` | Round-4: walk N repos, return a unified scout report with origin_repo annotations on every symbol. | `atomadic_forge_seed` | `typer_app` |
|
|
29
|
+
| `relay` | Local relay daemon — receive signed job requests from the Worker MCP and dispatch them through the local CLI. v0.14.0-alpha. | `atomadic_forge_seed` | `typer_app` |
|
|
30
|
+
| `surface` | Emit / check / diff the canonical Forge surface artifact (single source of truth for tools, recipes, schemas). | `atomadic_forge_seed` | `typer_app` |
|
|
31
|
+
| `synergy` | Find feature/CLI synergies (producer-consumer pairs that aren't wired together) and optionally implement adapters. | `atomadic_forge_seed` | `typer_app` |
|
|
32
|
+
| `synergy-then-emergent` | Run synergy to emit a JSON artifact, then feed it to emergent for the next phase. | `atomadic_forge_seed` | `typer_app` |
|
|
33
|
+
| `welcome` | First-call handshake — scout + certify + wire packaged into one response so the agent immediately knows the repo state, top strengths, top priorities, and the single most useful next call. | `atomadic_forge_seed` | `typer_app` |
|
|
34
|
+
| `wisdom` | Record / query / list cross-session wisdom — the institutional knowledge layer between lineage events and curated recipes. | `atomadic_forge_seed` | `typer_app` |
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge absorb`
|
|
2
|
+
|
|
3
|
+
_Absorb any Python repo (crewAI, langgraph, autogen, babyagi, …) into a tier-organized Atomadic package._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.absorb`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge audit`
|
|
2
|
+
|
|
3
|
+
_Surface the .atomadic-forge lineage log: list runs, inspect saved manifests, replay history._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.audit`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge create`
|
|
2
|
+
|
|
3
|
+
_One-command pipeline: scan local seed repos for emergent compositions and materialize the top-N into a shippable package._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.create`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# `atomadic-forge emergent-swarm`
|
|
2
|
+
|
|
3
|
+
_Round-5: cross-repo emergent composition discovery. Find chains visible only across the union of N repos._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.emergent_swarm`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
10
|
+
## Scoring
|
|
11
|
+
|
|
12
|
+
Each candidate receives a `score_boosted` value. Candidates whose most
|
|
13
|
+
frequent constituent symbol appears in more than 3 chains across the
|
|
14
|
+
swarm receive a hub-node penalty: 10 points are deducted from
|
|
15
|
+
`score_boosted` per doubling of that symbol's cross-chain frequency
|
|
16
|
+
above the threshold (floor at 0). This prevents a single high-connectivity
|
|
17
|
+
connector from dominating all top-N slots. Penalised candidates carry
|
|
18
|
+
`hub_penalty` and `hub_max_symbol_freq` in their output.
|
|
19
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge enhancement`
|
|
2
|
+
|
|
3
|
+
_Submit / list / show / publish Forge enhancement proposals — the self-improvement loop. Trust-gated at submission, human-gated at publish._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.enhancement`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge guard-install`
|
|
2
|
+
|
|
3
|
+
_Round-5: install the four-layer architectural guard (pre-commit, CI workflow, CONTRIBUTING note, .forge-guard.json)._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.guard_install`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge handoff`
|
|
2
|
+
|
|
3
|
+
_Capture a structured session handoff so the next agent can pick up where this one left off. Writes JSON to .atomadic-forge/handoffs/<session_id>.json._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.handoff`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge harvest`
|
|
2
|
+
|
|
3
|
+
_Round-4: find symbols the target lacks but source repos have. Trust-gated by trust threshold._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.harvest`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge hive`
|
|
2
|
+
|
|
3
|
+
_Hive sync pipeline — agent registry + observation + consensus. The 4-agent collaboration substrate._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.hive`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge materialize`
|
|
2
|
+
|
|
3
|
+
_Turn emergent scan candidates into a shippable Python package (scaffold + features + certify)._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.materialize`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge recon-swarm`
|
|
2
|
+
|
|
3
|
+
_Round-4: walk N repos, return a unified scout report with origin_repo annotations on every symbol._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.recon_swarm`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge relay`
|
|
2
|
+
|
|
3
|
+
_Local relay daemon — receive signed job requests from the Worker MCP and dispatch them through the local CLI. v0.14.0-alpha._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.relay`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge surface`
|
|
2
|
+
|
|
3
|
+
_Emit / check / diff the canonical Forge surface artifact (single source of truth for tools, recipes, schemas)._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.surface`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge welcome`
|
|
2
|
+
|
|
3
|
+
_First-call handshake — scout + certify + wire packaged into one response so the agent immediately knows the repo state, top strengths, top priorities, and the single most useful next call._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.welcome`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `atomadic-forge wisdom`
|
|
2
|
+
|
|
3
|
+
_Record / query / list cross-session wisdom — the institutional knowledge layer between lineage events and curated recipes._
|
|
4
|
+
|
|
5
|
+
- **Module**: `atomadic_forge.commands.wisdom`
|
|
6
|
+
- **Surface**: `typer_app`
|
|
7
|
+
- **Source root**: `atomadic_forge_seed`
|
|
8
|
+
- **Hidden**: `False`
|
|
9
|
+
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "atomadic-forge"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.52.0"
|
|
8
8
|
description = "Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
{atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py
RENAMED
|
@@ -38,12 +38,17 @@ _LEAN_THEOREM_RE = re.compile(
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
def count_lean_theorems(mhed_codex_root: Path) -> dict[str, Any]:
|
|
41
|
-
"""
|
|
41
|
+
"""Return the certified Lean theorem count for a Codex proof tree.
|
|
42
42
|
|
|
43
43
|
The mhed-corpus repository is IP-protected — this function only
|
|
44
44
|
surfaces aggregate counts to the public artifact. Source paths and
|
|
45
45
|
file names are NEVER returned. Callers must not log the input path.
|
|
46
46
|
|
|
47
|
+
Prefer a build attestation when present: that file is the certified
|
|
48
|
+
proof-tree boundary produced by ``lake build``. A raw ``proofs/`` scan
|
|
49
|
+
is only a fallback for local working trees that have not produced an
|
|
50
|
+
attestation yet; it can overcount scratch or archived Lean files.
|
|
51
|
+
|
|
47
52
|
Args:
|
|
48
53
|
mhed_codex_root: directory containing a ``proofs/`` subtree of
|
|
49
54
|
``.lean`` files. If the directory does not exist or contains
|
|
@@ -54,6 +59,10 @@ def count_lean_theorems(mhed_codex_root: Path) -> dict[str, Any]:
|
|
|
54
59
|
combined), ``theorems``, ``lemmas``, ``files``, ``found``.
|
|
55
60
|
No paths. Counts are always int; never raises on missing path.
|
|
56
61
|
"""
|
|
62
|
+
attested = _count_lean_theorems_from_attestation(Path(mhed_codex_root))
|
|
63
|
+
if attested is not None:
|
|
64
|
+
return attested
|
|
65
|
+
|
|
57
66
|
proofs_dir = Path(mhed_codex_root) / "proofs"
|
|
58
67
|
if not proofs_dir.is_dir():
|
|
59
68
|
return {
|
|
@@ -78,6 +87,61 @@ def count_lean_theorems(mhed_codex_root: Path) -> dict[str, Any]:
|
|
|
78
87
|
"lemmas": lemmas,
|
|
79
88
|
"files": len(files),
|
|
80
89
|
"found": True,
|
|
90
|
+
"basis": "raw_proofs_scan",
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _count_lean_theorems_from_attestation(
|
|
95
|
+
mhed_codex_root: Path,
|
|
96
|
+
) -> dict[str, Any] | None:
|
|
97
|
+
"""Read the newest build attestation if one exists.
|
|
98
|
+
|
|
99
|
+
Returns only aggregate fields safe for ``forge_metrics.json``. The
|
|
100
|
+
per-module hashes; those are deliberately not copied into Forge's public
|
|
101
|
+
metrics surface. The aggregate proof-tree hash is public-safe and lets
|
|
102
|
+
downstream agents verify the exact attested boundary.
|
|
103
|
+
"""
|
|
104
|
+
dist_dir = Path(mhed_codex_root) / "dist"
|
|
105
|
+
if not dist_dir.is_dir():
|
|
106
|
+
return None
|
|
107
|
+
attestations = sorted(dist_dir.glob("BUILD_ATTESTATION_*.json"))
|
|
108
|
+
if not attestations:
|
|
109
|
+
return None
|
|
110
|
+
try:
|
|
111
|
+
data = json.loads(attestations[-1].read_text(encoding="utf-8"))
|
|
112
|
+
except (OSError, UnicodeDecodeError, json.JSONDecodeError):
|
|
113
|
+
return None
|
|
114
|
+
totals = data.get("totals")
|
|
115
|
+
if not isinstance(totals, dict):
|
|
116
|
+
return None
|
|
117
|
+
try:
|
|
118
|
+
count = int(totals["theorems_and_lemmas"])
|
|
119
|
+
sorry = int(totals.get("sorry", 0))
|
|
120
|
+
admit = int(totals.get("admit", 0))
|
|
121
|
+
modules = int(totals.get("modules", 0))
|
|
122
|
+
agent_rule_axioms = int(totals.get("agent_rule_axioms", 0))
|
|
123
|
+
free_parameters = int(totals.get("free_parameters_fit_to_data", 0))
|
|
124
|
+
except (KeyError, TypeError, ValueError):
|
|
125
|
+
return None
|
|
126
|
+
proof_tree = data.get("proof_tree")
|
|
127
|
+
proof_hash = ""
|
|
128
|
+
if isinstance(proof_tree, dict):
|
|
129
|
+
proof_hash = str(proof_tree.get("sha256_of_sorted_module_hashes", ""))
|
|
130
|
+
return {
|
|
131
|
+
"count": count,
|
|
132
|
+
"theorems": count,
|
|
133
|
+
"lemmas": 0,
|
|
134
|
+
"files": modules,
|
|
135
|
+
"modules": modules,
|
|
136
|
+
"sorry": sorry,
|
|
137
|
+
"admit": admit,
|
|
138
|
+
"agent_rule_axioms": agent_rule_axioms,
|
|
139
|
+
"free_parameters_fit_to_data": free_parameters,
|
|
140
|
+
"found": True,
|
|
141
|
+
"basis": "build_attestation",
|
|
142
|
+
"attestation_issued_at": str(data.get("issued_at", "")),
|
|
143
|
+
"proof_tree_hash": proof_hash,
|
|
144
|
+
"lake_build_status": str(data.get("lake_build_status", "")),
|
|
81
145
|
}
|
|
82
146
|
|
|
83
147
|
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"""Tier a1 — pure helpers for the absorb-any-repo pipeline."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import hashlib
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
_TIER_DIR_NAMES = (
|
|
9
|
+
"a0_qk_constants",
|
|
10
|
+
"a1_at_functions",
|
|
11
|
+
"a2_mo_composites",
|
|
12
|
+
"a3_og_features",
|
|
13
|
+
"a4_sy_orchestration",
|
|
14
|
+
)
|
|
15
|
+
_SKIP_DIRS = frozenset({
|
|
16
|
+
".git", ".github", ".venv", "venv", "env", ".env",
|
|
17
|
+
"__pycache__", ".pytest_cache", ".ruff_cache", ".mypy_cache",
|
|
18
|
+
"node_modules", "dist", "build", ".tox", "htmlcov",
|
|
19
|
+
".atomadic-forge", "eggs", ".eggs",
|
|
20
|
+
"tests", "test", "testing", "benchmarks",
|
|
21
|
+
"examples", "scripts", "tools", "fixtures", "conftest",
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class RepoLayout(str):
|
|
26
|
+
ATOMADIC_TIER = "atomadic_tier"
|
|
27
|
+
SRC_LAYOUT = "src_layout"
|
|
28
|
+
MONOREPO_LIB = "monorepo_lib"
|
|
29
|
+
MULTI_LIB = "multi_lib"
|
|
30
|
+
FLAT = "flat"
|
|
31
|
+
UNKNOWN = "unknown"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclass(frozen=True)
|
|
35
|
+
class ResolvedRepo:
|
|
36
|
+
src_root: Path
|
|
37
|
+
package_name: str
|
|
38
|
+
layout: str
|
|
39
|
+
repo_root: Path
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _has_tier_folders(p: Path) -> bool:
|
|
43
|
+
return any((p / n).is_dir() for n in _TIER_DIR_NAMES)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _is_python_package(p: Path) -> bool:
|
|
47
|
+
return p.is_dir() and (p / "__init__.py").is_file()
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _find_packages_under(root: Path, max_depth: int = 3) -> list[Path]:
|
|
51
|
+
results: list[Path] = []
|
|
52
|
+
|
|
53
|
+
def _walk(p: Path, depth: int) -> None:
|
|
54
|
+
if depth > max_depth or p.name in _SKIP_DIRS:
|
|
55
|
+
return
|
|
56
|
+
if _is_python_package(p):
|
|
57
|
+
results.append(p)
|
|
58
|
+
return
|
|
59
|
+
for c in sorted(p.iterdir()):
|
|
60
|
+
if c.is_dir() and c.name not in _SKIP_DIRS:
|
|
61
|
+
_walk(c, depth + 1)
|
|
62
|
+
|
|
63
|
+
_walk(root, 0)
|
|
64
|
+
return results
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _rank_packages(pkgs: list[Path]) -> list[Path]:
|
|
68
|
+
def _score(p: Path) -> tuple[int, int]:
|
|
69
|
+
n = p.name.lower()
|
|
70
|
+
pen = n.endswith(("_cli", "_test", "_tests", "_bench", "_example"))
|
|
71
|
+
return (0 if pen else 1, len(list(p.rglob("*.py"))))
|
|
72
|
+
|
|
73
|
+
return sorted(pkgs, key=_score, reverse=True)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def classify_repo_layout(repo_root: Path | str) -> str:
|
|
77
|
+
p = Path(repo_root).resolve()
|
|
78
|
+
if _has_tier_folders(p):
|
|
79
|
+
return RepoLayout.ATOMADIC_TIER
|
|
80
|
+
src = p / "src"
|
|
81
|
+
if src.is_dir() and _find_packages_under(src, 1):
|
|
82
|
+
return RepoLayout.SRC_LAYOUT
|
|
83
|
+
lib = p / "lib"
|
|
84
|
+
if lib.is_dir() and _find_packages_under(lib, 3):
|
|
85
|
+
return RepoLayout.MONOREPO_LIB
|
|
86
|
+
libs = p / "libs"
|
|
87
|
+
if libs.is_dir() and _find_packages_under(libs, 2):
|
|
88
|
+
return RepoLayout.MULTI_LIB
|
|
89
|
+
if any(_is_python_package(c) for c in p.iterdir()):
|
|
90
|
+
return RepoLayout.FLAT
|
|
91
|
+
return RepoLayout.UNKNOWN
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def resolve_any_python_package(repo_root: Path | str) -> ResolvedRepo:
|
|
95
|
+
p = Path(repo_root).resolve()
|
|
96
|
+
if not p.exists():
|
|
97
|
+
raise ValueError(f"repo does not exist: {p}")
|
|
98
|
+
layout = classify_repo_layout(p)
|
|
99
|
+
if layout == RepoLayout.ATOMADIC_TIER:
|
|
100
|
+
return ResolvedRepo(src_root=p, package_name=p.name, layout=layout, repo_root=p)
|
|
101
|
+
if layout == RepoLayout.SRC_LAYOUT:
|
|
102
|
+
pkgs = _find_packages_under(p / "src", 1)
|
|
103
|
+
if pkgs:
|
|
104
|
+
return ResolvedRepo(
|
|
105
|
+
src_root=pkgs[0], package_name=pkgs[0].name, layout=layout, repo_root=p
|
|
106
|
+
)
|
|
107
|
+
if layout == RepoLayout.MONOREPO_LIB:
|
|
108
|
+
pkgs = _find_packages_under(p / "lib", 4)
|
|
109
|
+
if pkgs:
|
|
110
|
+
best = _rank_packages(pkgs)[0]
|
|
111
|
+
return ResolvedRepo(
|
|
112
|
+
src_root=best, package_name=best.name, layout=layout, repo_root=p
|
|
113
|
+
)
|
|
114
|
+
if layout == RepoLayout.MULTI_LIB:
|
|
115
|
+
pkgs = _find_packages_under(p / "libs", 3)
|
|
116
|
+
if pkgs:
|
|
117
|
+
best = _rank_packages(pkgs)[0]
|
|
118
|
+
return ResolvedRepo(
|
|
119
|
+
src_root=best, package_name=best.name, layout=layout, repo_root=p
|
|
120
|
+
)
|
|
121
|
+
if layout == RepoLayout.FLAT:
|
|
122
|
+
pkgs = [c for c in p.iterdir() if _is_python_package(c) and c.name not in _SKIP_DIRS]
|
|
123
|
+
if pkgs:
|
|
124
|
+
best = max(pkgs, key=lambda x: len(list(x.rglob("*.py"))))
|
|
125
|
+
return ResolvedRepo(
|
|
126
|
+
src_root=best, package_name=best.name, layout=layout, repo_root=p
|
|
127
|
+
)
|
|
128
|
+
all_pkgs = _find_packages_under(p, 5)
|
|
129
|
+
if all_pkgs:
|
|
130
|
+
best = _rank_packages(all_pkgs)[0]
|
|
131
|
+
return ResolvedRepo(
|
|
132
|
+
src_root=best, package_name=best.name, layout=RepoLayout.UNKNOWN, repo_root=p
|
|
133
|
+
)
|
|
134
|
+
raise ValueError(
|
|
135
|
+
f"could not resolve a Python package under {p} (layout={layout}). "
|
|
136
|
+
"Ensure the repo contains at least one directory with __init__.py."
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def build_swarm_repo_specs(repo_paths: list[Path | str]) -> list[dict]:
|
|
141
|
+
specs = []
|
|
142
|
+
for path in repo_paths:
|
|
143
|
+
try:
|
|
144
|
+
r = resolve_any_python_package(path)
|
|
145
|
+
specs.append({
|
|
146
|
+
"src_root": str(r.src_root),
|
|
147
|
+
"package": r.package_name,
|
|
148
|
+
"layout": r.layout,
|
|
149
|
+
"repo_root": str(r.repo_root),
|
|
150
|
+
})
|
|
151
|
+
except ValueError as e:
|
|
152
|
+
specs.append({
|
|
153
|
+
"src_root": str(path),
|
|
154
|
+
"package": Path(path).name,
|
|
155
|
+
"layout": RepoLayout.UNKNOWN,
|
|
156
|
+
"repo_root": str(path),
|
|
157
|
+
"error": str(e),
|
|
158
|
+
})
|
|
159
|
+
return specs
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def fingerprint_repo(repo_root: Path | str) -> str:
|
|
163
|
+
p = Path(repo_root).resolve()
|
|
164
|
+
parts: list[str] = []
|
|
165
|
+
for f in sorted(p.rglob("*.py")):
|
|
166
|
+
try:
|
|
167
|
+
parts.append(f"{f.relative_to(p)}:{f.stat().st_size}")
|
|
168
|
+
except OSError:
|
|
169
|
+
continue
|
|
170
|
+
return hashlib.sha256("\n".join(parts[:500]).encode()).hexdigest()[:12]
|
{atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py
RENAMED
|
@@ -3199,12 +3199,6 @@ _CLI_FALLBACKS: dict[str, str] = {
|
|
|
3199
3199
|
"forge emergent scan <repo> --json — use explore(action=scan) via MCP | "
|
|
3200
3200
|
"forge emergent swarm --json — use explore(action=swarm) via MCP"
|
|
3201
3201
|
),
|
|
3202
|
-
# legacy names — transmute absorbed into plan in v0.39.0
|
|
3203
|
-
"transmute": (
|
|
3204
|
-
"forge auto <output> --apply — use plan(action=auto) via MCP | "
|
|
3205
|
-
"forge cherry [--pick ...] — use plan(action=cherry) via MCP | "
|
|
3206
|
-
"forge finalize <output> --apply — use plan(action=finalize) via MCP"
|
|
3207
|
-
),
|
|
3208
3202
|
"code_intel": (
|
|
3209
3203
|
"forge call-graph <qualname> --project-root <repo> --json — use explore(action=call_graph) via MCP | "
|
|
3210
3204
|
"forge smell-scan --project-root <repo> --json — use explore(action=smell_scan) via MCP"
|
|
@@ -3227,13 +3221,6 @@ _CLI_FALLBACKS: dict[str, str] = {
|
|
|
3227
3221
|
),
|
|
3228
3222
|
# legacy names — tool_factory absorbed into plan(action=scaffold) in v0.41.0
|
|
3229
3223
|
"tool_factory": "MCP-only: tool_factory — use plan(action=scaffold) via MCP",
|
|
3230
|
-
# legacy names — loop absorbed into plan in v0.39.0
|
|
3231
|
-
"loop": (
|
|
3232
|
-
"forge iterate run --intent '...' --output <dir> — use plan(action=iterate) via MCP | "
|
|
3233
|
-
"MCP-only: plan(action=resume) | "
|
|
3234
|
-
"forge evolve run --intent '...' --output <dir> — use plan(action=evolve) via MCP | "
|
|
3235
|
-
"MCP-only: plan(action=evolve_step)"
|
|
3236
|
-
),
|
|
3237
3224
|
"lineage": "forge surface list/show/log — use explore(action=lineage) via MCP",
|
|
3238
3225
|
"hive": (
|
|
3239
3226
|
"forge hive register --agent-name <name> --role <role> --json (action=register) | "
|