devsquad 3.9.2__tar.gz → 4.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. {devsquad-3.9.2 → devsquad-4.0.0}/PKG-INFO +23 -10
  2. {devsquad-3.9.2 → devsquad-4.0.0}/README.md +17 -9
  3. {devsquad-3.9.2 → devsquad-4.0.0}/devsquad.egg-info/PKG-INFO +23 -10
  4. {devsquad-3.9.2 → devsquad-4.0.0}/devsquad.egg-info/SOURCES.txt +53 -0
  5. {devsquad-3.9.2 → devsquad-4.0.0}/devsquad.egg-info/requires.txt +6 -0
  6. {devsquad-3.9.2 → devsquad-4.0.0}/pyproject.toml +9 -1
  7. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api/routes/dispatch.py +41 -0
  8. devsquad-4.0.0/scripts/benchmark_ponytail_smart.py +435 -0
  9. devsquad-4.0.0/scripts/collaboration/_version.py +1 -0
  10. devsquad-4.0.0/scripts/collaboration/adversarial_verify.py +374 -0
  11. devsquad-4.0.0/scripts/collaboration/autonomous/__init__.py +39 -0
  12. devsquad-4.0.0/scripts/collaboration/autonomous/git_driver.py +167 -0
  13. devsquad-4.0.0/scripts/collaboration/autonomous/loop_controller.py +535 -0
  14. devsquad-4.0.0/scripts/collaboration/autonomous/notes_memory.py +105 -0
  15. devsquad-4.0.0/scripts/collaboration/autonomous/run_state.py +120 -0
  16. devsquad-4.0.0/scripts/collaboration/autonomous/sleep_guard.py +166 -0
  17. devsquad-4.0.0/scripts/collaboration/autonomous/smart_confirmation.py +179 -0
  18. devsquad-4.0.0/scripts/collaboration/ccr_store.py +253 -0
  19. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/consensus.py +26 -0
  20. devsquad-4.0.0/scripts/collaboration/content_crusher.py +327 -0
  21. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/context_compressor.py +62 -4
  22. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/coordinator.py +236 -5
  23. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_component_factory.py +102 -1
  24. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_steps.py +2 -0
  25. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_steps_base.py +1 -0
  26. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_steps_quality_mixin.py +42 -2
  27. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatcher.py +292 -1
  28. devsquad-4.0.0/scripts/collaboration/learned_rule_store.py +201 -0
  29. devsquad-4.0.0/scripts/collaboration/loop_engineering/__init__.py +52 -0
  30. devsquad-4.0.0/scripts/collaboration/loop_engineering/discovery_probe.py +51 -0
  31. devsquad-4.0.0/scripts/collaboration/loop_engineering/handoff_adapter.py +47 -0
  32. devsquad-4.0.0/scripts/collaboration/loop_engineering/independent_evaluator.py +57 -0
  33. devsquad-4.0.0/scripts/collaboration/loop_engineering/kernel.py +211 -0
  34. devsquad-4.0.0/scripts/collaboration/loop_engineering/loop_scheduler.py +62 -0
  35. devsquad-4.0.0/scripts/collaboration/loop_engineering/models.py +123 -0
  36. devsquad-4.0.0/scripts/collaboration/loop_engineering/protocols.py +74 -0
  37. devsquad-4.0.0/scripts/collaboration/loop_engineering/unified_memory.py +59 -0
  38. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/models.py +3 -0
  39. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/models_base.py +195 -0
  40. devsquad-4.0.0/scripts/collaboration/plugins/__init__.py +23 -0
  41. devsquad-4.0.0/scripts/collaboration/plugins/hot_loader.py +509 -0
  42. devsquad-4.0.0/scripts/collaboration/ponytail_rule_injector.py +108 -0
  43. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/prompt_assembler.py +29 -0
  44. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/prompt_assembler_base.py +17 -0
  45. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/prompt_assembler_formatting_mixin.py +35 -3
  46. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/retrospective.py +79 -0
  47. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/scratchpad.py +65 -0
  48. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/dashboard/app.py +4 -0
  49. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/dashboard/components.py +2 -0
  50. devsquad-4.0.0/scripts/dashboard/dag_views.py +386 -0
  51. devsquad-4.0.0/scripts/qa/__init__.py +25 -0
  52. devsquad-4.0.0/scripts/qa/models.py +71 -0
  53. devsquad-4.0.0/scripts/qa/uiux_analyzer.py +530 -0
  54. devsquad-4.0.0/scripts/qa/visual_regression.py +178 -0
  55. devsquad-4.0.0/tests/test_adversarial_verify.py +416 -0
  56. devsquad-4.0.0/tests/test_api_budget_status_endpoint.py +85 -0
  57. devsquad-4.0.0/tests/test_autonomous.py +1459 -0
  58. devsquad-4.0.0/tests/test_benchmark_ponytail_smart.py +164 -0
  59. devsquad-4.0.0/tests/test_ccr_marker_integration.py +203 -0
  60. devsquad-4.0.0/tests/test_ccr_store.py +281 -0
  61. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_dispatcher_test.py +2 -1
  62. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_prompt_optimization_test.py +3 -1
  63. devsquad-4.0.0/tests/test_content_crusher.py +398 -0
  64. devsquad-4.0.0/tests/test_coordinator_budget_ccr_integration.py +328 -0
  65. devsquad-4.0.0/tests/test_coordinator_smart_compression.py +331 -0
  66. devsquad-4.0.0/tests/test_dag_views.py +310 -0
  67. devsquad-4.0.0/tests/test_dashboard_ui_e2e.py +367 -0
  68. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_docker_deployment.py +1 -1
  69. devsquad-4.0.0/tests/test_learned_rule_phase4.py +280 -0
  70. devsquad-4.0.0/tests/test_loop_engineering.py +346 -0
  71. devsquad-4.0.0/tests/test_phase4_ghost_feature_defense.py +470 -0
  72. devsquad-4.0.0/tests/test_plugins_hot_loader.py +660 -0
  73. devsquad-4.0.0/tests/test_ponytail_rule_injector.py +267 -0
  74. devsquad-4.0.0/tests/test_qa_integration.py +111 -0
  75. devsquad-4.0.0/tests/test_qa_uiux_visual_regression.py +574 -0
  76. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_rate_limit.py +1 -1
  77. devsquad-4.0.0/tests/test_skill_registry_coverage.py +426 -0
  78. devsquad-4.0.0/tests/test_sleep_guard.py +224 -0
  79. devsquad-4.0.0/tests/test_token_budget_compressed_scratchpad.py +323 -0
  80. devsquad-4.0.0/tests/test_usage_tracker_coverage.py +453 -0
  81. devsquad-4.0.0/tests/test_v4_integration.py +177 -0
  82. devsquad-4.0.0/tests/test_workflow_persistence_coverage.py +327 -0
  83. devsquad-3.9.2/scripts/collaboration/_version.py +0 -1
  84. {devsquad-3.9.2 → devsquad-4.0.0}/LICENSE +0 -0
  85. {devsquad-3.9.2 → devsquad-4.0.0}/devsquad.egg-info/dependency_links.txt +0 -0
  86. {devsquad-3.9.2 → devsquad-4.0.0}/devsquad.egg-info/entry_points.txt +0 -0
  87. {devsquad-3.9.2 → devsquad-4.0.0}/devsquad.egg-info/top_level.txt +0 -0
  88. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/__init__.py +0 -0
  89. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api/__init__.py +0 -0
  90. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api/models.py +0 -0
  91. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api/rate_limit.py +0 -0
  92. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api/routes/__init__.py +0 -0
  93. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api/routes/lifecycle.py +0 -0
  94. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api/routes/metrics.py +0 -0
  95. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api/routes/metrics_gates.py +0 -0
  96. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api/security.py +0 -0
  97. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/api_server.py +0 -0
  98. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/auth.py +0 -0
  99. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/benchmark_async_dispatch.py +0 -0
  100. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/benchmark_real_llm.py +0 -0
  101. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/check_version_consistency.py +0 -0
  102. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/cli/__init__.py +0 -0
  103. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/cli/cli_visual.py +0 -0
  104. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/cli.py +0 -0
  105. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/cli_dispatch.py +0 -0
  106. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/cli_lifecycle.py +0 -0
  107. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/cli_utils.py +0 -0
  108. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/__init__.py +0 -0
  109. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/adaptive_role_selector.py +0 -0
  110. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/agent_briefing.py +0 -0
  111. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/ai_semantic_matcher.py +0 -0
  112. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/anchor_checker.py +0 -0
  113. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/anti_rationalization.py +0 -0
  114. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/async_adapter.py +0 -0
  115. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/async_coordinator.py +0 -0
  116. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/async_llm_backend.py +0 -0
  117. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/audit_logger.py +0 -0
  118. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/batch_scheduler.py +0 -0
  119. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/cache_interface.py +0 -0
  120. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/checkpoint_manager.py +0 -0
  121. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/ci_feedback_adapter.py +0 -0
  122. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/code_graph_query.py +0 -0
  123. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/code_graph_storage.py +0 -0
  124. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/code_knowledge_graph.py +0 -0
  125. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/code_map_generator.py +0 -0
  126. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/concern_pack_loader.py +0 -0
  127. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/confidence_score.py +0 -0
  128. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/consensus_gate.py +0 -0
  129. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/constants.py +0 -0
  130. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/content_cache.py +0 -0
  131. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_audit.py +0 -0
  132. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_hooks.py +0 -0
  133. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_lifecycle.py +0 -0
  134. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_models.py +0 -0
  135. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_performance.py +0 -0
  136. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_pre_steps.py +0 -0
  137. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_rbac.py +0 -0
  138. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_result_assembler.py +0 -0
  139. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_services.py +0 -0
  140. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_steps_consensus_mixin.py +0 -0
  141. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_steps_feedback_mixin.py +0 -0
  142. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatch_steps_services_mixin.py +0 -0
  143. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatcher_async_mixin.py +0 -0
  144. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatcher_audit_mixin.py +0 -0
  145. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatcher_base.py +0 -0
  146. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatcher_error_mixin.py +0 -0
  147. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatcher_factory.py +0 -0
  148. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatcher_lifecycle_mixin.py +0 -0
  149. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatcher_status_mixin.py +0 -0
  150. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dispatcher_utils_mixin.py +0 -0
  151. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/dual_layer_context.py +0 -0
  152. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/enhanced_worker.py +0 -0
  153. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/enterprise_feature.py +0 -0
  154. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/event_bus.py +0 -0
  155. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/execution_guard.py +0 -0
  156. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/feature_usage_tracker.py +0 -0
  157. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/feedback_control_loop.py +0 -0
  158. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/five_axis_consensus.py +0 -0
  159. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/input_validator.py +0 -0
  160. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/intent_workflow_mapper.py +0 -0
  161. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/judge_agent.py +0 -0
  162. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/language_parsers.py +0 -0
  163. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/lifecycle_gate.py +0 -0
  164. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/lifecycle_protocol.py +0 -0
  165. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/lifecycle_shortcut_adapter.py +0 -0
  166. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/lifecycle_shortcut_helpers.py +0 -0
  167. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/lifecycle_templates.py +0 -0
  168. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/llm_backend.py +0 -0
  169. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/llm_cache.py +0 -0
  170. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/llm_cache_async.py +0 -0
  171. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/llm_cache_base.py +0 -0
  172. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/llm_retry.py +0 -0
  173. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/llm_retry_async.py +0 -0
  174. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/llm_retry_base.py +0 -0
  175. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/mce_adapter.py +0 -0
  176. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/memory_bridge.py +0 -0
  177. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/memory_claw_source.py +0 -0
  178. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/memory_forgetting.py +0 -0
  179. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/memory_index.py +0 -0
  180. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/memory_query.py +0 -0
  181. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/memory_serializer.py +0 -0
  182. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/memory_types.py +0 -0
  183. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/micro_task_planner.py +0 -0
  184. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/models_dispatch.py +0 -0
  185. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/models_lifecycle.py +0 -0
  186. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/multi_host_adapter.py +0 -0
  187. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/multi_level_cache.py +0 -0
  188. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/multi_tenant.py +0 -0
  189. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/null_providers.py +0 -0
  190. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/operation_classifier.py +0 -0
  191. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/output_slicer.py +0 -0
  192. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/performance_fingerprint.py +0 -0
  193. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/performance_monitor.py +0 -0
  194. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/permission_guard.py +0 -0
  195. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/prometheus_metrics.py +0 -0
  196. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/prompt_assembler_substitution_mixin.py +0 -0
  197. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/prompt_assembler_template_mixin.py +0 -0
  198. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/prompt_assembler_validation_mixin.py +0 -0
  199. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/prompt_dials.py +0 -0
  200. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/protocols.py +0 -0
  201. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/rbac_engine.py +0 -0
  202. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/redesign_auditor.py +0 -0
  203. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/redesign_checkers.py +0 -0
  204. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/redis_cache.py +0 -0
  205. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/report_formatter.py +0 -0
  206. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/review_checkers.py +0 -0
  207. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/role_matcher.py +0 -0
  208. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/role_skill_loader.py +0 -0
  209. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/rule_collector.py +0 -0
  210. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/secret_patterns.py +0 -0
  211. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/severity_router.py +0 -0
  212. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/similar_task_recommender.py +0 -0
  213. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/skill_extractor.py +0 -0
  214. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/skill_registry.py +0 -0
  215. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/skill_storage.py +0 -0
  216. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/skillifier.py +0 -0
  217. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/standardized_role_template.py +0 -0
  218. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/task_completion_checker.py +0 -0
  219. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/tech_debt_manager.py +0 -0
  220. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/test_quality_guard.py +0 -0
  221. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/two_stage_review_gate.py +0 -0
  222. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/ue_test_accessibility_mixin.py +0 -0
  223. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/ue_test_framework.py +0 -0
  224. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/ue_test_framework_base.py +0 -0
  225. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/ue_test_heuristic_mixin.py +0 -0
  226. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/ue_test_journey_mixin.py +0 -0
  227. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/ue_test_persona_mixin.py +0 -0
  228. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/unified_gate_engine.py +0 -0
  229. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/usage_tracker.py +0 -0
  230. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/user_friendly_error.py +0 -0
  231. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/verification_gate.py +0 -0
  232. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/warmup_manager.py +0 -0
  233. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/worker.py +0 -0
  234. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/workflow_engine.py +0 -0
  235. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/workflow_engine_base.py +0 -0
  236. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/workflow_engine_lifecycle_mixin.py +0 -0
  237. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/workflow_engine_persistence_mixin.py +0 -0
  238. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/workflow_engine_state_mixin.py +0 -0
  239. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/workflow_engine_transition_mixin.py +0 -0
  240. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/collaboration/yagni_checker.py +0 -0
  241. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/dashboard/__init__.py +0 -0
  242. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/dashboard/auth_views.py +0 -0
  243. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/dashboard/dispatch_views.py +0 -0
  244. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/dashboard/lifecycle_views.py +0 -0
  245. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/dashboard/metrics_views.py +0 -0
  246. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/dashboard/state.py +0 -0
  247. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/dashboard.py +0 -0
  248. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/generate_benchmark_report.py +0 -0
  249. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/history_manager.py +0 -0
  250. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/mcp_server.py +0 -0
  251. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/utils/__init__.py +0 -0
  252. {devsquad-3.9.2 → devsquad-4.0.0}/scripts/utils/_find_missing_hints.py +0 -0
  253. {devsquad-3.9.2 → devsquad-4.0.0}/setup.cfg +0 -0
  254. {devsquad-3.9.2 → devsquad-4.0.0}/skills/__init__.py +0 -0
  255. {devsquad-3.9.2 → devsquad-4.0.0}/skills/dispatch/handler.py +0 -0
  256. {devsquad-3.9.2 → devsquad-4.0.0}/skills/intent/handler.py +0 -0
  257. {devsquad-3.9.2 → devsquad-4.0.0}/skills/registry.py +0 -0
  258. {devsquad-3.9.2 → devsquad-4.0.0}/skills/retrospective/__init__.py +0 -0
  259. {devsquad-3.9.2 → devsquad-4.0.0}/skills/retrospective/handler.py +0 -0
  260. {devsquad-3.9.2 → devsquad-4.0.0}/skills/review/handler.py +0 -0
  261. {devsquad-3.9.2 → devsquad-4.0.0}/skills/security/handler.py +0 -0
  262. {devsquad-3.9.2 → devsquad-4.0.0}/skills/test/__init__.py +0 -0
  263. {devsquad-3.9.2 → devsquad-4.0.0}/skills/test/handler.py +0 -0
  264. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_agent_briefing.py +0 -0
  265. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_anchor_retrospective.py +0 -0
  266. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_anti_rationalization.py +0 -0
  267. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_api_security.py +0 -0
  268. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_api_server_v362.py +0 -0
  269. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_async_modules.py +0 -0
  270. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_audit_logger.py +0 -0
  271. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_auth_phase5.py +0 -0
  272. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_ci_feedback_adapter.py +0 -0
  273. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_cli_deep_v362.py +0 -0
  274. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_cli_lifecycle.py +0 -0
  275. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_cli_phase5.py +0 -0
  276. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_code_knowledge_graph.py +0 -0
  277. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_claw_integration_test.py +0 -0
  278. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_context_compressor_test.py +0 -0
  279. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_core_test.py +0 -0
  280. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_dispatcher_ux_test.py +0 -0
  281. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_e2e_test.py +0 -0
  282. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_enhanced_e2e_test.py +0 -0
  283. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_llm_cache_test.py +0 -0
  284. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_llm_retry_test.py +0 -0
  285. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_mce_adapter_test.py +0 -0
  286. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_memory_bridge_test.py +0 -0
  287. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_performance_monitor_test.py +0 -0
  288. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_permission_guard_test.py +0 -0
  289. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_role_mapping_test.py +0 -0
  290. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_skillifier_test.py +0 -0
  291. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_test_quality_guard.py +0 -0
  292. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_test_quality_guard_test.py +0 -0
  293. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_upstream_test.py +0 -0
  294. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_collaboration_warmup_manager_test.py +0 -0
  295. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_comprehensive_integration.py +0 -0
  296. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_confidence_score.py +0 -0
  297. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_config_injection.py +0 -0
  298. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_consensus_gate.py +0 -0
  299. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_content_cache.py +0 -0
  300. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_dashboard_split.py +0 -0
  301. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_data_backup.py +0 -0
  302. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_dependency_lock.py +0 -0
  303. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_dispatch_audit.py +0 -0
  304. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_dispatch_rbac.py +0 -0
  305. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_dispatcher_phase5_core.py +0 -0
  306. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_extended_integration.py +0 -0
  307. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_final_integration.py +0 -0
  308. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_five_axis_consensus.py +0 -0
  309. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_full_lifecycle_adapter.py +0 -0
  310. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_history_manager_v362.py +0 -0
  311. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_input_validator_phase5.py +0 -0
  312. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_intent_workflow_mapper.py +0 -0
  313. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_judge_agent.py +0 -0
  314. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_lifecycle_protocol.py +0 -0
  315. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_llm_auto_fallback.py +0 -0
  316. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_llm_cache_protocol.py +0 -0
  317. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_mcp_server_v362.py +0 -0
  318. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_memory_benchmarks.py +0 -0
  319. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_micro_task_planner.py +0 -0
  320. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_multi_host_adapter.py +0 -0
  321. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_multi_tenant.py +0 -0
  322. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_node_type_separation.py +0 -0
  323. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_null_providers.py +0 -0
  324. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_operation_classifier.py +0 -0
  325. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_output_slicer.py +0 -0
  326. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_performance_benchmarks.py +0 -0
  327. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_performance_fingerprint.py +0 -0
  328. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_performance_monitor_protocol.py +0 -0
  329. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_permission_guard_phase5.py +0 -0
  330. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_pipeline_step19_20.py +0 -0
  331. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_plan_c_unified_architecture.py +0 -0
  332. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_production_features.py +0 -0
  333. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_prompt_dials.py +0 -0
  334. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_protocols.py +0 -0
  335. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_quick_bonus.py +0 -0
  336. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_rbac_engine.py +0 -0
  337. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_rbac_fail_closed.py +0 -0
  338. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_redesign_auditor.py +0 -0
  339. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_retry_jitter_strategies.py +0 -0
  340. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_role_skill_loader.py +0 -0
  341. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_rule_injection_security.py +0 -0
  342. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_severity_router.py +0 -0
  343. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_skill_security.py +0 -0
  344. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_standardized_role_template.py +0 -0
  345. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_start_script.py +0 -0
  346. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_step_node_types.py +0 -0
  347. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_suggested_next_steps.py +0 -0
  348. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_tech_debt_manager.py +0 -0
  349. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_two_stage_review_gate.py +0 -0
  350. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_ue_test_framework.py +0 -0
  351. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_v38_integration.py +0 -0
  352. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_v39_e2e.py +0 -0
  353. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_v39_integration.py +0 -0
  354. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_v39_performance.py +0 -0
  355. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_verification_gate.py +0 -0
  356. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_version.py +0 -0
  357. {devsquad-3.9.2 → devsquad-4.0.0}/tests/test_yagni_checker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devsquad
