devsper 2.7.2__tar.gz → 3.0.1__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 (747) hide show
  1. {devsper-2.7.2 → devsper-3.0.1}/.gitignore +6 -1
  2. devsper-3.0.1/PKG-INFO +70 -0
  3. devsper-3.0.1/README.md +48 -0
  4. devsper-3.0.1/devsper/__init__.py +2 -0
  5. devsper-3.0.1/devsper/__main__.py +5 -0
  6. devsper-3.0.1/devsper/auth/github.py +100 -0
  7. devsper-3.0.1/devsper/cli.py +362 -0
  8. devsper-3.0.1/devsper/credentials/inject.py +19 -0
  9. devsper-3.0.1/devsper/credentials/providers.py +107 -0
  10. devsper-3.0.1/devsper/credentials/store.py +41 -0
  11. devsper-3.0.1/devsper/eval/runner.py +53 -0
  12. devsper-3.0.1/devsper/eval/scoring.py +96 -0
  13. devsper-3.0.1/devsper/tui/__init__.py +1 -0
  14. devsper-3.0.1/devsper/tui/app.py +149 -0
  15. devsper-3.0.1/pyproject.toml +39 -0
  16. devsper-3.0.1/uv.lock +3961 -0
  17. devsper-2.7.2/.env.example +0 -28
  18. devsper-2.7.2/.github/FUNDING.yml +0 -1
  19. devsper-2.7.2/.github/workflows/pypi-publish.yml +0 -36
  20. devsper-2.7.2/.github/workflows/release-on-tag.yml +0 -56
  21. devsper-2.7.2/.github/workflows/worker-release.yml +0 -106
  22. devsper-2.7.2/.python-version +0 -1
  23. devsper-2.7.2/CHANGELOG.md +0 -535
  24. devsper-2.7.2/CODE_OF_CONDUCT.md +0 -32
  25. devsper-2.7.2/CONTRIBUTING.md +0 -46
  26. devsper-2.7.2/Cargo.lock +0 -2896
  27. devsper-2.7.2/Cargo.toml +0 -3
  28. devsper-2.7.2/Dockerfile.local-pool +0 -22
  29. devsper-2.7.2/LICENSE +0 -639
  30. devsper-2.7.2/PKG-INFO +0 -455
  31. devsper-2.7.2/README.md +0 -361
  32. devsper-2.7.2/SECURITY.md +0 -20
  33. devsper-2.7.2/benchmarks/__init__.py +0 -1
  34. devsper-2.7.2/benchmarks/bench_dataset_analysis.py +0 -28
  35. devsper-2.7.2/benchmarks/bench_repository_analysis.py +0 -28
  36. devsper-2.7.2/benchmarks/bench_research_pipeline.py +0 -28
  37. devsper-2.7.2/branding/logo.svg +0 -3
  38. devsper-2.7.2/devsper/README.md +0 -148
  39. devsper-2.7.2/devsper/__init__.py +0 -36
  40. devsper-2.7.2/devsper/agents/a2a/__init__.py +0 -27
  41. devsper-2.7.2/devsper/agents/a2a/client.py +0 -126
  42. devsper-2.7.2/devsper/agents/a2a/discovery.py +0 -24
  43. devsper-2.7.2/devsper/agents/a2a/server.py +0 -128
  44. devsper-2.7.2/devsper/agents/a2a/tool_adapter.py +0 -68
  45. devsper-2.7.2/devsper/agents/a2a/types.py +0 -49
  46. devsper-2.7.2/devsper/agents/agent.py +0 -1503
  47. devsper-2.7.2/devsper/agents/critic.py +0 -80
  48. devsper-2.7.2/devsper/agents/identity.py +0 -38
  49. devsper-2.7.2/devsper/agents/message_bus.py +0 -124
  50. devsper-2.7.2/devsper/agents/registry.py +0 -46
  51. devsper-2.7.2/devsper/agents/roles.py +0 -205
  52. devsper-2.7.2/devsper/agents/run_agent.py +0 -78
  53. devsper-2.7.2/devsper/analytics/__init__.py +0 -5
  54. devsper-2.7.2/devsper/analytics/tool_analytics.py +0 -78
  55. devsper-2.7.2/devsper/audit/__init__.py +0 -5
  56. devsper-2.7.2/devsper/audit/logger.py +0 -214
  57. devsper-2.7.2/devsper/budget.py +0 -102
  58. devsper-2.7.2/devsper/bus/__init__.py +0 -29
  59. devsper-2.7.2/devsper/bus/backends/__init__.py +0 -5
  60. devsper-2.7.2/devsper/bus/backends/base.py +0 -146
  61. devsper-2.7.2/devsper/bus/backends/memory.py +0 -55
  62. devsper-2.7.2/devsper/bus/backends/redis.py +0 -146
  63. devsper-2.7.2/devsper/bus/message.py +0 -56
  64. devsper-2.7.2/devsper/bus/schema_version.py +0 -3
  65. devsper-2.7.2/devsper/bus/topics.py +0 -21
  66. devsper-2.7.2/devsper/cache/__init__.py +0 -6
  67. devsper-2.7.2/devsper/cache/embedding_index.py +0 -98
  68. devsper-2.7.2/devsper/cache/hashing.py +0 -24
  69. devsper-2.7.2/devsper/cache/store.py +0 -153
  70. devsper-2.7.2/devsper/cache/task_cache.py +0 -191
  71. devsper-2.7.2/devsper/cli/__init__.py +0 -6
  72. devsper-2.7.2/devsper/cli/commands/cloud.py +0 -718
  73. devsper-2.7.2/devsper/cli/export.py +0 -16
  74. devsper-2.7.2/devsper/cli/github_oauth.py +0 -157
  75. devsper-2.7.2/devsper/cli/init.py +0 -706
  76. devsper-2.7.2/devsper/cli/main.py +0 -4335
  77. devsper-2.7.2/devsper/cli/run_progress.py +0 -103
  78. devsper-2.7.2/devsper/cli/ui/__init__.py +0 -67
  79. devsper-2.7.2/devsper/cli/ui/components.py +0 -110
  80. devsper-2.7.2/devsper/cli/ui/controller_run_view.py +0 -129
  81. devsper-2.7.2/devsper/cli/ui/errors.py +0 -104
  82. devsper-2.7.2/devsper/cli/ui/logging.py +0 -120
  83. devsper-2.7.2/devsper/cli/ui/onboarding.py +0 -116
  84. devsper-2.7.2/devsper/cli/ui/progress.py +0 -43
  85. devsper-2.7.2/devsper/cli/ui/run_view.py +0 -854
  86. devsper-2.7.2/devsper/cli/ui/theme.py +0 -67
  87. devsper-2.7.2/devsper/cluster/__init__.py +0 -29
  88. devsper-2.7.2/devsper/cluster/election.py +0 -85
  89. devsper-2.7.2/devsper/cluster/local.py +0 -97
  90. devsper-2.7.2/devsper/cluster/node_info.py +0 -77
  91. devsper-2.7.2/devsper/cluster/registry.py +0 -71
  92. devsper-2.7.2/devsper/cluster/router.py +0 -117
  93. devsper-2.7.2/devsper/cluster/state_backend.py +0 -105
  94. devsper-2.7.2/devsper/compliance/__init__.py +0 -5
  95. devsper-2.7.2/devsper/compliance/pii.py +0 -147
  96. devsper-2.7.2/devsper/config/__init__.py +0 -56
  97. devsper-2.7.2/devsper/config/config_loader.py +0 -121
  98. devsper-2.7.2/devsper/config/defaults.py +0 -79
  99. devsper-2.7.2/devsper/config/resolver.py +0 -421
  100. devsper-2.7.2/devsper/config/schema.py +0 -372
  101. devsper-2.7.2/devsper/connectors/__init__.py +0 -18
  102. devsper-2.7.2/devsper/connectors/base.py +0 -59
  103. devsper-2.7.2/devsper/connectors/registry.py +0 -46
  104. devsper-2.7.2/devsper/connectors/sample_connector.py +0 -74
  105. devsper-2.7.2/devsper/contracts/__init__.py +0 -5
  106. devsper-2.7.2/devsper/contracts/platform_event_type.py +0 -68
  107. devsper-2.7.2/devsper/core/__init__.py +0 -2
  108. devsper-2.7.2/devsper/core/agent/__init__.py +0 -4
  109. devsper-2.7.2/devsper/core/agent/runner.py +0 -14
  110. devsper-2.7.2/devsper/core/hitl/__init__.py +0 -4
  111. devsper-2.7.2/devsper/core/hitl/state_machine.py +0 -53
  112. devsper-2.7.2/devsper/core/memory/__init__.py +0 -4
  113. devsper-2.7.2/devsper/core/memory/shared_memory.py +0 -45
  114. devsper-2.7.2/devsper/core/reporting/__init__.py +0 -4
  115. devsper-2.7.2/devsper/core/reporting/publisher.py +0 -53
  116. devsper-2.7.2/devsper/core/runtime/__init__.py +0 -5
  117. devsper-2.7.2/devsper/core/runtime/durability.py +0 -45
  118. devsper-2.7.2/devsper/core/runtime/orchestrator.py +0 -14
  119. devsper-2.7.2/devsper/core/tools/__init__.py +0 -12
  120. devsper-2.7.2/devsper/core/tools/base_tool.py +0 -17
  121. devsper-2.7.2/devsper/core/tools/loader.py +0 -35
  122. devsper-2.7.2/devsper/core/tools/registry.py +0 -49
  123. devsper-2.7.2/devsper/credentials/__init__.py +0 -19
  124. devsper-2.7.2/devsper/credentials/cli.py +0 -207
  125. devsper-2.7.2/devsper/credentials/migration.py +0 -124
  126. devsper-2.7.2/devsper/credentials/store.py +0 -153
  127. devsper-2.7.2/devsper/dashboard/__init__.py +0 -9
  128. devsper-2.7.2/devsper/dashboard/dashboard.py +0 -87
  129. devsper-2.7.2/devsper/debug_events.py +0 -38
  130. devsper-2.7.2/devsper/dev/__init__.py +0 -25
  131. devsper-2.7.2/devsper/dev/builder.py +0 -195
  132. devsper-2.7.2/devsper/dev/debugger.py +0 -95
  133. devsper-2.7.2/devsper/dev/repo_index.py +0 -138
  134. devsper-2.7.2/devsper/dev/sandbox.py +0 -203
  135. devsper-2.7.2/devsper/dev/scaffold.py +0 -122
  136. devsper-2.7.2/devsper/distributed/__init__.py +0 -7
  137. devsper-2.7.2/devsper/distributed/controller.py +0 -70
  138. devsper-2.7.2/devsper/distributed/worker_runtime.py +0 -43
  139. devsper-2.7.2/devsper/docs/architecture/execution-model.md +0 -12
  140. devsper-2.7.2/devsper/embeddings/__init__.py +0 -5
  141. devsper-2.7.2/devsper/embeddings/service.py +0 -36
  142. devsper-2.7.2/devsper/evals/__init__.py +0 -19
  143. devsper-2.7.2/devsper/evals/dataset.py +0 -107
  144. devsper-2.7.2/devsper/evals/metrics.py +0 -192
  145. devsper-2.7.2/devsper/evals/runner.py +0 -179
  146. devsper-2.7.2/devsper/evals/types.py +0 -114
  147. devsper-2.7.2/devsper/events.py +0 -73
  148. devsper-2.7.2/devsper/explainability/__init__.py +0 -14
  149. devsper-2.7.2/devsper/explainability/decision_tree.py +0 -104
  150. devsper-2.7.2/devsper/explainability/rationale.py +0 -38
  151. devsper-2.7.2/devsper/explainability/simulation.py +0 -56
  152. devsper-2.7.2/devsper/export/__init__.py +0 -5
  153. devsper-2.7.2/devsper/export/branding.py +0 -60
  154. devsper-2.7.2/devsper/export/collector.py +0 -269
  155. devsper-2.7.2/devsper/export/manifest.py +0 -30
  156. devsper-2.7.2/devsper/export/model.py +0 -61
  157. devsper-2.7.2/devsper/export/packager.py +0 -56
  158. devsper-2.7.2/devsper/export/pdf.py +0 -58
  159. devsper-2.7.2/devsper/export/service.py +0 -90
  160. devsper-2.7.2/devsper/export/writers.py +0 -351
  161. devsper-2.7.2/devsper/hitl/__init__.py +0 -13
  162. devsper-2.7.2/devsper/hitl/approval.py +0 -160
  163. devsper-2.7.2/devsper/hitl/escalation.py +0 -95
  164. devsper-2.7.2/devsper/integrations/__init__.py +0 -34
  165. devsper-2.7.2/devsper/integrations/langchain_adapter.py +0 -80
  166. devsper-2.7.2/devsper/integrations/langgraph_adapter.py +0 -151
  167. devsper-2.7.2/devsper/intelligence/__init__.py +0 -9
  168. devsper-2.7.2/devsper/intelligence/adaptation.py +0 -88
  169. devsper-2.7.2/devsper/intelligence/analysis/__init__.py +0 -19
  170. devsper-2.7.2/devsper/intelligence/analysis/analyzer.py +0 -71
  171. devsper-2.7.2/devsper/intelligence/analysis/cost_estimator.py +0 -66
  172. devsper-2.7.2/devsper/intelligence/analysis/formatter.py +0 -103
  173. devsper-2.7.2/devsper/intelligence/analysis/run_report.py +0 -402
  174. devsper-2.7.2/devsper/intelligence/learning_engine.py +0 -92
  175. devsper-2.7.2/devsper/intelligence/strategies/__init__.py +0 -23
  176. devsper-2.7.2/devsper/intelligence/strategies/base.py +0 -14
  177. devsper-2.7.2/devsper/intelligence/strategies/code_analysis_strategy.py +0 -33
  178. devsper-2.7.2/devsper/intelligence/strategies/data_science_strategy.py +0 -33
  179. devsper-2.7.2/devsper/intelligence/strategies/document_pipeline_strategy.py +0 -33
  180. devsper-2.7.2/devsper/intelligence/strategies/experiment_strategy.py +0 -33
  181. devsper-2.7.2/devsper/intelligence/strategies/research_strategy.py +0 -34
  182. devsper-2.7.2/devsper/intelligence/strategy_selector.py +0 -84
  183. devsper-2.7.2/devsper/intelligence/synthesis.py +0 -132
  184. devsper-2.7.2/devsper/intelligence/task_optimizer.py +0 -92
  185. devsper-2.7.2/devsper/knowledge/__init__.py +0 -5
  186. devsper-2.7.2/devsper/knowledge/extractor.py +0 -204
  187. devsper-2.7.2/devsper/knowledge/knowledge_graph.py +0 -184
  188. devsper-2.7.2/devsper/knowledge/query.py +0 -285
  189. devsper-2.7.2/devsper/memory/__init__.py +0 -42
  190. devsper-2.7.2/devsper/memory/consolidation.py +0 -138
  191. devsper-2.7.2/devsper/memory/context.py +0 -134
  192. devsper-2.7.2/devsper/memory/embeddings.py +0 -60
  193. devsper-2.7.2/devsper/memory/memory_index.py +0 -244
  194. devsper-2.7.2/devsper/memory/memory_router.py +0 -142
  195. devsper-2.7.2/devsper/memory/memory_store.py +0 -286
  196. devsper-2.7.2/devsper/memory/memory_types.py +0 -54
  197. devsper-2.7.2/devsper/memory/namespaces.py +0 -45
  198. devsper-2.7.2/devsper/memory/platform_memory.py +0 -95
  199. devsper-2.7.2/devsper/memory/providers/__init__.py +0 -5
  200. devsper-2.7.2/devsper/memory/providers/backends/__init__.py +0 -1
  201. devsper-2.7.2/devsper/memory/providers/backends/platform_backend.py +0 -74
  202. devsper-2.7.2/devsper/memory/providers/backends/redis_backend.py +0 -90
  203. devsper-2.7.2/devsper/memory/providers/backends/snowflake_backend.py +0 -449
  204. devsper-2.7.2/devsper/memory/providers/backends/sqlite_backend.py +0 -83
  205. devsper-2.7.2/devsper/memory/providers/backends/vektori_backend.py +0 -140
  206. devsper-2.7.2/devsper/memory/providers/base.py +0 -125
  207. devsper-2.7.2/devsper/memory/providers/factory.py +0 -162
  208. devsper-2.7.2/devsper/memory/redis_memory.py +0 -167
  209. devsper-2.7.2/devsper/memory/scoring.py +0 -77
  210. devsper-2.7.2/devsper/memory/store.py +0 -10
  211. devsper-2.7.2/devsper/memory/summarizer.py +0 -52
  212. devsper-2.7.2/devsper/memory/supermemory_rust_ranker.py +0 -438
  213. devsper-2.7.2/devsper/missions/__init__.py +0 -16
  214. devsper-2.7.2/devsper/missions/base_agent.py +0 -22
  215. devsper-2.7.2/devsper/missions/coding/__init__.py +0 -13
  216. devsper-2.7.2/devsper/missions/coding/architect_agent.py +0 -10
  217. devsper-2.7.2/devsper/missions/coding/coder_agent.py +0 -10
  218. devsper-2.7.2/devsper/missions/coding/debugger_agent.py +0 -10
  219. devsper-2.7.2/devsper/missions/coding/docs_agent.py +0 -10
  220. devsper-2.7.2/devsper/missions/coding/tester_agent.py +0 -10
  221. devsper-2.7.2/devsper/missions/iteration_loop.py +0 -42
  222. devsper-2.7.2/devsper/missions/mission_memory.py +0 -70
  223. devsper-2.7.2/devsper/missions/mission_planner.py +0 -70
  224. devsper-2.7.2/devsper/missions/mission_runner.py +0 -232
  225. devsper-2.7.2/devsper/missions/models.py +0 -60
  226. devsper-2.7.2/devsper/missions/research/__init__.py +0 -6
  227. devsper-2.7.2/devsper/missions/research/editor_agent.py +0 -10
  228. devsper-2.7.2/devsper/missions/research/researcher_agent.py +0 -10
  229. devsper-2.7.2/devsper/missions/research/reviewer_agent.py +0 -10
  230. devsper-2.7.2/devsper/missions/research/writer_agent.py +0 -10
  231. devsper-2.7.2/devsper/nodes/__init__.py +0 -5
  232. devsper-2.7.2/devsper/nodes/controller.py +0 -1061
  233. devsper-2.7.2/devsper/nodes/rpc.py +0 -127
  234. devsper-2.7.2/devsper/nodes/single.py +0 -162
  235. devsper-2.7.2/devsper/nodes/worker.py +0 -595
  236. devsper-2.7.2/devsper/orchestration/__init__.py +0 -19
  237. devsper-2.7.2/devsper/orchestration/meta_planner.py +0 -239
  238. devsper-2.7.2/devsper/orchestration/priority_queue.py +0 -61
  239. devsper-2.7.2/devsper/platform/__init__.py +0 -1
  240. devsper-2.7.2/devsper/platform/redis_results_sink.py +0 -181
  241. devsper-2.7.2/devsper/platform/reporter.py +0 -104
  242. devsper-2.7.2/devsper/platform/request_builder.py +0 -246
  243. devsper-2.7.2/devsper/platform/run_context.py +0 -53
  244. devsper-2.7.2/devsper/platform/runtime_events.py +0 -304
  245. devsper-2.7.2/devsper/plugins/__init__.py +0 -19
  246. devsper-2.7.2/devsper/plugins/plugin_loader.py +0 -70
  247. devsper-2.7.2/devsper/plugins/plugin_registry.py +0 -34
  248. devsper-2.7.2/devsper/policy/client.py +0 -32
  249. devsper-2.7.2/devsper/pool/__init__.py +0 -2
  250. devsper-2.7.2/devsper/pool/config.py +0 -46
  251. devsper-2.7.2/devsper/pool/crypto.py +0 -75
  252. devsper-2.7.2/devsper/pool/local_pool.py +0 -126
  253. devsper-2.7.2/devsper/pool/manager.py +0 -159
  254. devsper-2.7.2/devsper/pool/models.py +0 -55
  255. devsper-2.7.2/devsper/pool/org_pool.py +0 -38
  256. devsper-2.7.2/devsper/pool/profiles/dev.toml +0 -22
  257. devsper-2.7.2/devsper/pool/profiles/local.toml +0 -24
  258. devsper-2.7.2/devsper/pool/profiles/prod.toml +0 -27
  259. devsper-2.7.2/devsper/pool/security.py +0 -41
  260. devsper-2.7.2/devsper/pool/store.py +0 -203
  261. devsper-2.7.2/devsper/pool/worker_runner.py +0 -95
  262. devsper-2.7.2/devsper/prompt_optimizer/__init__.py +0 -16
  263. devsper-2.7.2/devsper/prompt_optimizer/backends/__init__.py +0 -1
  264. devsper-2.7.2/devsper/prompt_optimizer/backends/dspy_backend.py +0 -205
  265. devsper-2.7.2/devsper/prompt_optimizer/backends/gepa_backend.py +0 -203
  266. devsper-2.7.2/devsper/prompt_optimizer/backends/noop.py +0 -25
  267. devsper-2.7.2/devsper/prompt_optimizer/base.py +0 -56
  268. devsper-2.7.2/devsper/prompt_optimizer/factory.py +0 -102
  269. devsper-2.7.2/devsper/protocol/__init__.py +0 -4
  270. devsper-2.7.2/devsper/protocol/client.py +0 -56
  271. devsper-2.7.2/devsper/protocol/schema.py +0 -47
  272. devsper-2.7.2/devsper/protocol/server.py +0 -74
  273. devsper-2.7.2/devsper/protocols/__init__.py +0 -6
  274. devsper-2.7.2/devsper/providers/__init__.py +0 -34
  275. devsper-2.7.2/devsper/providers/anthropic.py +0 -84
  276. devsper-2.7.2/devsper/providers/base.py +0 -81
  277. devsper-2.7.2/devsper/providers/complexity_router.py +0 -94
  278. devsper-2.7.2/devsper/providers/gemini.py +0 -36
  279. devsper-2.7.2/devsper/providers/github.py +0 -180
  280. devsper-2.7.2/devsper/providers/model_router.py +0 -40
  281. devsper-2.7.2/devsper/providers/openai.py +0 -108
  282. devsper-2.7.2/devsper/providers/router/__init__.py +0 -24
  283. devsper-2.7.2/devsper/providers/router/backends/__init__.py +0 -19
  284. devsper-2.7.2/devsper/providers/router/backends/anthropic_backend.py +0 -111
  285. devsper-2.7.2/devsper/providers/router/backends/custom_backend.py +0 -138
  286. devsper-2.7.2/devsper/providers/router/backends/gemini_backend.py +0 -89
  287. devsper-2.7.2/devsper/providers/router/backends/github_backend.py +0 -165
  288. devsper-2.7.2/devsper/providers/router/backends/ollama_backend.py +0 -104
  289. devsper-2.7.2/devsper/providers/router/backends/openai_backend.py +0 -145
  290. devsper-2.7.2/devsper/providers/router/backends/vllm_backend.py +0 -35
  291. devsper-2.7.2/devsper/providers/router/base.py +0 -60
  292. devsper-2.7.2/devsper/providers/router/factory.py +0 -97
  293. devsper-2.7.2/devsper/providers/router/legacy.py +0 -95
  294. devsper-2.7.2/devsper/providers/router/router.py +0 -135
  295. devsper-2.7.2/devsper/reasoning/__init__.py +0 -12
  296. devsper-2.7.2/devsper/reasoning/graph.py +0 -59
  297. devsper-2.7.2/devsper/reasoning/nodes.py +0 -20
  298. devsper-2.7.2/devsper/reasoning/store.py +0 -67
  299. devsper-2.7.2/devsper/runtime/__init__.py +0 -34
  300. devsper-2.7.2/devsper/runtime/agent_pool.py +0 -85
  301. devsper-2.7.2/devsper/runtime/agent_runner.py +0 -95
  302. devsper-2.7.2/devsper/runtime/clarification_manager.py +0 -294
  303. devsper-2.7.2/devsper/runtime/event_stream.py +0 -58
  304. devsper-2.7.2/devsper/runtime/execution_graph.py +0 -155
  305. devsper-2.7.2/devsper/runtime/executor.py +0 -344
  306. devsper-2.7.2/devsper/runtime/health.py +0 -88
  307. devsper-2.7.2/devsper/runtime/hitl.py +0 -71
  308. devsper-2.7.2/devsper/runtime/model_router.py +0 -53
  309. devsper-2.7.2/devsper/runtime/planner.py +0 -28
  310. devsper-2.7.2/devsper/runtime/replay.py +0 -53
  311. devsper-2.7.2/devsper/runtime/replay_engine.py +0 -142
  312. devsper-2.7.2/devsper/runtime/retry.py +0 -61
  313. devsper-2.7.2/devsper/runtime/run_history.py +0 -204
  314. devsper-2.7.2/devsper/runtime/speculative_planner.py +0 -51
  315. devsper-2.7.2/devsper/runtime/state_manager.py +0 -52
  316. devsper-2.7.2/devsper/runtime/task_runner.py +0 -135
  317. devsper-2.7.2/devsper/runtime/task_state.py +0 -244
  318. devsper-2.7.2/devsper/runtime/telemetry.py +0 -116
  319. devsper-2.7.2/devsper/runtime/tool_runner.py +0 -169
  320. devsper-2.7.2/devsper/runtime/trace_tree.py +0 -78
  321. devsper-2.7.2/devsper/runtime/visualize.py +0 -58
  322. devsper-2.7.2/devsper/sandbox/__init__.py +0 -13
  323. devsper-2.7.2/devsper/sandbox/sandbox.py +0 -161
  324. devsper-2.7.2/devsper/server/__init__.py +0 -3
  325. devsper-2.7.2/devsper/server/events.py +0 -84
  326. devsper-2.7.2/devsper/server/memory_utils.py +0 -475
  327. devsper-2.7.2/devsper/server/swarmworker.py +0 -786
  328. devsper-2.7.2/devsper/server/topology.py +0 -93
  329. devsper-2.7.2/devsper/storage/__init__.py +0 -1
  330. devsper-2.7.2/devsper/storage/uploads/__init__.py +0 -4
  331. devsper-2.7.2/devsper/storage/uploads/store.py +0 -42
  332. devsper-2.7.2/devsper/swarm/checkpointer.py +0 -65
  333. devsper-2.7.2/devsper/swarm/executor.py +0 -708
  334. devsper-2.7.2/devsper/swarm/map_reduce.py +0 -44
  335. devsper-2.7.2/devsper/swarm/planner.py +0 -246
  336. devsper-2.7.2/devsper/swarm/prefetcher.py +0 -91
  337. devsper-2.7.2/devsper/swarm/scheduler.py +0 -169
  338. devsper-2.7.2/devsper/swarm/speculation.py +0 -47
  339. devsper-2.7.2/devsper/swarm/swarm.py +0 -736
  340. devsper-2.7.2/devsper/telemetry/__init__.py +0 -34
  341. devsper-2.7.2/devsper/telemetry/otel.py +0 -175
  342. devsper-2.7.2/devsper/telemetry/pricing.py +0 -27
  343. devsper-2.7.2/devsper/telemetry/trulens.py +0 -119
  344. devsper-2.7.2/devsper/tools/__init__.py +0 -40
  345. devsper-2.7.2/devsper/tools/base.py +0 -52
  346. devsper-2.7.2/devsper/tools/code_intelligence/__init__.py +0 -13
  347. devsper-2.7.2/devsper/tools/code_intelligence/api_surface_extractor.py +0 -73
  348. devsper-2.7.2/devsper/tools/code_intelligence/architecture_analyzer.py +0 -65
  349. devsper-2.7.2/devsper/tools/code_intelligence/codebase_indexer.py +0 -71
  350. devsper-2.7.2/devsper/tools/code_intelligence/dependency_graph_builder.py +0 -67
  351. devsper-2.7.2/devsper/tools/code_intelligence/design_pattern_detector.py +0 -62
  352. devsper-2.7.2/devsper/tools/code_intelligence/large_function_detector.py +0 -68
  353. devsper-2.7.2/devsper/tools/code_intelligence/module_responsibility_mapper.py +0 -56
  354. devsper-2.7.2/devsper/tools/code_intelligence/parallel_codebase_analysis.py +0 -44
  355. devsper-2.7.2/devsper/tools/code_intelligence/refactor_candidate_detector.py +0 -81
  356. devsper-2.7.2/devsper/tools/code_intelligence/repository_semantic_index.py +0 -61
  357. devsper-2.7.2/devsper/tools/code_intelligence/test_coverage_estimator.py +0 -62
  358. devsper-2.7.2/devsper/tools/coding/__init__.py +0 -12
  359. devsper-2.7.2/devsper/tools/coding/analyze_code_complexity.py +0 -48
  360. devsper-2.7.2/devsper/tools/coding/dependency_analyzer.py +0 -42
  361. devsper-2.7.2/devsper/tools/coding/extract_functions.py +0 -38
  362. devsper-2.7.2/devsper/tools/coding/format_python.py +0 -50
  363. devsper-2.7.2/devsper/tools/coding/generate_docstrings.py +0 -40
  364. devsper-2.7.2/devsper/tools/coding/generate_unit_tests.py +0 -42
  365. devsper-2.7.2/devsper/tools/coding/lint_python.py +0 -51
  366. devsper-2.7.2/devsper/tools/coding/refactor_function.py +0 -41
  367. devsper-2.7.2/devsper/tools/coding/repo_structure_map.py +0 -54
  368. devsper-2.7.2/devsper/tools/coding/run_python.py +0 -54
  369. devsper-2.7.2/devsper/tools/data/__init__.py +0 -12
  370. devsper-2.7.2/devsper/tools/data/column_type_detection.py +0 -64
  371. devsper-2.7.2/devsper/tools/data/csv_summary.py +0 -52
  372. devsper-2.7.2/devsper/tools/data/dataframe_filter.py +0 -51
  373. devsper-2.7.2/devsper/tools/data/dataframe_groupby.py +0 -47
  374. devsper-2.7.2/devsper/tools/data/dataframe_stats.py +0 -38
  375. devsper-2.7.2/devsper/tools/data/dataset_sampling.py +0 -55
  376. devsper-2.7.2/devsper/tools/data/dataset_schema.py +0 -45
  377. devsper-2.7.2/devsper/tools/data/json_pretty_print.py +0 -37
  378. devsper-2.7.2/devsper/tools/data/json_query.py +0 -46
  379. devsper-2.7.2/devsper/tools/data/missing_value_report.py +0 -47
  380. devsper-2.7.2/devsper/tools/data_science/__init__.py +0 -13
  381. devsper-2.7.2/devsper/tools/data_science/correlation_heatmap.py +0 -72
  382. devsper-2.7.2/devsper/tools/data_science/dataset_bias_detector.py +0 -49
  383. devsper-2.7.2/devsper/tools/data_science/dataset_distribution_report.py +0 -64
  384. devsper-2.7.2/devsper/tools/data_science/dataset_drift_detector.py +0 -64
  385. devsper-2.7.2/devsper/tools/data_science/dataset_outlier_detector.py +0 -65
  386. devsper-2.7.2/devsper/tools/data_science/dataset_profile.py +0 -76
  387. devsper-2.7.2/devsper/tools/data_science/distributed_dataset_processor.py +0 -54
  388. devsper-2.7.2/devsper/tools/data_science/feature_engineering_suggestions.py +0 -69
  389. devsper-2.7.2/devsper/tools/data_science/feature_importance_estimator.py +0 -82
  390. devsper-2.7.2/devsper/tools/data_science/model_input_validator.py +0 -59
  391. devsper-2.7.2/devsper/tools/data_science/time_series_analyzer.py +0 -57
  392. devsper-2.7.2/devsper/tools/default/__init__.py +0 -15
  393. devsper-2.7.2/devsper/tools/default/fetch_url.py +0 -46
  394. devsper-2.7.2/devsper/tools/default/python_exec.py +0 -37
  395. devsper-2.7.2/devsper/tools/default/read_csv.py +0 -80
  396. devsper-2.7.2/devsper/tools/default/upload_file.py +0 -36
  397. devsper-2.7.2/devsper/tools/default/web_search.py +0 -87
  398. devsper-2.7.2/devsper/tools/documents/__init__.py +0 -11
  399. devsper-2.7.2/devsper/tools/documents/_docproc.py +0 -56
  400. devsper-2.7.2/devsper/tools/documents/document_to_markdown.py +0 -29
  401. devsper-2.7.2/devsper/tools/documents/extract_document_images.py +0 -39
  402. devsper-2.7.2/devsper/tools/documents/extract_document_text.py +0 -29
  403. devsper-2.7.2/devsper/tools/documents/extract_equations.py +0 -36
  404. devsper-2.7.2/devsper/tools/documents/extract_tables.py +0 -47
  405. devsper-2.7.2/devsper/tools/documents/summarize_document.py +0 -42
  406. devsper-2.7.2/devsper/tools/documents/write_latex_document.py +0 -133
  407. devsper-2.7.2/devsper/tools/documents/write_markdown_document.py +0 -89
  408. devsper-2.7.2/devsper/tools/documents/write_word_document.py +0 -149
  409. devsper-2.7.2/devsper/tools/experiments/__init__.py +0 -13
  410. devsper-2.7.2/devsper/tools/experiments/bootstrap_estimator.py +0 -54
  411. devsper-2.7.2/devsper/tools/experiments/experiment_report_generator.py +0 -50
  412. devsper-2.7.2/devsper/tools/experiments/experiment_tracker.py +0 -36
  413. devsper-2.7.2/devsper/tools/experiments/grid_search_runner.py +0 -50
  414. devsper-2.7.2/devsper/tools/experiments/model_benchmark_runner.py +0 -45
  415. devsper-2.7.2/devsper/tools/experiments/monte_carlo_experiment.py +0 -38
  416. devsper-2.7.2/devsper/tools/experiments/parameter_sweep_runner.py +0 -51
  417. devsper-2.7.2/devsper/tools/experiments/result_comparator.py +0 -58
  418. devsper-2.7.2/devsper/tools/experiments/simulation_runner.py +0 -43
  419. devsper-2.7.2/devsper/tools/experiments/statistical_significance_test.py +0 -56
  420. devsper-2.7.2/devsper/tools/experiments/swarm_map_reduce.py +0 -42
  421. devsper-2.7.2/devsper/tools/filesystem/__init__.py +0 -12
  422. devsper-2.7.2/devsper/tools/filesystem/append_file.py +0 -42
  423. devsper-2.7.2/devsper/tools/filesystem/file_hash.py +0 -40
  424. devsper-2.7.2/devsper/tools/filesystem/file_line_count.py +0 -36
  425. devsper-2.7.2/devsper/tools/filesystem/file_metadata.py +0 -38
  426. devsper-2.7.2/devsper/tools/filesystem/file_preview.py +0 -55
  427. devsper-2.7.2/devsper/tools/filesystem/find_large_files.py +0 -50
  428. devsper-2.7.2/devsper/tools/filesystem/list_directory.py +0 -39
  429. devsper-2.7.2/devsper/tools/filesystem/read_file.py +0 -35
  430. devsper-2.7.2/devsper/tools/filesystem/search_files.py +0 -60
  431. devsper-2.7.2/devsper/tools/filesystem/write_file.py +0 -41
  432. devsper-2.7.2/devsper/tools/flagship/__init__.py +0 -15
  433. devsper-2.7.2/devsper/tools/flagship/distributed_document_analysis.py +0 -77
  434. devsper-2.7.2/devsper/tools/flagship/docproc_corpus_pipeline.py +0 -91
  435. devsper-2.7.2/devsper/tools/flagship/repository_semantic_map.py +0 -99
  436. devsper-2.7.2/devsper/tools/flagship/research_graph_builder.py +0 -111
  437. devsper-2.7.2/devsper/tools/flagship/swarm_experiment_runner.py +0 -86
  438. devsper-2.7.2/devsper/tools/hitl_request.py +0 -53
  439. devsper-2.7.2/devsper/tools/knowledge/__init__.py +0 -10
  440. devsper-2.7.2/devsper/tools/knowledge/citation_graph_builder.py +0 -69
  441. devsper-2.7.2/devsper/tools/knowledge/concept_frequency_analyzer.py +0 -74
  442. devsper-2.7.2/devsper/tools/knowledge/corpus_builder.py +0 -66
  443. devsper-2.7.2/devsper/tools/knowledge/cross_document_entity_linker.py +0 -71
  444. devsper-2.7.2/devsper/tools/knowledge/document_corpus_summary.py +0 -68
  445. devsper-2.7.2/devsper/tools/knowledge/document_topic_extractor.py +0 -58
  446. devsper-2.7.2/devsper/tools/knowledge/knowledge_graph_extractor.py +0 -58
  447. devsper-2.7.2/devsper/tools/knowledge/timeline_extractor.py +0 -59
  448. devsper-2.7.2/devsper/tools/math/__init__.py +0 -12
  449. devsper-2.7.2/devsper/tools/math/calculate_expression.py +0 -52
  450. devsper-2.7.2/devsper/tools/math/correlation.py +0 -44
  451. devsper-2.7.2/devsper/tools/math/distribution_summary.py +0 -39
  452. devsper-2.7.2/devsper/tools/math/histogram.py +0 -53
  453. devsper-2.7.2/devsper/tools/math/linear_regression.py +0 -47
  454. devsper-2.7.2/devsper/tools/math/matrix_multiply.py +0 -38
  455. devsper-2.7.2/devsper/tools/math/mean_std.py +0 -35
  456. devsper-2.7.2/devsper/tools/math/monte_carlo_simulation.py +0 -43
  457. devsper-2.7.2/devsper/tools/math/polynomial_fit.py +0 -40
  458. devsper-2.7.2/devsper/tools/math/random_sample.py +0 -36
  459. devsper-2.7.2/devsper/tools/mcp/__init__.py +0 -23
  460. devsper-2.7.2/devsper/tools/mcp/adapter.py +0 -53
  461. devsper-2.7.2/devsper/tools/mcp/client.py +0 -263
  462. devsper-2.7.2/devsper/tools/mcp/discovery.py +0 -64
  463. devsper-2.7.2/devsper/tools/memory/__init__.py +0 -16
  464. devsper-2.7.2/devsper/tools/memory/delete_memory.py +0 -26
  465. devsper-2.7.2/devsper/tools/memory/list_memory.py +0 -35
  466. devsper-2.7.2/devsper/tools/memory/search_memory.py +0 -44
  467. devsper-2.7.2/devsper/tools/memory/store_memory.py +0 -54
  468. devsper-2.7.2/devsper/tools/memory/summarize_memory.py +0 -42
  469. devsper-2.7.2/devsper/tools/memory/tag_memory.py +0 -40
  470. devsper-2.7.2/devsper/tools/pipelines.py +0 -92
  471. devsper-2.7.2/devsper/tools/registry.py +0 -117
  472. devsper-2.7.2/devsper/tools/research/__init__.py +0 -12
  473. devsper-2.7.2/devsper/tools/research/arxiv_download.py +0 -55
  474. devsper-2.7.2/devsper/tools/research/arxiv_search.py +0 -58
  475. devsper-2.7.2/devsper/tools/research/citation_extractor.py +0 -35
  476. devsper-2.7.2/devsper/tools/research/duckduckgo_search.py +0 -42
  477. devsper-2.7.2/devsper/tools/research/paper_metadata_extractor.py +0 -45
  478. devsper-2.7.2/devsper/tools/research/paper_summarizer.py +0 -41
  479. devsper-2.7.2/devsper/tools/research/research_question_generator.py +0 -39
  480. devsper-2.7.2/devsper/tools/research/topic_cluster.py +0 -46
  481. devsper-2.7.2/devsper/tools/research/web_search.py +0 -47
  482. devsper-2.7.2/devsper/tools/research/wikipedia_lookup.py +0 -50
  483. devsper-2.7.2/devsper/tools/research_advanced/__init__.py +0 -14
  484. devsper-2.7.2/devsper/tools/research_advanced/citation_context_extractor.py +0 -60
  485. devsper-2.7.2/devsper/tools/research_advanced/literature_review_generator.py +0 -79
  486. devsper-2.7.2/devsper/tools/research_advanced/methodology_extractor.py +0 -58
  487. devsper-2.7.2/devsper/tools/research_advanced/paper_contribution_extractor.py +0 -50
  488. devsper-2.7.2/devsper/tools/research_advanced/paper_dataset_identifier.py +0 -49
  489. devsper-2.7.2/devsper/tools/research_advanced/paper_method_comparator.py +0 -62
  490. devsper-2.7.2/devsper/tools/research_advanced/paper_similarity_search.py +0 -69
  491. devsper-2.7.2/devsper/tools/research_advanced/paper_trend_analyzer.py +0 -69
  492. devsper-2.7.2/devsper/tools/research_advanced/parallel_document_analyzer.py +0 -56
  493. devsper-2.7.2/devsper/tools/research_advanced/research_gap_finder.py +0 -71
  494. devsper-2.7.2/devsper/tools/research_advanced/research_topic_mapper.py +0 -69
  495. devsper-2.7.2/devsper/tools/research_advanced/swarm_literature_review.py +0 -58
  496. devsper-2.7.2/devsper/tools/scoring/__init__.py +0 -52
  497. devsper-2.7.2/devsper/tools/scoring/report.py +0 -44
  498. devsper-2.7.2/devsper/tools/scoring/scorer.py +0 -39
  499. devsper-2.7.2/devsper/tools/scoring/selector.py +0 -61
  500. devsper-2.7.2/devsper/tools/scoring/store.py +0 -267
  501. devsper-2.7.2/devsper/tools/selector.py +0 -193
  502. devsper-2.7.2/devsper/tools/system/__init__.py +0 -12
  503. devsper-2.7.2/devsper/tools/system/cpu_usage.py +0 -22
  504. devsper-2.7.2/devsper/tools/system/disk_usage.py +0 -35
  505. devsper-2.7.2/devsper/tools/system/environment_variables.py +0 -29
  506. devsper-2.7.2/devsper/tools/system/memory_usage.py +0 -23
  507. devsper-2.7.2/devsper/tools/system/pip_install.py +0 -44
  508. devsper-2.7.2/devsper/tools/system/pip_search.py +0 -29
  509. devsper-2.7.2/devsper/tools/system/process_list.py +0 -34
  510. devsper-2.7.2/devsper/tools/system/python_package_list.py +0 -40
  511. devsper-2.7.2/devsper/tools/system/run_shell_command.py +0 -69
  512. devsper-2.7.2/devsper/tools/system/system_info.py +0 -26
  513. devsper-2.7.2/devsper/tools/tool_runner.py +0 -170
  514. devsper-2.7.2/devsper/tui/__init__.py +0 -5
  515. devsper-2.7.2/devsper/tui/activity_feed_view.py +0 -73
  516. devsper-2.7.2/devsper/tui/adaptive_tasks_view.py +0 -75
  517. devsper-2.7.2/devsper/tui/agent_role_view.py +0 -35
  518. devsper-2.7.2/devsper/tui/app.py +0 -438
  519. devsper-2.7.2/devsper/tui/dashboard_screen.py +0 -309
  520. devsper-2.7.2/devsper/tui/dev_view.py +0 -99
  521. devsper-2.7.2/devsper/tui/inject_screen.py +0 -73
  522. devsper-2.7.2/devsper/tui/knowledge_graph_view.py +0 -46
  523. devsper-2.7.2/devsper/tui/layout.py +0 -43
  524. devsper-2.7.2/devsper/tui/logs_view.py +0 -83
  525. devsper-2.7.2/devsper/tui/memory_view.py +0 -58
  526. devsper-2.7.2/devsper/tui/mission_view.py +0 -44
  527. devsper-2.7.2/devsper/tui/performance_view.py +0 -33
  528. devsper-2.7.2/devsper/tui/reasoning_graph_view.py +0 -39
  529. devsper-2.7.2/devsper/tui/results_view.py +0 -139
  530. devsper-2.7.2/devsper/tui/swarm_view.py +0 -37
  531. devsper-2.7.2/devsper/tui/task_detail_screen.py +0 -55
  532. devsper-2.7.2/devsper/tui/task_view.py +0 -103
  533. devsper-2.7.2/devsper/types/event.py +0 -134
  534. devsper-2.7.2/devsper/types/exceptions.py +0 -21
  535. devsper-2.7.2/devsper/types/swarm.py +0 -41
  536. devsper-2.7.2/devsper/types/task.py +0 -108
  537. devsper-2.7.2/devsper/upgrade/__init__.py +0 -21
  538. devsper-2.7.2/devsper/upgrade/changelog.py +0 -124
  539. devsper-2.7.2/devsper/upgrade/cli.py +0 -145
  540. devsper-2.7.2/devsper/upgrade/installer.py +0 -103
  541. devsper-2.7.2/devsper/upgrade/notifier.py +0 -52
  542. devsper-2.7.2/devsper/upgrade/version_check.py +0 -130
  543. devsper-2.7.2/devsper/utils/event_logger.py +0 -150
  544. devsper-2.7.2/devsper/utils/http.py +0 -43
  545. devsper-2.7.2/devsper/utils/models.py +0 -57
  546. devsper-2.7.2/devsper/visualization/__init__.py +0 -5
  547. devsper-2.7.2/devsper/visualization/dag_export.py +0 -67
  548. devsper-2.7.2/devsper/workflow/__init__.py +0 -18
  549. devsper-2.7.2/devsper/workflow/conditions.py +0 -157
  550. devsper-2.7.2/devsper/workflow/context.py +0 -108
  551. devsper-2.7.2/devsper/workflow/loader.py +0 -201
  552. devsper-2.7.2/devsper/workflow/resolver.py +0 -109
  553. devsper-2.7.2/devsper/workflow/runner.py +0 -562
  554. devsper-2.7.2/devsper/workflow/schema.py +0 -63
  555. devsper-2.7.2/devsper/workflow/validator.py +0 -128
  556. devsper-2.7.2/devsper.toml +0 -68
  557. devsper-2.7.2/docker-compose.yml +0 -11
  558. devsper-2.7.2/examples/_common.py +0 -119
  559. devsper-2.7.2/examples/_config.py +0 -50
  560. devsper-2.7.2/examples/coding/analyze_repository.py +0 -89
  561. devsper-2.7.2/examples/coding/generate_docs.py +0 -66
  562. devsper-2.7.2/examples/coding/refactor_candidates.py +0 -84
  563. devsper-2.7.2/examples/data_science/__init__.py +0 -0
  564. devsper-2.7.2/examples/data_science/dataset_analysis.py +0 -137
  565. devsper-2.7.2/examples/data_science/run_experiments.py +0 -91
  566. devsper-2.7.2/examples/demo_swarm.py +0 -94
  567. devsper-2.7.2/examples/distributed/README.md +0 -138
  568. devsper-2.7.2/examples/distributed/controller.toml +0 -31
  569. devsper-2.7.2/examples/distributed/parallel_survey.py +0 -146
  570. devsper-2.7.2/examples/distributed/run_controller.py +0 -217
  571. devsper-2.7.2/examples/distributed/run_demo.sh +0 -21
  572. devsper-2.7.2/examples/distributed/run_worker.py +0 -257
  573. devsper-2.7.2/examples/distributed/worker.toml +0 -20
  574. devsper-2.7.2/examples/documents/__init__.py +0 -0
  575. devsper-2.7.2/examples/documents/analyze_documents.py +0 -133
  576. devsper-2.7.2/examples/experiments/__init__.py +0 -0
  577. devsper-2.7.2/examples/experiments/monte_carlo_demo.py +0 -73
  578. devsper-2.7.2/examples/experiments/parameter_sweep.py +0 -86
  579. devsper-2.7.2/examples/langchain_agent.py +0 -70
  580. devsper-2.7.2/examples/langgraph_swarm.py +0 -83
  581. devsper-2.7.2/examples/research/__init__.py +0 -0
  582. devsper-2.7.2/examples/research/literature_review.py +0 -130
  583. devsper-2.7.2/examples/research/research_gap_analysis.py +0 -97
  584. devsper-2.7.2/examples/research/research_graph.py +0 -144
  585. devsper-2.7.2/memory_utils.py +0 -10
  586. devsper-2.7.2/pyproject.toml +0 -112
  587. devsper-2.7.2/scripts/README.md +0 -65
  588. devsper-2.7.2/scripts/qa_e2e_stabilization.sh +0 -15
  589. devsper-2.7.2/scripts/seed_tool_scores.py +0 -30
  590. devsper-2.7.2/scripts/test_tool_scoring_cli.sh +0 -27
  591. devsper-2.7.2/scripts/test_tool_scoring_full.sh +0 -31
  592. devsper-2.7.2/scripts/test_tool_scoring_smoke.py +0 -78
  593. devsper-2.7.2/scripts/test_v2_router.py +0 -64
  594. devsper-2.7.2/supermemory-core/Cargo.toml +0 -12
  595. devsper-2.7.2/supermemory-core/src/main.rs +0 -371
  596. devsper-2.7.2/tests/agents/__init__.py +0 -1
  597. devsper-2.7.2/tests/agents/test_roles.py +0 -56
  598. devsper-2.7.2/tests/benchmarks/test_v16_perf.py +0 -123
  599. devsper-2.7.2/tests/integration/test_controller_restart_hitl.py +0 -37
  600. devsper-2.7.2/tests/integration/test_duplicate_event_delivery.py +0 -45
  601. devsper-2.7.2/tests/integration/test_evals_e2e.py +0 -508
  602. devsper-2.7.2/tests/integration/test_event_idempotency.py +0 -34
  603. devsper-2.7.2/tests/integration/test_event_retry.py +0 -54
  604. devsper-2.7.2/tests/integration/test_hitl_pause_resume.py +0 -75
  605. devsper-2.7.2/tests/integration/test_sse_reconnect.py +0 -16
  606. devsper-2.7.2/tests/integration/test_sse_stream.py +0 -54
  607. devsper-2.7.2/tests/integration/test_worker_crash_recovery.py +0 -25
  608. devsper-2.7.2/tests/intelligence/__init__.py +0 -0
  609. devsper-2.7.2/tests/intelligence/test_adaptation.py +0 -60
  610. devsper-2.7.2/tests/intelligence/test_learning_engine.py +0 -55
  611. devsper-2.7.2/tests/intelligence/test_strategy_selector.py +0 -35
  612. devsper-2.7.2/tests/intelligence/test_task_optimizer.py +0 -41
  613. devsper-2.7.2/tests/memory/__init__.py +0 -0
  614. devsper-2.7.2/tests/memory/test_agent_memory_integration.py +0 -69
  615. devsper-2.7.2/tests/memory/test_memory_context_run_scope.py +0 -16
  616. devsper-2.7.2/tests/memory/test_memory_index.py +0 -291
  617. devsper-2.7.2/tests/memory/test_memory_router.py +0 -44
  618. devsper-2.7.2/tests/memory/test_memory_store.py +0 -81
  619. devsper-2.7.2/tests/pool/__init__.py +0 -1
  620. devsper-2.7.2/tests/pool/fixtures.py +0 -31
  621. devsper-2.7.2/tests/pool/test_crypto.py +0 -26
  622. devsper-2.7.2/tests/pool/test_e2e_redis_loop.py +0 -103
  623. devsper-2.7.2/tests/pool/test_heartbeat_eviction.py +0 -37
  624. devsper-2.7.2/tests/pool/test_local_pool.py +0 -30
  625. devsper-2.7.2/tests/pool/test_org_pool.py +0 -29
  626. devsper-2.7.2/tests/pool/test_priority_chain.py +0 -36
  627. devsper-2.7.2/tests/pool/test_rate_limiting.py +0 -20
  628. devsper-2.7.2/tests/reasoning/__init__.py +0 -1
  629. devsper-2.7.2/tests/reasoning/test_reasoning_graph.py +0 -58
  630. devsper-2.7.2/tests/runtime/__init__.py +0 -0
  631. devsper-2.7.2/tests/runtime/test_budget.py +0 -15
  632. devsper-2.7.2/tests/runtime/test_otel_phase1.py +0 -40
  633. devsper-2.7.2/tests/runtime/test_packager.py +0 -9
  634. devsper-2.7.2/tests/runtime/test_protocol_schema.py +0 -13
  635. devsper-2.7.2/tests/runtime/test_replay.py +0 -55
  636. devsper-2.7.2/tests/runtime/test_replay_engine.py +0 -71
  637. devsper-2.7.2/tests/runtime/test_telemetry.py +0 -58
  638. devsper-2.7.2/tests/runtime/test_visualize.py +0 -39
  639. devsper-2.7.2/tests/test_agent.py +0 -37
  640. devsper-2.7.2/tests/test_analysis.py +0 -253
  641. devsper-2.7.2/tests/test_analytics.py +0 -22
  642. devsper-2.7.2/tests/test_auto_model.py +0 -33
  643. devsper-2.7.2/tests/test_clarification.py +0 -318
  644. devsper-2.7.2/tests/test_clarification_multinode.py +0 -147
  645. devsper-2.7.2/tests/test_config_loader.py +0 -48
  646. devsper-2.7.2/tests/test_credentials.py +0 -126
  647. devsper-2.7.2/tests/test_cross_boundary_serialization.py +0 -51
  648. devsper-2.7.2/tests/test_dag_export.py +0 -60
  649. devsper-2.7.2/tests/test_dev_agents.py +0 -53
  650. devsper-2.7.2/tests/test_dev_build_cmd.py +0 -29
  651. devsper-2.7.2/tests/test_dev_debugger.py +0 -29
  652. devsper-2.7.2/tests/test_dev_repo_index.py +0 -27
  653. devsper-2.7.2/tests/test_dev_sandbox.py +0 -51
  654. devsper-2.7.2/tests/test_dev_scaffold.py +0 -56
  655. devsper-2.7.2/tests/test_distributed_bugs.py +0 -50
  656. devsper-2.7.2/tests/test_embeddings_service.py +0 -26
  657. devsper-2.7.2/tests/test_evals.py +0 -290
  658. devsper-2.7.2/tests/test_event_logger.py +0 -15
  659. devsper-2.7.2/tests/test_execution_graph_meta.py +0 -31
  660. devsper-2.7.2/tests/test_executor.py +0 -61
  661. devsper-2.7.2/tests/test_export_runs.py +0 -122
  662. devsper-2.7.2/tests/test_github_provider.py +0 -47
  663. devsper-2.7.2/tests/test_init.py +0 -52
  664. devsper-2.7.2/tests/test_knowledge_graph.py +0 -48
  665. devsper-2.7.2/tests/test_knowledge_query.py +0 -25
  666. devsper-2.7.2/tests/test_langchain_adapter.py +0 -24
  667. devsper-2.7.2/tests/test_langgraph_adapter.py +0 -63
  668. devsper-2.7.2/tests/test_map_reduce.py +0 -20
  669. devsper-2.7.2/tests/test_memory_evolution.py +0 -67
  670. devsper-2.7.2/tests/test_memory_isolation.py +0 -129
  671. devsper-2.7.2/tests/test_missions.py +0 -20
  672. devsper-2.7.2/tests/test_model_router.py +0 -40
  673. devsper-2.7.2/tests/test_planner.py +0 -75
  674. devsper-2.7.2/tests/test_platform_runtime_events.py +0 -66
  675. devsper-2.7.2/tests/test_plugins.py +0 -19
  676. devsper-2.7.2/tests/test_protocols.py +0 -183
  677. devsper-2.7.2/tests/test_router.py +0 -40
  678. devsper-2.7.2/tests/test_scheduler.py +0 -89
  679. devsper-2.7.2/tests/test_speculation.py +0 -60
  680. devsper-2.7.2/tests/test_strategies.py +0 -47
  681. devsper-2.7.2/tests/test_swarm.py +0 -53
  682. devsper-2.7.2/tests/test_task_cache.py +0 -39
  683. devsper-2.7.2/tests/test_tool_scoring.py +0 -204
  684. devsper-2.7.2/tests/test_tool_selector.py +0 -44
  685. devsper-2.7.2/tests/test_upgrade.py +0 -221
  686. devsper-2.7.2/tests/test_v110.py +0 -185
  687. devsper-2.7.2/tests/test_v16.py +0 -144
  688. devsper-2.7.2/tests/test_v17.py +0 -316
  689. devsper-2.7.2/tests/test_v18.py +0 -263
  690. devsper-2.7.2/tests/test_v19.py +0 -257
  691. devsper-2.7.2/tests/test_workflow.py +0 -306
  692. devsper-2.7.2/tests/tools/__init__.py +0 -1
  693. devsper-2.7.2/tests/tools/test_code_intelligence_tools.py +0 -108
  694. devsper-2.7.2/tests/tools/test_coding_tools.py +0 -39
  695. devsper-2.7.2/tests/tools/test_core_tool_registry.py +0 -25
  696. devsper-2.7.2/tests/tools/test_data_science_tools.py +0 -96
  697. devsper-2.7.2/tests/tools/test_data_tools.py +0 -79
  698. devsper-2.7.2/tests/tools/test_document_tools.py +0 -30
  699. devsper-2.7.2/tests/tools/test_experiments_tools.py +0 -99
  700. devsper-2.7.2/tests/tools/test_filesystem_tools.py +0 -116
  701. devsper-2.7.2/tests/tools/test_flagship_tools.py +0 -103
  702. devsper-2.7.2/tests/tools/test_knowledge_tools.py +0 -63
  703. devsper-2.7.2/tests/tools/test_math_tools.py +0 -40
  704. devsper-2.7.2/tests/tools/test_memory_tools.py +0 -65
  705. devsper-2.7.2/tests/tools/test_pipelines.py +0 -57
  706. devsper-2.7.2/tests/tools/test_registry.py +0 -29
  707. devsper-2.7.2/tests/tools/test_research_advanced_tools.py +0 -92
  708. devsper-2.7.2/tests/tools/test_research_tools.py +0 -44
  709. devsper-2.7.2/tests/tools/test_system_tools.py +0 -28
  710. devsper-2.7.2/tests/tools/test_tool_runner.py +0 -51
  711. devsper-2.7.2/uv.lock +0 -5404
  712. devsper-2.7.2/worker/.dockerignore +0 -4
  713. devsper-2.7.2/worker/Cargo.lock +0 -2598
  714. devsper-2.7.2/worker/Cargo.toml +0 -49
  715. devsper-2.7.2/worker/Dockerfile +0 -19
  716. devsper-2.7.2/worker/README.md +0 -51
  717. devsper-2.7.2/worker/src/budget.rs +0 -9
  718. devsper-2.7.2/worker/src/bus.rs +0 -173
  719. devsper-2.7.2/worker/src/claim.rs +0 -65
  720. devsper-2.7.2/worker/src/clarification.rs +0 -118
  721. devsper-2.7.2/worker/src/config.rs +0 -122
  722. devsper-2.7.2/worker/src/controller.rs +0 -383
  723. devsper-2.7.2/worker/src/election.rs +0 -98
  724. devsper-2.7.2/worker/src/error.rs +0 -32
  725. devsper-2.7.2/worker/src/executor.rs +0 -127
  726. devsper-2.7.2/worker/src/health.rs +0 -15
  727. devsper-2.7.2/worker/src/heartbeat.rs +0 -34
  728. devsper-2.7.2/worker/src/lib.rs +0 -27
  729. devsper-2.7.2/worker/src/main.rs +0 -181
  730. devsper-2.7.2/worker/src/metrics.rs +0 -31
  731. devsper-2.7.2/worker/src/reconnect.rs +0 -36
  732. devsper-2.7.2/worker/src/registry.rs +0 -106
  733. devsper-2.7.2/worker/src/router.rs +0 -145
  734. devsper-2.7.2/worker/src/rpc.rs +0 -137
  735. devsper-2.7.2/worker/src/scheduler.rs +0 -133
  736. devsper-2.7.2/worker/src/snapshot.rs +0 -43
  737. devsper-2.7.2/worker/src/telemetry.rs +0 -6
  738. devsper-2.7.2/worker/src/types/agent.rs +0 -54
  739. devsper-2.7.2/worker/src/types/event.rs +0 -70
  740. devsper-2.7.2/worker/src/types/mod.rs +0 -11
  741. devsper-2.7.2/worker/src/types/node.rs +0 -51
  742. devsper-2.7.2/worker/src/types/task.rs +0 -69
  743. devsper-2.7.2/worker/src/worker_node.rs +0 -470
  744. devsper-2.7.2/worker/tests/integration.rs +0 -26
  745. {devsper-2.7.2/devsper/plugins/marketplace → devsper-3.0.1/devsper/auth}/__init__.py +0 -0
  746. {devsper-2.7.2/examples → devsper-3.0.1/devsper/credentials}/__init__.py +0 -0
  747. {devsper-2.7.2/examples/coding → devsper-3.0.1/devsper/eval}/__init__.py +0 -0
