atomadic-forge 0.53.0__tar.gz → 0.54.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.53.0/src/atomadic_forge.egg-info → atomadic_forge-0.54.0}/PKG-INFO +10 -8
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/README.md +9 -7
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/AGENTS_GUIDE.md +7 -1
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/COMMANDS.md +22 -2
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/pyproject.toml +1 -1
- atomadic_forge-0.54.0/src/atomadic_forge/a1_at_functions/capability_scout.py +142 -0
- atomadic_forge-0.54.0/src/atomadic_forge/a1_at_functions/dead_code_check.py +160 -0
- atomadic_forge-0.54.0/src/atomadic_forge/a1_at_functions/harvest_concept_bridge.py +222 -0
- atomadic_forge-0.54.0/src/atomadic_forge/a1_at_functions/maintainability_index.py +181 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +139 -6
- atomadic_forge-0.54.0/src/atomadic_forge/a1_at_functions/surface_gap_check.py +186 -0
- atomadic_forge-0.54.0/src/atomadic_forge/a1_at_functions/wire_stubs_gen.py +239 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +221 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0/src/atomadic_forge.egg-info}/PKG-INFO +10 -8
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge.egg-info/SOURCES.txt +12 -0
- atomadic_forge-0.54.0/tests/test_capability_scout.py +84 -0
- atomadic_forge-0.54.0/tests/test_dead_code_check.py +88 -0
- atomadic_forge-0.54.0/tests/test_harvest_concept_bridge.py +87 -0
- atomadic_forge-0.54.0/tests/test_maintainability_index.py +64 -0
- atomadic_forge-0.54.0/tests/test_surface_gap_check.py +78 -0
- atomadic_forge-0.54.0/tests/test_wire_stubs_gen.py +63 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/FUNDING.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/customer-refactor.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/mcp-registry-publish.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/metrics-auto-regen.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/metrics-drift.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/publish-on-tag.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/release-readiness.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/surface-drift.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/.github/workflows/uptime.yml +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/CHANGELOG.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/LICENSE +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/MANIFEST.in +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/SECURITY.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/02-commands.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/05-faq.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/CI_CD.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/FIRST_10_MINUTES.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/FORMALIZATION.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/HIVE_PRIMITIVES.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/HIVE_STATUS.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/IDE_INTEGRATION.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/MIGRATION.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/PROVIDERS.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/README.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/RECEIPT.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/RELAY_PROTOCOL.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/WORLD_COLLISION.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/INDEX.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/absorb.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/audit.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/config.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/create.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/emergent-swarm.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/enhancement.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/guard-install.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/handoff.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/harvest.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/hive.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/materialize.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/metrics.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/recon-swarm.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/relay.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/surface.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/welcome.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/commands/wisdom.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/setup.cfg +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/__init__.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/git_churn.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.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.53.0 → atomadic_forge-0.54.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.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/_registry.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/absorb.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/create.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/enhancement.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/guard_install.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/handoff.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/harvest.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/hive.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/materialize.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/metrics.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/relay.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/surface.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/welcome.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge/commands/wisdom.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_agent_hire_protocol.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_agent_plan_pkg_label.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_call_graph_summary.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_card_renderer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_chat.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_classify_tier_ast_signals.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_cli_smoke.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_cli_swarm_aliases.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_codex_5_complete.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_compliance_checker.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_config.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_copilots_copilot.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_create_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_cs1_renderer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_custom_provider.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_dedup_engine.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_demo.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_emergent_synthesize_imports.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_enhancement_proposal.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_evolve_js.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_git_churn.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_handoff.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_hierarchical_memory.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_hive_sync.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_ling_provider.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_materialize_feature.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_mcp_protocol.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_nexus_bridge.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_polyglot_cli_mcp.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_polyglot_full_pipeline.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_polyglot_hardening.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_polyglot_symbol_parity.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_response_enricher.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_sbom_cmd_text_summary.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_smell_score_formula.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_stub_detector.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_surface_export.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_synergy.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_verify_suggested_recipe.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_welcome.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_welcome_enhancements.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_wire_suggest_repairs.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_wire_type_checking.py +0 -0
- {atomadic_forge-0.53.0 → atomadic_forge-0.54.0}/tests/test_wisdom.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.54.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
|
|
@@ -136,6 +136,8 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
136
136
|
|---------|-------------|
|
|
137
137
|
| `forge smell` | Code smell scan: cyclomatic complexity, long functions, duplicates |
|
|
138
138
|
| `forge call-graph` | AST call graph for any symbol |
|
|
139
|
+
| `forge call-graph-summary` | Whole-package call-graph portfolio — orphans, fan-in hotspots, max depth |
|
|
140
|
+
| `forge churn` | File-level git commit frequency — hotspot and stable files |
|
|
139
141
|
| `forge cna-check` | Compose-Not-Add — flag duplicates before writing |
|
|
140
142
|
| `forge trust-gate` | LLM response hallucination detector |
|
|
141
143
|
| `forge preflight` | Pre-edit guardrail: tier + import + scope check |
|
|
@@ -158,7 +160,7 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
158
160
|
| `forge plan` | Bounded execution plan with risk + rollback |
|
|
159
161
|
| `forge chat` | Terminal copilot over forge docs |
|
|
160
162
|
|
|
161
|
-
**
|
|
163
|
+
**74 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
|
|
162
164
|
|
|
163
165
|
---
|
|
164
166
|
|
|
@@ -177,12 +179,12 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
|
|
|
177
179
|
}
|
|
178
180
|
```
|
|
179
181
|
|
|
180
|
-
**10 tools,
|
|
182
|
+
**10 tools, 66 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
|
|
181
183
|
|
|
182
184
|
| Tool | Actions | What it does |
|
|
183
185
|
|------|---------|-------------|
|
|
184
186
|
| `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
|
|
185
|
-
| `explore` |
|
|
187
|
+
| `explore` | 11 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn |
|
|
186
188
|
| `audit` | 14 | Quality gates, change safety, trust |
|
|
187
189
|
| `plan` | 9 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold |
|
|
188
190
|
| `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
|
|
@@ -204,10 +206,10 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
204
206
|
|
|
205
207
|
| Metric | Value |
|
|
206
208
|
|--------|-------|
|
|
207
|
-
| MCP tools | **10 tools ·
|
|
208
|
-
| CLI verbs | **
|
|
209
|
+
| MCP tools | **10 tools · 66 actions** |
|
|
210
|
+
| CLI verbs | **74** |
|
|
209
211
|
| Source files | **211** (~40,195 LOC) |
|
|
210
|
-
| Tests | **1,
|
|
212
|
+
| Tests | **1,423 passing** across **97 test files** |
|
|
211
213
|
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected formal verification moat) |
|
|
212
214
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
213
215
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
@@ -225,7 +227,7 @@ Forge eats its own cooking. Every CI run scores itself.
|
|
|
225
227
|
|------|-------|-------------|
|
|
226
228
|
| **Free** | $0 | OSS, 25 calls/day, read-only tools |
|
|
227
229
|
| **One-Time Refactor** | ~~$149~~ **$99** | We run `auto` on your repo -> PR targeting 100/100. One revision included. |
|
|
228
|
-
| **Starter** | $79/mo | All
|
|
230
|
+
| **Starter** | $79/mo | All 10 tools (66 actions), 5k calls/mo, signed receipts, custom recipes |
|
|
229
231
|
| **Pro** | $249/mo | + notarization, compliance attestations, cross-repo telemetry |
|
|
230
232
|
| **Founding Member** | $999/yr | Everything. Forever. First 25 only. |
|
|
231
233
|
| **Enterprise** | Custom | BSL commercial license, SSO, self-host, SLA |
|
|
@@ -104,6 +104,8 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
104
104
|
|---------|-------------|
|
|
105
105
|
| `forge smell` | Code smell scan: cyclomatic complexity, long functions, duplicates |
|
|
106
106
|
| `forge call-graph` | AST call graph for any symbol |
|
|
107
|
+
| `forge call-graph-summary` | Whole-package call-graph portfolio — orphans, fan-in hotspots, max depth |
|
|
108
|
+
| `forge churn` | File-level git commit frequency — hotspot and stable files |
|
|
107
109
|
| `forge cna-check` | Compose-Not-Add — flag duplicates before writing |
|
|
108
110
|
| `forge trust-gate` | LLM response hallucination detector |
|
|
109
111
|
| `forge preflight` | Pre-edit guardrail: tier + import + scope check |
|
|
@@ -126,7 +128,7 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
126
128
|
| `forge plan` | Bounded execution plan with risk + rollback |
|
|
127
129
|
| `forge chat` | Terminal copilot over forge docs |
|
|
128
130
|
|
|
129
|
-
**
|
|
131
|
+
**74 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
|
|
130
132
|
|
|
131
133
|
---
|
|
132
134
|
|
|
@@ -145,12 +147,12 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
|
|
|
145
147
|
}
|
|
146
148
|
```
|
|
147
149
|
|
|
148
|
-
**10 tools,
|
|
150
|
+
**10 tools, 66 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
|
|
149
151
|
|
|
150
152
|
| Tool | Actions | What it does |
|
|
151
153
|
|------|---------|-------------|
|
|
152
154
|
| `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
|
|
153
|
-
| `explore` |
|
|
155
|
+
| `explore` | 11 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn |
|
|
154
156
|
| `audit` | 14 | Quality gates, change safety, trust |
|
|
155
157
|
| `plan` | 9 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold |
|
|
156
158
|
| `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
|
|
@@ -172,10 +174,10 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
172
174
|
|
|
173
175
|
| Metric | Value |
|
|
174
176
|
|--------|-------|
|
|
175
|
-
| MCP tools | **10 tools ·
|
|
176
|
-
| CLI verbs | **
|
|
177
|
+
| MCP tools | **10 tools · 66 actions** |
|
|
178
|
+
| CLI verbs | **74** |
|
|
177
179
|
| Source files | **211** (~40,195 LOC) |
|
|
178
|
-
| Tests | **1,
|
|
180
|
+
| Tests | **1,423 passing** across **97 test files** |
|
|
179
181
|
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected formal verification moat) |
|
|
180
182
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
181
183
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
@@ -193,7 +195,7 @@ Forge eats its own cooking. Every CI run scores itself.
|
|
|
193
195
|
|------|-------|-------------|
|
|
194
196
|
| **Free** | $0 | OSS, 25 calls/day, read-only tools |
|
|
195
197
|
| **One-Time Refactor** | ~~$149~~ **$99** | We run `auto` on your repo -> PR targeting 100/100. One revision included. |
|
|
196
|
-
| **Starter** | $79/mo | All
|
|
198
|
+
| **Starter** | $79/mo | All 10 tools (66 actions), 5k calls/mo, signed receipts, custom recipes |
|
|
197
199
|
| **Pro** | $249/mo | + notarization, compliance attestations, cross-repo telemetry |
|
|
198
200
|
| **Founding Member** | $999/yr | Everything. Forever. First 25 only. |
|
|
199
201
|
| **Enterprise** | Custom | BSL commercial license, SSO, self-host, SLA |
|
|
@@ -326,6 +326,8 @@ agent tool-selection can route by trigger phrase. Quick reference:
|
|
|
326
326
|
| An LLM response needs hallucination checking | `trust_gate_response` |
|
|
327
327
|
| A module's docstring promises need verification | `verify {check_exports: true}` (folds `exported_api_check`) |
|
|
328
328
|
| You want to find what a target symbol calls or is called by | `call_graph` |
|
|
329
|
+
| You want a whole-package call-graph portfolio (orphans, hotspots, max depth) | `call_graph_summary` — `explore(action='call_graph_summary')` |
|
|
330
|
+
| You want file-level git commit frequency (churn hotspots and stable files) | `churn` — `explore(action='churn')` |
|
|
329
331
|
| You want to flag complexity / long-function / duplicate-body code smells | `smell_scan` |
|
|
330
332
|
| You want to recall what prior agents learned about this repo | `wisdom recall` (or read `prior_wisdom` from `recon`) |
|
|
331
333
|
| You want to record a lesson for future agents | `wisdom record` |
|
|
@@ -357,6 +359,8 @@ agent tool-selection can route by trigger phrase. Quick reference:
|
|
|
357
359
|
| `sidecar_validate` | | `trust_gate_response` | |
|
|
358
360
|
| `manifest_diff` | | `cna_check` (compose-not-add gate) | |
|
|
359
361
|
| `call_graph` (callers/callees) | | `smell_scan` (CC / LOC / dup) | |
|
|
362
|
+
| `call_graph_summary` (portfolio: orphans/hotspots) | | | |
|
|
363
|
+
| `churn` (git commit frequency by file) | | | |
|
|
360
364
|
| `wisdom_record` / `wisdom_query` / `wisdom_list` / `wisdom_recall` / `wisdom_promote` (since v0.13.1–v0.13.3) | | `guard_install` (4-layer immune system) | |
|
|
361
365
|
| `surface` (emit / check / diff) | | | |
|
|
362
366
|
| `nexus_identity_verify` / `nexus_federation_mint` / `nexus_authorize_action` / `nexus_sys_trust_gate` / `nexus_contract_verify` / `nexus_lineage_record` / `nexus_ratchet_register` (since v0.14.0a7) | | | |
|
|
@@ -379,6 +383,8 @@ in a loop:
|
|
|
379
383
|
| **`sidecar_validate`** | sidecar drift findings (S0000–S0007) | After authoring or editing a `.forge` sidecar file. |
|
|
380
384
|
| **`manifest_diff`** | added / removed / changed entries between two manifests | After a `commandsmith` sync or between two `certify` runs to track trajectory. |
|
|
381
385
|
| **`call_graph`** | callers / callees up to `max_depth` hops (BFS, AST-based) | Before mutating a target symbol; closes Forge's call-graph gap vs Code Pathfinder / Moderne. |
|
|
386
|
+
| **`call_graph_summary`** (`explore(action='call_graph_summary')`) | whole-package call-graph portfolio: `orphans` (unreachable symbols), `hotspots` ranked by fan-in, `max_depth`; schema `atomadic-forge.call_graph_summary/v1` | When you need a portfolio view of the entire package's call topology — which symbols are islands, which are load-bearing. CLI: `forge call-graph-summary --project <root> [--package NAME] [--top-n N] [--json]`. |
|
|
387
|
+
| **`churn`** (`explore(action='churn')`) | file-level git commit frequency: `hotspot_files`, `stable_files`, `avg_commits`, `median_commits`, `date_range`; schema `atomadic-forge.git_churn/v1` | When you want to know which files change most often (high review priority) and which are stable (safe to refactor). CLI: `forge churn --project <root> [--since '6 months ago'] [--top-n N] [--all-files] [--json]`. |
|
|
382
388
|
| **`smell_scan`** | cyclomatic-complexity / long-function / duplicate-body findings + `smell_score` | When `certify` is green but maintainability is still suspect. |
|
|
383
389
|
| **`wisdom_record` / `wisdom_query` / `wisdom_list` / `wisdom_recall`** (since v0.13.1) | append entry / relevance-rank / full DB read / top-N repo-scoped recall against `.atomadic-forge/wisdom.jsonl` | Agents inherit prior lessons (`wisdom_recall`); record new ones after accepted fixes (`wisdom_record`). The 4-tool MCP surface that lets Cognition wire `WISDOM_RECORD` as a cycle action verb. |
|
|
384
390
|
| **`surface`** | emit / check / diff the canonical `surface.json` artifact | CI gate (`check`) and consumer bootstrap (`emit`); zero hand-maintained tool maps. |
|
|
@@ -397,7 +403,7 @@ always-on senior engineer beside the coding agent:
|
|
|
397
403
|
|
|
398
404
|
| Tool | Schema | Call when |
|
|
399
405
|
|---|---|---|
|
|
400
|
-
| **`context_pack`** ← *Codex-4* | `context_pack/v1` — repo purpose, pinned 5-tier law, tier_map, blockers digest, best-next-action, detected test commands, release gate, risky files, recent lineage, pinned `forge://` resources, **`prior_wisdom`** | **First call after `initialize`** — orientation bundle. One round-trip replaces 6+ separate calls. |
|
|
406
|
+
| **`context_pack`** ← *Codex-4* | `context_pack/v1` — repo purpose, pinned 5-tier law, tier_map, blockers digest, best-next-action, detected test commands, release gate, risky files, recent lineage, pinned `forge://` resources, **`prior_wisdom`**, **`token_estimate`** (payload byte length ÷ 4) | **First call after `initialize`** — orientation bundle. One round-trip replaces 6+ separate calls. Use `token_estimate` to size the payload before inserting into a context window. |
|
|
401
407
|
| **`doctor` (with `include_worktree: true`)** | `doctor/v1` + worktree fields — git root, branch, upstream drift, dirty files, remotes, version surfaces, resolved `forge` command, stale-command detection, recommendations (folds the retired `worktree_status`) | **Before editing or release work** when there are multiple checkouts, stale MCP concerns, dirty trees, or version mismatches. |
|
|
402
408
|
| **`preflight_change`** ← *Codex-4* | `preflight/v1` — per file: detected_tier, forbidden_imports, likely_tests, siblings_to_read; overall write_scope_too_broad flag | **Before** every `WriteFile` / `Edit`. Verdict `REFINE` when scope > 8 files. |
|
|
403
409
|
| **`score_patch`** ← *Codex-4* | `patch_score/v1` — architectural_risk, public_api_risk, release_risk, test_risk, `needs_human_review`, suggested validation commands | **After** drafting a unified-diff but **before** applying. |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Atomadic Forge — Command Reference
|
|
2
2
|
|
|
3
|
-
All verbs available in the `forge` CLI as of 0.
|
|
3
|
+
All verbs available in the `forge` CLI as of 0.53.0.
|
|
4
4
|
|
|
5
5
|
> For the structured per-verb reference (with options, examples, and
|
|
6
6
|
> output samples), see [02-commands.md](02-commands.md). This page is
|
|
@@ -494,7 +494,7 @@ Prints the installed Forge version and exits 0. Hardened in v0.3.0
|
|
|
494
494
|
|
|
495
495
|
```bash
|
|
496
496
|
$ forge --version
|
|
497
|
-
atomadic-forge 0.
|
|
497
|
+
atomadic-forge 0.53.0
|
|
498
498
|
```
|
|
499
499
|
|
|
500
500
|
### `.forge` sidecars — Lane D W8
|
|
@@ -788,6 +788,26 @@ Auto-register, document, and smoke-test every CLI command. Use after
|
|
|
788
788
|
|
|
789
789
|
Environment diagnostic — version, Python, encoding, executable.
|
|
790
790
|
|
|
791
|
+
### `forge call-graph-summary`
|
|
792
|
+
|
|
793
|
+
Whole-package call-graph portfolio using pyan synthesis. Returns orphans (symbols with no callers), hotspots ranked by fan-in, and maximum call depth across the package.
|
|
794
|
+
|
|
795
|
+
```bash
|
|
796
|
+
forge call-graph-summary --project <root> [--package NAME] [--top-n N] [--json]
|
|
797
|
+
```
|
|
798
|
+
|
|
799
|
+
Schema: `atomadic-forge.call_graph_summary/v1`. MCP: `explore(action='call_graph_summary')`. a1 source: `a1_at_functions/call_graph.py` → `build_call_graph_summary()`.
|
|
800
|
+
|
|
801
|
+
### `forge churn`
|
|
802
|
+
|
|
803
|
+
File-level git commit frequency via Repomix synthesis. Returns `hotspot_files`, `stable_files`, `avg_commits`, `median_commits`, and the date range analyzed.
|
|
804
|
+
|
|
805
|
+
```bash
|
|
806
|
+
forge churn --project <root> [--since '6 months ago'] [--top-n N] [--all-files] [--json]
|
|
807
|
+
```
|
|
808
|
+
|
|
809
|
+
Schema: `atomadic-forge.git_churn/v1`. MCP: `explore(action='churn')`. a1 source: `a1_at_functions/git_churn.py` → `compute_git_churn()`.
|
|
810
|
+
|
|
791
811
|
## LLM provider matrix
|
|
792
812
|
|
|
793
813
|
| Provider | Cost | Env var | Default model | Notes |
|
|
@@ -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.54.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"
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"""Tier a1 — capability scout: search GitHub for harvest-worthy repositories.
|
|
2
|
+
|
|
3
|
+
Bridges the gap between "I want a capability" and "here are repos to harvest."
|
|
4
|
+
Uses the GitHub Search API (no auth needed for basic search) plus heuristic
|
|
5
|
+
ranking on stars, freshness, and Python relevance.
|
|
6
|
+
|
|
7
|
+
Pure: no writes. HTTP via urllib stdlib only. Returns a graceful error dict
|
|
8
|
+
if the network is unavailable.
|
|
9
|
+
"""
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
import time
|
|
14
|
+
import urllib.error
|
|
15
|
+
import urllib.parse
|
|
16
|
+
import urllib.request
|
|
17
|
+
from typing import Any
|
|
18
|
+
|
|
19
|
+
SCHEMA_VERSION_CAPABILITY_SCOUT_V1 = "atomadic-forge.capability_scout/v1"
|
|
20
|
+
|
|
21
|
+
_GITHUB_SEARCH = "https://api.github.com/search/repositories"
|
|
22
|
+
_USER_AGENT = "atomadic-forge-capability-scout/0.1"
|
|
23
|
+
_RATE_DELAY = 1.2 # seconds between GitHub API calls (unauthenticated: 10/min)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _gh_search(query: str, per_page: int = 10) -> list[dict]:
|
|
27
|
+
params = urllib.parse.urlencode({
|
|
28
|
+
"q": query,
|
|
29
|
+
"sort": "stars",
|
|
30
|
+
"order": "desc",
|
|
31
|
+
"per_page": per_page,
|
|
32
|
+
})
|
|
33
|
+
url = f"{_GITHUB_SEARCH}?{params}"
|
|
34
|
+
req = urllib.request.Request(url, headers={"User-Agent": _USER_AGENT,
|
|
35
|
+
"Accept": "application/vnd.github.v3+json"})
|
|
36
|
+
try:
|
|
37
|
+
with urllib.request.urlopen(req, timeout=10) as resp:
|
|
38
|
+
data = json.loads(resp.read().decode())
|
|
39
|
+
return data.get("items", [])
|
|
40
|
+
except (urllib.error.URLError, urllib.error.HTTPError, OSError, json.JSONDecodeError):
|
|
41
|
+
return []
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _score_item(item: dict, query: str) -> float:
|
|
45
|
+
"""Heuristic harvest-confidence score 0-100."""
|
|
46
|
+
stars = item.get("stargazers_count", 0)
|
|
47
|
+
lang = (item.get("language") or "").lower()
|
|
48
|
+
description = (item.get("description") or "").lower()
|
|
49
|
+
name = item.get("full_name", "").lower()
|
|
50
|
+
topics = [t.lower() for t in item.get("topics", [])]
|
|
51
|
+
pushed = item.get("pushed_at", "")
|
|
52
|
+
|
|
53
|
+
score = 0.0
|
|
54
|
+
|
|
55
|
+
# Stars: log scale, cap at 50 pts
|
|
56
|
+
if stars > 0:
|
|
57
|
+
import math
|
|
58
|
+
score += min(math.log10(stars + 1) * 15, 50)
|
|
59
|
+
|
|
60
|
+
# Python preference (forge is Python-first)
|
|
61
|
+
if lang == "python":
|
|
62
|
+
score += 20
|
|
63
|
+
elif lang in ("rust", "typescript", "javascript"):
|
|
64
|
+
score += 5
|
|
65
|
+
|
|
66
|
+
# Query keyword match in name/description/topics
|
|
67
|
+
query_words = set(query.lower().split())
|
|
68
|
+
desc_words = set(description.split())
|
|
69
|
+
name_words = set(name.replace("-", " ").replace("_", " ").split("/")[-1].split())
|
|
70
|
+
topic_words = set(t for topic in topics for t in topic.split("-"))
|
|
71
|
+
overlap = query_words & (desc_words | name_words | topic_words)
|
|
72
|
+
score += len(overlap) * 4
|
|
73
|
+
|
|
74
|
+
# Freshness: pushed within last 180 days
|
|
75
|
+
if pushed:
|
|
76
|
+
try:
|
|
77
|
+
from datetime import datetime, timezone
|
|
78
|
+
pushed_dt = datetime.fromisoformat(pushed.replace("Z", "+00:00"))
|
|
79
|
+
days_old = (datetime.now(timezone.utc) - pushed_dt).days
|
|
80
|
+
if days_old < 180:
|
|
81
|
+
score += max(0, 10 - days_old // 18)
|
|
82
|
+
except (ValueError, TypeError):
|
|
83
|
+
pass
|
|
84
|
+
|
|
85
|
+
return min(round(score, 1), 100.0)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def scout_capabilities(
|
|
89
|
+
queries: list[str],
|
|
90
|
+
*,
|
|
91
|
+
per_query: int = 8,
|
|
92
|
+
min_score: float = 30.0,
|
|
93
|
+
dedupe: bool = True,
|
|
94
|
+
) -> dict[str, Any]:
|
|
95
|
+
"""Search GitHub for repos matching capability queries.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
queries: List of search queries (e.g. ["dead code detection python"]).
|
|
99
|
+
per_query: Max results per query (GitHub cap: 30 without auth).
|
|
100
|
+
min_score: Minimum harvest-confidence score to include.
|
|
101
|
+
dedupe: Skip repos already seen from a previous query.
|
|
102
|
+
|
|
103
|
+
Returns structured dict with ``schema_version``, ``targets`` (ranked),
|
|
104
|
+
``query_count``, ``total_found``. Degrades gracefully on network error.
|
|
105
|
+
"""
|
|
106
|
+
seen_ids: set[int] = set()
|
|
107
|
+
all_targets: list[dict] = []
|
|
108
|
+
|
|
109
|
+
for i, query in enumerate(queries):
|
|
110
|
+
if i > 0:
|
|
111
|
+
time.sleep(_RATE_DELAY)
|
|
112
|
+
items = _gh_search(f"{query} language:python", per_page=per_query)
|
|
113
|
+
for item in items:
|
|
114
|
+
rid = item.get("id", 0)
|
|
115
|
+
if dedupe and rid in seen_ids:
|
|
116
|
+
continue
|
|
117
|
+
seen_ids.add(rid)
|
|
118
|
+
score = _score_item(item, query)
|
|
119
|
+
if score < min_score:
|
|
120
|
+
continue
|
|
121
|
+
all_targets.append({
|
|
122
|
+
"repo": item.get("full_name", ""),
|
|
123
|
+
"url": item.get("html_url", ""),
|
|
124
|
+
"clone_url": item.get("clone_url", ""),
|
|
125
|
+
"stars": item.get("stargazers_count", 0),
|
|
126
|
+
"language": item.get("language", ""),
|
|
127
|
+
"description": (item.get("description") or "")[:200],
|
|
128
|
+
"topics": item.get("topics", [])[:8],
|
|
129
|
+
"pushed_at": item.get("pushed_at", ""),
|
|
130
|
+
"harvest_score": score,
|
|
131
|
+
"matched_query": query,
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
# Sort by score desc
|
|
135
|
+
all_targets.sort(key=lambda x: -x["harvest_score"])
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
"schema_version": SCHEMA_VERSION_CAPABILITY_SCOUT_V1,
|
|
139
|
+
"query_count": len(queries),
|
|
140
|
+
"total_candidates": len(all_targets),
|
|
141
|
+
"targets": all_targets,
|
|
142
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"""Tier a1 — dead code checker: find defined-but-unreferenced symbols.
|
|
2
|
+
|
|
3
|
+
Synthesised from vulture (jendrikseipp/vulture) — MIT license.
|
|
4
|
+
Uses pure AST analysis to find names that are defined but never imported,
|
|
5
|
+
called, or accessed in the scanned package. No dynamic analysis required.
|
|
6
|
+
|
|
7
|
+
Pure: read-only AST walks, no subprocess, no writes. Degrades gracefully
|
|
8
|
+
on syntax errors by reporting the offending file and skipping it.
|
|
9
|
+
"""
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import ast
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
SCHEMA_VERSION_DEAD_CODE_V1 = "atomadic-forge.dead_code/v1"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _collect_definitions(tree: ast.AST, module: str) -> dict[str, str]:
|
|
20
|
+
"""Collect all top-level name definitions: {qualname: kind}."""
|
|
21
|
+
defs: dict[str, str] = {}
|
|
22
|
+
for node in ast.walk(tree):
|
|
23
|
+
if isinstance(node, ast.FunctionDef | ast.AsyncFunctionDef):
|
|
24
|
+
defs[f"{module}.{node.name}"] = "function"
|
|
25
|
+
elif isinstance(node, ast.ClassDef):
|
|
26
|
+
defs[f"{module}.{node.name}"] = "class"
|
|
27
|
+
elif isinstance(node, ast.Assign):
|
|
28
|
+
for target in node.targets:
|
|
29
|
+
if isinstance(target, ast.Name) and not target.id.startswith("_"):
|
|
30
|
+
defs[f"{module}.{target.id}"] = "variable"
|
|
31
|
+
elif isinstance(node, ast.ImportFrom):
|
|
32
|
+
for alias in node.names:
|
|
33
|
+
name = alias.asname or alias.name
|
|
34
|
+
if not name.startswith("_"):
|
|
35
|
+
defs[f"{module}.{name}"] = "import"
|
|
36
|
+
return defs
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _collect_usages(tree: ast.AST) -> set[str]:
|
|
40
|
+
"""Collect all name tokens used (called, accessed, passed) in a module."""
|
|
41
|
+
usages: set[str] = set()
|
|
42
|
+
for node in ast.walk(tree):
|
|
43
|
+
if isinstance(node, ast.Name):
|
|
44
|
+
usages.add(node.id)
|
|
45
|
+
elif isinstance(node, ast.Attribute):
|
|
46
|
+
usages.add(node.attr)
|
|
47
|
+
elif isinstance(node, ast.Call):
|
|
48
|
+
if isinstance(node.func, ast.Name):
|
|
49
|
+
usages.add(node.func.id)
|
|
50
|
+
elif isinstance(node.func, ast.Attribute):
|
|
51
|
+
usages.add(node.func.attr)
|
|
52
|
+
return usages
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def check_dead_code(
|
|
56
|
+
project_root: Path,
|
|
57
|
+
*,
|
|
58
|
+
package: str | None = None,
|
|
59
|
+
include_imports: bool = False,
|
|
60
|
+
include_variables: bool = False,
|
|
61
|
+
confidence_threshold: float = 60.0,
|
|
62
|
+
) -> dict[str, Any]:
|
|
63
|
+
"""Find defined-but-unreferenced symbols across a Python package.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
project_root: Repository root.
|
|
67
|
+
package: Package subdirectory to scan. Auto-detected if None.
|
|
68
|
+
include_imports: Include unused imports in results (noisy).
|
|
69
|
+
include_variables: Include unused module-level variables.
|
|
70
|
+
confidence_threshold: Minimum confidence to report (60–100).
|
|
71
|
+
|
|
72
|
+
Returns dict with ``schema_version``, ``dead_symbols``, counts, and
|
|
73
|
+
per-module breakdowns. ``confidence`` is higher when a symbol is
|
|
74
|
+
never referenced in ANY file in the package (100) vs. only some (60–80).
|
|
75
|
+
"""
|
|
76
|
+
root = Path(project_root).resolve()
|
|
77
|
+
|
|
78
|
+
# Locate package
|
|
79
|
+
src = root / "src"
|
|
80
|
+
if package:
|
|
81
|
+
pkg_dir = (src / package) if src.is_dir() else (root / package)
|
|
82
|
+
else:
|
|
83
|
+
pkg_dir = None
|
|
84
|
+
for candidate in ([src] if src.is_dir() else [root]):
|
|
85
|
+
for sub in sorted(candidate.iterdir()):
|
|
86
|
+
if sub.is_dir() and (sub / "__init__.py").exists():
|
|
87
|
+
pkg_dir = sub
|
|
88
|
+
break
|
|
89
|
+
if pkg_dir:
|
|
90
|
+
break
|
|
91
|
+
if pkg_dir is None or not pkg_dir.is_dir():
|
|
92
|
+
return {
|
|
93
|
+
"schema_version": SCHEMA_VERSION_DEAD_CODE_V1,
|
|
94
|
+
"available": False,
|
|
95
|
+
"reason": "package directory not found",
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
py_files = sorted(pkg_dir.rglob("*.py"))
|
|
99
|
+
trees: list[tuple[str, ast.AST]] = []
|
|
100
|
+
parse_errors: list[str] = []
|
|
101
|
+
|
|
102
|
+
for py in py_files:
|
|
103
|
+
rel = py.relative_to(pkg_dir)
|
|
104
|
+
module = ".".join(rel.with_suffix("").parts).replace(".__init__", "")
|
|
105
|
+
try:
|
|
106
|
+
tree = ast.parse(py.read_text(encoding="utf-8", errors="replace"))
|
|
107
|
+
trees.append((module, tree))
|
|
108
|
+
except SyntaxError as e:
|
|
109
|
+
parse_errors.append(f"{py}: {e}")
|
|
110
|
+
|
|
111
|
+
# Gather all definitions
|
|
112
|
+
all_defs: dict[str, str] = {}
|
|
113
|
+
for module, tree in trees:
|
|
114
|
+
all_defs.update(_collect_definitions(tree, module))
|
|
115
|
+
|
|
116
|
+
# Gather all usages (unqualified names) across the whole package
|
|
117
|
+
all_usages: set[str] = set()
|
|
118
|
+
for _, tree in trees:
|
|
119
|
+
all_usages.update(_collect_usages(tree))
|
|
120
|
+
|
|
121
|
+
dead_symbols: list[dict] = []
|
|
122
|
+
for qualname, kind in sorted(all_defs.items()):
|
|
123
|
+
if kind == "import" and not include_imports:
|
|
124
|
+
continue
|
|
125
|
+
if kind == "variable" and not include_variables:
|
|
126
|
+
continue
|
|
127
|
+
# Extract the bare name (last segment)
|
|
128
|
+
bare_name = qualname.rsplit(".", 1)[-1]
|
|
129
|
+
if bare_name.startswith("_"):
|
|
130
|
+
continue
|
|
131
|
+
# __dunder__ methods are always used implicitly
|
|
132
|
+
if bare_name.startswith("__") and bare_name.endswith("__"):
|
|
133
|
+
continue
|
|
134
|
+
if bare_name in all_usages:
|
|
135
|
+
continue
|
|
136
|
+
# Not found in any usage — dead
|
|
137
|
+
confidence = 80 if kind in ("function", "class") else 60
|
|
138
|
+
if confidence < confidence_threshold:
|
|
139
|
+
continue
|
|
140
|
+
module = qualname.rsplit(".", 1)[0] if "." in qualname else qualname
|
|
141
|
+
dead_symbols.append({
|
|
142
|
+
"qualname": qualname,
|
|
143
|
+
"kind": kind,
|
|
144
|
+
"confidence": confidence,
|
|
145
|
+
"module": module,
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
return {
|
|
149
|
+
"schema_version": SCHEMA_VERSION_DEAD_CODE_V1,
|
|
150
|
+
"available": True,
|
|
151
|
+
"package": pkg_dir.name,
|
|
152
|
+
"files_scanned": len(trees),
|
|
153
|
+
"parse_errors": parse_errors,
|
|
154
|
+
"dead_symbol_count": len(dead_symbols),
|
|
155
|
+
"dead_symbols": dead_symbols,
|
|
156
|
+
"dead_by_kind": {
|
|
157
|
+
k: sum(1 for s in dead_symbols if s["kind"] == k)
|
|
158
|
+
for k in ("function", "class", "variable", "import")
|
|
159
|
+
},
|
|
160
|
+
}
|