atomadic-forge 0.53.0__tar.gz → 0.54.0__tar.gz

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