devsquad 4.5.4__tar.gz → 4.5.7__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.
- {devsquad-4.5.4 → devsquad-4.5.7}/PKG-INFO +3 -3
- {devsquad-4.5.4 → devsquad-4.5.7}/README.md +2 -2
- {devsquad-4.5.4 → devsquad-4.5.7}/devsquad.egg-info/PKG-INFO +3 -3
- {devsquad-4.5.4 → devsquad-4.5.7}/devsquad.egg-info/SOURCES.txt +10 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/pyproject.toml +1 -1
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_module_activation.py +138 -22
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_test_quality.py +22 -8
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli.py +4 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli_audit.py +8 -8
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli_backend.py +4 -4
- devsquad-4.5.7/scripts/cli_risks.py +305 -0
- devsquad-4.5.7/scripts/collaboration/_version.py +1 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/agent_identity.py +7 -7
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/approval_gate.py +11 -11
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/artifact_store.py +12 -12
- devsquad-4.5.7/scripts/collaboration/async_coeffect_resolver.py +260 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/backend_config.py +9 -9
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/backend_paths.py +9 -9
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/checkpoint_manager.py +5 -5
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/connector_framework.py +15 -15
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dependency_hallucination_checker.py +6 -6
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_hooks.py +1 -1
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher.py +8 -8
- devsquad-4.5.7/scripts/collaboration/dispatcher_intent_mapper.py +238 -0
- devsquad-4.5.7/scripts/collaboration/dispatcher_loop_controller.py +252 -0
- devsquad-4.5.7/scripts/collaboration/dispatcher_transaction.py +416 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dora_metrics_collector.py +11 -11
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/effect_registry.py +12 -12
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/error_budget_tracker.py +13 -13
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/file_bundler.py +4 -4
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/gap_analyzer.py +15 -15
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/gitlab_connector.py +15 -15
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/host_llm_bridge.py +33 -10
- devsquad-4.5.7/scripts/collaboration/host_llm_bridge_v2.py +502 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/llm_backend.py +2 -4
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/models_dispatch.py +13 -13
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/module_fiber.py +1 -1
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/moka_backend.py +8 -8
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/order_chain_detector.py +10 -10
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/perf_baseline.py +16 -16
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/protocols.py +1 -1
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/quality_calibration_gate.py +3 -3
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/quality_probe_slice.py +3 -3
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/report_formatter.py +5 -5
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/risk_register.py +18 -18
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/role_specific_mock_backend.py +3 -3
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/scratchpad_history_store.py +11 -11
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/skill_provider_builtin.py +6 -6
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/skill_provider_mcp.py +6 -6
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/task_scale_gate.py +12 -12
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/test_quality_guard.py +39 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/viewpoint_registry.py +11 -11
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collect_baseline.py +7 -8
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/__init__.py +1 -1
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_api_security.py +24 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_api_server_v362.py +27 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_approval_gate.py +16 -16
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_artifact_effect_binding.py +4 -7
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_artifact_store.py +15 -15
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_backend_config.py +3 -5
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_check_test_quality.py +12 -3
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_cli_audit.py +6 -8
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_cli_doctor.py +6 -8
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_cli_metrics.py +2 -3
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_test_quality_guard_test.py +25 -4
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dependency_hallucination_checker.py +1 -1
- devsquad-4.5.7/tests/test_dispatcher_intent_mapper.py +132 -0
- devsquad-4.5.7/tests/test_dispatcher_loop_controller.py +115 -0
- devsquad-4.5.7/tests/test_dispatcher_transaction.py +246 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_effect_registry.py +2 -4
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_fallback_fuse.py +4 -5
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_gitlab_connector.py +6 -6
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_host_bridge_unit.py +9 -10
- devsquad-4.5.7/tests/test_host_llm_bridge_v2.py +297 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_moka_backend.py +15 -14
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_order_chain_detector.py +5 -5
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_perf_baseline.py +7 -8
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_perf_baseline_ci_gate.py +2 -4
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_prometheus_metrics.py +1 -1
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_rate_limit.py +24 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_task_scale_gate.py +5 -5
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_worker_artifact_integration.py +6 -7
- devsquad-4.5.4/scripts/collaboration/_version.py +0 -1
- {devsquad-4.5.4 → devsquad-4.5.7}/LICENSE +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/devsquad.egg-info/dependency_links.txt +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/devsquad.egg-info/entry_points.txt +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/devsquad.egg-info/requires.txt +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/devsquad.egg-info/top_level.txt +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api/models.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api/rate_limit.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api/routes/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api/routes/dispatch.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api/routes/lifecycle.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api/routes/metrics.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api/routes/metrics_gates.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api/security.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/api_server.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/auth.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/benchmark_async_dispatch.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/benchmark_ponytail_smart.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/benchmark_real_llm.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_async_coverage.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_config_consistency.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_constructor_params.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_dependency_lock.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_dependency_sync.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_doc_consistency.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_hidden_content.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_test_pyramid.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/check_version_consistency.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli/cli_visual.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli_dispatch.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli_doctor.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli_lifecycle.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli_metrics.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli_modules.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli_sessions.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/cli_utils.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/adaptive_role_selector.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/adversarial_verify.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/agent_briefing.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ai_semantic_matcher.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/anchor_checker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/anti_rationalization.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/async_adapter.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/async_coordinator.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/async_llm_backend.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/audit_logger.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/autonomous/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/autonomous/git_driver.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/autonomous/loop_controller.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/autonomous/notes_memory.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/autonomous/run_state.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/autonomous/sleep_guard.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/autonomous/smart_confirmation.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/batch_scheduler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/benchmark_regression_checker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/cache_interface.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ccr_store.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ci_feedback_adapter.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/cli_command_classifier.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/code_graph_query.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/code_graph_storage.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/code_knowledge_graph.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/code_map_generator.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/coeffect.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/concern_pack_loader.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/confidence_score.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/config_manager.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/consensus.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/consensus_gate.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/constants.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/content_cache.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/content_crusher.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/context_compressor.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/coordinator.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dashboard_live_mode.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/debt_collector.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/deployment_compliance_checker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_audit.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_component_factory.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_effect.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_lifecycle.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_models.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_performance.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_pre_steps.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_rbac.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_result_assembler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_services.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_steps.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_steps_base.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_steps_consensus_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_steps_feedback_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_steps_mixins.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_steps_quality_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatch_steps_services_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_async_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_audit_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_base.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_config.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_error_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_factory.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_lifecycle_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_mixins.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_status_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dispatcher_utils_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/dual_layer_context.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/enhanced_worker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/enterprise_feature.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/event_bus.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/execution_guard.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/feature_usage_tracker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/feedback_control_loop.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/five_axis_consensus.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/input_validator.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/intent_workflow_mapper.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/judge_agent.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/language_parsers.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/learned_rule_store.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/lifecycle_gate.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/lifecycle_protocol.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/lifecycle_shortcut_adapter.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/lifecycle_shortcut_helpers.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/lifecycle_templates.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/llm_cache.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/llm_cache_async.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/llm_cache_base.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/llm_retry.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/llm_retry_async.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/llm_retry_base.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/discovery_probe.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/handoff_adapter.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/independent_evaluator.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/kernel.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/loop_scheduler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/models.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/protocols.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/rollback_strategy.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/loop_engineering/unified_memory.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/mce_adapter.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/memory_bridge.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/memory_claw_source.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/memory_forgetting.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/memory_index.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/memory_query.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/memory_serializer.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/memory_types.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/meta_skill_layering.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/micro_task_planner.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/models.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/models_base.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/models_lifecycle.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/multi_host_adapter.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/multi_level_cache.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/multi_tenant.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/null_providers.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/operation_classifier.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/output_slicer.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/output_validator.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/performance_fingerprint.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/performance_monitor.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/permission_guard.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/plugins/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/plugins/hot_loader.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ponytail_rule_injector.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/prometheus_metrics.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/prompt_assembler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/prompt_assembler_base.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/prompt_assembler_formatting_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/prompt_assembler_mixins.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/prompt_assembler_substitution_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/prompt_assembler_template_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/prompt_assembler_validation_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/prompt_dials.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/rbac_engine.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/redesign_auditor.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/redesign_checkers.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/redis_cache.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/requirement_tracer.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/retrospective.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/review_checkers.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/role_matcher.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/role_skill_loader.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/rule_collector.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/scratchpad.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/secret_patterns.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/severity_router.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/similar_task_recommender.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/skill_extractor.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/skill_registry.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/skill_storage.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/skillifier.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/standardized_role_template.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/task_completion_checker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/tech_debt_manager.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/todo_drift_monitor.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/two_stage_review_gate.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ue_test_accessibility_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ue_test_framework.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ue_test_framework_base.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ue_test_heuristic_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ue_test_journey_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ue_test_mixins.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/ue_test_persona_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/unified_gate_engine.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/usage_tracker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/user_friendly_error.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/verification_gate.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/warmup_manager.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/worker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/workflow_engine.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/workflow_engine_base.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/workflow_engine_lifecycle_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/workflow_engine_mixins.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/workflow_engine_persistence_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/workflow_engine_state_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/workflow_engine_transition_mixin.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/collaboration/yagni_checker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/app.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/auth_views.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/components.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/dag_views.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/dispatch_views.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/i18n.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/lifecycle_views.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/metrics_views.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/state.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard/v43_panels.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/dashboard.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/generate_benchmark_report.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/generate_quality_decision_report.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/history_manager.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/mcp_server.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/qa/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/qa/deterministic_rule_engine.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/qa/models.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/qa/taste_dials.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/qa/uiux_analyzer.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/qa/uiux_subitems.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/qa/visual_regression.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/scan_pickle_payloads.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/utils/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/scripts/utils/_find_missing_hints.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/setup.cfg +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/_version.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/dispatch/handler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/intent/handler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/prototype/handler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/registry.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/retrospective/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/retrospective/handler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/review/handler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/security/handler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/teach/handler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/test/__init__.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/skills/test/handler.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_4pt_grid.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_adaptive_role_selector.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_adversarial_verify.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_agent_briefing.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_anchor_retrospective.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_anti_rationalization.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_antipattern_bans.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_api_budget_status_endpoint.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_async_coordinator.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_async_modules.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_audit_logger.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_auth_phase5.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_autonomous.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_benchmark_ponytail_smart.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_cache_interface.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_ccr_store.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_check_async_coverage.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_check_config_consistency.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_check_constructor_params.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_check_dependency_lock.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_check_hidden_content.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_check_test_pyramid.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_check_version_consistency.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_ci_feedback_adapter.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_cli_command_classifier.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_cli_deep_v362.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_cli_lifecycle.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_cli_phase5.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_code_knowledge_graph.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_claw_integration_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_context_compressor_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_core_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_dispatcher_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_dispatcher_ux_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_e2e_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_enhanced_e2e_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_llm_cache_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_llm_retry_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_mce_adapter_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_memory_bridge_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_performance_monitor_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_permission_guard_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_prompt_optimization_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_role_mapping_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_skillifier_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_test_quality_guard.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_upstream_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_collaboration_warmup_manager_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_confidence_score.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_config_injection.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_consensus_dissent.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_consensus_fatigue.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_consensus_gate.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_content_cache.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_content_crusher.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_coordinator_smart_compression.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dag_views.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dashboard_live_mode.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dashboard_split.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dashboard_ui_e2e.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dashboard_v43_panels.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_data_backup.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_debt_collector.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_deep_shallow.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_deletion_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dependency_lock.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_deployment_compliance_checker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_deterministic_rule_engine.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dispatch_audit.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dispatch_performance.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dispatch_rbac.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dispatch_steps.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dispatcher_mixins.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dispatcher_phase5_core.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_docker_deployment.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_dual_layer_context.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_enhanced_worker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_feedback_control_loop.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_five_axis_consensus.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_flow_standalone.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_full_lifecycle_adapter.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_git_guardrails.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_glossary_loader.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_grilling_mode.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_handoff_redaction.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_history_manager_v362.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_input_validator_phase5.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_input_validator_sensitive.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_intent_workflow_mapper.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_judge_agent.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_learned_rule_phase4.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_lifecycle_protocol.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_llm_auto_fallback.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_llm_backend_resolve.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_llm_cache_protocol.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_loop_engineering.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_loop_engineering_rollback.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_mcp_server_v362.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_memory_benchmarks.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_meta_skill_layering.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_micro_task_planner.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_multi_host_adapter.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_multi_tenant.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_multi_tenant_isolation_e2e.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_no_op_test.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_node_type_separation.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_null_providers.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_oklch_color.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_operation_classifier.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_output_slicer.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_output_validator_prompt_injection.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_performance_benchmarks.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_performance_fingerprint.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_performance_monitor_protocol.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_permission_guard_human_gate.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_permission_guard_phase5.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_phase4_ghost_feature_defense.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_pipeline_step19_20.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_plan_c_unified_architecture.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_plugins_hot_loader.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_ponytail_rule_injector.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_production_features.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_prompt_dials.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_protocols.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_prototype_skill.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_qa_uiux_visual_regression.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_quick_bonus.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_rbac_engine.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_rbac_fail_closed.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_red_capable_gate.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_redesign_auditor.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_redis_cache.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_requirement_tracer.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_retry_jitter_strategies.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_role_skill_loader.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_rule_collector.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_rule_injection_security.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_secret_patterns.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_severity_router.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_similar_task_recommender.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_skill_registry_coverage.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_skill_security.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_sleep_guard.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_standardized_role_template.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_start_script.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_step_node_types.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_suggested_next_steps.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_task_completion_checker.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_taste_dials.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_tautological_seams.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_teach_skill.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_tech_debt_manager.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_todo_drift_monitor.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_token_budget_compressed_scratchpad.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_triage_label.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_two_stage_review_gate.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_ue_test_framework.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_uiux_subitems.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_usage_tracker_coverage.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_v39_e2e.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_v39_performance.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_v411_security_hardening.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_verification_gate.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_version.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_vertical_slice.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_workflow_engine.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_workflow_engine_base.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_workflow_engine_lifecycle.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_workflow_engine_state.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_workflow_engine_transition.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_workflow_persistence_coverage.py +0 -0
- {devsquad-4.5.4 → devsquad-4.5.7}/tests/test_yagni_checker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devsquad
|
|
3
|
-
Version: 4.5.
|
|
3
|
+
Version: 4.5.7
|
|
4
4
|
Summary: Production-Ready Multi-Role AI Task Orchestrator
|
|
5
5
|
Author-email: DevSquad Team <devsquad@example.com>
|
|
6
6
|
License: MIT
|
|
@@ -96,14 +96,14 @@ Dynamic: license-file
|
|
|
96
96
|
<p align="center">
|
|
97
97
|
<strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
|
|
98
98
|
<br>
|
|
99
|
-
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.
|
|
99
|
+
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills) | V4.4.0 (5 enhancement modules)</em>
|
|
100
100
|
</p>
|
|
101
101
|
|
|
102
102
|
<p align="center">
|
|
103
103
|
<img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
|
|
104
104
|
<img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
|
|
105
105
|
<img alt="Tests" src="https://img.shields.io/badge/Tests-8996%2B%20passing-brightgreen" />
|
|
106
|
-
<img alt="Version" src="https://img.shields.io/badge/V4.5.
|
|
106
|
+
<img alt="Version" src="https://img.shields.io/badge/V4.5.7-success" />
|
|
107
107
|
<img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
|
|
108
108
|
<img alt="Quality" src="https://img.shields.io/badge/Code%20Quality-4.3%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%86-blue" />
|
|
109
109
|
<img alt="Security" src="https://img.shields.io/badge/Security-5%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-success" />
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
<p align="center">
|
|
4
4
|
<strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
|
|
5
5
|
<br>
|
|
6
|
-
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.
|
|
6
|
+
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills) | V4.4.0 (5 enhancement modules)</em>
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
|
|
11
11
|
<img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
|
|
12
12
|
<img alt="Tests" src="https://img.shields.io/badge/Tests-8996%2B%20passing-brightgreen" />
|
|
13
|
-
<img alt="Version" src="https://img.shields.io/badge/V4.5.
|
|
13
|
+
<img alt="Version" src="https://img.shields.io/badge/V4.5.7-success" />
|
|
14
14
|
<img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
|
|
15
15
|
<img alt="Quality" src="https://img.shields.io/badge/Code%20Quality-4.3%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%86-blue" />
|
|
16
16
|
<img alt="Security" src="https://img.shields.io/badge/Security-5%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-success" />
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devsquad
|
|
3
|
-
Version: 4.5.
|
|
3
|
+
Version: 4.5.7
|
|
4
4
|
Summary: Production-Ready Multi-Role AI Task Orchestrator
|
|
5
5
|
Author-email: DevSquad Team <devsquad@example.com>
|
|
6
6
|
License: MIT
|
|
@@ -96,14 +96,14 @@ Dynamic: license-file
|
|
|
96
96
|
<p align="center">
|
|
97
97
|
<strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
|
|
98
98
|
<br>
|
|
99
|
-
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.
|
|
99
|
+
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills) | V4.4.0 (5 enhancement modules)</em>
|
|
100
100
|
</p>
|
|
101
101
|
|
|
102
102
|
<p align="center">
|
|
103
103
|
<img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
|
|
104
104
|
<img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
|
|
105
105
|
<img alt="Tests" src="https://img.shields.io/badge/Tests-8996%2B%20passing-brightgreen" />
|
|
106
|
-
<img alt="Version" src="https://img.shields.io/badge/V4.5.
|
|
106
|
+
<img alt="Version" src="https://img.shields.io/badge/V4.5.7-success" />
|
|
107
107
|
<img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
|
|
108
108
|
<img alt="Quality" src="https://img.shields.io/badge/Code%20Quality-4.3%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%86-blue" />
|
|
109
109
|
<img alt="Security" src="https://img.shields.io/badge/Security-5%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-success" />
|
|
@@ -32,6 +32,7 @@ scripts/cli_doctor.py
|
|
|
32
32
|
scripts/cli_lifecycle.py
|
|
33
33
|
scripts/cli_metrics.py
|
|
34
34
|
scripts/cli_modules.py
|
|
35
|
+
scripts/cli_risks.py
|
|
35
36
|
scripts/cli_sessions.py
|
|
36
37
|
scripts/cli_utils.py
|
|
37
38
|
scripts/collect_baseline.py
|
|
@@ -64,6 +65,7 @@ scripts/collaboration/anti_rationalization.py
|
|
|
64
65
|
scripts/collaboration/approval_gate.py
|
|
65
66
|
scripts/collaboration/artifact_store.py
|
|
66
67
|
scripts/collaboration/async_adapter.py
|
|
68
|
+
scripts/collaboration/async_coeffect_resolver.py
|
|
67
69
|
scripts/collaboration/async_coordinator.py
|
|
68
70
|
scripts/collaboration/async_llm_backend.py
|
|
69
71
|
scripts/collaboration/audit_logger.py
|
|
@@ -121,9 +123,12 @@ scripts/collaboration/dispatcher_base.py
|
|
|
121
123
|
scripts/collaboration/dispatcher_config.py
|
|
122
124
|
scripts/collaboration/dispatcher_error_mixin.py
|
|
123
125
|
scripts/collaboration/dispatcher_factory.py
|
|
126
|
+
scripts/collaboration/dispatcher_intent_mapper.py
|
|
124
127
|
scripts/collaboration/dispatcher_lifecycle_mixin.py
|
|
128
|
+
scripts/collaboration/dispatcher_loop_controller.py
|
|
125
129
|
scripts/collaboration/dispatcher_mixins.py
|
|
126
130
|
scripts/collaboration/dispatcher_status_mixin.py
|
|
131
|
+
scripts/collaboration/dispatcher_transaction.py
|
|
127
132
|
scripts/collaboration/dispatcher_utils_mixin.py
|
|
128
133
|
scripts/collaboration/dora_metrics_collector.py
|
|
129
134
|
scripts/collaboration/dual_layer_context.py
|
|
@@ -140,6 +145,7 @@ scripts/collaboration/five_axis_consensus.py
|
|
|
140
145
|
scripts/collaboration/gap_analyzer.py
|
|
141
146
|
scripts/collaboration/gitlab_connector.py
|
|
142
147
|
scripts/collaboration/host_llm_bridge.py
|
|
148
|
+
scripts/collaboration/host_llm_bridge_v2.py
|
|
143
149
|
scripts/collaboration/input_validator.py
|
|
144
150
|
scripts/collaboration/intent_workflow_mapper.py
|
|
145
151
|
scripts/collaboration/judge_agent.py
|
|
@@ -387,8 +393,11 @@ tests/test_dispatch_audit.py
|
|
|
387
393
|
tests/test_dispatch_performance.py
|
|
388
394
|
tests/test_dispatch_rbac.py
|
|
389
395
|
tests/test_dispatch_steps.py
|
|
396
|
+
tests/test_dispatcher_intent_mapper.py
|
|
397
|
+
tests/test_dispatcher_loop_controller.py
|
|
390
398
|
tests/test_dispatcher_mixins.py
|
|
391
399
|
tests/test_dispatcher_phase5_core.py
|
|
400
|
+
tests/test_dispatcher_transaction.py
|
|
392
401
|
tests/test_docker_deployment.py
|
|
393
402
|
tests/test_dual_layer_context.py
|
|
394
403
|
tests/test_effect_registry.py
|
|
@@ -405,6 +414,7 @@ tests/test_grilling_mode.py
|
|
|
405
414
|
tests/test_handoff_redaction.py
|
|
406
415
|
tests/test_history_manager_v362.py
|
|
407
416
|
tests/test_host_bridge_unit.py
|
|
417
|
+
tests/test_host_llm_bridge_v2.py
|
|
408
418
|
tests/test_input_validator_phase5.py
|
|
409
419
|
tests/test_input_validator_sensitive.py
|
|
410
420
|
tests/test_intent_workflow_mapper.py
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"""
|
|
3
3
|
check_module_activation.py — V4.5.3 Anti-Ghost CI gate.
|
|
4
4
|
|
|
5
|
-
Verifies that all V4.5.3 modules'
|
|
5
|
+
Verifies that all V4.5.3 modules' _call_counter_er is > 0 after a representative
|
|
6
6
|
dispatch. Used by CI to block releases of ghost modules.
|
|
7
7
|
|
|
8
8
|
V4.5.2 P12.1: Extended to include:
|
|
@@ -36,7 +36,7 @@ sys.path.insert(0, ".")
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
def main() -> int:
|
|
39
|
-
"""Check all V4.5.2 modules'
|
|
39
|
+
"""Check all V4.5.2 modules' _call_counter_er > 0.
|
|
40
40
|
|
|
41
41
|
Returns:
|
|
42
42
|
0 if all modules activated (anti-ghost pass).
|
|
@@ -49,24 +49,24 @@ def main() -> int:
|
|
|
49
49
|
resolve_backend,
|
|
50
50
|
)
|
|
51
51
|
from scripts.collaboration.backend_paths import classify_error
|
|
52
|
-
from scripts.collaboration.backend_paths import
|
|
52
|
+
from scripts.collaboration.backend_paths import get_call_counter_er as bp
|
|
53
53
|
from scripts.collaboration.gitlab_connector import GitLabConnector
|
|
54
54
|
from scripts.collaboration.gitlab_connector import get_call_count as glc
|
|
55
|
-
from scripts.collaboration.host_llm_bridge import
|
|
55
|
+
from scripts.collaboration.host_llm_bridge import get_call_counter_er as hbb
|
|
56
56
|
|
|
57
57
|
# V4.5.2 P12.1 modules
|
|
58
58
|
from scripts.collaboration.moka_backend import MokaAIBackend
|
|
59
59
|
|
|
60
60
|
# V4.5.2 P12.1 modules
|
|
61
|
-
from scripts.collaboration.moka_backend import
|
|
61
|
+
from scripts.collaboration.moka_backend import get_call_counter_er as mok
|
|
62
62
|
from scripts.collaboration.order_chain_detector import OrderChainDetector
|
|
63
|
-
from scripts.collaboration.order_chain_detector import
|
|
63
|
+
from scripts.collaboration.order_chain_detector import get_call_counter_er as ocd
|
|
64
64
|
from scripts.collaboration.perf_baseline import PerfSampleCollector
|
|
65
|
-
from scripts.collaboration.perf_baseline import
|
|
65
|
+
from scripts.collaboration.perf_baseline import get_call_counter_er as pb
|
|
66
66
|
|
|
67
67
|
# Activate each module (representative call)
|
|
68
68
|
from scripts.collaboration.task_scale_gate import TaskScaleGate
|
|
69
|
-
from scripts.collaboration.task_scale_gate import
|
|
69
|
+
from scripts.collaboration.task_scale_gate import get_call_counter_er as tsg
|
|
70
70
|
|
|
71
71
|
TaskScaleGate().decide("anti-ghost check")
|
|
72
72
|
OrderChainDetector().detect("anti-ghost check")
|
|
@@ -111,7 +111,7 @@ def main() -> int:
|
|
|
111
111
|
create_backend("mock") # C path
|
|
112
112
|
bridge = HostLLMBridge(bridge_dir=None)
|
|
113
113
|
# Directly invoke create_request — this is the only path that bumps
|
|
114
|
-
#
|
|
114
|
+
# _call_counter_er in production code (generate() calls it internally).
|
|
115
115
|
with contextlib.suppress(OSError, ValueError):
|
|
116
116
|
# Bridge dir may not exist; the counter bump happens BEFORE that.
|
|
117
117
|
bridge.create_request(
|
|
@@ -126,13 +126,33 @@ def main() -> int:
|
|
|
126
126
|
os.environ[k] = v
|
|
127
127
|
|
|
128
128
|
# V4.5.3 P12.2 modules — touch counters in main scope so they survive module-level imports
|
|
129
|
-
from scripts.cli_audit import
|
|
129
|
+
from scripts.cli_audit import get_call_counter_er as au_call_counter_er
|
|
130
|
+
|
|
131
|
+
# V4.5.7 P12.5 modules — touch counters in main scope
|
|
132
|
+
from scripts.cli_risks import get_call_counter_er as _get_cli_risks_counter_er
|
|
130
133
|
from scripts.collaboration.artifact_store import (
|
|
131
|
-
|
|
134
|
+
get_call_counter_er as as_call_counter_er,
|
|
135
|
+
)
|
|
136
|
+
from scripts.collaboration.async_coeffect_resolver import (
|
|
137
|
+
get_call_counter_er as _get_async_coeffect_counter_er,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
# V4.5.6 P12.4 modules — touch counters in main scope
|
|
141
|
+
from scripts.collaboration.dispatcher_intent_mapper import (
|
|
142
|
+
get_call_counter_er as _get_intent_counter_er,
|
|
143
|
+
)
|
|
144
|
+
from scripts.collaboration.dispatcher_loop_controller import (
|
|
145
|
+
get_call_counter_er as _get_loop_counter_er,
|
|
146
|
+
)
|
|
147
|
+
from scripts.collaboration.dispatcher_transaction import (
|
|
148
|
+
get_call_counter_er as _get_tx_counter_er,
|
|
132
149
|
)
|
|
133
150
|
from scripts.collaboration.effect_registry import (
|
|
134
151
|
get_call_count as er_call_count,
|
|
135
152
|
)
|
|
153
|
+
from scripts.collaboration.host_llm_bridge_v2 import (
|
|
154
|
+
get_call_counter_er as _get_call_counter_er_v2,
|
|
155
|
+
)
|
|
136
156
|
|
|
137
157
|
# V4.5.4 P12.3 modules — touch counters in main scope
|
|
138
158
|
from scripts.collaboration.module_fiber import (
|
|
@@ -145,27 +165,41 @@ def main() -> int:
|
|
|
145
165
|
# V4.5.4 P12.3 activation
|
|
146
166
|
_activate_v454_modules()
|
|
147
167
|
|
|
168
|
+
# V4.5.6 P12.4 activation (4 new modules)
|
|
169
|
+
_activate_v455_modules()
|
|
170
|
+
|
|
171
|
+
# V4.5.7 P12.5 activation (2 new modules)
|
|
172
|
+
_activate_v457_modules()
|
|
173
|
+
|
|
148
174
|
counters = {
|
|
149
175
|
"TaskScaleGate": tsg(),
|
|
150
|
-
"OrderChainDetector": ocd(),
|
|
151
|
-
"BackendPath": bp(),
|
|
152
176
|
"PerfBaseline": pb(),
|
|
153
|
-
"
|
|
154
|
-
|
|
177
|
+
"HostLLMBridge": hbb(),
|
|
178
|
+
"BackendPaths": bp(),
|
|
179
|
+
"TaskScaleGate_dual": tsg(),
|
|
180
|
+
"OrderChainDetector": ocd(),
|
|
155
181
|
"MokaAIBackend_P12.1.1": mok(),
|
|
156
182
|
"GitLabConnector_P12.1.3": glc(),
|
|
157
183
|
"BackendConfig_P12.1.5": bcc(),
|
|
158
184
|
# V4.5.3 P12.2 modules
|
|
159
|
-
"ArtifactStore_P12.2.1":
|
|
185
|
+
"ArtifactStore_P12.2.1": as_call_counter_er(),
|
|
160
186
|
"EffectRegistry_P12.2.4": er_call_count(),
|
|
161
|
-
"AuditCLI_P12.2.6":
|
|
187
|
+
"AuditCLI_P12.2.6": au_call_counter_er(),
|
|
162
188
|
# V4.5.4 P12.3 modules
|
|
163
189
|
"ModuleFiber_P12.3.1": get_call_counter_er(),
|
|
164
190
|
"CoeffectResolver_P12.3.2": get_call_counter_er(), # shared counter
|
|
165
191
|
"ModulesCLI_P12.3.3": get_call_counter_er(), # shared counter
|
|
192
|
+
# V4.5.6 P12.4 modules
|
|
193
|
+
"HostLLMBridgeV2_P12.4.1": _get_call_counter_er_v2(),
|
|
194
|
+
"DispatcherTransaction_P12.4.2": _get_tx_counter_er(),
|
|
195
|
+
"IntentWorkflowMapper_P12.4.3": _get_intent_counter_er(),
|
|
196
|
+
"DispatchLoopController_P12.4.4": _get_loop_counter_er(),
|
|
197
|
+
# V4.5.7 P12.5 modules
|
|
198
|
+
"AsyncCoeffectResolver_P12.5.1": _get_async_coeffect_counter_er(),
|
|
199
|
+
"CliRisks_P12.5.2": _get_cli_risks_counter_er(),
|
|
166
200
|
}
|
|
167
201
|
|
|
168
|
-
print("V4.5.
|
|
202
|
+
print("V4.5.7 Anti-Ghost Verification")
|
|
169
203
|
print("=" * 60)
|
|
170
204
|
failed = []
|
|
171
205
|
for name, count in counters.items():
|
|
@@ -181,7 +215,7 @@ def main() -> int:
|
|
|
181
215
|
print(f" - {name}")
|
|
182
216
|
return 1
|
|
183
217
|
|
|
184
|
-
print("All V4.5.
|
|
218
|
+
print("All V4.5.7 modules activated. Anti-ghost gate PASSED.")
|
|
185
219
|
return 0
|
|
186
220
|
|
|
187
221
|
|
|
@@ -221,9 +255,91 @@ def _activate_v454_modules() -> None:
|
|
|
221
255
|
_cms_local(Namespace(registry=reg, format="text", module=None))
|
|
222
256
|
|
|
223
257
|
|
|
258
|
+
def _activate_v455_modules() -> None:
|
|
259
|
+
"""Exercise V4.5.6 P12.4 modules to bump their anti-ghost counters.
|
|
260
|
+
|
|
261
|
+
Touches:
|
|
262
|
+
- HostLLMBridgeV2_P12.4.1 — create_request (writes marker)
|
|
263
|
+
- DispatcherTransaction_P12.4.2 — begin + commit
|
|
264
|
+
- IntentWorkflowMapper_P12.4.3 — resolve one workflow
|
|
265
|
+
- DispatchLoopController_P12.4.4 — should_stop call
|
|
266
|
+
"""
|
|
267
|
+
# P12.4.1: HostLLMBridgeV2 — create_request
|
|
268
|
+
import tempfile as _tf
|
|
269
|
+
|
|
270
|
+
from scripts.collaboration.dispatcher_intent_mapper import IntentWorkflowMapper
|
|
271
|
+
from scripts.collaboration.dispatcher_loop_controller import (
|
|
272
|
+
DispatchLoopController,
|
|
273
|
+
IterationKind,
|
|
274
|
+
IterationResult,
|
|
275
|
+
)
|
|
276
|
+
from scripts.collaboration.dispatcher_transaction import (
|
|
277
|
+
DispatchTransaction,
|
|
278
|
+
TransactionRegistry,
|
|
279
|
+
)
|
|
280
|
+
from scripts.collaboration.host_llm_bridge_v2 import HostLLMBridgeV2
|
|
281
|
+
with _tf.TemporaryDirectory() as tmpdir:
|
|
282
|
+
bridge = HostLLMBridgeV2(bridge_dir=tmpdir)
|
|
283
|
+
bridge.create_request(
|
|
284
|
+
agent_type="anti-ghost",
|
|
285
|
+
task="anti-ghost check v2",
|
|
286
|
+
context={},
|
|
287
|
+
prompt="v2 test prompt",
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
# P12.4.2: DispatcherTransaction — full lifecycle
|
|
291
|
+
tx = DispatchTransaction(tx_id="anti-ghost-tx")
|
|
292
|
+
tx.register_module("m1", lambda: None, lambda: None)
|
|
293
|
+
tx.begin()
|
|
294
|
+
tx.commit()
|
|
295
|
+
|
|
296
|
+
# P12.4.3: IntentWorkflowMapper — resolve one workflow
|
|
297
|
+
mapper = IntentWorkflowMapper()
|
|
298
|
+
mapper.resolve("design", "zh")
|
|
299
|
+
|
|
300
|
+
# P12.4.4: DispatchLoopController — should_stop call
|
|
301
|
+
ctrl = DispatchLoopController()
|
|
302
|
+
ctrl.should_stop(IterationResult(IterationKind.SUCCESS))
|
|
303
|
+
# Also verify the registry helper is importable
|
|
304
|
+
_ = TransactionRegistry()
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def _activate_v457_modules() -> None:
|
|
308
|
+
"""Exercise V4.5.7 P12.5 modules to bump their anti-ghost counters.
|
|
309
|
+
|
|
310
|
+
Touches:
|
|
311
|
+
- AsyncCoeffectResolver_P12.5.1 — sync bridge resolve() with executor
|
|
312
|
+
- CliRisks_P12.5.2 — add_risk + cmd_risks_list
|
|
313
|
+
"""
|
|
314
|
+
from argparse import Namespace
|
|
315
|
+
|
|
316
|
+
# P12.5.1: AsyncCoeffectResolver — sync bridge round-trip
|
|
317
|
+
from scripts.collaboration.async_coeffect_resolver import (
|
|
318
|
+
AsyncCoeffectResolver,
|
|
319
|
+
CoeffectRequest,
|
|
320
|
+
CoeffectState,
|
|
321
|
+
)
|
|
322
|
+
|
|
323
|
+
resolver = AsyncCoeffectResolver()
|
|
324
|
+
result = resolver.resolve(
|
|
325
|
+
CoeffectRequest(
|
|
326
|
+
name="anti-ghost",
|
|
327
|
+
payload={"executor": lambda: 42},
|
|
328
|
+
)
|
|
329
|
+
)
|
|
330
|
+
assert result.state == CoeffectState.COMPLETED
|
|
331
|
+
assert result.value == 42
|
|
332
|
+
|
|
333
|
+
# P12.5.2: CliRisks — add + list round-trip (in-process store)
|
|
334
|
+
from scripts.cli_risks import add_risk, cmd_risks_list
|
|
335
|
+
|
|
336
|
+
add_risk("anti-ghost verification risk", probability=0.1, impact=0.1)
|
|
337
|
+
cmd_risks_list(Namespace(format="md", severity=None, limit=None))
|
|
338
|
+
|
|
339
|
+
|
|
224
340
|
def _activate_v453_modules() -> None:
|
|
225
341
|
"""Exercise V4.5.3 P12.2 modules to bump their anti-ghost counters."""
|
|
226
|
-
from scripts.cli_audit import
|
|
342
|
+
from scripts.cli_audit import get_call_counter_er as au_call_counter_er
|
|
227
343
|
from scripts.collaboration.artifact_store import (
|
|
228
344
|
ArtifactStore,
|
|
229
345
|
)
|
|
@@ -251,8 +367,8 @@ def _activate_v453_modules() -> None:
|
|
|
251
367
|
reg.apply(WriteFileEffect(), effect_ctx)
|
|
252
368
|
reg.pending_count()
|
|
253
369
|
|
|
254
|
-
# P12.2.6: AuditCLI — exercise
|
|
255
|
-
_ =
|
|
370
|
+
# P12.2.6: AuditCLI — exercise get_call_counter_er (cmd_audit is imported above)
|
|
371
|
+
_ = au_call_counter_er()
|
|
256
372
|
# Exercise cmd_audit once to bump counter
|
|
257
373
|
from argparse import Namespace
|
|
258
374
|
|
|
@@ -36,11 +36,14 @@ def scan_test_file(detector: AntiPatternDetector, test_file: Path) -> list[Quali
|
|
|
36
36
|
|
|
37
37
|
Lines containing ``# noqa: test-quality`` are skipped (false positive
|
|
38
38
|
suppression, e.g., string literals that contain anti-pattern text as
|
|
39
|
-
test fixtures for the detector itself).
|
|
39
|
+
test fixtures for the detector itself). The detection logic checks both
|
|
40
|
+
the matched line AND the next 5 lines for noqa — because ``detect_in_source``
|
|
41
|
+
flags the matched line by its own index, but for fixture strings the actual
|
|
42
|
+
``noqa`` directive may live on an inner line of the multi-line literal.
|
|
40
43
|
|
|
41
44
|
Args:
|
|
42
45
|
detector: AntiPatternDetector instance.
|
|
43
|
-
test_file:
|
|
46
|
+
test_file: File path used for reporting issue locations.
|
|
44
47
|
|
|
45
48
|
Returns:
|
|
46
49
|
List of QualityIssue found in the file.
|
|
@@ -51,23 +54,34 @@ def scan_test_file(detector: AntiPatternDetector, test_file: Path) -> list[Quali
|
|
|
51
54
|
print(f" WARN: cannot read {test_file}: {exc}", file=sys.stderr)
|
|
52
55
|
return []
|
|
53
56
|
issues = detector.detect_in_source(source, str(test_file))
|
|
54
|
-
# Filter out noqa-suppressed issues
|
|
57
|
+
# Filter out noqa-suppressed issues (check the matched line AND the next 5
|
|
58
|
+
# lines, since fixture strings can span multiple lines).
|
|
55
59
|
return [i for i in issues if not _is_noqa_suppressed(source, i.line)]
|
|
56
60
|
|
|
57
61
|
|
|
58
62
|
def _is_noqa_suppressed(source: str, line_no: int) -> bool:
|
|
59
|
-
"""Check if a line has
|
|
63
|
+
"""Check if a line or any of the next 5 lines has ``# noqa: test-quality``.
|
|
64
|
+
|
|
65
|
+
For multi-line fixture strings (e.g., ``code = "@lru_cache\ndef ...``), the
|
|
66
|
+
detector flags line 1 of the literal but the ``noqa`` directive may be on
|
|
67
|
+
the same or following line within the literal. We allow suppression on
|
|
68
|
+
line_no OR line_no+1..line_no+5 to handle these cases.
|
|
60
69
|
|
|
61
70
|
Args:
|
|
62
71
|
source: Full source code text.
|
|
63
|
-
line_no: 1-based line
|
|
72
|
+
line_no: 1-based line index of the matched anti-pattern.
|
|
64
73
|
|
|
65
74
|
Returns:
|
|
66
|
-
True if
|
|
75
|
+
True if ``# noqa: test-quality`` appears on any of the 6 lines.
|
|
67
76
|
"""
|
|
68
77
|
lines = source.split("\n")
|
|
69
|
-
|
|
70
|
-
|
|
78
|
+
# V4.5.6 W2: extend noqa detection to 8 lines so multi-line fixture strings
|
|
79
|
+
# with noqa on a non-immediate line are suppressed (test_07 has @lru_cache
|
|
80
|
+
# on line 1 of fixture but noqa on line 2 of literal).
|
|
81
|
+
for offset in range(0, 8): # noqa: test-quality
|
|
82
|
+
idx = line_no - 1 + offset
|
|
83
|
+
if 0 <= idx < len(lines) and "# noqa: test-quality" in lines[idx]:
|
|
84
|
+
return True
|
|
71
85
|
return False
|
|
72
86
|
|
|
73
87
|
|
|
@@ -507,6 +507,10 @@ Environment Variables (API keys are read from env vars only, never command line)
|
|
|
507
507
|
# V4.5.4 P12.3.3: devsquad modules CLI (status/graph/retry)
|
|
508
508
|
register_modules_subparser(subparsers)
|
|
509
509
|
|
|
510
|
+
# V4.5.7 P12.5.2: devsquad risks CLI (list/show/clear/export)
|
|
511
|
+
from scripts.cli_risks import register_risks_subparser
|
|
512
|
+
register_risks_subparser(subparsers)
|
|
513
|
+
|
|
510
514
|
# V4.5.0 SessionResume CLI (PRD §10.1.2): `sessions` subcommand group
|
|
511
515
|
p_sessions = subparsers.add_parser(
|
|
512
516
|
"sessions", aliases=["sess"], help="List/show dispatch sessions (SessionResume V4.5.0)"
|
|
@@ -12,7 +12,7 @@ Exposes DispatchAuditLogger as a CLI subcommand:
|
|
|
12
12
|
Sensitive fields (api_key, password, secret, token) in details dict are
|
|
13
13
|
auto-redacted in text output.
|
|
14
14
|
|
|
15
|
-
Anti-ghost:
|
|
15
|
+
Anti-ghost: get_call_counter_er() exposed.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
from __future__ import annotations
|
|
@@ -31,20 +31,20 @@ sys.path.insert(0, ".")
|
|
|
31
31
|
|
|
32
32
|
# ---------- Anti-ghost counter ----------
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
_call_counter_er: int = 0
|
|
35
35
|
_call_counter_lock = threading.Lock()
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
def
|
|
39
|
-
global
|
|
38
|
+
def _inc_call_counter_er() -> None:
|
|
39
|
+
global _call_counter_er
|
|
40
40
|
with _call_counter_lock:
|
|
41
|
-
|
|
41
|
+
_call_counter_er += 1
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
def
|
|
44
|
+
def get_call_counter_er() -> int:
|
|
45
45
|
"""Return current anti-ghost counter value."""
|
|
46
46
|
with _call_counter_lock:
|
|
47
|
-
return
|
|
47
|
+
return _call_counter_er
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
# ---------- Sensitive field redaction ----------
|
|
@@ -193,7 +193,7 @@ def cmd_audit(args: argparse.Namespace) -> int:
|
|
|
193
193
|
Returns:
|
|
194
194
|
Exit code (0 success, 1 verify failure).
|
|
195
195
|
"""
|
|
196
|
-
|
|
196
|
+
_inc_call_counter_er()
|
|
197
197
|
entries = _load_entries(args.db_path)
|
|
198
198
|
if args.event_type:
|
|
199
199
|
entries = [e for e in entries if e.get("event_type") == args.event_type]
|
|
@@ -19,7 +19,7 @@ from typing import Any
|
|
|
19
19
|
|
|
20
20
|
from scripts.collaboration.backend_config import (
|
|
21
21
|
VALID_BACKENDS,
|
|
22
|
-
|
|
22
|
+
_inc_call_counter_er,
|
|
23
23
|
resolve_backend,
|
|
24
24
|
save_backend_config,
|
|
25
25
|
)
|
|
@@ -34,7 +34,7 @@ def cmd_backend_set(args: Any) -> int:
|
|
|
34
34
|
Returns:
|
|
35
35
|
Exit code (0 on success).
|
|
36
36
|
"""
|
|
37
|
-
|
|
37
|
+
_inc_call_counter_er()
|
|
38
38
|
provider = args.provider
|
|
39
39
|
project = getattr(args, "project", False)
|
|
40
40
|
|
|
@@ -63,7 +63,7 @@ def cmd_backend_get(args: Any) -> int:
|
|
|
63
63
|
Returns:
|
|
64
64
|
Exit code (0).
|
|
65
65
|
"""
|
|
66
|
-
|
|
66
|
+
_inc_call_counter_er()
|
|
67
67
|
project = getattr(args, "project", False)
|
|
68
68
|
backend = resolve_backend(prefer_project=project)
|
|
69
69
|
print(f"Current backend: {backend}")
|
|
@@ -79,7 +79,7 @@ def cmd_backend_list(args: Any) -> int:
|
|
|
79
79
|
Returns:
|
|
80
80
|
Exit code (0).
|
|
81
81
|
"""
|
|
82
|
-
|
|
82
|
+
_inc_call_counter_er()
|
|
83
83
|
current = resolve_backend()
|
|
84
84
|
print("Available LLM backends:")
|
|
85
85
|
for backend in sorted(VALID_BACKENDS):
|