atomadic-forge 0.82.0__tar.gz → 0.83.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (480) hide show
  1. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/CHANGELOG.md +5 -0
  2. {atomadic_forge-0.82.0/src/atomadic_forge.egg-info → atomadic_forge-0.83.0}/PKG-INFO +8 -44
  3. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/README.md +7 -43
  4. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/pyproject.toml +1 -1
  5. atomadic_forge-0.83.0/src/atomadic_forge/a1_at_functions/graft_extract_js.py +270 -0
  6. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/graft_feature.py +78 -6
  7. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0/src/atomadic_forge.egg-info}/PKG-INFO +8 -44
  8. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/SOURCES.txt +2 -0
  9. atomadic_forge-0.83.0/tests/test_graft_js.py +102 -0
  10. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/FUNDING.yml +0 -0
  11. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  12. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  13. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  14. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/actions/forge-action/README.md +0 -0
  15. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/actions/forge-action/action.yml +0 -0
  16. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/dependabot.yml +0 -0
  17. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/pull_request_template.md +0 -0
  18. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/ci.yml +0 -0
  19. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/customer-refactor.yml +0 -0
  20. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/forge-self-certify.yml +0 -0
  21. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/mcp-registry-publish.yml +0 -0
  22. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/metrics-auto-regen.yml +0 -0
  23. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/metrics-drift.yml +0 -0
  24. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/publish-on-tag.yml +0 -0
  25. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/release-readiness.yml +0 -0
  26. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/release.yml +0 -0
  27. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/surface-drift.yml +0 -0
  28. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/.github/workflows/uptime.yml +0 -0
  29. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/ARCHITECTURE.md +0 -0
  30. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/CONTRIBUTING.md +0 -0
  31. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/LICENSE +0 -0
  32. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/MANIFEST.in +0 -0
  33. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/SECURITY.md +0 -0
  34. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/assets/Atomadic-Forge-01.png +0 -0
  35. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/01-getting-started.md +0 -0
  36. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/02-commands.md +0 -0
  37. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/03-tutorial.md +0 -0
  38. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/04-llm-loops.md +0 -0
  39. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/05-faq.md +0 -0
  40. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/AGENTS_GUIDE.md +0 -0
  41. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/AIR_GAPPED.md +0 -0
  42. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/CI_CD.md +0 -0
  43. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/CODEX_WALKTHROUGH.md +0 -0
  44. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/COMMANDS.md +0 -0
  45. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/FIRST_10_MINUTES.md +0 -0
  46. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/FORMALIZATION.md +0 -0
  47. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/HIVE_PRIMITIVES.md +0 -0
  48. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/HIVE_STATUS.md +0 -0
  49. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/IDE_INTEGRATION.md +0 -0
  50. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/LANDSCAPE.md +0 -0
  51. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/MARKET_POSITIONING.md +0 -0
  52. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/MCP_TOOLS.md +0 -0
  53. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/MIGRATION.md +0 -0
  54. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/MULTI_REPO.md +0 -0
  55. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/PROVIDERS.md +0 -0
  56. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/README.md +0 -0
  57. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/RECEIPT.md +0 -0
  58. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/RELAY_PROTOCOL.md +0 -0
  59. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/RELEASE_CHECKLIST.md +0 -0
  60. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/RELEASE_MESSAGING.md +0 -0
  61. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/ROADMAP.md +0 -0
  62. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/SHOWCASE.md +0 -0
  63. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/SIDECAR.md +0 -0
  64. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/STUDIO.md +0 -0
  65. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
  66. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
  67. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
  68. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/WHY_NOW.md +0 -0
  69. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
  70. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/WORLD_COLLISION.md +0 -0
  71. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/INDEX.md +0 -0
  72. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/absorb.md +0 -0
  73. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/audit.md +0 -0
  74. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/chat.md +0 -0
  75. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/commandsmith.md +0 -0
  76. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/config.md +0 -0
  77. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/create.md +0 -0
  78. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/demo.md +0 -0
  79. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/emergent-swarm.md +0 -0
  80. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/emergent-then-synergy.md +0 -0
  81. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/emergent.md +0 -0
  82. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/enhancement.md +0 -0
  83. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/evolve-then-iterate.md +0 -0
  84. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/evolve.md +0 -0
  85. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/feature-then-emergent.md +0 -0
  86. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/guard-install.md +0 -0
  87. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/handoff.md +0 -0
  88. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/harvest.md +0 -0
  89. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/hive.md +0 -0
  90. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/iterate.md +0 -0
  91. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/materialize.md +0 -0
  92. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/metrics.md +0 -0
  93. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/recon-swarm.md +0 -0
  94. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/relay.md +0 -0
  95. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/surface.md +0 -0
  96. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/synergy-then-emergent.md +0 -0
  97. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/synergy.md +0 -0
  98. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/welcome.md +0 -0
  99. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/commands/wisdom.md +0 -0
  100. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
  101. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/compliance/CS-1.md +0 -0
  102. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
  103. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
  104. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
  105. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
  106. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/tutorials/01-quickstart.md +0 -0
  107. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/tutorials/02-your-first-package.md +0 -0
  108. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
  109. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/tutorials/04-plug-in-llms.md +0 -0
  110. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
  111. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
  112. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/setup.cfg +0 -0
  113. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/__init__.py +0 -0
  114. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/__main__.py +0 -0
  115. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
  116. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
  117. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
  118. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
  119. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
  120. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
  121. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
  122. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
  123. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
  124. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
  125. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
  126. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
  127. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
  128. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
  129. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
  130. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
  131. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
  132. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
  133. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
  134. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
  135. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
  136. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
  137. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
  138. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
  139. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
  140. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
  141. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
  142. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
  143. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
  144. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/abstract_method_repair.py +0 -0
  145. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
  146. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
  147. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
  148. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
  149. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/ast_scope_lock.py +0 -0
  150. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
  151. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
  152. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/capability_scout.py +0 -0
  153. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
  154. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
  155. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
  156. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
  157. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
  158. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/closest_match.py +0 -0
  159. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
  160. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
  161. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
  162. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
  163. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
  164. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
  165. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/cosine_similarity.py +0 -0
  166. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
  167. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
  168. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/dead_code_check.py +0 -0
  169. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/doc_auto_update.py +0 -0
  170. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
  171. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
  172. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
  173. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
  174. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
  175. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
  176. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
  177. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
  178. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
  179. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
  180. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
  181. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
  182. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
  183. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +0 -0
  184. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
  185. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/git_churn.py +0 -0
  186. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/graft_extract.py +0 -0
  187. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
  188. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
  189. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/harvest_concept_bridge.py +0 -0
  190. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
  191. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
  192. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/ifwc_fuzz.py +0 -0
  193. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
  194. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
  195. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
  196. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
  197. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/levenshtein_distance.py +0 -0
  198. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
  199. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
  200. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
  201. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
  202. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
  203. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
  204. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/maintainability_index.py +0 -0
  205. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
  206. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +0 -0
  207. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/monadic_laws.py +0 -0
  208. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
  209. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
  210. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
  211. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
  212. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
  213. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
  214. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
  215. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
  216. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
  217. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
  218. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
  219. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
  220. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/recon_cache.py +0 -0
  221. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
  222. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/repo_public_surface.py +0 -0
  223. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
  224. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
  225. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
  226. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
  227. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
  228. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
  229. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
  230. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
  231. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
  232. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
  233. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
  234. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
  235. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
  236. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/steersman_pack.py +0 -0
  237. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
  238. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/surface_gap_check.py +0 -0
  239. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
  240. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
  241. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
  242. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
  243. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
  244. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
  245. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
  246. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
  247. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
  248. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
  249. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
  250. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
  251. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wire_stubs_gen.py +0 -0
  252. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
  253. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
  254. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
  255. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
  256. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
  257. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
  258. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
  259. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
  260. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
  261. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
  262. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
  263. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
  264. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
  265. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
  266. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
  267. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
  268. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
  269. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/remote_seed_store.py +0 -0
  270. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a2_mo_composites/repo_public_surface_sync.py +0 -0
  271. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
  272. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
  273. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
  274. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
  275. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
  276. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
  277. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
  278. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
  279. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
  280. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
  281. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
  282. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
  283. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
  284. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
  285. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
  286. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
  287. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
  288. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
  289. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
  290. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
  291. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
  292. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
  293. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
  294. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
  295. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +0 -0
  296. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
  297. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
  298. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
  299. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
  300. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
  301. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
  302. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
  303. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
  304. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
  305. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/recipe_replay.py +0 -0
  306. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
  307. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
  308. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
  309. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
  310. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
  311. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
  312. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
  313. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
  314. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
  315. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +0 -0
  316. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
  317. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
  318. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
  319. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/__init__.py +0 -0
  320. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/_monadic_laws_shared.py +0 -0
  321. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/_registry.py +0 -0
  322. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/absorb.py +0 -0
  323. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/aiom_check.py +0 -0
  324. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/audit.py +0 -0
  325. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/chat.py +0 -0
  326. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
  327. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
  328. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/create.py +0 -0
  329. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/demo.py +0 -0
  330. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/emergent.py +0 -0
  331. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
  332. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
  333. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/enhancement.py +0 -0
  334. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/evolve.py +0 -0
  335. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
  336. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
  337. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/fingerprint.py +0 -0
  338. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/fuzz.py +0 -0
  339. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/graft.py +0 -0
  340. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/guard_install.py +0 -0
  341. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/handoff.py +0 -0
  342. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/harvest.py +0 -0
  343. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/hive.py +0 -0
  344. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/iterate.py +0 -0
  345. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/materialize.py +0 -0
  346. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/mcb_check.py +0 -0
  347. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/metrics.py +0 -0
  348. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
  349. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/relay.py +0 -0
  350. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/replay.py +0 -0
  351. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/surface.py +0 -0
  352. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/synergy.py +0 -0
  353. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
  354. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/token_savings.py +0 -0
  355. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/welcome.py +0 -0
  356. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge/commands/wisdom.py +0 -0
  357. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
  358. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
  359. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
  360. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
  361. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_aaaa_nexus_client.py +0 -0
  362. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_abstract_method_repair.py +0 -0
  363. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_agent_hire_protocol.py +0 -0
  364. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_agent_plan.py +0 -0
  365. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_agent_plan_pkg_label.py +0 -0
  366. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_agent_summary.py +0 -0
  367. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_ast_scope_lock.py +0 -0
  368. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_audit_verb.py +0 -0
  369. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_body_extractor_repairs.py +0 -0
  370. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_call_graph_summary.py +0 -0
  371. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_capability_scout.py +0 -0
  372. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_card_renderer.py +0 -0
  373. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_certify_operational_axis.py +0 -0
  374. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_chat.py +0 -0
  375. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_cherry_dedup_class_methods.py +0 -0
  376. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_cherry_pick.py +0 -0
  377. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_classify_tier.py +0 -0
  378. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_classify_tier_ast_signals.py +0 -0
  379. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_cli_smoke.py +0 -0
  380. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_cli_swarm_aliases.py +0 -0
  381. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_codex_5_complete.py +0 -0
  382. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
  383. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_commandsmith.py +0 -0
  384. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_compiler_feedback.py +0 -0
  385. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_compliance_checker.py +0 -0
  386. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_config.py +0 -0
  387. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_copilots_copilot.py +0 -0
  388. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_cost_circuit_breaker.py +0 -0
  389. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_create_feature.py +0 -0
  390. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_cs1_renderer.py +0 -0
  391. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_custom_provider.py +0 -0
  392. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_dead_code_check.py +0 -0
  393. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_dedup_engine.py +0 -0
  394. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_demo.py +0 -0
  395. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_doc_auto_update.py +0 -0
  396. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_emergent_compose.py +0 -0
  397. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_emergent_signature_extract.py +0 -0
  398. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_emergent_synthesize_imports.py +0 -0
  399. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_enhancement_proposal.py +0 -0
  400. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_error_codes.py +0 -0
  401. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_error_hints.py +0 -0
  402. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_evolve_js.py +0 -0
  403. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_exported_api_check.py +0 -0
  404. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_finalize_scaffold.py +0 -0
  405. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_forge_action.py +0 -0
  406. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_forge_auth_a1.py +0 -0
  407. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_forge_auth_a2.py +0 -0
  408. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_forge_enforce.py +0 -0
  409. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_generation_quality.py +0 -0
  410. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_git_churn.py +0 -0
  411. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_graft_feature.py +0 -0
  412. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_handoff.py +0 -0
  413. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_harvest_concept_bridge.py +0 -0
  414. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_harvest_source_warnings.py +0 -0
  415. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_hierarchical_memory.py +0 -0
  416. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_hive_sync.py +0 -0
  417. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_ifwc_fuzz.py +0 -0
  418. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_ignore_and_docs.py +0 -0
  419. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_import_smoke.py +0 -0
  420. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_iterate_evolve.py +0 -0
  421. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_js_certify.py +0 -0
  422. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_js_parser.py +0 -0
  423. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_js_recon.py +0 -0
  424. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_js_wire.py +0 -0
  425. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_lineage_chain.py +0 -0
  426. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_ling_provider.py +0 -0
  427. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_local_signer.py +0 -0
  428. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_lsp_protocol.py +0 -0
  429. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_maintainability_index.py +0 -0
  430. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_manifest_diff.py +0 -0
  431. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_materialize_feature.py +0 -0
  432. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
  433. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_mcp_protocol.py +0 -0
  434. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_monadic_laws.py +0 -0
  435. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_nexus_bridge.py +0 -0
  436. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_ollama_client.py +0 -0
  437. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_pipeline.py +0 -0
  438. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_plan_apply.py +0 -0
  439. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_polyglot_cli_mcp.py +0 -0
  440. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_polyglot_full_pipeline.py +0 -0
  441. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_polyglot_hardening.py +0 -0
  442. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
  443. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_polyglot_symbol_parity.py +0 -0
  444. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_pre_audit_smoke.py +0 -0
  445. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_precommit_hooks.py +0 -0
  446. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_progress_reporter.py +0 -0
  447. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_receipt_emitter.py +0 -0
  448. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_receipt_schema.py +0 -0
  449. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_receipt_signer.py +0 -0
  450. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_recipe_replay.py +0 -0
  451. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_recon_cache.py +0 -0
  452. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_remote_seed_store.py +0 -0
  453. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_repo_public_surface.py +0 -0
  454. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_response_enricher.py +0 -0
  455. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_roi_calculator.py +0 -0
  456. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_sbom_cmd_text_summary.py +0 -0
  457. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_sbom_emitter.py +0 -0
  458. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_scaffold.py +0 -0
  459. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_sidecar.py +0 -0
  460. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_sidecar_validate.py +0 -0
  461. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_smell_score_formula.py +0 -0
  462. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_stagnation.py +0 -0
  463. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_steersman_pack.py +0 -0
  464. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_stub_detector.py +0 -0
  465. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_surface_export.py +0 -0
  466. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_surface_gap_check.py +0 -0
  467. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_synergy.py +0 -0
  468. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_test_runner.py +0 -0
  469. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_tier_init_rebuild.py +0 -0
  470. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_token_savings_ledger.py +0 -0
  471. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_trust_gate_response.py +0 -0
  472. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_verify_suggested_recipe.py +0 -0
  473. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_welcome.py +0 -0
  474. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_welcome_enhancements.py +0 -0
  475. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_whoami_cmd.py +0 -0
  476. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_wire_certify.py +0 -0
  477. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_wire_stubs_gen.py +0 -0
  478. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_wire_suggest_repairs.py +0 -0
  479. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_wire_type_checking.py +0 -0
  480. {atomadic_forge-0.82.0 → atomadic_forge-0.83.0}/tests/test_wisdom.py +0 -0
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v0.83.0 — 2026-05-08
6
+
7
+ - feat(forge): v0.83 — JS/TS graft support; arm Atomadic with capability transfer
8
+
9
+
5
10
  ## v0.82.0 — 2026-05-08
