agentic-devtools 0.2.0__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.
Files changed (92) hide show
  1. agdt_ai_helpers/__init__.py +34 -0
  2. agentic_devtools/__init__.py +8 -0
  3. agentic_devtools/background_tasks.py +598 -0
  4. agentic_devtools/cli/__init__.py +1 -0
  5. agentic_devtools/cli/azure_devops/__init__.py +222 -0
  6. agentic_devtools/cli/azure_devops/async_commands.py +1218 -0
  7. agentic_devtools/cli/azure_devops/auth.py +34 -0
  8. agentic_devtools/cli/azure_devops/commands.py +728 -0
  9. agentic_devtools/cli/azure_devops/config.py +49 -0
  10. agentic_devtools/cli/azure_devops/file_review_commands.py +1038 -0
  11. agentic_devtools/cli/azure_devops/helpers.py +561 -0
  12. agentic_devtools/cli/azure_devops/mark_reviewed.py +756 -0
  13. agentic_devtools/cli/azure_devops/pipeline_commands.py +724 -0
  14. agentic_devtools/cli/azure_devops/pr_summary_commands.py +579 -0
  15. agentic_devtools/cli/azure_devops/pull_request_details_commands.py +596 -0
  16. agentic_devtools/cli/azure_devops/review_commands.py +700 -0
  17. agentic_devtools/cli/azure_devops/review_helpers.py +191 -0
  18. agentic_devtools/cli/azure_devops/review_jira.py +308 -0
  19. agentic_devtools/cli/azure_devops/review_prompts.py +263 -0
  20. agentic_devtools/cli/azure_devops/run_details_commands.py +935 -0
  21. agentic_devtools/cli/azure_devops/vpn_toggle.py +1220 -0
  22. agentic_devtools/cli/git/__init__.py +91 -0
  23. agentic_devtools/cli/git/async_commands.py +294 -0
  24. agentic_devtools/cli/git/commands.py +399 -0
  25. agentic_devtools/cli/git/core.py +152 -0
  26. agentic_devtools/cli/git/diff.py +210 -0
  27. agentic_devtools/cli/git/operations.py +737 -0
  28. agentic_devtools/cli/jira/__init__.py +114 -0
  29. agentic_devtools/cli/jira/adf.py +105 -0
  30. agentic_devtools/cli/jira/async_commands.py +439 -0
  31. agentic_devtools/cli/jira/async_status.py +27 -0
  32. agentic_devtools/cli/jira/commands.py +28 -0
  33. agentic_devtools/cli/jira/comment_commands.py +141 -0
  34. agentic_devtools/cli/jira/config.py +69 -0
  35. agentic_devtools/cli/jira/create_commands.py +293 -0
  36. agentic_devtools/cli/jira/formatting.py +131 -0
  37. agentic_devtools/cli/jira/get_commands.py +287 -0
  38. agentic_devtools/cli/jira/helpers.py +278 -0
  39. agentic_devtools/cli/jira/parse_error_report.py +352 -0
  40. agentic_devtools/cli/jira/role_commands.py +560 -0
  41. agentic_devtools/cli/jira/state_helpers.py +39 -0
  42. agentic_devtools/cli/jira/update_commands.py +222 -0
  43. agentic_devtools/cli/jira/vpn_wrapper.py +58 -0
  44. agentic_devtools/cli/release/__init__.py +5 -0
  45. agentic_devtools/cli/release/commands.py +113 -0
  46. agentic_devtools/cli/release/helpers.py +113 -0
  47. agentic_devtools/cli/runner.py +318 -0
  48. agentic_devtools/cli/state.py +174 -0
  49. agentic_devtools/cli/subprocess_utils.py +109 -0
  50. agentic_devtools/cli/tasks/__init__.py +28 -0
  51. agentic_devtools/cli/tasks/commands.py +851 -0
  52. agentic_devtools/cli/testing.py +442 -0
  53. agentic_devtools/cli/workflows/__init__.py +80 -0
  54. agentic_devtools/cli/workflows/advancement.py +204 -0
  55. agentic_devtools/cli/workflows/base.py +240 -0
  56. agentic_devtools/cli/workflows/checklist.py +278 -0
  57. agentic_devtools/cli/workflows/commands.py +1610 -0
  58. agentic_devtools/cli/workflows/manager.py +802 -0
  59. agentic_devtools/cli/workflows/preflight.py +323 -0
  60. agentic_devtools/cli/workflows/worktree_setup.py +1110 -0
  61. agentic_devtools/dispatcher.py +704 -0
  62. agentic_devtools/file_locking.py +203 -0
  63. agentic_devtools/prompts/__init__.py +38 -0
  64. agentic_devtools/prompts/apply-pull-request-review-suggestions/default-initiate-prompt.md +82 -0
  65. agentic_devtools/prompts/create-jira-epic/default-initiate-prompt.md +63 -0
  66. agentic_devtools/prompts/create-jira-issue/default-initiate-prompt.md +306 -0
  67. agentic_devtools/prompts/create-jira-subtask/default-initiate-prompt.md +57 -0
  68. agentic_devtools/prompts/loader.py +377 -0
  69. agentic_devtools/prompts/pull-request-review/default-completion-prompt.md +45 -0
  70. agentic_devtools/prompts/pull-request-review/default-decision-prompt.md +63 -0
  71. agentic_devtools/prompts/pull-request-review/default-file-review-prompt.md +69 -0
  72. agentic_devtools/prompts/pull-request-review/default-initiate-prompt.md +50 -0
  73. agentic_devtools/prompts/pull-request-review/default-summary-prompt.md +40 -0
  74. agentic_devtools/prompts/update-jira-issue/default-initiate-prompt.md +78 -0
  75. agentic_devtools/prompts/work-on-jira-issue/default-checklist-creation-prompt.md +58 -0
  76. agentic_devtools/prompts/work-on-jira-issue/default-commit-prompt.md +47 -0
  77. agentic_devtools/prompts/work-on-jira-issue/default-completion-prompt.md +65 -0
  78. agentic_devtools/prompts/work-on-jira-issue/default-implementation-prompt.md +66 -0
  79. agentic_devtools/prompts/work-on-jira-issue/default-implementation-review-prompt.md +60 -0
  80. agentic_devtools/prompts/work-on-jira-issue/default-initiate-prompt.md +67 -0
  81. agentic_devtools/prompts/work-on-jira-issue/default-planning-prompt.md +50 -0
  82. agentic_devtools/prompts/work-on-jira-issue/default-pull-request-prompt.md +56 -0
  83. agentic_devtools/prompts/work-on-jira-issue/default-retrieve-prompt.md +29 -0
  84. agentic_devtools/prompts/work-on-jira-issue/default-setup-prompt.md +19 -0
  85. agentic_devtools/prompts/work-on-jira-issue/default-verification-prompt.md +73 -0
  86. agentic_devtools/state.py +754 -0
  87. agentic_devtools/task_state.py +902 -0
  88. agentic_devtools-0.2.0.dist-info/METADATA +544 -0
  89. agentic_devtools-0.2.0.dist-info/RECORD +92 -0
  90. agentic_devtools-0.2.0.dist-info/WHEEL +4 -0
  91. agentic_devtools-0.2.0.dist-info/entry_points.txt +79 -0
  92. agentic_devtools-0.2.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,544 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentic-devtools
