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.
Files changed (159) hide show
  1. {agentic_dev_loop-0.13.0/src/agentic_dev_loop.egg-info → agentic_dev_loop-0.14.2}/PKG-INFO +10 -3
  2. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/README.md +9 -2
  3. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/pyproject.toml +1 -1
  4. {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
  5. agentic_dev_loop-0.14.2/src/agentic_dev_loop/viz/__init__.py +16 -0
  6. agentic_dev_loop-0.14.2/src/agentic_dev_loop/viz/__main__.py +59 -0
  7. agentic_dev_loop-0.14.2/src/agentic_dev_loop/viz/page.py +11 -0
  8. agentic_dev_loop-0.14.2/src/agentic_dev_loop/viz/runs_view.py +214 -0
  9. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/viz/server.py +109 -18
  10. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2/src/agentic_dev_loop.egg-info}/PKG-INFO +10 -3
  11. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/SOURCES.txt +5 -0
  12. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_build_viz_page.py +3 -0
  13. agentic_dev_loop-0.14.2/tests/test_runs_js_filters.py +168 -0
  14. agentic_dev_loop-0.14.2/tests/test_runs_js_metrics.py +130 -0
  15. agentic_dev_loop-0.14.2/tests/test_runs_layout.py +76 -0
  16. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_trigger_script.py +47 -0
  17. agentic_dev_loop-0.14.2/tests/test_unit13_runs_viz.py +233 -0
  18. agentic_dev_loop-0.13.0/src/agentic_dev_loop/viz/__init__.py +0 -13
  19. agentic_dev_loop-0.13.0/src/agentic_dev_loop/viz/__main__.py +0 -44
  20. agentic_dev_loop-0.13.0/src/agentic_dev_loop/viz/page.py +0 -9
  21. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/LICENSE +0 -0
  22. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/setup.cfg +0 -0
  23. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/__init__.py +0 -0
  24. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/__init__.py +0 -0
  25. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/config.py +0 -0
  26. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/failure.py +0 -0
  27. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/paths.py +0 -0
  28. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/profiles/__init__.py +0 -0
  29. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/profiles/data/dotnet-node.yaml +0 -0
  30. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/profiles/data/python.yaml +0 -0
  31. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/results.py +0 -0
  32. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/core/verdict.py +0 -0
  33. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/__init__.py +0 -0
  34. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/actions.py +0 -0
  35. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/agent_error_guide.md +0 -0
  36. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/agent_error_guide.py +0 -0
  37. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/agents.py +0 -0
  38. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/allowlist.py +0 -0
  39. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/brief_coverage.py +0 -0
  40. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/brief_prompt.md +0 -0
  41. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/brief_prompt.py +0 -0
  42. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/cli.py +0 -0
  43. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/completion.py +0 -0
  44. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/containers.py +0 -0
  45. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/copilot_auth.py +0 -0
  46. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/deps.py +0 -0
  47. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/dryrun.py +0 -0
  48. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/egress_policy.py +0 -0
  49. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/egress_proxy.py +0 -0
  50. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/extensions/__init__.py +0 -0
  51. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/extensions/aidlc.py +0 -0
  52. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/forbidden.py +0 -0
  53. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/graph.py +0 -0
  54. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/hostboundary.py +0 -0
  55. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/isolation.py +0 -0
  56. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/llm.py +0 -0
  57. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/loaders.py +0 -0
  58. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/mounts.py +0 -0
  59. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/__init__.py +0 -0
  60. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/checks.py +0 -0
  61. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/doctor.py +0 -0
  62. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/init.py +0 -0
  63. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/recipes/dotnet-node.yaml +0 -0
  64. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/recipes/python.yaml +0 -0
  65. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/recipes.py +0 -0
  66. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates/dev.agent.md +0 -0
  67. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates/env.example +0 -0
  68. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates/qa.agent.md +0 -0
  69. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates/review.agent.md +0 -0
  70. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/templates.py +0 -0
  71. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/onboarding/upgrade.py +0 -0
  72. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/outputs.py +0 -0
  73. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/presets.py +0 -0
  74. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/proc.py +0 -0
  75. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/provider_wire.py +0 -0
  76. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/registry.py +0 -0
  77. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/run_status.py +0 -0
  78. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/run_status_command.md +0 -0
  79. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/seccomp/__init__.py +0 -0
  80. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/seccomp/chromium-userns.json +0 -0
  81. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/secrets.py +0 -0
  82. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/stages.py +0 -0
  83. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/step_workspace.py +0 -0
  84. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/engine/sync_back.py +0 -0
  85. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/py.typed +0 -0
  86. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/reporting/__init__.py +0 -0
  87. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/reporting/metrics.py +0 -0
  88. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/reporting/render.py +0 -0
  89. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/reporting/sources.py +0 -0
  90. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop/viz/layout.py +0 -0
  91. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/dependency_links.txt +0 -0
  92. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/entry_points.txt +0 -0
  93. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/requires.txt +0 -0
  94. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/src/agentic_dev_loop.egg-info/top_level.txt +0 -0
  95. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_029_merge_on_conflict.py +0 -0
  96. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_033_brief_step.py +0 -0
  97. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_035_finalize_nudge.py +0 -0
  98. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_036_banned_commands_and_lane_boundary.py +0 -0
  99. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_041_brief_coverage.py +0 -0
  100. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_046_brief_prompt.py +0 -0
  101. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_cli.py +0 -0
  102. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_doctor.py +0 -0
  103. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_init.py +0 -0
  104. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_profile_loading.py +0 -0
  105. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_profiles.py +0 -0
  106. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_recipes.py +0 -0
  107. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_schema_lock.py +0 -0
  108. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_templates.py +0 -0
  109. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_055_upgrade.py +0 -0
  110. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_actions.py +0 -0
  111. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_agent_error_guide.py +0 -0
  112. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_agents.py +0 -0
  113. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_aidlc.py +0 -0
  114. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_cli.py +0 -0
  115. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_config.py +0 -0
  116. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_containers.py +0 -0
  117. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_copilot_auth.py +0 -0
  118. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_copilot_cli.py +0 -0
  119. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_deps.py +0 -0
  120. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_dry_run.py +0 -0
  121. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_e2e_fixtures.py +0 -0
  122. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_egress_proxy.py +0 -0
  123. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_graph.py +0 -0
  124. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_hostboundary.py +0 -0
  125. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_hostboundary_integration.py +0 -0
  126. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_isolation.py +0 -0
  127. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_isolation_integration.py +0 -0
  128. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_isolation_pbt.py +0 -0
  129. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_llm.py +0 -0
  130. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_loaders.py +0 -0
  131. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_module_contract.py +0 -0
  132. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_outputs.py +0 -0
  133. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_outputs_pbt.py +0 -0
  134. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_proc.py +0 -0
  135. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_provider_wire.py +0 -0
  136. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_publish.py +0 -0
  137. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_qa_prompt.py +0 -0
  138. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_registry.py +0 -0
  139. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_repo_ascii.py +0 -0
  140. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_results.py +0 -0
  141. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_run_status.py +0 -0
  142. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_sdk_compat.py +0 -0
  143. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_secrets.py +0 -0
  144. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_secrets_integration.py +0 -0
  145. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_secrets_pipeline.py +0 -0
  146. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_source_resolution.py +0 -0
  147. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_stages.py +0 -0
  148. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_step_workspace.py +0 -0
  149. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_sync_back.py +0 -0
  150. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit11.py +0 -0
  151. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit11_pbt.py +0 -0
  152. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit12_reporting.py +0 -0
  153. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit5_config.py +0 -0
  154. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit5_pbt.py +0 -0
  155. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_unit5_pure.py +0 -0
  156. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_verdict.py +0 -0
  157. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_viz.py +0 -0
  158. {agentic_dev_loop-0.13.0 → agentic_dev_loop-0.14.2}/tests/test_viz_demo.py +0 -0
  159. {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.13.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, and gated: nothing gets committed
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, and gated: nothing gets committed
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.13.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())