atomadic-forge 0.81.0__tar.gz → 0.83.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.81.0 → atomadic_forge-0.83.0}/CHANGELOG.md +30 -13
- {atomadic_forge-0.81.0/src/atomadic_forge.egg-info → atomadic_forge-0.83.0}/PKG-INFO +25 -9
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/README.md +24 -8
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/02-commands.md +111 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/05-faq.md +32 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/COMMANDS.md +97 -1
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/MCP_TOOLS.md +20 -1
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/pyproject.toml +1 -1
- atomadic_forge-0.83.0/src/atomadic_forge/a1_at_functions/closest_match.py +24 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/graft_extract.py +25 -0
- atomadic_forge-0.83.0/src/atomadic_forge/a1_at_functions/graft_extract_js.py +270 -0
- atomadic_forge-0.83.0/src/atomadic_forge/a1_at_functions/levenshtein_distance.py +29 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +185 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/graft_feature.py +78 -6
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +452 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0/src/atomadic_forge.egg-info}/PKG-INFO +25 -9
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/SOURCES.txt +4 -0
- atomadic_forge-0.83.0/tests/test_graft_js.py +102 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/FUNDING.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/customer-refactor.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/mcp-registry-publish.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/metrics-auto-regen.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/metrics-drift.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/publish-on-tag.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/release-readiness.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/surface-drift.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/.github/workflows/uptime.yml +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/LICENSE +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/MANIFEST.in +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/SECURITY.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/AGENTS_GUIDE.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/CI_CD.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/FIRST_10_MINUTES.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/FORMALIZATION.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/HIVE_PRIMITIVES.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/HIVE_STATUS.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/IDE_INTEGRATION.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/MIGRATION.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/PROVIDERS.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/README.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/RECEIPT.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/RELAY_PROTOCOL.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/WORLD_COLLISION.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/INDEX.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/absorb.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/audit.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/config.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/create.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/emergent-swarm.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/enhancement.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/guard-install.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/handoff.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/harvest.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/hive.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/materialize.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/metrics.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/recon-swarm.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/relay.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/surface.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/welcome.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/commands/wisdom.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/setup.cfg +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/__init__.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/abstract_method_repair.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/ast_scope_lock.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/capability_scout.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/cosine_similarity.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/dead_code_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/doc_auto_update.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/git_churn.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/harvest_concept_bridge.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/ifwc_fuzz.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/maintainability_index.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/monadic_laws.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/recon_cache.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/repo_public_surface.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/steersman_pack.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/surface_gap_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wire_stubs_gen.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/remote_seed_store.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/repo_public_surface_sync.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.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.81.0 → atomadic_forge-0.83.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.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/recipe_replay.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/_monadic_laws_shared.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/_registry.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/absorb.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/aiom_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/create.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/enhancement.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/fingerprint.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/fuzz.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/graft.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/guard_install.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/handoff.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/harvest.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/hive.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/materialize.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/mcb_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/metrics.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/relay.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/replay.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/surface.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/token_savings.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/welcome.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/wisdom.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_abstract_method_repair.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_agent_hire_protocol.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_agent_plan_pkg_label.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_ast_scope_lock.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_call_graph_summary.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_capability_scout.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_card_renderer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_chat.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_cherry_dedup_class_methods.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_cherry_pick.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_classify_tier_ast_signals.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_cli_smoke.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_cli_swarm_aliases.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_codex_5_complete.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_compliance_checker.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_config.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_copilots_copilot.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_create_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_cs1_renderer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_custom_provider.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_dead_code_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_dedup_engine.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_demo.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_doc_auto_update.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_emergent_synthesize_imports.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_enhancement_proposal.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_evolve_js.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_finalize_scaffold.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_git_churn.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_graft_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_handoff.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_harvest_concept_bridge.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_harvest_source_warnings.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_hierarchical_memory.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_hive_sync.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_ifwc_fuzz.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_ling_provider.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_maintainability_index.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_materialize_feature.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_mcp_protocol.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_monadic_laws.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_nexus_bridge.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_polyglot_cli_mcp.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_polyglot_full_pipeline.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_polyglot_hardening.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_polyglot_symbol_parity.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_recipe_replay.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_recon_cache.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_remote_seed_store.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_repo_public_surface.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_response_enricher.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_sbom_cmd_text_summary.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_smell_score_formula.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_steersman_pack.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_stub_detector.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_surface_export.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_surface_gap_check.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_synergy.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_token_savings_ledger.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_verify_suggested_recipe.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_welcome.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_welcome_enhancements.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_wire_stubs_gen.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_wire_suggest_repairs.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_wire_type_checking.py +0 -0
- {atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/tests/test_wisdom.py +0 -0
|
@@ -2,44 +2,61 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## v0.83.0 — 2026-05-08
|
|
6
|
+
|
|
7
|
+
- feat(forge): v0.83 — JS/TS graft support; arm Atomadic with capability transfer
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## v0.82.0 — 2026-05-08
|
|
11
|
+
|
|
12
|
+
- feat(forge): v0.82 — graft sibling-ref auto-import + 2 grafted helpers
|
|
13
|
+
- docs: README + CHANGELOG + docs/ updated for v0.76–v0.81
|
|
14
|
+
|
|
15
|
+
|
|
5
16
|
## v0.81.0 — 2026-05-08
|
|
6
17
|
|
|
7
|
-
- feat(forge):
|
|
18
|
+
- feat(forge): auto-wire signature coercion — `list[T]` CLI args now parsed correctly; `forge cosine-similarity --a 1.0,0.0 --b 1.0,0.0` resolves without manual casting
|
|
19
|
+
- feat(forge): `run_recon(use_cache=True)` — skip AST walk on unchanged trees via `(file_count, max_mtime, total_bytes)` fingerprint; eliminates redundant recon passes in harvest pipelines
|
|
20
|
+
- fix(forge): close last harvest-pipeline residual exposed by recon cache audit
|
|
8
21
|
|
|
9
22
|
|
|
10
23
|
## v0.80.0 — 2026-05-08
|
|
11
24
|
|
|
12
|
-
- feat(forge):
|
|
25
|
+
- feat(forge): `forge mcb-check` — flag unbounded `while` loops and recursion in tier-a1 atoms (Monadic Compute Bounding); advisory by default, `--fail-on-violations` to enforce
|
|
26
|
+
- feat(forge): `forge aiom-check` — flag forbidden I/O imports (`requests`, `urllib`, `socket`, `subprocess`) in tier-a1 (Algebraic I/O Monad law); advisory by default
|
|
27
|
+
- feat(forge): `forge fingerprint` — SHA-256 of every a1 module's normalised AST (AHLP); stable across whitespace, tamper-evident, deterministic
|
|
28
|
+
- feat(forge): `forge fuzz <module>` — hypothesis property tests on any a1 callable carrying `__invariants__` (IFWC-lite); all four verbs ship advisory, opt-in `--fail-on-violations` to block CI
|
|
13
29
|
|
|
14
30
|
|
|
15
31
|
## v0.79.0 — 2026-05-08
|
|
16
32
|
|
|
17
|
-
- feat(forge): replay
|
|
18
|
-
-
|
|
19
|
-
- fix(
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
- fix(
|
|
33
|
+
- feat(forge): `forge replay <recipe>` — runs a golden recipe's `validation_gate` as subprocesses with zero LLM round-trips per step; recipes: `release_hardening`, `add_cli_command`, `fix_wire_violation`, `add_feature`, `publish_mcp`; auto-logs pass+fail (×80 tokens) to ledger as `replay/<recipe-name>`
|
|
34
|
+
- feat(forge): `--dry-run`, `--keep-going`, `--list`, `--json` flags on `forge replay`
|
|
35
|
+
- fix(compat): replace `datetime.UTC` with `timezone.utc` for Python 3.10 compatibility
|
|
36
|
+
- fix(ci): null-safe `head_commit.message` in metrics-auto-regen `if` condition
|
|
37
|
+
- chore(metrics): sync `forge_metrics.json` after `cli_verb_count` method change
|
|
38
|
+
- fix(surface): regenerate `surface.json` with package_version 0.78.0
|
|
39
|
+
- fix(metrics): replace upward a4 import in `_live_cli_verb_count` with file scan
|
|
23
40
|
- chore(release): sync artifacts + doc anchors for v0.78.0
|
|
24
41
|
|
|
25
42
|
|
|
26
43
|
## v0.78.0 — 2026-05-08
|
|
27
44
|
|
|
28
|
-
- feat(forge): token-savings auto-ledger
|
|
45
|
+
- feat(forge): token-savings auto-ledger — every verb that calls `enrich_response` appends to `<project>/.atomadic-forge/lifetime_savings.jsonl`; verbs covered: recon, certify, wire, verify, auto, emergent, synergy
|
|
46
|
+
- feat(forge): `forge token-savings` — display lifetime total + per-tool breakdown from the JSONL ledger; file-backed, verifiable, auditable
|
|
29
47
|
|
|
30
48
|
|
|
31
49
|
## v0.77.0 — 2026-05-08
|
|
32
50
|
|
|
33
|
-
- fix(forge): cherry-pick
|
|
51
|
+
- fix(forge): cherry-pick now folds method qualnames whose parent class is already selected, collapsing the 47-file class explosion observed during IndexStore absorption; root-cause fix in `cherry_pick._dedup_methods_under_class`
|
|
34
52
|
- feat(doc-update): auto-update 6 previously missed doc files on release
|
|
35
53
|
|
|
36
54
|
|
|
37
55
|
## v0.76.0 — 2026-05-08
|
|
38
56
|
|
|
39
|
-
- feat(forge): graft
|
|
57
|
+
- feat(forge): `forge graft --source-file <f> --symbol <name>` — extract one function or class from any Python source and land it in the target's correct tier; `--rename` flag for private-to-public conversion; auto-wires CLI + MCP via `auto-wire` integration; closes the gap between `transmute auto` (whole-repo) and single-symbol surgical absorption
|
|
40
58
|
- fix(lint): clear 14 ruff violations blocking CI
|
|
41
|
-
-
|
|
42
|
-
- fix(forge): GAP-014 — harvest fail-loud on missing/empty sources
|
|
59
|
+
- fix(forge): GAP-014 — harvest fail-loud on missing/empty sources
|
|
43
60
|
|
|
44
61
|
|
|
45
62
|
## v0.75.3 — 2026-05-08
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.83.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
|
|
@@ -67,6 +67,8 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
|
|
|
67
67
|
|
|
68
68
|
**Forge fixes that.**
|
|
69
69
|
|
|
70
|
+
---
|
|
71
|
+
|
|
70
72
|
> 🎯 **300+ public OSS Python repositories absorbed end-to-end.** fastapi
|
|
71
73
|
> (98k★), scrapy (61k★), django-rest-framework (30k★), pytest (13.8k★),
|
|
72
74
|
> langgraph (31k★), openai-agents-python (26k★), cookiecutter (25k★),
|
|
@@ -77,9 +79,11 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
|
|
|
77
79
|
> wire-clean, scaffold-complete, deterministic. Wire-PASS holds across
|
|
78
80
|
> the entire 300-seed corpus. Receipts in [`HARVEST_LEDGER.md`](HARVEST_LEDGER.md).
|
|
79
81
|
|
|
80
|
-
- **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations.
|
|
81
|
-
- **
|
|
82
|
-
- **
|
|
82
|
+
- **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations. Four monadic laws (MCB, AIOM, AHLP, IFWC) shipped as advisory AST scanners; promote to `--fail-on-violations` when ready.
|
|
83
|
+
- **Verifiable token savings.** Every Forge verb auto-appends to a file-backed JSONL ledger at `<project>/.atomadic-forge/lifetime_savings.jsonl`. `forge token-savings` prints the running total and per-tool breakdown. Auditable line-by-line — not a marketing claim.
|
|
84
|
+
- **Surgical capability grafting.** `forge graft --source-file X --symbol Y` extracts a single function or class from any Python source, lands it in the right tier, and auto-wires CLI + MCP. Sibling references resolve automatically. Closes the gap between whole-repo `transmute auto` and one-shot surgical absorption.
|
|
85
|
+
- **Deterministic recipe replay.** `forge replay <recipe>` runs a golden command chain (release hardening, add-cli-command, fix-wire-violation, add-feature, publish-mcp) as subprocesses — zero LLM round-trips per step.
|
|
86
|
+
- **One command: spaghetti -> certified architecture.** Python, JavaScript, TypeScript, **Rust, Go, Swift, Kotlin** — full pipeline (recon, wire, certify, scaffold, evolve) on every language. Recon cache short-circuits the AST walk on unchanged trees via tree fingerprint.
|
|
83
87
|
- **Bring your own LLM.** Built-in presets for OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, Groq, Together, Fireworks, xAI, Mistral, Perplexity, Cerebras, Hyperbolic, AAAA-Nexus, and Ollama — plus `forge config provider add` for any custom OpenAI-compatible endpoint. See [docs/PROVIDERS.md](docs/PROVIDERS.md).
|
|
84
88
|
- **IDE-native.** VS Code extension (`vscode-extension/`), MCP server for Claude Code / Cursor / Cowork / Windsurf, four ready-to-use Claude Code skills. See [docs/IDE_INTEGRATION.md](docs/IDE_INTEGRATION.md).
|
|
85
89
|
|
|
@@ -157,6 +161,17 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
157
161
|
| `forge dead-code` | AST-walk dead symbol detector (vulture synthesis) |
|
|
158
162
|
| `forge maintainability` | Maintainability Index per module (radon MI: A/B/C/D ranking) |
|
|
159
163
|
| `forge concept-bridge --harvest-json path/to/harvest.json` | Convert harvest candidates below TAU_TRUST into actionable synthesis plans |
|
|
164
|
+
| `forge token-savings` | Lifetime token-savings total + per-tool breakdown from `.atomadic-forge/lifetime_savings.jsonl` |
|
|
165
|
+
| `forge replay <recipe>` | Run a golden recipe's validation gate as subprocesses — zero LLM round-trips; flags: `--dry-run`, `--keep-going`, `--list`, `--json` |
|
|
166
|
+
|
|
167
|
+
### Monadic Law Verbs (advisory; `--fail-on-violations` to enforce)
|
|
168
|
+
|
|
169
|
+
| Command | What it does |
|
|
170
|
+
|---------|-------------|
|
|
171
|
+
| `forge mcb-check` | Flag unbounded `while` loops and recursion in tier-a1 atoms (Monadic Compute Bounding) |
|
|
172
|
+
| `forge aiom-check` | Flag forbidden I/O imports (`requests`, `urllib`, `socket`, `subprocess`) in tier-a1 (Algebraic I/O Monad) |
|
|
173
|
+
| `forge fingerprint` | SHA-256 of every a1 module's normalised AST — tamper-evident, stable across whitespace (AHLP) |
|
|
174
|
+
| `forge fuzz <module>` | Hypothesis property tests on any a1 callable carrying `__invariants__` (IFWC-lite) |
|
|
160
175
|
|
|
161
176
|
### Composition & Multi-Repo
|
|
162
177
|
|
|
@@ -166,6 +181,7 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
166
181
|
| `forge emergent scan` | Cross-domain composition discovery |
|
|
167
182
|
| `forge recon-swarm` | Walk N repos, unified report |
|
|
168
183
|
| `forge harvest` | Cross-repo capability gap finder |
|
|
184
|
+
| `forge graft --source-file <f> --symbol <name>` | Extract one function/class from any Python source and land it in the target's correct tier; `--rename` for private→public; auto-wires CLI + MCP |
|
|
169
185
|
|
|
170
186
|
### Planning & LLM Loops
|
|
171
187
|
|
|
@@ -176,7 +192,7 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
176
192
|
| `forge plan` | Bounded execution plan with risk + rollback |
|
|
177
193
|
| `forge chat` | Terminal copilot over forge docs |
|
|
178
194
|
|
|
179
|
-
**
|
|
195
|
+
**79 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
|
|
180
196
|
|
|
181
197
|
---
|
|
182
198
|
|
|
@@ -195,7 +211,7 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
|
|
|
195
211
|
}
|
|
196
212
|
```
|
|
197
213
|
|
|
198
|
-
**10 tools,
|
|
214
|
+
**10 tools, 116 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/).
|
|
199
215
|
|
|
200
216
|
| Tool | Actions | What it does |
|
|
201
217
|
|------|---------|-------------|
|
|
@@ -224,9 +240,9 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
224
240
|
|--------|-------|
|
|
225
241
|
|
|
226
242
|
| MCP tools | **10 tools · 116 actions** |
|
|
227
|
-
| CLI verbs | **
|
|
228
|
-
| Source files | **
|
|
229
|
-
| Tests | **
|
|
243
|
+
| CLI verbs | **79** |
|
|
244
|
+
| Source files | **246** (~49K LOC) |
|
|
245
|
+
| Tests | **1625 passing** across **121 test files** |
|
|
230
246
|
| Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
|
|
231
247
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
232
248
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
@@ -35,6 +35,8 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
|
|
|
35
35
|
|
|
36
36
|
**Forge fixes that.**
|
|
37
37
|
|
|
38
|
+
---
|
|
39
|
+
|
|
38
40
|
> 🎯 **300+ public OSS Python repositories absorbed end-to-end.** fastapi
|
|
39
41
|
> (98k★), scrapy (61k★), django-rest-framework (30k★), pytest (13.8k★),
|
|
40
42
|
> langgraph (31k★), openai-agents-python (26k★), cookiecutter (25k★),
|
|
@@ -45,9 +47,11 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
|
|
|
45
47
|
> wire-clean, scaffold-complete, deterministic. Wire-PASS holds across
|
|
46
48
|
> the entire 300-seed corpus. Receipts in [`HARVEST_LEDGER.md`](HARVEST_LEDGER.md).
|
|
47
49
|
|
|
48
|
-
- **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations.
|
|
49
|
-
- **
|
|
50
|
-
- **
|
|
50
|
+
- **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations. Four monadic laws (MCB, AIOM, AHLP, IFWC) shipped as advisory AST scanners; promote to `--fail-on-violations` when ready.
|
|
51
|
+
- **Verifiable token savings.** Every Forge verb auto-appends to a file-backed JSONL ledger at `<project>/.atomadic-forge/lifetime_savings.jsonl`. `forge token-savings` prints the running total and per-tool breakdown. Auditable line-by-line — not a marketing claim.
|
|
52
|
+
- **Surgical capability grafting.** `forge graft --source-file X --symbol Y` extracts a single function or class from any Python source, lands it in the right tier, and auto-wires CLI + MCP. Sibling references resolve automatically. Closes the gap between whole-repo `transmute auto` and one-shot surgical absorption.
|
|
53
|
+
- **Deterministic recipe replay.** `forge replay <recipe>` runs a golden command chain (release hardening, add-cli-command, fix-wire-violation, add-feature, publish-mcp) as subprocesses — zero LLM round-trips per step.
|
|
54
|
+
- **One command: spaghetti -> certified architecture.** Python, JavaScript, TypeScript, **Rust, Go, Swift, Kotlin** — full pipeline (recon, wire, certify, scaffold, evolve) on every language. Recon cache short-circuits the AST walk on unchanged trees via tree fingerprint.
|
|
51
55
|
- **Bring your own LLM.** Built-in presets for OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, Groq, Together, Fireworks, xAI, Mistral, Perplexity, Cerebras, Hyperbolic, AAAA-Nexus, and Ollama — plus `forge config provider add` for any custom OpenAI-compatible endpoint. See [docs/PROVIDERS.md](docs/PROVIDERS.md).
|
|
52
56
|
- **IDE-native.** VS Code extension (`vscode-extension/`), MCP server for Claude Code / Cursor / Cowork / Windsurf, four ready-to-use Claude Code skills. See [docs/IDE_INTEGRATION.md](docs/IDE_INTEGRATION.md).
|
|
53
57
|
|
|
@@ -125,6 +129,17 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
125
129
|
| `forge dead-code` | AST-walk dead symbol detector (vulture synthesis) |
|
|
126
130
|
| `forge maintainability` | Maintainability Index per module (radon MI: A/B/C/D ranking) |
|
|
127
131
|
| `forge concept-bridge --harvest-json path/to/harvest.json` | Convert harvest candidates below TAU_TRUST into actionable synthesis plans |
|
|
132
|
+
| `forge token-savings` | Lifetime token-savings total + per-tool breakdown from `.atomadic-forge/lifetime_savings.jsonl` |
|
|
133
|
+
| `forge replay <recipe>` | Run a golden recipe's validation gate as subprocesses — zero LLM round-trips; flags: `--dry-run`, `--keep-going`, `--list`, `--json` |
|
|
134
|
+
|
|
135
|
+
### Monadic Law Verbs (advisory; `--fail-on-violations` to enforce)
|
|
136
|
+
|
|
137
|
+
| Command | What it does |
|
|
138
|
+
|---------|-------------|
|
|
139
|
+
| `forge mcb-check` | Flag unbounded `while` loops and recursion in tier-a1 atoms (Monadic Compute Bounding) |
|
|
140
|
+
| `forge aiom-check` | Flag forbidden I/O imports (`requests`, `urllib`, `socket`, `subprocess`) in tier-a1 (Algebraic I/O Monad) |
|
|
141
|
+
| `forge fingerprint` | SHA-256 of every a1 module's normalised AST — tamper-evident, stable across whitespace (AHLP) |
|
|
142
|
+
| `forge fuzz <module>` | Hypothesis property tests on any a1 callable carrying `__invariants__` (IFWC-lite) |
|
|
128
143
|
|
|
129
144
|
### Composition & Multi-Repo
|
|
130
145
|
|
|
@@ -134,6 +149,7 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
134
149
|
| `forge emergent scan` | Cross-domain composition discovery |
|
|
135
150
|
| `forge recon-swarm` | Walk N repos, unified report |
|
|
136
151
|
| `forge harvest` | Cross-repo capability gap finder |
|
|
152
|
+
| `forge graft --source-file <f> --symbol <name>` | Extract one function/class from any Python source and land it in the target's correct tier; `--rename` for private→public; auto-wires CLI + MCP |
|
|
137
153
|
|
|
138
154
|
### Planning & LLM Loops
|
|
139
155
|
|
|
@@ -144,7 +160,7 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
144
160
|
| `forge plan` | Bounded execution plan with risk + rollback |
|
|
145
161
|
| `forge chat` | Terminal copilot over forge docs |
|
|
146
162
|
|
|
147
|
-
**
|
|
163
|
+
**79 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
|
|
148
164
|
|
|
149
165
|
---
|
|
150
166
|
|
|
@@ -163,7 +179,7 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
|
|
|
163
179
|
}
|
|
164
180
|
```
|
|
165
181
|
|
|
166
|
-
**10 tools,
|
|
182
|
+
**10 tools, 116 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/).
|
|
167
183
|
|
|
168
184
|
| Tool | Actions | What it does |
|
|
169
185
|
|------|---------|-------------|
|
|
@@ -192,9 +208,9 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
192
208
|
|--------|-------|
|
|
193
209
|
|
|
194
210
|
| MCP tools | **10 tools · 116 actions** |
|
|
195
|
-
| CLI verbs | **
|
|
196
|
-
| Source files | **
|
|
197
|
-
| Tests | **
|
|
211
|
+
| CLI verbs | **79** |
|
|
212
|
+
| Source files | **246** (~49K LOC) |
|
|
213
|
+
| Tests | **1625 passing** across **121 test files** |
|
|
198
214
|
| Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
|
|
199
215
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
200
216
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
@@ -1371,6 +1371,117 @@ Both append-only, content-addressed, supersession-aware on read.
|
|
|
1371
1371
|
|
|
1372
1372
|
---
|
|
1373
1373
|
|
|
1374
|
+
---
|
|
1375
|
+
|
|
1376
|
+
## Cross-repo surgery
|
|
1377
|
+
|
|
1378
|
+
### forge graft (v0.76)
|
|
1379
|
+
|
|
1380
|
+
Surgical single-symbol cross-repo capability transfer.
|
|
1381
|
+
|
|
1382
|
+
```bash
|
|
1383
|
+
forge graft \
|
|
1384
|
+
--source-file <path.py> \
|
|
1385
|
+
--symbol <name> \
|
|
1386
|
+
[--rename <new_name>] \
|
|
1387
|
+
[--tier a1_at_functions] \
|
|
1388
|
+
[--target .] \
|
|
1389
|
+
[--package atomadic_forge] \
|
|
1390
|
+
[--overwrite] \
|
|
1391
|
+
[--dry-run] \
|
|
1392
|
+
[--auto-wire | --no-auto-wire] \
|
|
1393
|
+
[--json]
|
|
1394
|
+
```
|
|
1395
|
+
|
|
1396
|
+
Pipeline: `graft_extract.extract_symbol` (a1) extracts the symbol slice →
|
|
1397
|
+
module is rendered with a `SCHEMA_VERSION_GRAFT_<NAME>` marker → written to the
|
|
1398
|
+
correct tier directory → wire-violations check → optional auto-wire to surface
|
|
1399
|
+
the result as a CLI verb and MCP action. On wire-violation the write is rolled
|
|
1400
|
+
back automatically from the pre-write backup.
|
|
1401
|
+
|
|
1402
|
+
---
|
|
1403
|
+
|
|
1404
|
+
## Token ledger
|
|
1405
|
+
|
|
1406
|
+
### forge token-savings (v0.78)
|
|
1407
|
+
|
|
1408
|
+
Display the lifetime token-savings ledger. Every enriched Forge verb
|
|
1409
|
+
auto-appends an entry to `.atomadic-forge/lifetime_savings.jsonl`.
|
|
1410
|
+
|
|
1411
|
+
```bash
|
|
1412
|
+
forge token-savings [--project .] [--json]
|
|
1413
|
+
```
|
|
1414
|
+
|
|
1415
|
+
Returns lifetime total, entry count, first/last timestamps, and a `by_tool`
|
|
1416
|
+
breakdown.
|
|
1417
|
+
|
|
1418
|
+
---
|
|
1419
|
+
|
|
1420
|
+
## Golden-path replay
|
|
1421
|
+
|
|
1422
|
+
### forge replay (v0.79)
|
|
1423
|
+
|
|
1424
|
+
Deterministic golden-recipe execution. Runs a pre-defined recipe end-to-end and
|
|
1425
|
+
logs ~80 tokens saved per successful step to the lifetime ledger.
|
|
1426
|
+
|
|
1427
|
+
```bash
|
|
1428
|
+
forge replay <recipe-name> [--list] [--dry-run] [--keep-going] \
|
|
1429
|
+
[--project .] [--json]
|
|
1430
|
+
```
|
|
1431
|
+
|
|
1432
|
+
**Options:**
|
|
1433
|
+
- `--list` — list all available recipes
|
|
1434
|
+
- `--dry-run` — show steps without executing
|
|
1435
|
+
- `--keep-going` — continue past a failing step
|
|
1436
|
+
|
|
1437
|
+
**Built-in recipes:** `release_hardening`, `add_cli_command`,
|
|
1438
|
+
`fix_wire_violation`, `add_feature`, `publish_mcp`.
|
|
1439
|
+
|
|
1440
|
+
---
|
|
1441
|
+
|
|
1442
|
+
## Monadic law scanners (v0.80)
|
|
1443
|
+
|
|
1444
|
+
Four advisory AST scanners for tier-a1 conformance. All CLI-only; no MCP
|
|
1445
|
+
actions yet.
|
|
1446
|
+
|
|
1447
|
+
### forge mcb-check
|
|
1448
|
+
|
|
1449
|
+
Flag unbounded `while` loops and uncapped recursion in tier-a1 modules.
|
|
1450
|
+
|
|
1451
|
+
```bash
|
|
1452
|
+
forge mcb-check [--package atomadic_forge] [--fail-on-violations] [--json]
|
|
1453
|
+
```
|
|
1454
|
+
|
|
1455
|
+
### forge aiom-check
|
|
1456
|
+
|
|
1457
|
+
Flag forbidden I/O imports (`requests`, `urllib`, `http`, `socket`, `smtplib`,
|
|
1458
|
+
`ftplib`, `telnetlib`, `subprocess`, `multiprocessing`, `httpx`, `aiohttp`) in
|
|
1459
|
+
tier-a1 modules.
|
|
1460
|
+
|
|
1461
|
+
```bash
|
|
1462
|
+
forge aiom-check [--package atomadic_forge] [--fail-on-violations] [--json]
|
|
1463
|
+
```
|
|
1464
|
+
|
|
1465
|
+
### forge fingerprint
|
|
1466
|
+
|
|
1467
|
+
SHA-256 of every a1 module's normalized AST. Stable across whitespace/comment
|
|
1468
|
+
changes, sensitive to logic changes.
|
|
1469
|
+
|
|
1470
|
+
```bash
|
|
1471
|
+
forge fingerprint [--package atomadic_forge] [--json]
|
|
1472
|
+
```
|
|
1473
|
+
|
|
1474
|
+
### forge fuzz
|
|
1475
|
+
|
|
1476
|
+
Hypothesis property fuzzing on a1 callables annotated with `__invariants__`
|
|
1477
|
+
(`"args": {param: strategy_name}` and `"post": "lambda r, **kwargs: bool"`).
|
|
1478
|
+
|
|
1479
|
+
```bash
|
|
1480
|
+
forge fuzz <module> [--max-examples 100] [--project .] [--json]
|
|
1481
|
+
```
|
|
1482
|
+
|
|
1483
|
+
---
|
|
1484
|
+
|
|
1374
1485
|
## Global options
|
|
1375
1486
|
|
|
1376
1487
|
All commands support:
|
|
@@ -424,6 +424,38 @@ absorb:
|
|
|
424
424
|
|
|
425
425
|
## Advanced questions
|
|
426
426
|
|
|
427
|
+
### What is the token-savings ledger and what does `forge token-savings` show?
|
|
428
|
+
|
|
429
|
+
Every enriched Forge verb (recon, certify, context-pack, replay steps, and
|
|
430
|
+
others) appends an entry to `.atomadic-forge/lifetime_savings.jsonl` recording
|
|
431
|
+
approximately how many tokens the structured output saved compared to raw prose.
|
|
432
|
+
`forge token-savings` reads that file and returns the lifetime total, entry
|
|
433
|
+
count, first/last timestamps, and a per-tool breakdown. The ledger is
|
|
434
|
+
append-only and project-local; commit it if you want the metric to persist
|
|
435
|
+
across clones. Added in v0.78.
|
|
436
|
+
|
|
437
|
+
```bash
|
|
438
|
+
forge token-savings --project . --json
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
### What does `forge graft` do and when should I use it instead of `forge auto`?
|
|
444
|
+
|
|
445
|
+
`forge graft` transfers a single named symbol — one function or class — from a
|
|
446
|
+
source file into the current project's tier tree. Use it when you want exactly
|
|
447
|
+
one capability from an external module without absorbing the entire repo. The
|
|
448
|
+
pipeline: extracts the symbol's complete slice, renders a new module with a
|
|
449
|
+
`SCHEMA_VERSION_GRAFT_<NAME>` marker, places it in the correct tier directory,
|
|
450
|
+
runs a wire check, and optionally auto-wires the result as a CLI verb and MCP
|
|
451
|
+
action. If the wire check fails the write is rolled back automatically.
|
|
452
|
+
|
|
453
|
+
Use `forge auto` (or `forge cherry` + `forge finalize`) when you want to absorb
|
|
454
|
+
multiple symbols or an entire repo. Use `forge graft` for surgical one-symbol
|
|
455
|
+
transfers. Added in v0.76.
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
|
|
427
459
|
### Can I customize the tier classification?
|
|
428
460
|
|
|
429
461
|
Not yet, but the scout report logs the rationale per symbol. You can override manually by moving files after absorption.
|
|
@@ -1,11 +1,38 @@
|
|
|
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.81.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
|
|
7
7
|
> the legacy summary kept for backward compatibility.
|
|
8
8
|
|
|
9
|
+
## Cross-repo surgery
|
|
10
|
+
|
|
11
|
+
### `forge graft --source-file <path.py> --symbol <name>` (v0.76)
|
|
12
|
+
|
|
13
|
+
Surgical single-symbol cross-repo capability transfer. Extracts one symbol's
|
|
14
|
+
complete slice (using `graft_extract.extract_symbol` at a1), renders it into a
|
|
15
|
+
tier-correct module stamped with a `SCHEMA_VERSION_GRAFT_<NAME>` marker, writes
|
|
16
|
+
it to the target package, runs a wire-violations check, and optionally
|
|
17
|
+
auto-wires the result into the CLI and MCP surfaces. Rolls back to a backup on
|
|
18
|
+
wire failure.
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
forge graft \
|
|
22
|
+
--source-file path/to/source.py \
|
|
23
|
+
--symbol my_function \
|
|
24
|
+
[--rename new_name] \
|
|
25
|
+
[--tier a1_at_functions] \
|
|
26
|
+
[--target .] \
|
|
27
|
+
[--package atomadic_forge] \
|
|
28
|
+
[--overwrite] \
|
|
29
|
+
[--dry-run] \
|
|
30
|
+
[--auto-wire | --no-auto-wire] \
|
|
31
|
+
[--json]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
9
36
|
## Pipeline / absorption
|
|
10
37
|
|
|
11
38
|
### `forge auto SOURCE OUTPUT`
|
|
@@ -212,6 +239,75 @@ The sidecar drift band is populated today (Lane D W11):
|
|
|
212
239
|
Reserved (Lane D W20): `F0105` `compose_with` mismatch, `F0107`
|
|
213
240
|
`proves:` clause unverified.
|
|
214
241
|
|
|
242
|
+
## Token ledger
|
|
243
|
+
|
|
244
|
+
### `forge token-savings [--project .] [--json]` (v0.78)
|
|
245
|
+
|
|
246
|
+
Displays the lifetime token-savings ledger accumulated across all enriched Forge
|
|
247
|
+
verbs. Every verb that produces enriched output auto-appends an entry to
|
|
248
|
+
`.atomadic-forge/lifetime_savings.jsonl`. The command reads that file and
|
|
249
|
+
returns the lifetime total, entry count, first/last timestamps, and a
|
|
250
|
+
`by_tool` breakdown.
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
forge token-savings --project . --json
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Golden-path replay
|
|
259
|
+
|
|
260
|
+
### `forge replay <recipe-name> [OPTIONS]` (v0.79)
|
|
261
|
+
|
|
262
|
+
Deterministic golden-recipe execution. Runs a named recipe step-by-step and
|
|
263
|
+
logs approximately 80 tokens saved per successful step to the lifetime ledger.
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
forge replay release_hardening [--list] [--dry-run] [--keep-going] \
|
|
267
|
+
[--project .] [--json]
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Options:**
|
|
271
|
+
- `--list` — list all available recipes instead of running one
|
|
272
|
+
- `--dry-run` — show steps without executing
|
|
273
|
+
- `--keep-going` — continue past a failing step
|
|
274
|
+
|
|
275
|
+
**Built-in recipes:** `release_hardening`, `add_cli_command`,
|
|
276
|
+
`fix_wire_violation`, `add_feature`, `publish_mcp`.
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Monadic law scanners (v0.80)
|
|
281
|
+
|
|
282
|
+
Four advisory AST-scanner verbs. All are CLI-only; MCP actions are not yet
|
|
283
|
+
exposed.
|
|
284
|
+
|
|
285
|
+
### `forge mcb-check [--package atomadic_forge] [--fail-on-violations] [--json]`
|
|
286
|
+
|
|
287
|
+
Flags unbounded `while` loops and uncapped recursion inside tier-a1 modules.
|
|
288
|
+
Advisory by default; exits non-zero with `--fail-on-violations`.
|
|
289
|
+
|
|
290
|
+
### `forge aiom-check [--package atomadic_forge] [--fail-on-violations] [--json]`
|
|
291
|
+
|
|
292
|
+
Flags forbidden I/O imports inside tier-a1 modules. Blocked import families:
|
|
293
|
+
`requests`, `urllib`, `http`, `socket`, `smtplib`, `ftplib`, `telnetlib`,
|
|
294
|
+
`subprocess`, `multiprocessing`, `httpx`, `aiohttp`.
|
|
295
|
+
|
|
296
|
+
### `forge fingerprint [--package atomadic_forge] [--json]`
|
|
297
|
+
|
|
298
|
+
SHA-256 fingerprint of every a1 module's normalized AST. Stable across
|
|
299
|
+
whitespace and comment changes; sensitive to logic changes. Use to detect
|
|
300
|
+
silent behavioral drift.
|
|
301
|
+
|
|
302
|
+
### `forge fuzz <module> [--max-examples 100] [--project .] [--json]`
|
|
303
|
+
|
|
304
|
+
Hypothesis-driven property fuzzing on any a1 callable that carries an
|
|
305
|
+
`__invariants__` dict with `"args": {param: strategy_name}` and
|
|
306
|
+
`"post": "lambda r, **kwargs: bool"` keys. Runs up to `--max-examples`
|
|
307
|
+
generated cases and reports counterexamples.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
215
311
|
## Agent integration (MCP)
|
|
216
312
|
|
|
217
313
|
### `forge mcp serve`
|
|
@@ -98,7 +98,7 @@ No LLM is invoked — all analysis is deterministic.
|
|
|
98
98
|
| `dead_code` | Identify unreachable or unused symbols. |
|
|
99
99
|
| `maintainability` | Maintainability index per file/module. |
|
|
100
100
|
| `concept_bridge` | Cross-domain concept linkage detection. |
|
|
101
|
-
| `auto_wire` | Deterministically wire generated surface stubs. |
|
|
101
|
+
| `auto_wire` | Deterministically wire generated surface stubs. CLI stubs produced by auto-wire coerce `list[float]`/`list[int]`/`list[str]` arguments from comma-separated strings (v0.81). |
|
|
102
102
|
| `doc_update` | Regenerate public docs from metrics. |
|
|
103
103
|
| `doc_drift` | Detect public-doc metric drift. |
|
|
104
104
|
|
|
@@ -239,5 +239,24 @@ All tools except `nexus` and `welcome` use `action=<name>` for dispatch:
|
|
|
239
239
|
|
|
240
240
|
---
|
|
241
241
|
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## CLI-only verbs (no MCP action yet)
|
|
245
|
+
|
|
246
|
+
The following verbs added in v0.76–v0.80 are available on the CLI but do not
|
|
247
|
+
yet have corresponding MCP actions:
|
|
248
|
+
|
|
249
|
+
| CLI verb | Version | What it does |
|
|
250
|
+
|----------|---------|-------------|
|
|
251
|
+
| `forge graft` | v0.76 | Single-symbol cross-repo capability transfer |
|
|
252
|
+
| `forge token-savings` | v0.78 | Display lifetime token-savings ledger |
|
|
253
|
+
| `forge replay` | v0.79 | Deterministic golden-recipe execution |
|
|
254
|
+
| `forge mcb-check` | v0.80 | Flag unbounded loops/recursion in tier-a1 |
|
|
255
|
+
| `forge aiom-check` | v0.80 | Flag forbidden I/O imports in tier-a1 |
|
|
256
|
+
| `forge fingerprint` | v0.80 | SHA-256 normalized-AST fingerprint per a1 module |
|
|
257
|
+
| `forge fuzz` | v0.80 | Hypothesis property fuzzing on `__invariants__`-annotated a1 callables |
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
242
261
|
*Numbers sourced from `forge_metrics.json` (canonical, regenerated on every push).*
|
|
243
262
|
*Full CLI reference: [docs/02-commands.md](02-commands.md)*
|
|
@@ -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.83.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,24 @@
|
|
|
1
|
+
"""Grafted from string_distance.py (lines 30–45) by `forge graft`."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from .levenshtein_distance import levenshtein_distance
|
|
5
|
+
|
|
6
|
+
SCHEMA_VERSION_GRAFT_CLOSEST_MATCH = "atomadic-forge.graft.closest_match/v1"
|
|
7
|
+
|
|
8
|
+
def closest_match(query: str, candidates: list[str]) -> str:
|
|
9
|
+
"""Return the candidate string with the smallest Levenshtein distance.
|
|
10
|
+
|
|
11
|
+
Empty candidates list returns the query itself. Ties resolve to
|
|
12
|
+
the first candidate by input order (deterministic).
|
|
13
|
+
"""
|
|
14
|
+
if not candidates:
|
|
15
|
+
return query
|
|
16
|
+
best = candidates[0]
|
|
17
|
+
best_d = levenshtein_distance(query, best)
|
|
18
|
+
for cand in candidates[1:]:
|
|
19
|
+
d = levenshtein_distance(query, cand)
|
|
20
|
+
if d < best_d:
|
|
21
|
+
best = cand
|
|
22
|
+
best_d = d
|
|
23
|
+
return best
|
|
24
|
+
|
{atomadic_forge-0.81.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/graft_extract.py
RENAMED
|
@@ -27,6 +27,10 @@ class GraftExtract:
|
|
|
27
27
|
* ``imports_needed`` — the set of bare module names the symbol's body
|
|
28
28
|
references. Caller resolves these against the source file's import
|
|
29
29
|
table to build the new module's import block.
|
|
30
|
+
* ``sibling_refs`` (v0.81.1) — names referenced by the symbol's body
|
|
31
|
+
that are top-level defs in the SAME donor file but live outside
|
|
32
|
+
this slice. The caller emits relative imports (``from .<name>
|
|
33
|
+
import <name>``) for them so multi-symbol grafts compose cleanly.
|
|
30
34
|
* ``start_line`` / ``end_line`` — 1-based line numbers in the source
|
|
31
35
|
file (for diagnostics and lineage).
|
|
32
36
|
"""
|
|
@@ -36,6 +40,7 @@ class GraftExtract:
|
|
|
36
40
|
imports_needed: frozenset[str]
|
|
37
41
|
start_line: int
|
|
38
42
|
end_line: int
|
|
43
|
+
sibling_refs: frozenset[str] = frozenset()
|
|
39
44
|
|
|
40
45
|
|
|
41
46
|
def _walk_imports_used(node: ast.AST) -> set[str]:
|
|
@@ -144,6 +149,17 @@ def extract_symbol(source_file: Path, symbol_name: str) -> GraftExtract:
|
|
|
144
149
|
table = _import_table(tree)
|
|
145
150
|
imports_needed = frozenset(name for name in used if name in table)
|
|
146
151
|
|
|
152
|
+
# v0.81.1 — sibling-reference detection. Names the body references
|
|
153
|
+
# that are top-level defs in the SAME donor file but NOT in this
|
|
154
|
+
# slice. The renderer uses these to emit `from .<name> import <name>`
|
|
155
|
+
# relative imports so multi-symbol grafts compose without manual fix.
|
|
156
|
+
sibling_top_defs: set[str] = {
|
|
157
|
+
n.name for n in tree.body
|
|
158
|
+
if isinstance(n, ast.FunctionDef | ast.AsyncFunctionDef | ast.ClassDef)
|
|
159
|
+
and n.name != symbol_name
|
|
160
|
+
}
|
|
161
|
+
sibling_refs = frozenset(used & sibling_top_defs)
|
|
162
|
+
|
|
147
163
|
if isinstance(target, ast.AsyncFunctionDef):
|
|
148
164
|
kind = "async_function"
|
|
149
165
|
elif isinstance(target, ast.FunctionDef):
|
|
@@ -158,6 +174,7 @@ def extract_symbol(source_file: Path, symbol_name: str) -> GraftExtract:
|
|
|
158
174
|
imports_needed=imports_needed,
|
|
159
175
|
start_line=start,
|
|
160
176
|
end_line=end,
|
|
177
|
+
sibling_refs=sibling_refs,
|
|
161
178
|
)
|
|
162
179
|
|
|
163
180
|
|
|
@@ -205,6 +222,14 @@ def render_grafted_module(
|
|
|
205
222
|
if needed_imports:
|
|
206
223
|
parts.extend(needed_imports)
|
|
207
224
|
parts.append("")
|
|
225
|
+
# v0.81.1 — emit relative imports for sibling top-level defs the
|
|
226
|
+
# body references. Caller is responsible for grafting those
|
|
227
|
+
# siblings to the same destination tier (default lands them
|
|
228
|
+
# alongside this module so the relative import resolves).
|
|
229
|
+
if extract.sibling_refs:
|
|
230
|
+
for sib in sorted(extract.sibling_refs):
|
|
231
|
+
parts.append(f"from .{sib} import {sib}")
|
|
232
|
+
parts.append("")
|
|
208
233
|
# Surface-gap-discoverable: emit a SCHEMA_VERSION_GRAFT_<NAME>
|
|
209
234
|
# constant so the existing entry-point walker recognizes the grafted
|
|
210
235
|
# symbol as a wireable a1 function. Without this, auto-wire skips
|