mcp-ticketer 0.3.0__py3-none-any.whl → 2.2.9__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 (160) hide show
  1. mcp_ticketer/__init__.py +10 -10
  2. mcp_ticketer/__version__.py +3 -3
  3. mcp_ticketer/_version_scm.py +1 -0
  4. mcp_ticketer/adapters/__init__.py +2 -0
  5. mcp_ticketer/adapters/aitrackdown.py +930 -52
  6. mcp_ticketer/adapters/asana/__init__.py +15 -0
  7. mcp_ticketer/adapters/asana/adapter.py +1537 -0
  8. mcp_ticketer/adapters/asana/client.py +292 -0
  9. mcp_ticketer/adapters/asana/mappers.py +348 -0
  10. mcp_ticketer/adapters/asana/types.py +146 -0
  11. mcp_ticketer/adapters/github/__init__.py +26 -0
  12. mcp_ticketer/adapters/github/adapter.py +3229 -0
  13. mcp_ticketer/adapters/github/client.py +335 -0
  14. mcp_ticketer/adapters/github/mappers.py +797 -0
  15. mcp_ticketer/adapters/github/queries.py +692 -0
  16. mcp_ticketer/adapters/github/types.py +460 -0
  17. mcp_ticketer/adapters/hybrid.py +58 -16
  18. mcp_ticketer/adapters/jira/__init__.py +35 -0
  19. mcp_ticketer/adapters/jira/adapter.py +1351 -0
  20. mcp_ticketer/adapters/jira/client.py +271 -0
  21. mcp_ticketer/adapters/jira/mappers.py +246 -0
  22. mcp_ticketer/adapters/jira/queries.py +216 -0
  23. mcp_ticketer/adapters/jira/types.py +304 -0
  24. mcp_ticketer/adapters/linear/__init__.py +1 -1
  25. mcp_ticketer/adapters/linear/adapter.py +3810 -462
  26. mcp_ticketer/adapters/linear/client.py +312 -69
  27. mcp_ticketer/adapters/linear/mappers.py +305 -85
  28. mcp_ticketer/adapters/linear/queries.py +317 -17
  29. mcp_ticketer/adapters/linear/types.py +187 -64
  30. mcp_ticketer/adapters/linear.py +2 -2
  31. mcp_ticketer/analysis/__init__.py +56 -0
  32. mcp_ticketer/analysis/dependency_graph.py +255 -0
  33. mcp_ticketer/analysis/health_assessment.py +304 -0
  34. mcp_ticketer/analysis/orphaned.py +218 -0
  35. mcp_ticketer/analysis/project_status.py +594 -0
  36. mcp_ticketer/analysis/similarity.py +224 -0
  37. mcp_ticketer/analysis/staleness.py +266 -0
  38. mcp_ticketer/automation/__init__.py +11 -0
  39. mcp_ticketer/automation/project_updates.py +378 -0
  40. mcp_ticketer/cache/memory.py +9 -8
  41. mcp_ticketer/cli/adapter_diagnostics.py +91 -54
  42. mcp_ticketer/cli/auggie_configure.py +116 -15
  43. mcp_ticketer/cli/codex_configure.py +274 -82
  44. mcp_ticketer/cli/configure.py +1323 -151
  45. mcp_ticketer/cli/cursor_configure.py +314 -0
  46. mcp_ticketer/cli/diagnostics.py +209 -114
  47. mcp_ticketer/cli/discover.py +297 -26
  48. mcp_ticketer/cli/gemini_configure.py +119 -26
  49. mcp_ticketer/cli/init_command.py +880 -0
  50. mcp_ticketer/cli/install_mcp_server.py +418 -0
  51. mcp_ticketer/cli/instruction_commands.py +435 -0
  52. mcp_ticketer/cli/linear_commands.py +256 -130
  53. mcp_ticketer/cli/main.py +140 -1544
  54. mcp_ticketer/cli/mcp_configure.py +1013 -100
  55. mcp_ticketer/cli/mcp_server_commands.py +415 -0
  56. mcp_ticketer/cli/migrate_config.py +12 -8
  57. mcp_ticketer/cli/platform_commands.py +123 -0
  58. mcp_ticketer/cli/platform_detection.py +477 -0
  59. mcp_ticketer/cli/platform_installer.py +545 -0
  60. mcp_ticketer/cli/project_update_commands.py +350 -0
  61. mcp_ticketer/cli/python_detection.py +126 -0
  62. mcp_ticketer/cli/queue_commands.py +15 -15
  63. mcp_ticketer/cli/setup_command.py +794 -0
  64. mcp_ticketer/cli/simple_health.py +84 -59
  65. mcp_ticketer/cli/ticket_commands.py +1375 -0
  66. mcp_ticketer/cli/update_checker.py +313 -0
  67. mcp_ticketer/cli/utils.py +195 -72
  68. mcp_ticketer/core/__init__.py +64 -1
  69. mcp_ticketer/core/adapter.py +618 -18
  70. mcp_ticketer/core/config.py +77 -68
  71. mcp_ticketer/core/env_discovery.py +75 -16
  72. mcp_ticketer/core/env_loader.py +121 -97
  73. mcp_ticketer/core/exceptions.py +32 -24
  74. mcp_ticketer/core/http_client.py +26 -26
  75. mcp_ticketer/core/instructions.py +405 -0
  76. mcp_ticketer/core/label_manager.py +732 -0
  77. mcp_ticketer/core/mappers.py +42 -30
  78. mcp_ticketer/core/milestone_manager.py +252 -0
  79. mcp_ticketer/core/models.py +566 -19
  80. mcp_ticketer/core/onepassword_secrets.py +379 -0
  81. mcp_ticketer/core/priority_matcher.py +463 -0
  82. mcp_ticketer/core/project_config.py +189 -49
  83. mcp_ticketer/core/project_utils.py +281 -0
  84. mcp_ticketer/core/project_validator.py +376 -0
  85. mcp_ticketer/core/registry.py +3 -3
  86. mcp_ticketer/core/session_state.py +176 -0
  87. mcp_ticketer/core/state_matcher.py +592 -0
  88. mcp_ticketer/core/url_parser.py +425 -0
  89. mcp_ticketer/core/validators.py +69 -0
  90. mcp_ticketer/defaults/ticket_instructions.md +644 -0
  91. mcp_ticketer/mcp/__init__.py +29 -1
  92. mcp_ticketer/mcp/__main__.py +60 -0
  93. mcp_ticketer/mcp/server/__init__.py +25 -0
  94. mcp_ticketer/mcp/server/__main__.py +60 -0
  95. mcp_ticketer/mcp/server/constants.py +58 -0
  96. mcp_ticketer/mcp/server/diagnostic_helper.py +175 -0
  97. mcp_ticketer/mcp/server/dto.py +195 -0
  98. mcp_ticketer/mcp/server/main.py +1343 -0
  99. mcp_ticketer/mcp/server/response_builder.py +206 -0
  100. mcp_ticketer/mcp/server/routing.py +723 -0
  101. mcp_ticketer/mcp/server/server_sdk.py +151 -0
  102. mcp_ticketer/mcp/server/tools/__init__.py +69 -0
  103. mcp_ticketer/mcp/server/tools/analysis_tools.py +854 -0
  104. mcp_ticketer/mcp/server/tools/attachment_tools.py +224 -0
  105. mcp_ticketer/mcp/server/tools/bulk_tools.py +330 -0
  106. mcp_ticketer/mcp/server/tools/comment_tools.py +152 -0
  107. mcp_ticketer/mcp/server/tools/config_tools.py +1564 -0
  108. mcp_ticketer/mcp/server/tools/diagnostic_tools.py +211 -0
  109. mcp_ticketer/mcp/server/tools/hierarchy_tools.py +942 -0
  110. mcp_ticketer/mcp/server/tools/instruction_tools.py +295 -0
  111. mcp_ticketer/mcp/server/tools/label_tools.py +942 -0
  112. mcp_ticketer/mcp/server/tools/milestone_tools.py +338 -0
  113. mcp_ticketer/mcp/server/tools/pr_tools.py +150 -0
  114. mcp_ticketer/mcp/server/tools/project_status_tools.py +158 -0
  115. mcp_ticketer/mcp/server/tools/project_update_tools.py +473 -0
  116. mcp_ticketer/mcp/server/tools/search_tools.py +318 -0
  117. mcp_ticketer/mcp/server/tools/session_tools.py +308 -0
  118. mcp_ticketer/mcp/server/tools/ticket_tools.py +1413 -0
  119. mcp_ticketer/mcp/server/tools/user_ticket_tools.py +364 -0
  120. mcp_ticketer/queue/__init__.py +1 -0
  121. mcp_ticketer/queue/health_monitor.py +168 -136
  122. mcp_ticketer/queue/manager.py +78 -63
  123. mcp_ticketer/queue/queue.py +108 -21
  124. mcp_ticketer/queue/run_worker.py +2 -2
  125. mcp_ticketer/queue/ticket_registry.py +213 -155
  126. mcp_ticketer/queue/worker.py +96 -58
  127. mcp_ticketer/utils/__init__.py +5 -0
  128. mcp_ticketer/utils/token_utils.py +246 -0
  129. mcp_ticketer-2.2.9.dist-info/METADATA +1396 -0
  130. mcp_ticketer-2.2.9.dist-info/RECORD +158 -0
  131. mcp_ticketer-2.2.9.dist-info/top_level.txt +2 -0
  132. py_mcp_installer/examples/phase3_demo.py +178 -0
  133. py_mcp_installer/scripts/manage_version.py +54 -0
  134. py_mcp_installer/setup.py +6 -0
  135. py_mcp_installer/src/py_mcp_installer/__init__.py +153 -0
  136. py_mcp_installer/src/py_mcp_installer/command_builder.py +445 -0
  137. py_mcp_installer/src/py_mcp_installer/config_manager.py +541 -0
  138. py_mcp_installer/src/py_mcp_installer/exceptions.py +243 -0
  139. py_mcp_installer/src/py_mcp_installer/installation_strategy.py +617 -0
  140. py_mcp_installer/src/py_mcp_installer/installer.py +656 -0
  141. py_mcp_installer/src/py_mcp_installer/mcp_inspector.py +750 -0
  142. py_mcp_installer/src/py_mcp_installer/platform_detector.py +451 -0
  143. py_mcp_installer/src/py_mcp_installer/platforms/__init__.py +26 -0
  144. py_mcp_installer/src/py_mcp_installer/platforms/claude_code.py +225 -0
  145. py_mcp_installer/src/py_mcp_installer/platforms/codex.py +181 -0
  146. py_mcp_installer/src/py_mcp_installer/platforms/cursor.py +191 -0
  147. py_mcp_installer/src/py_mcp_installer/types.py +222 -0
  148. py_mcp_installer/src/py_mcp_installer/utils.py +463 -0
  149. py_mcp_installer/tests/__init__.py +0 -0
  150. py_mcp_installer/tests/platforms/__init__.py +0 -0
  151. py_mcp_installer/tests/test_platform_detector.py +17 -0
  152. mcp_ticketer/adapters/github.py +0 -1354
  153. mcp_ticketer/adapters/jira.py +0 -1011
  154. mcp_ticketer/mcp/server.py +0 -2030
  155. mcp_ticketer-0.3.0.dist-info/METADATA +0 -414
  156. mcp_ticketer-0.3.0.dist-info/RECORD +0 -59
  157. mcp_ticketer-0.3.0.dist-info/top_level.txt +0 -1
  158. {mcp_ticketer-0.3.0.dist-info → mcp_ticketer-2.2.9.dist-info}/WHEEL +0 -0
  159. {mcp_ticketer-0.3.0.dist-info → mcp_ticketer-2.2.9.dist-info}/entry_points.txt +0 -0
  160. {mcp_ticketer-0.3.0.dist-info → mcp_ticketer-2.2.9.dist-info}/licenses/LICENSE +0 -0
