asicode 0.2.7__tar.gz → 0.2.9__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 (361) hide show
  1. {asicode-0.2.7/asicode.egg-info → asicode-0.2.9}/PKG-INFO +56 -3
  2. {asicode-0.2.7 → asicode-0.2.9}/README.md +55 -2
  3. {asicode-0.2.7 → asicode-0.2.9}/asi.py +488 -355
  4. {asicode-0.2.7 → asicode-0.2.9/asicode.egg-info}/PKG-INFO +56 -3
  5. {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/SOURCES.txt +1 -0
  6. {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/entry_points.txt +1 -0
  7. {asicode-0.2.7 → asicode-0.2.9}/diff_apply.py +2 -2
  8. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/design_chat_loop.py +4 -4
  9. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/orchestrator.py +1 -1
  10. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/analysis_tools.py +0 -464
  11. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/browser_tools.py +134 -7
  12. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_registry.py +0 -61
  13. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/vector_cache.py +0 -5
  14. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/weight_learning.py +0 -77
  15. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/work_state_digest.py +3 -4
  16. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/vulture_scanner.py +201 -3
  17. {asicode-0.2.7 → asicode-0.2.9}/external_llm/ast_rewrite.py +0 -76
  18. {asicode-0.2.7 → asicode-0.2.9}/external_llm/dependency_graph.py +0 -31
  19. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/failure_classifier.py +0 -4
  20. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/proactive_runner.py +0 -4
  21. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/push_manager.py +0 -4
  22. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_learning_store.py +0 -13
  23. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/unified_store.py +0 -57
  24. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/code_context.py +0 -4
  25. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_contract_registry.py +6 -4
  26. {asicode-0.2.7 → asicode-0.2.9}/external_llm/intelligent_service.py +1 -401
  27. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/dependency_checker.py +7 -1
  28. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/registry.py +0 -6
  29. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/syntax_validator.py +0 -174
  30. {asicode-0.2.7 → asicode-0.2.9}/external_llm/multi_planner.py +5 -39
  31. {asicode-0.2.7 → asicode-0.2.9}/external_llm/output_parser.py +0 -39
  32. asicode-0.2.9/external_llm/pip_env.py +66 -0
  33. {asicode-0.2.7 → asicode-0.2.9}/external_llm/project_analyzer.py +0 -52
  34. {asicode-0.2.7 → asicode-0.2.9}/external_llm/providers.py +0 -23
  35. {asicode-0.2.7 → asicode-0.2.9}/pyproject.toml +2 -1
  36. {asicode-0.2.7 → asicode-0.2.9}/tests/test_progress_printer_inflight.py +26 -22
  37. {asicode-0.2.7 → asicode-0.2.9}/tests/test_real_agent.py +2 -2
  38. {asicode-0.2.7 → asicode-0.2.9}/LICENSE +0 -0
  39. {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/dependency_links.txt +0 -0
  40. {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/requires.txt +0 -0
  41. {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/top_level.txt +0 -0
  42. {asicode-0.2.7 → asicode-0.2.9}/common.py +0 -0
  43. {asicode-0.2.7 → asicode-0.2.9}/config.py +0 -0
  44. {asicode-0.2.7 → asicode-0.2.9}/context_collector.py +0 -0
  45. {asicode-0.2.7 → asicode-0.2.9}/external_llm/__init__.py +0 -0
  46. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/__init__.py +0 -0
  47. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/_shared_utils.py +0 -0
  48. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/_thread_pool.py +0 -0
  49. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/_user_intent.py +0 -0
  50. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_context_manager.py +0 -0
  51. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_escalation_pipeline.py +0 -0
  52. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_fast_path.py +0 -0
  53. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_loop.py +0 -0
  54. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_loop_types.py +0 -0
  55. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_phase_manager.py +0 -0
  56. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_planner_pipeline.py +0 -0
  57. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_profile.py +0 -0
  58. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_turn_pipeline.py +0 -0
  59. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/alignment_scorer.py +0 -0
  60. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/anchor_shared.py +0 -0
  61. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/argument_repairer.py +0 -0
  62. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/ast_cache.py +0 -0
  63. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/ast_engine.py +0 -0
  64. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/async_tool_executor.py +0 -0
  65. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/auto_correction.py +0 -0
  66. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/background_job_manager.py +0 -0
  67. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/call_graph.py +0 -0
  68. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/checkpoint_store.py +0 -0
  69. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/config/__init__.py +0 -0
  70. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/config/thresholds.py +0 -0
  71. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/context_budget.py +0 -0
  72. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/context_contract.py +0 -0
  73. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/context_manager.py +0 -0
  74. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/context_utils.py +0 -0
  75. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/enums.py +0 -0
  76. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/execution_mode_classifier.py +0 -0
  77. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/execution_spec.py +0 -0
  78. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/execution_thresholds.py +0 -0
  79. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/failure_classifier.py +0 -0
  80. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/failure_context.py +0 -0
  81. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/failure_pattern_store.py +0 -0
  82. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/file_cache.py +0 -0
  83. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/fix_spec_claim_validator.py +0 -0
  84. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/gsg_safety.py +0 -0
  85. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/guard_ir.py +0 -0
  86. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/handoff_observer.py +0 -0
  87. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/insights_manager.py +0 -0
  88. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/intent_models.py +0 -0
  89. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/intent_resolver.py +0 -0
  90. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/interrupt_tool_results.py +0 -0
  91. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/json_repair.py +0 -0
  92. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/language_backend.py +0 -0
  93. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/language_hint.py +0 -0
  94. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/learned_policy.py +0 -0
  95. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/light_repo_index.py +0 -0
  96. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/lint_runner.py +0 -0
  97. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/llm_output_utils.py +0 -0
  98. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/local_assistant.py +0 -0
  99. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/message_shapes.py +0 -0
  100. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/metadata_utils.py +0 -0
  101. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/operation_models.py +0 -0
  102. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/output_normalizer.py +0 -0
  103. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/performance_metrics.py +0 -0
  104. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/placement_contract.py +0 -0
  105. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/plan_state.py +0 -0
  106. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/planner_lane_facade.py +0 -0
  107. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/rag_configs.py +0 -0
  108. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/rag_searcher.py +0 -0
  109. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/reasoning_utils.py +0 -0
  110. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/repair_helpers.py +0 -0
  111. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/request_intent_classifier.py +0 -0
  112. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/routing_policy.py +0 -0
  113. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/run_store.py +0 -0
  114. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/scanner_registry.py +0 -0
  115. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/selector_constants.py +0 -0
  116. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/semantic_intent.py +0 -0
  117. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/semantic_lint.py +0 -0
  118. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/session_state.py +0 -0
  119. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/slash_commands.py +0 -0
  120. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/subagent_ipc.py +0 -0
  121. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_engine.py +0 -0
  122. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_index.py +0 -0
  123. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_locator.py +0 -0
  124. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_modify_tool.py +0 -0
  125. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_search.py +0 -0
  126. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/task_router.py +0 -0
  127. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/terminal_coordination.py +0 -0
  128. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/termination_policy.py +0 -0
  129. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/test_impact_selector.py +0 -0
  130. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/test_runner.py +0 -0
  131. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_chain.py +0 -0
  132. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_dependency_graph.py +0 -0
  133. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_failure_log.py +0 -0
  134. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/__init__.py +0 -0
  135. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/agent_tools.py +0 -0
  136. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/ast_op_executor.py +0 -0
  137. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/constants.py +0 -0
  138. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/git_tools.py +0 -0
  139. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/read_tools.py +0 -0
  140. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/shell_policy.py +0 -0
  141. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/test_tools.py +0 -0
  142. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/web_search_tools.py +0 -0
  143. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/write_tools.py +0 -0
  144. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_result_cache.py +0 -0
  145. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_safety.py +0 -0
  146. {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_schemas.py +0 -0
  147. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/__init__.py +0 -0
  148. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/_dead_block_shared.py +0 -0
  149. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/ast_similarity_scanner.py +0 -0
  150. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/broken_contract_scanner.py +0 -0
  151. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/container_reachability_scanner.py +0 -0
  152. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/contradictory_logic_scanner.py +0 -0
  153. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/cross_file_refs.py +0 -0
  154. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/dead_block_scanner.py +0 -0
  155. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/duplicate_definition_scanner.py +0 -0
  156. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/parse_cache.py +0 -0
  157. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/public_dead_code_scanner.py +0 -0
  158. {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/unused_import_scanner.py +0 -0
  159. {asicode-0.2.7 → asicode-0.2.9}/external_llm/anthropic_client.py +0 -0
  160. {asicode-0.2.7 → asicode-0.2.9}/external_llm/client.py +0 -0
  161. {asicode-0.2.7 → asicode-0.2.9}/external_llm/code_analyzer.py +0 -0
  162. {asicode-0.2.7 → asicode-0.2.9}/external_llm/code_structure_utils.py +0 -0
  163. {asicode-0.2.7 → asicode-0.2.9}/external_llm/common/__init__.py +0 -0
  164. {asicode-0.2.7 → asicode-0.2.9}/external_llm/common/atomic_io.py +0 -0
  165. {asicode-0.2.7 → asicode-0.2.9}/external_llm/common/file_lock.py +0 -0
  166. {asicode-0.2.7 → asicode-0.2.9}/external_llm/common/indent_utils.py +0 -0
  167. {asicode-0.2.7 → asicode-0.2.9}/external_llm/context/context_packs.py +0 -0
  168. {asicode-0.2.7 → asicode-0.2.9}/external_llm/context_builder.py +0 -0
  169. {asicode-0.2.7 → asicode-0.2.9}/external_llm/design_session.py +0 -0
  170. {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/__init__.py +0 -0
  171. {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/dataflow_extractor.py +0 -0
  172. {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/graph_propagator.py +0 -0
  173. {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/relevance_scorer.py +0 -0
  174. {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/request_analyzer.py +0 -0
  175. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/__init__.py +0 -0
  176. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/common/__init__.py +0 -0
  177. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/common/import_normalizer.py +0 -0
  178. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/common/strategy_priors.py +0 -0
  179. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/__init__.py +0 -0
  180. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/__init__.py +0 -0
  181. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/ast_rewriter.py +0 -0
  182. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/models.py +0 -0
  183. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/rollback_manager.py +0 -0
  184. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/verifier.py +0 -0
  185. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/vm.py +0 -0
  186. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/learning/__init__.py +0 -0
  187. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/learning/exploration_policy.py +0 -0
  188. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/primitives/__init__.py +0 -0
  189. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/primitives/executor.py +0 -0
  190. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/primitives/models.py +0 -0
  191. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/__init__.py +0 -0
  192. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/failure_classifier.py +0 -0
  193. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/repair_planner.py +0 -0
  194. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/repair_registry.py +0 -0
  195. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/repair_strategies.py +0 -0
  196. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/__init__.py +0 -0
  197. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/ast_rewriter.py +0 -0
  198. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/classification.py +0 -0
  199. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/__init__.py +0 -0
  200. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/contract_diff.py +0 -0
  201. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/contract_extractor.py +0 -0
  202. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/contract_models.py +0 -0
  203. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/project_graph.py +0 -0
  204. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/propagation_planner.py +0 -0
  205. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/models.py +0 -0
  206. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/repair_planner.py +0 -0
  207. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/repair_registry.py +0 -0
  208. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/repair_strategies.py +0 -0
  209. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/rollback_manager.py +0 -0
  210. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/verifier.py +0 -0
  211. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/vm.py +0 -0
  212. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/__init__.py +0 -0
  213. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/task_queue.py +0 -0
  214. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/trigger_engine.py +0 -0
  215. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/trigger_policy.py +0 -0
  216. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/mcp/__init__.py +0 -0
  217. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/mcp/server.py +0 -0
  218. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/prompts/__init__.py +0 -0
  219. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/prompts/edit_prompts.py +0 -0
  220. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/cross_language/__init__.py +0 -0
  221. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/cross_language/models.py +0 -0
  222. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/cross_language/strategy_abstraction.py +0 -0
  223. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/cross_language/transfer_engine.py +0 -0
  224. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/__init__.py +0 -0
  225. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/experience_store.py +0 -0
  226. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/exploration_state.py +0 -0
  227. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/learning_sink.py +0 -0
  228. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/pattern_extractor.py +0 -0
  229. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_learning_models.py +0 -0
  230. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_learning_scorer.py +0 -0
  231. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_learning_updater.py +0 -0
  232. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_sequence_models.py +0 -0
  233. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_sequence_scorer.py +0 -0
  234. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_sequence_store.py +0 -0
  235. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_sequence_updater.py +0 -0
  236. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/problem_signature.py +0 -0
  237. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/strategy_execution_bias.py +0 -0
  238. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/strategy_prioritizer.py +0 -0
  239. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/strategy_state.py +0 -0
  240. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/unified_run_record.py +0 -0
  241. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/__init__.py +0 -0
  242. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/delete_node.py +0 -0
  243. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/executor.py +0 -0
  244. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/insert_import.py +0 -0
  245. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/insert_statement.py +0 -0
  246. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/models.py +0 -0
  247. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/registry.py +0 -0
  248. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/rename_symbol.py +0 -0
  249. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/replace_function.py +0 -0
  250. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/update_call.py +0 -0
  251. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/__init__.py +0 -0
  252. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/ast_transform_utils.py +0 -0
  253. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/contract_replan_strategy.py +0 -0
  254. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/draft_parser.py +0 -0
  255. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/flow_synthesizer.py +0 -0
  256. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/fragment_generator.py +0 -0
  257. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/fragment_integrator.py +0 -0
  258. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/generation_planner.py +0 -0
  259. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/libcst_transform_utils.py +0 -0
  260. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/output_comparator.py +0 -0
  261. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_code_templates.py +0 -0
  262. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_detector.py +0 -0
  263. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_ir_builder.py +0 -0
  264. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_models.py +0 -0
  265. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_reconstructor.py +0 -0
  266. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_registry.py +0 -0
  267. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_contract_evaluator.py +0 -0
  268. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_contract_models.py +0 -0
  269. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_contracts.py +0 -0
  270. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_corrector.py +0 -0
  271. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_gap_analyzer.py +0 -0
  272. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_rewrite_models.py +0 -0
  273. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_rewrite_planner.py +0 -0
  274. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_rewriter.py +0 -0
  275. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_tracer.py +0 -0
  276. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/synthesis_planner.py +0 -0
  277. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/ts_ir_models.py +0 -0
  278. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/ts_semantic_models.py +0 -0
  279. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/ts_semantic_tracer.py +0 -0
  280. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/simulator/dependency_traversal.py +0 -0
  281. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/simulator/impact_models.py +0 -0
  282. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/simulator/impact_simulator.py +0 -0
  283. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/simulator/risk_estimator.py +0 -0
  284. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/__init__.py +0 -0
  285. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/code_integrity.py +0 -0
  286. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/impact_propagation.py +0 -0
  287. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/impact_verification_mapper.py +0 -0
  288. {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/verification_set_builder.py +0 -0
  289. {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/composite_risk.py +0 -0
  290. {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/execution_graph_advisor.py +0 -0
  291. {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/graph_builder.py +0 -0
  292. {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/graph_facade.py +0 -0
  293. {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/models.py +0 -0
  294. {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/repository_graph.py +0 -0
  295. {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/run_scoped_graph_cache.py +0 -0
  296. {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/spec_graph_enricher.py +0 -0
  297. {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/virtual_graph.py +0 -0
  298. {asicode-0.2.7 → asicode-0.2.9}/external_llm/hybrid_parser.py +0 -0
  299. {asicode-0.2.7 → asicode-0.2.9}/external_llm/image_utils.py +0 -0
  300. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/__init__.py +0 -0
  301. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/base.py +0 -0
  302. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/bash_provider.py +0 -0
  303. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/capabilities.py +0 -0
  304. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/csharp_provider.py +0 -0
  305. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/css_provider.py +0 -0
  306. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/go_provider.py +0 -0
  307. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/html_provider.py +0 -0
  308. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/java_provider.py +0 -0
  309. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/javascript_provider.py +0 -0
  310. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/json_provider.py +0 -0
  311. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/kotlin_provider.py +0 -0
  312. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/libcst_utils.py +0 -0
  313. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/models.py +0 -0
  314. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/php_provider.py +0 -0
  315. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/python_provider.py +0 -0
  316. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/ruby_provider.py +0 -0
  317. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/rust_provider.py +0 -0
  318. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/swift_provider.py +0 -0
  319. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/tree_sitter_utils.py +0 -0
  320. {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/typescript_provider.py +0 -0
  321. {asicode-0.2.7 → asicode-0.2.9}/external_llm/model_registry.py +0 -0
  322. {asicode-0.2.7 → asicode-0.2.9}/external_llm/ollama_api.py +0 -0
  323. {asicode-0.2.7 → asicode-0.2.9}/external_llm/openai_client.py +0 -0
  324. {asicode-0.2.7 → asicode-0.2.9}/external_llm/output_modes.py +0 -0
  325. {asicode-0.2.7 → asicode-0.2.9}/external_llm/patch_engine.py +0 -0
  326. {asicode-0.2.7 → asicode-0.2.9}/external_llm/patch_synthesizer.py +0 -0
  327. {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/__init__.py +0 -0
  328. {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/asi_mcp_adapter.py +0 -0
  329. {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/claude_session.py +0 -0
  330. {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/cli.py +0 -0
  331. {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/collaboration_orchestrator.py +0 -0
  332. {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/streaming_display.py +0 -0
  333. {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/verdict.py +0 -0
  334. {asicode-0.2.7 → asicode-0.2.9}/external_llm/semantic_patch.py +0 -0
  335. {asicode-0.2.7 → asicode-0.2.9}/external_llm/service.py +0 -0
  336. {asicode-0.2.7 → asicode-0.2.9}/external_llm/smart_analyzer.py +0 -0
  337. {asicode-0.2.7 → asicode-0.2.9}/external_llm/super_context_builder.py +0 -0
  338. {asicode-0.2.7 → asicode-0.2.9}/external_llm/testing/__init__.py +0 -0
  339. {asicode-0.2.7 → asicode-0.2.9}/external_llm/testing/symbol_aware_test_finder.py +0 -0
  340. {asicode-0.2.7 → asicode-0.2.9}/external_llm/testing/test_dependency_graph.py +0 -0
  341. {asicode-0.2.7 → asicode-0.2.9}/patch_synth.py +0 -0
  342. {asicode-0.2.7 → asicode-0.2.9}/path_security.py +0 -0
  343. {asicode-0.2.7 → asicode-0.2.9}/plan_compiler.py +0 -0
  344. {asicode-0.2.7 → asicode-0.2.9}/services/__init__.py +0 -0
  345. {asicode-0.2.7 → asicode-0.2.9}/services/patch_helpers.py +0 -0
  346. {asicode-0.2.7 → asicode-0.2.9}/setup.cfg +0 -0
  347. {asicode-0.2.7 → asicode-0.2.9}/tests/test_common.py +0 -0
  348. {asicode-0.2.7 → asicode-0.2.9}/tests/test_config.py +0 -0
  349. {asicode-0.2.7 → asicode-0.2.9}/tests/test_context_budget.py +0 -0
  350. {asicode-0.2.7 → asicode-0.2.9}/tests/test_embedding_singleton.py +0 -0
  351. {asicode-0.2.7 → asicode-0.2.9}/tests/test_intent_classifier.py +0 -0
  352. {asicode-0.2.7 → asicode-0.2.9}/tests/test_learned_policy.py +0 -0
  353. {asicode-0.2.7 → asicode-0.2.9}/tests/test_ollama_api.py +0 -0
  354. {asicode-0.2.7 → asicode-0.2.9}/tests/test_path_security.py +0 -0
  355. {asicode-0.2.7 → asicode-0.2.9}/tests/test_string_helper.py +0 -0
  356. {asicode-0.2.7 → asicode-0.2.9}/tests/test_work_state_digest.py +0 -0
  357. {asicode-0.2.7 → asicode-0.2.9}/tests/test_write_safety_repair_path.py +0 -0
  358. {asicode-0.2.7 → asicode-0.2.9}/utils/__init__.py +0 -0
  359. {asicode-0.2.7 → asicode-0.2.9}/utils/llm_utils.py +0 -0
  360. {asicode-0.2.7 → asicode-0.2.9}/utils/string_helper.py +0 -0
  361. {asicode-0.2.7 → asicode-0.2.9}/utils/version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: asicode
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Summary: Autonomous Software Improvement — AST-precise code editing agent with verification gates (CLI + MCP server)
5
5
  Author-email: socialherb <junddory@gmail.com>
6
6
  License-Expression: MIT
@@ -78,13 +78,18 @@ Dynamic: license-file
78
78
 
79
79
  ## Features
80
80
 
81
+ - **Context economy**: recent turns stay verbatim while older turns are compressed in the background, and superseded tool outputs are dropped from the window — long sessions stay focused and cheap instead of accumulating until a context cliff
82
+ - **Parallel sub-agents, mixed models**: orchestration (`--orchestrate`) dispatches sub-tasks to worker processes — each opens its own terminal window on macOS — and every worker slot can run a different provider/model (`/model dev_1 …`)
83
+ - **Multi-terminal, one repo**: run several `asi` sessions on the same repository at once — cross-process file locks, per-turn ownership markers, and stale-worker reaping keep agents from duplicating or clobbering each other's work
84
+ - **Claude Code collaboration**: pair with the Claude Agent SDK for division of labor — Claude analyzes the codebase through asicode's MCP tools (read-only in analysis mode), asicode executes the edits, Claude optionally reviews the result (`pip install 'asicode[collaborate]'`)
81
85
  - **Multi-language code editing**: Python, TypeScript, JavaScript, Go, Java, Kotlin, Rust, and more via tree-sitter AST parsing
82
86
  - **AST-precise modifications**: Edit symbols by name, insert/delete lines by anchor, apply typed AST operations (Python)
83
87
  - **Vector search & RAG**: Semantic code search with FAISS + sentence-transformers embedding
84
88
  - **Structural analysis**: Dead code detection, duplicate finding, unused import scanning, contradictory logic detection
85
89
  - **Interactive CLI**: Rich terminal interface with prompt-toolkit, command history, completion, and multi-line editing
86
- - **Headless & automation modes**: single-shot runs (`asi -p`), JSON/NDJSON output, and multi-agent orchestration (`--orchestrate`)
87
- - **Design chat**: Persistent conversation session with auto-compression and insight management
90
+ - **Headless & automation modes**: single-shot runs (`asi -p`), JSON/NDJSON output
91
+ - **Self-searchable history**: sessions persist to disk and survive `/clear` and CLI restarts — the model can search its own past conversations (`search_design_history`, cross-session) to recall decisions and file paths instead of re-discovering them
92
+ - **Design chat**: Persistent conversation session with insight management
88
93
  - **Shell shim layer**: macOS/Linux compatibility layer for BSD-style command-line tools
89
94
 
90
95
  ## Quick Start
@@ -146,6 +151,54 @@ followed by verification. Headless mode (`asi -p`) and orchestration mode
146
151
  (`--orchestrate`, which decomposes a request and dispatches it to parallel
147
152
  sub-agent workers) drive the same loop.
148
153
 
154
+ ### Context Economy
155
+ Most agent CLIs let every turn and tool result pile up until the context
156
+ window forces a lossy compaction. asicode manages the window continuously:
157
+
158
+ - The most recent turns are always kept verbatim; older turns are summarized
159
+ by a background pass that never blocks the conversation.
160
+ - Tool outputs feed the turn that requested them; once superseded, stale
161
+ results are dropped from the window (originals persist on disk).
162
+ - Durable facts are promoted to a session insight store, so they survive
163
+ compression instead of living in the transcript.
164
+ - Compressed and `/clear`-ed turns aren't gone — they're archived to disk, and
165
+ the model can search back through them (and past sessions) with
166
+ `search_design_history` whenever it needs a decision or file path that
167
+ fell out of the active window.
168
+
169
+ The result: the model sees a focused window instead of a scrolling log —
170
+ better attention on the task at hand, and materially fewer tokens per turn.
171
+
172
+ ### Parallel & Concurrent by Design
173
+ `--orchestrate` decomposes a request into sub-tasks and runs them in parallel
174
+ worker processes over a file-based IPC protocol with heartbeats (a hung worker
175
+ is distinguishable from a busy one). Worker slots are independently
176
+ configurable, so a cheap fast model can handle mechanical edits while a
177
+ stronger model plans.
178
+
179
+ Concurrency is also safe across *your own* terminals: session state is
180
+ guarded by cross-process locks, each in-flight turn carries an owner marker so
181
+ other sessions see "being handled elsewhere" instead of re-doing the work, and
182
+ turns from crashed processes are detected and reaped.
183
+
184
+ ### Division of Labor with Claude Code
185
+ `asi collaborate --task "…"` runs a four-phase pipeline with the Claude Agent
186
+ SDK, pairing each agent with what it does best:
187
+
188
+ 1. **Preprocess** — asicode's cheap engine generates a codebase digest
189
+ (structure, relevant files) so the expensive model never burns tokens on
190
+ raw discovery.
191
+ 2. **Analyze** — the Claude agent receives the digest and explores through
192
+ asicode's in-process MCP tools; its own file tools are disabled and, in
193
+ analysis mode, destructive tools are excluded — a read-only investigation
194
+ by construction.
195
+ 3. **Execute** — asicode applies the planned edits through its verified
196
+ editing pipeline.
197
+ 4. **Review** — optionally, the Claude agent reviews the execution and
198
+ returns a verdict.
199
+
200
+ Requires the optional extra: `pip install 'asicode[collaborate]'`.
201
+
149
202
  ### Deterministic Editing
150
203
  All code modifications are validated through multiple layers:
151
204
  - Syntax validation (AST parse gate)
@@ -4,13 +4,18 @@
4
4
 
5
5
  ## Features
6
6
 
7
+ - **Context economy**: recent turns stay verbatim while older turns are compressed in the background, and superseded tool outputs are dropped from the window — long sessions stay focused and cheap instead of accumulating until a context cliff
8
+ - **Parallel sub-agents, mixed models**: orchestration (`--orchestrate`) dispatches sub-tasks to worker processes — each opens its own terminal window on macOS — and every worker slot can run a different provider/model (`/model dev_1 …`)
9
+ - **Multi-terminal, one repo**: run several `asi` sessions on the same repository at once — cross-process file locks, per-turn ownership markers, and stale-worker reaping keep agents from duplicating or clobbering each other's work
10
+ - **Claude Code collaboration**: pair with the Claude Agent SDK for division of labor — Claude analyzes the codebase through asicode's MCP tools (read-only in analysis mode), asicode executes the edits, Claude optionally reviews the result (`pip install 'asicode[collaborate]'`)
7
11
  - **Multi-language code editing**: Python, TypeScript, JavaScript, Go, Java, Kotlin, Rust, and more via tree-sitter AST parsing
8
12
  - **AST-precise modifications**: Edit symbols by name, insert/delete lines by anchor, apply typed AST operations (Python)
9
13
  - **Vector search & RAG**: Semantic code search with FAISS + sentence-transformers embedding
10
14
  - **Structural analysis**: Dead code detection, duplicate finding, unused import scanning, contradictory logic detection
11
15
  - **Interactive CLI**: Rich terminal interface with prompt-toolkit, command history, completion, and multi-line editing
12
- - **Headless & automation modes**: single-shot runs (`asi -p`), JSON/NDJSON output, and multi-agent orchestration (`--orchestrate`)
13
- - **Design chat**: Persistent conversation session with auto-compression and insight management
16
+ - **Headless & automation modes**: single-shot runs (`asi -p`), JSON/NDJSON output
17
+ - **Self-searchable history**: sessions persist to disk and survive `/clear` and CLI restarts — the model can search its own past conversations (`search_design_history`, cross-session) to recall decisions and file paths instead of re-discovering them
18
+ - **Design chat**: Persistent conversation session with insight management
14
19
  - **Shell shim layer**: macOS/Linux compatibility layer for BSD-style command-line tools
15
20
 
16
21
  ## Quick Start
@@ -72,6 +77,54 @@ followed by verification. Headless mode (`asi -p`) and orchestration mode
72
77
  (`--orchestrate`, which decomposes a request and dispatches it to parallel
73
78
  sub-agent workers) drive the same loop.
74
79
 
80
+ ### Context Economy
81
+ Most agent CLIs let every turn and tool result pile up until the context
82
+ window forces a lossy compaction. asicode manages the window continuously:
83
+
84
+ - The most recent turns are always kept verbatim; older turns are summarized
85
+ by a background pass that never blocks the conversation.
86
+ - Tool outputs feed the turn that requested them; once superseded, stale
87
+ results are dropped from the window (originals persist on disk).
88
+ - Durable facts are promoted to a session insight store, so they survive
89
+ compression instead of living in the transcript.
90
+ - Compressed and `/clear`-ed turns aren't gone — they're archived to disk, and
91
+ the model can search back through them (and past sessions) with
92
+ `search_design_history` whenever it needs a decision or file path that
93
+ fell out of the active window.
94
+
95
+ The result: the model sees a focused window instead of a scrolling log —
96
+ better attention on the task at hand, and materially fewer tokens per turn.
97
+
98
+ ### Parallel & Concurrent by Design
99
+ `--orchestrate` decomposes a request into sub-tasks and runs them in parallel
100
+ worker processes over a file-based IPC protocol with heartbeats (a hung worker
101
+ is distinguishable from a busy one). Worker slots are independently
102
+ configurable, so a cheap fast model can handle mechanical edits while a
103
+ stronger model plans.
104
+
105
+ Concurrency is also safe across *your own* terminals: session state is
106
+ guarded by cross-process locks, each in-flight turn carries an owner marker so
107
+ other sessions see "being handled elsewhere" instead of re-doing the work, and
108
+ turns from crashed processes are detected and reaped.
109
+
110
+ ### Division of Labor with Claude Code
111
+ `asi collaborate --task "…"` runs a four-phase pipeline with the Claude Agent
112
+ SDK, pairing each agent with what it does best:
113
+
114
+ 1. **Preprocess** — asicode's cheap engine generates a codebase digest
115
+ (structure, relevant files) so the expensive model never burns tokens on
116
+ raw discovery.
117
+ 2. **Analyze** — the Claude agent receives the digest and explores through
118
+ asicode's in-process MCP tools; its own file tools are disabled and, in
119
+ analysis mode, destructive tools are excluded — a read-only investigation
120
+ by construction.
121
+ 3. **Execute** — asicode applies the planned edits through its verified
122
+ editing pipeline.
123
+ 4. **Review** — optionally, the Claude agent reviews the execution and
124
+ returns a verdict.
125
+
126
+ Requires the optional extra: `pip install 'asicode[collaborate]'`.
127
+
75
128
  ### Deterministic Editing
76
129
  All code modifications are validated through multiple layers:
77
130
  - Syntax validation (AST parse gate)