6
11
 
7
12
  - feat(forge): v0.82 — graft sibling-ref auto-import + 2 grafted helpers
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.82.0
3
+ Version: 0.83.0
4
4
  Summary: Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code.
5
5
  Author: Atomadic
6
6
  License-Expression: BUSL-1.1
@@ -69,44 +69,6 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
69
69
 
70
70
  ---
71
71
 
72
- ## What's New — v0.76 through v0.81
73
-
74
- ### v0.81 — Auto-wire Coercion + Recon Cache
75
-
76
- - CLI stubs are now type-aware on `list[T]` args. `forge cosine-similarity --a 1.0,0.0 --b 1.0,0.0` resolves without manual casting.
77
- - `run_recon(use_cache=True)` skips the AST walk on unchanged trees using a `(file_count, max_mtime, total_bytes)` fingerprint — eliminates redundant recon passes in harvest pipelines.
78
-
79
- ### v0.80 — Monadic Laws (4 advisory verbs)
80
-
81
- - `forge mcb-check` — flags unbounded `while` loops and recursion in tier-a1 atoms.
82
- - `forge aiom-check` — flags forbidden I/O imports (`requests`, `urllib`, `socket`, `subprocess`) in tier-a1.
83
- - `forge fingerprint` — SHA-256 of every a1 module's normalised AST; stable across whitespace, tamper-evident.
84
- - `forge fuzz <module>` — hypothesis property tests on any a1 callable carrying `__invariants__`.
85
- - All four ship advisory by default; `--fail-on-violations` to make them block CI.
86
-
87
- ### v0.79 — Recipe Replayer
88
-
89
- - `forge replay <recipe>` runs a golden recipe's `validation_gate` as subprocesses — zero LLM round-trips per step.
90
- - Available recipes: `release_hardening`, `add_cli_command`, `fix_wire_violation`, `add_feature`, `publish_mcp`.
91
- - Flags: `--dry-run`, `--keep-going`, `--list`, `--json`. Pass/fail automatically logged (×80 tokens) to the token-savings ledger.
92
-
93
- ### v0.78 — Token-Savings Auto-Ledger
94
-
95
- - Every Forge verb that calls `enrich_response` now appends to a lifetime savings ledger at `<project>/.atomadic-forge/lifetime_savings.jsonl`. Covered verbs: recon, certify, wire, verify, auto, emergent, synergy.
96
- - `forge token-savings` shows lifetime total + per-tool breakdown. File-backed, verifiable, auditable JSONL.
97
-
98
- ### v0.77 — Class/Method Dedup Fix
99
-
100
- - Cherry-pick folds method qualnames whose parent class is already selected, collapsing the 47-file class explosion observed during large-repo absorptions (root-cause fix in `cherry_pick._dedup_methods_under_class`).
101
-
102
- ### v0.76 — Graft (surgical capability transfer)
103
-
104
- - `forge graft --source-file <f> --symbol <name>` extracts one function or class from any Python source and lands it in the target's correct tier.
105
- - `--rename` flag handles private-to-public conversion. Auto-wires CLI + MCP via `auto-wire` integration.
106
- - Closes the gap between `transmute auto` (whole-repo) and single-symbol surgical absorption.
107
-
108
- ---
109
-
110
72
  > 🎯 **300+ public OSS Python repositories absorbed end-to-end.** fastapi