@@ -225,20 +225,24 @@ ISSUE_LIST_FRAGMENTS = (
225
225
  # Query definitions
226
226
 
227
227
  WORKFLOW_STATES_QUERY = """
228
- query WorkflowStates($teamId: ID!) {
229
- workflowStates(filter: { team: { id: { eq: $teamId } } }) {
230
- nodes {
231
- id
232
- name
233
- type
234
- position
235
- color
228
+ query WorkflowStates($teamId: String!) {
229
+ team(id: $teamId) {
230
+ states {
231
+ nodes {
232
+ id
233
+ name
234
+ type
235
+ position
236
+ color
237
+ }
236
238
  }
237
239
  }
238
240
  }
239
241
  """
240
242
 
241
- CREATE_ISSUE_MUTATION = ALL_FRAGMENTS + """
243
+ CREATE_ISSUE_MUTATION = (
244
+ ALL_FRAGMENTS
245
+ + """
242
246
  mutation CreateIssue($input: IssueCreateInput!) {
243
247
  issueCreate(input: $input) {
244
248
  success
@@ -248,8 +252,11 @@ CREATE_ISSUE_MUTATION = ALL_FRAGMENTS + """
248
252
  }
249
253
  }
250
254
  """
255
+ )
251
256
 
252
- UPDATE_ISSUE_MUTATION = ALL_FRAGMENTS + """
257
+ UPDATE_ISSUE_MUTATION = (
258
+ ALL_FRAGMENTS
259
+ + """
253
260
  mutation UpdateIssue($id: String!, $input: IssueUpdateInput!) {
254
261
  issueUpdate(id: $id, input: $input) {
255
262
  success
@@ -259,8 +266,11 @@ UPDATE_ISSUE_MUTATION = ALL_FRAGMENTS + """
259
266
  }
260
267
  }
261
268
  """
269
+ )
262
270
 
263
- LIST_ISSUES_QUERY = ISSUE_LIST_FRAGMENTS + """
271
+ LIST_ISSUES_QUERY = (
272
+ ISSUE_LIST_FRAGMENTS
273
+ + """
264
274
  query ListIssues($filter: IssueFilter, $first: Int!) {
265
275
  issues(
266
276
  filter: $filter
@@ -277,8 +287,11 @@ LIST_ISSUES_QUERY = ISSUE_LIST_FRAGMENTS + """
277
287
  }
278
288
  }
279
289
  """
290
+ )
280
291
 
281
- SEARCH_ISSUES_QUERY = ISSUE_LIST_FRAGMENTS + """
292
+ SEARCH_ISSUES_QUERY = (
293
+ ISSUE_LIST_FRAGMENTS
294
+ + """
282
295
  query SearchIssues($filter: IssueFilter, $first: Int!) {
283
296
  issues(
284
297
  filter: $filter
@@ -291,6 +304,7 @@ SEARCH_ISSUES_QUERY = ISSUE_LIST_FRAGMENTS + """
291
304
  }
292
305
  }
293
306
  """
307
+ )
294
308
 
295
309
  GET_CYCLES_QUERY = """
296
310
  query GetCycles($filter: CycleFilter) {
@@ -336,17 +350,27 @@ SEARCH_ISSUE_BY_IDENTIFIER_QUERY = """
336
350
  }
337
351
  """
338
352
 
339
- LIST_PROJECTS_QUERY = PROJECT_FRAGMENT + """
340
- query ListProjects($filter: ProjectFilter, $first: Int!) {
341
- projects(filter: $filter, first: $first, orderBy: updatedAt) {
353
+ LIST_PROJECTS_QUERY = (
354
+ TEAM_FRAGMENT # Required by PROJECT_FRAGMENT which uses ...TeamFields
355
+ + PROJECT_FRAGMENT
356
+ + """
357
+ query ListProjects($filter: ProjectFilter, $first: Int!, $after: String) {
358
+ projects(filter: $filter, first: $first, after: $after, orderBy: updatedAt) {
342
359
  nodes {
343
360
  ...ProjectFields
344
361
  }
362
+ pageInfo {
363
+ hasNextPage
364
+ endCursor
365
+ }
345
366
  }
346
367
  }
347
368
  """
369
+ )
348
370
 
349
- CREATE_SUB_ISSUE_MUTATION = ALL_FRAGMENTS + """
371
+ CREATE_SUB_ISSUE_MUTATION = (
372
+ ALL_FRAGMENTS
373
+ + """
350
374
  mutation CreateSubIssue($input: IssueCreateInput!) {
351
375
  issueCreate(input: $input) {
352
376
  success
@@ -356,11 +380,287 @@ CREATE_SUB_ISSUE_MUTATION = ALL_FRAGMENTS + """
356
380
  }
357
381
  }
358
382
  """
383
+ )
359
384
 
360
- GET_CURRENT_USER_QUERY = USER_FRAGMENT + """
385
+ GET_CURRENT_USER_QUERY = (
386
+ USER_FRAGMENT
387
+ + """
361
388
  query GetCurrentUser {
362
389
  viewer {
363
390
  ...UserFields
364
391
  }
365
392
  }
366
393
  """
394
+ )
395
+
396
+ CREATE_LABEL_MUTATION = """
397
+ mutation CreateLabel($input: IssueLabelCreateInput!) {
398
+ issueLabelCreate(input: $input) {
399
+ success
400
+ issueLabel {
401
+ id
402
+ name
403
+ color
404
+ description
405
+ }
406
+ }
407
+ }
408
+ """
409
+
410
+ LIST_CYCLES_QUERY = """
411
+ query GetCycles($teamId: String!, $first: Int!, $after: String) {
412
+ team(id: $teamId) {
413
+ cycles(first: $first, after: $after) {
414
+ nodes {
415
+ id
416
+ name
417
+ number
418
+ startsAt
419
+ endsAt
420
+ completedAt
421
+ progress
422
+ }
423
+ pageInfo {
424
+ hasNextPage
425
+ endCursor
426
+ }
427
+ }
428
+ }
429
+ }
430
+ """
431
+
432
+ GET_ISSUE_STATUS_QUERY = """
433
+ query GetIssueStatus($issueId: String!) {
434
+ issue(id: $issueId) {
435
+ id
436
+ state {
437
+ id
438
+ name
439
+ type
440
+ color
441
+ description
442
+ position
443
+ }
444
+ }
445
+ }
446
+ """
447
+
448
+ LIST_ISSUE_STATUSES_QUERY = """
449
+ query GetWorkflowStates($teamId: String!) {
450
+ team(id: $teamId) {
451
+ states {
452
+ nodes {
453
+ id
454
+ name
455
+ type
456
+ color
457
+ description
458
+ position
459
+ }
460
+ }
461
+ }
462
+ }
463
+ """
464
+
465
+ GET_CUSTOM_VIEW_QUERY = (
466
+ ISSUE_LIST_FRAGMENTS
467
+ + """
468
+ query GetCustomView($viewId: String!, $first: Int!) {
469
+ customView(id: $viewId) {
470
+ id
471
+ name
472
+ description
473
+ issues(first: $first) {
474
+ nodes {
475
+ ...IssueCompactFields
476
+ }
477
+ pageInfo {
478
+ hasNextPage
479
+ }
480
+ }
481
+ }
482
+ }
483
+ """
484
+ )
485
+
486
+ # Project Update queries and mutations (1M-238)
487
+
488
+ PROJECT_UPDATE_FRAGMENT = """
489
+ fragment ProjectUpdateFields on ProjectUpdate {
490
+ id
491
+ body
492
+ health
493
+ createdAt
494
+ updatedAt
495
+ diffMarkdown
496
+ url
497
+ user {
498
+ id
499
+ name
500
+ email
501
+ }
502
+ project {
503
+ id
504
+ name
505
+ slugId
506
+ }
507
+ }
508
+ """
509
+
510
+ CREATE_PROJECT_UPDATE_MUTATION = (
511
+ PROJECT_UPDATE_FRAGMENT
512
+ + """
513
+ mutation ProjectUpdateCreate(
514
+ $projectId: String!
515
+ $body: String!
516
+ $health: ProjectUpdateHealthType
517
+ ) {
518
+ projectUpdateCreate(
519
+ input: {
520
+ projectId: $projectId
521
+ body: $body
522
+ health: $health
523
+ }
524
+ ) {
525
+ success
526
+ projectUpdate {
527
+ ...ProjectUpdateFields
528
+ }
529
+ }
530
+ }
531
+ """
532
+ )
533
+
534
+ LIST_PROJECT_UPDATES_QUERY = (
535
+ PROJECT_UPDATE_FRAGMENT
536
+ + """
537
+ query ProjectUpdates($projectId: String!, $first: Int) {
538
+ project(id: $projectId) {
539
+ id
540
+ name
541
+ projectUpdates(first: $first) {
542
+ nodes {
543
+ ...ProjectUpdateFields
544
+ }
545
+ }
546
+ }
547
+ }
548
+ """
549
+ )
550
+
551
+ GET_PROJECT_UPDATE_QUERY = (
552
+ PROJECT_UPDATE_FRAGMENT
553
+ + """
554
+ query ProjectUpdate($id: String!) {
555
+ projectUpdate(id: $id) {
556
+ ...ProjectUpdateFields
557
+ }
558
+ }
559
+ """
560
+ )
561
+
562
+ # Milestone/Cycle Operations (1M-607 Phase 2)
563
+
564
+ CREATE_CYCLE_MUTATION = """
565
+ mutation CycleCreate($input: CycleCreateInput!) {
566
+ cycleCreate(input: $input) {
567
+ success
568
+ cycle {
569
+ id
570
+ name
571
+ description
572
+ startsAt
573
+ endsAt
574
+ completedAt
575
+ progress
576
+ completedIssueCount
577
+ issueCount
578
+ team {
579
+ id
580
+ name
581
+ }
582
+ }
583
+ }
584
+ }
585
+ """
586
+
587
+ GET_CYCLE_QUERY = """
588
+ query Cycle($id: String!) {
589
+ cycle(id: $id) {
590
+ id
591
+ name
592
+ description
593
+ startsAt
594
+ endsAt
595
+ completedAt
596
+ progress
597
+ completedIssueCount
598
+ issueCount
599
+ team {
600
+ id
601
+ name
602
+ }
603
+ }
604
+ }
605
+ """
606
+
607
+ UPDATE_CYCLE_MUTATION = """
608
+ mutation CycleUpdate($id: String!, $input: CycleUpdateInput!) {
609
+ cycleUpdate(id: $id, input: $input) {
610
+ success
611
+ cycle {
612
+ id
613
+ name
614
+ description
615
+ startsAt
616
+ endsAt
617
+ completedAt
618
+ progress
619
+ completedIssueCount
620
+ issueCount
621
+ }
622
+ }
623
+ }
624
+ """
625
+
626
+ ARCHIVE_CYCLE_MUTATION = """
627
+ mutation CycleArchive($id: String!) {
628
+ cycleArchive(id: $id) {
629
+ success
630
+ }
631
+ }
632
+ """
633
+
634
+ GET_CYCLE_ISSUES_QUERY = """
635
+ query CycleIssues($cycleId: String!, $first: Int!) {
636
+ cycle(id: $cycleId) {
637
+ issues(first: $first) {
638
+ nodes {
639
+ id
640
+ identifier
641
+ title
642
+ description
643
+ state {
644
+ id
645
+ name
646
+ type
647
+ }
648
+ priority
649
+ assignee {
650
+ id
651
+ email
652
+ name
653
+ }
654
+ labels {
655
+ nodes {
656
+ id
657
+ name
658
+ }
659
+ }
660
+ createdAt
661
+ updatedAt
662
+ }
663
+ }
664
+ }
665
+ }
666
+ """