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.
- {agentorch-2.1.0 → agentorch-2.2.0}/PKG-INFO +41 -13
- {agentorch-2.1.0 → agentorch-2.2.0}/README.md +40 -12
- {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/PKG-INFO +41 -13
- {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/SOURCES.txt +13 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/top_level.txt +1 -3
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_cli/main.py +130 -44
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/dashboard_api.py +6 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/installer.py +67 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/calibrate.py +14 -6
- agentorch-2.2.0/devtorch_core/metrics/delivery_time.py +70 -0
- agentorch-2.2.0/devtorch_core/serve.py +258 -0
- agentorch-2.2.0/devtorch_core/templates/__init__.py +6 -0
- agentorch-2.2.0/devtorch_core/templates/engine.py +122 -0
- agentorch-2.2.0/devtorch_core/templates/go.py +18 -0
- agentorch-2.2.0/devtorch_core/templates/infra.py +19 -0
- agentorch-2.2.0/devtorch_core/templates/python.py +19 -0
- agentorch-2.2.0/devtorch_core/templates/react.py +18 -0
- agentorch-2.2.0/devtorch_core/templates/typescript.py +18 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/pyproject.toml +1 -1
- agentorch-2.2.0/tests/test_s25_delivery_time.py +49 -0
- agentorch-2.2.0/tests/test_s25_serve.py +85 -0
- agentorch-2.2.0/tests/test_s25_setup_detection.py +76 -0
- agentorch-2.2.0/tests/test_s25_templates.py +56 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/MANIFEST.in +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/dependency_links.txt +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/entry_points.txt +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/agentorch.egg-info/requires.txt +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/hidden_profile/run_baseline.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/hidden_profile/run_devtorch.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/hidden_profile/score.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/compare.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/context_utils.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/evaluate.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/patch_utils.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/run_baseline.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/run_devtorch.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/benchmarks/swe_bench/seed_gcc.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_cli/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_cli/__main__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/aggphi_textual.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/base.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/config.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/dispatcher.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/jira.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/linear.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/pagerduty.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/slack.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/alerts/teams.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/broadcast/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/broadcast/broadcaster.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/broadcast/watcher.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/capability.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_config.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.claude-opencode-fallback.json +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.claude-stdio.json +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.cursor-mcp.json +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.opencode-bridge.json +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.opencode.json +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/client_configs/.vscode-mcp.json +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/cloud/devtorch-mcp-bridge.js +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/codex/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/codex/__main__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/codex/capture.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/codex/proxy.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/consolidation/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/consolidation/synthesizer.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/consolidation/workflow.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/deltaf.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/disclosure.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/divergence/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/divergence/detector.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/key_manager.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/metrics_webhook.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/policy.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/server.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gateway/sso.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gcc.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/app.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/comment_builder.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/pat.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/github/pr_parser.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/gitlab/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hitl/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hitl/channels.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hitl/orchestrator.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/claude_code.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/git_commit.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/hooks/runner.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/identity/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/identity/agent.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/identity/providers.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/invariants.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/mcp/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/mcp/auth.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/mcp/server.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/aggregate.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/calibration.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/credibility.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/dhs.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/mcs.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/roi.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/session_writer.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/shadow_ai.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/metrics/sprint_writer.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/datadog.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/formatter.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/report.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/servicenow.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/splunk.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/observability/webhook.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/parser/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/parser/blocks.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/parser/inference.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/parser/thinking.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/projects.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/prompt_artifact.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/routes/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/routes/anthropic.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/routes/gemini.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/routes/openai.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/proxy/server.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rdp.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning/entry.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning/store.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/augmenter.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/capture.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/config.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/context.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/api.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/composer.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/embeddings.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/extractor.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/models.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/provenance.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/recorder.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/relevance.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/state.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/learning/store.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/reasoning_plus/prompt.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/merge.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/node.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/server.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/rep_network/sync.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/sensitivity.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/signing.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/sis.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/storage.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/theta.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/theta_synthesis.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/variance.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/__init__.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/anthropic.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/base.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/bedrock.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/gemini.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/ollama.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/devtorch_core/wrapper/openai.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/docs/generate_faq_pdf.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_architecture.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_comparison.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_coordination.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_hashchain.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/docs/paper/figures/fig_racp_flow.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/setup.cfg +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/conftest.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_backend_factory.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_broadcast.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_auth.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_bridge.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_integration.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_sse.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_cloud_storage.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_doctor_ci.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_getting_started.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_github_app.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_github_pat.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_hidden_profile_benchmark.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_rep_merge.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s0_gcc.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s10_jetbrains.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s10_vscode.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s11_codex.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s11_hooks_installer.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s12_github.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s12_gitlab.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s13_dashboard_api.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s13_forensic.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s14_audit_export.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s14_ciso_api.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s15_rep_network.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s16_alerts.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s17a_metrics.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s17b_observability.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s17b_sso.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s18_credibility.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s18_identity.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s19_projects.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s19_reasoning_query.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s1_branch_merge.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s20_divergence.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s20_metrics.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s20_wrapper_capture.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s21_hitl.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s22_swe_bench.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s22_swe_bench_dry_run.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s23_reasoning_plus.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s24_reasoning_plus_learning.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s2_context.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s3_sensitivity.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s4_invariants.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s4_variance_lock.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s5_privacy_disclosure.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s5_rep_sis.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s6_debug.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_mcp_hooks.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_ollama_wrapper.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_parser.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_proxy.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7_wrappers.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7ent_gateway.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s7ent_helm.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s8_aggphi.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s8_theta_synthesis.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_s9_gaps.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_setup_command.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_setup_targets.py +0 -0
- {agentorch-2.1.0 → agentorch-2.2.0}/tests/test_signing.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
541
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
>
|
|
575
|
-
>
|
|
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.
|
|
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
|
|
489
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
>
|
|
523
|
-
>
|
|
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.
|
|
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.
|
|
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
|
|
541
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
>
|
|
575
|
-
>
|
|
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
|
|
@@ -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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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:
|
|
1143
|
+
# Step 6/7: IDE-specific MCP config
|
|
1117
1144
|
# ------------------------------------------------------------------ #
|
|
1118
|
-
target = getattr(args, "target",
|
|
1119
|
-
if target == "
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
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
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
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
|
-
|
|
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=
|
|
1487
|
-
help="IDE to configure (default:
|
|
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)
|