111
73
  > (98k★), scrapy (61k★), django-rest-framework (30k★), pytest (13.8k★),
112
74
  > langgraph (31k★), openai-agents-python (26k★), cookiecutter (25k★),
@@ -117,9 +79,11 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
117
79
  > wire-clean, scaffold-complete, deterministic. Wire-PASS holds across
118
80
  > the entire 300-seed corpus. Receipts in [`HARVEST_LEDGER.md`](HARVEST_LEDGER.md).
119
81
 
120
- - **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations.
121
- - **Saves 40-60% on LLM tokens.** Structured code = smaller context windows = fewer tokens per turn.
122
- - **One command: spaghetti -> certified architecture.** Python, JavaScript, TypeScript, **Rust, Go, Swift, Kotlin** full pipeline (recon, wire, certify, scaffold, evolve) on every language.
82
+ - **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations. Four monadic laws (MCB, AIOM, AHLP, IFWC) shipped as advisory AST scanners; promote to `--fail-on-violations` when ready.
83
+ - **Verifiable token savings.** Every Forge verb auto-appends to a file-backed JSONL ledger at `<project>/.atomadic-forge/lifetime_savings.jsonl`. `forge token-savings` prints the running total and per-tool breakdown. Auditable line-by-line — not a marketing claim.
84
+ - **Surgical capability grafting.** `forge graft --source-file X --symbol Y` extracts a single function or class from any Python source, lands it in the right tier, and auto-wires CLI + MCP. Sibling references resolve automatically. Closes the gap between whole-repo `transmute auto` and one-shot surgical absorption.
85
+ - **Deterministic recipe replay.** `forge replay <recipe>` runs a golden command chain (release hardening, add-cli-command, fix-wire-violation, add-feature, publish-mcp) as subprocesses — zero LLM round-trips per step.
86
+ - **One command: spaghetti -> certified architecture.** Python, JavaScript, TypeScript, **Rust, Go, Swift, Kotlin** — full pipeline (recon, wire, certify, scaffold, evolve) on every language. Recon cache short-circuits the AST walk on unchanged trees via tree fingerprint.
123
87
  - **Bring your own LLM.** Built-in presets for OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, Groq, Together, Fireworks, xAI, Mistral, Perplexity, Cerebras, Hyperbolic, AAAA-Nexus, and Ollama — plus `forge config provider add` for any custom OpenAI-compatible endpoint. See [docs/PROVIDERS.md](docs/PROVIDERS.md).
