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.
- {asicode-0.2.7/asicode.egg-info → asicode-0.2.9}/PKG-INFO +56 -3
- {asicode-0.2.7 → asicode-0.2.9}/README.md +55 -2
- {asicode-0.2.7 → asicode-0.2.9}/asi.py +488 -355
- {asicode-0.2.7 → asicode-0.2.9/asicode.egg-info}/PKG-INFO +56 -3
- {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/SOURCES.txt +1 -0
- {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/entry_points.txt +1 -0
- {asicode-0.2.7 → asicode-0.2.9}/diff_apply.py +2 -2
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/design_chat_loop.py +4 -4
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/orchestrator.py +1 -1
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/analysis_tools.py +0 -464
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/browser_tools.py +134 -7
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_registry.py +0 -61
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/vector_cache.py +0 -5
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/weight_learning.py +0 -77
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/work_state_digest.py +3 -4
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/vulture_scanner.py +201 -3
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/ast_rewrite.py +0 -76
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/dependency_graph.py +0 -31
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/failure_classifier.py +0 -4
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/proactive_runner.py +0 -4
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/push_manager.py +0 -4
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_learning_store.py +0 -13
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/unified_store.py +0 -57
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/code_context.py +0 -4
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_contract_registry.py +6 -4
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/intelligent_service.py +1 -401
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/dependency_checker.py +7 -1
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/registry.py +0 -6
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/syntax_validator.py +0 -174
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/multi_planner.py +5 -39
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/output_parser.py +0 -39
- asicode-0.2.9/external_llm/pip_env.py +66 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/project_analyzer.py +0 -52
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/providers.py +0 -23
- {asicode-0.2.7 → asicode-0.2.9}/pyproject.toml +2 -1
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_progress_printer_inflight.py +26 -22
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_real_agent.py +2 -2
- {asicode-0.2.7 → asicode-0.2.9}/LICENSE +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/dependency_links.txt +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/requires.txt +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/asicode.egg-info/top_level.txt +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/common.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/config.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/context_collector.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/_shared_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/_thread_pool.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/_user_intent.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_context_manager.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_escalation_pipeline.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_fast_path.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_loop.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_loop_types.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_phase_manager.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_planner_pipeline.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_profile.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/agent_turn_pipeline.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/alignment_scorer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/anchor_shared.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/argument_repairer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/ast_cache.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/ast_engine.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/async_tool_executor.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/auto_correction.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/background_job_manager.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/call_graph.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/checkpoint_store.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/config/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/config/thresholds.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/context_budget.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/context_contract.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/context_manager.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/context_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/enums.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/execution_mode_classifier.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/execution_spec.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/execution_thresholds.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/failure_classifier.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/failure_context.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/failure_pattern_store.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/file_cache.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/fix_spec_claim_validator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/gsg_safety.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/guard_ir.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/handoff_observer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/insights_manager.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/intent_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/intent_resolver.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/interrupt_tool_results.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/json_repair.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/language_backend.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/language_hint.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/learned_policy.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/light_repo_index.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/lint_runner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/llm_output_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/local_assistant.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/message_shapes.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/metadata_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/operation_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/output_normalizer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/performance_metrics.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/placement_contract.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/plan_state.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/planner_lane_facade.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/rag_configs.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/rag_searcher.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/reasoning_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/repair_helpers.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/request_intent_classifier.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/routing_policy.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/run_store.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/scanner_registry.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/selector_constants.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/semantic_intent.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/semantic_lint.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/session_state.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/slash_commands.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/subagent_ipc.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_engine.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_index.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_locator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_modify_tool.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/symbol_search.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/task_router.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/terminal_coordination.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/termination_policy.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/test_impact_selector.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/test_runner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_chain.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_dependency_graph.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_failure_log.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/agent_tools.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/ast_op_executor.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/constants.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/git_tools.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/read_tools.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/shell_policy.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/test_tools.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/web_search_tools.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_handlers/write_tools.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_result_cache.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_safety.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/agent/tool_schemas.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/_dead_block_shared.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/ast_similarity_scanner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/broken_contract_scanner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/container_reachability_scanner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/contradictory_logic_scanner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/cross_file_refs.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/dead_block_scanner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/duplicate_definition_scanner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/parse_cache.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/public_dead_code_scanner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/analysis/unused_import_scanner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/anthropic_client.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/client.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/code_analyzer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/code_structure_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/common/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/common/atomic_io.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/common/file_lock.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/common/indent_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/context/context_packs.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/context_builder.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/design_session.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/dataflow_extractor.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/graph_propagator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/relevance_scorer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/edit_localization/request_analyzer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/common/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/common/import_normalizer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/common/strategy_priors.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/ast_rewriter.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/rollback_manager.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/verifier.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/execution_vm/vm.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/learning/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/learning/exploration_policy.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/primitives/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/primitives/executor.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/primitives/models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/failure_classifier.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/repair_planner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/repair_registry.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/ts_vm/repair/repair_strategies.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/ast_rewriter.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/classification.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/contract_diff.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/contract_extractor.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/contract_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/project_graph.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/contracts/propagation_planner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/repair_planner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/repair_registry.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/repair_strategies.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/rollback_manager.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/verifier.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/_editor_core/vm/vm.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/task_queue.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/trigger_engine.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/autonomous/trigger_policy.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/mcp/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/mcp/server.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/prompts/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/agent/prompts/edit_prompts.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/cross_language/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/cross_language/models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/cross_language/strategy_abstraction.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/cross_language/transfer_engine.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/experience_store.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/exploration_state.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/learning_sink.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/pattern_extractor.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_learning_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_learning_scorer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_learning_updater.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_sequence_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_sequence_scorer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_sequence_store.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/primitive_sequence_updater.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/problem_signature.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/strategy_execution_bias.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/strategy_prioritizer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/strategy_state.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/learning/unified_run_record.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/delete_node.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/executor.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/insert_import.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/insert_statement.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/registry.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/rename_symbol.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/replace_function.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/primitives/update_call.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/ast_transform_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/contract_replan_strategy.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/draft_parser.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/flow_synthesizer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/fragment_generator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/fragment_integrator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/generation_planner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/libcst_transform_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/output_comparator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_code_templates.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_detector.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_ir_builder.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_reconstructor.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/primitive_registry.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_contract_evaluator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_contract_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_contracts.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_corrector.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_gap_analyzer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_rewrite_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_rewrite_planner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_rewriter.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/semantic_tracer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/synthesis_planner.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/ts_ir_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/ts_semantic_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/semantic/ts_semantic_tracer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/simulator/dependency_traversal.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/simulator/impact_models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/simulator/impact_simulator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/simulator/risk_estimator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/code_integrity.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/impact_propagation.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/impact_verification_mapper.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/editor/verification/verification_set_builder.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/composite_risk.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/execution_graph_advisor.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/graph_builder.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/graph_facade.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/repository_graph.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/run_scoped_graph_cache.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/spec_graph_enricher.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/graph/virtual_graph.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/hybrid_parser.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/image_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/base.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/bash_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/capabilities.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/csharp_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/css_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/go_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/html_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/java_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/javascript_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/json_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/kotlin_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/libcst_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/models.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/php_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/python_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/ruby_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/rust_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/swift_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/tree_sitter_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/languages/typescript_provider.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/model_registry.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/ollama_api.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/openai_client.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/output_modes.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/patch_engine.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/patch_synthesizer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/asi_mcp_adapter.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/claude_session.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/cli.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/collaboration_orchestrator.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/streaming_display.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/repl/collaborate/verdict.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/semantic_patch.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/service.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/smart_analyzer.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/super_context_builder.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/testing/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/testing/symbol_aware_test_finder.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/external_llm/testing/test_dependency_graph.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/patch_synth.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/path_security.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/plan_compiler.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/services/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/services/patch_helpers.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/setup.cfg +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_common.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_config.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_context_budget.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_embedding_singleton.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_intent_classifier.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_learned_policy.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_ollama_api.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_path_security.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_string_helper.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_work_state_digest.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/tests/test_write_safety_repair_path.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/utils/__init__.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/utils/llm_utils.py +0 -0
- {asicode-0.2.7 → asicode-0.2.9}/utils/string_helper.py +0 -0
- {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.
|
|
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
|
|
87
|
-
- **
|
|
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
|
|
13
|
-
- **
|
|
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)
|