3
+ Version: 0.2.0
4
+ Summary: AI assistant helper commands for the Dragonfly platform
5
+ Author: Dragonfly Team
6
+ License-Expression: MIT
7
+ License-File: LICENSE
8
+ Requires-Python: >=3.8
9
+ Requires-Dist: build>=1.2.2
10
+ Requires-Dist: jinja2>=3.0.0
11
+ Requires-Dist: requests>=2.28.0
12
+ Requires-Dist: twine>=5.0.0
13
+ Provides-Extra: dev
14
+ Requires-Dist: black>=24.0.0; extra == 'dev'
15
+ Requires-Dist: isort>=5.12.0; extra == 'dev'
16
+ Requires-Dist: mypy>=1.8.0; extra == 'dev'
17
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
18
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
19
+ Requires-Dist: ruff>=0.4.0; extra == 'dev'
20
+ Description-Content-Type: text/markdown
21
+
22
+ # agentic-devtools
23
+
24
+ AI assistant helper commands for the Dragonfly platform. This package provides simple CLI commands that can be easily auto-approved by VS Code AI assistants.
25
+
26
+ ## Spec-Driven Development (SDD) Support
27
+
28
+ This project follows [Spec-Driven Development](https://github.com/github/spec-kit) methodology. SDD enables structured feature development through executable specifications.
29
+
30
+ ### Quick Start with SDD
31
+
32
+ The `.specify/` directory contains all SDD templates and tools:
33
+
34
+ ```
35
+ .specify/
36
+ ├── memory/
37
+ │ └── constitution.md # Project principles and governance
38
+ ├── templates/
39
+ │ ├── spec-template.md # Feature specification template
40
+ │ ├── plan-template.md # Implementation plan template
41
+ │ ├── tasks-template.md # Task breakdown template
42
+ │ ├── checklist-template.md
43
+ │ └── commands/ # SDD workflow command templates
44
+ └── scripts/ # Helper scripts (bash & PowerShell)
45
+ ```
46
+
47
+ ### SDD Workflow
48
+
49
+ 1. **Constitution** - Define project principles (see `.specify/memory/constitution.md`)
50
+ 2. **Specify** - Create feature spec in `specs/NNN-feature-name/spec.md`
51
+ 3. **Plan** - Develop technical implementation plan
52
+ 4. **Tasks** - Break down into actionable tasks
53
+ 5. **Implement** - Execute tasks following the plan
54
+
55
+ ### Creating a New Feature
56
+
57
+ ```bash
58
+ # Create feature branch and spec directory
59
+ .specify/scripts/bash/create-new-feature.sh "feature-name"
60
+
61
+ # This creates:
62
+ # - Branch: NNN-feature-name
63
+ # - Directory: specs/NNN-feature-name/
64
+ # - Initial spec.md from template
65
+ ```
66
+
67
+ ### SDD Command Templates
68
+
69
+ AI assistants can use these command templates (in `.specify/templates/commands/`):
70
+
71
+ - `/speckit.constitution` - Update project principles
72
+ - `/speckit.specify` - Create feature specifications
73
+ - `/speckit.plan` - Develop implementation plans
74
+ - `/speckit.tasks` - Generate task lists
75
+ - `/speckit.implement` - Execute implementation
76
+ - `/speckit.analyze` - Validate cross-artifact consistency
77
+ - `/speckit.checklist` - Generate quality checklists
78
+
79
+ See individual command files for detailed execution workflows.
80
+
81
+ ## Development Container
82
+
83
+ This repository includes a devcontainer configuration for Python development. To get started quickly:
84
+
85
+ - **VS Code**: Install the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers), then click "Reopen in Container"
86
+ - **GitHub Codespaces**: Create a new Codespace - all dependencies will be set up automatically
87
+
88
+ See [.devcontainer/README.md](.devcontainer/README.md) for more details.
89
+
90
+ ## Installation
91
+
92
+ ### Option 1: Using pipx (Recommended)
93
+
94
+ [pipx](https://pipx.pypa.io/) installs CLI tools in isolated environments with commands available globally. This is the cleanest approach.
95
+
96
+ ```bash
97
+ # Install pipx if you don't have it
98
+ pip install pipx
99
+ pipx ensurepath
100
+
101
+ # ⚠️ IMPORTANT: Restart your terminal for PATH changes to take effect
102
+ # Or refresh PATH in current PowerShell session:
103
+ $env:PATH = [System.Environment]::GetEnvironmentVariable("PATH", "User") + ";" + [System.Environment]::GetEnvironmentVariable("PATH", "Machine")
104
+
105
+ # Install agentic-devtools
106
+ cd agentic_devtools
107
+ pipx install .
108
+
109
+ # For development (editable install)
110
+ pipx install -e .
111
+ ```
112
+
113
+ ### Option 2: Global pip install
114
+
115
+ Install directly into your system Python. May require administrator privileges on Windows.
116
+
117
+ ```bash
118
+ cd agentic_devtools
119
+
120
+ # Global install (may need admin/sudo)
121
+ pip install .
122
+
123
+ # For development (editable)
124
+ pip install -e .
125
+
126
+ # With dev dependencies
127
+ pip install -e ".[dev]"
128
+ ```
129
+
130
+ > **Note:** Avoid `pip install --user` as it places scripts in a directory that may not be on your PATH (`%APPDATA%\Python\PythonXXX\Scripts` on Windows).
131
+
132
+ ### Verify Installation
133
+
134
+ After installation, verify the commands are available:
135
+
136
+ ```bash
137
+ agdt-set --help
138
+ agdt-show
139
+ ```
140
+
141
+ If commands are not found after installation:
142
+
143
+ - **pipx:** Run `pipx ensurepath` and restart your terminal
144
+ - **pip global:** Ensure `C:\PythonXXX\Scripts` (or equivalent) is on your PATH
145
+
146
+ ## Design Principles
147
+
148
+ 1. **Auto-approvable commands**: Commands are designed to be auto-approved by VS Code
149
+ 2. **JSON state file**: Single `agdt-state.json` file stores all parameters
150
+ 3. **Generic set/get pattern**: One `agdt-set` command works for all keys (approve once, use for everything)
151
+ 4. **Native special character support**: Python CLI handles `()[]{}` and multiline content directly!
152
+ 5. **Test-driven development**: Tests first with strict coverage expectations
153
+ 6. **UX consistency**: Predictable command patterns and actionable output
154
+ 7. **Performance responsiveness**: Long-running operations use background tasks
155
+
156
+ ## Quick Start
157
+
158
+ ```bash
159
+ # Set state values (approve agdt-set once, use for any key)
160
+ agdt-set pr_id 23046
161
+ agdt-set thread_id 139474
162
+ agdt-set content "Thanks for the feedback!
163
+
164
+ I've made the changes you suggested."
165
+
166
+ # Execute action (parameterless - approve once)
167
+ agdt-reply-to-pr-thread
168
+ ```
169
+
170
+ ## State Management Commands
171
+
172
+ ```bash
173
+ # Set any key-value pair
174
+ agdt-set <key> <value>
175
+
176
+ # Get a value
177
+ agdt-get <key>
178
+
179
+ # Delete a key
180
+ agdt-delete <key>
181
+
182
+ # Clear all state
183
+ agdt-clear
184
+
185
+ # Show all state
186
+ agdt-show
187
+ ```
188
+
189
+ ### Examples
190
+
191
+ ```bash
192
+ # Simple values
193
+ agdt-set pr_id 23046
194
+ agdt-set thread_id 139474
195
+ agdt-set dry_run true
196
+
197
+ # Content with special characters (works directly!)
198
+ agdt-set content "Fix: handle (optional) [array] parameters"
199
+
200
+ # Multiline content (works directly!)
201
+ agdt-set content "Thanks for the feedback!
202
+
203
+ I've addressed your concerns:
204
+ - Fixed the null check
205
+ - Added unit tests
206
+ - Updated documentation"
207
+
208
+ # View current state
209
+ agdt-show
210
+ ```
211
+
212
+ ## Azure DevOps Commands
213
+
214
+ ### Reply to PR Thread
215
+
216
+ ```bash
217
+ agdt-set pr_id 23046
218
+ agdt-set thread_id 139474
219
+ agdt-set content "Your reply message"
220
+ agdt-reply-to-pr-thread
221
+
222
+ # Optionally resolve the thread after replying
223
+ agdt-set resolve_thread true
224
+ agdt-reply-to-pr-thread
225
+ ```
226
+
227
+ ### Add New PR Comment
228
+
229
+ ```bash
230
+ agdt-set pr_id 23046
231
+ agdt-set content "Your comment"
232
+ agdt-add-pr-comment
233
+
234
+ # For file-level comment
235
+ agdt-set path "src/example.py"
236
+ agdt-set line 42
237
+ agdt-add-pr-comment
238
+ ```
239
+
240
+ ### Dry Run Mode
241
+
242
+ ```bash
243
+ agdt-set dry_run true
244
+ agdt-reply-to-pr-thread # Previews without making API calls
245
+ ```
246
+
247
+ ## Git Commands
248
+
249
+ The package provides streamlined Git workflow commands that support the single-commit policy.
250
+
251
+ ### Initial Commit & Publish
252
+
253
+ ```bash
254
+ # Option A: With CLI parameter (explicit)
255
+ agdt-git-save-work --commit-message "feature([DFLY-1234](https://jira.swica.ch/browse/DFLY-1234)): add feature
256
+
257
+ - Change 1
258
+ - Change 2
259
+
260
+ [DFLY-1234](https://jira.swica.ch/browse/DFLY-1234)"
261
+
262
+ # Option B: Parameterless (uses current state)
263
+ # Current commit_message: run `agdt-get commit_message` to check
264
+ agdt-git-save-work
265
+ ```
266
+
267
+ ### Smart Commit (Auto-detects Amend)
268
+
269
+ The `agdt-git-save-work` command automatically detects if you're updating an existing commit:
270
+
271
+ ```bash
272
+ # First commit - creates new commit and publishes branch
273
+ agdt-git-save-work --commit-message "feature(DFLY-1234): initial implementation"
274
+
275
+ # Subsequent commits on same issue - automatically amends and force pushes
276
+ agdt-git-save-work --commit-message "feature(DFLY-1234): refined implementation
277
+
278
+ - Original changes
279
+ - Additional updates"
280
+ # Auto-detects and amends!
281
+ ```
282
+
283
+ **Detection logic:**
284
+
285
+ 1. If branch has commits ahead of `origin/main` AND
286
+ 2. Last commit message contains the current Jira issue key (from `jira.issue_key` state)
287
+ 3. Then: amend existing commit and force push
288
+ 4. Otherwise: create new commit and publish
289
+
290
+ ### Individual Git Operations
291
+
292
+ ```bash
293
+ agdt-git-stage # Stage all changes (git add .)
294
+ agdt-git-push # Push changes (git push)
295
+ agdt-git-force-push # Force push with lease
296
+ agdt-git-publish # Push with upstream tracking
297
+ ```
298
+
299
+ ### Git State Options
300
+
301
+ | Key | Purpose |
302
+ | ---------------- | ------------------------------------------------ |
303
+ | `commit_message` | The commit message (multiline supported) |
304
+ | `dry_run` | If true, preview commands without executing |
305
+ | `skip_stage` | If true, skip staging step |
306
+ | `skip_push` | If true, skip push step (for agdt-git-save-work) |
307
+
308
+ ## Workflow Commands
309
+
310
+ The package provides workflow commands for managing structured work processes.
311
+
312
+ ### Work on Jira Issue Workflow
313
+
314
+ ```bash
315
+ # Start work on a Jira issue
316
+ agdt-set jira.issue_key "DFLY-1234"
317
+ agdt-initiate-work-on-jira-issue-workflow
318
+ ```
319
+
320
+ **Workflow Steps:**
321
+
322
+ 1. **setup** - Create worktree and branch (if pre-flight fails)
323
+ 2. **retrieve** - Auto-fetches Jira issue details
324
+ 3. **planning** - Analyze issue and post plan comment to Jira
325
+ 4. **checklist-creation** - Create implementation checklist from plan
326
+ 5. **implementation** - Code changes, tests, documentation
327
+ 6. **implementation-review** - Review completed checklist items
328
+ 7. **verification** - Run tests and quality gates
329
+ 8. **commit** - Stage and commit changes
330
+ 9. **pull-request** - Create PR
331
+ 10. **completion** - Post final Jira comment
332
+
333
+ ### Checklist Management
334
+
335
+ ```bash
336
+ # Create implementation checklist
337
+ agdt-create-checklist "item1" "item2" "item3"
338
+
339
+ # Update checklist (mark items complete)
340
+ agdt-update-checklist --completed 1 3 # Mark items 1 and 3 as complete
341
+
342
+ # View current checklist
343
+ agdt-show-checklist
344
+
345
+ # Update during commit (auto-marks items and advances workflow)
346
+ agdt-git-save-work --completed 1 2 # Marks items complete before committing
347
+ ```
348
+
349
+ ### Workflow Navigation
350
+
351
+ ```bash
352
+ # View current workflow state
353
+ agdt-get-workflow
354
+
355
+ # Advance to next step
356
+ agdt-advance-workflow
357
+
358
+ # Clear workflow
359
+ agdt-clear-workflow
360
+ ```
361
+
362
+ ## PyPI Release Commands
363
+
364
+ Verwende die `pypi.*` Namespace-Keys für Release-Parameter. Setze deine PyPI Tokens via Umgebungsvariablen:
365
+
366
+ - `TWINE_USERNAME=__token__`
367
+ - `TWINE_PASSWORD=<pypi-token>`
368
+
369
+ ### PyPI Release starten
370
+
371
+ ```bash
372
+ # Parameter setzen
373
+ agdt-set pypi.package_name agentic-devtools
374
+ agdt-set pypi.version 0.1.0
375
+ agdt-set pypi.repository pypi # oder testpypi
376
+ agdt-set pypi.dry_run false
377
+
378
+ # Release starten (parameterlos)
379
+ agdt-release-pypi
380
+ ```
381
+
382
+ ### Status prüfen
383
+
384
+ ```bash
385
+ agdt-task-status
386
+ agdt-task-log
387
+ agdt-task-wait
388
+ ```
389
+
390
+ ## Jira Commands
391
+
392
+ All Jira commands use the `jira.*` namespace for state values. Set `JIRA_COPILOT_PAT` environment variable with your Jira API token.
393
+
394
+ ### Get Issue Details
395
+
396
+ ```bash
397
+ agdt-set jira.issue_key "DFLY-1234"
398
+ agdt-get-jira-issue
399
+ ```
400
+
401
+ ### Add Comment to Issue
402
+
403
+ Commands with optional CLI parameters support two usage patterns:
404
+
405
+ ```bash
406
+ # Option A: With CLI parameters (explicit)
407
+ agdt-add-jira-comment --jira-comment "Your comment text"
408
+
409
+ # Option B: Parameterless (uses current state)
410
+ # Current jira.issue_key: run `agdt-get jira.issue_key` to check
411
+ # Current jira.comment: run `agdt-get jira.comment` to check
412
+ agdt-add-jira-comment
413
+ ```
414
+
415
+ ### Create Epic
416
+
417
+ ```bash
418
+ agdt-set jira.project_key "DFLY"
419
+ agdt-set jira.summary "Epic Title"
420
+ agdt-set jira.epic_name "EPIC-KEY"
421
+ agdt-set jira.role "developer"
422
+ agdt-set jira.desired_outcome "implement feature"
423
+ agdt-set jira.benefit "improved UX"
424
+ agdt-create-epic
425
+
426
+ # Optional: Add acceptance criteria
427
+ agdt-set jira.acceptance_criteria "- Criterion 1
428
+ - Criterion 2"
429
+ agdt-create-epic
430
+ ```
431
+
432
+ ### Create Issue (Task/Bug/Story)
433
+
434
+ ```bash
435
+ agdt-set jira.project_key "DFLY"
436
+ agdt-set jira.summary "Issue Title"
437
+ agdt-set jira.description "Issue description"
438
+ agdt-create-issue
439
+
440
+ # Or use user story format
441
+ agdt-set jira.role "developer"
442
+ agdt-set jira.desired_outcome "complete task"
443
+ agdt-set jira.benefit "value delivered"
444
+ agdt-create-issue
445
+ ```
446
+
447
+ ### Create Subtask
448
+
449
+ ```bash
450
+ agdt-set jira.parent_key "DFLY-1234"
451
+ agdt-set jira.summary "Subtask Title"
452
+ agdt-set jira.description "Subtask description"
453
+ agdt-create-subtask
454
+ ```
455
+
456
+ ### Dry Run Mode for Jira
457
+
458
+ ```bash
459
+ agdt-set jira.dry_run true
460
+ agdt-create-issue # Previews payload without API call
461
+ ```
462
+
463
+ ## Environment Variables
464
+
465
+ | Variable | Purpose |
466
+ | --------------------------- | --------------------------------------------------- |
467
+ | `AZURE_DEV_OPS_COPILOT_PAT` | Azure DevOps PAT for API calls |
468
+ | `JIRA_COPILOT_PAT` | Jira API token for authentication |
469
+ | `JIRA_BASE_URL` | Override default Jira URL (default: jira.swica.ch) |
470
+ | `JIRA_SSL_VERIFY` | Set to `0` to disable SSL verification |
471
+ | `JIRA_CA_BUNDLE` | Path to custom CA bundle PEM file for Jira SSL |
472
+ | `REQUESTS_CA_BUNDLE` | Standard requests library CA bundle path (fallback) |
473
+ | `AGDT_STATE_FILE` | Override default state file path |
474
+
475
+ ## State File Location
476
+
477
+ By default, state is stored in `scripts/temp/agdt-state.json` (relative to the repo root).
478
+
479
+ ## Why This Design?
480
+
481
+ ### Auto-Approval Friendly
482
+
483
+ VS Code's auto-approval matches exact command strings. By using:
484
+
485
+ - Generic `agdt-set key value` - approve once, use for any key
486
+ - Parameterless action commands like `agdt-reply-to-pr-thread`
487
+
488
+ ...you only need to approve a few commands once, then they work for all future operations.
489
+
490
+ ### No Replacement Tokens Needed
491
+
492
+ Unlike PowerShell, Python's CLI parsing handles special characters natively:
493
+
494
+ ```bash
495
+ # This just works!
496
+ agdt-set content "Code with (parentheses) and [brackets]"
497
+ ```
498
+
499
+ ### No Multi-line Builder Needed
500
+
501
+ Python preserves multiline strings from the shell:
502
+
503
+ ```bash
504
+ agdt-set content "Line 1
505
+ Line 2
506
+ Line 3"
507
+ ```
508
+
509
+ ## Development
510
+
511
+ ### Testing Commands
512
+
513
+ The package provides test commands that can be auto-approved:
514
+
515
+ ```bash
516
+ # Run full test suite with coverage
517
+ agdt-test
518
+
519
+ # Run tests quickly (no coverage)
520
+ agdt-test-quick
521
+
522
+ # Run specific test file, class, or method
523
+ agdt-test-pattern tests/test_jira_helpers.py
524
+ agdt-test-pattern tests/test_jira_helpers.py::TestEnsureJiraPem
525
+ agdt-test-pattern tests/test_jira_helpers.py::TestEnsureJiraPem::test_returns_existing_pem_path
526
+
527
+ # Run tests using state (alternative)
528
+ agdt-set test_pattern test_jira_helpers.py
529
+ agdt-test-file
530
+ ```
531
+
532
+ ### Manual pytest
533
+
534
+ Run tests:
535
+
536
+ ```bash
537
+ pytest
538
+ ```
539
+
540
+ Run with coverage:
541
+
542
+ ```bash
543
+ pytest --cov=agentic_devtools
544
+ ```
@@ -0,0 +1,92 @@
1
+ agdt_ai_helpers/__init__.py,sha256=PD00zIa1_p99dowCOldmhOS4ozDhmR-DX5Z6ni9BfKE,1241
2
+ agentic_devtools/__init__.py,sha256=DECH4UN6sucQCQq2gW4IsivDLL4RkmTIw2Ez4A8jg0A,208
3
+ agentic_devtools/background_tasks.py,sha256=4B_5-Yo4Xg09SvA5aztiKLg_ALS4mnudyqdj709GlvQ,16889
4
+ agentic_devtools/dispatcher.py,sha256=3W_QeHHiLK7-6TjWl94_YX5JH8OuQWLSmXI1iFaRQEs,17543
5
+ agentic_devtools/file_locking.py,sha256=sGgOmxZdTkcBY0zoZ8QPtgle5B-mymwx52ThOCUUxbA,5763
6
+ agentic_devtools/state.py,sha256=ysiyJMGfyO_6mDuPszgYF4f5T-Wm0hDYtb2b0jFBFpc,23461
7
+ agentic_devtools/task_state.py,sha256=ib-czKpc_sexxu_gUmFRWzuWjEuR9KEM2yaUGM94g1E,28310
8
+ agentic_devtools/cli/__init__.py,sha256=VgHQrGk0NuMaGMdvooFwz3nGY1NzVi6kX5Fr7wF-Tdw,40
9
+ agentic_devtools/cli/runner.py,sha256=zG2d3g-VkfMfRwWn9D6WAanxFsJ56x_QEpqHABO7dKY,10640
10
+ agentic_devtools/cli/state.py,sha256=Qw2Lo7pcK8nkZcNlH1nfPVZ1KDQ705FtUQzv_oL3PPE,4677
11
+ agentic_devtools/cli/subprocess_utils.py,sha256=oVXKAvwPp6IiwGrdMPQsPSQRUy6JWEauxcoNsZYT9_U,3901
12
+ agentic_devtools/cli/testing.py,sha256=Bnm740FOq3mRCNPKDoULrJsjdEwIcWRnP4ShtxtbqPk,14381
13
+ agentic_devtools/cli/azure_devops/__init__.py,sha256=Q9AN9buPqDOSz3KSIPZ8SUGirZqLCKZiPUFuDHrh2sA,5896
14
+ agentic_devtools/cli/azure_devops/async_commands.py,sha256=O3wmRrF19cX7jCF5XcAchFTatiYrUkhB9tcIgEiJxRQ,39523
15
+ agentic_devtools/cli/azure_devops/auth.py,sha256=4jxM4L9E8njFprU8uHKRZjqeeZFarGE2xNfjBp4KODY,911
16
+ agentic_devtools/cli/azure_devops/commands.py,sha256=6RHMYklMp_XdxDPDmobtpTYErMDdoDyMO44dtePnsfo,22824
17
+ agentic_devtools/cli/azure_devops/config.py,sha256=M-7u1oMdNmAJGZ0cj4pZNECh1gA65xBCEAhXGO_sp9A,1627
18
+ agentic_devtools/cli/azure_devops/file_review_commands.py,sha256=NMulGIZfZC1FrWn4s_rODxpxC9D56l06TrdOxi8EJow,34644
19
+ agentic_devtools/cli/azure_devops/helpers.py,sha256=RCK66Uses903d0TgtZgVzI4BvqiQx9HWO7ampnf4nzk,17435
20
+ agentic_devtools/cli/azure_devops/mark_reviewed.py,sha256=3gxeiw4ObpjonKTLmaQ0VU_fNYDAtpn_qL9WMLvtZbM,25401
21
+ agentic_devtools/cli/azure_devops/pipeline_commands.py,sha256=cAwWf2ibIsREu4at6NlawYnZrr5yPKYeHu-QfDh6XSI,22205
22
+ agentic_devtools/cli/azure_devops/pr_summary_commands.py,sha256=rMq65F6O6xMVMzJm5pIAxeQNZELVUJ4pRhTdLGgT5gA,18990
23
+ agentic_devtools/cli/azure_devops/pull_request_details_commands.py,sha256=H6cpEs45aem_WTSJyyMZ17TMfSr8CejseVAJuOCBxik,19214
24
+ agentic_devtools/cli/azure_devops/review_commands.py,sha256=95De12IVq6fEV2i4WfiDJtomUcuRpCEoNsMyNY_lilI,24909
25
+ agentic_devtools/cli/azure_devops/review_helpers.py,sha256=fJfcYRgwWAW9PA9N-jYadMvSx5NAhzZvsEKVzm8Go5c,4954
26
+ agentic_devtools/cli/azure_devops/review_jira.py,sha256=K6bju-rsdxGRo4W4dPmfYSogbiKe5H6kMeO3eWxvRuU,9337
27
+ agentic_devtools/cli/azure_devops/review_prompts.py,sha256=Sb4PTUX5DEayR268_FzMpbm7saiworQJXeDtLkV2Pto,7770
28
+ agentic_devtools/cli/azure_devops/run_details_commands.py,sha256=JDHz3r4CtWusAEv5Pv0OOPYN0SfCEIReXnR7OP6oILM,30083
29
+ agentic_devtools/cli/azure_devops/vpn_toggle.py,sha256=rL95cAx7o02b4ZRG5ZIOZqeZXq9_9LfP2VBKR5izdTs,43958
30
+ agentic_devtools/cli/git/__init__.py,sha256=qR8aIUxHwP97bfywtyFJxTN2YD2-Cb4UULWlBlQoGtQ,2200
31
+ agentic_devtools/cli/git/async_commands.py,sha256=U6DUZgxHNDdIBFOwg31PKjPxRSkPzUvkSjuprxP8y8E,9208
32
+ agentic_devtools/cli/git/commands.py,sha256=F6VTnlh3kSBksqFVzTmoSzRyagg7nLye-iKqO0LC1aA,11994
33
+ agentic_devtools/cli/git/core.py,sha256=Sm3F5Ff2pBYNaPHCTPzf8Xdq5mOVdmENl_clse_P1tk,3754
34
+ agentic_devtools/cli/git/diff.py,sha256=qxK7LS8UwfhkJ3p7bMoo63UNP8qBJrG5qiXnIc3hjX8,5756
35
+ agentic_devtools/cli/git/operations.py,sha256=ixx33xoZ0lbsvnExqy5DGCM34Bmla3z_IUtYLJtZVGI,23430
36
+ agentic_devtools/cli/jira/__init__.py,sha256=RqbEQXaevln4soaFbNCX__SCHKts1StNe65wI2QSBKs,2863
37
+ agentic_devtools/cli/jira/adf.py,sha256=A4cjTnfZ_WUixhimuhFcZy-VRQWO2BqyydT3wGuPtxQ,3428
38
+ agentic_devtools/cli/jira/async_commands.py,sha256=OMeBf51-l7H_hm62dl2Ws7Q_sV4iSZVOE98jkPDPEtc,14587
39
+ agentic_devtools/cli/jira/async_status.py,sha256=7M8jHtG6mrP3fUpbWgsW_rgWnd2yPeHttE9VGpeGbOE,714
40
+ agentic_devtools/cli/jira/commands.py,sha256=txWRt_s9Ex8mfzBAWsJR-ZdRCkVH_8ItFcUD6R8k1Bc,682
41
+ agentic_devtools/cli/jira/comment_commands.py,sha256=jDgEab2A8Aq9WSZy0n0-60XdZCkqz3NfZ47-kuk1zBw,4440
42
+ agentic_devtools/cli/jira/config.py,sha256=kv3F48z2voiblc6iTDYuvWmjP-vc-lREymKb2hUvJ1I,2115
43
+ agentic_devtools/cli/jira/create_commands.py,sha256=F8n5000A1bnDwS0Jz667fl9b6pEwuaArGHaf12Bk8kI,9488
44
+ agentic_devtools/cli/jira/formatting.py,sha256=456iJgzDISM6DgbR3VsQVDZehNEtxE5IM_8eIil37_8,3725
45
+ agentic_devtools/cli/jira/get_commands.py,sha256=ylcP3wnA2E_Nykn_xKOkXjjavX12N_j2RPKpUp4OEhw,11988
46
+ agentic_devtools/cli/jira/helpers.py,sha256=qYJIJPs-mmu8Pxk6EDpGJztsdfwikunvZZu7YI5hmPE,8951
47
+ agentic_devtools/cli/jira/parse_error_report.py,sha256=_9vVTJNAiAoGVX4mzw3QxjmAVI0oXTQzA-l7KZ9HWbI,12759
48
+ agentic_devtools/cli/jira/role_commands.py,sha256=LU4XnLZOItiIHOr4TuNDm1t_dbcD17EzdDt0z3U7mr8,20163
49
+ agentic_devtools/cli/jira/state_helpers.py,sha256=R6wVHhiP0M1nKUVb7za4UWetqSGmsxoTsvJ_zoGDeNo,1063
50
+ agentic_devtools/cli/jira/update_commands.py,sha256=-ADjso8SV1JyazgFf7KXC633yDEspuamEU5s9A42Fus,7588
51
+ agentic_devtools/cli/jira/vpn_wrapper.py,sha256=gWMaFJQLPqI1y0bG7njAN_sIcYklyHQopkvk0xJanpY,2095
52
+ agentic_devtools/cli/release/__init__.py,sha256=V0YQeXXHvlpuNTDf03StNKfU4SognzP5gkPui64164M,131
53
+ agentic_devtools/cli/release/commands.py,sha256=tScL2quL-ELQ2F_jqVPh_zbdAxNqmz-675PckvCXdMU,3842
54
+ agentic_devtools/cli/release/helpers.py,sha256=tis36VXoq3NX5Tpj7eJun4tSIVfuUP19mAimroyKRBo,3514
55
+ agentic_devtools/cli/tasks/__init__.py,sha256=ftAHAyBoP42EtnBdYiA2chee27F7wqh5j2ffOwVcqpM,608
56
+ agentic_devtools/cli/tasks/commands.py,sha256=I5KYNKumRrZPyte60MU-OYki2uvB4KI_AZUEVlVt6N8,27375
57
+ agentic_devtools/cli/workflows/__init__.py,sha256=rufvA5HfFhtCvN3awo2r84h3URo53aJyJLG4lvaLE4g,2467
58
+ agentic_devtools/cli/workflows/advancement.py,sha256=W6_66Hrc1tlW1bN22Ep1JMnWMtD-drXyOWbzAt1LaFQ,6123
59
+ agentic_devtools/cli/workflows/base.py,sha256=WiR_gOJnfr0iO9k7Sj4DqGAXJ9HdbK0Y8c0R--FOVYk,7266
60
+ agentic_devtools/cli/workflows/checklist.py,sha256=uoeHy9WEB0AN6jCZtEFHrTMcQ0AFnj3vsmWSmOvQJUo,7814
61
+ agentic_devtools/cli/workflows/commands.py,sha256=zpEKfooc5XqCGPrbBAAj7yzUvV-r_PouujCZS_q-b4w,60971
62
+ agentic_devtools/cli/workflows/manager.py,sha256=yLFA5yR5CChW9gIfOww3AWxrmnA1cJLqJ7-IfbipWbs,27495
63
+ agentic_devtools/cli/workflows/preflight.py,sha256=w42MwV5IjLG8pIL1Ep6RzI6T4gRBLqiTiNgsCfdrQUU,10634
64
+ agentic_devtools/cli/workflows/worktree_setup.py,sha256=Y2R_l8oGe2VnvT4C7pr-OhpyIO9LccAyz-ZFCBAOrlI,40989
65
+ agentic_devtools/prompts/__init__.py,sha256=i6PrrAM39Ofk-NX4vWO5aEuP5X0uK2hJDtfC9SmxaiY,1129
66
+ agentic_devtools/prompts/loader.py,sha256=2CstRcsHN4Ee6lxLGolQ0pSMBAhOB0tPTbtpDaF-nEw,12153
67
+ agentic_devtools/prompts/apply-pull-request-review-suggestions/default-initiate-prompt.md,sha256=48Nf0bs45NbxIoDsttgYZSIop-qIVRHDM2f07SynTGI,1683
68
+ agentic_devtools/prompts/create-jira-epic/default-initiate-prompt.md,sha256=jDnoPWCgZJ0z2l7yki28ZKIAX2w_uR4VNwKt6cZ4cPU,1415
69
+ agentic_devtools/prompts/create-jira-issue/default-initiate-prompt.md,sha256=gADJY6hl9pKfld8lPG2PD3Ini-KbavaOIN_1YYSTjMg,8374
70
+ agentic_devtools/prompts/create-jira-subtask/default-initiate-prompt.md,sha256=HJUx3oBcqwtwUp5F7pkX5A0dmxJqRzeZTsDQ-h-I9hk,1324
71
+ agentic_devtools/prompts/pull-request-review/default-completion-prompt.md,sha256=GVxvvN340H_IahaKGd57IPawx9WyWPP08ZRu4DCsxk8,858
72
+ agentic_devtools/prompts/pull-request-review/default-decision-prompt.md,sha256=5aRJXwoH2wdC5IKCfvcAT5M7-4jtGb0KHK45JDp2MLM,1342
73
+ agentic_devtools/prompts/pull-request-review/default-file-review-prompt.md,sha256=bMfq_JZpHEpGH0KXB96BbPZrFnkSfbwyma0XmdQzTIE,1645
74
+ agentic_devtools/prompts/pull-request-review/default-initiate-prompt.md,sha256=CRxAEOKpw5gEEekXptXoZh_9JRnZBBjnzIR8Kq7nAKM,1632
75
+ agentic_devtools/prompts/pull-request-review/default-summary-prompt.md,sha256=ydRAPbSEbte2WrW3WK5zoBGhjDE6pd8031dHLu78Cjw,860
76
+ agentic_devtools/prompts/update-jira-issue/default-initiate-prompt.md,sha256=L55xsnhG1cBmH7InzQWM-eK4eo2t6GZ5wGhi7bCxS_c,2158
77
+ agentic_devtools/prompts/work-on-jira-issue/default-checklist-creation-prompt.md,sha256=hdvszK_amJ31axvvVQeOmZwR5_40gvBrUmWAJKUp9ks,1924
78
+ agentic_devtools/prompts/work-on-jira-issue/default-commit-prompt.md,sha256=M6x3sGX0_vfvyT6zd7qQCUvFoF2HyUyzzPftcY0_T84,1052
79
+ agentic_devtools/prompts/work-on-jira-issue/default-completion-prompt.md,sha256=Gpf6AF1PDeN99lqz2AgShrwwzWWVT-19TzqGRK-dwvE,1047
80
+ agentic_devtools/prompts/work-on-jira-issue/default-implementation-prompt.md,sha256=iEsfMiVyr3Bobq8C0A_5oU-qhtuSDZBTgz2IsiiJTK4,1802
81
+ agentic_devtools/prompts/work-on-jira-issue/default-implementation-review-prompt.md,sha256=-XDz35LREDvvPQDOryuYnsUkQJFLt3O2_Qz478Tpkik,1594
82
+ agentic_devtools/prompts/work-on-jira-issue/default-initiate-prompt.md,sha256=OANjWedJJBLDOGZ-AZG_PHuUi3QyG38oKZtXWp6h_e8,1671
83
+ agentic_devtools/prompts/work-on-jira-issue/default-planning-prompt.md,sha256=uQf0leRII5hQctGQuT5fuZigHxJu_uHy3k4NWuIEzko,1058
84
+ agentic_devtools/prompts/work-on-jira-issue/default-pull-request-prompt.md,sha256=r8eJ2e9rI_rh0LLOvmC5SvE2i9PmEUpw85l7XuBrxsc,1192
85
+ agentic_devtools/prompts/work-on-jira-issue/default-retrieve-prompt.md,sha256=tavJLJTyAfX2DiWmr1YId2SCBWWY4p3saSyHKbeOQaE,422
86
+ agentic_devtools/prompts/work-on-jira-issue/default-setup-prompt.md,sha256=4ttcOtlmyb-pQqBp-W3nAZXLRDry1TDknyE5zM21W1o,406
87
+ agentic_devtools/prompts/work-on-jira-issue/default-verification-prompt.md,sha256=kfWPXaWLs4-h0jfBtNihqOvVEQh2Zt5VuytJXPnzgSQ,1163
88
+ agentic_devtools-0.2.0.dist-info/METADATA,sha256=KB1mgvxEg6t0RWyGMbg1pF8v3sAfIjj43g0-HJw-xWs,14718
89
+ agentic_devtools-0.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
90
+ agentic_devtools-0.2.0.dist-info/entry_points.txt,sha256=A-GyeZYzlJuYCIaOc2xpf3fhtPuNWdM05EbSbhFdqak,5894
91
+ agentic_devtools-0.2.0.dist-info/licenses/LICENSE,sha256=yBEDdICksxhBYLWoERKp9MTqwGnUF6Ryj9BTLwXTc6k,1082
92
+ agentic_devtools-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any