agentic-dev-loop 0.15.6__tar.gz → 1.0.0b1__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 (221) hide show
  1. agentic_dev_loop-1.0.0b1/PKG-INFO +200 -0
  2. agentic_dev_loop-1.0.0b1/README.md +149 -0
  3. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/pyproject.toml +10 -1
  4. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/isolation.py +3 -2
  5. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates/dev.agent.md +2 -2
  6. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates/qa.agent.md +1 -1
  7. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates/review.agent.md +4 -4
  8. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/16-1pKPtbcx.js +23 -0
  9. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/16-2lMgbefg.js +23 -0
  10. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/16-B0WgRfVg.js +23 -0
  11. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/16-B3fCnGwv.js +23 -0
  12. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/16-Bm3KyEZC.js +23 -0
  13. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/16-DIfh6y3Q.js +23 -0
  14. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/16-DxEg5YJZ.js +23 -0
  15. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/20-CdViZ4xF.js +23 -0
  16. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/accordion.min.js +66 -0
  17. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/button-rSg_K8yf.js +97 -0
  18. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/button-skeleton-i-vqINhS.js +43 -0
  19. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/button.min.js +26 -0
  20. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/carbon-element-Bi7pQHAl.js +23 -0
  21. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/checkbox-D7PSLQCq.js +62 -0
  22. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/checkbox.min.js +59 -0
  23. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/class-map-t9xXbTFr.js +28 -0
  24. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/code-snippet.min.js +83 -0
  25. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/collection-helpers-BOkEorAG.js +23 -0
  26. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/copy-button.min.js +36 -0
  27. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/copy-tonlUGaV.js +31 -0
  28. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/data-table.min.js +184 -0
  29. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/decorate-1Ivfrp93.js +46 -0
  30. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/decorators-CNcdZSLL.js +33 -0
  31. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/deep-shadow-contains-Cs2rSnhr.js +23 -0
  32. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/definition-tooltip-FYe4J71p.js +48 -0
  33. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/directive-xDpGnViN.js +28 -0
  34. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/feature-flags-C7ZDYm5Q.js +41 -0
  35. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/floating-controller-DmTRVV0A.js +23 -0
  36. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/focus-D91D_iCB.js +23 -0
  37. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/form-Sg67yyAA.js +23 -0
  38. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/host-listener-CEd01uiB.js +23 -0
  39. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/host-listener-D_ODAJ3e.js +23 -0
  40. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/icon-button-Be2x1qrf.js +38 -0
  41. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/icon-loader-Cj1PggRN.js +23 -0
  42. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/icon-loader-utils-CVerE28u.js +28 -0
  43. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/if-defined-CV6i5LeB.js +28 -0
  44. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/if-non-empty-B5mz8bH9.js +23 -0
  45. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/link-aD3OYHCu.js +46 -0
  46. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/link.min.js +23 -0
  47. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/manifest.json +257 -0
  48. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/notification.min.js +123 -0
  49. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/on-DP_Dnlgd.js +23 -0
  50. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/popover-content-fajgXUvu.js +37 -0
  51. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/popover.min.js +23 -0
  52. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/query-DJR3NpB4.js +33 -0
  53. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/query-all-BuL-eXl_.js +29 -0
  54. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/radio-button.min.js +77 -0
  55. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/radio-group-manager-BE85t4HN.js +23 -0
  56. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/search-CVX2VAop.js +54 -0
  57. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/settings-DlHDxgf_.js +85 -0
  58. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/skeleton-text-s5gA9_CO.js +23 -0
  59. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/skeleton-text.min.js +23 -0
  60. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/tag.min.js +133 -0
  61. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/themes.css +1 -0
  62. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/tile.min.js +97 -0
  63. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/tooltip-DYtXwn-o.js +23 -0
  64. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/tooltip-content-DDo9ICPL.js +23 -0
  65. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/tooltip.min.js +23 -0
  66. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/ui-shell.min.js +159 -0
  67. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop/viz/vendor/unsafe-html-BDr7jYB8.js +28 -0
  68. agentic_dev_loop-1.0.0b1/src/agentic_dev_loop.egg-info/PKG-INFO +200 -0
  69. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/SOURCES.txt +62 -1
  70. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/requires.txt +4 -0
  71. agentic_dev_loop-1.0.0b1/tests/test_viz_wheel_contents.py +56 -0
  72. agentic_dev_loop-0.15.6/PKG-INFO +0 -659
  73. agentic_dev_loop-0.15.6/README.md +0 -612
  74. agentic_dev_loop-0.15.6/src/agentic_dev_loop.egg-info/PKG-INFO +0 -659
  75. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/LICENSE +0 -0
  76. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/setup.cfg +0 -0
  77. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/__init__.py +0 -0
  78. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/__init__.py +0 -0
  79. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/config.py +0 -0
  80. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/failure.py +0 -0
  81. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/paths.py +0 -0
  82. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/profiles/__init__.py +0 -0
  83. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/profiles/data/dotnet-node.yaml +0 -0
  84. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/profiles/data/python.yaml +0 -0
  85. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/results.py +0 -0
  86. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/verdict.py +0 -0
  87. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/__init__.py +0 -0
  88. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/actions.py +0 -0
  89. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/agent_error_guide.md +0 -0
  90. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/agent_error_guide.py +0 -0
  91. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/agents.py +0 -0
  92. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/allowlist.py +0 -0
  93. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/brief_coverage.py +0 -0
  94. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/brief_prompt.md +0 -0
  95. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/brief_prompt.py +0 -0
  96. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/cli.py +0 -0
  97. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/completion.py +0 -0
  98. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/containers.py +0 -0
  99. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/copilot_auth.py +0 -0
  100. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/deps.py +0 -0
  101. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/dryrun.py +0 -0
  102. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/egress_policy.py +0 -0
  103. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/egress_proxy.py +0 -0
  104. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/extensions/__init__.py +0 -0
  105. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/extensions/aidlc.py +0 -0
  106. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/forbidden.py +0 -0
  107. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/graph.py +0 -0
  108. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/hostboundary.py +0 -0
  109. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/llm.py +0 -0
  110. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/loaders.py +0 -0
  111. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/mounts.py +0 -0
  112. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/__init__.py +0 -0
  113. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/checks.py +0 -0
  114. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/doctor.py +0 -0
  115. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/init.py +0 -0
  116. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/recipes/dotnet-node.yaml +0 -0
  117. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/recipes/python.yaml +0 -0
  118. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/recipes.py +0 -0
  119. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates/env.example +0 -0
  120. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates.py +0 -0
  121. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/upgrade.py +0 -0
  122. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/outputs.py +0 -0
  123. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/presets.py +0 -0
  124. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/proc.py +0 -0
  125. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/provider_wire.py +0 -0
  126. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/registry.py +0 -0
  127. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/run_status.py +0 -0
  128. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/run_status_command.md +0 -0
  129. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/seccomp/__init__.py +0 -0
  130. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/seccomp/chromium-userns.json +0 -0
  131. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/secrets.py +0 -0
  132. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/stages.py +0 -0
  133. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/step_workspace.py +0 -0
  134. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/sync_back.py +0 -0
  135. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/py.typed +0 -0
  136. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/reporting/__init__.py +0 -0
  137. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/reporting/metrics.py +0 -0
  138. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/reporting/render.py +0 -0
  139. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/reporting/sources.py +0 -0
  140. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/__init__.py +0 -0
  141. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/layout.py +0 -0
  142. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/page.py +0 -0
  143. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/runs_view.py +0 -0
  144. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/server.py +0 -0
  145. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/dependency_links.txt +0 -0
  146. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/entry_points.txt +0 -0
  147. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/top_level.txt +0 -0
  148. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_029_merge_on_conflict.py +0 -0
  149. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_033_brief_step.py +0 -0
  150. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_035_finalize_nudge.py +0 -0
  151. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_036_banned_commands_and_lane_boundary.py +0 -0
  152. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_041_brief_coverage.py +0 -0
  153. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_046_brief_prompt.py +0 -0
  154. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_055_cli.py +0 -0
  155. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_055_doctor.py +0 -0
  156. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_055_init.py +0 -0
  157. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_055_profile_loading.py +0 -0
  158. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_055_profiles.py +0 -0
  159. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_055_recipes.py +0 -0
  160. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_055_schema_lock.py +0 -0
  161. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_055_templates.py +0 -0
  162. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_055_upgrade.py +0 -0
  163. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_actions.py +0 -0
  164. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_agent_error_guide.py +0 -0
  165. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_agents.py +0 -0
  166. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_aidlc.py +0 -0
  167. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_build_viz_page.py +0 -0
  168. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_cli.py +0 -0
  169. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_config.py +0 -0
  170. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_containers.py +0 -0
  171. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_copilot_auth.py +0 -0
  172. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_copilot_cli.py +0 -0
  173. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_deps.py +0 -0
  174. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_dry_run.py +0 -0
  175. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_e2e_fixtures.py +0 -0
  176. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_egress_proxy.py +0 -0
  177. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_graph.py +0 -0
  178. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_hostboundary.py +0 -0
  179. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_hostboundary_integration.py +0 -0
  180. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_isolation.py +0 -0
  181. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_isolation_integration.py +0 -0
  182. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_isolation_pbt.py +0 -0
  183. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_llm.py +0 -0
  184. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_loaders.py +0 -0
  185. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_module_contract.py +0 -0
  186. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_outputs.py +0 -0
  187. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_outputs_pbt.py +0 -0
  188. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_proc.py +0 -0
  189. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_provider_wire.py +0 -0
  190. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_publish.py +0 -0
  191. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_qa_prompt.py +0 -0
  192. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_registry.py +0 -0
  193. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_repo_ascii.py +0 -0
  194. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_results.py +0 -0
  195. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_run_status.py +0 -0
  196. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_runs_js_duration_charts.py +0 -0
  197. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_runs_js_filters.py +0 -0
  198. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_runs_js_key_stats.py +0 -0
  199. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_runs_js_metrics.py +0 -0
  200. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_runs_layout.py +0 -0
  201. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_runs_layout_key_stats.py +0 -0
  202. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_sdk_compat.py +0 -0
  203. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_secrets.py +0 -0
  204. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_secrets_integration.py +0 -0
  205. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_secrets_pipeline.py +0 -0
  206. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_source_resolution.py +0 -0
  207. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_stages.py +0 -0
  208. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_step_workspace.py +0 -0
  209. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_sync_back.py +0 -0
  210. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_unit11.py +0 -0
  211. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_unit11_pbt.py +0 -0
  212. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_unit12_reporting.py +0 -0
  213. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_unit13_runs_viz.py +0 -0
  214. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_unit5_config.py +0 -0
  215. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_unit5_pbt.py +0 -0
  216. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_unit5_pure.py +0 -0
  217. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_vendor_carbon_wc.py +0 -0
  218. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_verdict.py +0 -0
  219. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_viz.py +0 -0
  220. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_viz_demo.py +0 -0
  221. {agentic_dev_loop-0.15.6 → agentic_dev_loop-1.0.0b1}/tests/test_viz_layout.py +0 -0
