agentic-devtools 0.2.259__py3-none-any.whl → 0.2.261__py3-none-any.whl

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.
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.2.259'
22
- __version_tuple__ = version_tuple = (0, 2, 259)
21
+ __version__ = version = '0.2.261'
22
+ __version_tuple__ = version_tuple = (0, 2, 261)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -4,5 +4,6 @@ Provides CLI commands for the two-phase audit workflow:
4
4
  1. ``agdt-audit-prepare`` — deterministic batch data collection
5
5
  2. ``agdt-audit-dispatch-evaluation`` — tracking issue + branch push + coding-agent assignment
6
6
  3. ``agdt-audit-apply`` — apply agent evaluation results
7
- 4. ``agdt-audit-on-pr-close`` — threshold check and dispatch trigger
7
+ 4. ``agdt-audit-label-eval-pr`` — label handoff evaluation PRs for loop ignore
8
+ 5. ``agdt-audit-on-pr-close`` — threshold check and dispatch trigger
8
9
  """
@@ -8,6 +8,7 @@ from __future__ import annotations
8
8
 
9
9
  import logging
10
10
  import os
11
+ import re
11
12
  import shutil
12
13
  import subprocess
13
14
  from pathlib import Path
@@ -15,6 +16,7 @@ from pathlib import Path
15
16
  from agentic_devtools.cli.audit.config import batch_branch_name
16
17
  from agentic_devtools.cli.audit.labeling import cleanup_failed_batch, finalize_batch_labels
17
18
  from agentic_devtools.cli.ci.provider import CIPlatformProvider
19
+ from agentic_devtools.cli.ci.scheduler import AUTO_MERGE_LABEL
18
20
 
19
21
  logger = logging.getLogger(__name__)
20
22
 
@@ -46,6 +48,14 @@ _OUTCOME_HEADLINES = {
46
48
  }
47
49
 
48
50
 
51
+ def _extract_pr_number_from_url(pr_url: str) -> int | None:
52
+ """Extract pull request number from a GitHub PR URL."""
53
+ match = re.search(r"/pull/([0-9]+)", pr_url)
54
+ if not match:
55
+ return None
56
+ return int(match.group(1))
57
+
58
+
49
59
  def apply_audit_results(
50
60
  provider: CIPlatformProvider,
51
61
  batch_id: str,
@@ -351,6 +361,9 @@ def _create_instruction_pr(
351
361
  )
352
362
 
353
363
  try:
364
+ # Intentionally synchronous git/PR creation: delegating this to a coding-agent
365
+ # branch would risk recursive apply triggers with the widened copilot/**
366
+ # branch filter plus audit-batches/**/agent-output/** path filter.
354
367
  # Create the branch first so that any failure here leaves the original
355
368
  # branch clean (no copied files to clean up).
356
369
  _run_git("create branch", "checkout", "-B", branch_name)
@@ -391,9 +404,21 @@ def _create_instruction_pr(
391
404
  original_cwd = os.getcwd()
392
405
  try:
393
406
  os.chdir(repo_path)
394
- return provider.create_pull_request(title=pr_title, body=description)
407
+ pr_url = provider.create_pull_request(title=pr_title, body=description)
395
408
  finally:
396
409
  os.chdir(original_cwd)
410
+ if pr_url:
411
+ pr_number = _extract_pr_number_from_url(pr_url)
412
+ if pr_number:
413
+ try:
414
+ provider.add_label(pr_number, AUTO_MERGE_LABEL)
415
+ except Exception as exc:
416
+ logger.warning(
417
+ "Failed to add auto-merge label to instruction PR #%d: %s",
418
+ pr_number,
419
+ exc,
420
+ )
421
+ return pr_url
397
422
 
398
423
  except subprocess.CalledProcessError:
399
424
  return ""
@@ -459,8 +484,8 @@ def build_pr_description(
459
484
  "",
460
485
  "---",
461
486
  "",
462
- "⚠️ **Human review required** this PR was generated by the review feedback audit agent.",
463
- "Do NOT auto-merge.",
487
+ "This PR is eligible for automated processing by the AI PR loop when the "
488
+ "`ai-auto-merge-allowed` label is present.",
464
489
  ]
465
490
  )
466
491
 
@@ -1,7 +1,8 @@
1
1
  """CLI entry points for audit commands.
2
2
 
3
3
  Provides ``agdt-audit-prepare``, ``agdt-audit-dispatch-evaluation``,
4
- ``agdt-audit-apply``, and ``agdt-audit-on-pr-close`` commands.
4
+ ``agdt-audit-apply``, ``agdt-audit-label-eval-pr``, ``agdt-audit-reap-stale``, and
5
+ ``agdt-audit-on-pr-close`` commands.
5
6
  """
6
7
 
7
8
  from __future__ import annotations
@@ -12,11 +13,26 @@ import logging
12
13
  import os
13
14
  import sys
14
15
 
16
+ from agentic_devtools.cli.audit.config import LABEL_AI_PR_LOOP_IGNORE
15
17
  from agentic_devtools.cli.github.repo_resolution import resolve_github_repo
16
18
 
17
19
  logger = logging.getLogger(__name__)
18
20
 
19
21
 
22
+ def _touches_audit_agent_output(changed_files: list[str]) -> bool:
23
+ """Return True when PR files include audit agent output payloads."""
24
+ from agentic_devtools.cli.ci.scheduler import ( # noqa: PLC0415
25
+ AUDIT_AGENT_OUTPUT_PATH_PREFIX,
26
+ AUDIT_AGENT_OUTPUT_PATH_SUBSTR,
27
+ )
28
+
29
+ for file_path in changed_files:
30
+ normalized = str(file_path).replace("\\", "/")
31
+ if normalized.startswith(AUDIT_AGENT_OUTPUT_PATH_PREFIX) and AUDIT_AGENT_OUTPUT_PATH_SUBSTR in normalized:
32
+ return True
33
+ return False
34
+
35
+
20
36
  def _write_step_summary(markdown: str) -> None:
21
37
  """Append a Markdown block to the GitHub Actions job summary, when available.
22
38
 
@@ -213,3 +229,42 @@ def audit_reap_stale_command() -> None:
213
229
  except Exception as e:
214
230
  logger.error("Audit reap failed: %s", e, exc_info=True)
215
231
  sys.exit(1)
232
+
233
+
234
+ def audit_label_eval_pr_command() -> None:
235
+ """CLI entry point for agdt-audit-label-eval-pr.
236
+
237
+ Checks whether the PR touches ``audit-batches/**/agent-output/**`` and, if so,
238
+ applies ``ai-pr-loop-ignore`` to keep the handoff/evaluation PR out of the
239
+ AI PR loop.
240
+ """
241
+ parser = argparse.ArgumentParser(description="Label audit evaluation PR when applicable")
242
+ parser.add_argument("--pr-number", type=int, required=True, help="Pull request number")
243
+ parser.add_argument("--repo", type=str, default=None, help="Repository (owner/repo)")
244
+ args = parser.parse_args()
245
+
246
+ from agentic_devtools.cli.ci.github_provider import GitHubActionsProvider
247
+
248
+ repo = resolve_github_repo(args.repo or os.environ.get("GITHUB_REPOSITORY"))
249
+ provider = GitHubActionsProvider(repo=repo)
250
+
251
+ try:
252
+ files = provider.list_pr_files(args.pr_number)
253
+ touches_agent_output = _touches_audit_agent_output(files)
254
+ label_applied = False
255
+ if touches_agent_output:
256
+ provider.add_label(args.pr_number, LABEL_AI_PR_LOOP_IGNORE)
257
+ label_applied = True
258
+ print(
259
+ json.dumps(
260
+ {
261
+ "pr_number": args.pr_number,
262
+ "touches_audit_agent_output": touches_agent_output,
263
+ "label_applied": label_applied,
264
+ "label": LABEL_AI_PR_LOOP_IGNORE if label_applied else "",
265
+ }
266
+ )
267
+ )
268
+ except Exception as e:
269
+ logger.error("Audit eval PR labeling failed: %s", e, exc_info=True)
270
+ sys.exit(1)
@@ -6,6 +6,7 @@ CLI argument > ``.github/agdt-config.json`` > hardcoded default.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
+ from agentic_devtools.cli.ci.scheduler import SKIP_LABEL
9
10
  from agentic_devtools.config import load_repo_config
10
11
 
11
12
  DEFAULT_BATCH_SIZE = 10
@@ -14,6 +15,7 @@ DEFAULT_THRESHOLD = 10
14
15
  # Label constants
15
16
  LABEL_AUDITED = "review-feedback-audited"
16
17
  LABEL_IN_PROGRESS = "review-feedback-audit-in-progress"
18
+ LABEL_AI_PR_LOOP_IGNORE = SKIP_LABEL
17
19
 
18
20
 
19
21
  def batch_branch_name(batch_id: str) -> str:
@@ -235,6 +235,7 @@ query($owner: String!, $name: String!) {
235
235
  number
236
236
  createdAt
237
237
  isCrossRepository
238
+ headRefName
238
239
  headRefOid
239
240
  labels(first: 100) {
240
241
  nodes { name }
@@ -259,6 +260,7 @@ query($owner: String!, $name: String!, $endCursor: String!) {
259
260
  number
260
261
  createdAt
261
262
  isCrossRepository
263
+ headRefName
262
264
  headRefOid
263
265
  labels(first: 100) {
264
266
  nodes { name }
@@ -3878,6 +3880,7 @@ class GitHubActionsProvider(CIPlatformProvider):
3878
3880
  Sorted list (oldest-first) of EligiblePR dataclasses.
3879
3881
  """
3880
3882
  from agentic_devtools.cli.ci.scheduler import (
3883
+ AUDIT_EVAL_BRANCH_SUBSTR,
3881
3884
  AUTO_MERGE_LABEL,
3882
3885
  SKIP_LABEL,
3883
3886
  filter_eligible_prs,
@@ -3934,6 +3937,20 @@ class GitHubActionsProvider(CIPlatformProvider):
3934
3937
  continue
3935
3938
 
3936
3939
  has_auto_merge = AUTO_MERGE_LABEL in labels
3940
+ head_ref_name = str(node.get("headRefName", "") or "")
3941
+ touches_audit_agent_output = False
3942
+ if AUDIT_EVAL_BRANCH_SUBSTR in head_ref_name.lower():
3943
+ try:
3944
+ touches_audit_agent_output = self._touches_audit_agent_output(pr_number)
3945
+ except Exception as exc:
3946
+ # On API failure, fail-safe: do not exclude the PR.
3947
+ logger.warning(
3948
+ "Failed to evaluate audit agent-output paths for PR #%d: %s",
3949
+ pr_number,
3950
+ exc,
3951
+ )
3952
+ touches_audit_agent_output = False
3953
+
3937
3954
  is_human_blocked = False
3938
3955
  if not has_auto_merge:
3939
3956
  # Check if human-blocked: CI passing + approved + missing auto-merge label
@@ -3954,8 +3971,11 @@ class GitHubActionsProvider(CIPlatformProvider):
3954
3971
  "number": pr_number,
3955
3972
  "createdAt": node.get("createdAt", ""),
3956
3973
  "isCrossRepository": node.get("isCrossRepository", False),
3974
+ "headRefName": head_ref_name,
3975
+ "head_ref": head_ref_name,
3957
3976
  "labels": label_nodes,
3958
3977
  "is_human_blocked": is_human_blocked,
3978
+ "touches_audit_agent_output": touches_audit_agent_output,
3959
3979
  }
3960
3980
  eligible_prs.extend(filter_eligible_prs([candidate]))
3961
3981
  if effective_max is not None and len(eligible_prs) >= effective_max:
@@ -3970,6 +3990,20 @@ class GitHubActionsProvider(CIPlatformProvider):
3970
3990
 
3971
3991
  return eligible_prs
3972
3992
 
3993
+ def _touches_audit_agent_output(self, pr_number: int) -> bool:
3994
+ """Return True when a PR includes audit evaluation agent-output files."""
3995
+ from agentic_devtools.cli.ci.scheduler import ( # noqa: PLC0415
3996
+ AUDIT_AGENT_OUTPUT_PATH_PREFIX,
3997
+ AUDIT_AGENT_OUTPUT_PATH_SUBSTR,
3998
+ )
3999
+
4000
+ changed_files = self.list_pr_files(pr_number)
4001
+ for file_path in changed_files:
4002
+ normalized = str(file_path).replace("\\", "/")
4003
+ if normalized.startswith(AUDIT_AGENT_OUTPUT_PATH_PREFIX) and AUDIT_AGENT_OUTPUT_PATH_SUBSTR in normalized:
4004
+ return True
4005
+ return False
4006
+
3973
4007
  def _is_human_blocked(self, pr_number: int, head_sha: str) -> bool:
3974
4008
  """Check if a PR is human-blocked (CI passing + approved + no auto-merge label).
3975
4009
 
@@ -27,6 +27,9 @@ VARIABLE_POOL_SIZE = "AI_PR_LOOP_ELIGIBLE_PR_LIMIT"
27
27
 
28
28
  SKIP_LABEL = "ai-pr-loop-ignore"
29
29
  AUTO_MERGE_LABEL = "ai-auto-merge-allowed"
30
+ AUDIT_EVAL_BRANCH_SUBSTR = "copilot"
31
+ AUDIT_AGENT_OUTPUT_PATH_PREFIX = "audit-batches/"
32
+ AUDIT_AGENT_OUTPUT_PATH_SUBSTR = "/agent-output/"
30
33
 
31
34
 
32
35
  @dataclass(frozen=True)
@@ -68,11 +71,15 @@ def filter_eligible_prs(prs: list[dict], skip_label: str = SKIP_LABEL) -> list[E
68
71
  - Excludes fork PRs (isCrossRepository)
69
72
  - Excludes PRs with the skip label (default: ai-pr-loop-ignore)
70
73
  - Excludes human-blocked PRs (is_human_blocked flag)
74
+ - Excludes audit evaluation handoff PRs as a scheduler backstop when BOTH:
75
+ - head branch contains ``copilot`` and
76
+ - provider enrichment says PR touches ``audit-batches/**/agent-output/**``
71
77
  - Preserves creation order (assumes input is sorted oldest-first)
72
78
 
73
79
  Args:
74
80
  prs: List of PR dicts with keys: number, createdAt, isCrossRepository,
75
- labels (list of dicts with 'name'), is_human_blocked (bool).
81
+ labels (list of dicts with 'name'), is_human_blocked (bool),
82
+ head_ref/headRefName (str), touches_audit_agent_output (bool).
76
83
  skip_label: Label name that excludes a PR from processing.
77
84
 
78
85
  Returns:
@@ -118,6 +125,13 @@ def filter_eligible_prs(prs: list[dict], skip_label: str = SKIP_LABEL) -> list[E
118
125
  if pr.get("is_human_blocked", False):
119
126
  continue
120
127
 
128
+ # Scheduler backstop for audit evaluation handoff PRs.
129
+ raw_head_ref = pr.get("head_ref", pr.get("headRefName", ""))
130
+ head_ref = str(raw_head_ref) if raw_head_ref is not None else ""
131
+ touches_audit_agent_output = bool(pr.get("touches_audit_agent_output", False))
132
+ if AUDIT_EVAL_BRANCH_SUBSTR in head_ref.lower() and touches_audit_agent_output:
133
+ continue
134
+
121
135
  eligible.append(EligiblePR(number=number, created_at=created_at))
122
136
 
123
137
  return eligible
@@ -0,0 +1,78 @@
1
+ """Jira SDK client factory — lazy wrapper around atlassian-python-api."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import MutableMapping
6
+ from typing import Any
7
+
8
+ from agentic_devtools.cli.jira.config import get_jira_auth_header, get_jira_base_url
9
+ from agentic_devtools.cli.jira.helpers import _get_ssl_verify
10
+
11
+ __all__ = ["build_jira_client", "is_cloud"]
12
+
13
+
14
+ def build_jira_client(): # type: ignore[return]
15
+ """Build a configured atlassian.Jira client from repo helpers.
16
+
17
+ The ``atlassian-python-api`` package is imported lazily so that importing
18
+ this module does not require it to be installed.
19
+
20
+ Raises:
21
+ ImportError: If ``atlassian-python-api`` is not installed.
22
+ ValueError: If the Jira base URL is not configured (propagated from
23
+ ``get_jira_base_url()``).
24
+ OSError: If Jira credentials are missing (propagated from
25
+ ``get_jira_auth_header()``).
26
+ RuntimeError: If the installed SDK version is incompatible (missing
27
+ ``_session`` or non-MutableMapping headers).
28
+ """
29
+ try:
30
+ from atlassian import Jira
31
+ except ModuleNotFoundError as exc:
32
+ if exc.name != "atlassian":
33
+ raise
34
+ raise ImportError(
35
+ "atlassian-python-api is required for Jira SDK client support. "
36
+ 'Install it with: pip install "atlassian-python-api>=4.0,<5"'
37
+ ) from exc
38
+
39
+ url = get_jira_base_url()
40
+ ssl = _get_ssl_verify()
41
+ auth_header = get_jira_auth_header() # may raise OSError
42
+
43
+ client = Jira(url=url, verify_ssl=ssl)
44
+
45
+ # Verify SDK compatibility before header injection
46
+ session = getattr(client, "_session", None)
47
+ if session is None:
48
+ version = _get_atlassian_version()
49
+ raise RuntimeError(f"atlassian-python-api {version} is incompatible: expected client._session to exist")
50
+
51
+ headers = getattr(session, "headers", None)
52
+ if not isinstance(headers, MutableMapping):
53
+ version = _get_atlassian_version()
54
+ raise RuntimeError(
55
+ f"atlassian-python-api {version} is incompatible: expected client._session.headers to be a MutableMapping"
56
+ )
57
+
58
+ headers["Authorization"] = auth_header
59
+ return client
60
+
61
+
62
+ def is_cloud(metadata: dict[str, Any]) -> bool:
63
+ """Return True if metadata indicates a Jira Cloud deployment.
64
+
65
+ Checks ``metadata.get("deploymentType") == "Cloud"`` (exact,
66
+ case-sensitive match mirroring the Jira REST ``serverInfo`` response).
67
+ """
68
+ return metadata.get("deploymentType") == "Cloud"
69
+
70
+
71
+ def _get_atlassian_version() -> str:
72
+ """Best-effort version detection for error messages."""
73
+ try:
74
+ from importlib.metadata import version
75
+
76
+ return version("atlassian-python-api")
77
+ except Exception:
78
+ return "unknown"
@@ -1,11 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentic-devtools
3
- Version: 0.2.259
3
+ Version: 0.2.261
4
4
  Summary: Agentic devtools integrate Jira, DevOps & more
5
5
  Author: ayaiayorg
6
6
  License-Expression: MIT
7
7
  License-File: LICENSE
8
8
  Requires-Python: >=3.10
9
+ Requires-Dist: atlassian-python-api<5,>=4.0
9
10
  Requires-Dist: azure-identity>=1.0.0
10
11
  Requires-Dist: azure-monitor-query>=1.0.0
11
12
  Requires-Dist: build>=1.2.2
@@ -1,5 +1,5 @@
1
1
  agentic_devtools/__init__.py,sha256=J_Zw_vWKghk-cLmqI83hXQmSiS8zMhGIHM5WPLDkZuo,242
2
- agentic_devtools/_version.py,sha256=oYVy2gkppQXpBIPMhcfNgGDqrHlFOJg-qvATCFO1Ccg,524
2
+ agentic_devtools/_version.py,sha256=hYp1V1xhtQQMK_nMtSjCy0aUhriw4xldgbSzDYuCkOc,524
3
3
  agentic_devtools/agdt_gitignore.py,sha256=Jcc9BUiCIqCG9tUuHc5Jua5tPT_QtTnEK6Gr0v_RrKQ,1559
4
4
  agentic_devtools/background_tasks.py,sha256=QCiCSTcU8HSFa_g_fa2NWXhhRZU4zo6YgsPSIVVmdOU,16971
5
5
  agentic_devtools/config.py,sha256=X6zv8Twviv9LMiV7TYy_6SQeNezJHV8lBNvIxLkOqLY,8049
@@ -35,10 +35,10 @@ agentic_devtools/cli/analysis/__init__.py,sha256=kz7oA5sw0POHxYLB5OJv39ZAZ-tTNCA
35
35
  agentic_devtools/cli/analysis/context_resolver.py,sha256=IVSB4Xsf1z_tSkwjqeDN8nB80-mfK5biVZz5N-1Mu8E,6290
36
36
  agentic_devtools/cli/analysis/external_context.py,sha256=MgG8pucxdOumISMklcWD-EL2ISCWLEPLIkkMePouHO4,8234
37
37
  agentic_devtools/cli/analysis/identity_scanner.py,sha256=xDeDYm6jyfI6o6Z9-xFnLRNXh_s0AukVCajA2tqZJKg,5699
38
- agentic_devtools/cli/audit/__init__.py,sha256=eYUKdaCYpTa9FRxp6tc2G20PaL7tO87zTckjFO6-4eA,424
39
- agentic_devtools/cli/audit/apply.py,sha256=FFr4kGwVfR-BLxvjLpiIPHXO8evOQaGV2VuuwcaKEt8,20121
40
- agentic_devtools/cli/audit/commands.py,sha256=HvJtlpVHnZzhHomxmAoW2UtAR3qEBiLBSQHb9y5bBe4,8560
41
- agentic_devtools/cli/audit/config.py,sha256=HcHumoEdH2l03ITqnMMCIZet7zoZAA_We4RovTa4KIQ,2771
38
+ agentic_devtools/cli/audit/__init__.py,sha256=bSQ4kpS8h25sgLJ-kSwAyEsM9hFWPBCcTjiO20CMlGc,505
39
+ agentic_devtools/cli/audit/apply.py,sha256=fbpj1fEQmiUDhq5-zlS-Mstub7BKLhTx8f2YY0vXDIc,21142
40
+ agentic_devtools/cli/audit/commands.py,sha256=YZn9DcNjiHJrDzxa9qB9s3ctoWMyJH6uM1bCArxTMsk,10806
41
+ agentic_devtools/cli/audit/config.py,sha256=Ublc-Hsh54qTjU0bgBYWkgNqnJsRIL0eb5KrruJeXfk,2865
42
42
  agentic_devtools/cli/audit/dispatch.py,sha256=JJSDj4_f-z26mi3wdP-kWcazETzAqtsJQN4HiJr619s,5199
43
43
  agentic_devtools/cli/audit/instruction_resolver.py,sha256=dpEp6X15Wf6Llu9iMLMeRzch6I0IaZMC5F0yvJ7TYcE,3332
44
44
  agentic_devtools/cli/audit/labeling.py,sha256=6PSshy0E8MJ5-KRrr8NeMMlhGHE1oFWIuZS_fgVL66g,2198
@@ -119,14 +119,14 @@ agentic_devtools/cli/ci/agent_assignment.py,sha256=UFlSNju1exEjDvrzHfiQ5snGcd2ka
119
119
  agentic_devtools/cli/ci/commands.py,sha256=Y4dJUuPF9zfXCggyXM_fctatTYqoZ3l0WmvujU-RD6o,6465
120
120
  agentic_devtools/cli/ci/delete_review_comments_command.py,sha256=Fqv8zl33oY5z0BmUbyxDAoRxJen8TtgHa1WHDRVaXTU,8237
121
121
  agentic_devtools/cli/ci/exceptions.py,sha256=DjkYB2lxM9V5jN916A3NznDEPkdyx6IM6w_k865SmJw,1418
122
- agentic_devtools/cli/ci/github_provider.py,sha256=32rMHx5pq_CqYhLOTpbkZsigowszQO1Lx9xRqUD5K-8,198681
122
+ agentic_devtools/cli/ci/github_provider.py,sha256=m94kZqHHtHZtznHM_q7iVOXhXrPskSpE6V0GTnEpZlo,200300
123
123
  agentic_devtools/cli/ci/guards.py,sha256=-kfmTMb4KoMeyHFTUJjfDWoXbNZ3waX-9NdBrq1Bcy4,26927
124
124
  agentic_devtools/cli/ci/job_logs.py,sha256=s3Ufinl2WQPVISq8g11ZXU5GJ0WCKDmZlbyGJzvJEVU,9911
125
125
  agentic_devtools/cli/ci/logging_config.py,sha256=Tw_h8LB709gbMd0WZMATLAPIJ1r_c_nE18Bi4bvldHA,2340
126
126
  agentic_devtools/cli/ci/models.py,sha256=FPlBEHKrPLnvT3-uy6Xr1R7zrGogAqKrWxiFmf6ENrA,13975
127
127
  agentic_devtools/cli/ci/provider.py,sha256=hNSldVBRxbW85gS7REkpvtSFCt0GdB2nD0HcOVoNtcU,31470
128
128
  agentic_devtools/cli/ci/retry.py,sha256=BqJcI2AqgVj2tzhhF56FoD-gzSfUu0IxZjg2vQ0_zXE,3077
129
- agentic_devtools/cli/ci/scheduler.py,sha256=-u2RMAdGCtc6MCsksFDIVbL40uSARrLc1I_wSyChknY,15617
129
+ agentic_devtools/cli/ci/scheduler.py,sha256=xMVpsNsEJIo-R7w21YRgCMx_E8_bsjvePwL6FU961JQ,16436
130
130
  agentic_devtools/cli/ci/scheduler_command.py,sha256=ShcfGC0XS7JOXq7prFpTYE0M2FWYbEVK-WuhG3lMErA,3179
131
131
  agentic_devtools/cli/ci/speckit_trigger.py,sha256=VeKd8d6z126cat3HWeZJE3sbTUMC1ctiJa5hAN98O58,909
132
132
  agentic_devtools/cli/ci/evaluator/__init__.py,sha256=rcwdufq14Fj0uNI-bJNLOuIdxuIO8f4y6EztlMp8_Ik,1071
@@ -249,6 +249,7 @@ agentic_devtools/cli/jira/get_commands.py,sha256=UssjkLUqvygAK5K49IdHB3sfOTguluB
249
249
  agentic_devtools/cli/jira/helpers.py,sha256=saby63-eyGyg9JYpYBU1TTjT467UXFkoxVX4cuK4css,6614
250
250
  agentic_devtools/cli/jira/parse_error_report.py,sha256=kN1Re8JR3cQuiUXRg8p4Gu1-2yDCYH10vs3uSv_jpG4,12837
251
251
  agentic_devtools/cli/jira/role_commands.py,sha256=rv7F0-5jE27oPiCPDW0n_PdLyYYHWTaKfl2xXq9qPgo,20478
252
+ agentic_devtools/cli/jira/sdk.py,sha256=xgdl4hCieuEExhGZQRNizQnABcCH6fgJGLzCdUtORMo,2774
252
253
  agentic_devtools/cli/jira/state_helpers.py,sha256=O3Uuyi95OkFIu2bHpqcVXWR40tJBF5Z-sY6lPv1T9PA,1050
253
254
  agentic_devtools/cli/jira/update_commands.py,sha256=R8JsIccdVmfUAsvxxRyGaa3SbNEhvu_OQDqKrNiHVTY,7589
254
255
  agentic_devtools/cli/jira/vpn_wrapper.py,sha256=3zpR6syTSDtjP-W2Cs-xWFyx3oyj1phEAvWvs9geHVA,2142
@@ -747,8 +748,8 @@ agentic_devtools/_bundled_skills/prompts/speckit.plan.prompt.md,sha256=IJja5r2Sd
747
748
  agentic_devtools/_bundled_skills/prompts/speckit.specify.prompt.md,sha256=eyzE3GRi2hyW30a6xPYOU7q6MJf0skrD-baEGURYqpg,31
748
749
  agentic_devtools/_bundled_skills/prompts/speckit.tasks.prompt.md,sha256=iPxXwon5nV6dNcJV8-JoP3PssKUVXctNiG-C9SsRhB8,29
749
750
  agentic_devtools/_bundled_skills/prompts/speckit.taskstoissues.prompt.md,sha256=L5Y21PMSoUcPAAdHy2Jnf-wGVdi04jV_pPvyOJZfpm0,37
750
- agentic_devtools-0.2.259.dist-info/METADATA,sha256=UUs-zlNJ_-0uM2dnS_Zsj9sSGMSEI931gMZ2wnj6ZLY,29707
751
- agentic_devtools-0.2.259.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
752
- agentic_devtools-0.2.259.dist-info/entry_points.txt,sha256=w34XSOdR4kX3N64ZmSlfcUinrIp_mSXiPfNNew1efzg,10749
753
- agentic_devtools-0.2.259.dist-info/licenses/LICENSE,sha256=yBEDdICksxhBYLWoERKp9MTqwGnUF6Ryj9BTLwXTc6k,1082
754
- agentic_devtools-0.2.259.dist-info/RECORD,,
751
+ agentic_devtools-0.2.261.dist-info/METADATA,sha256=ru1D03KPJKZrE9j31dVJTwg9WsQoLBzV5OOCXovN6KM,29751
752
+ agentic_devtools-0.2.261.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
753
+ agentic_devtools-0.2.261.dist-info/entry_points.txt,sha256=iTmAesp5CsbGlcEjdT6ZD01eJg8plYRL6WFmz4E1wNc,10840
754
+ agentic_devtools-0.2.261.dist-info/licenses/LICENSE,sha256=yBEDdICksxhBYLWoERKp9MTqwGnUF6Ryj9BTLwXTc6k,1082
755
+ agentic_devtools-0.2.261.dist-info/RECORD,,
@@ -11,6 +11,7 @@ agdt-approve-pull-request = agentic_devtools.cli.runner:run_as_script
11
11
  agdt-assign-implementation-agent = agentic_devtools.cli.ci.commands:assign_implementation_agent_command
12
12
  agdt-audit-apply = agentic_devtools.cli.audit.commands:audit_apply_command
13
13
  agdt-audit-dispatch-evaluation = agentic_devtools.cli.audit.commands:audit_dispatch_evaluation_command
14
+ agdt-audit-label-eval-pr = agentic_devtools.cli.audit.commands:audit_label_eval_pr_command
14
15
  agdt-audit-on-pr-close = agentic_devtools.cli.audit.on_pr_close:on_pr_close_command
15
16
  agdt-audit-prepare = agentic_devtools.cli.audit.commands:audit_prepare_command
16
17
  agdt-audit-reap-stale = agentic_devtools.cli.audit.commands:audit_reap_stale_command