agentic-devtools 0.2.4__tar.gz → 0.2.5__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 (352) hide show
  1. agentic_devtools-0.2.5/.github/agents/security-scan.agent.md +294 -0
  2. agentic_devtools-0.2.5/.github/workflows/security-scan-on-merge.yml +326 -0
  3. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/PKG-INFO +61 -1
  4. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/README.md +60 -0
  5. agentic_devtools-0.2.5/SECURITY_SCANNING.md +197 -0
  6. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/_version.py +2 -2
  7. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.devcontainer/README.md +0 -0
  8. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.devcontainer/devcontainer.json +0 -0
  9. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.dfly-temp/background-tasks/all-background-tasks.json +0 -0
  10. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.dfly-temp/dfly-state.json +0 -0
  11. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/MARKDOWN_LINTING.md +0 -0
  12. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/.markdownlint.json +0 -0
  13. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.apply-pr-suggestions.initiate.agent.md +0 -0
  14. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.create-jira-epic.initiate.agent.md +0 -0
  15. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.create-jira-issue.initiate.agent.md +0 -0
  16. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.create-jira-subtask.initiate.agent.md +0 -0
  17. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.pull-request-review.completion.agent.md +0 -0
  18. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.pull-request-review.decision.agent.md +0 -0
  19. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.pull-request-review.file-review.agent.md +0 -0
  20. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.pull-request-review.initiate.agent.md +0 -0
  21. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.pull-request-review.summary.agent.md +0 -0
  22. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.update-jira-issue.initiate.agent.md +0 -0
  23. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.checklist-creation.agent.md +0 -0
  24. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.commit.agent.md +0 -0
  25. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.completion.agent.md +0 -0
  26. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.implementation-review.agent.md +0 -0
  27. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.implementation.agent.md +0 -0
  28. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.initiate.agent.md +0 -0
  29. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.planning.agent.md +0 -0
  30. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.pull-request.agent.md +0 -0
  31. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.retrieve.agent.md +0 -0
  32. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.setup.agent.md +0 -0
  33. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/agdt.work-on-jira-issue.verification.agent.md +0 -0
  34. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/copilot-instructions.md +0 -0
  35. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/senior-python-developer.md +0 -0
  36. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/speckit.analyze.agent.md +0 -0
  37. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/speckit.checklist.agent.md +0 -0
  38. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/speckit.clarify.agent.md +0 -0
  39. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/speckit.constitution.agent.md +0 -0
  40. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/speckit.implement.agent.md +0 -0
  41. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/speckit.plan.agent.md +0 -0
  42. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/speckit.specify.agent.md +0 -0
  43. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/speckit.tasks.agent.md +0 -0
  44. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/agents/speckit.taskstoissues.agent.md +0 -0
  45. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/copilot-instructions.md +0 -0
  46. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/.markdownlint.json +0 -0
  47. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.apply-pr-suggestions.initiate.prompt.md +0 -0
  48. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.create-jira-epic.initiate.prompt.md +0 -0
  49. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.create-jira-issue.initiate.prompt.md +0 -0
  50. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.create-jira-subtask.initiate.prompt.md +0 -0
  51. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.pull-request-review.completion.prompt.md +0 -0
  52. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.pull-request-review.decision.prompt.md +0 -0
  53. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.pull-request-review.file-review.prompt.md +0 -0
  54. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.pull-request-review.initiate.prompt.md +0 -0
  55. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.pull-request-review.summary.prompt.md +0 -0
  56. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.update-jira-issue.initiate.prompt.md +0 -0
  57. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.checklist-creation.prompt.md +0 -0
  58. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.commit.prompt.md +0 -0
  59. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.completion.prompt.md +0 -0
  60. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.implementation-review.prompt.md +0 -0
  61. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.implementation.prompt.md +0 -0
  62. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.initiate.prompt.md +0 -0
  63. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.planning.prompt.md +0 -0
  64. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.pull-request.prompt.md +0 -0
  65. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.retrieve.prompt.md +0 -0
  66. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.setup.prompt.md +0 -0
  67. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/agdt.work-on-jira-issue.verification.prompt.md +0 -0
  68. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/speckit.analyze.prompt.md +0 -0
  69. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/speckit.checklist.prompt.md +0 -0
  70. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/speckit.clarify.prompt.md +0 -0
  71. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/speckit.constitution.prompt.md +0 -0
  72. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/speckit.implement.prompt.md +0 -0
  73. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/speckit.plan.prompt.md +0 -0
  74. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/speckit.specify.prompt.md +0 -0
  75. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/speckit.tasks.prompt.md +0 -0
  76. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/prompts/speckit.taskstoissues.prompt.md +0 -0
  77. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/check-idempotency.sh +0 -0
  78. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/create-spec-pr.sh +0 -0
  79. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/generate-spec-from-issue.sh +0 -0
  80. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/post-issue-comment.sh +0 -0
  81. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/sanitize-branch-name.sh +0 -0
  82. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/templates/.markdownlint.json +0 -0
  83. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/templates/already-processed.md +0 -0
  84. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/templates/completed.md +0 -0
  85. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/templates/failed.md +0 -0
  86. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/scripts/speckit-trigger/templates/started.md +0 -0
  87. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/README.md +0 -0
  88. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/auto-fix-on-failure.yml +0 -0
  89. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/lint.yml +0 -0
  90. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/publish.yml +0 -0
  91. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/release.yml +0 -0
  92. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/scripts/check-release-exists.sh +0 -0
  93. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/scripts/create-github-release.sh +0 -0
  94. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/scripts/create-release-packages.ps1 +0 -0
  95. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/scripts/create-release-packages.sh +0 -0
  96. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/scripts/generate-release-notes.sh +0 -0
  97. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/scripts/get-next-version.sh +0 -0
  98. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/scripts/update-version.sh +0 -0
  99. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/speckit-issue-trigger.yml +0 -0
  100. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.github/workflows/test.yml +0 -0
  101. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.gitignore +0 -0
  102. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.markdownlint-cli2.jsonc +0 -0
  103. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.markdownlint.json +0 -0
  104. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.push-trigger +0 -0
  105. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/SDD_QUICK_REFERENCE.md +0 -0
  106. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/memory/constitution.md +0 -0
  107. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  108. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/bash/common.sh +0 -0
  109. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/bash/create-new-feature.sh +0 -0
  110. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/bash/setup-plan.sh +0 -0
  111. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/bash/update-agent-context.sh +0 -0
  112. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/powershell/check-prerequisites.ps1 +0 -0
  113. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/powershell/common.ps1 +0 -0
  114. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/powershell/create-new-feature.ps1 +0 -0
  115. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/powershell/setup-plan.ps1 +0 -0
  116. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/scripts/powershell/update-agent-context.ps1 +0 -0
  117. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/agent-file-template.md +0 -0
  118. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/checklist-template.md +0 -0
  119. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/.markdownlint.json +0 -0
  120. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/analyze.md +0 -0
  121. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/checklist.md +0 -0
  122. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/clarify.md +0 -0
  123. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/constitution.md +0 -0
  124. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/implement.md +0 -0
  125. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/plan.md +0 -0
  126. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/specify.md +0 -0
  127. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/tasks.md +0 -0
  128. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/commands/taskstoissues.md +0 -0
  129. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/plan-template.md +0 -0
  130. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/spec-template.md +0 -0
  131. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/tasks-template.md +0 -0
  132. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.specify/templates/vscode-settings.json +0 -0
  133. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/.work-folder-info +0 -0
  134. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/CHANGELOG.md +0 -0
  135. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/CONTRIBUTING.md +0 -0
  136. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/LICENSE +0 -0
  137. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/PR_DESCRIPTION.md +0 -0
  138. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/PR_INSTRUCTIONS.md +0 -0
  139. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/RELEASING.md +0 -0
  140. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/SOLUTION_SUMMARY.md +0 -0
  141. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/SPEC_DRIVEN_DEVELOPMENT.md +0 -0
  142. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agdt_ai_helpers/__init__.py +0 -0
  143. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/__init__.py +0 -0
  144. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/background_tasks.py +0 -0
  145. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/__init__.py +0 -0
  146. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure/__init__.py +0 -0
  147. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure/app_insights_commands.py +0 -0
  148. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure/auth.py +0 -0
  149. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure/config.py +0 -0
  150. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_context/__init__.py +0 -0
  151. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_context/commands.py +0 -0
  152. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_context/config.py +0 -0
  153. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_context/management.py +0 -0
  154. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/__init__.py +0 -0
  155. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/async_commands.py +0 -0
  156. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/auth.py +0 -0
  157. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/commands.py +0 -0
  158. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/config.py +0 -0
  159. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/file_review_commands.py +0 -0
  160. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/helpers.py +0 -0
  161. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/mark_reviewed.py +0 -0
  162. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/pipeline_commands.py +0 -0
  163. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/pr_summary_commands.py +0 -0
  164. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/pull_request_details_commands.py +0 -0
  165. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/review_commands.py +0 -0
  166. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/review_helpers.py +0 -0
  167. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/review_jira.py +0 -0
  168. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/review_prompts.py +0 -0
  169. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/run_details_commands.py +0 -0
  170. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/azure_devops/vpn_toggle.py +0 -0
  171. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/git/__init__.py +0 -0
  172. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/git/async_commands.py +0 -0
  173. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/git/commands.py +0 -0
  174. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/git/core.py +0 -0
  175. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/git/diff.py +0 -0
  176. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/git/operations.py +0 -0
  177. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/__init__.py +0 -0
  178. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/adf.py +0 -0
  179. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/async_commands.py +0 -0
  180. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/async_status.py +0 -0
  181. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/commands.py +0 -0
  182. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/comment_commands.py +0 -0
  183. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/config.py +0 -0
  184. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/create_commands.py +0 -0
  185. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/formatting.py +0 -0
  186. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/get_commands.py +0 -0
  187. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/helpers.py +0 -0
  188. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/parse_error_report.py +0 -0
  189. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/role_commands.py +0 -0
  190. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/state_helpers.py +0 -0
  191. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/update_commands.py +0 -0
  192. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/jira/vpn_wrapper.py +0 -0
  193. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/network/__init__.py +0 -0
  194. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/network/commands.py +0 -0
  195. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/network/detection.py +0 -0
  196. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/release/__init__.py +0 -0
  197. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/release/commands.py +0 -0
  198. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/release/helpers.py +0 -0
  199. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/runner.py +0 -0
  200. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/state.py +0 -0
  201. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/subprocess_utils.py +0 -0
  202. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/tasks/__init__.py +0 -0
  203. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/tasks/commands.py +0 -0
  204. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/testing.py +0 -0
  205. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/vpn/__init__.py +0 -0
  206. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/vpn/commands.py +0 -0
  207. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/vpn/runner.py +0 -0
  208. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/workflows/__init__.py +0 -0
  209. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/workflows/advancement.py +0 -0
  210. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/workflows/base.py +0 -0
  211. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/workflows/checklist.py +0 -0
  212. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/workflows/commands.py +0 -0
  213. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/workflows/manager.py +0 -0
  214. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/workflows/preflight.py +0 -0
  215. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/cli/workflows/worktree_setup.py +0 -0
  216. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/dispatcher.py +0 -0
  217. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/file_locking.py +0 -0
  218. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/__init__.py +0 -0
  219. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/apply-pull-request-review-suggestions/default-initiate-prompt.md +0 -0
  220. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/create-jira-epic/default-initiate-prompt.md +0 -0
  221. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/create-jira-issue/default-initiate-prompt.md +0 -0
  222. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/create-jira-subtask/default-initiate-prompt.md +0 -0
  223. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/loader.py +0 -0
  224. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/pull-request-review/default-completion-prompt.md +0 -0
  225. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/pull-request-review/default-decision-prompt.md +0 -0
  226. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/pull-request-review/default-file-review-prompt.md +0 -0
  227. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/pull-request-review/default-initiate-prompt.md +0 -0
  228. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/pull-request-review/default-summary-prompt.md +0 -0
  229. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/update-jira-issue/default-initiate-prompt.md +0 -0
  230. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-checklist-creation-prompt.md +0 -0
  231. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-commit-prompt.md +0 -0
  232. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-completion-prompt.md +0 -0
  233. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-implementation-prompt.md +0 -0
  234. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-implementation-review-prompt.md +0 -0
  235. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-initiate-prompt.md +0 -0
  236. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-planning-prompt.md +0 -0
  237. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-pull-request-prompt.md +0 -0
  238. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-retrieve-prompt.md +0 -0
  239. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-setup-prompt.md +0 -0
  240. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/prompts/work-on-jira-issue/default-verification-prompt.md +0 -0
  241. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/state.py +0 -0
  242. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/agentic_devtools/task_state.py +0 -0
  243. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/ayaiay.json +0 -0
  244. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/pyproject.toml +0 -0
  245. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/scripts/validate_test_structure.py +0 -0
  246. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/scripts/verify-agent-coverage.py +0 -0
  247. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-add-workflow-step-agents/checklists/requirements.md +0 -0
  248. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-add-workflow-step-agents/plan.md +0 -0
  249. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-add-workflow-step-agents/spec.md +0 -0
  250. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-add-workflow-step-agents/tasks.md +0 -0
  251. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-pypi-wheel-release/checklists/requirements.md +0 -0
  252. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-pypi-wheel-release/plan.md +0 -0
  253. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-pypi-wheel-release/spec.md +0 -0
  254. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-pypi-wheel-release/tasks.md +0 -0
  255. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-separate-docs/checklists/requirements.md +0 -0
  256. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-separate-docs/plan.md +0 -0
  257. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-separate-docs/spec.md +0 -0
  258. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/001-separate-docs/tasks.md +0 -0
  259. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/002-github-action-speckit-trigger/checklists/requirements.md +0 -0
  260. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/002-github-action-speckit-trigger/plan.md +0 -0
  261. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/002-github-action-speckit-trigger/spec.md +0 -0
  262. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/002-github-action-speckit-trigger/tasks.md +0 -0
  263. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/002-github-action-speckit-trigger/workflow-sequence-diagram.md +0 -0
  264. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/003-comprehensive-e2e-smoke-tests/checklists/requirements.md +0 -0
  265. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/003-comprehensive-e2e-smoke-tests/spec.md +0 -0
  266. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/003-e2e-smoke-tests-cli/plan.md +0 -0
  267. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/specs/README.md +0 -0
  268. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/README.md +0 -0
  269. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/__init__.py +0 -0
  270. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_context/__init__.py +0 -0
  271. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_context/test_commands.py +0 -0
  272. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_context/test_config.py +0 -0
  273. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_context/test_management.py +0 -0
  274. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/__init__.py +0 -0
  275. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/conftest.py +0 -0
  276. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_async_commands.py +0 -0
  277. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_auth.py +0 -0
  278. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_commands_api.py +0 -0
  279. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_commands_dry_run.py +0 -0
  280. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_config.py +0 -0
  281. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_file_review_commands.py +0 -0
  282. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_helpers.py +0 -0
  283. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_mark_reviewed.py +0 -0
  284. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_pipeline_commands.py +0 -0
  285. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_pr_summary_commands.py +0 -0
  286. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_pull_request_details_commands.py +0 -0
  287. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_review_commands.py +0 -0
  288. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_run_details_commands.py +0 -0
  289. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/azure_devops/test_vpn_toggle.py +0 -0
  290. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/cli/test_azure_app_insights_commands.py +0 -0
  291. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/cli/test_azure_auth.py +0 -0
  292. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/cli/test_azure_config.py +0 -0
  293. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/cli/test_runner.py +0 -0
  294. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/conftest.py +0 -0
  295. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/e2e_smoke/README.md +0 -0
  296. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/e2e_smoke/__init__.py +0 -0
  297. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/e2e_smoke/conftest.py +0 -0
  298. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/e2e_smoke/fixtures/cassettes/azure_devops_create_pr.yaml +0 -0
  299. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/e2e_smoke/fixtures/cassettes/jira_add_comment.yaml +0 -0
  300. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/e2e_smoke/fixtures/cassettes/jira_get_issue.yaml +0 -0
  301. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/e2e_smoke/test_azure_devops_commands_e2e.py +0 -0
  302. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/e2e_smoke/test_git_commands_e2e.py +0 -0
  303. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/e2e_smoke/test_jira_commands_e2e.py +0 -0
  304. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/network/test_detection.py +0 -0
  305. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/network/test_network_cli.py +0 -0
  306. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_background_tasks.py +0 -0
  307. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_checklist.py +0 -0
  308. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_checklist_commands.py +0 -0
  309. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_cli_state.py +0 -0
  310. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_dispatcher.py +0 -0
  311. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_file_locking.py +0 -0
  312. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_file_locking_platform.py +0 -0
  313. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_file_review_commands.py +0 -0
  314. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_file_review_queue_management.py +0 -0
  315. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_git_async.py +0 -0
  316. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_git_commands.py +0 -0
  317. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_git_core.py +0 -0
  318. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_git_diff.py +0 -0
  319. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_git_operations.py +0 -0
  320. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_git_utilities.py +0 -0
  321. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_jira_adf.py +0 -0
  322. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_jira_async.py +0 -0
  323. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_jira_commands.py +0 -0
  324. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_jira_config.py +0 -0
  325. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_jira_formatting.py +0 -0
  326. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_jira_helpers.py +0 -0
  327. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_jira_state.py +0 -0
  328. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_jira_update_commands.py +0 -0
  329. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_parse_error_report.py +0 -0
  330. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_preflight.py +0 -0
  331. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_prompt_loader.py +0 -0
  332. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_release_commands.py +0 -0
  333. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_release_helpers.py +0 -0
  334. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_release_integration.py +0 -0
  335. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_review_jira.py +0 -0
  336. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_review_prompts.py +0 -0
  337. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_role_commands.py +0 -0
  338. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_state.py +0 -0
  339. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_subprocess_utils.py +0 -0
  340. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_task_state.py +0 -0
  341. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_tasks_commands.py +0 -0
  342. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_testing.py +0 -0
  343. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_version.py +0 -0
  344. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_vpn_wrapper.py +0 -0
  345. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_workflow_advancement.py +0 -0
  346. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_workflow_commands.py +0 -0
  347. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_workflow_prompt.py +0 -0
  348. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_workflow_state.py +0 -0
  349. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/test_worktree_setup.py +0 -0
  350. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/vpn/test_vpn_commands.py +0 -0
  351. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/tests/vpn/test_vpn_runner.py +0 -0
  352. {agentic_devtools-0.2.4 → agentic_devtools-0.2.5}/trigger.txt +0 -0
@@ -0,0 +1,294 @@
1
+ ---
2
+ name: 'Security Scanning Agent'
3
+ description: 'Specialized agent for scanning code vulnerabilities and security issues'
4
+ model: claude-opus-4.5
5
+ temperature: 0.3
6
+ max_tokens: 8192
7
+ tools:
8
+ - view
9
+ - grep
10
+ - glob
11
+ - bash
12
+ - web_search
13
+ - github-mcp-server
14
+ ---
15
+
16
+ # Security Scanning Agent
17
+
18
+ ## Role
19
+
20
+ You are a specialized security scanning agent with expertise in identifying vulnerabilities, security issues, and potential threats in codebases. Your primary responsibility is to perform comprehensive security analysis and provide actionable recommendations.
21
+
22
+ ## Core Expertise
23
+
24
+ ### 1. Security Vulnerability Analysis
25
+
26
+ You excel at identifying:
27
+
28
+ - **Code Vulnerabilities**: SQL injection, XSS, CSRF, command injection
29
+ - **Authentication/Authorization Issues**: Weak credentials, improper access controls
30
+ - **Data Security**: Sensitive data exposure, insufficient encryption
31
+ - **Dependency Vulnerabilities**: Outdated packages with known CVEs
32
+ - **Configuration Issues**: Insecure defaults, exposed secrets
33
+ - **Input Validation**: Missing or inadequate input sanitization
34
+ - **API Security**: Rate limiting, authentication, authorization issues
35
+
36
+ ### 2. Security Scanning Tools
37
+
38
+ You leverage multiple security scanning tools:
39
+
40
+ - **Python Security**: `bandit`, `safety`, `pip-audit`
41
+ - **Dependency Scanning**: Check for known vulnerabilities in dependencies
42
+ - **Secret Detection**: Scan for hardcoded credentials, API keys, tokens
43
+ - **SAST (Static Analysis)**: Identify code-level security issues
44
+ - **Linting**: Security-focused linting rules
45
+
46
+ ### 3. Security Review Process
47
+
48
+ When scanning code for vulnerabilities:
49
+
50
+ 1. **Scan Dependencies**: Check all dependencies for known vulnerabilities
51
+ 2. **Static Analysis**: Run security-focused static analysis tools
52
+ 3. **Secret Detection**: Search for exposed credentials and API keys
53
+ 4. **Code Review**: Manual review of critical security areas
54
+ 5. **Configuration Review**: Check for insecure configurations
55
+ 6. **Documentation**: Generate comprehensive security report
56
+
57
+ ### 4. Risk Assessment
58
+
59
+ For each finding, you provide:
60
+
61
+ - **Severity Level**: Critical, High, Medium, Low, Informational
62
+ - **Impact Description**: What could go wrong if exploited
63
+ - **Affected Components**: Specific files, functions, or modules
64
+ - **Remediation Steps**: Clear instructions to fix the issue
65
+ - **Priority**: Immediate action required vs. technical debt
66
+
67
+ ## Scanning Workflow
68
+
69
+ When invoked to scan a repository:
70
+
71
+ ### Step 1: Environment Setup
72
+
73
+ ```bash
74
+ # Navigate to repository root
75
+ cd /path/to/repository
76
+
77
+ # Check Python version and environment
78
+ python --version
79
+
80
+ # Install security scanning tools if not available
81
+ pip install bandit safety pip-audit
82
+ ```
83
+
84
+ ### Step 2: Dependency Vulnerability Scan
85
+
86
+ ```bash
87
+ # Check for known vulnerabilities in installed packages
88
+ pip-audit
89
+
90
+ # Check for security issues in dependencies
91
+ safety scan --json
92
+
93
+ # Generate dependency report
94
+ pip list --format=json > dependencies.json
95
+ ```
96
+
97
+ ### Step 3: Static Security Analysis
98
+
99
+ ```bash
100
+ # Run bandit security scanner
101
+ bandit -r . -f json -o bandit-report.json
102
+
103
+ # Run with baseline for comparison (if available)
104
+ bandit -r . -f screen
105
+ ```
106
+
107
+ ### Step 4: Secret Detection
108
+
109
+ ```bash
110
+ # Search for potential secrets using grep patterns
111
+ grep -r -E "(password|secret|api_key|token|credential)" . --include="*.py" --include="*.json" --include="*.yml" --include="*.yaml" --exclude-dir=".git" --exclude-dir="node_modules" --exclude-dir="venv" --exclude-dir=".venv"
112
+
113
+ # Check for common secret patterns
114
+ grep -r -E "[0-9a-f]{32,}" . --include="*.py" --exclude-dir=".git" --exclude-dir="venv"
115
+ ```
116
+
117
+ ### Step 5: Manual Code Review
118
+
119
+ Focus on:
120
+
121
+ - **Authentication/Authorization logic**
122
+ - **Input validation and sanitization**
123
+ - **Database queries and ORM usage**
124
+ - **File operations and path handling**
125
+ - **Encryption and hashing implementations**
126
+ - **API endpoints and request handling**
127
+ - **Configuration files and environment variables**
128
+
129
+ ### Step 6: Generate Security Report
130
+
131
+ Create a comprehensive report including:
132
+
133
+ #### Executive Summary
134
+
135
+ - Total number of findings
136
+ - Breakdown by severity
137
+ - Critical issues requiring immediate attention
138
+ - Overall security posture assessment
139
+
140
+ #### Detailed Findings
141
+
142
+ For each vulnerability:
143
+
144
+ ```markdown
145
+ ### [SEVERITY] Vulnerability Title
146
+
147
+ **File**: `path/to/file.py:line_number`
148
+
149
+ **Description**: Brief description of the vulnerability
150
+
151
+ **Impact**: What could happen if this is exploited
152
+
153
+ **Remediation**:
154
+ 1. Step-by-step fix instructions
155
+ 2. Code example if applicable
156
+ 3. Additional security best practices
157
+
158
+ **References**:
159
+ - CWE ID (if applicable)
160
+ - OWASP reference (if applicable)
161
+ - CVE ID (if applicable)
162
+ ```
163
+
164
+ #### Recommendations
165
+
166
+ - **Immediate Actions**: Critical fixes needed now
167
+ - **Short-term Improvements**: High/Medium priority items
168
+ - **Long-term Enhancements**: Security posture improvements
169
+ - **Security Best Practices**: General recommendations
170
+
171
+ ## Output Format
172
+
173
+ Your security scan report should follow this structure:
174
+
175
+ ```markdown
176
+ # Security Scan Report
177
+
178
+ **Date**: YYYY-MM-DD
179
+ **Repository**: [repository name]
180
+ **Branch**: [branch name]
181
+ **Commit**: [commit SHA]
182
+
183
+ ## Executive Summary
184
+
185
+ - **Total Findings**: X issues detected
186
+ - Critical: X
187
+ - High: X
188
+ - Medium: X
189
+ - Low: X
190
+ - Informational: X
191
+
192
+ - **Overall Risk Level**: [Critical/High/Medium/Low]
193
+
194
+ ## Critical Findings (Immediate Action Required)
195
+
196
+ [List of critical issues with details]
197
+
198
+ ## High Priority Findings
199
+
200
+ [List of high priority issues]
201
+
202
+ ## Medium Priority Findings
203
+
204
+ [List of medium priority issues]
205
+
206
+ ## Low Priority & Informational
207
+
208
+ [List of low priority and informational findings]
209
+
210
+ ## Dependency Vulnerabilities
211
+
212
+ [Results from pip-audit and safety check]
213
+
214
+ ## Security Best Practices Recommendations
215
+
216
+ [General security recommendations for the codebase]
217
+
218
+ ## Tool Output Summary
219
+
220
+ - **Bandit**: [summary]
221
+ - **pip-audit**: [summary]
222
+ - **Safety**: [summary]
223
+ - **Manual Review**: [summary]
224
+
225
+ ## Next Steps
226
+
227
+ 1. Address all critical findings immediately
228
+ 2. Create tickets for high priority issues
229
+ 3. Schedule reviews for medium priority items
230
+ 4. Consider implementing security best practices
231
+
232
+ ---
233
+ *Automated security scan performed by Security Scanning Agent*
234
+ ```
235
+
236
+ ## Security Scanning Best Practices
237
+
238
+ 1. **Be Thorough**: Don't skip any critical areas
239
+ 2. **Be Accurate**: Minimize false positives with verification
240
+ 3. **Be Clear**: Provide actionable remediation steps
241
+ 4. **Be Timely**: Complete scans efficiently
242
+ 5. **Be Constructive**: Focus on improvement, not blame
243
+
244
+ ## Common Vulnerability Patterns to Check
245
+
246
+ ### Python-Specific
247
+
248
+ - `eval()` and `exec()` usage
249
+ - `pickle` deserialization without validation
250
+ - SQL string concatenation instead of parameterized queries
251
+ - Insecure random number generation (`random` vs `secrets`)
252
+ - Unsafe YAML loading (`yaml.load` vs `yaml.safe_load`)
253
+ - Command injection via `os.system()`, `subprocess.shell=True`
254
+ - Path traversal in file operations
255
+ - Hardcoded credentials or secrets
256
+
257
+ ### Dependencies
258
+
259
+ - Packages with known CVEs
260
+ - Outdated versions with security patches available
261
+ - Packages from untrusted sources
262
+ - Unnecessary dependencies increasing attack surface
263
+
264
+ ### Configuration
265
+
266
+ - Debug mode enabled in production
267
+ - Exposed error messages with stack traces
268
+ - Insecure default configurations
269
+ - Missing security headers
270
+ - Weak cryptographic settings
271
+
272
+ ## False Positive Handling
273
+
274
+ When a security tool reports a finding:
275
+
276
+ 1. **Verify**: Is this a real vulnerability or false positive?
277
+ 2. **Context**: Consider the specific use case and context
278
+ 3. **Risk**: Assess the actual exploitability and impact
279
+ 4. **Document**: If it's a false positive, document why
280
+ 5. **Suppress**: Add appropriate suppressions with justification
281
+
282
+ ## Communication Style
283
+
284
+ - **Professional**: Technical and precise
285
+ - **Clear**: Easy to understand even for non-security experts
286
+ - **Actionable**: Always provide clear next steps
287
+ - **Prioritized**: Focus on what matters most
288
+ - **Balanced**: Acknowledge both risks and mitigations
289
+
290
+ ## Remember
291
+
292
+ Your goal is to improve security, not to create alarm. Be thorough but pragmatic. Prioritize real risks over theoretical vulnerabilities. Provide context and help the team understand not just what's wrong, but why it matters and how to fix it.
293
+
294
+ Every security scan is an opportunity to improve the codebase and strengthen the organization's security posture. Your work directly protects users, data, and systems.
@@ -0,0 +1,326 @@
1
+ name: Security Scan on Main Merge
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ permissions:
9
+ contents: read
10
+ issues: write
11
+ pull-requests: write
12
+
13
+ jobs:
14
+ security-scan:
15
+ name: Run Security Scanning Agent
16
+ runs-on: ubuntu-latest
17
+
18
+ steps:
19
+ - name: Checkout code
20
+ uses: actions/checkout@v4
21
+ with:
22
+ fetch-depth: 0 # Full history for better analysis
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v5
26
+ with:
27
+ python-version: '3.11'
28
+ cache: 'pip'
29
+
30
+ - name: Install dependencies
31
+ run: |
32
+ python -m pip install --upgrade pip
33
+ pip install -e ".[dev]"
34
+ # Install security scanning tools
35
+ pip install bandit safety pip-audit
36
+
37
+ - name: Get Merge Information
38
+ id: merge-info
39
+ uses: actions/github-script@v7
40
+ with:
41
+ script: |
42
+ const commitSha = context.sha;
43
+ console.log(`Current commit SHA: ${commitSha}`);
44
+
45
+ // Get the commit details
46
+ const { data: commit } = await github.rest.repos.getCommit({
47
+ owner: context.repo.owner,
48
+ repo: context.repo.repo,
49
+ ref: commitSha
50
+ });
51
+
52
+ console.log(`Commit message: ${commit.commit.message}`);
53
+ console.log(`Author: ${commit.commit.author.name}`);
54
+
55
+ // Check if this is a merge commit
56
+ const isMerge = commit.parents.length > 1;
57
+ console.log(`Is merge commit: ${isMerge}`);
58
+
59
+ core.setOutput('commit_sha', commitSha);
60
+ core.setOutput('commit_message', commit.commit.message);
61
+ core.setOutput('is_merge', isMerge);
62
+
63
+ // Try to find associated PR using GitHub API
64
+ let prNumber = null;
65
+ let prTitle = '';
66
+ let prUrl = '';
67
+
68
+ try {
69
+ // Use the API to list PRs associated with this commit
70
+ const { data: prs } = await github.rest.repos.listPullRequestsAssociatedWithCommit({
71
+ owner: context.repo.owner,
72
+ repo: context.repo.repo,
73
+ commit_sha: commitSha
74
+ });
75
+
76
+ if (prs.length > 0) {
77
+ // Take the first merged PR
78
+ const pr = prs.find(p => p.merged_at) || prs[0];
79
+ prNumber = pr.number;
80
+ prTitle = pr.title;
81
+ prUrl = pr.html_url;
82
+ console.log(`Found associated PR via API: #${prNumber} - ${prTitle}`);
83
+ }
84
+ } catch (error) {
85
+ console.log(`Could not fetch associated PRs via API: ${error.message}`);
86
+ }
87
+
88
+ // Fallback: try to parse PR number from commit message
89
+ if (!prNumber && isMerge) {
90
+ const prMatch = commit.commit.message.match(/#(\d+)/);
91
+ if (prMatch) {
92
+ prNumber = parseInt(prMatch[1]);
93
+ console.log(`Found PR number from commit message: ${prNumber}`);
94
+
95
+ // Get PR details
96
+ try {
97
+ const { data: pr } = await github.rest.pulls.get({
98
+ owner: context.repo.owner,
99
+ repo: context.repo.repo,
100
+ pull_number: prNumber
101
+ });
102
+
103
+ prTitle = pr.title;
104
+ prUrl = pr.html_url;
105
+ console.log(`Fetched PR details: #${prNumber} - ${prTitle}`);
106
+ } catch (error) {
107
+ console.log(`Could not fetch PR details: ${error.message}`);
108
+ }
109
+ }
110
+ }
111
+
112
+ if (prNumber) {
113
+ core.setOutput('pr_number', prNumber);
114
+ core.setOutput('pr_title', prTitle);
115
+ core.setOutput('pr_url', prUrl);
116
+ }
117
+
118
+ - name: Run Dependency Vulnerability Scan
119
+ id: pip-audit
120
+ run: |
121
+ echo "Running pip-audit..."
122
+ pip-audit --format json > pip-audit-report.json || true
123
+
124
+ # Check if vulnerabilities were actually found by parsing JSON
125
+ if [ -s pip-audit-report.json ]; then
126
+ vuln_count=$(python -c "import json; data=json.load(open('pip-audit-report.json')); print(len(data.get('vulnerabilities', [])))" 2>/dev/null || echo "0")
127
+ if [ "$vuln_count" -gt 0 ]; then
128
+ echo "Dependency vulnerabilities found: $vuln_count vulnerability(ies)"
129
+ pip-audit || true
130
+ else
131
+ echo "No dependency vulnerabilities found"
132
+ fi
133
+ else
134
+ echo "pip-audit did not produce a report"
135
+ fi
136
+ continue-on-error: true
137
+
138
+ - name: Run Bandit Security Scanner
139
+ id: bandit
140
+ run: |
141
+ echo "Running bandit security scanner..."
142
+ bandit -r agentic_devtools -f json -o bandit-report.json || true
143
+
144
+ # Check if issues were actually found by parsing JSON
145
+ if [ -s bandit-report.json ]; then
146
+ issue_count=$(python -c "import json; data=json.load(open('bandit-report.json')); print(len(data.get('results', [])))" 2>/dev/null || echo "0")
147
+ if [ "$issue_count" -gt 0 ]; then
148
+ echo "Security issues found: $issue_count issue(s)"
149
+ bandit -r agentic_devtools -f screen || true
150
+ else
151
+ echo "No security issues found by bandit"
152
+ fi
153
+ else
154
+ echo "Bandit did not produce a report"
155
+ fi
156
+ continue-on-error: true
157
+
158
+ - name: Run Safety Scan
159
+ id: safety
160
+ run: |
161
+ echo "Running safety scan..."
162
+ safety scan --json > safety-report.json
163
+ safety_exit_code=$?
164
+
165
+ # Validate that the report exists and is valid JSON before interpreting results
166
+ if [ ! -s safety-report.json ]; then
167
+ echo "Safety scan did not produce a report (exit code: ${safety_exit_code})"
168
+ elif ! python -c "import json; json.load(open('safety-report.json'))" 2>/dev/null; then
169
+ echo "Safety scan produced an invalid JSON report (exit code: ${safety_exit_code})"
170
+ else
171
+ # At this point, we have a non-empty, parseable JSON report
172
+ if [ "${safety_exit_code}" -eq 0 ]; then
173
+ echo "No vulnerabilities found by safety"
174
+ else
175
+ echo "Vulnerabilities or issues reported by safety - see safety-report.json"
176
+ # Run a human-readable summary; ignore its exit code to keep the workflow running
177
+ safety scan || true
178
+ fi
179
+ fi
180
+ continue-on-error: true
181
+
182
+ - name: Create Security Scan Issue
183
+ uses: actions/github-script@v7
184
+ with:
185
+ script: |
186
+ const fs = require('fs');
187
+ const commitSha = '${{ steps.merge-info.outputs.commit_sha }}';
188
+ const isMerge = '${{ steps.merge-info.outputs.is_merge }}' === 'true';
189
+ const prNumber = '${{ steps.merge-info.outputs.pr_number }}';
190
+ const prTitle = ${{ toJson(steps.merge-info.outputs.pr_title) }};
191
+ const prUrl = ${{ toJson(steps.merge-info.outputs.pr_url) }};
192
+
193
+ // Read scan results
194
+ let pipAuditResults = 'No vulnerabilities detected';
195
+ let banditResults = 'No issues detected';
196
+ let safetyResults = 'No vulnerabilities detected';
197
+
198
+ try {
199
+ if (fs.existsSync('pip-audit-report.json')) {
200
+ const pipAudit = JSON.parse(fs.readFileSync('pip-audit-report.json', 'utf8'));
201
+ if (pipAudit.vulnerabilities && pipAudit.vulnerabilities.length > 0) {
202
+ pipAuditResults = `Found ${pipAudit.vulnerabilities.length} vulnerability(ies)`;
203
+ }
204
+ }
205
+ } catch (e) {
206
+ console.log('Could not read pip-audit results:', e.message);
207
+ }
208
+
209
+ try {
210
+ if (fs.existsSync('bandit-report.json')) {
211
+ const bandit = JSON.parse(fs.readFileSync('bandit-report.json', 'utf8'));
212
+ if (bandit.results && bandit.results.length > 0) {
213
+ const critical = bandit.results.filter(r => r.issue_severity === 'HIGH').length;
214
+ const medium = bandit.results.filter(r => r.issue_severity === 'MEDIUM').length;
215
+ const low = bandit.results.filter(r => r.issue_severity === 'LOW').length;
216
+ banditResults = `Found ${bandit.results.length} issue(s): ${critical} high, ${medium} medium, ${low} low`;
217
+ }
218
+ }
219
+ } catch (e) {
220
+ console.log('Could not read bandit results:', e.message);
221
+ }
222
+
223
+ try {
224
+ if (fs.existsSync('safety-report.json')) {
225
+ const safety = JSON.parse(fs.readFileSync('safety-report.json', 'utf8'));
226
+ if (safety.vulnerabilities && safety.vulnerabilities.length > 0) {
227
+ safetyResults = `Found ${safety.vulnerabilities.length} vulnerability(ies)`;
228
+ }
229
+ }
230
+ } catch (e) {
231
+ console.log('Could not read safety results:', e.message);
232
+ }
233
+
234
+ // Determine if there are any findings
235
+ const hasFindings =
236
+ pipAuditResults.includes('Found') ||
237
+ banditResults.includes('Found') ||
238
+ safetyResults.includes('Found');
239
+
240
+ // Build issue body
241
+ let issueBody = [
242
+ '<!-- security-scan-report -->',
243
+ '',
244
+ '# 🔒 Security Scan Report',
245
+ '',
246
+ '**Date**: ' + new Date().toISOString().split('T')[0],
247
+ '**Commit**: ' + commitSha.substring(0, 7),
248
+ '**Branch**: main',
249
+ ''
250
+ ];
251
+
252
+ if (isMerge && prNumber) {
253
+ issueBody.push(`**Merged PR**: [#${prNumber} - ${prTitle}](${prUrl})`);
254
+ issueBody.push('');
255
+ }
256
+
257
+ issueBody.push('## Summary');
258
+ issueBody.push('');
259
+
260
+ if (hasFindings) {
261
+ issueBody.push('⚠️ **Security findings detected** - review required.');
262
+ } else {
263
+ issueBody.push('✅ **No security issues detected** - all scans passed.');
264
+ }
265
+
266
+ issueBody.push('');
267
+ issueBody.push('## Scan Results');
268
+ issueBody.push('');
269
+ issueBody.push('### Dependency Vulnerabilities (pip-audit)');
270
+ issueBody.push('');
271
+ issueBody.push(pipAuditResults);
272
+ issueBody.push('');
273
+ issueBody.push('### Static Security Analysis (bandit)');
274
+ issueBody.push('');
275
+ issueBody.push(banditResults);
276
+ issueBody.push('');
277
+ issueBody.push('### Dependency Safety Check (safety)');
278
+ issueBody.push('');
279
+ issueBody.push(safetyResults);
280
+ issueBody.push('');
281
+ issueBody.push('## Next Steps');
282
+ issueBody.push('');
283
+
284
+ if (hasFindings) {
285
+ issueBody.push('1. Review the [workflow logs](' + context.payload.repository.html_url + '/actions/runs/' + context.runId + ') for detailed findings');
286
+ issueBody.push('2. Address critical and high-severity issues immediately');
287
+ issueBody.push('3. Create tickets for medium-priority items');
288
+ issueBody.push('4. Tag @copilot for assistance with remediation');
289
+ } else {
290
+ issueBody.push('No action required. Continue monitoring for security issues.');
291
+ }
292
+
293
+ issueBody.push('');
294
+ issueBody.push('---');
295
+ issueBody.push('');
296
+ issueBody.push('*Automated security scan performed by the Security Scanning Agent*');
297
+ issueBody.push('*View [workflow run](' + context.payload.repository.html_url + '/actions/runs/' + context.runId + ') for full details*');
298
+
299
+ const issueTitle = hasFindings
300
+ ? '🔒 Security Scan Report - Findings Detected'
301
+ : '🔒 Security Scan Report - All Clear';
302
+
303
+ // Create the issue
304
+ const { data: issue } = await github.rest.issues.create({
305
+ owner: context.repo.owner,
306
+ repo: context.repo.repo,
307
+ title: issueTitle,
308
+ body: issueBody.join('\n'),
309
+ labels: hasFindings
310
+ ? ['security', 'security-scan', 'needs-review']
311
+ : ['security', 'security-scan', 'all-clear']
312
+ });
313
+
314
+ console.log(`Created issue #${issue.number}: ${issue.title}`);
315
+ console.log(`Issue URL: ${issue.html_url}`);
316
+
317
+ - name: Upload Scan Reports
318
+ uses: actions/upload-artifact@v4
319
+ if: always()
320
+ with:
321
+ name: security-scan-reports
322
+ path: |
323
+ pip-audit-report.json
324
+ bandit-report.json
325
+ safety-report.json
326
+ retention-days: 90
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentic-devtools
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: AI assistant helper commands for the Dragonfly platform
5
5
  Author: Dragonfly Team
6
6
  License-Expression: MIT
@@ -800,3 +800,63 @@ The workflow uses labels to manage state:
800
800
  - `speckit:processing` - Specification generation in progress
801
801
  - `speckit:completed` - Specification created successfully
802
802
  - `speckit:failed` - Generation failed (check workflow logs)
803
+
804
+ ## GitHub Actions: Security Scanning on Main Merge
805
+
806
+ The repository includes an automated security scanning workflow that runs whenever
807
+ code is merged to the main branch. This ensures continuous security monitoring and
808
+ helps identify vulnerabilities early.
809
+
810
+ ### How It Works
811
+
812
+ 1. Workflow triggers automatically on push to main branch (typically after PR merge)
813
+ 2. Installs security scanning tools: `bandit`, `pip-audit`, `safety`
814
+ 3. Runs comprehensive security scans:
815
+ - **pip-audit**: Scans dependencies for known vulnerabilities (CVEs)
816
+ - **bandit**: Static analysis for common security issues in Python code
817
+ - **safety**: Checks dependencies against a database of known security issues
818
+ 4. Creates a GitHub issue with the security scan report
819
+ 5. Attaches scan reports as artifacts for detailed review
820
+
821
+ ### Security Scan Report
822
+
823
+ After each merge to main, an issue is automatically created with:
824
+
825
+ - **Summary**: Quick overview of security status
826
+ - **Scan Results**: Findings from each security tool
827
+ - **Severity Breakdown**: Critical, high, medium, low issues
828
+ - **Next Steps**: Recommended actions to address findings
829
+ - **Artifacts**: Detailed JSON reports attached to the workflow run
830
+
831
+ ### Labels
832
+
833
+ The workflow uses labels to categorize scan results:
834
+
835
+ - `security` - All security scan reports
836
+ - `security-scan` - Identifies automated scan issues
837
+ - `needs-review` - Findings detected, review required
838
+ - `all-clear` - No security issues detected
839
+
840
+ ### Responding to Security Findings
841
+
842
+ When a security scan detects issues:
843
+
844
+ 1. Review the created issue for summary of findings
845
+ 2. Check workflow logs for detailed information
846
+ 3. Download scan report artifacts for in-depth analysis
847
+ 4. Address critical and high-severity issues immediately
848
+ 5. Tag @copilot in the issue for assistance with remediation
849
+
850
+ ### Manual Security Scan
851
+
852
+ You can manually trigger a security scan by running:
853
+
854
+ ```bash
855
+ # Install security tools
856
+ pip install bandit safety pip-audit
857
+
858
+ # Run scans
859
+ pip-audit
860
+ bandit -r agentic_devtools
861
+ safety scan
862
+ ```