devsper 2.1.6__py3-none-any.whl

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 (375) hide show
  1. devsper/__init__.py +14 -0
  2. devsper/agents/a2a/__init__.py +27 -0
  3. devsper/agents/a2a/client.py +126 -0
  4. devsper/agents/a2a/discovery.py +24 -0
  5. devsper/agents/a2a/server.py +128 -0
  6. devsper/agents/a2a/tool_adapter.py +68 -0
  7. devsper/agents/a2a/types.py +49 -0
  8. devsper/agents/agent.py +602 -0
  9. devsper/agents/critic.py +80 -0
  10. devsper/agents/message_bus.py +124 -0
  11. devsper/agents/roles.py +181 -0
  12. devsper/agents/run_agent.py +78 -0
  13. devsper/analytics/__init__.py +5 -0
  14. devsper/analytics/tool_analytics.py +78 -0
  15. devsper/audit/__init__.py +5 -0
  16. devsper/audit/logger.py +214 -0
  17. devsper/bus/__init__.py +29 -0
  18. devsper/bus/backends/__init__.py +5 -0
  19. devsper/bus/backends/base.py +38 -0
  20. devsper/bus/backends/memory.py +55 -0
  21. devsper/bus/backends/redis.py +146 -0
  22. devsper/bus/message.py +56 -0
  23. devsper/bus/schema_version.py +3 -0
  24. devsper/bus/topics.py +19 -0
  25. devsper/cache/__init__.py +6 -0
  26. devsper/cache/embedding_index.py +98 -0
  27. devsper/cache/hashing.py +24 -0
  28. devsper/cache/store.py +153 -0
  29. devsper/cache/task_cache.py +191 -0
  30. devsper/cli/__init__.py +6 -0
  31. devsper/cli/commands/reg.py +733 -0
  32. devsper/cli/github_oauth.py +157 -0
  33. devsper/cli/init.py +637 -0
  34. devsper/cli/main.py +2956 -0
  35. devsper/cli/run_progress.py +103 -0
  36. devsper/cli/ui/__init__.py +65 -0
  37. devsper/cli/ui/components.py +94 -0
  38. devsper/cli/ui/errors.py +104 -0
  39. devsper/cli/ui/logging.py +120 -0
  40. devsper/cli/ui/onboarding.py +102 -0
  41. devsper/cli/ui/progress.py +43 -0
  42. devsper/cli/ui/run_view.py +308 -0
  43. devsper/cli/ui/theme.py +40 -0
  44. devsper/cluster/__init__.py +29 -0
  45. devsper/cluster/election.py +84 -0
  46. devsper/cluster/local.py +97 -0
  47. devsper/cluster/node_info.py +77 -0
  48. devsper/cluster/registry.py +71 -0
  49. devsper/cluster/router.py +117 -0
  50. devsper/cluster/state_backend.py +105 -0
  51. devsper/compliance/__init__.py +5 -0
  52. devsper/compliance/pii.py +147 -0
  53. devsper/config/__init__.py +52 -0
  54. devsper/config/config_loader.py +121 -0
  55. devsper/config/defaults.py +77 -0
  56. devsper/config/resolver.py +342 -0
  57. devsper/config/schema.py +237 -0
  58. devsper/credentials/__init__.py +19 -0
  59. devsper/credentials/cli.py +197 -0
  60. devsper/credentials/migration.py +124 -0
  61. devsper/credentials/store.py +142 -0
  62. devsper/dashboard/__init__.py +9 -0
  63. devsper/dashboard/dashboard.py +87 -0
  64. devsper/dev/__init__.py +25 -0
  65. devsper/dev/builder.py +195 -0
  66. devsper/dev/debugger.py +95 -0
  67. devsper/dev/repo_index.py +138 -0
  68. devsper/dev/sandbox.py +203 -0
  69. devsper/dev/scaffold.py +122 -0
  70. devsper/embeddings/__init__.py +5 -0
  71. devsper/embeddings/service.py +36 -0
  72. devsper/explainability/__init__.py +14 -0
  73. devsper/explainability/decision_tree.py +104 -0
  74. devsper/explainability/rationale.py +38 -0
  75. devsper/explainability/simulation.py +56 -0
  76. devsper/hitl/__init__.py +13 -0
  77. devsper/hitl/approval.py +160 -0
  78. devsper/hitl/escalation.py +95 -0
  79. devsper/intelligence/__init__.py +9 -0
  80. devsper/intelligence/adaptation.py +88 -0
  81. devsper/intelligence/analysis/__init__.py +19 -0
  82. devsper/intelligence/analysis/analyzer.py +71 -0
  83. devsper/intelligence/analysis/cost_estimator.py +66 -0
  84. devsper/intelligence/analysis/formatter.py +103 -0
  85. devsper/intelligence/analysis/run_report.py +402 -0
  86. devsper/intelligence/learning_engine.py +92 -0
  87. devsper/intelligence/strategies/__init__.py +23 -0
  88. devsper/intelligence/strategies/base.py +14 -0
  89. devsper/intelligence/strategies/code_analysis_strategy.py +33 -0
  90. devsper/intelligence/strategies/data_science_strategy.py +33 -0
  91. devsper/intelligence/strategies/document_pipeline_strategy.py +33 -0
  92. devsper/intelligence/strategies/experiment_strategy.py +33 -0
  93. devsper/intelligence/strategies/research_strategy.py +34 -0
  94. devsper/intelligence/strategy_selector.py +84 -0
  95. devsper/intelligence/synthesis.py +132 -0
  96. devsper/intelligence/task_optimizer.py +92 -0
  97. devsper/knowledge/__init__.py +5 -0
  98. devsper/knowledge/extractor.py +204 -0
  99. devsper/knowledge/knowledge_graph.py +184 -0
  100. devsper/knowledge/query.py +285 -0
  101. devsper/memory/__init__.py +35 -0
  102. devsper/memory/consolidation.py +138 -0
  103. devsper/memory/embeddings.py +60 -0
  104. devsper/memory/memory_index.py +97 -0
  105. devsper/memory/memory_router.py +62 -0
  106. devsper/memory/memory_store.py +221 -0
  107. devsper/memory/memory_types.py +54 -0
  108. devsper/memory/namespaces.py +45 -0
  109. devsper/memory/scoring.py +77 -0
  110. devsper/memory/summarizer.py +52 -0
  111. devsper/nodes/__init__.py +5 -0
  112. devsper/nodes/controller.py +449 -0
  113. devsper/nodes/rpc.py +127 -0
  114. devsper/nodes/single.py +161 -0
  115. devsper/nodes/worker.py +506 -0
  116. devsper/orchestration/__init__.py +19 -0
  117. devsper/orchestration/meta_planner.py +239 -0
  118. devsper/orchestration/priority_queue.py +61 -0
  119. devsper/plugins/__init__.py +19 -0
  120. devsper/plugins/marketplace/__init__.py +0 -0
  121. devsper/plugins/plugin_loader.py +70 -0
  122. devsper/plugins/plugin_registry.py +34 -0
  123. devsper/plugins/registry.py +83 -0
  124. devsper/protocols/__init__.py +6 -0
  125. devsper/providers/__init__.py +17 -0
  126. devsper/providers/anthropic.py +84 -0
  127. devsper/providers/base.py +75 -0
  128. devsper/providers/complexity_router.py +94 -0
  129. devsper/providers/gemini.py +36 -0
  130. devsper/providers/github.py +180 -0
  131. devsper/providers/model_router.py +40 -0
  132. devsper/providers/openai.py +105 -0
  133. devsper/providers/router/__init__.py +21 -0
  134. devsper/providers/router/backends/__init__.py +19 -0
  135. devsper/providers/router/backends/anthropic_backend.py +111 -0
  136. devsper/providers/router/backends/custom_backend.py +138 -0
  137. devsper/providers/router/backends/gemini_backend.py +89 -0
  138. devsper/providers/router/backends/github_backend.py +165 -0
  139. devsper/providers/router/backends/ollama_backend.py +104 -0
  140. devsper/providers/router/backends/openai_backend.py +142 -0
  141. devsper/providers/router/backends/vllm_backend.py +35 -0
  142. devsper/providers/router/base.py +60 -0
  143. devsper/providers/router/factory.py +92 -0
  144. devsper/providers/router/legacy.py +101 -0
  145. devsper/providers/router/router.py +135 -0
  146. devsper/reasoning/__init__.py +12 -0
  147. devsper/reasoning/graph.py +59 -0
  148. devsper/reasoning/nodes.py +20 -0
  149. devsper/reasoning/store.py +67 -0
  150. devsper/runtime/__init__.py +12 -0
  151. devsper/runtime/health.py +88 -0
  152. devsper/runtime/replay.py +53 -0
  153. devsper/runtime/replay_engine.py +142 -0
  154. devsper/runtime/run_history.py +204 -0
  155. devsper/runtime/telemetry.py +116 -0
  156. devsper/runtime/visualize.py +58 -0
  157. devsper/sandbox/__init__.py +13 -0
  158. devsper/sandbox/sandbox.py +161 -0
  159. devsper/swarm/checkpointer.py +65 -0
  160. devsper/swarm/executor.py +558 -0
  161. devsper/swarm/map_reduce.py +44 -0
  162. devsper/swarm/planner.py +197 -0
  163. devsper/swarm/prefetcher.py +91 -0
  164. devsper/swarm/scheduler.py +153 -0
  165. devsper/swarm/speculation.py +47 -0
  166. devsper/swarm/swarm.py +562 -0
  167. devsper/tools/__init__.py +33 -0
  168. devsper/tools/base.py +29 -0
  169. devsper/tools/code_intelligence/__init__.py +13 -0
  170. devsper/tools/code_intelligence/api_surface_extractor.py +73 -0
  171. devsper/tools/code_intelligence/architecture_analyzer.py +65 -0
  172. devsper/tools/code_intelligence/codebase_indexer.py +71 -0
  173. devsper/tools/code_intelligence/dependency_graph_builder.py +67 -0
  174. devsper/tools/code_intelligence/design_pattern_detector.py +62 -0
  175. devsper/tools/code_intelligence/large_function_detector.py +68 -0
  176. devsper/tools/code_intelligence/module_responsibility_mapper.py +56 -0
  177. devsper/tools/code_intelligence/parallel_codebase_analysis.py +44 -0
  178. devsper/tools/code_intelligence/refactor_candidate_detector.py +81 -0
  179. devsper/tools/code_intelligence/repository_semantic_index.py +61 -0
  180. devsper/tools/code_intelligence/test_coverage_estimator.py +62 -0
  181. devsper/tools/coding/__init__.py +12 -0
  182. devsper/tools/coding/analyze_code_complexity.py +48 -0
  183. devsper/tools/coding/dependency_analyzer.py +42 -0
  184. devsper/tools/coding/extract_functions.py +38 -0
  185. devsper/tools/coding/format_python.py +50 -0
  186. devsper/tools/coding/generate_docstrings.py +40 -0
  187. devsper/tools/coding/generate_unit_tests.py +42 -0
  188. devsper/tools/coding/lint_python.py +51 -0
  189. devsper/tools/coding/refactor_function.py +41 -0
  190. devsper/tools/coding/repo_structure_map.py +54 -0
  191. devsper/tools/coding/run_python.py +53 -0
  192. devsper/tools/data/__init__.py +12 -0
  193. devsper/tools/data/column_type_detection.py +64 -0
  194. devsper/tools/data/csv_summary.py +52 -0
  195. devsper/tools/data/dataframe_filter.py +51 -0
  196. devsper/tools/data/dataframe_groupby.py +47 -0
  197. devsper/tools/data/dataframe_stats.py +38 -0
  198. devsper/tools/data/dataset_sampling.py +55 -0
  199. devsper/tools/data/dataset_schema.py +45 -0
  200. devsper/tools/data/json_pretty_print.py +37 -0
  201. devsper/tools/data/json_query.py +46 -0
  202. devsper/tools/data/missing_value_report.py +47 -0
  203. devsper/tools/data_science/__init__.py +13 -0
  204. devsper/tools/data_science/correlation_heatmap.py +72 -0
  205. devsper/tools/data_science/dataset_bias_detector.py +49 -0
  206. devsper/tools/data_science/dataset_distribution_report.py +64 -0
  207. devsper/tools/data_science/dataset_drift_detector.py +64 -0
  208. devsper/tools/data_science/dataset_outlier_detector.py +65 -0
  209. devsper/tools/data_science/dataset_profile.py +76 -0
  210. devsper/tools/data_science/distributed_dataset_processor.py +54 -0
  211. devsper/tools/data_science/feature_engineering_suggestions.py +69 -0
  212. devsper/tools/data_science/feature_importance_estimator.py +82 -0
  213. devsper/tools/data_science/model_input_validator.py +59 -0
  214. devsper/tools/data_science/time_series_analyzer.py +57 -0
  215. devsper/tools/documents/__init__.py +11 -0
  216. devsper/tools/documents/_docproc.py +56 -0
  217. devsper/tools/documents/document_to_markdown.py +29 -0
  218. devsper/tools/documents/extract_document_images.py +39 -0
  219. devsper/tools/documents/extract_document_text.py +29 -0
  220. devsper/tools/documents/extract_equations.py +36 -0
  221. devsper/tools/documents/extract_tables.py +47 -0
  222. devsper/tools/documents/summarize_document.py +42 -0
  223. devsper/tools/documents/write_latex_document.py +133 -0
  224. devsper/tools/documents/write_markdown_document.py +89 -0
  225. devsper/tools/documents/write_word_document.py +149 -0
  226. devsper/tools/experiments/__init__.py +13 -0
  227. devsper/tools/experiments/bootstrap_estimator.py +54 -0
  228. devsper/tools/experiments/experiment_report_generator.py +50 -0
  229. devsper/tools/experiments/experiment_tracker.py +36 -0
  230. devsper/tools/experiments/grid_search_runner.py +50 -0
  231. devsper/tools/experiments/model_benchmark_runner.py +45 -0
  232. devsper/tools/experiments/monte_carlo_experiment.py +38 -0
  233. devsper/tools/experiments/parameter_sweep_runner.py +51 -0
  234. devsper/tools/experiments/result_comparator.py +58 -0
  235. devsper/tools/experiments/simulation_runner.py +43 -0
  236. devsper/tools/experiments/statistical_significance_test.py +56 -0
  237. devsper/tools/experiments/swarm_map_reduce.py +42 -0
  238. devsper/tools/filesystem/__init__.py +12 -0
  239. devsper/tools/filesystem/append_file.py +42 -0
  240. devsper/tools/filesystem/file_hash.py +40 -0
  241. devsper/tools/filesystem/file_line_count.py +36 -0
  242. devsper/tools/filesystem/file_metadata.py +38 -0
  243. devsper/tools/filesystem/file_preview.py +55 -0
  244. devsper/tools/filesystem/find_large_files.py +50 -0
  245. devsper/tools/filesystem/list_directory.py +39 -0
  246. devsper/tools/filesystem/read_file.py +35 -0
  247. devsper/tools/filesystem/search_files.py +60 -0
  248. devsper/tools/filesystem/write_file.py +41 -0
  249. devsper/tools/flagship/__init__.py +15 -0
  250. devsper/tools/flagship/distributed_document_analysis.py +77 -0
  251. devsper/tools/flagship/docproc_corpus_pipeline.py +91 -0
  252. devsper/tools/flagship/repository_semantic_map.py +99 -0
  253. devsper/tools/flagship/research_graph_builder.py +111 -0
  254. devsper/tools/flagship/swarm_experiment_runner.py +86 -0
  255. devsper/tools/knowledge/__init__.py +10 -0
  256. devsper/tools/knowledge/citation_graph_builder.py +69 -0
  257. devsper/tools/knowledge/concept_frequency_analyzer.py +74 -0
  258. devsper/tools/knowledge/corpus_builder.py +66 -0
  259. devsper/tools/knowledge/cross_document_entity_linker.py +71 -0
  260. devsper/tools/knowledge/document_corpus_summary.py +68 -0
  261. devsper/tools/knowledge/document_topic_extractor.py +58 -0
  262. devsper/tools/knowledge/knowledge_graph_extractor.py +58 -0
  263. devsper/tools/knowledge/timeline_extractor.py +59 -0
  264. devsper/tools/math/__init__.py +12 -0
  265. devsper/tools/math/calculate_expression.py +52 -0
  266. devsper/tools/math/correlation.py +44 -0
  267. devsper/tools/math/distribution_summary.py +39 -0
  268. devsper/tools/math/histogram.py +53 -0
  269. devsper/tools/math/linear_regression.py +47 -0
  270. devsper/tools/math/matrix_multiply.py +38 -0
  271. devsper/tools/math/mean_std.py +35 -0
  272. devsper/tools/math/monte_carlo_simulation.py +43 -0
  273. devsper/tools/math/polynomial_fit.py +40 -0
  274. devsper/tools/math/random_sample.py +36 -0
  275. devsper/tools/mcp/__init__.py +23 -0
  276. devsper/tools/mcp/adapter.py +53 -0
  277. devsper/tools/mcp/client.py +235 -0
  278. devsper/tools/mcp/discovery.py +53 -0
  279. devsper/tools/memory/__init__.py +16 -0
  280. devsper/tools/memory/delete_memory.py +25 -0
  281. devsper/tools/memory/list_memory.py +34 -0
  282. devsper/tools/memory/search_memory.py +36 -0
  283. devsper/tools/memory/store_memory.py +47 -0
  284. devsper/tools/memory/summarize_memory.py +41 -0
  285. devsper/tools/memory/tag_memory.py +47 -0
  286. devsper/tools/pipelines.py +92 -0
  287. devsper/tools/registry.py +39 -0
  288. devsper/tools/research/__init__.py +12 -0
  289. devsper/tools/research/arxiv_download.py +55 -0
  290. devsper/tools/research/arxiv_search.py +58 -0
  291. devsper/tools/research/citation_extractor.py +35 -0
  292. devsper/tools/research/duckduckgo_search.py +42 -0
  293. devsper/tools/research/paper_metadata_extractor.py +45 -0
  294. devsper/tools/research/paper_summarizer.py +41 -0
  295. devsper/tools/research/research_question_generator.py +39 -0
  296. devsper/tools/research/topic_cluster.py +46 -0
  297. devsper/tools/research/web_search.py +47 -0
  298. devsper/tools/research/wikipedia_lookup.py +50 -0
  299. devsper/tools/research_advanced/__init__.py +14 -0
  300. devsper/tools/research_advanced/citation_context_extractor.py +60 -0
  301. devsper/tools/research_advanced/literature_review_generator.py +79 -0
  302. devsper/tools/research_advanced/methodology_extractor.py +58 -0
  303. devsper/tools/research_advanced/paper_contribution_extractor.py +50 -0
  304. devsper/tools/research_advanced/paper_dataset_identifier.py +49 -0
  305. devsper/tools/research_advanced/paper_method_comparator.py +62 -0
  306. devsper/tools/research_advanced/paper_similarity_search.py +69 -0
  307. devsper/tools/research_advanced/paper_trend_analyzer.py +69 -0
  308. devsper/tools/research_advanced/parallel_document_analyzer.py +56 -0
  309. devsper/tools/research_advanced/research_gap_finder.py +71 -0
  310. devsper/tools/research_advanced/research_topic_mapper.py +69 -0
  311. devsper/tools/research_advanced/swarm_literature_review.py +58 -0
  312. devsper/tools/scoring/__init__.py +52 -0
  313. devsper/tools/scoring/report.py +44 -0
  314. devsper/tools/scoring/scorer.py +39 -0
  315. devsper/tools/scoring/selector.py +61 -0
  316. devsper/tools/scoring/store.py +267 -0
  317. devsper/tools/selector.py +130 -0
  318. devsper/tools/system/__init__.py +12 -0
  319. devsper/tools/system/cpu_usage.py +22 -0
  320. devsper/tools/system/disk_usage.py +35 -0
  321. devsper/tools/system/environment_variables.py +29 -0
  322. devsper/tools/system/memory_usage.py +23 -0
  323. devsper/tools/system/pip_install.py +44 -0
  324. devsper/tools/system/pip_search.py +29 -0
  325. devsper/tools/system/process_list.py +34 -0
  326. devsper/tools/system/python_package_list.py +40 -0
  327. devsper/tools/system/run_shell_command.py +51 -0
  328. devsper/tools/system/system_info.py +26 -0
  329. devsper/tools/tool_runner.py +122 -0
  330. devsper/tui/__init__.py +5 -0
  331. devsper/tui/activity_feed_view.py +73 -0
  332. devsper/tui/adaptive_tasks_view.py +75 -0
  333. devsper/tui/agent_role_view.py +35 -0
  334. devsper/tui/app.py +395 -0
  335. devsper/tui/dashboard_screen.py +290 -0
  336. devsper/tui/dev_view.py +99 -0
  337. devsper/tui/inject_screen.py +73 -0
  338. devsper/tui/knowledge_graph_view.py +46 -0
  339. devsper/tui/layout.py +43 -0
  340. devsper/tui/logs_view.py +83 -0
  341. devsper/tui/memory_view.py +58 -0
  342. devsper/tui/performance_view.py +33 -0
  343. devsper/tui/reasoning_graph_view.py +39 -0
  344. devsper/tui/results_view.py +139 -0
  345. devsper/tui/swarm_view.py +37 -0
  346. devsper/tui/task_detail_screen.py +55 -0
  347. devsper/tui/task_view.py +103 -0
  348. devsper/types/event.py +97 -0
  349. devsper/types/exceptions.py +21 -0
  350. devsper/types/swarm.py +41 -0
  351. devsper/types/task.py +80 -0
  352. devsper/upgrade/__init__.py +21 -0
  353. devsper/upgrade/changelog.py +124 -0
  354. devsper/upgrade/cli.py +145 -0
  355. devsper/upgrade/installer.py +103 -0
  356. devsper/upgrade/notifier.py +52 -0
  357. devsper/upgrade/version_check.py +121 -0
  358. devsper/utils/event_logger.py +88 -0
  359. devsper/utils/http.py +43 -0
  360. devsper/utils/models.py +54 -0
  361. devsper/visualization/__init__.py +5 -0
  362. devsper/visualization/dag_export.py +67 -0
  363. devsper/workflow/__init__.py +18 -0
  364. devsper/workflow/conditions.py +157 -0
  365. devsper/workflow/context.py +108 -0
  366. devsper/workflow/loader.py +156 -0
  367. devsper/workflow/resolver.py +109 -0
  368. devsper/workflow/runner.py +562 -0
  369. devsper/workflow/schema.py +63 -0
  370. devsper/workflow/validator.py +128 -0
  371. devsper-2.1.6.dist-info/METADATA +346 -0
  372. devsper-2.1.6.dist-info/RECORD +375 -0
  373. devsper-2.1.6.dist-info/WHEEL +4 -0
  374. devsper-2.1.6.dist-info/entry_points.txt +3 -0
  375. devsper-2.1.6.dist-info/licenses/LICENSE +639 -0