124
88
  - **IDE-native.** VS Code extension (`vscode-extension/`), MCP server for Claude Code / Cursor / Cowork / Windsurf, four ready-to-use Claude Code skills. See [docs/IDE_INTEGRATION.md](docs/IDE_INTEGRATION.md).
125
89
 
@@ -277,8 +241,8 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
277
241
 
278
242
  | MCP tools | **10 tools · 116 actions** |
279
243
  | CLI verbs | **79** |
280
- | Source files | **245** (~48K LOC) |
281
- | Tests | **1616 passing** across **120 test files** |
244
+ | Source files | **246** (~49K LOC) |
245
+ | Tests | **1625 passing** across **121 test files** |
282
246
  | Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
283
247
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
284
248
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
@@ -37,44 +37,6 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
37
37
 
38
38
  ---
39
39
 
40
- ## What's New — v0.76 through v0.81
41
-
42
- ### v0.81 — Auto-wire Coercion + Recon Cache
43
-
44
- - CLI stubs are now type-aware on `list[T]` args. `forge cosine-similarity --a 1.0,0.0 --b 1.0,0.0` resolves without manual casting.
45
- - `run_recon(use_cache=True)` skips the AST walk on unchanged trees using a `(file_count, max_mtime, total_bytes)` fingerprint — eliminates redundant recon passes in harvest pipelines.
46
-
47
- ### v0.80 — Monadic Laws (4 advisory verbs)
48
-
49
- - `forge mcb-check` — flags unbounded `while` loops and recursion in tier-a1 atoms.
50
- - `forge aiom-check` — flags forbidden I/O imports (`requests`, `urllib`, `socket`, `subprocess`) in tier-a1.
51
- - `forge fingerprint` — SHA-256 of every a1 module's normalised AST; stable across whitespace, tamper-evident.
52
- - `forge fuzz <module>` — hypothesis property tests on any a1 callable carrying `__invariants__`.
53
- - All four ship advisory by default; `--fail-on-violations` to make them block CI.
54
-
55
- ### v0.79 — Recipe Replayer
56
-
57
- - `forge replay <recipe>` runs a golden recipe's `validation_gate` as subprocesses — zero LLM round-trips per step.
58
- - Available recipes: `release_hardening`, `add_cli_command`, `fix_wire_violation`, `add_feature`, `publish_mcp`.
59
- - Flags: `--dry-run`, `--keep-going`, `--list`, `--json`. Pass/fail automatically logged (×80 tokens) to the token-savings ledger.
60
-
61
- ### v0.78 — Token-Savings Auto-Ledger
62
-
63
- - Every Forge verb that calls `enrich_response` now appends to a lifetime savings ledger at `<project>/.atomadic-forge/lifetime_savings.jsonl`. Covered verbs: recon, certify, wire, verify, auto, emergent, synergy.
64
- - `forge token-savings` shows lifetime total + per-tool breakdown. File-backed, verifiable, auditable JSONL.
65
-
66
- ### v0.77 — Class/Method Dedup Fix
67
-
68
- - Cherry-pick folds method qualnames whose parent class is already selected, collapsing the 47-file class explosion observed during large-repo absorptions (root-cause fix in `cherry_pick._dedup_methods_under_class`).
69
-
70
- ### v0.76 — Graft (surgical capability transfer)
71
-
72
- - `forge graft --source-file <f> --symbol <name>` extracts one function or class from any Python source and lands it in the target's correct tier.
73
- - `--rename` flag handles private-to-public conversion. Auto-wires CLI + MCP via `auto-wire` integration.
74
- - Closes the gap between `transmute auto` (whole-repo) and single-symbol surgical absorption.
75
-
76
- ---
77
-
78
40
  > 🎯 **300+ public OSS Python repositories absorbed end-to-end.** fastapi
79
41
  > (98k★), scrapy (61k★), django-rest-framework (30k★), pytest (13.8k★),
80
42
  > langgraph (31k★), openai-agents-python (26k★), cookiecutter (25k★),
@@ -85,9 +47,11 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
85
47
  > wire-clean, scaffold-complete, deterministic. Wire-PASS holds across
86
48
  > the entire 300-seed corpus. Receipts in [`HARVEST_LEDGER.md`](HARVEST_LEDGER.md).
87
49
 
88
- - **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations.
89
- - **Saves 40-60% on LLM tokens.** Structured code = smaller context windows = fewer tokens per turn.
90
- - **One command: spaghetti -> certified architecture.** Python, JavaScript, TypeScript, **Rust, Go, Swift, Kotlin** full pipeline (recon, wire, certify, scaffold, evolve) on every language.
50
+ - **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations. Four monadic laws (MCB, AIOM, AHLP, IFWC) shipped as advisory AST scanners; promote to `--fail-on-violations` when ready.
51
+ - **Verifiable token savings.** Every Forge verb auto-appends to a file-backed JSONL ledger at `<project>/.atomadic-forge/lifetime_savings.jsonl`. `forge token-savings` prints the running total and per-tool breakdown. Auditable line-by-line — not a marketing claim.
52
+ - **Surgical capability grafting.** `forge graft --source-file X --symbol Y` extracts a single function or class from any Python source, lands it in the right tier, and auto-wires CLI + MCP. Sibling references resolve automatically. Closes the gap between whole-repo `transmute auto` and one-shot surgical absorption.
53
+ - **Deterministic recipe replay.** `forge replay <recipe>` runs a golden command chain (release hardening, add-cli-command, fix-wire-violation, add-feature, publish-mcp) as subprocesses — zero LLM round-trips per step.
54
+ - **One command: spaghetti -> certified architecture.** Python, JavaScript, TypeScript, **Rust, Go, Swift, Kotlin** — full pipeline (recon, wire, certify, scaffold, evolve) on every language. Recon cache short-circuits the AST walk on unchanged trees via tree fingerprint.
91
55
  - **Bring your own LLM.** Built-in presets for OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, Groq, Together, Fireworks, xAI, Mistral, Perplexity, Cerebras, Hyperbolic, AAAA-Nexus, and Ollama — plus `forge config provider add` for any custom OpenAI-compatible endpoint. See [docs/PROVIDERS.md](docs/PROVIDERS.md).
