atomadic-forge 0.5.1__tar.gz → 0.5.3__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.5.1 → atomadic_forge-0.5.3}/CHANGELOG.md +61 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/PKG-INFO +15 -8
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/README.md +14 -7
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/05-faq.md +8 -4
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/AGENTS_GUIDE.md +25 -13
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/COMMANDS.md +44 -16
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/FIRST_10_MINUTES.md +1 -1
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/pyproject.toml +1 -1
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/__init__.py +1 -1
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +3 -30
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +28 -1
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/patch_scorer.py +14 -9
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/preflight_change.py +20 -6
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/test_selector.py +30 -5
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/tool_composer.py +8 -3
- atomadic_forge-0.5.3/src/atomadic_forge/a1_at_functions/validation_commands.py +183 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/cli.py +73 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/PKG-INFO +15 -8
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/SOURCES.txt +1 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_codex_5_complete.py +37 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_copilots_copilot.py +40 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_mcp_protocol.py +17 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/customer-refactor.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/forge-studio-ci.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/LICENSE +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/MANIFEST.in +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/SECURITY.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/02-commands.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/CI_CD.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/FORMALIZATION.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/README.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/RECEIPT.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/INDEX.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/config.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/SR_11-7_MAPPING.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/setup.cfg +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/_registry.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/requires.txt +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_badge_worker.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_card_renderer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_chat.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_cli_smoke.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_compliance_checker.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_config.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_cs1_renderer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_demo.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_evolve_js.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_stub_detector.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_synergy.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_vscode_extension_manifest.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_wire_suggest_repairs.py +0 -0
|
@@ -1,5 +1,66 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.3 - Documentation metadata sync
|
|
4
|
+
|
|
5
|
+
Small follow-up to `0.5.2` so the published package description and
|
|
6
|
+
current-facing docs no longer advertise stale `0.3.x` version strings,
|
|
7
|
+
old test counts, or the pre-`0.5.2` MCP tool count.
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- README install and contributor snippets now show the current Forge
|
|
12
|
+
version family and `937 passed, 2 skipped`.
|
|
13
|
+
- Current ecosystem positioning now reflects the `0.5.3` PyPI line and
|
|
14
|
+
23-tool MCP surface.
|
|
15
|
+
- First-run and VS Code extension docs now reference the current MCP
|
|
16
|
+
surface/version expectations.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 0.5.2 - Agent ergonomics and language-aware guidance
|
|
21
|
+
|
|
22
|
+
Implements the first round of quality-of-life improvements from the
|
|
23
|
+
Forge agent review. This release makes Forge friendlier when an agent
|
|
24
|
+
uses it on JavaScript repos, documentation/research patches, or live
|
|
25
|
+
MCP connections.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- `forge mcp doctor` smoke-tests MCP stdio with framed `initialize`,
|
|
30
|
+
`tools/list`, and `shutdown` requests. It reports version, project
|
|
31
|
+
root, tool count, framed-stdio status, server exit code, and a
|
|
32
|
+
recovery hint.
|
|
33
|
+
- `tools/list` entries now include a `cli_command` fallback so agents
|
|
34
|
+
can switch from MCP to shell without guessing command names.
|
|
35
|
+
- Shared validation heuristics now detect `package.json` scripts,
|
|
36
|
+
JS/TS tests, tier roots, and release-gate commands.
|
|
37
|
+
|
|
38
|
+
### Improved
|
|
39
|
+
|
|
40
|
+
- `context-pack` prefers `npm run verify` / `npm test` for JavaScript
|
|
41
|
+
projects and derives `forge wire` gates from real tier roots.
|
|
42
|
+
- `preflight` recognizes non-code artifacts such as `docs/`,
|
|
43
|
+
`research/`, `.github/`, and `cognition/guides/` as valid project
|
|
44
|
+
memory instead of misplaced source.
|
|
45
|
+
- `select-tests` discovers JS/TS test files and avoids mirror pytest
|
|
46
|
+
requirements for documentation-only changes.
|
|
47
|
+
- `score-patch` no longer treats docs/research-only diffs as code
|
|
48
|
+
changes without tests, and emits language-aware validation commands
|
|
49
|
+
when a project root is provided.
|
|
50
|
+
- `compose-tools verify_patch` now maps to
|
|
51
|
+
`score_patch -> select_tests -> wire -> certify`.
|
|
52
|
+
- Hidden worktrees, experiment directories, build output, and
|
|
53
|
+
`node_modules` are skipped when deriving release-gate wire roots.
|
|
54
|
+
|
|
55
|
+
### Tests
|
|
56
|
+
|
|
57
|
+
- Added regression tests for JavaScript validation selection,
|
|
58
|
+
non-code artifact preflight, docs-only patch scoring, exact
|
|
59
|
+
`verify_patch` recipe matching, MCP CLI fallback metadata, and
|
|
60
|
+
`forge mcp doctor`.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
3
64
|
## 0.5.1 — MCP stdio framing compatibility
|
|
4
65
|
|
|
5
66
|
Fixes `forge mcp serve` for MCP hosts that use LSP-style
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.3
|
|
4
4
|
Summary: Atomadic Forge — absorb, enforce, emerge. Polyglot (Python + JavaScript/TypeScript) architecture guardian for AI-generated code.
|
|
5
5
|
Author: Atomadic
|
|
6
6
|
License-Expression: BUSL-1.1
|
|
@@ -185,7 +185,7 @@ Each tier is a layer of **verified building blocks**. Higher tiers never invent
|
|
|
185
185
|
|
|
186
186
|
```bash
|
|
187
187
|
pip install atomadic-forge
|
|
188
|
-
forge --version # atomadic-forge 0.3
|
|
188
|
+
forge --version # atomadic-forge 0.5.3
|
|
189
189
|
forge doctor # environment check
|
|
190
190
|
```
|
|
191
191
|
|
|
@@ -198,7 +198,7 @@ generate).
|
|
|
198
198
|
```bash
|
|
199
199
|
git clone https://github.com/atomadictech/atomadic-forge && cd atomadic-forge
|
|
200
200
|
pip install -e ".[dev]"
|
|
201
|
-
python -m pytest #
|
|
201
|
+
python -m pytest # 937 passed, 2 skipped
|
|
202
202
|
```
|
|
203
203
|
|
|
204
204
|
## AI Agent integration (MCP)
|
|
@@ -216,14 +216,21 @@ Forge ships a **Model Context Protocol server** — add it to Cursor, Claude Cod
|
|
|
216
216
|
}
|
|
217
217
|
```
|
|
218
218
|
|
|
219
|
-
**
|
|
219
|
+
**23 tools exposed:** `recon` · `wire` · `certify` · `enforce` · `audit_list` · `auto_plan` · `auto_step` · `auto_apply` · `context_pack` · `preflight_change` · `score_patch` · `select_tests` · `rollback_plan` · `explain_repo` · `adapt_plan` · `compose_tools` · `load_policy` · `why_did_this_change` · `what_failed_last_time` · `list_recipes` · `get_recipe` · `trust_gate_response` · `exported_api_check`
|
|
220
220
|
|
|
221
221
|
**5 resources:** Receipt schema · formalization docs · lineage chain · blocker summary · verdicts
|
|
222
222
|
|
|
223
223
|
```bash
|
|
224
224
|
forge mcp serve --help # full tool + resource listing with examples
|
|
225
|
+
forge mcp doctor --project . --json
|
|
225
226
|
```
|
|
226
227
|
|
|
228
|
+
As of `0.5.2`, `tools/list` includes a `cli_command` fallback for
|
|
229
|
+
each MCP tool. `context-pack`, `preflight`, `select-tests`, and
|
|
230
|
+
`score-patch` also use language-aware validation commands so
|
|
231
|
+
JavaScript projects get `npm run verify` / `npm test` guidance and
|
|
232
|
+
documentation/research paths are treated as non-code project memory.
|
|
233
|
+
|
|
227
234
|
### Subscription required for `forge mcp serve`
|
|
228
235
|
|
|
229
236
|
Every `tools/call` against the MCP server is gated behind a paid Forge
|
|
@@ -370,7 +377,7 @@ Forge waits before returning a clear provider error.
|
|
|
370
377
|
|
|
371
378
|
| Command | Purpose |
|
|
372
379
|
|---------|---------|
|
|
373
|
-
| `forge mcp serve` | Stdio JSON-RPC MCP server —
|
|
380
|
+
| `forge mcp serve` | Stdio JSON-RPC MCP server — 23 tools for Cursor / Claude Code / Aider / Devin. |
|
|
374
381
|
| `forge plan / plan-list / plan-show / plan-step / plan-apply` | Agent plan persistence and step-by-step apply. |
|
|
375
382
|
| `forge iterate` | LLM loop: intent → code → absorb → wire → score → iterate. Single shot. |
|
|
376
383
|
| `forge evolve` | Recursive improvement: N rounds, catalog grows each round. |
|
|
@@ -442,7 +449,7 @@ Forge ships with named limits. No overpromise.
|
|
|
442
449
|
| Product | What it is | Status |
|
|
443
450
|
|---------|------------|--------|
|
|
444
451
|
| **AAAA-Nexus** | Trust/safety/payments substrate for autonomous agents | Live at [atomadic.tech](https://atomadic.tech) |
|
|
445
|
-
| **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **0.3
|
|
452
|
+
| **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **0.5.3** — on PyPI, 937 tests, 100/100, 23-tool MCP server, desktop GUI |
|
|
446
453
|
| **Atomadic Assistant** | Sovereign AI assistant with cognitive loop on Cloudflare | In development |
|
|
447
454
|
|
|
448
455
|
## License
|
|
@@ -470,7 +477,7 @@ Apache 2.0.
|
|
|
470
477
|
**Forge itself is monadic.** Every source file belongs to one tier. The repo is a worked example:
|
|
471
478
|
|
|
472
479
|
```bash
|
|
473
|
-
python -m pytest #
|
|
480
|
+
python -m pytest # 937 passed, 2 skipped
|
|
474
481
|
forge doctor # Environment check
|
|
475
482
|
forge wire src/atomadic_forge # Scan for violations (PASS)
|
|
476
483
|
forge certify . --fail-under 100 # Score and gate the repo (100/100)
|
|
@@ -492,7 +499,7 @@ forge commandsmith smoke # Smoke-test all 36+ registered verbs
|
|
|
492
499
|
- ✓ **100/100 certify** — forge scores itself on every CI run
|
|
493
500
|
- ✓ **0 wire violations** — forge passes its own import-law scan
|
|
494
501
|
- ✓ **On PyPI** — `pip install atomadic-forge`
|
|
495
|
-
- ✓ **MCP server** —
|
|
502
|
+
- ✓ **MCP server** — 23 tools, 5 resources; works with Cursor, Claude Code, Aider, Devin
|
|
496
503
|
- ✓ **Desktop GUI** — Forge Studio (Tauri 2 + React)
|
|
497
504
|
- ✓ **Ed25519 signing** — `forge certify --local-sign`
|
|
498
505
|
- ✓ **CycloneDX SBOM** — `forge sbom`
|
|
@@ -153,7 +153,7 @@ Each tier is a layer of **verified building blocks**. Higher tiers never invent
|
|
|
153
153
|
|
|
154
154
|
```bash
|
|
155
155
|
pip install atomadic-forge
|
|
156
|
-
forge --version # atomadic-forge 0.3
|
|
156
|
+
forge --version # atomadic-forge 0.5.3
|
|
157
157
|
forge doctor # environment check
|
|
158
158
|
```
|
|
159
159
|
|
|
@@ -166,7 +166,7 @@ generate).
|
|
|
166
166
|
```bash
|
|
167
167
|
git clone https://github.com/atomadictech/atomadic-forge && cd atomadic-forge
|
|
168
168
|
pip install -e ".[dev]"
|
|
169
|
-
python -m pytest #
|
|
169
|
+
python -m pytest # 937 passed, 2 skipped
|
|
170
170
|
```
|
|
171
171
|
|
|
172
172
|
## AI Agent integration (MCP)
|
|
@@ -184,14 +184,21 @@ Forge ships a **Model Context Protocol server** — add it to Cursor, Claude Cod
|
|
|
184
184
|
}
|
|
185
185
|
```
|
|
186
186
|
|
|
187
|
-
**
|
|
187
|
+
**23 tools exposed:** `recon` · `wire` · `certify` · `enforce` · `audit_list` · `auto_plan` · `auto_step` · `auto_apply` · `context_pack` · `preflight_change` · `score_patch` · `select_tests` · `rollback_plan` · `explain_repo` · `adapt_plan` · `compose_tools` · `load_policy` · `why_did_this_change` · `what_failed_last_time` · `list_recipes` · `get_recipe` · `trust_gate_response` · `exported_api_check`
|
|
188
188
|
|
|
189
189
|
**5 resources:** Receipt schema · formalization docs · lineage chain · blocker summary · verdicts
|
|
190
190
|
|
|
191
191
|
```bash
|
|
192
192
|
forge mcp serve --help # full tool + resource listing with examples
|
|
193
|
+
forge mcp doctor --project . --json
|
|
193
194
|
```
|
|
194
195
|
|
|
196
|
+
As of `0.5.2`, `tools/list` includes a `cli_command` fallback for
|
|
197
|
+
each MCP tool. `context-pack`, `preflight`, `select-tests`, and
|
|
198
|
+
`score-patch` also use language-aware validation commands so
|
|
199
|
+
JavaScript projects get `npm run verify` / `npm test` guidance and
|
|
200
|
+
documentation/research paths are treated as non-code project memory.
|
|
201
|
+
|
|
195
202
|
### Subscription required for `forge mcp serve`
|
|
196
203
|
|
|
197
204
|
Every `tools/call` against the MCP server is gated behind a paid Forge
|
|
@@ -338,7 +345,7 @@ Forge waits before returning a clear provider error.
|
|
|
338
345
|
|
|
339
346
|
| Command | Purpose |
|
|
340
347
|
|---------|---------|
|
|
341
|
-
| `forge mcp serve` | Stdio JSON-RPC MCP server —
|
|
348
|
+
| `forge mcp serve` | Stdio JSON-RPC MCP server — 23 tools for Cursor / Claude Code / Aider / Devin. |
|
|
342
349
|
| `forge plan / plan-list / plan-show / plan-step / plan-apply` | Agent plan persistence and step-by-step apply. |
|
|
343
350
|
| `forge iterate` | LLM loop: intent → code → absorb → wire → score → iterate. Single shot. |
|
|
344
351
|
| `forge evolve` | Recursive improvement: N rounds, catalog grows each round. |
|
|
@@ -410,7 +417,7 @@ Forge ships with named limits. No overpromise.
|
|
|
410
417
|
| Product | What it is | Status |
|
|
411
418
|
|---------|------------|--------|
|
|
412
419
|
| **AAAA-Nexus** | Trust/safety/payments substrate for autonomous agents | Live at [atomadic.tech](https://atomadic.tech) |
|
|
413
|
-
| **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **0.3
|
|
420
|
+
| **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **0.5.3** — on PyPI, 937 tests, 100/100, 23-tool MCP server, desktop GUI |
|
|
414
421
|
| **Atomadic Assistant** | Sovereign AI assistant with cognitive loop on Cloudflare | In development |
|
|
415
422
|
|
|
416
423
|
## License
|
|
@@ -438,7 +445,7 @@ Apache 2.0.
|
|
|
438
445
|
**Forge itself is monadic.** Every source file belongs to one tier. The repo is a worked example:
|
|
439
446
|
|
|
440
447
|
```bash
|
|
441
|
-
python -m pytest #
|
|
448
|
+
python -m pytest # 937 passed, 2 skipped
|
|
442
449
|
forge doctor # Environment check
|
|
443
450
|
forge wire src/atomadic_forge # Scan for violations (PASS)
|
|
444
451
|
forge certify . --fail-under 100 # Score and gate the repo (100/100)
|
|
@@ -460,7 +467,7 @@ forge commandsmith smoke # Smoke-test all 36+ registered verbs
|
|
|
460
467
|
- ✓ **100/100 certify** — forge scores itself on every CI run
|
|
461
468
|
- ✓ **0 wire violations** — forge passes its own import-law scan
|
|
462
469
|
- ✓ **On PyPI** — `pip install atomadic-forge`
|
|
463
|
-
- ✓ **MCP server** —
|
|
470
|
+
- ✓ **MCP server** — 23 tools, 5 resources; works with Cursor, Claude Code, Aider, Devin
|
|
464
471
|
- ✓ **Desktop GUI** — Forge Studio (Tauri 2 + React)
|
|
465
472
|
- ✓ **Ed25519 signing** — `forge certify --local-sign`
|
|
466
473
|
- ✓ **CycloneDX SBOM** — `forge sbom`
|
|
@@ -429,27 +429,31 @@ config:
|
|
|
429
429
|
}
|
|
430
430
|
```
|
|
431
431
|
|
|
432
|
-
Once registered, the agent gets **
|
|
433
|
-
full Codex-1..5 surface
|
|
432
|
+
Once registered, the agent gets **23 tools** + **5 resources** (the
|
|
433
|
+
full Codex-1..5 surface plus response/API trust gates). The 23 tools group into
|
|
434
434
|
*inventory* (`recon` / `wire` / `certify` / `enforce` / `audit_list` /
|
|
435
435
|
`agent_summary`), *action loop* (`auto_plan` / `auto_step` /
|
|
436
436
|
`auto_apply`), and *Copilot's Copilot* (`context_pack` /
|
|
437
437
|
`preflight_change` / `score_patch` / `select_tests` / `rollback_plan` /
|
|
438
438
|
`explain_repo` / `adapt_plan` / `compose_tools` / `load_policy` /
|
|
439
439
|
`why_did_this_change` / `what_failed_last_time` / `list_recipes` /
|
|
440
|
-
`get_recipe`). See the full **[Agents Guide](AGENTS_GUIDE.md)** for
|
|
440
|
+
`get_recipe` / `trust_gate_response` / `exported_api_check`). See the full **[Agents Guide](AGENTS_GUIDE.md)** for
|
|
441
441
|
integration patterns, the agent-friendly `agent_summary` /
|
|
442
442
|
`context_pack` tools, the Forge Receipt schema agents should
|
|
443
443
|
consume, F-code routing for mechanical fixes, the proposal-engine
|
|
444
444
|
flow, and best practices.
|
|
445
445
|
|
|
446
|
+
For MCP troubleshooting, run `forge mcp doctor --project . --json`.
|
|
447
|
+
As of `0.5.2`, `tools/list` also includes a `cli_command` fallback for
|
|
448
|
+
each MCP tool, and validation hints are language-aware.
|
|
449
|
+
|
|
446
450
|
### What's the difference between AGENTS.md and the Agents Guide?
|
|
447
451
|
|
|
448
452
|
- **`AGENTS.md`** at the repo root is for agents *building* Forge —
|
|
449
453
|
the dev contract: tier discipline, F-code namespace, schema
|
|
450
454
|
versioning, branch hygiene, the verification lane.
|
|
451
455
|
- **`docs/AGENTS_GUIDE.md`** is for agents *using* Forge — Cursor /
|
|
452
|
-
Claude Code / Aider / etc. integrating via MCP, calling the
|
|
456
|
+
Claude Code / Aider / etc. integrating via MCP, calling the 23
|
|
453
457
|
tools, consuming Receipts, running `preflight_change` /
|
|
454
458
|
`score_patch` guardrails, applying mechanical fixes via `enforce`.
|
|
455
459
|
|
|
@@ -42,26 +42,23 @@ Claude Code / Aider / your own):
|
|
|
42
42
|
}
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
Once registered, the agent gets **
|
|
46
|
-
tool list
|
|
45
|
+
Once registered, the agent gets **23 tools** + **5 resources** in its
|
|
46
|
+
tool list. No
|
|
47
47
|
additional setup.
|
|
48
48
|
|
|
49
49
|
Smoke test that the server is reachable:
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
|
-
|
|
53
|
-
'{"jsonrpc":"2.0","id":1,"method":"initialize"}' \
|
|
54
|
-
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
|
|
55
|
-
'{"jsonrpc":"2.0","id":3,"method":"shutdown"}' \
|
|
56
|
-
| forge mcp serve --project .
|
|
52
|
+
forge mcp doctor --project . --json
|
|
57
53
|
```
|
|
58
54
|
|
|
59
|
-
|
|
55
|
+
Returns Forge version, tool count, framed-stdio status, and the next
|
|
56
|
+
recovery command if the MCP host needs a restart.
|
|
60
57
|
Or against the installed CLI:
|
|
61
58
|
|
|
62
59
|
```bash
|
|
63
60
|
$ forge --version
|
|
64
|
-
atomadic-forge 0.3
|
|
61
|
+
atomadic-forge 0.5.3
|
|
65
62
|
```
|
|
66
63
|
|
|
67
64
|
The `--version` flag (and `-V`) is the canonical "Forge is wired in
|
|
@@ -69,7 +66,7 @@ correctly" smoke check — pin it in your setup scripts.
|
|
|
69
66
|
|
|
70
67
|
---
|
|
71
68
|
|
|
72
|
-
## The
|
|
69
|
+
## The 23 MCP tools — by phase of an agent's lifecycle
|
|
73
70
|
|
|
74
71
|
| Inventory (read-only) | Action loop | Copilot's Copilot |
|
|
75
72
|
|---|---|---|
|
|
@@ -86,6 +83,8 @@ correctly" smoke check — pin it in your setup scripts.
|
|
|
86
83
|
| | | `what_failed_last_time` |
|
|
87
84
|
| | | `list_recipes` |
|
|
88
85
|
| | | `get_recipe` |
|
|
86
|
+
| | | `trust_gate_response` |
|
|
87
|
+
| | | `exported_api_check` |
|
|
89
88
|
|
|
90
89
|
**Inventory tools — read-only state queries.** Cheap; safe to call
|
|
91
90
|
in a loop:
|
|
@@ -126,6 +125,12 @@ always-on senior engineer beside the coding agent:
|
|
|
126
125
|
| **`what_failed_last_time`** ← *Codex-5* | `what_failed/v1` — historical failures scoped to an area | "What went wrong here before — so I don't repeat it?" |
|
|
127
126
|
| **`list_recipes`** ← *Codex-5* | catalogue of golden-path recipes | First-orientation. Pre-baked: `release_hardening`, `add_cli_command`, `fix_wire_violation`, `add_feature`, `publish_mcp`. |
|
|
128
127
|
| **`get_recipe`** ← *Codex-5* | `recipe/v1` — step-by-step plan | "Walk me through `release_hardening` step by step." |
|
|
128
|
+
| **`trust_gate_response`** | `trust_gate/v1` — response hallucination checks | Before sending generated implementation notes or code snippets back to a human. |
|
|
129
|
+
| **`exported_api_check`** | `exported_api_check/v1` — docstring/API promise verification | Before publishing generated modules that claim public functions in docs. |
|
|
130
|
+
|
|
131
|
+
Every `tools/list` entry includes a `cli_command` fallback. If the MCP
|
|
132
|
+
transport drops, use that command shape directly in the shell while
|
|
133
|
+
you restart the editor or MCP host.
|
|
129
134
|
|
|
130
135
|
(Plus four `plan_list` / `plan_show` / `plan_step` / `plan_apply`
|
|
131
136
|
verbs from Codex-3 — same 1:1 mapping to the CLI verbs of the same
|
|
@@ -139,13 +144,20 @@ name.)
|
|
|
139
144
|
orientation; `preflight_change` *before* every write;
|
|
140
145
|
`score_patch` *after* drafting the diff. Forge is the always-on
|
|
141
146
|
senior engineer reviewing each step.
|
|
142
|
-
3. **Proposal-engine (full
|
|
147
|
+
3. **Proposal-engine (full 23 tools)**: `auto_plan` for direction,
|
|
143
148
|
`adapt_plan` for capability-aware filtering, `auto_apply` to
|
|
144
149
|
execute, `enforce` for mechanical fixes, `rollback_plan` if
|
|
145
150
|
anything regresses, `why_did_this_change` /
|
|
146
151
|
`what_failed_last_time` for historical context. Forge drives;
|
|
147
152
|
the agent supplies LLM context where Forge can't mechanize.
|
|
148
153
|
|
|
154
|
+
`context_pack`, `preflight_change`, `select_tests`, and `score_patch`
|
|
155
|
+
are language-aware as of `0.5.2`: JavaScript projects with
|
|
156
|
+
`package.json` scripts get `npm run verify` / `npm test`, tier wire
|
|
157
|
+
commands are derived from real tier roots, and documentation paths
|
|
158
|
+
such as `docs/`, `research/`, `.github/`, and `cognition/guides/` are
|
|
159
|
+
treated as non-code artifacts rather than misplaced source.
|
|
160
|
+
|
|
149
161
|
---
|
|
150
162
|
|
|
151
163
|
## The 5 MCP resources
|
|
@@ -356,7 +368,7 @@ Forge's normative answer; only the *attestation chain* is missing.
|
|
|
356
368
|
| Symptom | Likely cause | Fix |
|
|
357
369
|
|---|---|---|
|
|
358
370
|
| Tools list returns 0 tools | MCP client didn't pass `--project .` | Check args in MCP config |
|
|
359
|
-
| Tools list returns <
|
|
371
|
+
| Tools list returns < 23 (e.g. 21 or 10) | Old `forge` install | `pip install -U atomadic-forge` (or `pip install -e .` from the repo). Pin `forge --version >= 0.5.3`. |
|
|
360
372
|
| `wire` says PASS but agent still hits import errors | Agent is running tests in a different working directory | `--project` should match the test cwd |
|
|
361
373
|
| `certify` returns score 90 instead of 100 | Project has no `.github/workflows/` and no `CHANGELOG.md` (operational axis is 0) | Add either; both are 5pts |
|
|
362
374
|
| Receipt's `signatures` is null | `AAAA_NEXUS_API_KEY` not set, or AAAA-Nexus endpoint not yet shipped | Soft-fail behavior — Receipt is still valid for local use |
|
|
@@ -423,7 +435,7 @@ control plane around any coding agent**:
|
|
|
423
435
|
true` when the agent's intent fans out across more than 8 files
|
|
424
436
|
(configurable). CLI exits 1 in that case so a pre-commit hook can
|
|
425
437
|
block.
|
|
426
|
-
- **`score_patch`** (MCP
|
|
438
|
+
- **`score_patch`** (CLI: `forge score-patch`, MCP: `score_patch`) — diff-level risk
|
|
427
439
|
preview. Given a unified-diff string, surfaces architectural_risk
|
|
428
440
|
(new upward imports), public_api_risk (`__init__.py` touched),
|
|
429
441
|
release_risk (pyproject / version / CHANGELOG / LICENSE), test_risk
|
|
@@ -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.5.3.
|
|
4
4
|
|
|
5
5
|
## Pipeline / absorption
|
|
6
6
|
|
|
@@ -206,7 +206,7 @@ clean shutdown. The soft-fail contract from `receipt_signer.py`
|
|
|
206
206
|
applies — every tool gracefully degrades when an upstream (e.g.,
|
|
207
207
|
AAAA-Nexus signing) is unreachable.
|
|
208
208
|
|
|
209
|
-
**The
|
|
209
|
+
**The 23 MCP tools, grouped by phase of an agent's lifecycle:**
|
|
210
210
|
|
|
211
211
|
| Inventory (read-only) | Action loop | Copilot's Copilot |
|
|
212
212
|
|---|---|---|
|
|
@@ -223,11 +223,28 @@ AAAA-Nexus signing) is unreachable.
|
|
|
223
223
|
| | | `what_failed_last_time` |
|
|
224
224
|
| | | `list_recipes` |
|
|
225
225
|
| | | `get_recipe` |
|
|
226
|
+
| | | `trust_gate_response` |
|
|
227
|
+
| | | `exported_api_check` |
|
|
226
228
|
|
|
227
229
|
**5 MCP resources:** `forge://docs/receipt`, `forge://docs/formalization`,
|
|
228
230
|
`forge://lineage/chain`, `forge://schema/receipt`,
|
|
229
231
|
`forge://summary/blockers`.
|
|
230
232
|
|
|
233
|
+
### `forge mcp doctor`
|
|
234
|
+
|
|
235
|
+
Agent-facing MCP health check. It starts the local stdio server in
|
|
236
|
+
memory, sends framed `initialize`, `tools/list`, and `shutdown`
|
|
237
|
+
requests, and reports whether the transport path is healthy.
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
forge mcp doctor --project . --json
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Returns `atomadic-forge.mcp_doctor/v1` with Forge version, project
|
|
244
|
+
root, tool count, framed-stdio status, server exit code, and a
|
|
245
|
+
`next_command`. If this passes but your editor's live MCP tools fail,
|
|
246
|
+
restart the MCP host/editor so it respawns the server.
|
|
247
|
+
|
|
231
248
|
What this unlocks per Golden Path Lane C: the Forge Receipt JSON
|
|
232
249
|
becomes consumable by every major coding-agent platform via the same
|
|
233
250
|
schema as `forge certify --emit-receipt` — *one Receipt across
|
|
@@ -317,10 +334,11 @@ a repo. Wraps scout + wire + certify and adds:
|
|
|
317
334
|
- `architecture_law` — pinned 5-tier law text (so the agent doesn't
|
|
318
335
|
have to look it up).
|
|
319
336
|
- `tier_map`, `blockers_summary`, `best_next_action`.
|
|
320
|
-
- `test_commands` —
|
|
321
|
-
Cargo.toml
|
|
322
|
-
- `release_gate` —
|
|
323
|
-
|
|
337
|
+
- `test_commands` — language-aware detection from `package.json`
|
|
338
|
+
scripts, pyproject / tox.ini, Cargo.toml, or Makefile.
|
|
339
|
+
- `release_gate` — language-aware validation: JS repos prefer
|
|
340
|
+
`npm run verify` / `npm test`, Python repos get pytest/ruff, and
|
|
341
|
+
`forge wire` targets real tier roots instead of hard-coded `src`.
|
|
324
342
|
- `risky_files`, `recent_lineage`, `pinned_resources`.
|
|
325
343
|
|
|
326
344
|
```bash
|
|
@@ -339,10 +357,13 @@ write, emits `atomadic-forge.preflight/v1` with:
|
|
|
339
357
|
- `forbidden_imports` — tiers above this file's tier (read-only, but
|
|
340
358
|
the agent should treat as hard rules before drafting).
|
|
341
359
|
- `likely_tests` — mirror-style: `tests/test_<stem>.py`,
|
|
342
|
-
`<stem>_test.py`, etc.
|
|
360
|
+
`<stem>_test.py`, JS/TS `*.test.*` / `*.spec.*`, etc.
|
|
343
361
|
- `siblings_to_read` — first 5 `.py` siblings in the same dir.
|
|
344
362
|
- Overall `write_scope_too_broad` flag (default threshold = 8 files;
|
|
345
363
|
override with `--scope-threshold N`).
|
|
364
|
+
- Non-code artifacts under `docs/`, `research/`, `.github/`,
|
|
365
|
+
`cognition/guides/`, and similar paths are accepted as project
|
|
366
|
+
memory with no tier warning.
|
|
346
367
|
|
|
347
368
|
```bash
|
|
348
369
|
forge preflight 'Add a parser helper' \
|
|
@@ -353,17 +374,22 @@ Exits **1** when `write_scope_too_broad` is true — designed to be
|
|
|
353
374
|
called from a pre-commit hook or an agent's tool-use loop. Add
|
|
354
375
|
`--json` for machine-readable output.
|
|
355
376
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
377
|
+
`score_patch` also has a CLI front door:
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
git diff | forge score-patch --project-root .
|
|
381
|
+
forge score-patch --file patch.diff --project-root .
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
When a project root is supplied, its suggested validation commands use
|
|
385
|
+
the same language-aware gate as `context-pack`.
|
|
360
386
|
|
|
361
|
-
### Copilot's Copilot — the rest of Codex-5
|
|
387
|
+
### Copilot's Copilot — the rest of Codex-5
|
|
362
388
|
|
|
363
389
|
The 8 modules added in `276a092` (Codex's items #5–#12) ship as MCP
|
|
364
|
-
tools
|
|
365
|
-
|
|
366
|
-
schema agents should treat as a contract:
|
|
390
|
+
tools and CLI verbs. Agents can consume them through `forge mcp serve`
|
|
391
|
+
or use the `cli_command` fallback exposed by `tools/list`. Each returns
|
|
392
|
+
a versioned JSON schema agents should treat as a contract:
|
|
367
393
|
|
|
368
394
|
| MCP tool | Schema | What it answers |
|
|
369
395
|
|---|---|---|
|
|
@@ -376,6 +402,8 @@ schema agents should treat as a contract:
|
|
|
376
402
|
| `adapt_plan` | `atomadic-forge.agent_plan_adapted/v1` | Filter an `agent_plan/v1` for a specific agent's capability set (`edit_files`, `run_commands`, `network`, `review`, `delegate`). Each card gets `recommended_handling`: `apply` / `delegate` / `ask_human` / `report_only`. |
|
|
377
403
|
| `compose_tools` | n/a (returns ordered tool list) | Goal-keyword → ordered tool sequence. Pre-baked recipes: `orient`, `release_check`, `fix_violation`, `before_edit`, `verify_patch`. |
|
|
378
404
|
| `list_recipes` / `get_recipe` | `atomadic-forge.recipe/v1` | Golden-path playbooks: `release_hardening`, `add_cli_command`, `fix_wire_violation`, `add_feature`, `publish_mcp`. Each recipe is a step-by-step plan agents can `get_recipe` and execute. |
|
|
405
|
+
| `trust_gate_response` | `trust_gate/v1` | Check generated responses for unresolved imports, syntax errors, stub-pattern code, false capability claims, and placeholder URLs. |
|
|
406
|
+
| `exported_api_check` | `exported_api_check/v1` | Verify that docstring-promised public APIs resolve to actual top-level definitions. |
|
|
379
407
|
|
|
380
408
|
These complete Codex's 12-item Copilot's Copilot enumeration — items
|
|
381
409
|
#5–#12. Items #1–#3 are the Codex-4 hero primitives
|
|
@@ -391,7 +419,7 @@ Prints the installed Forge version and exits 0. Hardened in v0.3.0
|
|
|
391
419
|
|
|
392
420
|
```bash
|
|
393
421
|
$ forge --version
|
|
394
|
-
atomadic-forge 0.3
|
|
422
|
+
atomadic-forge 0.5.3
|
|
395
423
|
```
|
|
396
424
|
|
|
397
425
|
### `.forge` sidecars — Lane D W8
|
|
@@ -185,7 +185,7 @@ You now know enough to use Forge productively. For specific topics:
|
|
|
185
185
|
- [tutorials/](tutorials/) — quickstart tutorials and the JS / TS path.
|
|
186
186
|
- **[AGENTS_GUIDE.md](AGENTS_GUIDE.md)** — using Forge from a coding
|
|
187
187
|
agent (Cursor / Claude Code / Aider / Devin / Copilot / Codex) via
|
|
188
|
-
the built-in MCP server. One config snippet, **
|
|
188
|
+
the built-in MCP server. One config snippet, **23 tools**, 5
|
|
189
189
|
resources. The fastest way to put Forge in front of every PR your
|
|
190
190
|
team's agents touch.
|
|
191
191
|
- [MULTI_REPO.md](MULTI_REPO.md) — absorbing more than one repo at once.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "atomadic-forge"
|
|
7
|
-
version = "0.5.
|
|
7
|
+
version = "0.5.3"
|
|
8
8
|
description = "Atomadic Forge — absorb, enforce, emerge. Polyglot (Python + JavaScript/TypeScript) architecture guardian for AI-generated code."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -20,6 +20,7 @@ from typing import TypedDict
|
|
|
20
20
|
|
|
21
21
|
from .agent_summary import summarize_blockers
|
|
22
22
|
from .lineage_reader import read_lineage
|
|
23
|
+
from .validation_commands import detect_test_commands, release_gate_commands
|
|
23
24
|
|
|
24
25
|
SCHEMA_VERSION_CONTEXT_PACK_V1 = "atomadic-forge.context_pack/v1"
|
|
25
26
|
|
|
@@ -86,40 +87,12 @@ def _read_repo_purpose(project_root: Path) -> str:
|
|
|
86
87
|
|
|
87
88
|
|
|
88
89
|
def _detect_test_commands(project_root: Path) -> list[str]:
|
|
89
|
-
|
|
90
|
-
if (project_root / "pyproject.toml").exists():
|
|
91
|
-
cmds.append("python -m pytest")
|
|
92
|
-
if (project_root / "tox.ini").exists():
|
|
93
|
-
cmds.append("tox")
|
|
94
|
-
if (project_root / "package.json").exists():
|
|
95
|
-
cmds.append("npm test")
|
|
96
|
-
if (project_root / "Cargo.toml").exists():
|
|
97
|
-
cmds.append("cargo test")
|
|
98
|
-
if (project_root / "Makefile").exists():
|
|
99
|
-
# Look for a 'test' target.
|
|
100
|
-
try:
|
|
101
|
-
mk = (project_root / "Makefile").read_text(
|
|
102
|
-
encoding="utf-8", errors="replace")
|
|
103
|
-
if re.search(r"^test:", mk, re.MULTILINE):
|
|
104
|
-
cmds.append("make test")
|
|
105
|
-
except OSError:
|
|
106
|
-
pass
|
|
107
|
-
if not cmds:
|
|
108
|
-
cmds.append("# no test runner detected — add tests/ + pytest")
|
|
109
|
-
return cmds
|
|
90
|
+
return detect_test_commands(project_root)
|
|
110
91
|
|
|
111
92
|
|
|
112
93
|
def _release_gate(project_root: Path) -> list[str]:
|
|
113
94
|
"""Heuristic release gate: lint + tests + wire + certify ≥ 75."""
|
|
114
|
-
|
|
115
|
-
if (project_root / "pyproject.toml").exists():
|
|
116
|
-
gate.append("python -m ruff check .")
|
|
117
|
-
gate.extend([
|
|
118
|
-
"python -m pytest",
|
|
119
|
-
"forge wire src --fail-on-violations",
|
|
120
|
-
"forge certify . --fail-under 75",
|
|
121
|
-
])
|
|
122
|
-
return gate
|
|
95
|
+
return release_gate_commands(project_root)
|
|
123
96
|
|
|
124
97
|
|
|
125
98
|
def _risky_files(lineage: list[dict], top_n: int = 10) -> list[dict]:
|
{atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/mcp_protocol.py
RENAMED
|
@@ -884,6 +884,32 @@ TOOLS: dict[str, dict[str, Any]] = {
|
|
|
884
884
|
},
|
|
885
885
|
}
|
|
886
886
|
|
|
887
|
+
_CLI_FALLBACKS: dict[str, str] = {
|
|
888
|
+
"recon": "forge recon <repo> --json",
|
|
889
|
+
"wire": "forge wire <tier-root> --json",
|
|
890
|
+
"certify": "forge certify <project-root> --json",
|
|
891
|
+
"enforce": "forge enforce <tier-root>",
|
|
892
|
+
"audit_list": "forge audit list --json",
|
|
893
|
+
"auto_plan": "forge plan <repo> --json",
|
|
894
|
+
"auto_step": "forge plan-step <plan-id> <card-id> --project <repo>",
|
|
895
|
+
"auto_apply": "forge plan-apply <plan-id> --project <repo>",
|
|
896
|
+
"context_pack": "forge context-pack <project-root> --json",
|
|
897
|
+
"preflight_change": "forge preflight <intent> <file...> --project <repo> --json",
|
|
898
|
+
"score_patch": "git diff | forge score-patch --project-root <repo>",
|
|
899
|
+
"select_tests": "forge select-tests --file <path> --project-root <repo> <intent>",
|
|
900
|
+
"rollback_plan": "forge rollback-plan --file <path> --project-root <repo>",
|
|
901
|
+
"explain_repo": "forge explain-repo <project-root>",
|
|
902
|
+
"adapt_plan": "forge adapt-plan --file <plan.json>",
|
|
903
|
+
"compose_tools": "forge compose-tools <goal>",
|
|
904
|
+
"load_policy": "forge load-policy <project-root>",
|
|
905
|
+
"why_did_this_change": "forge why-did-this-change <file> --project-root <repo>",
|
|
906
|
+
"what_failed_last_time": "forge what-failed-last-time <area> --project-root <repo>",
|
|
907
|
+
"list_recipes": "forge recipes --json",
|
|
908
|
+
"get_recipe": "forge recipes <name> --json",
|
|
909
|
+
"trust_gate_response": "MCP-only: trust_gate_response",
|
|
910
|
+
"exported_api_check": "MCP-only: exported_api_check",
|
|
911
|
+
}
|
|
912
|
+
|
|
887
913
|
|
|
888
914
|
# --- Resource registry ---------------------------------------------------
|
|
889
915
|
|
|
@@ -1093,7 +1119,8 @@ def _list_tools() -> dict[str, Any]:
|
|
|
1093
1119
|
"tools": [
|
|
1094
1120
|
{"name": t["name"],
|
|
1095
1121
|
"description": t["description"],
|
|
1096
|
-
"inputSchema": t["inputSchema"]
|
|
1122
|
+
"inputSchema": t["inputSchema"],
|
|
1123
|
+
"cli_command": _CLI_FALLBACKS.get(t["name"], "")}
|
|
1097
1124
|
for t in TOOLS.values()
|
|
1098
1125
|
],
|
|
1099
1126
|
}
|