3
- Version: 3.9.2
3
+ Version: 4.0.0
4
4
  Summary: Production-Ready Multi-Role AI Task Orchestrator
5
5
  Author-email: DevSquad Team <devsquad@example.com>
6
6
  License: MIT
@@ -48,6 +48,8 @@ Requires-Dist: streamlit>=1.28.0; extra == "visualization"
48
48
  Requires-Dist: jupyter>=1.0; extra == "visualization"
49
49
  Provides-Extra: alerts
50
50
  Requires-Dist: slack-sdk>=3.21.0; extra == "alerts"
51
+ Provides-Extra: qa
52
+ Requires-Dist: Pillow>=10.0.0; extra == "qa"
51
53
  Provides-Extra: dev
52
54
  Requires-Dist: pytest>=7.0; extra == "dev"
53
55
  Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
@@ -56,6 +58,7 @@ Requires-Dist: ruff>=0.4.0; extra == "dev"
56
58
  Requires-Dist: mypy>=1.0; extra == "dev"
57
59
  Requires-Dist: black>=23.0; extra == "dev"
58
60
  Requires-Dist: flake8>=6.0; extra == "dev"
61
+ Requires-Dist: httpx2>=2.5.0; extra == "dev"
59
62
  Provides-Extra: all
60
63
  Requires-Dist: openai>=1.0; extra == "all"