92
56
  - **IDE-native.** VS Code extension (`vscode-extension/`), MCP server for Claude Code / Cursor / Cowork / Windsurf, four ready-to-use Claude Code skills. See [docs/IDE_INTEGRATION.md](docs/IDE_INTEGRATION.md).
93
57
 
@@ -245,8 +209,8 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
245
209
 
246
210
  | MCP tools | **10 tools · 116 actions** |
247
211
  | CLI verbs | **79** |
248
- | Source files | **245** (~48K LOC) |
249
- | Tests | **1616 passing** across **120 test files** |
212
+ | Source files | **246** (~49K LOC) |
213
+ | Tests | **1625 passing** across **121 test files** |
250
214
  | Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
251
215
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
252
216
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "atomadic-forge"
7
- version = "0.82.0"
7
+ version = "0.83.0"
8
8
  description = "Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -0,0 +1,270 @@
1
+ """Tier a1 — JavaScript / TypeScript counterpart to ``graft_extract``.
2
+
3
+ Extract one named function or class slice from a ``.js`` / ``.ts`` /
4
+ ``.mjs`` / ``.cjs`` source file. Reuses Forge's existing JS regex
5
+ parser (``js_parser._balance_braces``, ``parse_imports``) — no
6
+ external AST dependency.
7
+
8
+ Recognized headers (top-level only):
9
+ * ``export function foo(...)``
10
+ * ``export async function foo(...)``
11
+ * ``async function foo(...)``
12
+ * ``function foo(...)``
13
+ * ``export const foo = (...) =>``
14
+ * ``const foo = (...) =>``
15
+ * ``export class Foo``
16
+ * ``class Foo``
17
+
18
+ The extractor returns the verbatim source slice including the header
19
+ and balanced body braces. Imports referenced by the body are
20
+ resolved against the module's import table (ES6 + CommonJS) so the
21
+ rendered output module compiles standalone.
22
+ """
23
+ from __future__ import annotations
24
+
25
+ import re
26
+ from dataclasses import dataclass, field
27
+ from pathlib import Path
28
+
29
+ from .js_parser import _balance_braces, parse_imports
30
+
31
+ JS_SUFFIXES: frozenset[str] = frozenset({".js", ".mjs", ".cjs", ".ts", ".tsx", ".jsx"})
32
+
33
+ _HEADER_PATTERNS: tuple[tuple[str, str], ...] = (
34
+ # (kind, regex) — first match wins. \b{name}\b prevents partial hits.
35
+ ("function", r"^\s*(?:export\s+(?:default\s+)?)?(?:async\s+)?function\s+{name}\s*\("),
36
+ ("arrow_const", r"^\s*(?:export\s+(?:default\s+)?)?const\s+{name}\s*=\s*(?:async\s+)?\("),
37
+ ("arrow_let", r"^\s*(?:export\s+)?let\s+{name}\s*=\s*(?:async\s+)?\("),
38
+ ("class", r"^\s*(?:export\s+(?:default\s+)?)?class\s+{name}\b"),
39
+ )
40
+
41
+
42
+ @dataclass(frozen=True)
43
+ class JsGraftExtract:
44
+ """One extracted JS/TS symbol slice."""
45
+ symbol_name: str
46
+ kind: str # function | arrow_const | arrow_let | class
47
+ source: str
48
+ imports_needed: frozenset[str]
49
+ sibling_refs: frozenset[str] = field(default_factory=frozenset)
50
+ start_line: int = 0
51
+ end_line: int = 0
52
+
53
+
54
+ def _find_header(text: str, symbol_name: str) -> tuple[int, str] | None:
55
+ """Locate the first matching header. Returns (start_offset, kind) or None."""
56
+ safe = re.escape(symbol_name)
57
+ for kind, pat in _HEADER_PATTERNS:
58
+ rx = re.compile(pat.format(name=safe), re.MULTILINE)
59
+ m = rx.search(text)
60
+ if m:
61
+ return (m.start(), kind)
62
+ return None
63
+
64
+
65
+ def _line_of(text: str, offset: int) -> int:
66
+ """1-based line number of the given character offset."""
67
+ return text.count("\n", 0, offset) + 1
68
+
69
+
70
+ def _slice_balanced(text: str, header_start: int, kind: str) -> tuple[str, int]:
71
+ """Return (slice_text, end_offset_exclusive) starting at ``header_start``.
72
+
73
+ ``function`` / ``class`` ⇒ find the next ``{`` and balance braces.
74
+ ``arrow_*`` ⇒ same — assumes a block-bodied arrow ``= (...) => { ... }``.
75
+ """
76
+ open_idx = text.find("{", header_start)
77
+ if open_idx == -1:
78
+ # Single-expression arrow ``= (...) => expr;`` — slice to next ``;``.
79
+ semi = text.find(";", header_start)
80
+ if semi == -1:
81
+ return text[header_start:], len(text)
82
+ return text[header_start:semi + 1] + "\n", semi + 1
83
+ close_idx = _balance_braces(text, open_idx)
84
+ if close_idx == -1:
85
+ return text[header_start:], len(text)
86
+ end = close_idx + 1
87
+ # Include trailing newline if present.
88
+ while end < len(text) and text[end] in (";", " ", "\t"):
89
+ end += 1
90
+ if end < len(text) and text[end] == "\n":
91
+ end += 1
92
+ return text[header_start:end], end
93
+
94
+
95
+ def _walk_identifier_refs(slice_text: str) -> set[str]:
96
+ """Return the set of bare identifiers referenced inside ``slice_text``.
97
+
98
+ Cheap regex scan — sufficient for "is this name from the module's
99
+ imports?" matching. Strips block comments and ``//`` lines first
100
+ so commented-out names don't pollute the set.
101
+ """
102
+ s = re.sub(r"/\*.*?\*/", " ", slice_text, flags=re.DOTALL)
103
+ s = re.sub(r"//[^\n]*", " ", s)
104
+ return set(re.findall(r"\b[A-Za-z_$][\w$]*\b", s))
105
+
106
+
107
+ _IMPORT_NAMED = re.compile(
108
+ r"^\s*import\s*(?:type\s+)?\{([^}]+)\}\s*from\s*['\"]([^'\"]+)['\"]",
109
+ re.MULTILINE,
110
+ )
111
+ _IMPORT_DEFAULT = re.compile(
112
+ r"^\s*import\s*(?:type\s+)?(\w+)\s*from\s*['\"]([^'\"]+)['\"]",
113
+ re.MULTILINE,
114
+ )
115
+ _IMPORT_NS = re.compile(
116
+ r"^\s*import\s*\*\s*as\s*(\w+)\s*from\s*['\"]([^'\"]+)['\"]",
117
+ re.MULTILINE,
118
+ )
119
+ _REQUIRE_DESTRUCT = re.compile(
120
+ r"^\s*(?:const|let|var)\s*\{([^}]+)\}\s*=\s*require\(\s*['\"]([^'\"]+)['\"]\s*\)",
121
+ re.MULTILINE,
122
+ )
123
+ _REQUIRE_BARE = re.compile(
124
+ r"^\s*(?:const|let|var)\s*(\w+)\s*=\s*require\(\s*['\"]([^'\"]+)['\"]\s*\)",
125
+ re.MULTILINE,
126
+ )
127
+
128
+
129
+ def _import_table(text: str) -> dict[str, str]:
130
+ """Return ``{bound_name: import_source_line}`` for the module."""
131
+ table: dict[str, str] = {}
132
+ for names_blob, src in _IMPORT_NAMED.findall(text):
133
+ names = [n.strip().split(" as ") for n in names_blob.split(",") if n.strip()]
134
+ for parts in names:
135
+ if not parts[0]:
136
+ continue
137
+ local = (parts[1] if len(parts) > 1 else parts[0]).strip()
138
+ orig = parts[0].strip()
139
+ if local == orig:
140
+ table[local] = f'import {{ {orig} }} from "{src}";'
141
+ else:
142
+ table[local] = f'import {{ {orig} as {local} }} from "{src}";'
143
+ for name, src in _IMPORT_DEFAULT.findall(text):
144
+ if name not in table:
145
+ table[name] = f'import {name} from "{src}";'
146
+ for name, src in _IMPORT_NS.findall(text):
147
+ table[name] = f'import * as {name} from "{src}";'
148
+ for names_blob, src in _REQUIRE_DESTRUCT.findall(text):
149
+ for n in names_blob.split(","):
150
+ n = n.strip()
151
+ if n:
152
+ table[n] = f'const {{ {n} }} = require("{src}");'
153
+ for name, src in _REQUIRE_BARE.findall(text):
154
+ if name not in table:
155
+ table[name] = f'const {name} = require("{src}");'
156
+ return table
157
+
158
+
159
+ def _top_level_def_names(text: str) -> set[str]:
160
+ """Names of every top-level function / class / const-arrow / let-arrow."""
161
+ names: set[str] = set()
162
+ for _kind, pat in _HEADER_PATTERNS:
163
+ rx = re.compile(
164
+ pat.replace("{name}", r"(?P<name>[A-Za-z_$][\w$]*)"),
165
+ re.MULTILINE,
166
+ )
167
+ for m in rx.finditer(text):
168
+ names.add(m.group("name"))
169
+ return names
170
+
171
+
172
+ def extract_symbol_js(source_file: Path, symbol_name: str) -> JsGraftExtract:
173
+ """Extract a top-level JS/TS symbol slice from ``source_file``.
174
+
175
+ Raises:
176
+ FileNotFoundError: source file missing.
177
+ KeyError: no top-level symbol with ``symbol_name``.
178
+ """
179
+ p = Path(source_file)
180
+ if not p.is_file():
181
+ raise FileNotFoundError(f"graft source not found: {p}")
182
+ if p.suffix.lower() not in JS_SUFFIXES:
183
+ raise ValueError(f"not a JS/TS source: {p.suffix}")
184
+ text = p.read_text(encoding="utf-8", errors="replace")
185
+
186
+ found = _find_header(text, symbol_name)
187
+ if found is None:
188
+ raise KeyError(
189
+ f"no top-level symbol named {symbol_name!r} in {p.name}",
190
+ )
191
+ header_start, kind = found
192
+ slice_text, end_offset = _slice_balanced(text, header_start, kind)
193
+
194
+ refs = _walk_identifier_refs(slice_text) - {symbol_name}
195
+ table = _import_table(text)
196
+ imports_needed = frozenset(name for name in refs if name in table)
197
+
198
+ siblings = _top_level_def_names(text) - {symbol_name}
199
+ sibling_refs = frozenset(refs & siblings)
200
+
201
+ return JsGraftExtract(
202
+ symbol_name=symbol_name,
203
+ kind=kind,
204
+ source=slice_text.rstrip() + "\n",
205
+ imports_needed=imports_needed,
206
+ sibling_refs=sibling_refs,
207
+ start_line=_line_of(text, header_start),
208
+ end_line=_line_of(text, end_offset),
209
+ )
210
+
211
+
212
+ def render_grafted_module_js(
213
+ extract: JsGraftExtract,
214
+ *,
215
+ source_file: Path,
216
+ sibling_dir: str = ".",
217
+ ) -> str:
218
+ """Render a stand-alone JS module wrapping the extracted symbol.
219
+
220
+ Emits an ES6 module: file-level docstring banner (JSDoc), the
221
+ needed third-party imports verbatim, relative imports for any
222
+ sibling top-level defs the body references (``./<name>.js``),
223
+ a SCHEMA_VERSION marker constant, then the verbatim slice + a
224
+ named export.
225
+ """
226
+ text = Path(source_file).read_text(encoding="utf-8", errors="replace")
227
+ table = _import_table(text)
228
+ needed = sorted(table[name] for name in extract.imports_needed if name in table)
229
+
230
+ parts: list[str] = []
231
+ parts.append(
232
+ f"/**\n * Grafted from {Path(source_file).name} "
233
+ f"(lines {extract.start_line}–{extract.end_line}) by `forge graft`.\n */",
234
+ )
235
+ parts.append("")
236
+ if needed:
237
+ parts.extend(needed)
238
+ parts.append("")
239
+ if extract.sibling_refs:
240
+ for sib in sorted(extract.sibling_refs):
241
+ parts.append(
242
+ f'import {{ {sib} }} from "{sibling_dir}/{sib}.js";',
243
+ )
244
+ parts.append("")
245
+ upper = re.sub(r"[^A-Za-z0-9]", "_", extract.symbol_name).upper().lstrip("_")
246
+ parts.append(
247
+ f'export const SCHEMA_VERSION_GRAFT_{upper} = '
248
+ f'"atomadic-forge.graft.{extract.symbol_name}/v1";',
249
+ )
250
+ parts.append("")
251
+ # Strip a leading ``export`` from the slice if present — we'll re-export
252
+ # ourselves at the bottom to keep the module shape predictable.
253
+ body = re.sub(r"^\s*export\s+(default\s+)?", "", extract.source, count=1)
254
+ parts.append(body.rstrip())
255
+ parts.append("")
256
+ parts.append(f"export {{ {extract.symbol_name} }};")
257
+ parts.append("")
258
+ return "\n".join(parts) + "\n"
259
+
260
+
261
+ # Re-import for callers wanting symbol surface.
262
+ _ = parse_imports # noqa: F401 (re-export hint)
263
+
264
+
265
+ __all__ = [
266
+ "JS_SUFFIXES",
267
+ "JsGraftExtract",
268
+ "extract_symbol_js",
269
+ "render_grafted_module_js",
270
+ ]
@@ -33,6 +33,11 @@ from ..a1_at_functions.graft_extract import (
33
33
  extract_symbol,
34
34
  render_grafted_module,
35
35
  )