@@ -0,0 +1,128 @@
1
+ """Validate workflow definition: references, DAG, conditions, dead output."""
2
+
3
+ import re
4
+ from dataclasses import dataclass
5
+
6
+ from devsper.workflow.resolver import build_execution_order, validate_dag
7
+ from devsper.workflow.schema import WorkflowDefinition, WorkflowStep
8
+
9
+
10
+ @dataclass
11
+ class ValidationReport:
12
+ valid: bool
13
+ errors: list[str] # blockers
14
+ warnings: list[str] # non-fatal issues
15
+ info: list[str] # stats/notes
16
+
17
+
18
+ def _template_refs(template: str) -> list[tuple[str, str]]:
19
+ """Return list of (step_id, field) for references like steps.STEP_ID.FIELD or steps.STEP_ID.result."""
20
+ refs: list[tuple[str, str]] = []
21
+ # Match {steps.STEP_ID.FIELD} or {steps.STEP_ID.result}
22
+ for m in re.finditer(r"\{steps\.([a-zA-Z_][a-zA-Z0-9_]*)\.([a-zA-Z0-9_]+)\}", template):
23
+ refs.append((m.group(1), m.group(2)))
24
+ return refs
25
+
26
+
27
+ def _condition_ref(expression: str) -> tuple[str, str] | None:
28
+ """Return (step_id, field) if expression is steps.STEP_ID.FIELD <op> value."""
29
+ m = re.match(
30
+ r"^\s*steps\.([a-zA-Z_][a-zA-Z0-9_]*)\.([a-zA-Z_][a-zA-Z0-9_]*)\s",
31
+ expression.strip(),
32
+ )
33
+ if m:
34
+ return (m.group(1), m.group(2))
35
+ return None
36
+
37
+
38
+ def validate_workflow(definition: WorkflowDefinition) -> ValidationReport:
39
+ errors: list[str] = []
40
+ warnings: list[str] = []
41
+ info: list[str] = []
42
+
43
+ step_ids = {s.id for s in definition.steps}
44
+ step_by_id = {s.id: s for s in definition.steps}
45
+
46
+ # DAG and depends_on
47
+ dag_errors = validate_dag(definition.steps)
48
+ errors.extend(dag_errors)
49
+
50
+ waves = None
51
+ if not dag_errors:
52
+ try:
53
+ waves = build_execution_order(definition.steps)
54
+ info.append(f"Total steps: {len(definition.steps)}")
55
+ info.append(f"Parallel waves: {len(waves)}")
56
+ info.append(f"Critical path length: {len(waves)}")
57
+ except Exception as e:
58
+ errors.append(str(e))
59
+
60
+ # All {steps.X.field} template references point to steps with output_schema defining that field (or .result)
61
+ for step in definition.steps:
62
+ for step_id, field in _template_refs(step.task):
63
+ if step_id not in step_ids:
64
+ errors.append(
65
+ f"Step {step.id!r} task references steps.{step_id}.{field} but step {step_id!r} does not exist."
66
+ )
67
+ else:
68
+ ref_step = step_by_id[step_id]
69
+ if field == "result":
70
+ continue # always valid
71
+ if not ref_step.output_schema:
72
+ errors.append(
73
+ f"Step {step.id!r} task references steps.{step_id}.{field} but step {step_id!r} has no output_schema."
74
+ )
75
+ else:
76
+ names = [f.name for f in ref_step.output_schema]
77
+ if field not in names:
78
+ errors.append(
79
+ f"Step {step.id!r} task references steps.{step_id}.{field} but step {step_id!r} output_schema has: {names}."
80
+ )
81
+
82
+ # All if: expressions reference steps that appear earlier in dependency order
83
+ # and output_schema fields referenced in conditions exist
84
+ if waves:
85
+ order_so_far: set[str] = set()
86
+ for wave in waves:
87
+ for s in wave:
88
+ if s.if_:
89
+ ref = _condition_ref(s.if_.expression)
90
+ if ref:
91
+ cond_step_id, cond_field = ref
92
+ if cond_step_id not in order_so_far:
93
+ errors.append(
94
+ f"Step {s.id!r} condition references steps.{cond_step_id}.{cond_field} "
95
+ f"but {cond_step_id!r} is not a dependency (must run before this step)."
96
+ )
97
+ elif cond_step_id in step_by_id:
98
+ cond_step = step_by_id[cond_step_id]
99
+ if cond_field != "result":
100
+ names = [f.name for f in cond_step.output_schema]
101
+ if cond_field not in names:
102
+ errors.append(
103
+ f"Step {s.id!r} condition references steps.{cond_step_id}.{cond_field} "
104
+ f"but that step's output_schema has: {names}."
105
+ )
106
+ order_so_far.add(s.id)
107
+
108
+ # Warning: steps with no id set (we require id; no auto-generated opaque ids in schema)
109
+ # Our schema requires id, so skip.
110
+
111
+ # Warning: steps with output_schema but no downstream steps that use the output (dead output)
112
+ consumers: dict[str, set[str]] = {sid: set() for sid in step_ids}
113
+ for step in definition.steps:
114
+ for step_id, field in _template_refs(step.task):
115
+ if step_id in step_ids:
116
+ consumers[step_id].add(step.id)
117
+ for step in definition.steps:
118
+ if step.output_schema and step.id in consumers and not consumers[step.id]:
119
+ warnings.append(
120
+ f"Step {step.id!r} has output_schema but no downstream step uses its output (dead output)."
121
+ )
122
+
123
+ return ValidationReport(
124
+ valid=len(errors) == 0,
125
+ errors=errors,
126
+ warnings=warnings,
127
+ info=info,
128
+ )
@@ -0,0 +1,346 @@
1
+ Metadata-Version: 2.4
2
+ Name: devsper
3
+ Version: 2.1.6
4
+ Summary: Orchestrate distributed swarms of AI agents that collaboratively solve complex tasks.
5
+ Project-URL: Homepage, https://github.com/devsper-com/runtime
6
+ Project-URL: Documentation, https://docs.devsper.com
7
+ Project-URL: Changelog, https://github.com/devsper-com/runtime/blob/main/CHANGELOG.md
8
+ Project-URL: Worker, https://github.com/devsper-com/runtime/pkgs/container/devsper-worker
9
+ License-Expression: GPL-3.0-or-later
10
+ License-File: LICENSE
11
+ Keywords: agents,ai,distributed,llm,multi-agent,orchestration,swarm
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
19
+ Requires-Python: >=3.12
20
+ Requires-Dist: httpx>=0.27.0
21
+ Requires-Dist: keyring>=24.0
22
+ Requires-Dist: langchain-anthropic>=1.3.4
23
+ Requires-Dist: langchain-google-genai>=4.2.1
24
+ Requires-Dist: langchain-openai>=1.1.10
25
+ Requires-Dist: langchain>=1.2.10
26
+ Requires-Dist: networkx>=3.6.1
27
+ Requires-Dist: numpy>=2.4.2
28
+ Requires-Dist: pydantic>=2.12.5
29
+ Requires-Dist: pyfiglet>=1.0
30
+ Requires-Dist: python-dotenv>=1.2.2
31
+ Requires-Dist: rich>=14.3.3
32
+ Requires-Dist: shtab>=1.6.0
33
+ Requires-Dist: textual>=0.50.0
34
+ Provides-Extra: a2a
35
+ Requires-Dist: fastapi>=0.110; extra == 'a2a'
36
+ Requires-Dist: httpx>=0.27; extra == 'a2a'
37
+ Requires-Dist: sse-starlette>=2.0; extra == 'a2a'
38
+ Requires-Dist: uvicorn>=0.29; extra == 'a2a'
39
+ Provides-Extra: compliance
40
+ Requires-Dist: spacy>=3.7; extra == 'compliance'
41
+ Provides-Extra: data
42
+ Requires-Dist: pandas>=2.0.0; extra == 'data'
43
+ Requires-Dist: scikit-learn>=1.3.0; extra == 'data'
44
+ Provides-Extra: distributed
45
+ Requires-Dist: fastapi>=0.110.0; extra == 'distributed'
46
+ Requires-Dist: hiredis>=2.3.0; extra == 'distributed'
47
+ Requires-Dist: redis>=5.0.0; extra == 'distributed'
48
+ Requires-Dist: uvicorn>=0.29.0; extra == 'distributed'
49
+ Provides-Extra: docs
50
+ Requires-Dist: mike>=1.1.0; extra == 'docs'
51
+ Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
52
+ Requires-Dist: mkdocs<2,>=1.6.0; extra == 'docs'
53
+ Provides-Extra: document
54
+ Requires-Dist: docproc>=2.0.0; extra == 'document'
55
+ Requires-Dist: python-docx>=1.0.0; extra == 'document'
56
+ Provides-Extra: embeddings
57
+ Requires-Dist: sentence-transformers>=3.0.0; extra == 'embeddings'
58
+ Provides-Extra: explainability
59
+ Provides-Extra: hitl
60
+ Requires-Dist: httpx>=0.27; extra == 'hitl'
61
+ Provides-Extra: mcp
62
+ Requires-Dist: anyio>=4.0; extra == 'mcp'
63
+ Requires-Dist: httpx>=0.27; extra == 'mcp'
64
+ Provides-Extra: ollama
65
+ Provides-Extra: research
66
+ Requires-Dist: duckduckgo-search>=6.0.0; extra == 'research'
67
+ Provides-Extra: worker
68
+ Description-Content-Type: text/markdown
69
+
70
+ <p align="center">
71
+ <img src="https://raw.githubusercontent.com/rithulkamesh/devsper/refs/heads/main/branding/logo_bg.svg" alt="devsper" width="120" height="140" />
72
+ </p>
73
+
74
+ <h1 align="center">devsper</h1>
75
+ <p align="center"><strong>Distributed AI Swarm Runtime</strong></p>
76
+
77
+ <p align="center">
78
+ <a href="https://pypi.org/project/devsper/"><img src="https://img.shields.io/pypi/v/devsper?label=PyPI" alt="PyPI"></a>
79
+ <a href="https://www.gnu.org/licenses/gpl-3.0"><img src="https://img.shields.io/badge/License-GPLv3-blue.svg" alt="License: GPL v3"></a>
80
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.12+-green.svg" alt="Python 3.12+"></a>
81
+ </p>
82
+
83
+ <p align="center">
84
+ <em>Orchestrate multi-agent systems with a swarm execution model: tasks → DAG → parallel execution.</em>
85
+ </p>
86
+
87
+ > **Install:** PyPI package **`devsper`** · CLI **`devsper`**
88
+
89
+ ---
90
+
91
+ ## Quick start
92
+
93
+ **1. Install (Python 3.12+):**
94
+
95
+ ```bash
96
+ pip install devsper
97
+ # or: uv add devsper
98
+ ```
99
+
100
+ **2. Set up API keys (pick one):**
101
+
102
+ Store credentials in your OS keychain so you never re-enter them:
103
+
104
+ ```bash
105
+ devsper credentials set openai api_key # prompts for value
106
+ devsper credentials set anthropic api_key
107
+ devsper credentials set github token
108
+ # or migrate from .env:
109
+ devsper credentials migrate
110
+ ```
111
+
112
+ Or use environment variables: `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GITHUB_TOKEN`, etc. (see [Credentials](#credentials)).
113
+
114
+ **3. Create a project and run:**
115
+
116
+ ```bash
117
+ devsper init
118
+ devsper run "Summarize swarm intelligence in one paragraph."
119
+ ```
120
+
121
+ **4. Optional — shell completion:**
122
+
123
+ ```bash
124
+ # Bash: add to ~/.bashrc
125
+ eval "$(devsper completion bash)"
126
+
127
+ # Zsh: add to ~/.zshrc
128
+ eval "$(devsper completion zsh)"
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Run from code
134
+
135
+ **From config file:**
136
+
137
+ ```python
138
+ from devsper import Swarm
139
+
140
+ swarm = Swarm(config="devsper.toml")
141
+ results = swarm.run("Analyze diffusion models and write a one-page summary.")
142
+ ```
143
+
144
+ **Explicit parameters:**
145
+
146
+ ```python
147
+ from devsper import Swarm
148
+
149
+ swarm = Swarm(worker_count=4, worker_model="gpt-4o-mini", planner_model="gpt-4o-mini", use_tools=True)
150
+ results = swarm.run("Your task here.")
151
+ ```
152
+
153
+ Credentials are injected from the keyring (or env) when config is resolved—no code changes needed.
154
+
155
+ ---
156
+
157
+ ## Credentials
158
+
159
+ API keys are **not** stored in config files. Use the **credential store** (OS keychain) or environment variables.
160
+
161
+ | What you want | Command or method |
162
+ |---------------|-------------------|
163
+ | Store a key securely | `devsper credentials set <provider> <key>` (prompts; uses keyring) |
164
+ | List stored keys (no values) | `devsper credentials list` |
165
+ | Import from `.env` / TOML | `devsper credentials migrate` |
166
+ | Export for sourcing / `.env` | `devsper credentials export <provider>` → prints `KEY=value` lines |
167
+ | Remove a key | `devsper credentials delete <provider> <key>` |
168
+
169
+ **Providers:** `openai`, `anthropic`, `github`, `gemini`, `azure`, `azure_anthropic` (keys: `api_key`, `token`, `endpoint`, `deployment`, `api_version` as applicable).
170
+
171
+ **Example — export and source in a script:**
172
+
173
+ ```bash
174
+ eval "$(devsper credentials export azure)"
175
+ devsper run "Your task"
176
+ ```
177
+
178
+ See [Configuration](docs/configuration.md#credentials-api-keys) and [CLI](docs/cli.md#credentials) for details.
179
+
180
+ ---
181
+
182
+ ## CLI
183
+
184
+ | Command | Description |
185
+ |--------|-------------|
186
+ | `devsper init` | Set up a new project (`devsper.toml`) |
187
+ | `devsper doctor` | Check environment (keys, config, tools) |
188
+ | `devsper run "task"` | Run swarm on a task |
189
+ | `devsper tui` | Terminal UI (prompt, dashboard, logs) |
190
+ | `devsper credentials set/list/migrate/export/delete` | Manage API keys (keyring) |
191
+ | `devsper completion bash \| zsh` | Print shell completion script |
192
+ | `devsper research [path]` | Literature review on a directory |
193
+ | `devsper analyze [path]` | Analyze repository architecture |
194
+ | `devsper memory [--limit N]` | List memory entries |
195
+ | `devsper query "…"` | Query knowledge graph |
196
+ | `devsper workflow <name>` | Run a workflow from `workflow.devsper.toml` |
197
+ | `devsper graph [run_id]` | Export task DAG as Mermaid |
198
+ | `devsper replay [run_id]` | Replay a run from event log |
199
+ | `devsper cache stats \| clear` | Task result cache |
200
+ | `devsper analytics` | Tool usage stats |
201
+ | `devsper build "app description" [-o dir]` | Autonomous app builder |
202
+ | `devsper upgrade [--check \| -y]` | Check for updates / upgrade |
203
+
204
+ Run `devsper --help` or `devsper <command> --help` for examples and options.
205
+
206
+ ---
207
+
208
+ ## Features
209
+
210
+ - **Planner → Scheduler → Executor → Agents** — DAG-based execution with configurable parallelism
211
+ - **Strategy-based planning** — Auto-selected strategies (research, code, data science, document, experiment) or LLM fallback
212
+ - **120+ tools** — Research, coding, data science, documents, experiments, memory; **smart tool selection** (top-k by similarity)
213
+ - **TOML config** — `devsper.toml` / `workflow.devsper.toml`; env > project > user > defaults
214
+ - **Memory & knowledge graph** — Episodic, semantic, research, artifact memory; summarization, namespaces, entity/relationship search
215
+ - **Map-reduce runtime** — `swarm.map_reduce(dataset, map_fn, reduce_fn)` using the worker pool
216
+ - **Workflows** — Define steps in `workflow.devsper.toml`; run with `devsper workflow <name>`; **structured output self-correction** (v1.7) retries with a correction prompt when JSON parsing fails
217
+ - **Critic & agent messaging (v1.7)** — Optional second-pass critic scores results and requests one retry; per-run message bus lets agents share discoveries via `BROADCAST:`
218
+ - **Speculative pre-fetching (v1.7)** — Pre-warm memory and tools for successor tasks while others run; reduces standing-up time
219
+ - **Plugin ecosystem** — Discover tools via entry_points (`devsper.plugins`)
220
+ - **Provider routing** — OpenAI, Anthropic, Azure, Gemini, **GitHub Models (Copilot)** (`provider:model` or model name); **429 retry with backoff** for GitHub rate limits
221
+ - **Automatic model routing** — `planner = "auto"` and `worker = "auto"` for cost/latency/quality-aware selection
222
+ - **EventLog, replay, telemetry** — Structured events for debugging and metrics
223
+
224
+ ---
225
+
226
+ ## Architecture
227
+
228
+ ```
229
+ Planner
230
+
231
+ Scheduler
232
+
233
+ Executor
234
+
235
+ Agents → Tools → Memory → Knowledge Graph
236
+ ```
237
+
238
+ ---
239
+
240
+ ## Configuration
241
+
242
+ **Priority:** env > project config > user `~/.config/devsper/config.toml` > defaults.
243
+
244
+ **Locations:** `./devsper.toml`, `./workflow.devsper.toml`, `~/.config/devsper/config.toml`, or legacy `.devsper/config.toml`.
245
+
246
+ **Keep secrets out of TOML.** Use `devsper credentials` or environment variables for API keys. Non-secret settings (models, workers, paths) go in TOML.
247
+
248
+ **Example `devsper.toml`:**
249
+
250
+ ```toml
251
+ [swarm]
252
+ workers = 6
253
+ adaptive_planning = true
254
+ max_iterations = 10
255
+ critic_enabled = true
256
+ critic_roles = ["research", "analysis", "code"]
257
+ message_bus_enabled = true
258
+ prefetch_enabled = true
259
+
260
+ [models]
261
+ planner = "auto"
262
+ worker = "auto"
263
+
264
+ [memory]
265
+ enabled = true
266
+ store_results = true
267
+ top_k = 5
268
+
269
+ [tools]
270
+ enabled = ["research", "coding", "documents"]
271
+ top_k = 12
272
+
273
+ [telemetry]
274
+ enabled = true
275
+ save_events = true
276
+
277
+ [providers.azure]
278
+ endpoint = "" # or use credentials store / env
279
+ deployment = ""
280
+ ```
281
+
282
+ Env overrides: `DEVSPER_WORKER_MODEL`, `DEVSPER_PLANNER_MODEL`, `DEVSPER_EVENTS_DIR`, `DEVSPER_DATA_DIR`, plus provider keys. Full schema: [docs/configuration.md](docs/configuration.md), [docs/providers.md](docs/providers.md).
283
+
284
+ ---
285
+
286
+ ## Distributed mode (v1.10)
287
+
288
+ Run a **controller** and **workers** across processes or machines. Workers can be Python or **Rust** (`devsper-worker` binary) for higher throughput.
289
+
290
+ ```bash
291
+ # Redis + workers + controller (see examples/distributed/README.md)
292
+ docker compose up -d
293
+ uv run python examples/distributed/run_worker.py # or Rust: DEVSPER_WORKER_MODEL=github:gpt-4o ./worker/target/release/devsper-worker
294
+ uv run python examples/distributed/run_controller.py "Your task" --parallel
295
+ ```
296
+
297
+ Rust workers: set `DEVSPER_WORKER_MODEL=github:gpt-4o` (or your model), `DEVSPER_PYTHON_BIN=.venv/bin/python`, `DEVSPER_RPC_PORT=0` for multiple workers on one host. Credentials load from keychain in the subprocess.
298
+
299
+ ---
300
+
301
+ ## Examples
302
+
303
+ | Workflow | Command |
304
+ |----------|---------|
305
+ | Distributed (v1.10) | `uv run python examples/distributed/run_controller.py "Task" --parallel` |
306
+ | Literature review | `devsper research papers/` or `uv run python examples/research/literature_review.py [dir]` |
307
+ | Repository analysis | `devsper analyze .` or `uv run python examples/coding/analyze_repository.py [path]` |
308
+ | Dataset analysis | `uv run python examples/data_science/dataset_analysis.py [path-to.csv]` |
309
+ | Document intelligence | `uv run python examples/documents/analyze_documents.py [dir]` |
310
+ | Parameter sweep | `uv run python examples/experiments/parameter_sweep.py --params '{"lr":[0.01,0.1]}'` |
311
+
312
+ Outputs under `examples/output/`. Run from project root when using script paths.
313
+
314
+ ---
315
+
316
+ ## Documentation
317
+
318
+ Full docs (with versioning and dark mode): **[docs.devsper.com](https://docs.devsper.com)**. Source lives in `website/docs/` and is built with [Docusaurus](https://docusaurus.io).
319
+
320
+ | Doc | Description |
321
+ |-----|-------------|
322
+ | [Introduction](https://docs.devsper.com/docs/introduction) | What devsper is, problem, core concepts |
323
+ | [Architecture](https://docs.devsper.com/docs/architecture) | Planner, Scheduler, Executor, Agents, Tools, Memory, strategies |
324
+ | [Configuration](https://docs.devsper.com/docs/configuration) | TOML schema, locations, env, **credentials** |
325
+ | [Swarm runtime](https://docs.devsper.com/docs/swarm_runtime) | Task lifecycle, flow, map-reduce |
326
+ | [Tools](https://docs.devsper.com/docs/tools) | Registry, runner, smart selection, plugins |
327
+ | [Memory](https://docs.devsper.com/docs/memory_system) | Types, store, retrieval, knowledge graph |
328
+ | [Providers](https://docs.devsper.com/docs/providers) | Provider routing, Azure, GitHub Models, auto routing |
329
+ | [CLI](https://docs.devsper.com/docs/cli) | All commands, **credentials**, completion |
330
+ | [TUI](https://docs.devsper.com/docs/tui) | Layout, panels, shortcuts |
331
+ | [Examples](https://docs.devsper.com/docs/examples) | Workflows and commands |
332
+ | [Development](https://docs.devsper.com/docs/development) | Structure, adding tools/plugins/workflows |
333
+ | [Contributing](CONTRIBUTING.md) | Setup, testing, PR guidelines |
334
+ | [FAQ](https://docs.devsper.com/docs/faq) | Common questions |
335
+
336
+ ---
337
+
338
+ ## Contributing
339
+
340
+ Contributions welcome. See [CONTRIBUTING.md](CONTRIBUTING.md).
341
+
342
+ ---
343
+
344
+ ## License
345
+
346
+ **GPL-3.0-or-later** — see [LICENSE](LICENSE).