@@ -0,0 +1,200 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentic-dev-loop
3
+ Version: 1.0.0b1
4
+ Summary: Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.
5
+ Author: Luke Wilson
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/lukedawilson/agentic-dev-loop
8
+ Project-URL: Documentation, https://lukedawilson.github.io/agentic-dev-loop/
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Operating System :: MacOS
13
+ Classifier: Operating System :: Microsoft :: Windows
14
+ Classifier: Operating System :: POSIX :: Linux
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3 :: Only
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
+ Classifier: Topic :: Software Development
22
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
+ Classifier: Topic :: Software Development :: Quality Assurance
24
+ Classifier: Topic :: Security
25
+ Classifier: Typing :: Typed
26
+ Requires-Python: >=3.12
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Requires-Dist: pydantic>=2.0
30
+ Requires-Dist: PyYAML>=6.0
31
+ Requires-Dist: openhands-sdk~=1.17.0
32
+ Requires-Dist: openhands-tools~=1.17.0
33
+ Requires-Dist: browser-use==0.11.13
34
+ Requires-Dist: pillow>=13.0.0
35
+ Requires-Dist: agent-client-protocol<1.0.0
36
+ Requires-Dist: langgraph>=1.2
37
+ Requires-Dist: langgraph-checkpoint-sqlite>=3.0
38
+ Requires-Dist: msgpack>=1.0
39
+ Requires-Dist: filelock>=4.2.1
40
+ Requires-Dist: pyasn1>=0.6.5
41
+ Requires-Dist: pypdf>=6.21.4
42
+ Provides-Extra: dev
43
+ Requires-Dist: hypothesis>=6.0; extra == "dev"
44
+ Requires-Dist: pytest>=8.0; extra == "dev"
45
+ Requires-Dist: pip-audit>=2.0; extra == "dev"
46
+ Requires-Dist: pre-commit>=3.0; extra == "dev"
47
+ Provides-Extra: docs
48
+ Requires-Dist: mkdocs-material~=9.6; extra == "docs"
49
+ Requires-Dist: pymdown-extensions~=10.0; extra == "docs"
50
+ Dynamic: license-file
51
+
52
+ # agentic-dev-loop
53
+
54
+ > **Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.**
55
+
56
+ Describe your pipeline in one YAML file - agent steps, mechanical test gates, and
57
+ trusted actions - and `agentic-dev-loop` runs it end to end: agent and command steps get
58
+ kernel-level sandboxing via Docker, verdicts route the graph, every boundary is
59
+ checkpointed, and nothing gets committed until every gate passes.
60
+
61
+ ![The live graph view - pipeline graph with fail loopbacks, summary tiles, per-stage consoles, and event log](https://raw.githubusercontent.com/lukedawilson/agentic-dev-loop/main/docs/viz-pipeline.png)
62
+
63
+ ## Key features
64
+
65
+ - **A tool, not a wiring project.** One CLI entry point, opinionated defaults,
66
+ fixed safety policies. You write the pipeline and the agent definitions -
67
+ nothing else.
68
+ - **Deterministic.** Same pipeline + same state means the same routing.
69
+ Verdicts are parsed from files and validated tool calls, retries are
70
+ bounded, nothing is best-effort.
71
+ - **Sandboxed by default.** The agent's shell and every command step run
72
+ inside an always-on Docker sandbox: network off by default, writes only to
73
+ declared `mounts:`, no `.git`. If no sandbox is available, the run stops
74
+ instead of degrading.
75
+ - **Crash-safe and resumable.** Every boundary is checkpointed; interrupt a
76
+ run and resume it from the exact checkpoint with `--resume`, notes intact.
77
+ - **Watchable.** A live browser graph view with per-stage consoles and an
78
+ event log, a browsable run history, and markdown reports.
79
+ - **Gated commits.** A single commit point that fires only when every gate
80
+ passed and the worktree was clean at start.
81
+ - **Supply-chain careful.** A digest-pinned dev image, a locked-by-default
82
+ dependency policy, and a CVE-audited restore step.
83
+ - **Secret-safe.** Secrets are refs in config, values in the host environment,
84
+ opted in per step, and scrubbed from every engine-written output; the
85
+ workspace may not contain `.env*` files.
86
+ - **Onboarding that stays honest.** `init` scaffolds a working loop for your
87
+ repo, `doctor` probes the host before every run, `upgrade` converges the
88
+ install and the pinned version.
89
+ - **Extensible.** Plugins add your own actions, tools, and document loaders,
90
+ loaded from outside the workspace only.
91
+
92
+ ## Supported platforms
93
+
94
+ The engine is plain Linux under the hood and runs wherever a compliant
95
+ Docker engine does:
96
+
97
+ | Platform | Support |
98
+ | --- | --- |
99
+ | **Linux** | Native. Docker Engine, OrbStack, Colima, or podman with docker compat. |
100
+ | **macOS** | Native. Docker Desktop, OrbStack, or Colima. |
101
+ | **Windows** | Via **WSL2** (Ubuntu distro). Enable Docker Desktop's WSL integration (or run Docker Engine inside the distro) and keep the repo on the WSL filesystem (`~/dev/...`), not `/mnt/c` - bind-mounting a 9p path into containers breaks permissions and is slow. |
102
+
103
+ ## Quickstart
104
+
105
+ ### Prerequisites
106
+
107
+ | Requirement | Detail |
108
+ | --- | --- |
109
+ | Python | >= 3.12 |
110
+ | Docker engine | Engine API >= 1.43 (Engine 24). Any compliant engine works - Docker Desktop, OrbStack, Colima, Rancher Desktop, podman docker-compat. On Windows, run under WSL2: the repo must live on the WSL filesystem, not /mnt/c. |
111
+ | LLM API key | The env var named by your pipeline's `api_key_env` (e.g. `OPENAI_API_KEY`) must be set - a missing key fails fast, naming it. Alternatively, `agentic-dev-loop copilot-login` authenticates a Copilot subscription (see [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/)). |
112
+
113
+ ### Installation
114
+
115
+ ```bash
116
+ pipx install agentic-dev-loop
117
+ agentic-dev-loop --version
118
+ ```
119
+
120
+ Install with **pipx**: the engine's venv lives outside the workspace, so it
121
+ is unmounted from the sandbox and never agent-writable. On the first run the
122
+ engine pulls the digest-pinned dev image and verifies its digest. Setup
123
+ details and troubleshooting live in the [setup guide](https://lukedawilson.github.io/agentic-dev-loop/setup/).
124
+
125
+ ### Your first loop
126
+
127
+ ```bash
128
+ cd <your-repo>
129
+ agentic-dev-loop init --profile python # writes the pipeline + agents
130
+ export OPENAI_API_KEY=... # whatever api_key_env names
131
+ agentic-dev-loop agentic-dev-loop/pipeline.yaml --dry-run # validate - no LLM, no Docker
132
+ agentic-dev-loop agentic-dev-loop/pipeline.yaml # run it
133
+ ```
134
+
135
+ `init` scaffolds `agentic-dev-loop/pipeline.yaml` plus the agent files it
136
+ names; `--dry-run` loads and validates with no LLM, no Docker, and no state
137
+ writes. A minimal pipeline looks like:
138
+
139
+ ```yaml
140
+ name: my-construction-loop
141
+
142
+ llm:
143
+ model: openai/deepseek-v4-pro
144
+ base_url: https://api.deepseek.com
145
+ api_key_env: OPENAI_API_KEY
146
+
147
+ max_attempts: 10
148
+ agents_dir: sdk_agents
149
+
150
+ steps:
151
+ - name: dev
152
+ agent: dev
153
+ produces: implementation-summary.md
154
+ on_pass: test
155
+
156
+ - name: test
157
+ command: .venv-sandbox/bin/python -m pytest tests/ -q
158
+ on_pass: review
159
+ on_fail: { goto: dev, retry: true }
160
+
161
+ - name: review
162
+ agent: review
163
+ artifact: review-findings.md
164
+ verdicts: { pass: APPROVED, fail: NEEDS CHANGES }
165
+ on_pass: commit
166
+ on_fail: { goto: dev, retry: true }
167
+
168
+ - name: commit
169
+ action: commit
170
+ params: { message: "feat: construct {subject}" }
171
+ ```
172
+
173
+ Every field - per-step isolation, mounts and egress, secrets, dependency
174
+ policy, named LLM profiles - is in the
175
+ [pipeline.yaml reference](https://lukedawilson.github.io/agentic-dev-loop/pipeline/).
176
+
177
+ ## Documentation
178
+
179
+ | Page | What it covers |
180
+ | --- | --- |
181
+ | [Architecture](https://lukedawilson.github.io/agentic-dev-loop/architecture/) | The five layers, one full run end to end, and the host-boundary security model |
182
+ | [CLI](https://lukedawilson.github.io/agentic-dev-loop/cli/) | Run flags, resuming, the live view, reports, container management, and onboarding commands |
183
+ | [pipeline.yaml](https://lukedawilson.github.io/agentic-dev-loop/pipeline/) | The complete configuration reference: steps, isolation, secrets, networking, dependency policy |
184
+ | [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/) | OpenAI-compatible endpoints (OpenAI, DeepSeek, and others) and the GitHub Copilot subscription |
185
+ | [Authoring a loop](https://lukedawilson.github.io/agentic-dev-loop/authoring/) | From `init` to a committed pipeline: agent files, stage lineup, adaptation checklist |
186
+ | [Setup and troubleshooting](https://lukedawilson.github.io/agentic-dev-loop/setup/) | Docker engines, the dev image, caching, error codes |
187
+ | [Browser sandbox](https://lukedawilson.github.io/agentic-dev-loop/browser-sandbox/) | Running a browser inside the sandbox |
188
+ | [Known issues](https://lukedawilson.github.io/agentic-dev-loop/known-issues/) | Container lifecycle edge cases |
189
+
190
+ ## Contributing
191
+
192
+ Read [AGENTS.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/AGENTS.md) first -
193
+ it is the instruction set for both human and agent contributors - then see
194
+ [CONTRIBUTING.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/CONTRIBUTING.md)
195
+ for the development workflow and the OpenCode commands.
196
+
197
+ ---
198
+
199
+ Built on [OpenHands SDK](https://github.com/OpenHands/software-agent-sdk) and
200
+ [LangGraph](https://github.com/langchain-ai/langgraph).
@@ -0,0 +1,149 @@
1
+ # agentic-dev-loop
2
+
3
+ > **Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.**
4
+
5
+ Describe your pipeline in one YAML file - agent steps, mechanical test gates, and
6
+ trusted actions - and `agentic-dev-loop` runs it end to end: agent and command steps get
7
+ kernel-level sandboxing via Docker, verdicts route the graph, every boundary is
8
+ checkpointed, and nothing gets committed until every gate passes.
9
+
10
+ ![The live graph view - pipeline graph with fail loopbacks, summary tiles, per-stage consoles, and event log](https://raw.githubusercontent.com/lukedawilson/agentic-dev-loop/main/docs/viz-pipeline.png)
11
+
12
+ ## Key features
13
+
14
+ - **A tool, not a wiring project.** One CLI entry point, opinionated defaults,
15
+ fixed safety policies. You write the pipeline and the agent definitions -
16
+ nothing else.
17
+ - **Deterministic.** Same pipeline + same state means the same routing.
18
+ Verdicts are parsed from files and validated tool calls, retries are
19
+ bounded, nothing is best-effort.
20
+ - **Sandboxed by default.** The agent's shell and every command step run
21
+ inside an always-on Docker sandbox: network off by default, writes only to
22
+ declared `mounts:`, no `.git`. If no sandbox is available, the run stops
23
+ instead of degrading.
24
+ - **Crash-safe and resumable.** Every boundary is checkpointed; interrupt a
25
+ run and resume it from the exact checkpoint with `--resume`, notes intact.
26
+ - **Watchable.** A live browser graph view with per-stage consoles and an
27
+ event log, a browsable run history, and markdown reports.
28
+ - **Gated commits.** A single commit point that fires only when every gate
29
+ passed and the worktree was clean at start.
30
+ - **Supply-chain careful.** A digest-pinned dev image, a locked-by-default
31
+ dependency policy, and a CVE-audited restore step.
32
+ - **Secret-safe.** Secrets are refs in config, values in the host environment,
33
+ opted in per step, and scrubbed from every engine-written output; the
34
+ workspace may not contain `.env*` files.
35
+ - **Onboarding that stays honest.** `init` scaffolds a working loop for your
36
+ repo, `doctor` probes the host before every run, `upgrade` converges the
37
+ install and the pinned version.
38
+ - **Extensible.** Plugins add your own actions, tools, and document loaders,
39
+ loaded from outside the workspace only.
40
+
41
+ ## Supported platforms
42
+
43
+ The engine is plain Linux under the hood and runs wherever a compliant
44
+ Docker engine does:
45
+
46
+ | Platform | Support |
47
+ | --- | --- |
48
+ | **Linux** | Native. Docker Engine, OrbStack, Colima, or podman with docker compat. |
49
+ | **macOS** | Native. Docker Desktop, OrbStack, or Colima. |
50
+ | **Windows** | Via **WSL2** (Ubuntu distro). Enable Docker Desktop's WSL integration (or run Docker Engine inside the distro) and keep the repo on the WSL filesystem (`~/dev/...`), not `/mnt/c` - bind-mounting a 9p path into containers breaks permissions and is slow. |
51
+
52
+ ## Quickstart
53
+
54
+ ### Prerequisites
55
+
56
+ | Requirement | Detail |
57
+ | --- | --- |
58
+ | Python | >= 3.12 |
59
+ | Docker engine | Engine API >= 1.43 (Engine 24). Any compliant engine works - Docker Desktop, OrbStack, Colima, Rancher Desktop, podman docker-compat. On Windows, run under WSL2: the repo must live on the WSL filesystem, not /mnt/c. |
60
+ | LLM API key | The env var named by your pipeline's `api_key_env` (e.g. `OPENAI_API_KEY`) must be set - a missing key fails fast, naming it. Alternatively, `agentic-dev-loop copilot-login` authenticates a Copilot subscription (see [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/)). |
61
+
62
+ ### Installation
63
+
64
+ ```bash
65
+ pipx install agentic-dev-loop
66
+ agentic-dev-loop --version
67
+ ```
68
+
69
+ Install with **pipx**: the engine's venv lives outside the workspace, so it
70
+ is unmounted from the sandbox and never agent-writable. On the first run the
71
+ engine pulls the digest-pinned dev image and verifies its digest. Setup
72
+ details and troubleshooting live in the [setup guide](https://lukedawilson.github.io/agentic-dev-loop/setup/).
73
+
74
+ ### Your first loop
75
+
76
+ ```bash
77
+ cd <your-repo>
78
+ agentic-dev-loop init --profile python # writes the pipeline + agents
79
+ export OPENAI_API_KEY=... # whatever api_key_env names
80
+ agentic-dev-loop agentic-dev-loop/pipeline.yaml --dry-run # validate - no LLM, no Docker
81
+ agentic-dev-loop agentic-dev-loop/pipeline.yaml # run it
82
+ ```
83
+
84
+ `init` scaffolds `agentic-dev-loop/pipeline.yaml` plus the agent files it
85
+ names; `--dry-run` loads and validates with no LLM, no Docker, and no state
86
+ writes. A minimal pipeline looks like:
87
+
88
+ ```yaml
89
+ name: my-construction-loop
90
+
91
+ llm:
92
+ model: openai/deepseek-v4-pro
93
+ base_url: https://api.deepseek.com
94
+ api_key_env: OPENAI_API_KEY
95
+
96
+ max_attempts: 10
97
+ agents_dir: sdk_agents
98
+
99
+ steps:
100
+ - name: dev
101
+ agent: dev
102
+ produces: implementation-summary.md
103
+ on_pass: test
104
+
105
+ - name: test
106
+ command: .venv-sandbox/bin/python -m pytest tests/ -q
107
+ on_pass: review
108
+ on_fail: { goto: dev, retry: true }
109
+
110
+ - name: review
111
+ agent: review
112
+ artifact: review-findings.md
113
+ verdicts: { pass: APPROVED, fail: NEEDS CHANGES }
114
+ on_pass: commit
115
+ on_fail: { goto: dev, retry: true }
116
+
117
+ - name: commit
118
+ action: commit
119
+ params: { message: "feat: construct {subject}" }
120
+ ```
121
+
122
+ Every field - per-step isolation, mounts and egress, secrets, dependency
123
+ policy, named LLM profiles - is in the
124
+ [pipeline.yaml reference](https://lukedawilson.github.io/agentic-dev-loop/pipeline/).
125
+
126
+ ## Documentation
127
+
128
+ | Page | What it covers |
129
+ | --- | --- |
130
+ | [Architecture](https://lukedawilson.github.io/agentic-dev-loop/architecture/) | The five layers, one full run end to end, and the host-boundary security model |
131
+ | [CLI](https://lukedawilson.github.io/agentic-dev-loop/cli/) | Run flags, resuming, the live view, reports, container management, and onboarding commands |
132
+ | [pipeline.yaml](https://lukedawilson.github.io/agentic-dev-loop/pipeline/) | The complete configuration reference: steps, isolation, secrets, networking, dependency policy |
133
+ | [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/) | OpenAI-compatible endpoints (OpenAI, DeepSeek, and others) and the GitHub Copilot subscription |
134
+ | [Authoring a loop](https://lukedawilson.github.io/agentic-dev-loop/authoring/) | From `init` to a committed pipeline: agent files, stage lineup, adaptation checklist |
135
+ | [Setup and troubleshooting](https://lukedawilson.github.io/agentic-dev-loop/setup/) | Docker engines, the dev image, caching, error codes |
136
+ | [Browser sandbox](https://lukedawilson.github.io/agentic-dev-loop/browser-sandbox/) | Running a browser inside the sandbox |
137
+ | [Known issues](https://lukedawilson.github.io/agentic-dev-loop/known-issues/) | Container lifecycle edge cases |
138
+
139
+ ## Contributing
140
+
141
+ Read [AGENTS.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/AGENTS.md) first -
142
+ it is the instruction set for both human and agent contributors - then see
143
+ [CONTRIBUTING.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/CONTRIBUTING.md)
144
+ for the development workflow and the OpenCode commands.
145
+
146
+ ---
147
+
148
+ Built on [OpenHands SDK](https://github.com/OpenHands/software-agent-sdk) and
149
+ [LangGraph](https://github.com/langchain-ai/langgraph).
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agentic-dev-loop"
7
- version = "0.15.6"
7
+ version = "1.0.0b1"
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"
@@ -73,6 +73,7 @@ dependencies = [
73
73
 
74
74
  [project.urls]
75
75
  Homepage = "https://github.com/lukedawilson/agentic-dev-loop"
76
+ Documentation = "https://lukedawilson.github.io/agentic-dev-loop/"
76
77
 
77
78
  [project.scripts]
78
79
  agentic-dev-loop = "agentic_dev_loop.engine.cli:main"
@@ -84,6 +85,10 @@ dev = [
84
85
  "pip-audit>=2.0",
85
86
  "pre-commit>=3.0",
86
87
  ]
88
+ docs = [
89
+ "mkdocs-material~=9.6",
90
+ "pymdown-extensions~=10.0",
91
+ ]
87
92
 
88
93
  [tool.setuptools.packages.find]
89
94
  where = ["src"]
@@ -94,6 +99,10 @@ agentic_dev_loop = ["py.typed"]
94
99
  "agentic_dev_loop.engine" = ["*.md"]
95
100
  "agentic_dev_loop.engine.seccomp" = ["*.json"]
96
101
  "agentic_dev_loop.engine.onboarding" = ["recipes/*.yaml", "templates/*"]
102
+ # The viz page loads Carbon web-component modules from /vendor/* at runtime;
103
+ # server.py serves them from this directory on disk (see
104
+ # tests/test_viz_wheel_contents.py).
105
+ "agentic_dev_loop.viz" = ["vendor/*"]
97
106
 
98
107
  [tool.pytest.ini_options]
99
108
  markers = [
@@ -728,7 +728,8 @@ def _guard_git(request: SandboxExecutionRequest,
728
728
  name = " ".join(request.argv[:2])
729
729
  raise SandboxError(
730
730
  f"AE-SBX-008: git mutation {name!r} blocked - set "
731
- "isolation.allow_git_mutations: true to allow (docs/setup.md §3)")
731
+ "isolation.allow_git_mutations: true to allow "
732
+ "(see the pipeline reference: docs/pipeline.md)")
732
733
 
733
734
 
734
735
  def _request_digest(argv: list[str], cwd: str, env: dict[str, str]) -> str:
@@ -974,7 +975,7 @@ class DockerBackend(Sandbox):
974
975
  raise SandboxError(
975
976
  "AE-SBX-013: networked execution requested but no networked "
976
977
  "container is running - declare `network: true` on the step "
977
- "(docs/setup.md §3)")
978
+ "(see the pipeline reference: docs/pipeline.md)")
978
979
  return self._exec(request, container)
979
980
 
980
981
  def _run_profile(self, request: SandboxExecutionRequest) -> SandboxExecutionResult:
@@ -9,7 +9,7 @@ opinionated LangGraph + OpenHands SDK pipeline engine written in Python.
9
9
 
10
10
  ## WORKFLOW
11
11
 
12
- 1. Read the plan documents and README.md in the context below.
12
+ 1. Read the plan documents, README.md, and docs/pipeline.md in the context below.
13
13
  2. If the context contains a *Previous attempt feedback* section or a
14
14
  *Mechanical gate output* section, treat every issue listed there as a
15
15
  required fix from the pipeline's earlier stages - address each one before
@@ -128,7 +128,7 @@ opinionated LangGraph + OpenHands SDK pipeline engine written in Python.
128
128
 
129
129
  ## CONVENTIONS
130
130
 
131
- - Follow README.md strictly - the fixed policies are binding (file-artifact
131
+ - Follow README.md and docs/pipeline.md strictly - the fixed policies are binding (file-artifact
132
132
  verdicts, per-attempt artifact hygiene, single gated commit point,
133
133
  fail-fast config and secrets).
134
134
  - Tests never touch the network: agents are stubbed via the FakeAgents
@@ -160,7 +160,7 @@ turns building synthetic fixtures or debugging the harness.
160
160
  probe and report it as the check. Fabricated checks are a QA failure in
161
161
  themselves.
162
162
  - Reality beats the docs. If live behaviour has legitimately drifted from the
163
- README, note the deviation; fail only when the code is at fault.
163
+ README or the pipeline reference, note the deviation; fail only when the code is at fault.
164
164
  - **Investigation budget.** If a probe failure cannot be diagnosed after a
165
165
  few attempts, STOP and write the report. Mark the probe as `INCONCLUSIVE`
166
166
  with the symptom and whatever you found. The pipeline will surface the
@@ -4,16 +4,16 @@ tools: [terminal, record_verdict]
4
4
  ---
5
5
  # Review Agent
6
6
 
7
- You are reviewing code for a unit of work against its plan documents and the
8
- repo's README.
7
+ You are reviewing code for a unit of work against its plan documents, the
8
+ repo's README, and the pipeline reference.
9
9
 
10
10
  ## WORKFLOW
11
11
 
12
- 1. Read the plan documents and README.md in the context below.
12
+ 1. Read the plan documents, README.md, and docs/pipeline.md in the context below.
13
13
  2. Read the diff - understand what changed.
14
14
  3. Check:
15
15
  - Does the implementation match the plan?
16
- - Are the README's fixed policies respected (file-artifact verdicts,
16
+ - Are the README's and the pipeline reference's fixed policies respected (file-artifact verdicts,
17
17
  artifact hygiene, single gated commit point, fail-fast config)?
18
18
  - Do the tests pin the new behavior without touching the network
19
19
  (FakeAgents in tests/conftest.py is the only permitted stub)?
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Copyright IBM Corp. 2019, 2026
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ * Also refer to the following links for third-party dependencies:
10
+ * https://www.npmjs.com/package/@floating-ui/core
11
+ * https://www.npmjs.com/package/@floating-ui/dom
12
+ * https://www.npmjs.com/package/@floating-ui/utils
13
+ * https://www.npmjs.com/package/@ibm/telemetry-js
14
+ * https://www.npmjs.com/package/@lit-labs/signals
15
+ * https://www.npmjs.com/package/@lit/context
16
+ * https://www.npmjs.com/package/@lit/reactive-element
17
+ * https://www.npmjs.com/package/lit
18
+ * https://www.npmjs.com/package/lit-element
19
+ * https://www.npmjs.com/package/lit-html
20
+ * https://www.npmjs.com/package/lodash-es
21
+ * https://www.npmjs.com/package/tslib
22
+ */
23
+ var e={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,width:16,height:16},content:[{elem:`path`,attrs:{d:`M8,1C4.2,1,1,4.2,1,8s3.2,7,7,7s7-3.1,7-7S11.9,1,8,1z M7.5,4h1v5h-1C7.5,9,7.5,4,7.5,4z M8,12.2 c-0.4,0-0.8-0.4-0.8-0.8s0.3-0.8,0.8-0.8c0.4,0,0.8,0.4,0.8,0.8S8.4,12.2,8,12.2z`}},{elem:`path`,attrs:{d:`M7.5,4h1v5h-1C7.5,9,7.5,4,7.5,4z M8,12.2c-0.4,0-0.8-0.4-0.8-0.8s0.3-0.8,0.8-0.8 c0.4,0,0.8,0.4,0.8,0.8S8.4,12.2,8,12.2z`,"data-icon-path":`inner-path`,opacity:`0`}}],name:`warning--filled`,size:16};export{e as t};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Copyright IBM Corp. 2019, 2026
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ * Also refer to the following links for third-party dependencies:
10
+ * https://www.npmjs.com/package/@floating-ui/core
11
+ * https://www.npmjs.com/package/@floating-ui/dom
12
+ * https://www.npmjs.com/package/@floating-ui/utils
13
+ * https://www.npmjs.com/package/@ibm/telemetry-js
14
+ * https://www.npmjs.com/package/@lit-labs/signals
15
+ * https://www.npmjs.com/package/@lit/context
16
+ * https://www.npmjs.com/package/@lit/reactive-element
17
+ * https://www.npmjs.com/package/lit
18
+ * https://www.npmjs.com/package/lit-element
19
+ * https://www.npmjs.com/package/lit-html
20
+ * https://www.npmjs.com/package/lodash-es
21
+ * https://www.npmjs.com/package/tslib
22
+ */
23
+ var e={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,width:16,height:16},content:[{elem:`path`,attrs:{d:`M8,1C4.1,1,1,4.1,1,8c0,3.9,3.1,7,7,7s7-3.1,7-7C15,4.1,11.9,1,8,1z M7,11L4.3,8.3l0.9-0.8L7,9.3l4-3.9l0.9,0.8L7,11z`}},{elem:`path`,attrs:{d:`M7,11L4.3,8.3l0.9-0.8L7,9.3l4-3.9l0.9,0.8L7,11z`,"data-icon-path":`inner-path`,opacity:`0`}}],name:`checkmark--filled`,size:16};export{e as t};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Copyright IBM Corp. 2019, 2026
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ * Also refer to the following links for third-party dependencies:
10
+ * https://www.npmjs.com/package/@floating-ui/core
11
+ * https://www.npmjs.com/package/@floating-ui/dom
12
+ * https://www.npmjs.com/package/@floating-ui/utils
13
+ * https://www.npmjs.com/package/@ibm/telemetry-js
14
+ * https://www.npmjs.com/package/@lit-labs/signals
15
+ * https://www.npmjs.com/package/@lit/context
16
+ * https://www.npmjs.com/package/@lit/reactive-element
17
+ * https://www.npmjs.com/package/lit
18
+ * https://www.npmjs.com/package/lit-element
19
+ * https://www.npmjs.com/package/lit-html
20
+ * https://www.npmjs.com/package/lodash-es
21
+ * https://www.npmjs.com/package/tslib
22
+ */
23
+ var e={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,width:16,height:16},content:[{elem:`path`,attrs:{d:`M9.3 3.7 13.1 7.5 1 7.5 1 8.5 13.1 8.5 9.3 12.3 10 13 15 8 10 3z`}}],name:`arrow--right`,size:16};export{e as t};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Copyright IBM Corp. 2019, 2026
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ * Also refer to the following links for third-party dependencies:
10
+ * https://www.npmjs.com/package/@floating-ui/core
11
+ * https://www.npmjs.com/package/@floating-ui/dom
12
+ * https://www.npmjs.com/package/@floating-ui/utils
13
+ * https://www.npmjs.com/package/@ibm/telemetry-js
14
+ * https://www.npmjs.com/package/@lit-labs/signals
15
+ * https://www.npmjs.com/package/@lit/context
16
+ * https://www.npmjs.com/package/@lit/reactive-element
17
+ * https://www.npmjs.com/package/lit
18
+ * https://www.npmjs.com/package/lit-element
19
+ * https://www.npmjs.com/package/lit-html
20
+ * https://www.npmjs.com/package/lodash-es
21
+ * https://www.npmjs.com/package/tslib
22
+ */
23
+ var e={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 32 32`,fill:`currentColor`,width:16,height:16},content:[{elem:`path`,attrs:{fill:`none`,d:`M16,26a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,16,26Zm-1.125-5h2.25V12h-2.25Z`,"data-icon-path":`inner-path`}},{elem:`path`,attrs:{d:`M16.002,6.1714h-.004L4.6487,27.9966,4.6506,28H27.3494l.0019-.0034ZM14.875,12h2.25v9h-2.25ZM16,26a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,16,26Z`}},{elem:`path`,attrs:{d:`M29,30H3a1,1,0,0,1-.8872-1.4614l13-25a1,1,0,0,1,1.7744,0l13,25A1,1,0,0,1,29,30ZM4.6507,28H27.3493l.002-.0033L16.002,6.1714h-.004L4.6487,27.9967Z`}}],name:`warning--alt--filled`,size:16};export{e as t};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Copyright IBM Corp. 2019, 2026
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ * Also refer to the following links for third-party dependencies:
10
+ * https://www.npmjs.com/package/@floating-ui/core
11
+ * https://www.npmjs.com/package/@floating-ui/dom
12
+ * https://www.npmjs.com/package/@floating-ui/utils
13
+ * https://www.npmjs.com/package/@ibm/telemetry-js
14
+ * https://www.npmjs.com/package/@lit-labs/signals
15
+ * https://www.npmjs.com/package/@lit/context
16
+ * https://www.npmjs.com/package/@lit/reactive-element
17
+ * https://www.npmjs.com/package/lit
18
+ * https://www.npmjs.com/package/lit-element
19
+ * https://www.npmjs.com/package/lit-html
20
+ * https://www.npmjs.com/package/lodash-es
21
+ * https://www.npmjs.com/package/tslib
22
+ */
23
+ var e={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,width:16,height:16},content:[{elem:`path`,attrs:{d:`M8 11 3 6 3.7 5.3 8 9.6 12.3 5.3 13 6z`}}],name:`chevron--down`,size:16};export{e as t};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Copyright IBM Corp. 2019, 2026
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ * Also refer to the following links for third-party dependencies:
10
+ * https://www.npmjs.com/package/@floating-ui/core
11
+ * https://www.npmjs.com/package/@floating-ui/dom
12
+ * https://www.npmjs.com/package/@floating-ui/utils
13
+ * https://www.npmjs.com/package/@ibm/telemetry-js
14
+ * https://www.npmjs.com/package/@lit-labs/signals
15
+ * https://www.npmjs.com/package/@lit/context
16
+ * https://www.npmjs.com/package/@lit/reactive-element
17
+ * https://www.npmjs.com/package/lit
18
+ * https://www.npmjs.com/package/lit-element
19
+ * https://www.npmjs.com/package/lit-html
20
+ * https://www.npmjs.com/package/lodash-es
21
+ * https://www.npmjs.com/package/tslib
22
+ */
23
+ var e={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,width:16,height:16},content:[{elem:`path`,attrs:{d:`M11 8 6 13 5.3 12.3 9.6 8 5.3 3.7 6 3z`}}],name:`chevron--right`,size:16};export{e as t};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Copyright IBM Corp. 2019, 2026
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ * Also refer to the following links for third-party dependencies:
10
+ * https://www.npmjs.com/package/@floating-ui/core
11
+ * https://www.npmjs.com/package/@floating-ui/dom
12
+ * https://www.npmjs.com/package/@floating-ui/utils
13
+ * https://www.npmjs.com/package/@ibm/telemetry-js
14
+ * https://www.npmjs.com/package/@lit-labs/signals
15
+ * https://www.npmjs.com/package/@lit/context
16
+ * https://www.npmjs.com/package/@lit/reactive-element
17
+ * https://www.npmjs.com/package/lit
18
+ * https://www.npmjs.com/package/lit-element
19
+ * https://www.npmjs.com/package/lit-html
20
+ * https://www.npmjs.com/package/lodash-es
21
+ * https://www.npmjs.com/package/tslib
22
+ */
23
+ var e={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 32 32`,fill:`currentColor`,width:16,height:16},content:[{elem:`path`,attrs:{d:`M17.4141 16 24 9.4141 22.5859 8 16 14.5859 9.4143 8 8 9.4141 14.5859 16 8 22.5859 9.4143 24 16 17.4141 22.5859 24 24 22.5859 17.4141 16z`}}],name:`close`,size:16};export{e as t};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Copyright IBM Corp. 2019, 2026
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ * Also refer to the following links for third-party dependencies:
10
+ * https://www.npmjs.com/package/@floating-ui/core
11
+ * https://www.npmjs.com/package/@floating-ui/dom
12
+ * https://www.npmjs.com/package/@floating-ui/utils
13
+ * https://www.npmjs.com/package/@ibm/telemetry-js
14
+ * https://www.npmjs.com/package/@lit-labs/signals
15
+ * https://www.npmjs.com/package/@lit/context
16
+ * https://www.npmjs.com/package/@lit/reactive-element
17
+ * https://www.npmjs.com/package/lit
18
+ * https://www.npmjs.com/package/lit-element
19
+ * https://www.npmjs.com/package/lit-html
20
+ * https://www.npmjs.com/package/lodash-es
21
+ * https://www.npmjs.com/package/tslib
22
+ */
23
+ var e={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,width:20,height:20},content:[{elem:`path`,attrs:{d:`M10,1c-5,0-9,4-9,9s4,9,9,9s9-4,9-9S15,1,10,1z M13.5,14.5l-8-8l1-1l8,8L13.5,14.5z`}},{elem:`path`,attrs:{d:`M13.5,14.5l-8-8l1-1l8,8L13.5,14.5z`,"data-icon-path":`inner-path`,opacity:`0`}}],name:`error--filled`,size:20},t={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 32 32`,fill:`currentColor`,width:20,height:20},content:[{elem:`path`,attrs:{fill:`none`,d:`M16,26a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,16,26Zm-1.125-5h2.25V12h-2.25Z`,"data-icon-path":`inner-path`}},{elem:`path`,attrs:{d:`M16.002,6.1714h-.004L4.6487,27.9966,4.6506,28H27.3494l.0019-.0034ZM14.875,12h2.25v9h-2.25ZM16,26a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,16,26Z`}},{elem:`path`,attrs:{d:`M29,30H3a1,1,0,0,1-.8872-1.4614l13-25a1,1,0,0,1,1.7744,0l13,25A1,1,0,0,1,29,30ZM4.6507,28H27.3493l.002-.0033L16.002,6.1714h-.004L4.6487,27.9967Z`}}],name:`warning--alt--filled`,size:20},n={elem:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,width:20,height:20},content:[{elem:`path`,attrs:{d:`M10,1c-4.9,0-9,4.1-9,9s4.1,9,9,9s9-4,9-9S15,1,10,1z M8.7,13.5l-3.2-3.2l1-1l2.2,2.2l4.8-4.8l1,1L8.7,13.5z`}},{elem:`path`,attrs:{fill:`none`,d:`M8.7,13.5l-3.2-3.2l1-1l2.2,2.2l4.8-4.8l1,1L8.7,13.5z`,"data-icon-path":`inner-path`,opacity:`0`}}],name:`checkmark--filled`,size:20};export{t as n,e as r,n as t};