36
+ from ..a1_at_functions.graft_extract_js import (
37
+ JS_SUFFIXES,
38
+ extract_symbol_js,
39
+ render_grafted_module_js,
40
+ )
36
41
  from ..a1_at_functions.wire_check import scan_violations
37
42
 
38
43
  SCHEMA_VERSION_GRAFT_V1 = "atomadic-forge.graft/v1"
@@ -81,19 +86,36 @@ def _resolve_target_module(
81
86
  package: str,
82
87
  tier: str,
83
88
  symbol_name: str,
89
+ *,
90
+ suffix: str = ".py",
84
91
  ) -> Path:
85
92
  """Compute the absolute path the grafted module will be written to.
86
93
 
87
94
  Files get a lower-cased symbol name with sanitized characters. We
88
95
  sit beside (not on top of) any pre-existing module of the same
89
96
  name; collisions are surfaced loudly by ``graft``'s caller.
97
+
98
+ ``suffix`` (v0.83) — pick the destination extension. ``.py`` for
99
+ Python grafts, ``.js`` for JavaScript / TypeScript grafts.
100
+ Atomadic's tier dirs hold ``.js`` modules under ``cognition/
101
+ atomadic_cognition/`` instead of ``src/<package>/``; if
102
+ ``package`` is empty the layout collapses to that path.
90
103
  """
