agentic-dev-loop 0.13.0__tar.gz → 0.14.2__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.
- {agentic_dev_loop-0.13.0/src/agentic_dev_loop.egg-info → agentic_dev_loop-0.14.2}/PKG-INFO +10 -3
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/README.md +9 -2
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/pyproject.toml +1 -1
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates/trigger-agentic-dev-loop.sh +8 -0
- agentic_dev_loop-0.14.2/src/agentic_dev_loop/viz/__init__.py +16 -0
- agentic_dev_loop-0.14.2/src/agentic_dev_loop/viz/__main__.py +59 -0
- agentic_dev_loop-0.14.2/src/agentic_dev_loop/viz/page.py +11 -0
- agentic_dev_loop-0.14.2/src/agentic_dev_loop/viz/runs_view.py +214 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/viz/server.py +109 -18
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2/src/agentic_dev_loop.egg-info}/PKG-INFO +10 -3
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/SOURCES.txt +5 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_build_viz_page.py +3 -0
- agentic_dev_loop-0.14.2/tests/test_runs_js_filters.py +168 -0
- agentic_dev_loop-0.14.2/tests/test_runs_js_metrics.py +130 -0
- agentic_dev_loop-0.14.2/tests/test_runs_layout.py +76 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_trigger_script.py +47 -0
- agentic_dev_loop-0.14.2/tests/test_unit13_runs_viz.py +233 -0
- agentic_dev_loop-0.13.0/src/agentic_dev_loop/viz/__init__.py +0 -13
- agentic_dev_loop-0.13.0/src/agentic_dev_loop/viz/__main__.py +0 -44
- agentic_dev_loop-0.13.0/src/agentic_dev_loop/viz/page.py +0 -9
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/LICENSE +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/setup.cfg +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/config.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/failure.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/paths.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/profiles/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/profiles/data/dotnet-node.yaml +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/profiles/data/python.yaml +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/results.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/verdict.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/actions.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/agent_error_guide.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/agent_error_guide.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/agents.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/allowlist.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/brief_coverage.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/brief_prompt.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/brief_prompt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/cli.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/completion.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/containers.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/copilot_auth.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/deps.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/dryrun.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/egress_policy.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/egress_proxy.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/extensions/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/extensions/aidlc.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/forbidden.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/graph.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/hostboundary.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/isolation.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/llm.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/loaders.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/mounts.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/checks.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/doctor.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/init.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/recipes/dotnet-node.yaml +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/recipes/python.yaml +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/recipes.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates/dev.agent.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates/env.example +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates/qa.agent.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates/review.agent.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/upgrade.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/outputs.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/presets.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/proc.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/provider_wire.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/registry.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/run_status.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/run_status_command.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/seccomp/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/seccomp/chromium-userns.json +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/secrets.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/stages.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/step_workspace.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/sync_back.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/py.typed +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/reporting/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/reporting/metrics.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/reporting/render.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/reporting/sources.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/viz/layout.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/dependency_links.txt +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/entry_points.txt +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/requires.txt +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/top_level.txt +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_029_merge_on_conflict.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_033_brief_step.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_035_finalize_nudge.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_036_banned_commands_and_lane_boundary.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_041_brief_coverage.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_046_brief_prompt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_cli.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_doctor.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_init.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_profile_loading.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_profiles.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_recipes.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_schema_lock.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_templates.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_upgrade.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_actions.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_agent_error_guide.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_agents.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_aidlc.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_cli.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_config.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_containers.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_copilot_auth.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_copilot_cli.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_deps.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_dry_run.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_e2e_fixtures.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_egress_proxy.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_graph.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_hostboundary.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_hostboundary_integration.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_isolation.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_isolation_integration.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_isolation_pbt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_llm.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_loaders.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_module_contract.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_outputs.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_outputs_pbt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_proc.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_provider_wire.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_publish.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_qa_prompt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_registry.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_repo_ascii.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_results.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_run_status.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_sdk_compat.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_secrets.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_secrets_integration.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_secrets_pipeline.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_source_resolution.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_stages.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_step_workspace.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_sync_back.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit11.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit11_pbt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit12_reporting.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit5_config.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit5_pbt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit5_pure.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_verdict.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_viz.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_viz_demo.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_viz_layout.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentic-dev-loop
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.2
|
|
4
4
|
Summary: Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.
|
|
5
5
|
Author: Luke Wilson
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -75,8 +75,8 @@ The loop is five layers. You author the first two; the engine owns the rest.
|
|
|
75
75
|
| **Extensions** | Optional plugins: your own actions, tools, and document loaders, loaded from outside the workspace. | You (optional) |
|
|
76
76
|
|
|
77
77
|
Every run is crash-safe (interrupt and resume from the exact checkpoint),
|
|
78
|
-
watchable in a live browser graph view
|
|
79
|
-
until every stage passes. The fixed policies are part of the product - fail
|
|
78
|
+
watchable in a live browser graph view with a browsable run history, and
|
|
79
|
+
gated: nothing gets committed until every stage passes. The fixed policies are part of the product - fail
|
|
80
80
|
fast on missing config or secrets, no silent fallbacks, verdicts only from
|
|
81
81
|
artifacts, bounded retries, and a single clean-worktree-gated commit point.
|
|
82
82
|
|
|
@@ -141,6 +141,13 @@ Other commands:
|
|
|
141
141
|
review, and QA metrics with provenance labels) or a deep dive for one
|
|
142
142
|
12-hex run directory. `--since` / `--until` / `--status` filter the set.
|
|
143
143
|
Reporting is strictly read-only.
|
|
144
|
+
- The live viz also serves a **historical runs view**: click **History** in
|
|
145
|
+
the graph page header (or open `/runs`), or launch it standalone with
|
|
146
|
+
`python -m agentic_dev_loop.viz --history`, which needs no pipeline file
|
|
147
|
+
(default port 8321, falling back to a free port when busy). It lists past
|
|
148
|
+
runs with since / until / status filters, an aggregate metrics panel, and
|
|
149
|
+
a per-run detail page carrying the brief, implementation summary, review
|
|
150
|
+
findings, and QA report.
|
|
144
151
|
- `agentic-dev-loop containers` inspects the engine's sandbox containers and
|
|
145
152
|
networks from the host; `containers --reap` removes registry-owned orphans
|
|
146
153
|
whose owner process is dead. A SIGTERM to a running pipeline still closes
|
|
@@ -30,8 +30,8 @@ The loop is five layers. You author the first two; the engine owns the rest.
|
|
|
30
30
|
| **Extensions** | Optional plugins: your own actions, tools, and document loaders, loaded from outside the workspace. | You (optional) |
|
|
31
31
|
|
|
32
32
|
Every run is crash-safe (interrupt and resume from the exact checkpoint),
|
|
33
|
-
watchable in a live browser graph view
|
|
34
|
-
until every stage passes. The fixed policies are part of the product - fail
|
|
33
|
+
watchable in a live browser graph view with a browsable run history, and
|
|
34
|
+
gated: nothing gets committed until every stage passes. The fixed policies are part of the product - fail
|
|
35
35
|
fast on missing config or secrets, no silent fallbacks, verdicts only from
|
|
36
36
|
artifacts, bounded retries, and a single clean-worktree-gated commit point.
|
|
37
37
|
|
|
@@ -96,6 +96,13 @@ Other commands:
|
|
|
96
96
|
review, and QA metrics with provenance labels) or a deep dive for one
|
|
97
97
|
12-hex run directory. `--since` / `--until` / `--status` filter the set.
|
|
98
98
|
Reporting is strictly read-only.
|
|
99
|
+
- The live viz also serves a **historical runs view**: click **History** in
|
|
100
|
+
the graph page header (or open `/runs`), or launch it standalone with
|
|
101
|
+
`python -m agentic_dev_loop.viz --history`, which needs no pipeline file
|
|
102
|
+
(default port 8321, falling back to a free port when busy). It lists past
|
|
103
|
+
runs with since / until / status filters, an aggregate metrics panel, and
|
|
104
|
+
a per-run detail page carrying the brief, implementation summary, review
|
|
105
|
+
findings, and QA report.
|
|
99
106
|
- `agentic-dev-loop containers` inspects the engine's sandbox containers and
|
|
100
107
|
networks from the host; `containers --reap` removes registry-owned orphans
|
|
101
108
|
whose owner process is dead. A SIGTERM to a running pipeline still closes
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agentic-dev-loop"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.14.2"
|
|
8
8
|
description = "Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -37,6 +37,14 @@ if ! agentic-dev-loop doctor --fast; then
|
|
|
37
37
|
echo "error: doctor --fast still fails after upgrading the engine" >&2
|
|
38
38
|
exit 1
|
|
39
39
|
fi
|
|
40
|
+
# The upgrade rewrites the project pin; commit the bump (only when dirty) so
|
|
41
|
+
# the tooling integrity check passes on the next run instead of failing on
|
|
42
|
+
# an uncommitted pin. Skipped when git is unavailable or the pin is clean.
|
|
43
|
+
if git rev-parse --is-inside-work-tree >/dev/null 2>&1 \
|
|
44
|
+
&& [[ -n "$(git status --porcelain -- agentic-dev-loop/.engine-version)" ]]; then
|
|
45
|
+
git add agentic-dev-loop/.engine-version
|
|
46
|
+
git commit -m "Upgrade engine"
|
|
47
|
+
fi
|
|
40
48
|
fi
|
|
41
49
|
|
|
42
50
|
# Document loader selection - exactly one of:
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""The live-graph visualiser and the historical runs view."""
|
|
2
|
+
|
|
3
|
+
import time # noqa: F401 - re-exported so tests can pin NodeWatch's clock
|
|
4
|
+
|
|
5
|
+
from . import runs_view
|
|
6
|
+
from .server import (MAX_LINE, PAGE, RUNS_PAGE, ConsoleCapture,
|
|
7
|
+
HeartbeatThread, NodeWatch, VizBus, _ReuseSafeServer,
|
|
8
|
+
_Tee, _handler_class, serve_history, serve_viz,
|
|
9
|
+
topology_graph, topology_mermaid, translate)
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"MAX_LINE", "PAGE", "RUNS_PAGE", "ConsoleCapture", "HeartbeatThread",
|
|
13
|
+
"NodeWatch", "VizBus", "_ReuseSafeServer", "_Tee", "_handler_class",
|
|
14
|
+
"runs_view", "serve_history", "serve_viz", "topology_graph",
|
|
15
|
+
"topology_mermaid", "translate",
|
|
16
|
+
]
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Standalone viz launcher.
|
|
2
|
+
|
|
3
|
+
``python -m agentic_dev_loop.viz --pipeline <pipeline.yaml>`` serves the
|
|
4
|
+
live graph on localhost; ``--history`` serves the historical runs view with
|
|
5
|
+
no pipeline file.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import argparse
|
|
11
|
+
import sys
|
|
12
|
+
|
|
13
|
+
from agentic_dev_loop.core.config import load_config
|
|
14
|
+
|
|
15
|
+
from . import VizBus, serve_history, serve_viz, topology_graph
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def main(argv: list[str] | None = None) -> int:
|
|
19
|
+
parser = argparse.ArgumentParser(
|
|
20
|
+
prog="agentic-dev-loop-viz",
|
|
21
|
+
description="Serve the agentic-dev-loop live graph or run history.")
|
|
22
|
+
parser.add_argument("--pipeline",
|
|
23
|
+
help="pipeline YAML for the flowchart topology "
|
|
24
|
+
"(required unless --history)")
|
|
25
|
+
parser.add_argument("--history", action="store_true",
|
|
26
|
+
help="serve the historical runs view without a "
|
|
27
|
+
"pipeline file")
|
|
28
|
+
parser.add_argument("--port", type=int, default=8321,
|
|
29
|
+
help="preferred port (default 8321; free-port "
|
|
30
|
+
"fallback when busy)")
|
|
31
|
+
args = parser.parse_args(argv)
|
|
32
|
+
|
|
33
|
+
if args.history:
|
|
34
|
+
httpd, _thread = serve_history(args.port)
|
|
35
|
+
label = "Run history viz"
|
|
36
|
+
else:
|
|
37
|
+
pipeline = args.pipeline or "pipeline.yaml"
|
|
38
|
+
cfg = load_config(pipeline)
|
|
39
|
+
topology = topology_graph(cfg)
|
|
40
|
+
bus = VizBus()
|
|
41
|
+
httpd, _thread = serve_viz(bus, topology["mermaid"], cfg.name,
|
|
42
|
+
args.port, topology["nodes"],
|
|
43
|
+
topology["flow"], topology["edges"])
|
|
44
|
+
label = "Live graph viz"
|
|
45
|
+
|
|
46
|
+
bound = httpd.server_address[1]
|
|
47
|
+
url = f"http://127.0.0.1:{bound}"
|
|
48
|
+
print(f"{label}: {url}", flush=True)
|
|
49
|
+
if args.port and bound != args.port:
|
|
50
|
+
print(f"viz port {args.port} busy - serving on {url}", flush=True)
|
|
51
|
+
try:
|
|
52
|
+
httpd.serve_forever()
|
|
53
|
+
except KeyboardInterrupt:
|
|
54
|
+
pass
|
|
55
|
+
return 0
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
if __name__ == "__main__":
|
|
59
|
+
sys.exit(main())
|