agentic-dev-loop 0.13.0__tar.gz → 0.14.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.
- {agentic_dev_loop-0.13.0/src/agentic_dev_loop.egg-info → agentic_dev_loop-0.14.0}/PKG-INFO +1 -1
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/pyproject.toml +1 -1
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/templates/trigger-agentic-dev-loop.sh +8 -0
- agentic_dev_loop-0.14.0/src/agentic_dev_loop/viz/__init__.py +16 -0
- agentic_dev_loop-0.14.0/src/agentic_dev_loop/viz/__main__.py +59 -0
- agentic_dev_loop-0.14.0/src/agentic_dev_loop/viz/page.py +11 -0
- agentic_dev_loop-0.14.0/src/agentic_dev_loop/viz/runs_view.py +214 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/viz/server.py +109 -18
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0/src/agentic_dev_loop.egg-info}/PKG-INFO +1 -1
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop.egg-info/SOURCES.txt +2 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_build_viz_page.py +3 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_trigger_script.py +47 -0
- agentic_dev_loop-0.14.0/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.0}/LICENSE +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/README.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/setup.cfg +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/core/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/core/config.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/core/failure.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/core/paths.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/core/profiles/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/core/profiles/data/dotnet-node.yaml +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/core/profiles/data/python.yaml +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/core/results.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/core/verdict.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/actions.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/agent_error_guide.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/agent_error_guide.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/agents.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/allowlist.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/brief_coverage.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/brief_prompt.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/brief_prompt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/cli.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/completion.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/containers.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/copilot_auth.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/deps.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/dryrun.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/egress_policy.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/egress_proxy.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/extensions/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/extensions/aidlc.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/forbidden.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/graph.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/hostboundary.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/isolation.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/llm.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/loaders.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/mounts.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/checks.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/doctor.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/init.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/recipes/dotnet-node.yaml +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/recipes/python.yaml +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/recipes.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/templates/dev.agent.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/templates/env.example +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/templates/qa.agent.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/templates/review.agent.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/templates.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/onboarding/upgrade.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/outputs.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/presets.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/proc.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/provider_wire.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/registry.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/run_status.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/run_status_command.md +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/seccomp/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/seccomp/chromium-userns.json +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/secrets.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/stages.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/step_workspace.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/engine/sync_back.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/py.typed +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/reporting/__init__.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/reporting/metrics.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/reporting/render.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/reporting/sources.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop/viz/layout.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop.egg-info/dependency_links.txt +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop.egg-info/entry_points.txt +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop.egg-info/requires.txt +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/src/agentic_dev_loop.egg-info/top_level.txt +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_029_merge_on_conflict.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_033_brief_step.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_035_finalize_nudge.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_036_banned_commands_and_lane_boundary.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_041_brief_coverage.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_046_brief_prompt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_055_cli.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_055_doctor.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_055_init.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_055_profile_loading.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_055_profiles.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_055_recipes.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_055_schema_lock.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_055_templates.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_055_upgrade.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_actions.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_agent_error_guide.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_agents.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_aidlc.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_cli.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_config.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_containers.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_copilot_auth.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_copilot_cli.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_deps.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_dry_run.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_e2e_fixtures.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_egress_proxy.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_graph.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_hostboundary.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_hostboundary_integration.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_isolation.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_isolation_integration.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_isolation_pbt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_llm.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_loaders.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_module_contract.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_outputs.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_outputs_pbt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_proc.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_provider_wire.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_publish.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_qa_prompt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_registry.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_repo_ascii.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_results.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_run_status.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_sdk_compat.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_secrets.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_secrets_integration.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_secrets_pipeline.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_source_resolution.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_stages.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_step_workspace.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_sync_back.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_unit11.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_unit11_pbt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_unit12_reporting.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_unit5_config.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_unit5_pbt.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_unit5_pure.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_verdict.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_viz.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_viz_demo.py +0 -0
- {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.0}/tests/test_viz_layout.py +0 -0
|
@@ -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.0"
|
|
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())
|