agentorch 2.1.0__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. {agentorch-2.1.0 → agentorch-2.2.0}/PKG-INFO +41 -13
  2. {agentorch-2.1.0 → agentorch-2.2.0}/README.md +40 -12
  3. {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/PKG-INFO +41 -13
  4. {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/SOURCES.txt +13 -0
  5. {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/top_level.txt +1 -3
  6. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_cli/main.py +130 -44
  7. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/dashboard_api.py +6 -0
  8. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/installer.py +67 -0
  9. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/calibrate.py +14 -6
  10. agentorch-2.2.0/devtorch_core/metrics/delivery_time.py +70 -0
  11. agentorch-2.2.0/devtorch_core/serve.py +258 -0
  12. agentorch-2.2.0/devtorch_core/templates/__init__.py +6 -0
  13. agentorch-2.2.0/devtorch_core/templates/engine.py +122 -0
  14. agentorch-2.2.0/devtorch_core/templates/go.py +18 -0
  15. agentorch-2.2.0/devtorch_core/templates/infra.py +19 -0
  16. agentorch-2.2.0/devtorch_core/templates/python.py +19 -0
  17. agentorch-2.2.0/devtorch_core/templates/react.py +18 -0
  18. agentorch-2.2.0/devtorch_core/templates/typescript.py +18 -0
  19. {agentorch-2.1.0 → agentorch-2.2.0}/pyproject.toml +1 -1
  20. agentorch-2.2.0/tests/test_s25_delivery_time.py +49 -0
  21. agentorch-2.2.0/tests/test_s25_serve.py +85 -0
  22. agentorch-2.2.0/tests/test_s25_setup_detection.py +76 -0
  23. agentorch-2.2.0/tests/test_s25_templates.py +56 -0
  24. {agentorch-2.1.0 → agentorch-2.2.0}/MANIFEST.in +0 -0
  25. {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/dependency_links.txt +0 -0
  26. {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/entry_points.txt +0 -0
  27. {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/requires.txt +0 -0
  28. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/hidden_profile/run_baseline.py +0 -0
  29. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/hidden_profile/run_devtorch.py +0 -0
  30. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/hidden_profile/score.py +0 -0
  31. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/compare.py +0 -0
  32. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/context_utils.py +0 -0
  33. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/evaluate.py +0 -0
  34. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/patch_utils.py +0 -0
  35. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/run_baseline.py +0 -0
  36. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/run_devtorch.py +0 -0
  37. {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/seed_gcc.py +0 -0
  38. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_cli/__init__.py +0 -0
  39. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_cli/__main__.py +0 -0
  40. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/__init__.py +0 -0
  41. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/aggphi_textual.py +0 -0
  42. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/__init__.py +0 -0
  43. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/base.py +0 -0
  44. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/config.py +0 -0
  45. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/dispatcher.py +0 -0
  46. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/jira.py +0 -0
  47. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/linear.py +0 -0
  48. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/pagerduty.py +0 -0
  49. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/slack.py +0 -0
  50. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/teams.py +0 -0
  51. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/broadcast/__init__.py +0 -0
  52. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/broadcast/broadcaster.py +0 -0
  53. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/broadcast/watcher.py +0 -0
  54. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/capability.py +0 -0
  55. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/__init__.py +0 -0
  56. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_config.py +0 -0
  57. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.claude-opencode-fallback.json +0 -0
  58. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.claude-stdio.json +0 -0
  59. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.cursor-mcp.json +0 -0
  60. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.opencode-bridge.json +0 -0
  61. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.opencode.json +0 -0
  62. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.vscode-mcp.json +0 -0
  63. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/devtorch-mcp-bridge.js +0 -0
  64. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/codex/__init__.py +0 -0
  65. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/codex/__main__.py +0 -0
  66. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/codex/capture.py +0 -0
  67. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/codex/proxy.py +0 -0
  68. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/consolidation/__init__.py +0 -0
  69. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/consolidation/synthesizer.py +0 -0
  70. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/consolidation/workflow.py +0 -0
  71. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/deltaf.py +0 -0
  72. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/disclosure.py +0 -0
  73. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/divergence/__init__.py +0 -0
  74. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/divergence/detector.py +0 -0
  75. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/__init__.py +0 -0
  76. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/key_manager.py +0 -0
  77. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/metrics_webhook.py +0 -0
  78. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/policy.py +0 -0
  79. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/server.py +0 -0
  80. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/sso.py +0 -0
  81. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gcc.py +0 -0
  82. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/__init__.py +0 -0
  83. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/app.py +0 -0
  84. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/comment_builder.py +0 -0
  85. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/pat.py +0 -0
  86. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/pr_parser.py +0 -0
  87. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gitlab/__init__.py +0 -0
  88. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hitl/__init__.py +0 -0
  89. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hitl/channels.py +0 -0
  90. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hitl/orchestrator.py +0 -0
  91. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/__init__.py +0 -0
  92. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/claude_code.py +0 -0
  93. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/git_commit.py +0 -0
  94. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/runner.py +0 -0
  95. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/identity/__init__.py +0 -0
  96. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/identity/agent.py +0 -0
  97. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/identity/providers.py +0 -0
  98. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/invariants.py +0 -0
  99. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/mcp/__init__.py +0 -0
  100. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/mcp/auth.py +0 -0
  101. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/mcp/server.py +0 -0
  102. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/__init__.py +0 -0
  103. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/aggregate.py +0 -0
  104. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/calibration.py +0 -0
  105. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/credibility.py +0 -0
  106. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/dhs.py +0 -0
  107. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/mcs.py +0 -0
  108. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/roi.py +0 -0
  109. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/session_writer.py +0 -0
  110. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/shadow_ai.py +0 -0
  111. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/sprint_writer.py +0 -0
  112. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/__init__.py +0 -0
  113. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/datadog.py +0 -0
  114. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/formatter.py +0 -0
  115. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/report.py +0 -0
  116. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/servicenow.py +0 -0
  117. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/splunk.py +0 -0
  118. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/webhook.py +0 -0
  119. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/parser/__init__.py +0 -0
  120. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/parser/blocks.py +0 -0
  121. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/parser/inference.py +0 -0
  122. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/parser/thinking.py +0 -0
  123. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/projects.py +0 -0
  124. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/prompt_artifact.py +0 -0
  125. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/__init__.py +0 -0
  126. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/routes/__init__.py +0 -0
  127. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/routes/anthropic.py +0 -0
  128. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/routes/gemini.py +0 -0
  129. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/routes/openai.py +0 -0
  130. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/server.py +0 -0
  131. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rdp.py +0 -0
  132. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning/__init__.py +0 -0
  133. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning/entry.py +0 -0
  134. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning/store.py +0 -0
  135. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/__init__.py +0 -0
  136. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/augmenter.py +0 -0
  137. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/capture.py +0 -0
  138. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/config.py +0 -0
  139. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/context.py +0 -0
  140. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/__init__.py +0 -0
  141. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/api.py +0 -0
  142. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/composer.py +0 -0
  143. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/embeddings.py +0 -0
  144. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/extractor.py +0 -0
  145. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/models.py +0 -0
  146. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/provenance.py +0 -0
  147. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/recorder.py +0 -0
  148. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/relevance.py +0 -0
  149. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/state.py +0 -0
  150. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/store.py +0 -0
  151. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/prompt.py +0 -0
  152. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep.py +0 -0
  153. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/__init__.py +0 -0
  154. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/merge.py +0 -0
  155. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/node.py +0 -0
  156. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/server.py +0 -0
  157. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/sync.py +0 -0
  158. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/sensitivity.py +0 -0
  159. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/signing.py +0 -0
  160. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/sis.py +0 -0
  161. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/storage.py +0 -0
  162. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/theta.py +0 -0
  163. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/theta_synthesis.py +0 -0
  164. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/variance.py +0 -0
  165. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/__init__.py +0 -0
  166. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/anthropic.py +0 -0
  167. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/base.py +0 -0
  168. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/bedrock.py +0 -0
  169. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/gemini.py +0 -0
  170. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/ollama.py +0 -0
  171. {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/openai.py +0 -0
  172. {agentorch-2.1.0 → agentorch-2.2.0}/docs/generate_faq_pdf.py +0 -0
  173. {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_architecture.py +0 -0
  174. {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_comparison.py +0 -0
  175. {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_coordination.py +0 -0
  176. {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_hashchain.py +0 -0
  177. {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_racp_flow.py +0 -0
  178. {agentorch-2.1.0 → agentorch-2.2.0}/setup.cfg +0 -0
  179. {agentorch-2.1.0 → agentorch-2.2.0}/tests/conftest.py +0 -0
  180. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_backend_factory.py +0 -0
  181. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_broadcast.py +0 -0
  182. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_auth.py +0 -0
  183. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_bridge.py +0 -0
  184. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_integration.py +0 -0
  185. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_sse.py +0 -0
  186. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_storage.py +0 -0
  187. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_doctor_ci.py +0 -0
  188. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_getting_started.py +0 -0
  189. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_github_app.py +0 -0
  190. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_github_pat.py +0 -0
  191. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_hidden_profile_benchmark.py +0 -0
  192. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_rep_merge.py +0 -0
  193. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s0_gcc.py +0 -0
  194. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s10_jetbrains.py +0 -0
  195. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s10_vscode.py +0 -0
  196. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s11_codex.py +0 -0
  197. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s11_hooks_installer.py +0 -0
  198. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s12_github.py +0 -0
  199. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s12_gitlab.py +0 -0
  200. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s13_dashboard_api.py +0 -0
  201. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s13_forensic.py +0 -0
  202. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s14_audit_export.py +0 -0
  203. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s14_ciso_api.py +0 -0
  204. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s15_rep_network.py +0 -0
  205. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s16_alerts.py +0 -0
  206. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s17a_metrics.py +0 -0
  207. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s17b_observability.py +0 -0
  208. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s17b_sso.py +0 -0
  209. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s18_credibility.py +0 -0
  210. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s18_identity.py +0 -0
  211. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s19_projects.py +0 -0
  212. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s19_reasoning_query.py +0 -0
  213. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s1_branch_merge.py +0 -0
  214. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s20_divergence.py +0 -0
  215. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s20_metrics.py +0 -0
  216. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s20_wrapper_capture.py +0 -0
  217. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s21_hitl.py +0 -0
  218. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s22_swe_bench.py +0 -0
  219. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s22_swe_bench_dry_run.py +0 -0
  220. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s23_reasoning_plus.py +0 -0
  221. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s24_reasoning_plus_learning.py +0 -0
  222. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s2_context.py +0 -0
  223. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s3_sensitivity.py +0 -0
  224. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s4_invariants.py +0 -0
  225. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s4_variance_lock.py +0 -0
  226. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s5_privacy_disclosure.py +0 -0
  227. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s5_rep_sis.py +0 -0
  228. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s6_debug.py +0 -0
  229. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_mcp_hooks.py +0 -0
  230. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_ollama_wrapper.py +0 -0
  231. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_parser.py +0 -0
  232. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_proxy.py +0 -0
  233. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_wrappers.py +0 -0
  234. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7ent_gateway.py +0 -0
  235. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7ent_helm.py +0 -0
  236. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s8_aggphi.py +0 -0
  237. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s8_theta_synthesis.py +0 -0
  238. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s9_gaps.py +0 -0
  239. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_setup_command.py +0 -0
  240. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_setup_targets.py +0 -0
  241. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_signing.py +0 -0
  242. {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_storage_azure.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentorch
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: DevTorch — AI reasoning capture, audit trail, and governance for agent-assisted development
5
5
  Author-email: Hemant Joshi <hemant@flotorch.ai>
6
6
  License: Apache-2.0
@@ -54,7 +54,7 @@ Requires-Dist: agentorch[cloud,embeddings,mcp,proxy,wrapper]; extra == "all"
54
54
 
55
55
  **Local-first AI agent governance.** DevTorch gives multi-agent systems a shared on-disk audit trail, coordination vector, privacy controls, and LLM integration layer — all without a remote service.
56
56
 
57
- > **Latest release:** `agentorch 2.1.0` — Reasoning Plus Learning: semantic relevance, learning deduplication, provenance tracking, LLM-based extraction, and a feedback loop. Install or upgrade with `pip install -U agentorch`.
57
+ > **Latest release:** `agentorch 2.2.0` — Reasoning Plus Learning: semantic relevance, learning deduplication, provenance tracking, LLM-based extraction, and a feedback loop. Install or upgrade with `pip install -U agentorch`.
58
58
 
59
59
  ```bash
60
60
  pip install -U agentorch>=2.1.0
@@ -103,6 +103,14 @@ pip install agentorch
103
103
 
104
104
  **Requirements:** Python 3.10+
105
105
 
106
+ One-liner installer (Linux/macOS/WSL):
107
+
108
+ ```bash
109
+ curl -fsSL https://raw.githubusercontent.com/hemantcgi/DevTorch/main/Implementation/scripts/install.sh | bash
110
+ ```
111
+
112
+ This installs `agentorch` into an isolated virtual environment at `~/.devtorch-venv` and links `devtorch` onto PATH. It also supports `pip install` if you prefer to manage your own environment.
113
+
106
114
  For optional extras:
107
115
 
108
116
  ```bash
@@ -537,11 +545,33 @@ For teams that want a single shared reasoning backend across all projects and ma
537
545
  ```bash
538
546
  cd /path/to/DevTorch/Implementation/deploy/cloudflare-worker
539
547
  cp .env.example .env
540
- # Fill in R2_BUCKET, R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY
541
- ./deploy.sh .env
548
+ # Fill in R2_ACCOUNT_ID, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY
549
+ # Optionally set OPENAI_API_KEY for the DRPL openai embedding backend
550
+ source .env
551
+ ./setup-mcp-server.sh
552
+ ```
553
+
554
+ The script will:
555
+
556
+ 1. Ensure the R2 bucket exists.
557
+ 2. Deploy the Cloudflare Worker.
558
+ 3. Create an org/repo-scoped API key.
559
+ 4. Install the MCP client config for your IDE.
560
+ 5. Run a health check.
561
+
562
+ For CI/CD, the same script runs non-interactively:
563
+
564
+ ```bash
565
+ ./setup-mcp-server.sh --non-interactive \
566
+ --org myorg \
567
+ --repo myproject \
568
+ --ide opencode \
569
+ --openai-key "$OPENAI_API_KEY"
542
570
  ```
543
571
 
544
- The live URL will look like:
572
+ The repository also includes `.github/workflows/deploy-cloudflare-worker.yml`, which runs on every `v*` tag and deploys the Worker (skipping key creation and client config).
573
+
574
+ **Live URL:**
545
575
 
546
576
  ```text
547
577
  https://devtorch-mcp.YOUR_ACCOUNT.workers.dev
@@ -559,21 +589,19 @@ devtorch cloud key create --org myorg --repo myproject
559
589
 
560
590
  ```bash
561
591
  export DEVTORCH_MCP_DOMAIN=devtorch-mcp.YOUR_ACCOUNT.workers.dev
562
- /path/to/DevTorch/Implementation/deploy/cloudflare-worker/install-client-config.sh \
563
- <ide> <org> <repo> <api-key>
592
+ devtorch cloud client-config <ide> --org myorg --repo myproject --api-key <api-key>
564
593
  ```
565
594
 
566
595
  Supported `<ide>` values: `opencode`, `claude`, `cursor`, `vscode`, `stdio`.
567
596
 
568
- **Full walkthrough:** `IDE_SETUP.md` has step-by-step setup for OpenCode, Claude Code, Cursor, VS Code, Kiro, Antigravity, JetBrains, and generic MCP clients.
597
+ **Full walkthrough:** `deploy/cloudflare-worker/README.md` has manual setup details and the full tool list. `IDE_SETUP.md` has step-by-step setup for OpenCode, Claude Code, Cursor, VS Code, Kiro, Antigravity, JetBrains, and generic MCP clients.
569
598
 
570
599
  > **Updating from an older version:** You do **not** need to redeploy the Cloudflare Worker for client-side changes. Just regenerate the IDE config on each machine after upgrading `agentorch`:
571
600
  > ```bash
572
- > pip install -U agentorch>=2.1.0
573
- > export DEVTORCH_MCP_DOMAIN=devtorch-mcp.YOUR_ACCOUNT.workers.dev
574
- > /path/to/DevTorch/Implementation/deploy/cloudflare-worker/install-client-config.sh \
575
- > <ide> <org> <repo> <api-key>
576
- > ```
601
+ > > pip install -U agentorch>=2.1.0
602
+ > > export DEVTORCH_MCP_DOMAIN=devtorch-mcp.YOUR_ACCOUNT.workers.dev
603
+ > > devtorch cloud client-config <ide> --org <org> --repo <repo> --api-key <api-key>
604
+ > > ```
577
605
 
578
606
  ---
579
607
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Local-first AI agent governance.** DevTorch gives multi-agent systems a shared on-disk audit trail, coordination vector, privacy controls, and LLM integration layer — all without a remote service.
4
4
 
5
- > **Latest release:** `agentorch 2.1.0` — Reasoning Plus Learning: semantic relevance, learning deduplication, provenance tracking, LLM-based extraction, and a feedback loop. Install or upgrade with `pip install -U agentorch`.
5
+ > **Latest release:** `agentorch 2.2.0` — Reasoning Plus Learning: semantic relevance, learning deduplication, provenance tracking, LLM-based extraction, and a feedback loop. Install or upgrade with `pip install -U agentorch`.
6
6
 
7
7
  ```bash
8
8
  pip install -U agentorch>=2.1.0
@@ -51,6 +51,14 @@ pip install agentorch
51
51
 
52
52
  **Requirements:** Python 3.10+
53
53
 
54
+ One-liner installer (Linux/macOS/WSL):
55
+
56
+ ```bash
57
+ curl -fsSL https://raw.githubusercontent.com/hemantcgi/DevTorch/main/Implementation/scripts/install.sh | bash
58
+ ```
59
+
60
+ This installs `agentorch` into an isolated virtual environment at `~/.devtorch-venv` and links `devtorch` onto PATH. It also supports `pip install` if you prefer to manage your own environment.
61
+
54
62
  For optional extras:
55
63
 
56
64
  ```bash
@@ -485,11 +493,33 @@ For teams that want a single shared reasoning backend across all projects and ma
485
493
  ```bash
486
494
  cd /path/to/DevTorch/Implementation/deploy/cloudflare-worker
487
495
  cp .env.example .env
488
- # Fill in R2_BUCKET, R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY
489
- ./deploy.sh .env
496
+ # Fill in R2_ACCOUNT_ID, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY
497
+ # Optionally set OPENAI_API_KEY for the DRPL openai embedding backend
498
+ source .env
499
+ ./setup-mcp-server.sh
500
+ ```
501
+
502
+ The script will:
503
+
504
+ 1. Ensure the R2 bucket exists.
505
+ 2. Deploy the Cloudflare Worker.
506
+ 3. Create an org/repo-scoped API key.
507
+ 4. Install the MCP client config for your IDE.
508
+ 5. Run a health check.
509
+
510
+ For CI/CD, the same script runs non-interactively:
511
+
512
+ ```bash
513
+ ./setup-mcp-server.sh --non-interactive \
514
+ --org myorg \
515
+ --repo myproject \
516
+ --ide opencode \
517
+ --openai-key "$OPENAI_API_KEY"
490
518
  ```
491
519
 
492
- The live URL will look like:
520
+ The repository also includes `.github/workflows/deploy-cloudflare-worker.yml`, which runs on every `v*` tag and deploys the Worker (skipping key creation and client config).
521
+
522
+ **Live URL:**
493
523
 
494
524
  ```text
495
525
  https://devtorch-mcp.YOUR_ACCOUNT.workers.dev
@@ -507,21 +537,19 @@ devtorch cloud key create --org myorg --repo myproject
507
537
 
508
538
  ```bash
509
539
  export DEVTORCH_MCP_DOMAIN=devtorch-mcp.YOUR_ACCOUNT.workers.dev
510
- /path/to/DevTorch/Implementation/deploy/cloudflare-worker/install-client-config.sh \
511
- <ide> <org> <repo> <api-key>
540
+ devtorch cloud client-config <ide> --org myorg --repo myproject --api-key <api-key>
512
541
  ```
513
542
 
514
543
  Supported `<ide>` values: `opencode`, `claude`, `cursor`, `vscode`, `stdio`.
515
544
 
516
- **Full walkthrough:** `IDE_SETUP.md` has step-by-step setup for OpenCode, Claude Code, Cursor, VS Code, Kiro, Antigravity, JetBrains, and generic MCP clients.
545
+ **Full walkthrough:** `deploy/cloudflare-worker/README.md` has manual setup details and the full tool list. `IDE_SETUP.md` has step-by-step setup for OpenCode, Claude Code, Cursor, VS Code, Kiro, Antigravity, JetBrains, and generic MCP clients.
517
546
 
518
547
  > **Updating from an older version:** You do **not** need to redeploy the Cloudflare Worker for client-side changes. Just regenerate the IDE config on each machine after upgrading `agentorch`:
519
548
  > ```bash
520
- > pip install -U agentorch>=2.1.0
521
- > export DEVTORCH_MCP_DOMAIN=devtorch-mcp.YOUR_ACCOUNT.workers.dev
522
- > /path/to/DevTorch/Implementation/deploy/cloudflare-worker/install-client-config.sh \
523
- > <ide> <org> <repo> <api-key>
524
- > ```
549
+ > > pip install -U agentorch>=2.1.0
550
+ > > export DEVTORCH_MCP_DOMAIN=devtorch-mcp.YOUR_ACCOUNT.workers.dev
551
+ > > devtorch cloud client-config <ide> --org <org> --repo <repo> --api-key <api-key>
552
+ > > ```
525
553
 
526
554
  ---
527
555
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentorch
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: DevTorch — AI reasoning capture, audit trail, and governance for agent-assisted development
5
5
  Author-email: Hemant Joshi <hemant@flotorch.ai>
6
6
  License: Apache-2.0
@@ -54,7 +54,7 @@ Requires-Dist: agentorch[cloud,embeddings,mcp,proxy,wrapper]; extra == "all"
54
54
 
55
55
  **Local-first AI agent governance.** DevTorch gives multi-agent systems a shared on-disk audit trail, coordination vector, privacy controls, and LLM integration layer — all without a remote service.
56
56
 
57
- > **Latest release:** `agentorch 2.1.0` — Reasoning Plus Learning: semantic relevance, learning deduplication, provenance tracking, LLM-based extraction, and a feedback loop. Install or upgrade with `pip install -U agentorch`.
57
+ > **Latest release:** `agentorch 2.2.0` — Reasoning Plus Learning: semantic relevance, learning deduplication, provenance tracking, LLM-based extraction, and a feedback loop. Install or upgrade with `pip install -U agentorch`.
58
58
 
59
59
  ```bash
60
60
  pip install -U agentorch>=2.1.0
@@ -103,6 +103,14 @@ pip install agentorch
103
103
 
104
104
  **Requirements:** Python 3.10+
105
105
 
106
+ One-liner installer (Linux/macOS/WSL):
107
+
108
+ ```bash
109
+ curl -fsSL https://raw.githubusercontent.com/hemantcgi/DevTorch/main/Implementation/scripts/install.sh | bash
110
+ ```
111
+
112
+ This installs `agentorch` into an isolated virtual environment at `~/.devtorch-venv` and links `devtorch` onto PATH. It also supports `pip install` if you prefer to manage your own environment.
113
+
106
114
  For optional extras:
107
115
 
108
116
  ```bash
@@ -537,11 +545,33 @@ For teams that want a single shared reasoning backend across all projects and ma
537
545
  ```bash
538
546
  cd /path/to/DevTorch/Implementation/deploy/cloudflare-worker
539
547
  cp .env.example .env
540
- # Fill in R2_BUCKET, R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY
541
- ./deploy.sh .env
548
+ # Fill in R2_ACCOUNT_ID, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY
549
+ # Optionally set OPENAI_API_KEY for the DRPL openai embedding backend
550
+ source .env
551
+ ./setup-mcp-server.sh
552
+ ```
553
+
554
+ The script will:
555
+
556
+ 1. Ensure the R2 bucket exists.
557
+ 2. Deploy the Cloudflare Worker.
558
+ 3. Create an org/repo-scoped API key.
559
+ 4. Install the MCP client config for your IDE.
560
+ 5. Run a health check.
561
+
562
+ For CI/CD, the same script runs non-interactively:
563
+
564
+ ```bash
565
+ ./setup-mcp-server.sh --non-interactive \
566
+ --org myorg \
567
+ --repo myproject \
568
+ --ide opencode \
569
+ --openai-key "$OPENAI_API_KEY"
542
570
  ```
543
571
 
544
- The live URL will look like:
572
+ The repository also includes `.github/workflows/deploy-cloudflare-worker.yml`, which runs on every `v*` tag and deploys the Worker (skipping key creation and client config).
573
+
574
+ **Live URL:**
545
575
 
546
576
  ```text
547
577
  https://devtorch-mcp.YOUR_ACCOUNT.workers.dev
@@ -559,21 +589,19 @@ devtorch cloud key create --org myorg --repo myproject
559
589
 
560
590
  ```bash
561
591
  export DEVTORCH_MCP_DOMAIN=devtorch-mcp.YOUR_ACCOUNT.workers.dev
562
- /path/to/DevTorch/Implementation/deploy/cloudflare-worker/install-client-config.sh \
563
- <ide> <org> <repo> <api-key>
592
+ devtorch cloud client-config <ide> --org myorg --repo myproject --api-key <api-key>
564
593
  ```
565
594
 
566
595
  Supported `<ide>` values: `opencode`, `claude`, `cursor`, `vscode`, `stdio`.
567
596
 
568
- **Full walkthrough:** `IDE_SETUP.md` has step-by-step setup for OpenCode, Claude Code, Cursor, VS Code, Kiro, Antigravity, JetBrains, and generic MCP clients.
597
+ **Full walkthrough:** `deploy/cloudflare-worker/README.md` has manual setup details and the full tool list. `IDE_SETUP.md` has step-by-step setup for OpenCode, Claude Code, Cursor, VS Code, Kiro, Antigravity, JetBrains, and generic MCP clients.
569
598
 
570
599
  > **Updating from an older version:** You do **not** need to redeploy the Cloudflare Worker for client-side changes. Just regenerate the IDE config on each machine after upgrading `agentorch`:
571
600
  > ```bash
572
- > pip install -U agentorch>=2.1.0
573
- > export DEVTORCH_MCP_DOMAIN=devtorch-mcp.YOUR_ACCOUNT.workers.dev
574
- > /path/to/DevTorch/Implementation/deploy/cloudflare-worker/install-client-config.sh \
575
- > <ide> <org> <repo> <api-key>
576
- > ```
601
+ > > pip install -U agentorch>=2.1.0
602
+ > > export DEVTORCH_MCP_DOMAIN=devtorch-mcp.YOUR_ACCOUNT.workers.dev
603
+ > > devtorch cloud client-config <ide> --org <org> --repo <repo> --api-key <api-key>
604
+ > > ```
577
605
 
578
606
  ---
579
607
 
@@ -33,6 +33,7 @@ devtorch_core/prompt_artifact.py
33
33
  devtorch_core/rdp.py
34
34
  devtorch_core/rep.py
35
35
  devtorch_core/sensitivity.py
36
+ devtorch_core/serve.py
36
37
  devtorch_core/signing.py
37
38
  devtorch_core/sis.py
38
39
  devtorch_core/storage.py
@@ -100,6 +101,7 @@ devtorch_core/metrics/aggregate.py
100
101
  devtorch_core/metrics/calibrate.py
101
102
  devtorch_core/metrics/calibration.py
102
103
  devtorch_core/metrics/credibility.py
104
+ devtorch_core/metrics/delivery_time.py
103
105
  devtorch_core/metrics/dhs.py
104
106
  devtorch_core/metrics/mcs.py
105
107
  devtorch_core/metrics/roi.py
@@ -148,6 +150,13 @@ devtorch_core/rep_network/merge.py
148
150
  devtorch_core/rep_network/node.py
149
151
  devtorch_core/rep_network/server.py
150
152
  devtorch_core/rep_network/sync.py
153
+ devtorch_core/templates/__init__.py
154
+ devtorch_core/templates/engine.py
155
+ devtorch_core/templates/go.py
156
+ devtorch_core/templates/infra.py
157
+ devtorch_core/templates/python.py
158
+ devtorch_core/templates/react.py
159
+ devtorch_core/templates/typescript.py
151
160
  devtorch_core/wrapper/__init__.py
152
161
  devtorch_core/wrapper/anthropic.py
153
162
  devtorch_core/wrapper/base.py
@@ -204,6 +213,10 @@ tests/test_s22_swe_bench.py
204
213
  tests/test_s22_swe_bench_dry_run.py
205
214
  tests/test_s23_reasoning_plus.py
206
215
  tests/test_s24_reasoning_plus_learning.py
216
+ tests/test_s25_delivery_time.py
217
+ tests/test_s25_serve.py
218
+ tests/test_s25_setup_detection.py
219
+ tests/test_s25_templates.py
207
220
  tests/test_s2_context.py
208
221
  tests/test_s3_sensitivity.py
209
222
  tests/test_s4_invariants.py
@@ -1,6 +1,4 @@
1
- MagicMock
2
1
  benchmarks
3
- build
4
2
  dashboard
5
3
  deploy
6
4
  devtorch_cli
@@ -9,5 +7,5 @@ dist
9
7
  docs
10
8
  examples
11
9
  extensions
12
- htmlcov
10
+ scripts
13
11
  tests
@@ -13,12 +13,24 @@ from devtorch_core import (
13
13
  OmegaCapability,
14
14
  L_MAX_DEFAULT,
15
15
  )
16
+ from devtorch_core.serve import cmd_serve as _cmd_serve
16
17
 
17
18
 
18
19
  def cmd_init(args: argparse.Namespace) -> int:
19
- repo = GCCRepository.at(Path(args.path).resolve())
20
- repo.init()
21
- print(f"Initialized DevTorch GCC store at {repo.gcc_dir}")
20
+ project_root = Path(args.path).resolve()
21
+ template_name = getattr(args, "template", None)
22
+ if template_name:
23
+ from devtorch_core.templates.engine import apply_template
24
+ try:
25
+ apply_template(project_root, template_name)
26
+ except ValueError as exc:
27
+ print(f"error: {exc}", file=sys.stderr)
28
+ return 1
29
+ print(f"Initialized DevTorch GCC store at {project_root / '.GCC'} with template '{template_name}'")
30
+ else:
31
+ repo = GCCRepository.at(project_root)
32
+ repo.init()
33
+ print(f"Initialized DevTorch GCC store at {repo.gcc_dir}")
22
34
  return 0
23
35
 
24
36
 
@@ -737,6 +749,7 @@ def cmd_today(args: argparse.Namespace) -> int:
737
749
  tokens=False,
738
750
  speedup=False,
739
751
  all_projects=False,
752
+ delivery_time=False,
740
753
  )
741
754
  try:
742
755
  rc = max(rc, cmd_metrics(metrics_args))
@@ -1008,6 +1021,20 @@ def cmd_setup(args: argparse.Namespace) -> int:
1008
1021
 
1009
1022
  print("DevTorch setup\n")
1010
1023
 
1024
+ # ------------------------------------------------------------------ #
1025
+ # Detect IDE(s) and project type
1026
+ # ------------------------------------------------------------------ #
1027
+ from devtorch_core.hooks.installer import (
1028
+ _detect_ides,
1029
+ _detect_project_type,
1030
+ )
1031
+
1032
+ detected_ides = _detect_ides(str(project_root))
1033
+ project_type = _detect_project_type(str(project_root))
1034
+ print(f"Detected project type: {project_type}")
1035
+ print(f"Detected IDE(s): {', '.join(detected_ides) if detected_ides else 'none'}")
1036
+ print()
1037
+
1011
1038
  # ------------------------------------------------------------------ #
1012
1039
  # Step 1: devtorch init
1013
1040
  # ------------------------------------------------------------------ #
@@ -1113,47 +1140,53 @@ def cmd_setup(args: argparse.Namespace) -> int:
1113
1140
  print(f" {fail_mark} AGENTS.md failed: {path_or_err}", file=sys.stderr)
1114
1141
 
1115
1142
  # ------------------------------------------------------------------ #
1116
- # Step 6: Cursor MCP config (.cursor/mcp.json)
1143
+ # Step 6/7: IDE-specific MCP config
1117
1144
  # ------------------------------------------------------------------ #
1118
- target = getattr(args, "target", "claude-code")
1119
- if target == "cursor":
1120
- from devtorch_core.hooks.installer import install_cursor_mcp
1121
- cursor_mcp = project_root / ".cursor" / "mcp.json"
1122
- already = (
1123
- cursor_mcp.exists()
1124
- and "devtorch" in json.loads(cursor_mcp.read_text()).get("mcpServers", {})
1125
- )
1126
- if already:
1127
- print(f" {skip_mark} .cursor/mcp.json MCP entry already present — skipping")
1128
- else:
1129
- ok, path_or_err = install_cursor_mcp(str(project_root))
1130
- if ok:
1131
- print(f" {ok_mark} .cursor/mcp.json MCP server entry added")
1132
- else:
1133
- print(f" {fail_mark} .cursor/mcp.json failed: {path_or_err}", file=sys.stderr)
1134
- print()
1135
- print(" Next: install the VS Code extension in Cursor:")
1136
- print(" Extensions: Install from VSIX... →")
1137
- print(" extensions/vscode/devtorch-0.1.0.vsix")
1145
+ target = getattr(args, "target", None)
1146
+ if target is None or target == "auto":
1147
+ targets = detected_ides if detected_ides else ["claude-code"]
1148
+ else:
1149
+ targets = [target]
1138
1150
 
1139
- # ------------------------------------------------------------------ #
1140
- # Step 7: Antigravity MCP config (mcp_config.json)
1141
- # ------------------------------------------------------------------ #
1142
- elif target == "antigravity":
1143
- from devtorch_core.hooks.installer import install_antigravity_mcp
1144
- ag_mcp = project_root / "mcp_config.json"
1145
- already = (
1146
- ag_mcp.exists()
1147
- and "devtorch" in json.loads(ag_mcp.read_text()).get("mcpServers", {})
1148
- )
1149
- if already:
1150
- print(f" {skip_mark} mcp_config.json MCP entry already present — skipping")
1151
- else:
1152
- ok, path_or_err = install_antigravity_mcp(str(project_root))
1153
- if ok:
1154
- print(f" {ok_mark} mcp_config.json MCP server entry added")
1151
+ from devtorch_core.hooks.installer import (
1152
+ install_cursor_mcp,
1153
+ install_antigravity_mcp,
1154
+ )
1155
+
1156
+ for target in targets:
1157
+ if target == "cursor":
1158
+ cursor_mcp = project_root / ".cursor" / "mcp.json"
1159
+ already = (
1160
+ cursor_mcp.exists()
1161
+ and "devtorch" in json.loads(cursor_mcp.read_text()).get("mcpServers", {})
1162
+ )
1163
+ if already:
1164
+ print(f" {skip_mark} .cursor/mcp.json MCP entry already present — skipping")
1165
+ else:
1166
+ ok, path_or_err = install_cursor_mcp(str(project_root))
1167
+ if ok:
1168
+ print(f" {ok_mark} .cursor/mcp.json MCP server entry added")
1169
+ else:
1170
+ print(f" {fail_mark} .cursor/mcp.json failed: {path_or_err}", file=sys.stderr)
1171
+ print()
1172
+ print(" Next: install the VS Code extension in Cursor:")
1173
+ print(" Extensions: Install from VSIX... →")
1174
+ print(" extensions/vscode/devtorch-0.1.0.vsix")
1175
+
1176
+ elif target == "antigravity":
1177
+ ag_mcp = project_root / "mcp_config.json"
1178
+ already = (
1179
+ ag_mcp.exists()
1180
+ and "devtorch" in json.loads(ag_mcp.read_text()).get("mcpServers", {})
1181
+ )
1182
+ if already:
1183
+ print(f" {skip_mark} mcp_config.json MCP entry already present — skipping")
1155
1184
  else:
1156
- print(f" {fail_mark} mcp_config.json failed: {path_or_err}", file=sys.stderr)
1185
+ ok, path_or_err = install_antigravity_mcp(str(project_root))
1186
+ if ok:
1187
+ print(f" {ok_mark} mcp_config.json MCP server entry added")
1188
+ else:
1189
+ print(f" {fail_mark} mcp_config.json failed: {path_or_err}", file=sys.stderr)
1157
1190
 
1158
1191
  # ------------------------------------------------------------------ #
1159
1192
  # Done
@@ -1211,6 +1244,7 @@ def cmd_metrics(args: argparse.Namespace) -> int:
1211
1244
  import glob as _glob
1212
1245
 
1213
1246
  from devtorch_core.metrics.calibrate import CalibrationStore
1247
+ from devtorch_core.metrics.delivery_time import compute_delivery_time_summary
1214
1248
  from devtorch_core.metrics.shadow_ai import detect_shadow_ai
1215
1249
  from devtorch_core.metrics.dhs import compute_dhs, DHSComponents, dhs_to_label
1216
1250
 
@@ -1364,6 +1398,16 @@ def cmd_metrics(args: argparse.Namespace) -> int:
1364
1398
  dhs_score = 0.0
1365
1399
  dhs_label = "UNAVAILABLE"
1366
1400
 
1401
+ # Sprint 25: complex-problem delivery-time baseline
1402
+ metrics_dir = gcc_dir / "metrics"
1403
+ show_delivery_time = (
1404
+ getattr(args, "delivery_time", False)
1405
+ or "complex_problem_delivery_time_baseline_min" in calibration
1406
+ )
1407
+ delivery_summary = None
1408
+ if show_delivery_time:
1409
+ delivery_summary = compute_delivery_time_summary(metrics_dir, calibration)
1410
+
1367
1411
  # Aggregate session data
1368
1412
  total_tokens_used = sum(s.get("tokens_used", 0) for s in session_files)
1369
1413
  total_tokens_saved = sum(s.get("tokens_saved", 0) for s in session_files)
@@ -1417,6 +1461,13 @@ def cmd_metrics(args: argparse.Namespace) -> int:
1417
1461
  "shadow_ai": shadow,
1418
1462
  "disclosure": disclosure.strip(),
1419
1463
  }
1464
+ if delivery_summary:
1465
+ output["tech_lead"]["complex_problem_delivery_time"] = {
1466
+ "current_min": delivery_summary["complex_problem_delivery_time_current_min"],
1467
+ "baseline_min": delivery_summary["complex_problem_delivery_time_baseline_min"],
1468
+ "delta_vs_baseline_min": delivery_summary["delta_vs_baseline_min"],
1469
+ "tier": delivery_summary["tier"],
1470
+ }
1420
1471
  print(json.dumps(output, indent=2))
1421
1472
  return 0
1422
1473
 
@@ -1436,6 +1487,14 @@ def cmd_metrics(args: argparse.Namespace) -> int:
1436
1487
  print(f" MCS trend: {avg_mcs:.4f} [CALIBRATED]")
1437
1488
  print(f" I3 violations: {total_i3_violations} [MEASURED]")
1438
1489
  print(f" Collisions prevented: {total_collisions_prevented} [CALIBRATED]")
1490
+ if delivery_summary:
1491
+ current = delivery_summary["complex_problem_delivery_time_current_min"]
1492
+ baseline = delivery_summary["complex_problem_delivery_time_baseline_min"]
1493
+ delta = delivery_summary["delta_vs_baseline_min"]
1494
+ print(
1495
+ f" Complex problem delivery time: {current:.1f} min "
1496
+ f"(baseline {baseline:.1f}, delta {delta:+.1f}) {delivery_summary['tier']}"
1497
+ )
1439
1498
 
1440
1499
  print("\n=== CISO ===")
1441
1500
  print(f" DHS score: {dhs_score:.4f} ({dhs_label}) [CALIBRATED]")
@@ -1482,9 +1541,9 @@ def build_parser() -> argparse.ArgumentParser:
1482
1541
  )
1483
1542
  p_setup.add_argument(
1484
1543
  "--target",
1485
- choices=["claude-code", "cursor", "antigravity"],
1486
- default="claude-code",
1487
- help="IDE to configure (default: claude-code).",
1544
+ choices=["claude-code", "cursor", "antigravity", "auto"],
1545
+ default=None,
1546
+ help="IDE to configure (default: auto-detect).",
1488
1547
  )
1489
1548
  p_setup.add_argument(
1490
1549
  "--skip-claude-md",
@@ -1501,8 +1560,29 @@ def build_parser() -> argparse.ArgumentParser:
1501
1560
  p_setup.set_defaults(func=cmd_setup)
1502
1561
 
1503
1562
  p_init = subparsers.add_parser("init", help="Initialize the .GCC layout.")
1563
+ p_init.add_argument(
1564
+ "--template",
1565
+ choices=["python", "typescript", "react", "go", "infra"],
1566
+ default=None,
1567
+ help="Apply a project template with default concepts and governance policy.",
1568
+ )
1504
1569
  p_init.set_defaults(func=cmd_init)
1505
1570
 
1571
+ p_serve = subparsers.add_parser(
1572
+ "serve",
1573
+ help="Start the unified local dev server (proxy + dashboard + broadcast + MCP).",
1574
+ )
1575
+ p_serve.add_argument(
1576
+ "--host", default="127.0.0.1", help="Host interface to bind (default: 127.0.0.1)."
1577
+ )
1578
+ p_serve.add_argument(
1579
+ "--port", type=int, default=8765, help="Port to bind (default: 8765)."
1580
+ )
1581
+ p_serve.add_argument(
1582
+ "--gcc-path", default=None, help="Path to project root containing .GCC (default: auto-detect)."
1583
+ )
1584
+ p_serve.set_defaults(func=_cmd_serve)
1585
+
1506
1586
  p_welcome = subparsers.add_parser(
1507
1587
  "welcome", help="Show a quick getting-started guide."
1508
1588
  )
@@ -1858,6 +1938,12 @@ def build_parser() -> argparse.ArgumentParser:
1858
1938
  dest="all_projects",
1859
1939
  help="Aggregate metrics across all projects in the registry (S19).",
1860
1940
  )
1941
+ p_metrics.add_argument(
1942
+ "--delivery-time",
1943
+ action="store_true",
1944
+ dest="delivery_time",
1945
+ help="Show complex-problem delivery-time baseline and current estimate (S25).",
1946
+ )
1861
1947
  p_metrics.set_defaults(func=cmd_metrics)
1862
1948
 
1863
1949
  # Sprint 19: reasoning subcommand
@@ -46,6 +46,12 @@ try:
46
46
  except ImportError: # pragma: no cover
47
47
  _FASTAPI_AVAILABLE = False
48
48
 
49
+ class BaseModel: # type: ignore[no-redef]
50
+ """Fallback when FastAPI/Pydantic are not installed."""
51
+
52
+ def __init__(self, **data: Any) -> None:
53
+ pass
54
+
49
55
 
50
56
  # ---------------------------------------------------------------------------
51
57
  # Pydantic response models (mirrors src/api/types.ts)