61
64
  Requires-Dist: anthropic>=0.18; extra == "all"
@@ -69,6 +72,7 @@ Requires-Dist: pydantic>=2.0; extra == "all"
69
72
  Requires-Dist: streamlit>=1.28.0; extra == "all"
70
73
  Requires-Dist: jupyter>=1.0; extra == "all"
71
74
  Requires-Dist: slack-sdk>=3.21.0; extra == "all"
75
+ Requires-Dist: Pillow>=10.0.0; extra == "all"
72
76
  Requires-Dist: pytest>=7.0; extra == "all"
73
77
  Requires-Dist: pytest-asyncio>=0.21; extra == "all"
74
78
  Requires-Dist: pytest-cov>=4.1; extra == "all"
@@ -76,6 +80,7 @@ Requires-Dist: ruff>=0.4.0; extra == "all"
76
80
  Requires-Dist: mypy>=1.0; extra == "all"
77
81
  Requires-Dist: black>=23.0; extra == "all"
78
82
  Requires-Dist: flake8>=6.0; extra == "all"
83
+ Requires-Dist: httpx2>=2.5.0; extra == "all"
79
84
  Dynamic: license-file
80
85
 
81
86
  # DevSquad — Multi-Role AI Task Orchestrator
@@ -83,14 +88,14 @@ Dynamic: license-file
83
88
  <p align="center">
84
89
  <strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
85
90
  <br>
86
- <em>One task → Multi-role AI collaboration → One conclusion | V3.9.2 Enterprise Ready</em>
91
+ <em>One task → Multi-role AI collaboration → One conclusion | V4.0.0 Enterprise Ready</em>
87
92
  </p>
88
93
 
89
94
  <p align="center">
90
95
  <img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
91
96
  <img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
92
- <img alt="Tests" src="https://img.shields.io/badge/Tests-2857%2B%20passing-brightgreen" />
93
- <img alt="Version" src="https://img.shields.io/badge/V3.9.2-success" />
97
+ <img alt="Tests" src="https://img.shields.io/badge/Tests-3400%2B%20passing-brightgreen" />
98
+ <img alt="Version" src="https://img.shields.io/badge/V4.0.0-success" />
94
99
  <img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
95
100
  <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" />
96
101
  <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" />
@@ -151,9 +156,17 @@ devsquad run "设计一个安全的用户认证系统" --roles architect,securit
151
156
  <details>
152
157
  <summary>🔍 点击展开:完整功能介绍与架构详解</summary>
153
158
 
154
- ## 🚀 V3.9.2: Auto LLM Fallback + Dashboard Split + SQLite Audit Persistence + P3 Cleanup
159
+ ## 🚀 V4.0.0: Loop Engineering + UI/UX 巡检 + Adversarial 验证 + DAG 可视化 + Autonomous + 插件热加载
155
160
 
156
- **DevSquad V3.9.2** introduces automatic LLM backend fallback (auto backend tries real LLM first, falls back to mock), splits dashboard.py from 1087 lines into an 8-module package, makes SQLite-backed dispatch audit persistence default, and performs P3 cleanup (magic number extraction + narrowed exception scopes), with 2857+ tests passing.
161
+ **DevSquad V4.0.0** 借鉴上游 TraeMultiAgentSkill v2.7 理念,新增 6 个特性(P1-P3),全面接入 dispatch pipeline,无幽灵功能:
162
+ - **P1-1 Loop Engineering**: Discovery → Handoff → Verification → Persistence → Scheduling 五步闭环
163
+ - **P1-2 UI/UX 巡检**: 4 维度审计(a11y/interaction/layout/ux)+ PIL 像素 diff 视觉回归
164
+ - **P2-1 Adversarial 验证**: 红队攻击 + 蓝队防御 + 裁判仲裁三阶段对抗验证
165
+ - **P2-2 DAG 可视化**: Mermaid / JSON / DOT 三种格式依赖图可视化
166
+ - **P3-1 Autonomous**: plan → dev → verify → fix 4 阶段自主迭代,复用 LoopKernel,不绕过共识门
167
+ - **P3-2 插件热加载**: 三种加载路径 + 路径穿越三层防护 + reload 回滚 + 审计日志
168
+
169
+ 3400+ tests passing。
157
170
 
158
171
  ---
159
172
 
@@ -223,7 +236,7 @@ DEVSQUAD_API_PORT=9000 ./scripts/start.sh
223
236
  ./scripts/start.sh --help
224
237
  ```
225
238
 
226
- `start.sh` is the unified entry point introduced in V3.9.2 (P0-2). It validates the environment, initializes the database, builds the frontend, and starts the service in one command. Use `requirements.lock` alongside it for reproducible builds (`pip install -r requirements.lock`).
239
+ `start.sh` is the unified entry point introduced in V3.9.2 (P0-2). It validates the environment, initializes the database, builds the frontend, and starts the service in one command. Use `requirements.lock` alongside it for reproducible builds (`pip install -r requirements.lock`). V4.0.0 adds Loop Engineering, UI/UX 巡检, Adversarial 验证, DAG 可视化, Autonomous, and 插件热加载.
227
240
 
228
241
  ---
229
242
 
@@ -537,7 +550,7 @@ devsquad dispatch -t "Design user authentication system"
537
550
  ```bash
538
551
  # Check version
539
552
  devsquad --version
540
- # Expected: devsquad 3.9.2
553
+ # Expected: devsquad 4.0.0
541
554
 
542
555
  # Run tests
543
556
  pytest tests/ -v --tb=short
@@ -592,7 +605,7 @@ export DEVSQUAD_OPENAI_API_KEY=sk-...
592
605
 
593
606
  ### Quick Smoke Test (< 30 seconds)
594
607
  ```bash
595
- python3 scripts/cli.py --version # Expected: DevSquad 3.9.2
608
+ python3 scripts/cli.py --version # Expected: DevSquad 4.0.0
596
609
  python3 scripts/cli.py status # Expected: System ready
597
610
  python3 scripts/cli.py roles # Expected: 7 core roles listed
598
611
  ```
@@ -680,6 +693,6 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
680
693
 
681
694
  ---
682
695
 
683
- *Last updated: 2026-06-26 | Version: V3.9.2*
696
+ *Last updated: 2026-07-07 | Version: V4.0.0*
684
697
 
685
698
  </details>
@@ -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 | V3.9.2 Enterprise Ready</em>
6
+ <em>One task → Multi-role AI collaboration → One conclusion | V4.0.0 Enterprise Ready</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
- <img alt="Tests" src="https://img.shields.io/badge/Tests-2857%2B%20passing-brightgreen" />
13
- <img alt="Version" src="https://img.shields.io/badge/V3.9.2-success" />
12
+ <img alt="Tests" src="https://img.shields.io/badge/Tests-3400%2B%20passing-brightgreen" />
13
+ <img alt="Version" src="https://img.shields.io/badge/V4.0.0-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" />
@@ -71,9 +71,17 @@ devsquad run "设计一个安全的用户认证系统" --roles architect,securit
71
71
  <details>
72
72
  <summary>🔍 点击展开:完整功能介绍与架构详解</summary>
73
73
 
74
- ## 🚀 V3.9.2: Auto LLM Fallback + Dashboard Split + SQLite Audit Persistence + P3 Cleanup
74
+ ## 🚀 V4.0.0: Loop Engineering + UI/UX 巡检 + Adversarial 验证 + DAG 可视化 + Autonomous + 插件热加载
75
75
 
76
- **DevSquad V3.9.2** introduces automatic LLM backend fallback (auto backend tries real LLM first, falls back to mock), splits dashboard.py from 1087 lines into an 8-module package, makes SQLite-backed dispatch audit persistence default, and performs P3 cleanup (magic number extraction + narrowed exception scopes), with 2857+ tests passing.
76
+ **DevSquad V4.0.0** 借鉴上游 TraeMultiAgentSkill v2.7 理念,新增 6 个特性(P1-P3),全面接入 dispatch pipeline,无幽灵功能:
77
+ - **P1-1 Loop Engineering**: Discovery → Handoff → Verification → Persistence → Scheduling 五步闭环
78
+ - **P1-2 UI/UX 巡检**: 4 维度审计(a11y/interaction/layout/ux)+ PIL 像素 diff 视觉回归
79
+ - **P2-1 Adversarial 验证**: 红队攻击 + 蓝队防御 + 裁判仲裁三阶段对抗验证
80
+ - **P2-2 DAG 可视化**: Mermaid / JSON / DOT 三种格式依赖图可视化
81
+ - **P3-1 Autonomous**: plan → dev → verify → fix 4 阶段自主迭代,复用 LoopKernel,不绕过共识门
82
+ - **P3-2 插件热加载**: 三种加载路径 + 路径穿越三层防护 + reload 回滚 + 审计日志
83
+
84
+ 3400+ tests passing。
77
85
 
78
86
  ---
79
87
 
@@ -143,7 +151,7 @@ DEVSQUAD_API_PORT=9000 ./scripts/start.sh
143
151
  ./scripts/start.sh --help
144
152
  ```
145
153
 
146
- `start.sh` is the unified entry point introduced in V3.9.2 (P0-2). It validates the environment, initializes the database, builds the frontend, and starts the service in one command. Use `requirements.lock` alongside it for reproducible builds (`pip install -r requirements.lock`).
154
+ `start.sh` is the unified entry point introduced in V3.9.2 (P0-2). It validates the environment, initializes the database, builds the frontend, and starts the service in one command. Use `requirements.lock` alongside it for reproducible builds (`pip install -r requirements.lock`). V4.0.0 adds Loop Engineering, UI/UX 巡检, Adversarial 验证, DAG 可视化, Autonomous, and 插件热加载.
147
155
 
148
156
  ---
149
157
 
@@ -457,7 +465,7 @@ devsquad dispatch -t "Design user authentication system"
457
465
  ```bash
458
466
  # Check version
459
467
  devsquad --version
460
- # Expected: devsquad 3.9.2
468
+ # Expected: devsquad 4.0.0
461
469
 
462
470
  # Run tests
463
471
  pytest tests/ -v --tb=short
@@ -512,7 +520,7 @@ export DEVSQUAD_OPENAI_API_KEY=sk-...
512
520
 
513
521
  ### Quick Smoke Test (< 30 seconds)
514
522
  ```bash
515
- python3 scripts/cli.py --version # Expected: DevSquad 3.9.2
523
+ python3 scripts/cli.py --version # Expected: DevSquad 4.0.0
516
524
  python3 scripts/cli.py status # Expected: System ready
517
525
  python3 scripts/cli.py roles # Expected: 7 core roles listed
518
526
  ```
@@ -600,6 +608,6 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
600
608
 
601
609
  ---
602
610
 
603
- *Last updated: 2026-06-26 | Version: V3.9.2*
611
+ *Last updated: 2026-07-07 | Version: V4.0.0*
604
612
 
605
613
  </details>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devsquad
3
- Version: 3.9.2
3
+ Version: 4.0.0
4
4
  Summary: Production-Ready Multi-Role AI Task Orchestrator
5
5
  Author-email: DevSquad Team <devsquad@example.com>
6
6
  License: MIT
@@ -48,6 +48,8 @@ Requires-Dist: streamlit>=1.28.0; extra == "visualization"
48
48
  Requires-Dist: jupyter>=1.0; extra == "visualization"
49
49
  Provides-Extra: alerts
50
50
  Requires-Dist: slack-sdk>=3.21.0; extra == "alerts"
51
+ Provides-Extra: qa
52
+ Requires-Dist: Pillow>=10.0.0; extra == "qa"
51
53
  Provides-Extra: dev
52
54
  Requires-Dist: pytest>=7.0; extra == "dev"
53
55
  Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
@@ -56,6 +58,7 @@ Requires-Dist: ruff>=0.4.0; extra == "dev"
56
58
  Requires-Dist: mypy>=1.0; extra == "dev"
57
59
  Requires-Dist: black>=23.0; extra == "dev"
58
60
  Requires-Dist: flake8>=6.0; extra == "dev"
61
+ Requires-Dist: httpx2>=2.5.0; extra == "dev"
59
62
  Provides-Extra: all
60
63
  Requires-Dist: openai>=1.0; extra == "all"
61
64
  Requires-Dist: anthropic>=0.18; extra == "all"
@@ -69,6 +72,7 @@ Requires-Dist: pydantic>=2.0; extra == "all"
69
72
  Requires-Dist: streamlit>=1.28.0; extra == "all"
70
73
  Requires-Dist: jupyter>=1.0; extra == "all"
71
74
  Requires-Dist: slack-sdk>=3.21.0; extra == "all"
75
+ Requires-Dist: Pillow>=10.0.0; extra == "all"
72
76
  Requires-Dist: pytest>=7.0; extra == "all"
73
77
  Requires-Dist: pytest-asyncio>=0.21; extra == "all"
74
78
  Requires-Dist: pytest-cov>=4.1; extra == "all"
@@ -76,6 +80,7 @@ Requires-Dist: ruff>=0.4.0; extra == "all"
76
80
  Requires-Dist: mypy>=1.0; extra == "all"
77
81
  Requires-Dist: black>=23.0; extra == "all"
78
82
  Requires-Dist: flake8>=6.0; extra == "all"
83
+ Requires-Dist: httpx2>=2.5.0; extra == "all"
79
84
  Dynamic: license-file
80
85
 
81
86
  # DevSquad — Multi-Role AI Task Orchestrator
@@ -83,14 +88,14 @@ Dynamic: license-file
83
88
  <p align="center">
84
89
  <strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
85
90
  <br>
86
- <em>One task → Multi-role AI collaboration → One conclusion | V3.9.2 Enterprise Ready</em>
91
+ <em>One task → Multi-role AI collaboration → One conclusion | V4.0.0 Enterprise Ready</em>
87
92
  </p>
88
93
 
89
94
  <p align="center">
90
95
  <img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
91
96
  <img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
92
- <img alt="Tests" src="https://img.shields.io/badge/Tests-2857%2B%20passing-brightgreen" />
93
- <img alt="Version" src="https://img.shields.io/badge/V3.9.2-success" />
97
+ <img alt="Tests" src="https://img.shields.io/badge/Tests-3400%2B%20passing-brightgreen" />
98
+ <img alt="Version" src="https://img.shields.io/badge/V4.0.0-success" />
94
99
  <img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
95
100
  <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" />
96
101
  <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" />
@@ -151,9 +156,17 @@ devsquad run "设计一个安全的用户认证系统" --roles architect,securit
151
156
  <details>
152
157
  <summary>🔍 点击展开:完整功能介绍与架构详解</summary>
153
158
 
154
- ## 🚀 V3.9.2: Auto LLM Fallback + Dashboard Split + SQLite Audit Persistence + P3 Cleanup
159
+ ## 🚀 V4.0.0: Loop Engineering + UI/UX 巡检 + Adversarial 验证 + DAG 可视化 + Autonomous + 插件热加载
155
160
 
156
- **DevSquad V3.9.2** introduces automatic LLM backend fallback (auto backend tries real LLM first, falls back to mock), splits dashboard.py from 1087 lines into an 8-module package, makes SQLite-backed dispatch audit persistence default, and performs P3 cleanup (magic number extraction + narrowed exception scopes), with 2857+ tests passing.
161
+ **DevSquad V4.0.0** 借鉴上游 TraeMultiAgentSkill v2.7 理念,新增 6 个特性(P1-P3),全面接入 dispatch pipeline,无幽灵功能:
162
+ - **P1-1 Loop Engineering**: Discovery → Handoff → Verification → Persistence → Scheduling 五步闭环
163
+ - **P1-2 UI/UX 巡检**: 4 维度审计(a11y/interaction/layout/ux)+ PIL 像素 diff 视觉回归
164
+ - **P2-1 Adversarial 验证**: 红队攻击 + 蓝队防御 + 裁判仲裁三阶段对抗验证
165
+ - **P2-2 DAG 可视化**: Mermaid / JSON / DOT 三种格式依赖图可视化
166
+ - **P3-1 Autonomous**: plan → dev → verify → fix 4 阶段自主迭代,复用 LoopKernel,不绕过共识门
167
+ - **P3-2 插件热加载**: 三种加载路径 + 路径穿越三层防护 + reload 回滚 + 审计日志
168
+
169
+ 3400+ tests passing。
157
170
 
158
171
  ---
159
172
 
@@ -223,7 +236,7 @@ DEVSQUAD_API_PORT=9000 ./scripts/start.sh
223
236
  ./scripts/start.sh --help
224
237
  ```
225
238
 
226
- `start.sh` is the unified entry point introduced in V3.9.2 (P0-2). It validates the environment, initializes the database, builds the frontend, and starts the service in one command. Use `requirements.lock` alongside it for reproducible builds (`pip install -r requirements.lock`).
239
+ `start.sh` is the unified entry point introduced in V3.9.2 (P0-2). It validates the environment, initializes the database, builds the frontend, and starts the service in one command. Use `requirements.lock` alongside it for reproducible builds (`pip install -r requirements.lock`). V4.0.0 adds Loop Engineering, UI/UX 巡检, Adversarial 验证, DAG 可视化, Autonomous, and 插件热加载.
227
240
 
228
241
  ---
229
242
 
@@ -537,7 +550,7 @@ devsquad dispatch -t "Design user authentication system"
537
550
  ```bash
538
551
  # Check version
539
552
  devsquad --version
540
- # Expected: devsquad 3.9.2
553
+ # Expected: devsquad 4.0.0
541
554
 
542
555
  # Run tests
543
556
  pytest tests/ -v --tb=short
@@ -592,7 +605,7 @@ export DEVSQUAD_OPENAI_API_KEY=sk-...
592
605
 
593
606
  ### Quick Smoke Test (< 30 seconds)
594
607
  ```bash
595
- python3 scripts/cli.py --version # Expected: DevSquad 3.9.2
608
+ python3 scripts/cli.py --version # Expected: DevSquad 4.0.0
596
609
  python3 scripts/cli.py status # Expected: System ready
597
610
  python3 scripts/cli.py roles # Expected: 7 core roles listed
598
611
  ```
@@ -680,6 +693,6 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
680
693
 
681
694
  ---
682
695
 
683
- *Last updated: 2026-06-26 | Version: V3.9.2*
696
+ *Last updated: 2026-07-07 | Version: V4.0.0*
684
697
 
685
698
  </details>
@@ -11,6 +11,7 @@ scripts/__init__.py
11
11
  scripts/api_server.py
12
12
  scripts/auth.py
13
13
  scripts/benchmark_async_dispatch.py
14
+ scripts/benchmark_ponytail_smart.py
14
15
  scripts/benchmark_real_llm.py
15
16
  scripts/check_version_consistency.py
16
17
  scripts/cli.py
@@ -35,6 +36,7 @@ scripts/cli/cli_visual.py
35
36
  scripts/collaboration/__init__.py
36
37
  scripts/collaboration/_version.py
37
38
  scripts/collaboration/adaptive_role_selector.py
39
+ scripts/collaboration/adversarial_verify.py
38
40
  scripts/collaboration/agent_briefing.py
39
41
  scripts/collaboration/ai_semantic_matcher.py
40
42
  scripts/collaboration/anchor_checker.py
@@ -45,6 +47,7 @@ scripts/collaboration/async_llm_backend.py
45
47
  scripts/collaboration/audit_logger.py
46
48
  scripts/collaboration/batch_scheduler.py
47
49
  scripts/collaboration/cache_interface.py
50
+ scripts/collaboration/ccr_store.py
48
51
  scripts/collaboration/checkpoint_manager.py
49
52
  scripts/collaboration/ci_feedback_adapter.py
50
53
  scripts/collaboration/code_graph_query.py
@@ -57,6 +60,7 @@ scripts/collaboration/consensus.py
57
60
  scripts/collaboration/consensus_gate.py
58
61
  scripts/collaboration/constants.py
59
62
  scripts/collaboration/content_cache.py
63
+ scripts/collaboration/content_crusher.py
60
64
  scripts/collaboration/context_compressor.py
61
65
  scripts/collaboration/coordinator.py
62
66
  scripts/collaboration/dispatch_audit.py
@@ -96,6 +100,7 @@ scripts/collaboration/input_validator.py
96
100
  scripts/collaboration/intent_workflow_mapper.py
97
101
  scripts/collaboration/judge_agent.py
98
102
  scripts/collaboration/language_parsers.py
103
+ scripts/collaboration/learned_rule_store.py
99
104
  scripts/collaboration/lifecycle_gate.py
100
105
  scripts/collaboration/lifecycle_protocol.py
101
106
  scripts/collaboration/lifecycle_shortcut_adapter.py
@@ -130,6 +135,7 @@ scripts/collaboration/output_slicer.py
130
135
  scripts/collaboration/performance_fingerprint.py
131
136
  scripts/collaboration/performance_monitor.py
132
137
  scripts/collaboration/permission_guard.py
138
+ scripts/collaboration/ponytail_rule_injector.py
133
139
  scripts/collaboration/prometheus_metrics.py
134
140
  scripts/collaboration/prompt_assembler.py
135
141
  scripts/collaboration/prompt_assembler_base.py
@@ -181,14 +187,37 @@ scripts/collaboration/workflow_engine_persistence_mixin.py
181
187
  scripts/collaboration/workflow_engine_state_mixin.py
182
188
  scripts/collaboration/workflow_engine_transition_mixin.py
183
189
  scripts/collaboration/yagni_checker.py
190
+ scripts/collaboration/autonomous/__init__.py
191
+ scripts/collaboration/autonomous/git_driver.py
192
+ scripts/collaboration/autonomous/loop_controller.py
193
+ scripts/collaboration/autonomous/notes_memory.py
194
+ scripts/collaboration/autonomous/run_state.py
195
+ scripts/collaboration/autonomous/sleep_guard.py
196
+ scripts/collaboration/autonomous/smart_confirmation.py
197
+ scripts/collaboration/loop_engineering/__init__.py
198
+ scripts/collaboration/loop_engineering/discovery_probe.py
199
+ scripts/collaboration/loop_engineering/handoff_adapter.py
200
+ scripts/collaboration/loop_engineering/independent_evaluator.py
201
+ scripts/collaboration/loop_engineering/kernel.py
202
+ scripts/collaboration/loop_engineering/loop_scheduler.py
203
+ scripts/collaboration/loop_engineering/models.py
204
+ scripts/collaboration/loop_engineering/protocols.py
205
+ scripts/collaboration/loop_engineering/unified_memory.py
206
+ scripts/collaboration/plugins/__init__.py
207
+ scripts/collaboration/plugins/hot_loader.py
184
208
  scripts/dashboard/__init__.py
185
209
  scripts/dashboard/app.py
186
210
  scripts/dashboard/auth_views.py
187
211
  scripts/dashboard/components.py
212
+ scripts/dashboard/dag_views.py
188
213
  scripts/dashboard/dispatch_views.py
189
214
  scripts/dashboard/lifecycle_views.py
190
215
  scripts/dashboard/metrics_views.py
191
216
  scripts/dashboard/state.py
217
+ scripts/qa/__init__.py
218
+ scripts/qa/models.py
219
+ scripts/qa/uiux_analyzer.py
220
+ scripts/qa/visual_regression.py
192
221
  scripts/utils/__init__.py
193
222
  scripts/utils/_find_missing_hints.py
194
223
  skills/__init__.py
@@ -201,14 +230,20 @@ skills/review/handler.py
201
230
  skills/security/handler.py
202
231
  skills/test/__init__.py
203
232
  skills/test/handler.py
233
+ tests/test_adversarial_verify.py
204
234
  tests/test_agent_briefing.py
205
235
  tests/test_anchor_retrospective.py
206
236
  tests/test_anti_rationalization.py
237
+ tests/test_api_budget_status_endpoint.py
207
238
  tests/test_api_security.py
208
239
  tests/test_api_server_v362.py
209
240
  tests/test_async_modules.py
210
241
  tests/test_audit_logger.py
211
242
  tests/test_auth_phase5.py
243
+ tests/test_autonomous.py
244
+ tests/test_benchmark_ponytail_smart.py
245
+ tests/test_ccr_marker_integration.py
246
+ tests/test_ccr_store.py
212
247
  tests/test_ci_feedback_adapter.py
213
248
  tests/test_cli_deep_v362.py
214
249
  tests/test_cli_lifecycle.py
@@ -239,7 +274,12 @@ tests/test_confidence_score.py
239
274
  tests/test_config_injection.py
240
275
  tests/test_consensus_gate.py
241
276
  tests/test_content_cache.py
277
+ tests/test_content_crusher.py
278
+ tests/test_coordinator_budget_ccr_integration.py
279
+ tests/test_coordinator_smart_compression.py
280
+ tests/test_dag_views.py
242
281
  tests/test_dashboard_split.py
282
+ tests/test_dashboard_ui_e2e.py
243
283
  tests/test_data_backup.py
244
284
  tests/test_dependency_lock.py
245
285
  tests/test_dispatch_audit.py
@@ -254,9 +294,11 @@ tests/test_history_manager_v362.py
254
294
  tests/test_input_validator_phase5.py
255
295
  tests/test_intent_workflow_mapper.py
256
296
  tests/test_judge_agent.py
297
+ tests/test_learned_rule_phase4.py
257
298
  tests/test_lifecycle_protocol.py
258
299
  tests/test_llm_auto_fallback.py
259
300
  tests/test_llm_cache_protocol.py
301
+ tests/test_loop_engineering.py
260
302
  tests/test_mcp_server_v362.py
261
303
  tests/test_memory_benchmarks.py
262
304
  tests/test_micro_task_planner.py
@@ -270,11 +312,16 @@ tests/test_performance_benchmarks.py
270
312
  tests/test_performance_fingerprint.py
271
313
  tests/test_performance_monitor_protocol.py
272
314
  tests/test_permission_guard_phase5.py
315
+ tests/test_phase4_ghost_feature_defense.py
273
316
  tests/test_pipeline_step19_20.py
274
317
  tests/test_plan_c_unified_architecture.py
318
+ tests/test_plugins_hot_loader.py
319
+ tests/test_ponytail_rule_injector.py
275
320
  tests/test_production_features.py
276
321
  tests/test_prompt_dials.py
277
322
  tests/test_protocols.py
323
+ tests/test_qa_integration.py
324
+ tests/test_qa_uiux_visual_regression.py
278
325
  tests/test_quick_bonus.py