91
104
  safe = "".join(
92
105
  ch if ch.isalnum() or ch == "_" else "_"
93
106
  for ch in symbol_name
94
107
  ).lstrip("_").lower() or "grafted_symbol"
108
+ if not package:
109
+ return target_root / tier / f"{safe}{suffix}"
110
+ # Auto-detect layout: prefer `<target>/src/<package>/` (Python convention)
111
+ # but fall back to `<target>/<package>/` (common JS layout, e.g. Atomadic's
112
+ # cognition/atomadic_cognition/) when the former doesn't exist.
113
+ src_layout = target_root / "src" / package
114
+ flat_layout = target_root / package
115
+ if not src_layout.exists() and flat_layout.exists():
116
+ return flat_layout / tier / f"{safe}{suffix}"
95
117
  return (
96
- target_root / "src" / package / tier / f"{safe}.py"
118
+ target_root / "src" / package / tier / f"{safe}{suffix}"
97
119
  )
98
120
 
99
121
 
@@ -154,7 +176,24 @@ def graft(
154
176
  source_path = Path(source_file).resolve()
155
177
  target_path_root = Path(target_root).resolve()
156
178
 
157
- extract = extract_symbol(source_path, symbol_name)
179
+ # v0.83: dispatch by source suffix. JS/TS sources go through the
180
+ # regex-based JS extractor; everything else uses the Python AST path.
181
+ is_js = source_path.suffix.lower() in JS_SUFFIXES
182
+ if is_js:
183
+ js_extract = extract_symbol_js(source_path, symbol_name)
184
+ # Adapt JsGraftExtract to the same shape as GraftExtract so the
185
+ # rest of the pipeline (rename, write, wire) stays unchanged.
186
+ extract = GraftExtract(
187
+ symbol_name=js_extract.symbol_name,
188
+ kind=js_extract.kind,
189
+ source=js_extract.source,
190
+ imports_needed=js_extract.imports_needed,
191
+ start_line=js_extract.start_line,
192
+ end_line=js_extract.end_line,
193
+ sibling_refs=js_extract.sibling_refs,
194
+ )
195
+ else:
196
+ extract = extract_symbol(source_path, symbol_name)
158
197
 
159
198
  # Optional rename: rewrite the def/class binding in the extracted
160
199
  # slice. The destination filename and report identifier follow the
@@ -173,13 +212,46 @@ def graft(
173
212
  end_line=extract.end_line,
174
213
  )
175
214
 
176
- chosen_tier = tier or _DEFAULT_TIERS.get(extract.kind, "a3_og_features")
215
+ # JS arrows / classes default to a1; classes optionally to a2.
216
+ if is_js:
217
+ js_default_tier = (
218
+ "a2_mo_composites" if extract.kind == "class" else "a1_at_functions"
219
+ )
220
+ chosen_tier = tier or js_default_tier
221
+ else:
222
+ chosen_tier = tier or _DEFAULT_TIERS.get(extract.kind, "a3_og_features")
177
223
  dest = _resolve_target_module(
178
224
  target_path_root, package, chosen_tier, effective_name,
225
+ suffix=".js" if is_js else ".py",
179
226
  )
180
- rendered = render_grafted_module(
181
- extract, source_file=source_path,
182
- )
227
+ if is_js:
228
+ # Re-extract via JS path to get the JsGraftExtract shape the
229
+ # JS renderer wants. Cheap (single file read + regex).
230
+ js_extract = extract_symbol_js(source_path, effective_name) \
231
+ if effective_name == symbol_name \
232
+ else extract_symbol_js(source_path, symbol_name)
233
+ if effective_name != symbol_name:
234
+ # Apply rename to the JS extract source too.
235
+ from ..a1_at_functions.graft_extract_js import JsGraftExtract
236
+ renamed = _rename_symbol_in_source(
237
+ js_extract.source, symbol_name, effective_name,
238
+ )
239
+ js_extract = JsGraftExtract(
240
+ symbol_name=effective_name,
241
+ kind=js_extract.kind,
242
+ source=renamed,
243
+ imports_needed=js_extract.imports_needed,
244
+ sibling_refs=js_extract.sibling_refs,
245
+ start_line=js_extract.start_line,
246
+ end_line=js_extract.end_line,
247
+ )
248
+ rendered = render_grafted_module_js(
249
+ js_extract, source_file=source_path,
250
+ )
251
+ else:
252
+ rendered = render_grafted_module(
253
+ extract, source_file=source_path,
254
+ )
183
255
 
184
256
  backup_path: str | None = None
185
257
  written = False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.82.0
3
+ Version: 0.83.0
4
4
  Summary: Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code.
5
5
  Author: Atomadic
6
6
  License-Expression: BUSL-1.1
@@ -69,44 +69,6 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
69
69
 
70
70
  ---
71
71
 
72
- ## What's New — v0.76 through v0.81
73
-
74
- ### v0.81 — Auto-wire Coercion + Recon Cache
75
-
76
- - CLI stubs are now type-aware on `list[T]` args. `forge cosine-similarity --a 1.0,0.0 --b 1.0,0.0` resolves without manual casting.
77
- - `run_recon(use_cache=True)` skips the AST walk on unchanged trees using a `(file_count, max_mtime, total_bytes)` fingerprint — eliminates redundant recon passes in harvest pipelines.
78
-
79
- ### v0.80 — Monadic Laws (4 advisory verbs)
80
-
81
- - `forge mcb-check` — flags unbounded `while` loops and recursion in tier-a1 atoms.
82
- - `forge aiom-check` — flags forbidden I/O imports (`requests`, `urllib`, `socket`, `subprocess`) in tier-a1.
83
- - `forge fingerprint` — SHA-256 of every a1 module's normalised AST; stable across whitespace, tamper-evident.
84
- - `forge fuzz <module>` — hypothesis property tests on any a1 callable carrying `__invariants__`.
85
- - All four ship advisory by default; `--fail-on-violations` to make them block CI.
86
-
87
- ### v0.79 — Recipe Replayer
88
-
89
- - `forge replay <recipe>` runs a golden recipe's `validation_gate` as subprocesses — zero LLM round-trips per step.
90
- - Available recipes: `release_hardening`, `add_cli_command`, `fix_wire_violation`, `add_feature`, `publish_mcp`.
91
- - Flags: `--dry-run`, `--keep-going`, `--list`, `--json`. Pass/fail automatically logged (×80 tokens) to the token-savings ledger.
92
-
93
- ### v0.78 — Token-Savings Auto-Ledger
94
-
95
- - Every Forge verb that calls `enrich_response` now appends to a lifetime savings ledger at `<project>/.atomadic-forge/lifetime_savings.jsonl`. Covered verbs: recon, certify, wire, verify, auto, emergent, synergy.
96
- - `forge token-savings` shows lifetime total + per-tool breakdown. File-backed, verifiable, auditable JSONL.
97
-
98
- ### v0.77 — Class/Method Dedup Fix
99
-
100
- - Cherry-pick folds method qualnames whose parent class is already selected, collapsing the 47-file class explosion observed during large-repo absorptions (root-cause fix in `cherry_pick._dedup_methods_under_class`).
101
-
102
- ### v0.76 — Graft (surgical capability transfer)
103
-
104
- - `forge graft --source-file <f> --symbol <name>` extracts one function or class from any Python source and lands it in the target's correct tier.
105
- - `--rename` flag handles private-to-public conversion. Auto-wires CLI + MCP via `auto-wire` integration.
106
- - Closes the gap between `transmute auto` (whole-repo) and single-symbol surgical absorption.
107
-
108
- ---
109
-
110
72
  > 🎯 **300+ public OSS Python repositories absorbed end-to-end.** fastapi
111
73
  > (98k★), scrapy (61k★), django-rest-framework (30k★), pytest (13.8k★),
112
74
  > langgraph (31k★), openai-agents-python (26k★), cookiecutter (25k★),
@@ -117,9 +79,11 @@ AI agents write code **10x faster** than humans can review it. Pattern violation
117
79
  > wire-clean, scaffold-complete, deterministic. Wire-PASS holds across
118
80
  > the entire 300-seed corpus. Receipts in [`HARVEST_LEDGER.md`](HARVEST_LEDGER.md).
119
81
 
120
- - **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations.
121
- - **Saves 40-60% on LLM tokens.** Structured code = smaller context windows = fewer tokens per turn.
122
- - **One command: spaghetti -> certified architecture.** Python, JavaScript, TypeScript, **Rust, Go, Swift, Kotlin** full pipeline (recon, wire, certify, scaffold, evolve) on every language.
82
+ - **Catches architectural violations AI agents leave behind.** Deterministic tier-law enforcement — no LLM in the loop, no hallucinations. Four monadic laws (MCB, AIOM, AHLP, IFWC) shipped as advisory AST scanners; promote to `--fail-on-violations` when ready.
83
+ - **Verifiable token savings.** Every Forge verb auto-appends to a file-backed JSONL ledger at `<project>/.atomadic-forge/lifetime_savings.jsonl`. `forge token-savings` prints the running total and per-tool breakdown. Auditable line-by-line — not a marketing claim.
84
+ - **Surgical capability grafting.** `forge graft --source-file X --symbol Y` extracts a single function or class from any Python source, lands it in the right tier, and auto-wires CLI + MCP. Sibling references resolve automatically. Closes the gap between whole-repo `transmute auto` and one-shot surgical absorption.
85
+ - **Deterministic recipe replay.** `forge replay <recipe>` runs a golden command chain (release hardening, add-cli-command, fix-wire-violation, add-feature, publish-mcp) as subprocesses — zero LLM round-trips per step.
86
+ - **One command: spaghetti -> certified architecture.** Python, JavaScript, TypeScript, **Rust, Go, Swift, Kotlin** — full pipeline (recon, wire, certify, scaffold, evolve) on every language. Recon cache short-circuits the AST walk on unchanged trees via tree fingerprint.
123
87
  - **Bring your own LLM.** Built-in presets for OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, Groq, Together, Fireworks, xAI, Mistral, Perplexity, Cerebras, Hyperbolic, AAAA-Nexus, and Ollama — plus `forge config provider add` for any custom OpenAI-compatible endpoint. See [docs/PROVIDERS.md](docs/PROVIDERS.md).
124
88
  - **IDE-native.** VS Code extension (`vscode-extension/`), MCP server for Claude Code / Cursor / Cowork / Windsurf, four ready-to-use Claude Code skills. See [docs/IDE_INTEGRATION.md](docs/IDE_INTEGRATION.md).
125
89
 
@@ -277,8 +241,8 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
277
241
 
278
242
  | MCP tools | **10 tools · 116 actions** |
279
243
  | CLI verbs | **79** |
280
- | Source files | **245** (~48K LOC) |
281
- | Tests | **1616 passing** across **120 test files** |
244
+ | Source files | **246** (~49K LOC) |
245
+ | Tests | **1625 passing** across **121 test files** |
282
246
  | Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
283
247
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
284
248
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |