agentic-devtools 0.2.151__py3-none-any.whl → 0.2.153__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.151'
22
- __version_tuple__ = version_tuple = (0, 2, 151)
21
+ __version__ = version = '0.2.153'
22
+ __version_tuple__ = version_tuple = (0, 2, 153)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -71,7 +71,7 @@ def mypy_check_files(files: list[str], *, cwd: str | None = None) -> tuple[bool,
71
71
  if not files:
72
72
  return True, ""
73
73
  result = subprocess.run(
74
- ["mypy", "--ignore-missing-imports"] + files,
74
+ ["mypy", "--ignore-missing-imports", "--follow-imports=silent"] + files,
75
75
  cwd=cwd,
76
76
  capture_output=True,
77
77
  text=True,
@@ -49,11 +49,20 @@ _STATE_KEY = "copilot"
49
49
  _TRIGGERED_RUNS_KEY = "auto_start_triggered_runs"
50
50
  _MODEL_KEY = "model_id"
51
51
 
52
- # Retry constants for transient Windows file-lock errors (WinError 32).
52
+ # Retry constants for transient Windows file-lock errors (WinError 32) and
53
+ # rapid non-zero exit codes (batch wrapper fails because copilot.ps1 is locked).
53
54
  _RETRY_MAX_ATTEMPTS = 5 # retries (6 total tries)
54
55
  _RETRY_INITIAL_DELAY_S = 0.5 # first backoff delay in seconds
55
56
  _RETRY_BACKOFF_FACTOR = 2.0 # doubling
56
57
  _RETRY_MAX_DELAY_S = 4.0 # cap per delay in seconds
58
+ _RAPID_FAILURE_THRESHOLD_S = 5.0 # exit within this = transient failure
59
+
60
+ # Cleanup retry constants for transient Windows delete/write locks.
61
+ _CLEANUP_RETRYABLE_WINERRORS = {5, 32, 110}
62
+ _CLEANUP_MAX_RETRIES = 3
63
+ _CLEANUP_INITIAL_DELAY_S = 0.1
64
+ _CLEANUP_BACKOFF_FACTOR = 2.0
65
+ _CLEANUP_MAX_DELAY_S = 0.8
57
66
 
58
67
 
59
68
  def _read_model_from_state(state_file_path: Path) -> str | None:
@@ -200,14 +209,35 @@ def _is_retryable_win_error(exc: OSError) -> bool:
200
209
  return getattr(exc, "winerror", None) == 32
201
210
 
202
211
 
212
+ def _is_retryable_cleanup_win_error(exc: OSError) -> bool:
213
+ """Return ``True`` for transient Windows cleanup lock errors.
214
+
215
+ Covers common transient lock/access-denied cleanup failures:
216
+ - 5 (``ERROR_ACCESS_DENIED``)
217
+ - 32 (``ERROR_SHARING_VIOLATION``)
218
+ - 110 (``ERROR_OPEN_FAILED``)
219
+ """
220
+ return getattr(exc, "winerror", None) in _CLEANUP_RETRYABLE_WINERRORS
221
+
222
+
203
223
  def _run_copilot_with_retry(
204
224
  copilot_args: list[str],
205
225
  cwd: str,
206
226
  ) -> subprocess.CompletedProcess:
207
227
  """Run the Copilot CLI with retry logic for transient Windows file locks.
208
228
 
209
- Wraps ``subprocess.run`` with exponential backoff retries specifically for
210
- ``OSError`` with ``winerror == 32`` (Windows ``ERROR_SHARING_VIOLATION``).
229
+ Wraps ``subprocess.run`` with exponential backoff retries for two failure
230
+ modes:
231
+
232
+ 1. ``OSError`` with ``winerror == 32`` (Windows ``ERROR_SHARING_VIOLATION``)
233
+ raised directly by ``subprocess.run`` when the binary itself is locked.
234
+ 2. Rapid non-zero exit codes from Windows batch wrappers (process exits within
235
+ ``_RAPID_FAILURE_THRESHOLD_S`` seconds). This handles the case where
236
+ a ``.bat`` wrapper starts successfully but the underlying script
237
+ (``copilot.ps1``) is locked by another process (e.g., the VS Code
238
+ Copilot Chat extension during activation). The batch exits non-zero
239
+ almost immediately, which is distinguishable from a legitimate session
240
+ failure (which would take several seconds at minimum).
211
241
 
212
242
  Non-retryable errors (``FileNotFoundError``, other ``OSError`` variants)
213
243
  are re-raised immediately without retry.
@@ -217,7 +247,9 @@ def _run_copilot_with_retry(
217
247
  cwd: Working directory for the subprocess.
218
248
 
219
249
  Returns:
220
- The ``CompletedProcess`` on success.
250
+ The ``CompletedProcess`` result from the final attempt. This may have
251
+ a non-zero ``returncode`` when retries are exhausted for rapid
252
+ non-zero exits from Windows batch wrappers.
221
253
 
222
254
  Raises:
223
255
  FileNotFoundError: If the binary or cwd is missing (not retried).
@@ -232,7 +264,36 @@ def _run_copilot_with_retry(
232
264
 
233
265
  for attempt in range(1, total_tries + 1):
234
266
  try:
235
- return subprocess.run(copilot_args, cwd=cwd) # noqa: S603
267
+ t0 = time.monotonic()
268
+ result = subprocess.run(copilot_args, cwd=cwd) # noqa: S603
269
+ elapsed = time.monotonic() - t0
270
+
271
+ command_name = copilot_args[0].lower() if copilot_args else ""
272
+ is_batch_wrapper = command_name.endswith((".bat", ".cmd"))
273
+ # A rapid non-zero exit is only treated as transient for Windows
274
+ # batch wrappers, where .bat -> .ps1 handoff can fail while
275
+ # copilot.ps1 is temporarily locked by VS Code's extension.
276
+ if result.returncode != 0 and elapsed < _RAPID_FAILURE_THRESHOLD_S and is_batch_wrapper:
277
+ if attempt == total_tries:
278
+ print(
279
+ f"agdt-copilot-auto-start: error: retry budget exhausted "
280
+ f"after {total_tries} attempts (rapid exit code "
281
+ f"{result.returncode} in {elapsed:.1f}s)",
282
+ file=sys.stderr,
283
+ )
284
+ return result
285
+ print(
286
+ f"agdt-copilot-auto-start: warning: copilot exited rapidly "
287
+ f"(code={result.returncode}, {elapsed:.1f}s < {_RAPID_FAILURE_THRESHOLD_S}s, "
288
+ f"attempt {attempt}/{total_tries}), "
289
+ f"retrying in {delay:.1f}s (likely transient batch-wrapper file lock)",
290
+ file=sys.stderr,
291
+ )
292
+ time.sleep(delay)
293
+ delay = min(delay * _RETRY_BACKOFF_FACTOR, _RETRY_MAX_DELAY_S)
294
+ continue
295
+
296
+ return result
236
297
  except FileNotFoundError:
237
298
  raise
238
299
  except OSError as exc:
@@ -272,8 +333,9 @@ def _cleanup_auto_start_task(
272
333
  Delegates to :func:`~agentic_devtools.cli.vscode_tasks.remove_auto_start_task`.
273
334
 
274
335
  Errors are caught so that cleanup failure never changes the caller's exit
275
- code. Transient Windows file-lock errors (``winerror == 32``) emit a
276
- warning to stderr; all other errors are silently ignored.
336
+ code. Transient Windows cleanup lock errors (``winerror`` in ``[5, 32, 110]``)
337
+ are retried up to 3 times with exponential backoff; all failures are
338
+ otherwise silently ignored.
277
339
 
278
340
  Args:
279
341
  worktree_path: Absolute path to the worktree directory.
@@ -288,25 +350,41 @@ def _cleanup_auto_start_task(
288
350
  """
289
351
  vscode_dir = os.path.join(worktree_path, ".vscode")
290
352
  tasks_path = os.path.join(vscode_dir, "tasks.json")
291
- try:
292
- remove_auto_start_task(
293
- tasks_path,
294
- vscode_dir,
295
- task_label,
296
- delete_if_empty=created_new,
297
- )
298
- except OSError as exc:
299
- if _is_retryable_win_error(exc):
353
+ if _CLEANUP_MAX_RETRIES < 0:
354
+ return
355
+ attempts = _CLEANUP_MAX_RETRIES + 1
356
+ delay = _CLEANUP_INITIAL_DELAY_S
357
+ attempt = 1
358
+ while attempt <= attempts: # pragma: no branch
359
+ try:
360
+ remove_auto_start_task(
361
+ tasks_path,
362
+ vscode_dir,
363
+ task_label,
364
+ delete_if_empty=created_new,
365
+ )
366
+ return
367
+ except OSError as exc:
368
+ if not _is_retryable_cleanup_win_error(exc) or attempt == attempts:
369
+ # Best-effort cleanup: any failure must not affect caller exit code.
370
+ return
300
371
  print(
301
372
  f"agdt-copilot-auto-start: warning: cleanup encountered transient "
302
- f"file lock (winerror=32), skipping: {exc}",
373
+ f"file lock (attempt {attempt}/{attempts}, "
374
+ f"winerror={getattr(exc, 'winerror', '?')}), "
375
+ f"retrying in {delay:.1f}s: {exc}",
303
376
  file=sys.stderr,
304
377
  )
305
- # Best-effort cleanup: any failure must not affect the caller's exit code.
306
- except Exception:
307
- # Best-effort cleanup: any failure must be silently ignored so it cannot
308
- # affect the caller's exit code.
309
- pass
378
+ try:
379
+ time.sleep(delay)
380
+ except KeyboardInterrupt:
381
+ return
382
+ delay = min(delay * _CLEANUP_BACKOFF_FACTOR, _CLEANUP_MAX_DELAY_S)
383
+ attempt += 1
384
+ except Exception:
385
+ # Best-effort cleanup: any failure must be silently ignored so it cannot
386
+ # affect the caller's exit code.
387
+ return
310
388
 
311
389
 
312
390
  def copilot_auto_start_cmd(argv: list[str] | None = None) -> None:
@@ -156,6 +156,8 @@ class CopilotSessionResult:
156
156
  when this object is returned).
157
157
  process: The :class:`subprocess.Popen` handle for non-interactive
158
158
  sessions; ``None`` for interactive sessions.
159
+ log_file: Absolute path to the session log file for non-interactive
160
+ sessions; ``None`` for interactive sessions.
159
161
  """
160
162
 
161
163
  session_id: str
@@ -164,6 +166,7 @@ class CopilotSessionResult:
164
166
  start_time: str
165
167
  pid: int | None = field(default=None)
166
168
  process: subprocess.Popen | None = field(default=None, repr=False) # type: ignore[type-arg]
169
+ log_file: str | None = field(default=None)
167
170
 
168
171
 
169
172
  # ---------------------------------------------------------------------------
@@ -175,17 +178,25 @@ def _get_copilot_binary() -> str | None:
175
178
  """Return the path to the copilot binary, or ``None`` if not found.
176
179
 
177
180
  Checks (in order):
178
- 1. The standalone ``copilot`` binary on the system ``PATH``.
179
- 2. The managed install at ``~/.agdt/bin/copilot[.exe]``.
181
+ 1. The managed install at ``~/.agdt/bin/copilot[.exe]``.
182
+ 2. The standalone ``copilot`` binary on the system ``PATH``.
183
+
184
+ The managed install is preferred because it is a direct executable that
185
+ avoids the ``.bat`` → ``copilot.ps1`` indirection used by the VS Code
186
+ Copilot Chat extension's bundled CLI. On Windows, that ``.ps1`` file can
187
+ be temporarily locked by the extension during activation, causing transient
188
+ ``ERROR_SHARING_VIOLATION`` failures that are invisible to
189
+ ``subprocess.run`` (they manifest as non-zero exit codes from the batch
190
+ wrapper rather than ``OSError``).
180
191
 
181
192
  Returns:
182
193
  Absolute path string when found, ``None`` otherwise.
183
194
  """
195
+ if _MANAGED_COPILOT.is_file():
196
+ return str(_MANAGED_COPILOT)
184
197
  system_path = shutil.which("copilot")
185
198
  if system_path:
186
199
  return system_path
187
- if _MANAGED_COPILOT.is_file():
188
- return str(_MANAGED_COPILOT)
189
200
  return None
190
201
 
191
202
 
@@ -921,6 +932,7 @@ def start_copilot_session(
921
932
  start_time=start_time,
922
933
  pid=process.pid,
923
934
  process=process,
935
+ log_file=str(log_file_path),
924
936
  )
925
937
 
926
938
  _persist_session_state(result, model=model)
@@ -14,6 +14,7 @@ import platform
14
14
  import shutil
15
15
  import subprocess
16
16
  import sys
17
+ import threading
17
18
  from dataclasses import dataclass
18
19
  from pathlib import Path
19
20
 
@@ -2347,18 +2348,26 @@ def _start_copilot_session_for_workflow(
2347
2348
  # where stdin/stdout are redirected to DEVNULL/log files).
2348
2349
  has_tty = getattr(sys.stdin, "isatty", lambda: False)() and getattr(sys.stdout, "isatty", lambda: False)()
2349
2350
 
2350
- # --- Auto-start injection confirmed: skip background fallback ------------
2351
+ # --- Auto-start injection confirmed: delayed verification fallback ------
2351
2352
  # When the caller confirms the auto-start task was successfully injected
2352
- # into tasks.json, trust that VS Code will execute it (possibly after a
2353
- # trust/permission dialog). Do NOT start a duplicate background session.
2354
- # The previous 15-second timeout was insufficient for scenarios where
2355
- # VS Code shows a workspace trust or task permission dialog before
2356
- # executing the runOn:folderOpen task.
2353
+ # into tasks.json, we trust that VS Code *will probably* execute it.
2354
+ # However, the task can still fail (e.g., copilot binary locked, permission
2355
+ # dialog dismissed, VS Code crash). Instead of blindly returning True,
2356
+ # we spawn a non-daemon thread that waits for the run ID to appear in state
2357
+ # (proving the task ran). If it doesn't appear within the grace period,
2358
+ # the thread starts a non-interactive background session as a safety net.
2357
2359
  if autostart_injected and not has_tty:
2358
2360
  print(
2359
2361
  "\n--- VS Code auto-start task was successfully injected. "
2360
- "Trusting VS Code to handle the Copilot session "
2361
- "(no background fallback will be started). ---"
2362
+ f"A delayed verification (up to {_AUTOSTART_VERIFICATION_DELAY_S:.0f}s) "
2363
+ "will confirm it ran and may keep this task running; if not, a "
2364
+ "background fallback session will be started automatically. ---"
2365
+ )
2366
+ _spawn_delayed_autostart_verification(
2367
+ worktree_path=worktree_path,
2368
+ start_prompt=start_prompt,
2369
+ workflow_name=workflow_name,
2370
+ model=model,
2362
2371
  )
2363
2372
  return True
2364
2373
 
@@ -2475,12 +2484,24 @@ def _start_copilot_session_for_workflow(
2475
2484
 
2476
2485
  state_dir = get_state_dir()
2477
2486
  os.environ["AGENTIC_DEVTOOLS_STATE_DIR"] = str(state_dir)
2478
- start_copilot_session(
2487
+ session_result = start_copilot_session(
2479
2488
  prompt=start_prompt,
2480
2489
  working_directory=worktree_path,
2481
2490
  interactive=effective_interactive,
2482
2491
  model=model,
2483
2492
  )
2493
+ # Open the log file in VS Code for non-interactive sessions so the
2494
+ # user can watch Copilot output in real time. Skip in CI (no VS Code
2495
+ # or no TTY on the *original* caller — here we check is_vscode_available
2496
+ # which is False in headless CI).
2497
+ if (
2498
+ not effective_interactive
2499
+ and session_result is not None
2500
+ and session_result.log_file
2501
+ and is_vscode_available()
2502
+ and not _in_test_environment()
2503
+ ):
2504
+ _open_log_in_vscode(session_result.log_file, worktree_path)
2484
2505
  return True
2485
2506
 
2486
2507
 
@@ -2758,6 +2779,128 @@ def _start_copilot_session_for_update_jira_issue(
2758
2779
  _PENDING_AUTO_START_FILENAME = "pending-auto-start.json"
2759
2780
  _FOCUS_SETTLE_SECONDS: float = 2.0
2760
2781
 
2782
+ # Grace period (seconds) for the delayed auto-start verification.
2783
+ # VS Code may show a workspace trust or task permission dialog before
2784
+ # executing runOn:folderOpen, so the window must be generous.
2785
+ _AUTOSTART_VERIFICATION_DELAY_S: float = 45.0
2786
+ _AUTOSTART_VERIFICATION_POLL_S: float = 3.0
2787
+
2788
+
2789
+ def _spawn_delayed_autostart_verification(
2790
+ worktree_path: str,
2791
+ start_prompt: str,
2792
+ workflow_name: str,
2793
+ model: str | None = None,
2794
+ ) -> None:
2795
+ """Spawn a non-daemon thread that verifies the VS Code auto-start task ran.
2796
+
2797
+ After a grace period, the thread checks whether the auto-start task
2798
+ wrote its run ID into ``copilot.auto_start_triggered_runs``. If not,
2799
+ it starts a non-interactive background Copilot session as a fallback
2800
+ and opens the log file in VS Code (when available).
2801
+
2802
+ The thread is non-daemon so it keeps the parent process alive until
2803
+ verification completes (at most ``_AUTOSTART_VERIFICATION_DELAY_S``
2804
+ seconds). If a fallback session is started, the session's non-daemon
2805
+ tee-thread keeps the process alive for the duration of the Copilot
2806
+ subprocess.
2807
+
2808
+ **Safety guard**: This function is a no-op inside test environments
2809
+ (``PYTEST_CURRENT_TEST`` set) to prevent threads from outliving test
2810
+ cases and accidentally spawning real Copilot sessions.
2811
+ """
2812
+ if _in_test_environment():
2813
+ return
2814
+
2815
+ state_file_path, state_run_id = _resolve_state_context_in_worktree(worktree_path, include_run_id=True)
2816
+
2817
+ def _verify_and_fallback() -> None:
2818
+ import time
2819
+
2820
+ from agentic_devtools.cli.copilot.auto_start import _is_run_triggered
2821
+
2822
+ # Prefer the run_id from state when available; fall back to the pending marker written during injection.
2823
+ current_run_id = state_run_id.strip()
2824
+ if not current_run_id:
2825
+ marker_path = os.path.join(worktree_path, ".vscode", _PENDING_AUTO_START_FILENAME)
2826
+ try:
2827
+ if os.path.isfile(marker_path):
2828
+ with open(marker_path, encoding="utf-8") as fh:
2829
+ marker = json.load(fh)
2830
+ if isinstance(marker, dict):
2831
+ run_id_value = marker.get("run_id")
2832
+ if isinstance(run_id_value, str):
2833
+ current_run_id = run_id_value.strip()
2834
+ except (OSError, json.JSONDecodeError, ValueError):
2835
+ current_run_id = ""
2836
+
2837
+ if state_file_path is None or not current_run_id:
2838
+ # Cannot verify — fall through to start fallback immediately
2839
+ print(
2840
+ "\n--- Delayed verification: no state file or run ID available. "
2841
+ "Starting background fallback Copilot session. ---",
2842
+ file=sys.stderr,
2843
+ )
2844
+ else:
2845
+ # Poll for the run ID until the grace period expires.
2846
+ elapsed = 0.0
2847
+ while elapsed < _AUTOSTART_VERIFICATION_DELAY_S:
2848
+ if _is_run_triggered(state_file_path, current_run_id):
2849
+ # Auto-start task confirmed running — no fallback needed.
2850
+ return
2851
+ time.sleep(_AUTOSTART_VERIFICATION_POLL_S)
2852
+ elapsed += _AUTOSTART_VERIFICATION_POLL_S
2853
+
2854
+ print(
2855
+ f"\n--- Delayed verification: VS Code auto-start task did NOT run "
2856
+ f"within {_AUTOSTART_VERIFICATION_DELAY_S:.0f}s. "
2857
+ f"Starting background fallback Copilot session for {workflow_name}. ---",
2858
+ file=sys.stderr,
2859
+ )
2860
+
2861
+ # Start the fallback non-interactive session.
2862
+ try:
2863
+ from ..copilot.session import start_copilot_session
2864
+
2865
+ # Pin state writes to the target worktree state dir when available.
2866
+ target_state_dir = os.path.dirname(state_file_path) if state_file_path else None
2867
+ previous_state_dir = os.environ.get("AGENTIC_DEVTOOLS_STATE_DIR")
2868
+ if target_state_dir:
2869
+ os.environ["AGENTIC_DEVTOOLS_STATE_DIR"] = target_state_dir
2870
+ try:
2871
+ session_result = start_copilot_session(
2872
+ prompt=start_prompt,
2873
+ working_directory=worktree_path,
2874
+ interactive=False,
2875
+ model=model,
2876
+ )
2877
+ finally:
2878
+ if target_state_dir:
2879
+ if previous_state_dir is None:
2880
+ os.environ.pop("AGENTIC_DEVTOOLS_STATE_DIR", None)
2881
+ else:
2882
+ os.environ["AGENTIC_DEVTOOLS_STATE_DIR"] = previous_state_dir
2883
+ # Open log in VS Code so the user can monitor.
2884
+ if (
2885
+ session_result is not None
2886
+ and session_result.log_file
2887
+ and is_vscode_available()
2888
+ and not _in_test_environment()
2889
+ ):
2890
+ _open_log_in_vscode(session_result.log_file, worktree_path)
2891
+ except Exception as exc:
2892
+ print(
2893
+ f"Warning: delayed fallback Copilot session failed: {exc}",
2894
+ file=sys.stderr,
2895
+ )
2896
+
2897
+ thread = threading.Thread(
2898
+ target=_verify_and_fallback,
2899
+ name="autostart-verification",
2900
+ daemon=False,
2901
+ )
2902
+ thread.start()
2903
+
2761
2904
 
2762
2905
  def _write_pending_auto_start_marker(
2763
2906
  worktree_path: str,
@@ -2847,6 +2990,49 @@ def _focus_vscode_window(worktree_path: str) -> bool:
2847
2990
  return True
2848
2991
 
2849
2992
 
2993
+ def _open_log_in_vscode(log_file_path: str, worktree_path: str) -> None:
2994
+ """Open the Copilot session log file in VS Code for live monitoring.
2995
+
2996
+ Uses ``code <log_file_path>`` to request opening the file in VS Code.
2997
+ The CLI decides which window receives the file (often the most recently
2998
+ active window). Best-effort: errors are printed to stderr but never raised.
2999
+
3000
+ Args:
3001
+ log_file_path: Absolute path to the ``.log`` file.
3002
+ worktree_path: The worktree root (used for context in messages).
3003
+ """
3004
+ try:
3005
+ log_file_path = os.path.abspath(log_file_path)
3006
+ use_shell = platform.system() == "Windows"
3007
+ if use_shell and any(ch in log_file_path for ch in "&|<>^%"):
3008
+ print(
3009
+ "Warning: refusing to open log file in VS Code on Windows because "
3010
+ f"path contains cmd.exe metacharacters: {log_file_path!r}",
3011
+ file=sys.stderr,
3012
+ )
3013
+ return
3014
+ proc = subprocess.run(
3015
+ ["code", log_file_path],
3016
+ stdout=subprocess.DEVNULL,
3017
+ stderr=subprocess.DEVNULL,
3018
+ timeout=10,
3019
+ shell=use_shell,
3020
+ )
3021
+ if proc.returncode == 0:
3022
+ print(f"--- Opened Copilot session log in VS Code: {log_file_path} (worktree: {worktree_path}) ---")
3023
+ else:
3024
+ print(
3025
+ f"Warning: 'code' exited with {proc.returncode} when opening log file "
3026
+ f"{log_file_path!r} (worktree: {worktree_path}).",
3027
+ file=sys.stderr,
3028
+ )
3029
+ except (OSError, subprocess.TimeoutExpired) as exc:
3030
+ print(
3031
+ f"Warning: could not open log file in VS Code: {exc} (worktree: {worktree_path}, file: {log_file_path!r})",
3032
+ file=sys.stderr,
3033
+ )
3034
+
3035
+
2850
3036
  def _try_terminal_send_fallback(worktree_path: str, expected_run_id: str | None = None) -> bool:
2851
3037
  """Attempt to start the Copilot session via VS Code terminal sendSequence.
2852
3038
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentic-devtools
3
- Version: 0.2.151
3
+ Version: 0.2.153
4
4
  Summary: Agentic devtools integrate Jira, DevOps & more
5
5
  Author: ayaiayorg
6
6
  License-Expression: MIT
@@ -1,5 +1,5 @@
1
1
  agentic_devtools/__init__.py,sha256=J_Zw_vWKghk-cLmqI83hXQmSiS8zMhGIHM5WPLDkZuo,242
2
- agentic_devtools/_version.py,sha256=xDRWVqiO8RKIIagMHpbIPYhMlDAoCnUAFoy6B3FEcuQ,524
2
+ agentic_devtools/_version.py,sha256=9UFw2HQCP9rBdJ3j_NRYbbJi6Sf55MLpwyt-JW8SRTg,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
@@ -83,7 +83,7 @@ agentic_devtools/cli/checks/__init__.py,sha256=-_wI92qbaJabl6Wq_IJ6E_sMseUbUcwJv
83
83
  agentic_devtools/cli/checks/__main__.py,sha256=J5ilhApBdIVr2hZIB7gki42P0AOxLDVQJPoGi_-vTEo,201
84
84
  agentic_devtools/cli/checks/changed_files.py,sha256=VPsxiSjSgXJzvBmvpKJ0lXUBQhGq_Ppr1FaGq0xzZ_o,3639
85
85
  agentic_devtools/cli/checks/commands.py,sha256=2sc7LDDY8WZv0TNwbg9q2X2TfsVAyXmQossIKJj3tG4,13309
86
- agentic_devtools/cli/checks/lint.py,sha256=JjI6wq0F5fqRSQ2Wc91mu3v0_clC09IYWEHGhyec1l4,2462
86
+ agentic_devtools/cli/checks/lint.py,sha256=TPeVsc6YpwMyMBkHG7fXDtByCe9jvaA8fqQhtJGHZaM,2489
87
87
  agentic_devtools/cli/checks/structure.py,sha256=b6Z_eXoV4D6WU2EDaFBDRTHmHzHYos1dv5pNLTbs80E,1771
88
88
  agentic_devtools/cli/checks/tests.py,sha256=YyKrvHazR0X16E8CoGbtlzviievrM60EhIYvS2NXziQ,4069
89
89
  agentic_devtools/cli/ci/__init__.py,sha256=uQIx_tLCFKD0xKurgrMeAA_M9RDnflmwjl7QCPL1rcc,1897
@@ -145,8 +145,8 @@ agentic_devtools/cli/ci/tracker/renderer.py,sha256=6LhId0Ehfcmn_BAtrH69z9Cl4xBfQ
145
145
  agentic_devtools/cli/config/__init__.py,sha256=1KFPaXnhgP1ZBvIxxLAethaCeY5RzTM2GwU-xnt69ro,271
146
146
  agentic_devtools/cli/config/project_config.py,sha256=NjFW3Ds0vUxotGSJwp7Z4zktFItTvRp2pQ0PDdWwYIE,3193
147
147
  agentic_devtools/cli/copilot/__init__.py,sha256=FFlmM67FbXNTKvWDm4ySOUXL6DvZMnyMWNrGa_ALiq4,562
148
- agentic_devtools/cli/copilot/auto_start.py,sha256=FATVY0_IDrcTSndEtjchKOZB_hJMlG0pRvBIj9HO7yU,29763
149
- agentic_devtools/cli/copilot/session.py,sha256=q35FPVOlADYjSTtFpW0aHIDAOzQxqlVrUroo731rrbM,39112
148
+ agentic_devtools/cli/copilot/auto_start.py,sha256=0T3tIFw3R18_KPZ-00i9HsyG5Z1dccHZmLXqYEiB8xM,33522
149
+ agentic_devtools/cli/copilot/session.py,sha256=7v6Wx24Edf3pAkEu4eFbxrp_vIJFAQ4xLPZq73m_ghI,39821
150
150
  agentic_devtools/cli/git/__init__.py,sha256=ACoWYDgm8AMjk2wJ_Ycc5CY7xCXJQtfB55HzM-yx8WA,2538
151
151
  agentic_devtools/cli/git/agdt_branch.py,sha256=4qHH1dxYr3LraAB2Q6_fjgLrI3KrPCvXu-uOsJryN7M,37373
152
152
  agentic_devtools/cli/git/async_commands.py,sha256=DdvoMsqcVh5T78wXoFQO2m1B61QC-QPDsy6bwZ9VBDk,9883
@@ -262,7 +262,7 @@ agentic_devtools/cli/workflows/commands.py,sha256=qSxjCl4sn3jRvR7I8MB5QS-wOOZxUU
262
262
  agentic_devtools/cli/workflows/engine_resolution.py,sha256=HUYMGERXCyJJgc0RgWg5w7JdpHGPjdXfnPkZAqMn5iI,2309
263
263
  agentic_devtools/cli/workflows/manager.py,sha256=BxSDix8IV6QQhawIMvfIN0iOKbkFFxAauwONlkse9uU,28721
264
264
  agentic_devtools/cli/workflows/preflight.py,sha256=vljErnXSvtgbN9m5zArGjZ4iemk6LajPj2mqGkyqGbs,12233
265
- agentic_devtools/cli/workflows/worktree_setup.py,sha256=m7FV-gFjest05WRwHTY1jviclpxeMF_w7hxn7XSC24Q,156708
265
+ agentic_devtools/cli/workflows/worktree_setup.py,sha256=4IJkFXM5NLzabVG196tiQuLyr7tTe8u7CcwDZPpZas4,164794
266
266
  agentic_devtools/context/__init__.py,sha256=Rrk10DQHFnkFiFd1w9EFwBPo36tV-HJqjgaANm_3mg0,427
267
267
  agentic_devtools/context/models.py,sha256=tsKM6x_yAHkWcJOzNrgMaqkXyDxR1mVZyC5Dbu_rIdE,1518
268
268
  agentic_devtools/context/nodes.py,sha256=cexQ92RbPddTWV8zwLTK4EPEfVGZZk4Sp-nzblgE3wo,4951
@@ -600,8 +600,8 @@ agentic_devtools/_bundled_skills/prompts/speckit.plan.prompt.md,sha256=IJja5r2Sd
600
600
  agentic_devtools/_bundled_skills/prompts/speckit.specify.prompt.md,sha256=eyzE3GRi2hyW30a6xPYOU7q6MJf0skrD-baEGURYqpg,31
601
601
  agentic_devtools/_bundled_skills/prompts/speckit.tasks.prompt.md,sha256=iPxXwon5nV6dNcJV8-JoP3PssKUVXctNiG-C9SsRhB8,29
602
602
  agentic_devtools/_bundled_skills/prompts/speckit.taskstoissues.prompt.md,sha256=L5Y21PMSoUcPAAdHy2Jnf-wGVdi04jV_pPvyOJZfpm0,37
603
- agentic_devtools-0.2.151.dist-info/METADATA,sha256=KWDxjZUz_HZXaxl5rOmFFvqatb6pzcba-pY5iCWbY94,29269
604
- agentic_devtools-0.2.151.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
605
- agentic_devtools-0.2.151.dist-info/entry_points.txt,sha256=CDSdq-zuDsv3AHT2rcY6EBRdtL1tsV_Q3shNW1AP7Ec,9329
606
- agentic_devtools-0.2.151.dist-info/licenses/LICENSE,sha256=yBEDdICksxhBYLWoERKp9MTqwGnUF6Ryj9BTLwXTc6k,1082
607
- agentic_devtools-0.2.151.dist-info/RECORD,,
603
+ agentic_devtools-0.2.153.dist-info/METADATA,sha256=APDULGnAXEENihaIMQpAg2Jcy3h4hGRCtHNyZH5QqIY,29269
604
+ agentic_devtools-0.2.153.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
605
+ agentic_devtools-0.2.153.dist-info/entry_points.txt,sha256=CDSdq-zuDsv3AHT2rcY6EBRdtL1tsV_Q3shNW1AP7Ec,9329
606
+ agentic_devtools-0.2.153.dist-info/licenses/LICENSE,sha256=yBEDdICksxhBYLWoERKp9MTqwGnUF6Ryj9BTLwXTc6k,1082
607
+ agentic_devtools-0.2.153.dist-info/RECORD,,