mcp-ticketer 0.3.6__py3-none-any.whl → 0.3.7__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.
Potentially problematic release.
This version of mcp-ticketer might be problematic. Click here for more details.
- mcp_ticketer/__init__.py +12 -3
- mcp_ticketer/__version__.py +1 -1
- mcp_ticketer/adapters/aitrackdown.py +1 -2
- mcp_ticketer/adapters/github.py +1 -2
- mcp_ticketer/adapters/jira.py +1 -2
- mcp_ticketer/adapters/linear/adapter.py +64 -22
- mcp_ticketer/adapters/linear/client.py +1 -2
- mcp_ticketer/adapters/linear/mappers.py +1 -2
- mcp_ticketer/cli/adapter_diagnostics.py +2 -4
- mcp_ticketer/cli/configure.py +9 -3
- mcp_ticketer/cli/discover.py +6 -2
- mcp_ticketer/cli/main.py +1 -2
- mcp_ticketer/mcp/server.py +74 -14
- {mcp_ticketer-0.3.6.dist-info → mcp_ticketer-0.3.7.dist-info}/METADATA +1 -1
- {mcp_ticketer-0.3.6.dist-info → mcp_ticketer-0.3.7.dist-info}/RECORD +19 -19
- {mcp_ticketer-0.3.6.dist-info → mcp_ticketer-0.3.7.dist-info}/WHEEL +0 -0
- {mcp_ticketer-0.3.6.dist-info → mcp_ticketer-0.3.7.dist-info}/entry_points.txt +0 -0
- {mcp_ticketer-0.3.6.dist-info → mcp_ticketer-0.3.7.dist-info}/licenses/LICENSE +0 -0
- {mcp_ticketer-0.3.6.dist-info → mcp_ticketer-0.3.7.dist-info}/top_level.txt +0 -0
mcp_ticketer/__init__.py
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"""MCP Ticketer - Universal ticket management interface."""
|
|
2
2
|
|
|
3
|
-
from .__version__ import (
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
from .__version__ import (
|
|
4
|
+
__author__,
|
|
5
|
+
__author_email__,
|
|
6
|
+
__copyright__,
|
|
7
|
+
__description__,
|
|
8
|
+
__license__,
|
|
9
|
+
__title__,
|
|
10
|
+
__version__,
|
|
11
|
+
__version_info__,
|
|
12
|
+
get_user_agent,
|
|
13
|
+
get_version,
|
|
14
|
+
)
|
|
6
15
|
|
|
7
16
|
__all__ = [
|
|
8
17
|
"__version__",
|
mcp_ticketer/__version__.py
CHANGED
|
@@ -7,8 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
from typing import Any, Optional, Union
|
|
8
8
|
|
|
9
9
|
from ..core.adapter import BaseAdapter
|
|
10
|
-
from ..core.models import
|
|
11
|
-
TicketState)
|
|
10
|
+
from ..core.models import Comment, Epic, Priority, SearchQuery, Task, TicketState
|
|
12
11
|
from ..core.registry import AdapterRegistry
|
|
13
12
|
|
|
14
13
|
# Import ai-trackdown-pytools when available
|
mcp_ticketer/adapters/github.py
CHANGED
|
@@ -9,8 +9,7 @@ import httpx
|
|
|
9
9
|
|
|
10
10
|
from ..core.adapter import BaseAdapter
|
|
11
11
|
from ..core.env_loader import load_adapter_config, validate_adapter_config
|
|
12
|
-
from ..core.models import
|
|
13
|
-
TicketState)
|
|
12
|
+
from ..core.models import Comment, Epic, Priority, SearchQuery, Task, TicketState
|
|
14
13
|
from ..core.registry import AdapterRegistry
|
|
15
14
|
|
|
16
15
|
|
mcp_ticketer/adapters/jira.py
CHANGED
|
@@ -13,8 +13,7 @@ from httpx import AsyncClient, HTTPStatusError, TimeoutException
|
|
|
13
13
|
|
|
14
14
|
from ..core.adapter import BaseAdapter
|
|
15
15
|
from ..core.env_loader import load_adapter_config, validate_adapter_config
|
|
16
|
-
from ..core.models import
|
|
17
|
-
TicketState)
|
|
16
|
+
from ..core.models import Comment, Epic, Priority, SearchQuery, Task, TicketState
|
|
18
17
|
from ..core.registry import AdapterRegistry
|
|
19
18
|
|
|
20
19
|
logger = logging.getLogger(__name__)
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import asyncio
|
|
6
|
+
import logging
|
|
5
7
|
import os
|
|
6
8
|
from typing import Any
|
|
7
9
|
|
|
@@ -18,15 +20,27 @@ from ...core.adapter import BaseAdapter
|
|
|
18
20
|
from ...core.models import Comment, Epic, SearchQuery, Task, TicketState
|
|
19
21
|
from ...core.registry import AdapterRegistry
|
|
20
22
|
from .client import LinearGraphQLClient
|
|
21
|
-
from .mappers import (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
from .
|
|
29
|
-
|
|
23
|
+
from .mappers import (
|
|
24
|
+
build_linear_issue_input,
|
|
25
|
+
build_linear_issue_update_input,
|
|
26
|
+
map_linear_comment_to_comment,
|
|
27
|
+
map_linear_issue_to_task,
|
|
28
|
+
map_linear_project_to_epic,
|
|
29
|
+
)
|
|
30
|
+
from .queries import (
|
|
31
|
+
ALL_FRAGMENTS,
|
|
32
|
+
CREATE_ISSUE_MUTATION,
|
|
33
|
+
LIST_ISSUES_QUERY,
|
|
34
|
+
SEARCH_ISSUES_QUERY,
|
|
35
|
+
UPDATE_ISSUE_MUTATION,
|
|
36
|
+
WORKFLOW_STATES_QUERY,
|
|
37
|
+
)
|
|
38
|
+
from .types import (
|
|
39
|
+
LinearStateMapping,
|
|
40
|
+
build_issue_filter,
|
|
41
|
+
get_linear_priority,
|
|
42
|
+
get_linear_state_type,
|
|
43
|
+
)
|
|
30
44
|
|
|
31
45
|
|
|
32
46
|
class LinearAdapter(BaseAdapter[Task]):
|
|
@@ -206,12 +220,14 @@ class LinearAdapter(BaseAdapter[Task]):
|
|
|
206
220
|
raise ValueError(f"Failed to load workflow states: {e}")
|
|
207
221
|
|
|
208
222
|
async def _load_team_labels(self, team_id: str) -> None:
|
|
209
|
-
"""Load and cache labels for the team.
|
|
223
|
+
"""Load and cache labels for the team with retry logic.
|
|
210
224
|
|
|
211
225
|
Args:
|
|
212
226
|
team_id: Linear team ID
|
|
213
227
|
|
|
214
228
|
"""
|
|
229
|
+
logger = logging.getLogger(__name__)
|
|
230
|
+
|
|
215
231
|
query = """
|
|
216
232
|
query GetTeamLabels($teamId: String!) {
|
|
217
233
|
team(id: $teamId) {
|
|
@@ -227,15 +243,32 @@ class LinearAdapter(BaseAdapter[Task]):
|
|
|
227
243
|
}
|
|
228
244
|
"""
|
|
229
245
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
246
|
+
max_retries = 3
|
|
247
|
+
for attempt in range(max_retries):
|
|
248
|
+
try:
|
|
249
|
+
result = await self.client.execute_query(query, {"teamId": team_id})
|
|
250
|
+
labels = result.get("team", {}).get("labels", {}).get("nodes", [])
|
|
251
|
+
self._labels_cache = labels
|
|
252
|
+
logger.info(f"Loaded {len(labels)} labels for team {team_id}")
|
|
253
|
+
return # Success
|
|
254
|
+
|
|
255
|
+
except Exception as e:
|
|
256
|
+
if attempt < max_retries - 1:
|
|
257
|
+
wait_time = 2**attempt
|
|
258
|
+
logger.warning(
|
|
259
|
+
f"Failed to load labels (attempt {attempt + 1}/{max_retries}): {e}. "
|
|
260
|
+
f"Retrying in {wait_time}s..."
|
|
261
|
+
)
|
|
262
|
+
await asyncio.sleep(wait_time)
|
|
263
|
+
else:
|
|
264
|
+
logger.error(
|
|
265
|
+
f"Failed to load team labels after {max_retries} attempts: {e}",
|
|
266
|
+
exc_info=True,
|
|
267
|
+
)
|
|
268
|
+
self._labels_cache = [] # Explicitly empty on failure
|
|
236
269
|
|
|
237
270
|
async def _resolve_label_ids(self, label_names: list[str]) -> list[str]:
|
|
238
|
-
"""Resolve label names to Linear label IDs.
|
|
271
|
+
"""Resolve label names to Linear label IDs with proper None vs empty list handling.
|
|
239
272
|
|
|
240
273
|
Args:
|
|
241
274
|
label_names: List of label names
|
|
@@ -244,16 +277,25 @@ class LinearAdapter(BaseAdapter[Task]):
|
|
|
244
277
|
List of Linear label IDs that exist
|
|
245
278
|
|
|
246
279
|
"""
|
|
247
|
-
import logging
|
|
248
|
-
|
|
249
280
|
logger = logging.getLogger(__name__)
|
|
250
281
|
|
|
251
|
-
|
|
282
|
+
# None = not loaded yet, [] = loaded but empty or failed
|
|
283
|
+
if self._labels_cache is None:
|
|
252
284
|
team_id = await self._ensure_team_id()
|
|
253
285
|
await self._load_team_labels(team_id)
|
|
254
286
|
|
|
287
|
+
if self._labels_cache is None:
|
|
288
|
+
# Still None after load attempt - should not happen
|
|
289
|
+
logger.error(
|
|
290
|
+
"Label cache is None after load attempt. Tags will be skipped."
|
|
291
|
+
)
|
|
292
|
+
return []
|
|
293
|
+
|
|
255
294
|
if not self._labels_cache:
|
|
256
|
-
|
|
295
|
+
# Empty list - either no labels in team or load failed
|
|
296
|
+
logger.warning(
|
|
297
|
+
f"Team has no labels available. Cannot resolve tags: {label_names}"
|
|
298
|
+
)
|
|
257
299
|
return []
|
|
258
300
|
|
|
259
301
|
# Create name -> ID mapping (case-insensitive)
|
|
@@ -823,7 +865,7 @@ class LinearAdapter(BaseAdapter[Task]):
|
|
|
823
865
|
|
|
824
866
|
comment_input = {
|
|
825
867
|
"issueId": linear_id,
|
|
826
|
-
"body": comment.
|
|
868
|
+
"body": comment.content,
|
|
827
869
|
}
|
|
828
870
|
|
|
829
871
|
result = await self.client.execute_mutation(
|
|
@@ -16,8 +16,7 @@ except ImportError:
|
|
|
16
16
|
HTTPXAsyncTransport = None
|
|
17
17
|
TransportError = Exception
|
|
18
18
|
|
|
19
|
-
from ...core.exceptions import
|
|
20
|
-
RateLimitError)
|
|
19
|
+
from ...core.exceptions import AdapterError, AuthenticationError, RateLimitError
|
|
21
20
|
|
|
22
21
|
|
|
23
22
|
class LinearGraphQLClient:
|
|
@@ -6,8 +6,7 @@ from datetime import datetime
|
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
8
|
from ...core.models import Comment, Epic, Priority, Task, TicketState
|
|
9
|
-
from .types import
|
|
10
|
-
get_universal_state)
|
|
9
|
+
from .types import extract_linear_metadata, get_universal_priority, get_universal_state
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
def map_linear_issue_to_task(issue_data: dict[str, Any]) -> Task:
|
|
@@ -197,8 +197,7 @@ def _test_adapter_instantiation(console: Console) -> None:
|
|
|
197
197
|
if primary:
|
|
198
198
|
adapter_type = primary.adapter_type
|
|
199
199
|
# Build config from discovery
|
|
200
|
-
from ..mcp.server import
|
|
201
|
-
_build_adapter_config_from_env_vars
|
|
200
|
+
from ..mcp.server import _build_adapter_config_from_env_vars
|
|
202
201
|
|
|
203
202
|
config = _build_adapter_config_from_env_vars(adapter_type, {})
|
|
204
203
|
else:
|
|
@@ -385,8 +384,7 @@ def get_adapter_status() -> dict[str, Any]:
|
|
|
385
384
|
adapter_type = primary.adapter_type
|
|
386
385
|
status["configuration_source"] = primary.found_in
|
|
387
386
|
# Build basic config
|
|
388
|
-
from ..mcp.server import
|
|
389
|
-
_build_adapter_config_from_env_vars
|
|
387
|
+
from ..mcp.server import _build_adapter_config_from_env_vars
|
|
390
388
|
|
|
391
389
|
config = _build_adapter_config_from_env_vars(adapter_type, {})
|
|
392
390
|
else:
|
mcp_ticketer/cli/configure.py
CHANGED
|
@@ -9,9 +9,15 @@ from rich.panel import Panel
|
|
|
9
9
|
from rich.prompt import Confirm, Prompt
|
|
10
10
|
from rich.table import Table
|
|
11
11
|
|
|
12
|
-
from ..core.project_config import (
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
from ..core.project_config import (
|
|
13
|
+
AdapterConfig,
|
|
14
|
+
AdapterType,
|
|
15
|
+
ConfigResolver,
|
|
16
|
+
ConfigValidator,
|
|
17
|
+
HybridConfig,
|
|
18
|
+
SyncStrategy,
|
|
19
|
+
TicketerConfig,
|
|
20
|
+
)
|
|
15
21
|
|
|
16
22
|
console = Console()
|
|
17
23
|
|
mcp_ticketer/cli/discover.py
CHANGED
|
@@ -7,8 +7,12 @@ import typer
|
|
|
7
7
|
from rich.console import Console
|
|
8
8
|
|
|
9
9
|
from ..core.env_discovery import DiscoveredAdapter, EnvDiscovery
|
|
10
|
-
from ..core.project_config import (
|
|
11
|
-
|
|
10
|
+
from ..core.project_config import (
|
|
11
|
+
AdapterConfig,
|
|
12
|
+
ConfigResolver,
|
|
13
|
+
ConfigValidator,
|
|
14
|
+
TicketerConfig,
|
|
15
|
+
)
|
|
12
16
|
|
|
13
17
|
console = Console()
|
|
14
18
|
app = typer.Typer(help="Auto-discover configuration from .env files")
|
mcp_ticketer/cli/main.py
CHANGED
|
@@ -21,8 +21,7 @@ from ..core.models import Comment, SearchQuery
|
|
|
21
21
|
from ..queue import Queue, QueueStatus, WorkerManager
|
|
22
22
|
from ..queue.health_monitor import HealthStatus, QueueHealthMonitor
|
|
23
23
|
from ..queue.ticket_registry import TicketRegistry
|
|
24
|
-
from .configure import
|
|
25
|
-
show_current_config)
|
|
24
|
+
from .configure import configure_wizard, set_adapter_config, show_current_config
|
|
26
25
|
from .diagnostics import run_diagnostics
|
|
27
26
|
from .discover import app as discover_app
|
|
28
27
|
from .linear_commands import app as linear_app
|
mcp_ticketer/mcp/server.py
CHANGED
|
@@ -12,20 +12,40 @@ from dotenv import load_dotenv
|
|
|
12
12
|
import mcp_ticketer.adapters # noqa: F401
|
|
13
13
|
|
|
14
14
|
from ..core import AdapterRegistry
|
|
15
|
-
from ..core.models import
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
15
|
+
from ..core.models import Comment, Epic, Priority, SearchQuery, Task, TicketState
|
|
16
|
+
from .constants import (
|
|
17
|
+
DEFAULT_BASE_PATH,
|
|
18
|
+
DEFAULT_LIMIT,
|
|
19
|
+
DEFAULT_MAX_DEPTH,
|
|
20
|
+
DEFAULT_OFFSET,
|
|
21
|
+
ERROR_INTERNAL,
|
|
22
|
+
ERROR_METHOD_NOT_FOUND,
|
|
23
|
+
ERROR_PARSE,
|
|
24
|
+
JSONRPC_VERSION,
|
|
25
|
+
MCP_PROTOCOL_VERSION,
|
|
26
|
+
MSG_EPIC_NOT_FOUND,
|
|
27
|
+
MSG_INTERNAL_ERROR,
|
|
28
|
+
MSG_MISSING_TICKET_ID,
|
|
29
|
+
MSG_MISSING_TITLE,
|
|
30
|
+
MSG_NO_TICKETS_PROVIDED,
|
|
31
|
+
MSG_NO_UPDATES_PROVIDED,
|
|
32
|
+
MSG_TICKET_NOT_FOUND,
|
|
33
|
+
MSG_TRANSITION_FAILED,
|
|
34
|
+
MSG_UNKNOWN_METHOD,
|
|
35
|
+
MSG_UNKNOWN_OPERATION,
|
|
36
|
+
MSG_UPDATE_FAILED,
|
|
37
|
+
SERVER_NAME,
|
|
38
|
+
SERVER_VERSION,
|
|
39
|
+
STATUS_COMPLETED,
|
|
40
|
+
STATUS_ERROR,
|
|
41
|
+
)
|
|
42
|
+
from .dto import (
|
|
43
|
+
CreateEpicRequest,
|
|
44
|
+
CreateIssueRequest,
|
|
45
|
+
CreateTaskRequest,
|
|
46
|
+
CreateTicketRequest,
|
|
47
|
+
ReadTicketRequest,
|
|
48
|
+
)
|
|
29
49
|
from .response_builder import ResponseBuilder
|
|
30
50
|
|
|
31
51
|
# Load environment variables early (prioritize .env.local)
|
|
@@ -841,6 +861,44 @@ class MCPTicketServer:
|
|
|
841
861
|
"required": ["title"],
|
|
842
862
|
},
|
|
843
863
|
},
|
|
864
|
+
{
|
|
865
|
+
"name": "ticket_comment",
|
|
866
|
+
"description": "Add or list comments on a ticket",
|
|
867
|
+
"inputSchema": {
|
|
868
|
+
"type": "object",
|
|
869
|
+
"properties": {
|
|
870
|
+
"operation": {
|
|
871
|
+
"type": "string",
|
|
872
|
+
"enum": ["add", "list"],
|
|
873
|
+
"description": "Operation to perform: 'add' to create a comment, 'list' to retrieve comments",
|
|
874
|
+
"default": "add",
|
|
875
|
+
},
|
|
876
|
+
"ticket_id": {
|
|
877
|
+
"type": "string",
|
|
878
|
+
"description": "Ticket ID to comment on",
|
|
879
|
+
},
|
|
880
|
+
"content": {
|
|
881
|
+
"type": "string",
|
|
882
|
+
"description": "Comment content (required for 'add' operation)",
|
|
883
|
+
},
|
|
884
|
+
"author": {
|
|
885
|
+
"type": "string",
|
|
886
|
+
"description": "Comment author (optional for 'add' operation)",
|
|
887
|
+
},
|
|
888
|
+
"limit": {
|
|
889
|
+
"type": "integer",
|
|
890
|
+
"default": 10,
|
|
891
|
+
"description": "Maximum number of comments to return (for 'list' operation)",
|
|
892
|
+
},
|
|
893
|
+
"offset": {
|
|
894
|
+
"type": "integer",
|
|
895
|
+
"default": 0,
|
|
896
|
+
"description": "Number of comments to skip (for 'list' operation)",
|
|
897
|
+
},
|
|
898
|
+
},
|
|
899
|
+
"required": ["ticket_id"],
|
|
900
|
+
},
|
|
901
|
+
},
|
|
844
902
|
]
|
|
845
903
|
}
|
|
846
904
|
|
|
@@ -893,6 +951,8 @@ class MCPTicketServer:
|
|
|
893
951
|
result = await self._handle_transition(arguments)
|
|
894
952
|
elif tool_name == "ticket_search":
|
|
895
953
|
result = await self._handle_search(arguments)
|
|
954
|
+
elif tool_name == "ticket_comment":
|
|
955
|
+
result = await self._handle_comment(arguments)
|
|
896
956
|
# PR integration
|
|
897
957
|
elif tool_name == "ticket_create_pr":
|
|
898
958
|
result = await self._handle_create_pr(arguments)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-ticketer
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.7
|
|
4
4
|
Summary: Universal ticket management interface for AI agents with MCP support
|
|
5
5
|
Author-email: MCP Ticketer Team <support@mcp-ticketer.io>
|
|
6
6
|
Maintainer-email: MCP Ticketer Team <support@mcp-ticketer.io>
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
mcp_ticketer/__init__.py,sha256
|
|
2
|
-
mcp_ticketer/__version__.py,sha256=
|
|
1
|
+
mcp_ticketer/__init__.py,sha256=Xx4WaprO5PXhVPbYi1L6tBmwmJMkYS-lMyG4ieN6QP0,717
|
|
2
|
+
mcp_ticketer/__version__.py,sha256=s7BXKaEC9wzrKYxOdqIb1UHlYxMSgLWk-8vzfr8WEIc,1117
|
|
3
3
|
mcp_ticketer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
mcp_ticketer/adapters/__init__.py,sha256=B5DFllWn23hkhmrLykNO5uMMSdcFuuPHXyLw_jyFzuE,358
|
|
5
|
-
mcp_ticketer/adapters/aitrackdown.py,sha256=
|
|
6
|
-
mcp_ticketer/adapters/github.py,sha256=
|
|
5
|
+
mcp_ticketer/adapters/aitrackdown.py,sha256=Ecw2SQAGVQs5yMH6m2pj61LxCJsuy-g2bvF8uwTpLUE,22588
|
|
6
|
+
mcp_ticketer/adapters/github.py,sha256=YbZ8hj4nOy4pGIbZ_0zwciNbNnwK69zqfljb-wc2tSY,47384
|
|
7
7
|
mcp_ticketer/adapters/hybrid.py,sha256=UADYZLc_UNw0xHPSbgguBNzvUCnuYn12Qi9ea-zdlMk,19086
|
|
8
|
-
mcp_ticketer/adapters/jira.py,sha256=
|
|
8
|
+
mcp_ticketer/adapters/jira.py,sha256=labZFqOy_mmMmizC-RD1EQbu9m4LLtJywwZ956-_x5E,35347
|
|
9
9
|
mcp_ticketer/adapters/linear.py,sha256=trm6ZhmlUl80sj51WAPAox_R2HQZXZ-h1QXJsrFYDCQ,587
|
|
10
10
|
mcp_ticketer/adapters/linear/__init__.py,sha256=6l0ZoR6ZHSRcytLfps2AZuk5R189Pq1GfR5-YDQt8-Q,731
|
|
11
|
-
mcp_ticketer/adapters/linear/adapter.py,sha256=
|
|
12
|
-
mcp_ticketer/adapters/linear/client.py,sha256=
|
|
13
|
-
mcp_ticketer/adapters/linear/mappers.py,sha256=
|
|
11
|
+
mcp_ticketer/adapters/linear/adapter.py,sha256=ZCj6ZM5RiWbdiGrhA3NsMTgFImvrzaB0jBIr_3ZCcO8,30959
|
|
12
|
+
mcp_ticketer/adapters/linear/client.py,sha256=0UmWlSEcRiwnSMFYKL89KMrPPL8S8uZ5V6rIY_KFOQU,8803
|
|
13
|
+
mcp_ticketer/adapters/linear/mappers.py,sha256=GN1X7bOcU-5dhDW3dAtSEGivinhFBc8hoKYot8c5tCo,9631
|
|
14
14
|
mcp_ticketer/adapters/linear/queries.py,sha256=K8y7xc3iH-q9LEUmg-0YDBhh546LAwLZDvVLkzx3yY4,7223
|
|
15
15
|
mcp_ticketer/adapters/linear/types.py,sha256=ugXtRGLljDw6yoCnEVgdFs0xLR9ErLdnv4ffh9EAUhk,7874
|
|
16
16
|
mcp_ticketer/cache/__init__.py,sha256=Xcd-cKnt-Cx7jBzvfzUUUPaGkmyXFi5XUFWw3Z4b7d4,138
|
|
17
17
|
mcp_ticketer/cache/memory.py,sha256=2yBqGi9i0SanlUhJoOC7nijWjoMa3_ntPe-V-AV-LfU,5042
|
|
18
18
|
mcp_ticketer/cli/__init__.py,sha256=l9Q8iKmfGkTu0cssHBVqNZTsL4eAtFzOB25AED_0G6g,89
|
|
19
|
-
mcp_ticketer/cli/adapter_diagnostics.py,sha256=
|
|
19
|
+
mcp_ticketer/cli/adapter_diagnostics.py,sha256=pQDdtDgBwSW04wdFEPVzwbul3KgfB9g6ZMS85qpYulY,14988
|
|
20
20
|
mcp_ticketer/cli/auggie_configure.py,sha256=MXKzLtqe3K_UTQ2GacHAWbvf_B0779KL325smiAKE0Q,8212
|
|
21
21
|
mcp_ticketer/cli/codex_configure.py,sha256=k7-q5d7NICjm7Vxa-z0mejJNAG-bicAHKcwqrzdRDyU,9080
|
|
22
|
-
mcp_ticketer/cli/configure.py,sha256=
|
|
22
|
+
mcp_ticketer/cli/configure.py,sha256=BsA_pSHQMQS0t1bJO_wMM8LWsd5sWJDASjEPRHvwC18,16198
|
|
23
23
|
mcp_ticketer/cli/diagnostics.py,sha256=jHF68ydW3RNVGumBnHUjUmq6YOjQD2UDkx0O7M__xv0,29965
|
|
24
|
-
mcp_ticketer/cli/discover.py,sha256=
|
|
24
|
+
mcp_ticketer/cli/discover.py,sha256=AF_qlQc1Oo0UkWayoF5pmRChS5J3fJjH6f2YZzd_k8w,13188
|
|
25
25
|
mcp_ticketer/cli/gemini_configure.py,sha256=ZNSA1lBW-itVToza-JxW95Po7daVXKiZAh7lp6pmXMU,9343
|
|
26
26
|
mcp_ticketer/cli/linear_commands.py,sha256=_8f8ze_1MbiUweU6RFHpldgfHLirysIdPjHr2_S0YhI,17319
|
|
27
|
-
mcp_ticketer/cli/main.py,sha256=
|
|
27
|
+
mcp_ticketer/cli/main.py,sha256=BFo7QYU0tTOHWSfTmegzDqflSYFytCE8Jw6QGB7TwaY,74470
|
|
28
28
|
mcp_ticketer/cli/mcp_configure.py,sha256=RzV50UjXgOmvMp-9S0zS39psuvjffVByaMrqrUaAGAM,9594
|
|
29
29
|
mcp_ticketer/cli/migrate_config.py,sha256=MYsr_C5ZxsGg0P13etWTWNrJ_lc6ElRCkzfQADYr3DM,5956
|
|
30
30
|
mcp_ticketer/cli/queue_commands.py,sha256=mm-3H6jmkUGJDyU_E46o9iRpek8tvFCm77F19OtHiZI,7884
|
|
@@ -45,7 +45,7 @@ mcp_ticketer/mcp/__init__.py,sha256=Y05eTzsPk0wH8yKNIM-ekpGjgSDO0bQr0EME-vOP4GE,
|
|
|
45
45
|
mcp_ticketer/mcp/constants.py,sha256=EBGsJtBPaTCvAm5rOMknckrXActrNIls7lRklnh1L4s,2072
|
|
46
46
|
mcp_ticketer/mcp/dto.py,sha256=fUNAdCnPNp80s6RYLFqSmgqQZX04BHYry4GArmFkdG0,7336
|
|
47
47
|
mcp_ticketer/mcp/response_builder.py,sha256=sEYiwQddlfQmIOcbQ-yBsDvH1EJfbTDwCEUJNf7q5Vk,4946
|
|
48
|
-
mcp_ticketer/mcp/server.py,sha256=
|
|
48
|
+
mcp_ticketer/mcp/server.py,sha256=SZ8lHdXJJAfV3jVRiZcR2uNYpHY-Lcbt2xXy_Tc728E,48848
|
|
49
49
|
mcp_ticketer/queue/__init__.py,sha256=1YIaCpZpFqPcqvDEQXiEvDLiw94DXRdCJkBaVIFQrms,231
|
|
50
50
|
mcp_ticketer/queue/__main__.py,sha256=gc_tE9NUdK07OJfTZuD4t6KeBD_vxFQIhknGTQUG_jk,109
|
|
51
51
|
mcp_ticketer/queue/health_monitor.py,sha256=KFOzksomUFnS94XKBiuHFPmGK6b4QXWzsrjwhHkR9vI,12245
|
|
@@ -54,9 +54,9 @@ mcp_ticketer/queue/queue.py,sha256=PIB_8gOE4rCb5_tBNKw9qD6YhSgH3Ei3IzVrUSY3F_o,1
|
|
|
54
54
|
mcp_ticketer/queue/run_worker.py,sha256=WhoeamL8LKZ66TM8W1PkMPwjF2w_EDFMP-mevs6C1TM,1019
|
|
55
55
|
mcp_ticketer/queue/ticket_registry.py,sha256=FE6W_D8NA-66cJQ6VqghChF3JasYW845JVfEZdiqLbA,15449
|
|
56
56
|
mcp_ticketer/queue/worker.py,sha256=AF6W1bdxWnHiJd6-iBWqTHkZ4lFflsS65CAtgFPR0FA,20983
|
|
57
|
-
mcp_ticketer-0.3.
|
|
58
|
-
mcp_ticketer-0.3.
|
|
59
|
-
mcp_ticketer-0.3.
|
|
60
|
-
mcp_ticketer-0.3.
|
|
61
|
-
mcp_ticketer-0.3.
|
|
62
|
-
mcp_ticketer-0.3.
|
|
57
|
+
mcp_ticketer-0.3.7.dist-info/licenses/LICENSE,sha256=KOVrunjtILSzY-2N8Lqa3-Q8dMaZIG4LrlLTr9UqL08,1073
|
|
58
|
+
mcp_ticketer-0.3.7.dist-info/METADATA,sha256=ivW854H301BPY_YzUtzYhhhQ15sQKF_u-owFjOq6e24,13219
|
|
59
|
+
mcp_ticketer-0.3.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
60
|
+
mcp_ticketer-0.3.7.dist-info/entry_points.txt,sha256=o1IxVhnHnBNG7FZzbFq-Whcs1Djbofs0qMjiUYBLx2s,60
|
|
61
|
+
mcp_ticketer-0.3.7.dist-info/top_level.txt,sha256=WnAG4SOT1Vm9tIwl70AbGG_nA217YyV3aWFhxLH2rxw,13
|
|
62
|
+
mcp_ticketer-0.3.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|