279
326
  tests/test_rate_limit.py
280
327
  tests/test_rbac_engine.py
@@ -284,18 +331,24 @@ tests/test_retry_jitter_strategies.py
284
331
  tests/test_role_skill_loader.py
285
332
  tests/test_rule_injection_security.py
286
333
  tests/test_severity_router.py
334
+ tests/test_skill_registry_coverage.py
287
335
  tests/test_skill_security.py
336
+ tests/test_sleep_guard.py
288
337
  tests/test_standardized_role_template.py
289
338
  tests/test_start_script.py
290
339
  tests/test_step_node_types.py
291
340
  tests/test_suggested_next_steps.py
292
341
  tests/test_tech_debt_manager.py
342
+ tests/test_token_budget_compressed_scratchpad.py
293
343
  tests/test_two_stage_review_gate.py
294
344
  tests/test_ue_test_framework.py
345
+ tests/test_usage_tracker_coverage.py
295
346
  tests/test_v38_integration.py
296
347
  tests/test_v39_e2e.py
297
348
  tests/test_v39_integration.py
298
349
  tests/test_v39_performance.py
350
+ tests/test_v4_integration.py
299
351
  tests/test_verification_gate.py
300
352
  tests/test_version.py
353
+ tests/test_workflow_persistence_coverage.py
301
354
  tests/test_yagni_checker.py
@@ -19,6 +19,7 @@ pydantic>=2.0
19
19
  streamlit>=1.28.0
20
20
  jupyter>=1.0
21
21
  slack-sdk>=3.21.0
22
+ Pillow>=10.0.0
22
23
  pytest>=7.0
23
24
  pytest-asyncio>=0.21
24
25
  pytest-cov>=4.1
@@ -26,6 +27,7 @@ ruff>=0.4.0
26
27
  mypy>=1.0
27
28
  black>=23.0
28
29
  flake8>=6.0
30
+ httpx2>=2.5.0
29
31
 
30
32
  [anthropic]
31
33
  anthropic>=0.18
@@ -46,6 +48,7 @@ ruff>=0.4.0
46
48
  mypy>=1.0
47
49
  black>=23.0
48
50
  flake8>=6.0
51
+ httpx2>=2.5.0
49
52
 
50
53
  [mcp]
51
54
  mcp>=0.9
@@ -57,6 +60,9 @@ prometheus-client>=0.19
57
60
  [openai]
58
61
  openai>=1.0
59
62
 
63
+ [qa]
64
+ Pillow>=10.0.0
65
+
60
66
  [visualization]
61
67
  streamlit>=1.28.0
62
68
  jupyter>=1.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devsquad"
7
- version = "3.9.2"
7
+ version = "4.0.0"
8
8
  description = "Production-Ready Multi-Role AI Task Orchestrator"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -56,6 +56,9 @@ visualization = [
56
56
  alerts = [
57
57
  "slack-sdk>=3.21.0",
58
58
  ]
59
+ qa = [
60
+ "Pillow>=10.0.0",
61
+ ]
59
62
  dev = [
60
63
  "pytest>=7.0",
61
64
  "pytest-asyncio>=0.21",
@@ -64,6 +67,7 @@ dev = [
64
67
  "mypy>=1.0",
65
68
  "black>=23.0",
66
69
  "flake8>=6.0",
70
+ "httpx2>=2.5.0",
67
71
  ]
68
72
  all = [
69
73
  "openai>=1.0",
@@ -78,6 +82,7 @@ all = [
78
82
  "streamlit>=1.28.0",
79
83
  "jupyter>=1.0",
80
84
  "slack-sdk>=3.21.0",
85
+ "Pillow>=10.0.0",
81
86
  "pytest>=7.0",
82
87
  "pytest-asyncio>=0.21",
83
88
  "pytest-cov>=4.1",
@@ -85,6 +90,7 @@ all = [
85
90
  "mypy>=1.0",
86
91
  "black>=23.0",
87
92
  "flake8>=6.0",
93
+ "httpx2>=2.5.0",
88
94
  ]
89
95
 
90
96
  [project.scripts]
@@ -160,6 +166,7 @@ norecursedirs = []
160
166
  python_files = ["test_*.py", "*_test.py"]
161
167
  python_classes = ["Test*"]
162
168
  python_functions = ["test_*"]
169
+ asyncio_mode = "auto"
163
170
  addopts = [
164
171
  "-v",
165
172
  "--tb=short",
@@ -172,6 +179,7 @@ markers = [
172
179
  "benchmark: performance benchmark tests",
173
180
  "unit: marks tests as unit tests",
174
181
  "smoke: marks tests as release smoke tests",
182
+ "asyncio: async tests using pytest-asyncio",
175
183
  ]
176
184
  filterwarnings = [
177
185
  "ignore::DeprecationWarning",
@@ -434,3 +434,44 @@ async def list_roles(
434
434
  except Exception as e:
435
435
  logger.error("Unexpected error listing roles: %s", e, exc_info=True)
436
436
  raise HTTPException(status_code=500, detail=f"Failed to retrieve roles: {str(e)}") from None
437
+
438
+
439
+ @router.get(
440
+ "/api/v1/budget/status",
441
+ summary="Token Budget Status / Token 预算状态",
442
+ description="""
443
+ V3.10.0 Phase 3 — Live token budget status for dashboard/Prometheus polling.
444
+
445
+ Returns the Coordinator's current ``used_input_tokens`` against the
446
+ configured ``TokenBudget`` thresholds (warning_ratio defaults to 0.8).
447
+ When no budget is configured, returns ``{"configured": false}``.
448
+
449
+ Fields:
450
+ - configured: bool — whether a TokenBudget is attached
451
+ - total_input_budget / per_role_input_budget / output_budget
452
+ - warning_ratio / warning_threshold
453
+ - used_input_tokens / remaining_input_tokens
454
+ - is_warning / is_exceeded — gate flags for alerting
455
+ """,
456
+ )
457
+ async def get_budget_status(
458
+ user_id: str = Depends(require_permission("AUDIT_READ")),
459
+ ) -> dict[str, Any]:
460
+ """Return live token budget status for monitoring/alerting."""
461
+ try:
462
+ dispatcher = _get_dispatcher()
463
+ coordinator = getattr(dispatcher, "coordinator", None)
464
+ if coordinator is None:
465
+ return {"configured": False, "reason": "coordinator_unavailable"}
466
+ status = coordinator.get_budget_status()
467
+ if status is None:
468
+ return {"configured": False, "reason": "no_token_budget_attached"}
469
+ return {"configured": True, **status}
470
+ except HTTPException:
471
+ raise
472
+ except (ImportError, RuntimeError) as e:
473
+ logger.error("Failed to query budget status: %s", e)
474
+ raise HTTPException(status_code=503, detail=f"Budget status unavailable: {str(e)}") from None
475
+ except Exception as e:
476
+ logger.error("Unexpected error querying budget status: %s", e, exc_info=True)
477
+ raise HTTPException(status_code=500, detail=f"Failed to query budget: {str(e)}") from None