@@ -43,6 +43,8 @@ Thumbs.db
43
43
  *.swp
44
44
  *.swo
45
45
  .cursor/
46
+ .claude/
47
+ .worktrees/
46
48
 
47
49
  tmp
48
50
  **/build-errors.log
@@ -51,4 +53,7 @@ node_modules
51
53
 
52
54
  # Rust (workspace and worker crate)
53
55
  target/
54
- worker/target/
56
+ worker/target/.worktrees/
57
+
58
+ # Local-only testing notes
59
+ TESTING.md
devsper-3.0.1/PKG-INFO ADDED
@@ -0,0 +1,70 @@
1
+ Metadata-Version: 2.4
2
+ Name: devsper
3
+ Version: 3.0.1
4
+ Summary: Devsper runtime CLI — self-evolving AI workflow engine
5
+ License: Apache-2.0
6
+ Keywords: AI,agents,runtime,swarm,workflow
7
+ Classifier: Development Status :: 4 - Beta
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Rust
10
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
11
+ Requires-Python: >=3.11
12
+ Requires-Dist: click>=8.0
13
+ Requires-Dist: keyring>=24
14
+ Requires-Dist: rich>=13
15
+ Provides-Extra: eval
16
+ Requires-Dist: openai>=1.0; extra == 'eval'
17
+ Requires-Dist: openevals>=0.1; extra == 'eval'
18
+ Requires-Dist: trulens>=1.0; extra == 'eval'
19
+ Provides-Extra: tui
20
+ Requires-Dist: textual>=0.80; extra == 'tui'
21
+ Description-Content-Type: text/markdown
22
+
23
+ # devsper
24
+
25
+ Self-evolving AI workflow engine — run `.devsper` workflows locally or at scale.
26
+
27
+ ```bash
28
+ pip install devsper
29
+ devsper run workflow.devsper --input topic="transformers"
30
+ ```
31
+
32
+ ## Providers
33
+
34
+ Set any one key and `devsper` picks it up automatically:
35
+
36
+ | Provider | Env var |
37
+ |---|---|
38
+ | Anthropic | `ANTHROPIC_API_KEY` |
39
+ | OpenAI | `OPENAI_API_KEY` |
40
+ | GitHub Models | `GITHUB_TOKEN` |
41
+ | ZAI / GLM | `ZAI_API_KEY` |
42
+ | Azure OpenAI | `AZURE_OPENAI_API_KEY` + `AZURE_OPENAI_ENDPOINT` + `AZURE_OPENAI_DEPLOYMENT` |
43
+ | Azure AI Foundry | `AZURE_FOUNDRY_API_KEY` + `AZURE_FOUNDRY_ENDPOINT` + `AZURE_FOUNDRY_DEPLOYMENT` |
44
+ | LiteLLM proxy | `LITELLM_BASE_URL` |
45
+ | Ollama | `OLLAMA_HOST` (default: `http://localhost:11434`) |
46
+
47
+ Or store credentials in the OS keychain:
48
+
49
+ ```bash
50
+ devsper credentials set anthropic
51
+ devsper auth github # device flow, no API key needed
52
+ devsper auth status # show what's configured
53
+ ```
54
+
55
+ ## Commands
56
+
57
+ ```
58
+ devsper run <workflow.devsper> [--input key=value ...]
59
+ devsper compile <workflow.devsper> [--output <file>]
60
+ devsper peer --listen 0.0.0.0:7000 [--join <addr>]
61
+ devsper inspect <run-id>
62
+ devsper tui # interactive UI (pip install 'devsper[tui]')
63
+ devsper eval run # batch eval (pip install 'devsper[eval]')
64
+ ```
65
+
66
+ ## Links
67
+
68
+ - [Docs](https://docs.devsper.com)
69
+ - [GitHub](https://github.com/devsper-com/runtime)
70
+ - [devsper.com](https://devsper.com)
@@ -0,0 +1,48 @@
1
+ # devsper
2
+
3
+ Self-evolving AI workflow engine — run `.devsper` workflows locally or at scale.
4
+
5
+ ```bash
6
+ pip install devsper
7
+ devsper run workflow.devsper --input topic="transformers"
8
+ ```
9
+
10
+ ## Providers
11
+
12
+ Set any one key and `devsper` picks it up automatically:
13
+
14
+ | Provider | Env var |
15
+ |---|---|
16
+ | Anthropic | `ANTHROPIC_API_KEY` |
17
+ | OpenAI | `OPENAI_API_KEY` |
18
+ | GitHub Models | `GITHUB_TOKEN` |
19
+ | ZAI / GLM | `ZAI_API_KEY` |
20
+ | Azure OpenAI | `AZURE_OPENAI_API_KEY` + `AZURE_OPENAI_ENDPOINT` + `AZURE_OPENAI_DEPLOYMENT` |
21
+ | Azure AI Foundry | `AZURE_FOUNDRY_API_KEY` + `AZURE_FOUNDRY_ENDPOINT` + `AZURE_FOUNDRY_DEPLOYMENT` |
22
+ | LiteLLM proxy | `LITELLM_BASE_URL` |
23
+ | Ollama | `OLLAMA_HOST` (default: `http://localhost:11434`) |
24
+
25
+ Or store credentials in the OS keychain:
26
+
27
+ ```bash
28
+ devsper credentials set anthropic
29
+ devsper auth github # device flow, no API key needed
30
+ devsper auth status # show what's configured
31
+ ```
32
+
33
+ ## Commands
34
+
35
+ ```
36
+ devsper run <workflow.devsper> [--input key=value ...]
37
+ devsper compile <workflow.devsper> [--output <file>]
38
+ devsper peer --listen 0.0.0.0:7000 [--join <addr>]
39
+ devsper inspect <run-id>
40
+ devsper tui # interactive UI (pip install 'devsper[tui]')
41
+ devsper eval run # batch eval (pip install 'devsper[eval]')
42
+ ```
43
+
44
+ ## Links
45
+
46
+ - [Docs](https://docs.devsper.com)
47
+ - [GitHub](https://github.com/devsper-com/runtime)
48
+ - [devsper.com](https://devsper.com)
@@ -0,0 +1,2 @@
1
+ """Devsper runtime — Python CLI/TUI wrapper."""
2
+ __version__ = "2.9.0"
@@ -0,0 +1,5 @@
1
+ """Allow `python -m devsper` invocation."""
2
+ from devsper.cli import main
3
+
4
+ if __name__ == "__main__":
5
+ main()
@@ -0,0 +1,100 @@
1
+ """GitHub device flow authentication."""
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ import os
6
+ import time
7
+ import urllib.parse
8
+ import urllib.request
9
+
10
+ import click
11
+ from rich.console import Console
12
+ from rich.panel import Panel
13
+
14
+ CLIENT_ID_ENV = "DEVSPER_GITHUB_CLIENT_ID"
15
+ DEVICE_CODE_URL = "https://github.com/login/device/code"
16
+ TOKEN_URL = "https://github.com/login/oauth/access_token"
17
+ SCOPE = "read:user"
18
+ TIMEOUT_SECONDS = 900 # 15 minutes
19
+
20
+ console = Console()
21
+
22
+
23
+ def _post_json(url: str, data: dict) -> dict:
24
+ """POST URL-encoded data, return JSON response."""
25
+ encoded = urllib.parse.urlencode(data).encode()
26
+ req = urllib.request.Request(
27
+ url,
28
+ data=encoded,
29
+ headers={"Accept": "application/json"},
30
+ method="POST",
31
+ )
32
+ with urllib.request.urlopen(req) as resp:
33
+ return json.loads(resp.read().decode())
34
+
35
+
36
+ def login() -> str:
37
+ """Run GitHub device flow, return access token.
38
+
39
+ Raises:
40
+ click.ClickException: if CLIENT_ID_ENV is not set or flow fails.
41
+ """
42
+ client_id = os.environ.get(CLIENT_ID_ENV)
43
+ if not client_id:
44
+ raise click.ClickException(
45
+ f"{CLIENT_ID_ENV} not set.\n"
46
+ "Register a GitHub OAuth App at https://github.com/settings/developers\n"
47
+ f"then set: export {CLIENT_ID_ENV}=<your-client-id>"
48
+ )
49
+
50
+ # Request device + user codes
51
+ device_data = _post_json(DEVICE_CODE_URL, {"client_id": client_id, "scope": SCOPE})
52
+
53
+ user_code: str = device_data["user_code"]
54
+ verification_uri: str = device_data["verification_uri"]
55
+ device_code: str = device_data["device_code"]
56
+ interval: int = int(device_data.get("interval", 5))
57
+ expires_in: int = int(device_data.get("expires_in", TIMEOUT_SECONDS))
58
+
59
+ console.print(
60
+ Panel(
61
+ f"[bold]Open this URL in your browser:[/bold]\n\n"
62
+ f" [cyan]{verification_uri}[/cyan]\n\n"
63
+ f"[bold]Enter this code:[/bold]\n\n"
64
+ f" [bold yellow]{user_code}[/bold yellow]",
65
+ title="GitHub Login",
66
+ expand=False,
67
+ )
68
+ )
69
+
70
+ deadline = time.monotonic() + expires_in
71
+ with console.status("[dim]Waiting for GitHub authorization...[/dim]"):
72
+ while time.monotonic() < deadline:
73
+ time.sleep(interval)
74
+ token_data = _post_json(
75
+ TOKEN_URL,
76
+ {
77
+ "client_id": client_id,
78
+ "device_code": device_code,
79
+ "grant_type": "urn:ietf:params:oauth:grant-type:device_code",
80
+ },
81
+ )
82
+
83
+ error = token_data.get("error")
84
+ if error == "authorization_pending":
85
+ continue
86
+ elif error == "slow_down":
87
+ interval += 5
88
+ continue
89
+ elif error == "expired_token":
90
+ raise click.ClickException("Device code expired. Run the command again.")
91
+ elif error == "access_denied":
92
+ raise click.ClickException("Authorization was denied.")
93
+ elif error:
94
+ raise click.ClickException(f"GitHub authorization error: {error}")
95
+
96
+ access_token = token_data.get("access_token")
97
+ if access_token:
98
+ return access_token
99
+
100
+ raise click.ClickException("Timed out waiting for GitHub authorization. Run the command again.")
@@ -0,0 +1,362 @@
1
+ """Thin CLI wrapper — finds and execs the Rust devsper binary."""
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ import os
6
+ import sys
7
+ import shutil
8
+ import pathlib
9
+ from pathlib import Path
10
+
11
+ import click
12
+ from rich.console import Console
13
+ from rich.table import Table
14
+
15
+ from devsper.credentials.inject import inject_credentials
16
+ from devsper.credentials import providers as cred_providers
17
+ from devsper.credentials import store as cred_store
18
+ from devsper.auth import github as github_auth
19
+
20
+ console = Console()
21
+
22
+
23
+ def find_binary() -> str:
24
+ """Find the devsper Rust binary.
25
+
26
+ Search order:
27
+ 1. devsper-runtime on PATH (installed wheel)
28
+ 2. devsper on PATH
29
+ 3. Alongside this package (bundled wheel)
30
+ 4. Cargo build output (dev mode)
31
+ """
32
+ for name in ("devsper-runtime", "devsper"):
33
+ binary = shutil.which(name)
34
+ if binary and _is_rust_binary(binary):
35
+ return binary
36
+
37
+ pkg_dir = pathlib.Path(__file__).parent
38
+ repo_root = pkg_dir.parent.parent
39
+
40
+ candidates = [
41
+ pkg_dir / "bin" / "devsper",
42
+ pkg_dir / "bin" / "devsper.exe",
43
+ repo_root / "target" / "release" / "devsper",
44
+ repo_root / "target" / "debug" / "devsper",
45
+ ]
46
+ for c in candidates:
47
+ if c.exists() and os.access(c, os.X_OK):
48
+ return str(c)
49
+
50
+ click.echo(
51
+ "Error: devsper Rust binary not found.\n"
52
+ "\n"
53
+ "Build with: cargo build --release -p devsper-bin\n"
54
+ "Or install: pip install devsper[runtime]\n",
55
+ err=True,
56
+ )
57
+ sys.exit(1)
58
+
59
+
60
+ def _is_rust_binary(path: str) -> bool:
61
+ """Heuristic: not this Python script."""
62
+ return not path.endswith(".py")
63
+
64
+
65
+ @click.group(invoke_without_command=True, context_settings={"ignore_unknown_options": True})
66
+ @click.pass_context
67
+ @click.argument("args", nargs=-1, type=click.UNPROCESSED)
68
+ def main(ctx: click.Context, args: tuple) -> None:
69
+ """Devsper — self-evolving AI workflow engine.
70
+
71
+ \b
72
+ Commands are passed directly to the Rust runtime:
73
+ devsper run workflow.devsper
74
+ devsper compile workflow.devsper
75
+ devsper peer --listen 0.0.0.0:7000
76
+ devsper inspect <run-id>
77
+
78
+ \b
79
+ Interactive UI:
80
+ devsper tui
81
+ """
82
+ if ctx.invoked_subcommand is not None:
83
+ return
84
+
85
+ if args and args[0] == "tui":
86
+ _launch_tui(list(args[1:]))
87
+ return
88
+
89
+ # Pass-through to Rust binary
90
+ binary = find_binary()
91
+ inject_credentials()
92
+ os.execv(binary, [binary] + list(args))
93
+
94
+
95
+ @main.command(name="tui")
96
+ @click.argument("run_id", required=False, default=None)
97
+ def tui_command(run_id: str | None) -> None:
98
+ """Launch the interactive TUI (requires 'devsper[tui]' extras)."""
99
+ extra_args = ["--run-id", run_id] if run_id else []
100
+ _launch_tui(extra_args)
101
+
102
+
103
+ def _launch_tui(args: list[str]) -> None:
104
+ """Start the Textual TUI application."""
105
+ try:
106
+ from devsper.tui.app import DevSperApp # noqa: PLC0415
107
+ except ImportError:
108
+ click.echo(
109
+ "TUI requires optional dependencies:\n"
110
+ " pip install 'devsper[tui]'\n",
111
+ err=True,
112
+ )
113
+ sys.exit(1)
114
+
115
+ app = DevSperApp(extra_args=args)
116
+ app.run()
117
+
118
+
119
+ # ---------------------------------------------------------------------------
120
+ # credentials group
121
+ # ---------------------------------------------------------------------------
122
+
123
+
124
+ @main.group()
125
+ def credentials() -> None:
126
+ """Manage provider credentials stored in system keyring."""
127
+
128
+
129
+ @credentials.command("set")
130
+ @click.argument("provider", type=click.Choice(list(cred_providers.PROVIDERS.keys())))
131
+ def credentials_set(provider: str) -> None:
132
+ """Store credentials for a provider in the system keyring."""
133
+ p = cred_providers.PROVIDERS[provider]
134
+ console.print(f"\n[bold]Configure {p.display_name}[/bold]\n")
135
+
136
+ for f in p.fields:
137
+ label = f.display_name
138
+ if f.optional:
139
+ default_hint = f.default or ""
140
+ label = f"{label} (optional, default: {default_hint})" if default_hint else f"{label} (optional)"
141
+
142
+ if f.secret:
143
+ value = click.prompt(label, hide_input=True, default="", show_default=False).strip()
144
+ else:
145
+ value = click.prompt(label, default=f.default or "", show_default=bool(f.default)).strip()
146
+
147
+ if value:
148
+ cred_store.set(provider, f.name, value)
149
+ elif f.optional and f.default:
150
+ # Don't store the default — inject.py handles defaults at runtime
151
+ pass
152
+
153
+ console.print(f"\n[green]Credentials for [bold]{p.display_name}[/bold] saved.[/green]\n")
154
+
155
+
156
+ @credentials.command("list")
157
+ def credentials_list() -> None:
158
+ """Show configured providers."""
159
+ table = Table(title="Configured Providers", show_lines=True)
160
+ table.add_column("Provider", style="bold")
161
+ table.add_column("Status")
162
+ table.add_column("Fields configured")
163
+
164
+ for provider_name, provider in cred_providers.PROVIDERS.items():
165
+ field_statuses: list[str] = []
166
+ any_configured = False
167
+
168
+ for f in provider.fields:
169
+ env_val = os.environ.get(f.env_var) if f.env_var else None
170
+ keyring_val = cred_store.get(provider_name, f.name)
171
+
172
+ if env_val:
173
+ display = "[green]set[/green] (env)"
174
+ any_configured = True
175
+ elif keyring_val:
176
+ display = "[green]set[/green] (keyring)"
177
+ any_configured = True
178
+ elif f.default:
179
+ display = f"[dim]default ({f.default})[/dim]"
180
+ else:
181
+ display = "[dim]not set[/dim]"
182
+
183
+ field_statuses.append(f"{f.display_name}: {display}")
184
+
185
+ status = "[green]configured[/green]" if any_configured else "[dim]not configured[/dim]"
186
+ table.add_row(provider.display_name, status, "\n".join(field_statuses))
187
+
188
+ console.print(table)
189
+
190
+
191
+ @credentials.command("remove")
192
+ @click.argument("provider", type=click.Choice(list(cred_providers.PROVIDERS.keys())))
193
+ def credentials_remove(provider: str) -> None:
194
+ """Remove stored credentials for a provider."""
195
+ p = cred_providers.PROVIDERS[provider]
196
+ if not click.confirm(f"Remove all stored credentials for {p.display_name}?"):
197
+ console.print("[dim]Aborted.[/dim]")
198
+ return
199
+
200
+ for f in p.fields:
201
+ cred_store.delete(provider, f.name)
202
+
203
+ console.print(f"[green]Credentials for [bold]{p.display_name}[/bold] removed.[/green]")
204
+
205
+
206
+ # ---------------------------------------------------------------------------
207
+ # auth group
208
+ # ---------------------------------------------------------------------------
209
+
210
+
211
+ @main.group()
212
+ def auth() -> None:
213
+ """Authentication commands."""
214
+
215
+
216
+ @auth.command("github")
217
+ def auth_github() -> None:
218
+ """Login to GitHub via device flow to use GitHub Models."""
219
+ token = github_auth.login()
220
+ cred_store.set("github", "token", token)
221
+ console.print("\n[green]GitHub authentication successful. Token stored in keyring.[/green]\n")
222
+
223
+
224
+ @auth.command("status")
225
+ def auth_status() -> None:
226
+ """Show authentication status for all providers."""
227
+ table = Table(title="Authentication Status", show_lines=True)
228
+ table.add_column("Provider", style="bold")
229
+ table.add_column("Authenticated")
230
+ table.add_column("Source")
231
+
232
+ for provider_name, provider in cred_providers.PROVIDERS.items():
233
+ authenticated = False
234
+ source = ""
235
+
236
+ for f in provider.fields:
237
+ if f.env_var and os.environ.get(f.env_var):
238
+ authenticated = True
239
+ source = "env"
240
+ break
241
+ if cred_store.get(provider_name, f.name):
242
+ authenticated = True
243
+ source = "keyring"
244
+ break
245
+
246
+ auth_cell = "[green]yes[/green]" if authenticated else "[dim]no[/dim]"
247
+ source_cell = source if authenticated else ""
248
+ table.add_row(provider.display_name, auth_cell, source_cell)
249
+
250
+ console.print(table)
251
+
252
+
253
+ # ---------------------------------------------------------------------------
254
+ # eval group
255
+ # ---------------------------------------------------------------------------
256
+
257
+
258
+ @main.group()
259
+ def eval() -> None:
260
+ """Evaluate workflows against datasets."""
261
+
262
+
263
+ @eval.command("run")
264
+ @click.argument("workflow", type=click.Path(exists=True, path_type=Path))
265
+ @click.option(
266
+ "--dataset", "-d",
267
+ required=True,
268
+ type=click.Path(exists=True, path_type=Path),
269
+ help="JSONL dataset file",
270
+ )
271
+ @click.option(
272
+ "--metrics", "-m",
273
+ default="",
274
+ help="Comma-separated metrics: relevance,correctness,groundedness",
275
+ )
276
+ @click.option(
277
+ "--output", "-o",
278
+ default="eval_results.jsonl",
279
+ type=click.Path(),
280
+ help="Output JSONL path",
281
+ )
282
+ @click.option(
283
+ "--score/--no-score",
284
+ default=True,
285
+ help="Run LLM-as-judge scoring (requires devsper[eval])",
286
+ )
287
+ def eval_run(workflow: Path, dataset: Path, metrics: str, output: str, score: bool) -> None:
288
+ """Run a workflow against a dataset and score outputs."""
289
+ from devsper.eval.runner import load_dataset, run_case, save_results # noqa: PLC0415
290
+
291
+ binary = find_binary()
292
+ inject_credentials()
293
+ cases = load_dataset(dataset)
294
+
295
+ console.print(f"\n[bold]Running {len(cases)} eval cases...[/bold]\n")
296
+
297
+ results: list[dict] = []
298
+ with console.status("Running cases...") as status:
299
+ for i, case in enumerate(cases, 1):
300
+ status.update(f"Case {i}/{len(cases)}")
301
+ inputs = case.get("inputs", {"query": case.get("input", "")})
302
+ r = run_case(binary, workflow, inputs)
303
+ if "expected" in case:
304
+ r["expected"] = case["expected"]
305
+ results.append(r)
306
+ icon = "[green]✓[/green]" if r["success"] else "[red]✗[/red]"
307
+ console.print(f" {icon} Case {i}: {r['latency_ms']}ms")
308
+
309
+ if score and metrics:
310
+ metric_list = [m.strip() for m in metrics.split(",") if m.strip()]
311
+ console.print(f"\n[bold]Scoring with: {', '.join(metric_list)}[/bold]")
312
+ try:
313
+ from devsper.eval.scoring import score_results # noqa: PLC0415
314
+ results = score_results(results, metric_list)
315
+ except ImportError as e:
316
+ console.print(f"[yellow]Scoring skipped: {e}[/yellow]")
317
+
318
+ save_results(results, Path(output))
319
+
320
+ passed = sum(1 for r in results if r["success"])
321
+ console.print(f"\n[bold]Results:[/bold] {passed}/{len(results)} passed → {output}\n")
322
+
323
+
324
+ @eval.command("report")
325
+ @click.option(
326
+ "--input", "-i",
327
+ "input_file",
328
+ default="eval_results.jsonl",
329
+ type=click.Path(exists=True),
330
+ )
331
+ @click.option("--last", default=0, help="Show last N results only")
332
+ def eval_report(input_file: str, last: int) -> None:
333
+ """Show eval results as a table."""
334
+ results: list[dict] = []
335
+ with open(input_file) as f:
336
+ for line in f:
337
+ line = line.strip()
338
+ if line:
339
+ results.append(json.loads(line))
340
+
341
+ if last:
342
+ results = results[-last:]
343
+
344
+ table = Table(title=f"Eval Results: {input_file}", show_lines=True)
345
+ table.add_column("#", style="dim")
346
+ table.add_column("Status")
347
+ table.add_column("Input")
348
+ table.add_column("Latency")
349
+ table.add_column("Scores")
350
+
351
+ for i, r in enumerate(results, 1):
352
+ status = "[green]pass[/green]" if r.get("success") else "[red]fail[/red]"
353
+ inputs = r.get("inputs", {})
354
+ input_str = list(inputs.values())[0][:60] if inputs else ""
355
+ latency = f"{r.get('latency_ms', 0)}ms"
356
+ scores = r.get("scores", {})
357
+ score_str = (
358
+ ", ".join(f"{k}: {v:.2f}" for k, v in scores.items()) if scores else "-"
359
+ )
360
+ table.add_row(str(i), status, input_str, latency, score_str)
361
+
362
+ console.print(table)
@@ -0,0 +1,19 @@
1
+ """Inject stored credentials as environment variables before Rust exec."""
2
+ from __future__ import annotations
3
+
4
+ import os
5
+
6
+ from devsper.credentials.providers import PROVIDERS
7
+ from devsper.credentials import store
8
+
9
+
10
+ def inject_credentials() -> None:
11
+ """Read credentials from keyring, set missing env vars. Env vars take priority."""
12
+ for provider in PROVIDERS.values():
13
+ for field in provider.fields:
14
+ if field.env_var and field.env_var not in os.environ:
15
+ value = store.get(provider.name, field.name)
16
+ if value is None and field.default is not None:
17
+ value = field.default
18
+ if value:
19
+ os.environ[field.env_var] = value