tododdle-mcp 2.8.0 → 3.0.0
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.
- package/.codex-plugin/plugin.json +4 -4
- package/README.md +46 -40
- package/config/external-api-parity.json +44 -42
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +12 -3
- package/dist/api-client.js.map +1 -1
- package/dist/compatibility.d.ts +10 -0
- package/dist/compatibility.d.ts.map +1 -0
- package/dist/compatibility.js +17 -0
- package/dist/compatibility.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +82 -82
- package/dist/server.js.map +1 -1
- package/examples/AGENTS.tododdle.md +7 -5
- package/package.json +1 -1
- package/skills/tododdle-workflow/SKILL.md +19 -19
- package/skills/tododdle-workflow/agents/openai.yaml +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tododdle",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Disciplined agent workflows for projects managed in ToDoddle.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "ToDoddle",
|
|
@@ -9,19 +9,19 @@
|
|
|
9
9
|
"homepage": "https://tododdle.com",
|
|
10
10
|
"repository": "https://github.com/krffl/tododdle-mcp",
|
|
11
11
|
"license": "MIT",
|
|
12
|
-
"keywords": ["project-management", "
|
|
12
|
+
"keywords": ["project-management", "tickets", "boards", "time-tracking", "mcp"],
|
|
13
13
|
"skills": "./skills/",
|
|
14
14
|
"interface": {
|
|
15
15
|
"displayName": "ToDoddle",
|
|
16
16
|
"shortDescription": "Manage tracked work with project context",
|
|
17
|
-
"longDescription": "Use ToDoddle as the shared work ledger for project context,
|
|
17
|
+
"longDescription": "Use ToDoddle as the shared work ledger for project context, board and lane structure, ticket execution, durable status updates, blockers, comments, and time tracking.",
|
|
18
18
|
"developerName": "ToDoddle",
|
|
19
19
|
"category": "Productivity",
|
|
20
20
|
"capabilities": ["Read", "Write"],
|
|
21
21
|
"websiteURL": "https://tododdle.com",
|
|
22
22
|
"defaultPrompt": [
|
|
23
23
|
"Review my ToDoddle work queue and recommend what to do next.",
|
|
24
|
-
"Read the project context and begin the relevant
|
|
24
|
+
"Read the project context and begin the relevant ticket.",
|
|
25
25
|
"Summarize progress and update the tracked work."
|
|
26
26
|
],
|
|
27
27
|
"brandColor": "#0F766E"
|
package/README.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# ToDoddle MCP Server
|
|
2
2
|
|
|
3
|
-
The official Model Context Protocol stdio server for [ToDoddle](https://tododdle.com). It gives MCP-compatible agents a bounded interface for project context,
|
|
3
|
+
The official Model Context Protocol stdio server for [ToDoddle](https://tododdle.com). It gives MCP-compatible agents a bounded interface for project context, boards, lanes, tickets, comments, and time tracking through ToDoddle's hosted API.
|
|
4
4
|
|
|
5
5
|
The package contains no ToDoddle application or database code. It is a small stdio client that authenticates as an Agent Connection and calls the hosted API.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Version 3 sends its package version and compatibility level with every token and API request. If ToDoddle returns `MCP_UPDATE_REQUIRED`, run `npx --yes --prefer-online tododdle-mcp@latest` and restart the MCP host. The error includes the installed version, minimum supported level, update command, and current troubleshooting guide.
|
|
8
|
+
|
|
9
|
+
Agent work claims let any connected agent indicate that it is actively handling a ticket without becoming the human assignee. Claims use the configured Agent Connection label, an opaque run ID, and an expiring lease.
|
|
8
10
|
|
|
9
11
|
## Requirements
|
|
10
12
|
|
|
@@ -90,11 +92,15 @@ Installing the plugin does not create or expand ToDoddle credentials, scopes, or
|
|
|
90
92
|
For substantial planning or implementation, load project context in a small, predictable sequence:
|
|
91
93
|
|
|
92
94
|
1. Call `get_project_brief` once for the durable purpose, constraints, and success criteria.
|
|
93
|
-
2. Call `get_project_context` once for bounded
|
|
94
|
-
3. Use `list_project_artifacts`, `
|
|
95
|
-
4. Reuse returned project,
|
|
95
|
+
2. Call `get_project_context` once for bounded board and lane structure.
|
|
96
|
+
3. Use `list_project_artifacts`, `list_tickets`, or `get_ticket` only for the artifacts and work relevant to the request. Keep list calls bounded and follow their pagination metadata.
|
|
97
|
+
4. Reuse returned project, board, lane, ticket, and artifact IDs in the active conversation and its compaction summary. Refresh only volatile ticket state before a mutation.
|
|
98
|
+
|
|
99
|
+
Simple lookups should skip the brief and full context entirely. Call the narrowest read tool, such as `get_ticket` for a known ticket or hierarchy-filtered `list_tickets` for one board or lane. `get_work_queue` remains the cross-project operational view. The stable API fields `planId`, `sectionId`, and `taskId` identify boards, lanes, and tickets.
|
|
100
|
+
|
|
101
|
+
### Version 3 migration
|
|
96
102
|
|
|
97
|
-
|
|
103
|
+
Version 3 replaces Plan, Section, and Task tool names with Board, Lane, and Ticket names. The hosted API paths and stable ID fields do not change. Version 2 clients must update to `tododdle-mcp@latest` and restart their agent host. The API returns `MCP_UPDATE_REQUIRED` with the exact update command when an old client identifies itself.
|
|
98
104
|
|
|
99
105
|
The server returns authoritative website URLs with records so an agent can hand work back to a human without reconstructing routes. Access remains the intersection of the Agent Connection's scopes, explicit project grants, and authorizing user's current ACL on every call.
|
|
100
106
|
|
|
@@ -109,55 +115,55 @@ When ToDoddle should be mandatory for one repository, merge the relevant rules f
|
|
|
109
115
|
- `list_projects`
|
|
110
116
|
- `get_project`
|
|
111
117
|
- `get_project_context`
|
|
112
|
-
- `
|
|
113
|
-
- `
|
|
114
|
-
- `
|
|
115
|
-
- `
|
|
118
|
+
- `list_boards`
|
|
119
|
+
- `get_board`
|
|
120
|
+
- `list_lanes`
|
|
121
|
+
- `get_lane`
|
|
116
122
|
- `list_project_members`
|
|
117
123
|
- `list_project_documents`
|
|
118
124
|
- `get_document_download_url`
|
|
119
125
|
- `list_notes`
|
|
120
126
|
- `get_note`
|
|
121
|
-
- `
|
|
127
|
+
- `list_tickets`
|
|
122
128
|
- `get_work_queue`
|
|
123
129
|
- `list_available_work`
|
|
124
130
|
- `get_focus_list`
|
|
125
|
-
- `
|
|
126
|
-
- `
|
|
127
|
-
- `
|
|
128
|
-
- `
|
|
131
|
+
- `add_ticket_to_focus`
|
|
132
|
+
- `move_focus_ticket`
|
|
133
|
+
- `remove_ticket_from_focus`
|
|
134
|
+
- `get_ticket`
|
|
129
135
|
- `get_project_brief`
|
|
130
136
|
- `list_project_artifacts`
|
|
131
137
|
- `get_project_artifact`
|
|
132
138
|
- `get_agent_inbox`
|
|
133
139
|
|
|
134
|
-
### Manage
|
|
135
|
-
|
|
136
|
-
- `
|
|
137
|
-
- `
|
|
138
|
-
- `
|
|
139
|
-
- `
|
|
140
|
-
- `
|
|
141
|
-
- `
|
|
142
|
-
- `
|
|
143
|
-
- `
|
|
144
|
-
- `
|
|
145
|
-
- `
|
|
146
|
-
- `
|
|
140
|
+
### Manage Tickets
|
|
141
|
+
|
|
142
|
+
- `claim_ticket`
|
|
143
|
+
- `claim_next_ticket`
|
|
144
|
+
- `renew_ticket_claim`
|
|
145
|
+
- `release_ticket`
|
|
146
|
+
- `create_ticket`
|
|
147
|
+
- `update_ticket`
|
|
148
|
+
- `transition_ticket`
|
|
149
|
+
- `preview_ticket_move`
|
|
150
|
+
- `move_ticket`
|
|
151
|
+
- `set_ticket_blocker`
|
|
152
|
+
- `add_ticket_comment`
|
|
147
153
|
- `acknowledge_agent_reply`
|
|
148
|
-
- `
|
|
154
|
+
- `archive_ticket`
|
|
149
155
|
|
|
150
|
-
`list_available_work` reads only unblocked, currently unclaimed work in one project. `
|
|
156
|
+
`list_available_work` reads only unblocked, currently unclaimed work in one project. `claim_next_ticket` selects the highest-ranked eligible ticket. `claim_ticket`, `renew_ticket_claim`, and `release_ticket` manage its agent lease without changing human assignment. `preview_ticket_move` reports lane automation and hierarchy blockers before a board move. `move_ticket` and `archive_ticket` are destructive because a destination lane can archive the ticket. Ticket deletion is unavailable.
|
|
151
157
|
|
|
152
158
|
Durable agent-to-human handoffs use typed `HANDOFF` comments with a concise outcome, verification and immutable evidence, and any remaining risk or next action. External mutations return a stable ToDoddle `uiUrl`; expiring asset token URLs must not be copied into comments. A continuing run reads and handles its Agent Connection inbox reply before acknowledgement, then reloads the linked record.
|
|
153
159
|
|
|
154
|
-
|
|
160
|
+
Ticket create/update accepts the stable kind values `TASK`, `FEATURE`, `EPIC`, `BUG`, `RESEARCH`, and `ACTION_ITEM`. Lane create/update supports `SET_KIND` alongside status, priority, assignee, and archive entry actions.
|
|
155
161
|
|
|
156
162
|
### Manage Project Structure
|
|
157
163
|
|
|
158
164
|
- `create_project`, `update_project`, `archive_project`, `restore_project`
|
|
159
|
-
- `
|
|
160
|
-
- `
|
|
165
|
+
- `create_board`, `update_board`, `move_board`, `archive_board`, `restore_board`
|
|
166
|
+
- `create_lane`, `update_lane`, `move_lane`, `archive_lane`, `restore_lane`
|
|
161
167
|
|
|
162
168
|
Archive operations are destructive and require client approval. Permanent deletion is intentionally unavailable.
|
|
163
169
|
|
|
@@ -173,10 +179,10 @@ Notes are organization-scoped and unavailable to project-only connections.
|
|
|
173
179
|
|
|
174
180
|
- `get_active_time_entries`
|
|
175
181
|
- `list_project_time`
|
|
176
|
-
- `
|
|
177
|
-
- `
|
|
178
|
-
- `
|
|
179
|
-
- `
|
|
182
|
+
- `list_ticket_time`
|
|
183
|
+
- `start_ticket_timer`
|
|
184
|
+
- `stop_ticket_timer`
|
|
185
|
+
- `log_ticket_time`
|
|
180
186
|
- `update_time_entry`
|
|
181
187
|
- `archive_time_entry`
|
|
182
188
|
|
|
@@ -187,7 +193,7 @@ Notes are organization-scoped and unavailable to project-only connections.
|
|
|
187
193
|
- `create_project_artifact`
|
|
188
194
|
- `update_project_artifact`
|
|
189
195
|
- `transition_project_artifact`
|
|
190
|
-
- `
|
|
196
|
+
- `link_artifact_ticket`
|
|
191
197
|
- `add_artifact_comment`
|
|
192
198
|
- `list_artifact_revisions`
|
|
193
199
|
- `link_project_artifacts`
|
|
@@ -195,13 +201,13 @@ Notes are organization-scoped and unavailable to project-only connections.
|
|
|
195
201
|
### Upload Files
|
|
196
202
|
|
|
197
203
|
- `upload_project_document`
|
|
198
|
-
- `
|
|
204
|
+
- `attach_file_to_ticket`
|
|
199
205
|
|
|
200
206
|
Each tool accepts either an approved local `filePath` or an HTTPS `sourceUrl`. Local paths are disabled until `TODODDLE_UPLOAD_ROOTS` is configured. Files stream directly from this local MCP process to ToDoddle's short-lived Bunny upload URL; file bodies are never placed in MCP JSON messages.
|
|
201
207
|
|
|
202
208
|
Use `get_document_download_url` with a `projectId` and `documentId` returned by `list_project_documents` to obtain a five-minute tokenized URL. The URL grants access only to that ready document and should not be stored in comments or other durable project context. Video documents return a protected stream URL when the workspace subscription permits playback.
|
|
203
209
|
|
|
204
|
-
The server also provides
|
|
210
|
+
The server also provides ticket, project, and project-artifact resource templates plus `triage_work` and `daily_status` prompts.
|
|
205
211
|
|
|
206
212
|
## Permissions
|
|
207
213
|
|
|
@@ -7,20 +7,20 @@
|
|
|
7
7
|
"update_project": ["PUT /api/external/projects/[projectId]"],
|
|
8
8
|
"archive_project": ["PUT /api/external/projects/[projectId]"],
|
|
9
9
|
"restore_project": ["PUT /api/external/projects/[projectId]"],
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
10
|
+
"list_boards": ["GET /api/external/projects/[projectId]/plans"],
|
|
11
|
+
"get_board": ["GET /api/external/projects/[projectId]/plans/[planId]"],
|
|
12
|
+
"create_board": ["POST /api/external/projects/[projectId]/plans"],
|
|
13
|
+
"update_board": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
|
|
14
|
+
"move_board": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
|
|
15
|
+
"archive_board": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
|
|
16
|
+
"restore_board": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
|
|
17
|
+
"list_lanes": ["GET /api/external/projects/[projectId]/plans/[planId]/sections"],
|
|
18
|
+
"get_lane": ["GET /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
|
|
19
|
+
"create_lane": ["POST /api/external/projects/[projectId]/plans/[planId]/sections"],
|
|
20
|
+
"update_lane": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
|
|
21
|
+
"move_lane": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
|
|
22
|
+
"archive_lane": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
|
|
23
|
+
"restore_lane": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
|
|
24
24
|
"list_project_members": ["GET /api/external/projects/[projectId]/members"],
|
|
25
25
|
"list_project_documents": ["GET /api/external/projects/[projectId]/documents"],
|
|
26
26
|
"get_document_download_url": ["POST /api/external/projects/[projectId]/documents/[documentId]/download-url"],
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"POST /api/external/projects/[projectId]/documents/upload-sessions",
|
|
29
29
|
"POST /api/external/projects/[projectId]/documents/[documentId]/finalize"
|
|
30
30
|
],
|
|
31
|
-
"
|
|
31
|
+
"attach_file_to_ticket": [
|
|
32
32
|
"POST /api/external/projects/[projectId]/documents/upload-sessions",
|
|
33
33
|
"POST /api/external/projects/[projectId]/documents/[documentId]/finalize"
|
|
34
34
|
],
|
|
@@ -40,32 +40,32 @@
|
|
|
40
40
|
"get_project_context": ["GET /api/external/projects/[projectId]/context"],
|
|
41
41
|
"get_work_queue": ["GET /api/external/work-queue"],
|
|
42
42
|
"list_available_work": ["GET /api/external/work-queue/available"],
|
|
43
|
-
"
|
|
43
|
+
"claim_next_ticket": ["POST /api/external/work-queue/available"],
|
|
44
44
|
"get_focus_list": ["GET /api/external/focus"],
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
45
|
+
"add_ticket_to_focus": ["POST /api/external/focus"],
|
|
46
|
+
"move_focus_ticket": ["PATCH /api/external/focus/[taskId]"],
|
|
47
|
+
"remove_ticket_from_focus": ["DELETE /api/external/focus/[taskId]"],
|
|
48
|
+
"list_tickets": ["GET /api/external/tasks"],
|
|
49
|
+
"get_ticket": ["GET /api/external/tasks/[taskId]"],
|
|
50
|
+
"claim_ticket": ["PUT /api/external/tasks/[taskId]/claim"],
|
|
51
|
+
"renew_ticket_claim": ["PUT /api/external/tasks/[taskId]/claim"],
|
|
52
|
+
"release_ticket": ["DELETE /api/external/tasks/[taskId]/claim"],
|
|
53
|
+
"create_ticket": ["POST /api/external/tasks"],
|
|
54
|
+
"update_ticket": ["PUT /api/external/tasks/[taskId]"],
|
|
55
|
+
"transition_ticket": ["PUT /api/external/tasks/[taskId]"],
|
|
56
|
+
"set_ticket_blocker": ["PUT /api/external/tasks/[taskId]"],
|
|
57
|
+
"move_ticket": ["PUT /api/external/tasks/[taskId]/move"],
|
|
58
|
+
"preview_ticket_move": ["POST /api/external/tasks/[taskId]/move/preview"],
|
|
59
|
+
"add_ticket_comment": ["POST /api/external/tasks/[taskId]/comments"],
|
|
60
60
|
"get_agent_inbox": ["GET /api/external/agent-inbox"],
|
|
61
61
|
"acknowledge_agent_reply": ["POST /api/external/agent-inbox/[commentId]/acknowledge"],
|
|
62
|
-
"
|
|
62
|
+
"archive_ticket": ["PATCH /api/external/tasks/[taskId]/archive"],
|
|
63
63
|
"get_active_time_entries": ["GET /api/external/time-entries/active"],
|
|
64
64
|
"list_project_time": ["GET /api/external/projects/[projectId]/time-entries"],
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
65
|
+
"list_ticket_time": ["GET /api/external/projects/[projectId]/tasks/[taskId]/time-entries"],
|
|
66
|
+
"start_ticket_timer": ["POST /api/external/projects/[projectId]/tasks/[taskId]/time-entries"],
|
|
67
|
+
"log_ticket_time": ["POST /api/external/projects/[projectId]/tasks/[taskId]/time-entries"],
|
|
68
|
+
"stop_ticket_timer": ["POST /api/external/projects/[projectId]/tasks/[taskId]/time-entries/[timeEntryId]/stop"],
|
|
69
69
|
"update_time_entry": ["PATCH /api/external/projects/[projectId]/tasks/[taskId]/time-entries/[timeEntryId]"],
|
|
70
70
|
"archive_time_entry": ["DELETE /api/external/projects/[projectId]/tasks/[taskId]/time-entries/[timeEntryId]"],
|
|
71
71
|
"get_project_brief": ["GET /api/external/projects/[projectId]/brief"],
|
|
@@ -76,19 +76,21 @@
|
|
|
76
76
|
"link_project_artifacts": ["POST /api/external/projects/[projectId]/artifacts/[artifactId]/relations"],
|
|
77
77
|
"update_project_artifact": ["PATCH /api/external/projects/[projectId]/artifacts/[artifactId]"],
|
|
78
78
|
"transition_project_artifact": ["POST /api/external/projects/[projectId]/artifacts/[artifactId]/transition"],
|
|
79
|
-
"
|
|
79
|
+
"link_artifact_ticket": ["POST /api/external/projects/[projectId]/artifacts/[artifactId]/task-links"],
|
|
80
80
|
"add_artifact_comment": ["POST /api/external/projects/[projectId]/artifacts/[artifactId]/comments"]
|
|
81
81
|
},
|
|
82
82
|
"exceptions": {
|
|
83
83
|
"POST /api/external/oauth/token": "Transport-level OAuth token acquisition is exercised by the API client, not exposed as a model-callable tool.",
|
|
84
|
+
"GET /api/external/action-approvals": "Consequential-action review is a human control surface and is not exposed as a model-callable read.",
|
|
85
|
+
"GET /api/external/action-approvals/[approvalId]": "Consequential-action detail is a human control surface and is not exposed as a model-callable read.",
|
|
84
86
|
"DELETE /api/external/projects/[projectId]": "Compatibility hard-delete endpoint is intentionally omitted; MCP exposes reversible archive and restore tools.",
|
|
85
87
|
"DELETE /api/external/projects/[projectId]/plans/[planId]": "Compatibility hard-delete endpoint is intentionally omitted; MCP exposes reversible archive and restore tools.",
|
|
86
88
|
"DELETE /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]": "Compatibility endpoint is intentionally omitted; MCP exposes explicit optimistic archive and restore tools.",
|
|
87
|
-
"POST /api/external/projects/[projectId]/tasks/[taskId]/attachments": "Attachment creation is completed by the direct-upload finalize operation used by
|
|
88
|
-
"GET /api/external/tasks/[taskId]/comments": "
|
|
89
|
-
"DELETE /api/external/tasks/[taskId]": "Compatibility hard-delete endpoint is intentionally omitted; MCP exposes
|
|
89
|
+
"POST /api/external/projects/[projectId]/tasks/[taskId]/attachments": "Attachment creation is completed by the direct-upload finalize operation used by attach_file_to_ticket.",
|
|
90
|
+
"GET /api/external/tasks/[taskId]/comments": "get_ticket returns bounded comments with the complete ticket context, avoiding a redundant model-callable read.",
|
|
91
|
+
"DELETE /api/external/tasks/[taskId]": "Compatibility hard-delete endpoint is intentionally omitted; MCP exposes archive_ticket.",
|
|
90
92
|
"GET /api/external/todos": "Superseded personal-list contract; MCP uses the bounded Focus API.",
|
|
91
|
-
"POST /api/external/todos": "Superseded personal-list contract; MCP uses
|
|
92
|
-
"DELETE /api/external/todos/[taskId]": "Superseded personal-list contract; MCP uses
|
|
93
|
+
"POST /api/external/todos": "Superseded personal-list contract; MCP uses add_ticket_to_focus.",
|
|
94
|
+
"DELETE /api/external/todos/[taskId]": "Superseded personal-list contract; MCP uses remove_ticket_from_focus."
|
|
93
95
|
}
|
|
94
96
|
}
|
package/dist/api-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,qBAAa,gBAAiB,SAAQ,KAAK;IAEvC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO;IAJ5B,YACW,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACN,OAAO,CAAC,EAAE,OAAO,EAI3B;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CACD,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,UAAU,CACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,qBAAa,iBAAkB,YAAW,WAAW;IAIvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAK;IAE3B,YAA6B,MAAM,EAAE,SAAS,EAAI;YAEpC,cAAc;YA6Bd,OAAO;YAsCP,WAAW;IAazB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,OAAO;IAkBf,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,oCAE9E;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,oCAExD;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,oCAE9B;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,oCAEhC;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,oCAEjC;IAEK,UAAU,CACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAUf;CACF"}
|
package/dist/api-client.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createReadStream } from 'node:fs';
|
|
2
|
+
import { MCP_REQUEST_HEADERS, formatMcpUpdateRequiredMessage } from './compatibility.js';
|
|
2
3
|
export class ToDoddleApiError extends Error {
|
|
3
4
|
status;
|
|
4
5
|
code;
|
|
@@ -28,7 +29,10 @@ export class ToDoddleApiClient {
|
|
|
28
29
|
});
|
|
29
30
|
const response = await fetch(`${this.config.baseUrl}/api/external/oauth/token`, {
|
|
30
31
|
method: 'POST',
|
|
31
|
-
headers: {
|
|
32
|
+
headers: {
|
|
33
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
34
|
+
...MCP_REQUEST_HEADERS,
|
|
35
|
+
},
|
|
32
36
|
body: form,
|
|
33
37
|
redirect: 'manual',
|
|
34
38
|
});
|
|
@@ -54,6 +58,7 @@ export class ToDoddleApiClient {
|
|
|
54
58
|
method,
|
|
55
59
|
headers: {
|
|
56
60
|
authorization: `Bearer ${token}`,
|
|
61
|
+
...MCP_REQUEST_HEADERS,
|
|
57
62
|
...(body !== undefined ? { 'content-type': 'application/json' } : {}),
|
|
58
63
|
...(idempotencyKey ? { 'idempotency-key': idempotencyKey } : {}),
|
|
59
64
|
},
|
|
@@ -91,11 +96,15 @@ export class ToDoddleApiClient {
|
|
|
91
96
|
throw new ToDoddleApiError(response.status, 'configuration_error', `TODODDLE_BASE_URL redirected${destination ? ` to ${destination}` : ''}; configure the final API origin instead`);
|
|
92
97
|
}
|
|
93
98
|
toError(status, payload) {
|
|
94
|
-
|
|
99
|
+
const code = typeof payload.error === 'string' ? payload.error : 'server_error';
|
|
100
|
+
const message = typeof payload.message === 'string'
|
|
95
101
|
? payload.message
|
|
96
102
|
: typeof payload.error_description === 'string'
|
|
97
103
|
? payload.error_description
|
|
98
|
-
: `ToDoddle request failed (${status})
|
|
104
|
+
: `ToDoddle request failed (${status})`;
|
|
105
|
+
return new ToDoddleApiError(status, code, code === 'MCP_UPDATE_REQUIRED'
|
|
106
|
+
? formatMcpUpdateRequiredMessage(message, payload.details)
|
|
107
|
+
: message, payload.details);
|
|
99
108
|
}
|
|
100
109
|
get(path, query) {
|
|
101
110
|
return this.request('GET', path, undefined, query);
|
package/dist/api-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAOzF,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAE9B,MAAM;IACN,IAAI;IAEJ,OAAO;IAJlB,YACW,MAAc,EACd,IAAY,EACrB,OAAe,EACN,OAAiB;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAC;sBALN,MAAM;oBACN,IAAI;uBAEJ,OAAO;QAGhB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAmBD,MAAM,OAAO,iBAAiB;IAIC,MAAM;IAH3B,WAAW,GAAkB,IAAI,CAAC;IAClC,cAAc,GAAG,CAAC,CAAC;IAE3B,YAA6B,MAAiB;sBAAjB,MAAM;IAAc,CAAC;IAE1C,KAAK,CAAC,cAAc;QAC1B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,MAAM;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;QAE3F,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;YAC/B,UAAU,EAAE,oBAAoB;YAChC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC/B,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;SACxC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,2BAA2B,EAAE;YAC9E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;gBACnD,GAAG,mBAAmB;aACvB;YACD,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE/D,MAAM,KAAK,GAAG,OAAmC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,UAAU;YAC1C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QAC3D,OAAO,KAAK,CAAC,YAAY,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,KAA6D,EAC7D,cAAuB,EACvB,KAAK,GAAG,IAAI;QAEZ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACnD,IAAI,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM;YACN,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,GAAG,mBAAmB;gBACtB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjE;YACD,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC3D,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEhC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,QAAkB;QAC1C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,OAAO,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAC3C,CAAC,CAAE,OAAmC;YACtC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACzB,CAAC;IAEO,gBAAgB,CAAC,QAAkB;QACzC,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO;QAC5D,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,IAAI,gBAAgB,CACxB,QAAQ,CAAC,MAAM,EACf,qBAAqB,EACrB,+BAA+B,WAAW,CAAC,CAAC,CAAC,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,0CAA0C,CACjH,CAAC;IACJ,CAAC;IAEO,OAAO,CAAC,MAAc,EAAE,OAAgC;QAC9D,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;QAChF,MAAM,OAAO,GACX,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;YACjC,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,OAAO,OAAO,CAAC,iBAAiB,KAAK,QAAQ;gBAC7C,CAAC,CAAC,OAAO,CAAC,iBAAiB;gBAC3B,CAAC,CAAC,4BAA4B,MAAM,GAAG,CAAC;QAC9C,OAAO,IAAI,gBAAgB,CACzB,MAAM,EACN,IAAI,EACJ,IAAI,KAAK,qBAAqB;YAC5B,CAAC,CAAC,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;YAC1D,CAAC,CAAC,OAAO,EACX,OAAO,CAAC,OAAO,CAChB,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,KAA6D;QAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,IAAa,EAAE,cAAuB;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IACrE,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,IAAa;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,IAAa;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,IAAa;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,UAAU,CACd,GAAW,EACX,OAA+B,EAC/B,QAAgB,EAChB,QAAgB;QAEhB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;YAC3D,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAU;YACzC,MAAM,EAAE,MAAM;SACqB,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const MCP_PACKAGE_VERSION = "3.0.0";
|
|
2
|
+
export declare const MCP_COMPATIBILITY_LEVEL = 3;
|
|
3
|
+
export declare const MCP_VERSION_HEADER = "x-tododdle-mcp-version";
|
|
4
|
+
export declare const MCP_COMPATIBILITY_HEADER = "x-tododdle-mcp-compatibility";
|
|
5
|
+
export declare const MCP_REQUEST_HEADERS: {
|
|
6
|
+
readonly "x-tododdle-mcp-version": "3.0.0";
|
|
7
|
+
readonly "x-tododdle-mcp-compatibility": string;
|
|
8
|
+
};
|
|
9
|
+
export declare function formatMcpUpdateRequiredMessage(message: string, details: unknown): string;
|
|
10
|
+
//# sourceMappingURL=compatibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAC3C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,wBAAwB,iCAAiC,CAAC;AAEvE,eAAO,MAAM,mBAAmB;;;CAGtB,CAAC;AAUX,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAUxF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const MCP_PACKAGE_VERSION = '3.0.0';
|
|
2
|
+
export const MCP_COMPATIBILITY_LEVEL = 3;
|
|
3
|
+
export const MCP_VERSION_HEADER = 'x-tododdle-mcp-version';
|
|
4
|
+
export const MCP_COMPATIBILITY_HEADER = 'x-tododdle-mcp-compatibility';
|
|
5
|
+
export const MCP_REQUEST_HEADERS = {
|
|
6
|
+
[MCP_VERSION_HEADER]: MCP_PACKAGE_VERSION,
|
|
7
|
+
[MCP_COMPATIBILITY_HEADER]: String(MCP_COMPATIBILITY_LEVEL),
|
|
8
|
+
};
|
|
9
|
+
export function formatMcpUpdateRequiredMessage(message, details) {
|
|
10
|
+
const value = details && typeof details === 'object' ? details : {};
|
|
11
|
+
const updateCommand = typeof value.updateCommand === 'string'
|
|
12
|
+
? value.updateCommand
|
|
13
|
+
: 'npx --yes --prefer-online tododdle-mcp@latest';
|
|
14
|
+
const documentation = typeof value.documentationUrl === 'string' ? ` See ${value.documentationUrl}.` : '';
|
|
15
|
+
return `${message} Ask the user to run \`${updateCommand}\`, then restart Codex.${documentation}`;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AAEvE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,CAAC,kBAAkB,CAAC,EAAE,mBAAmB;IACzC,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,uBAAuB,CAAC;CACnD,CAAC;AAUX,MAAM,UAAU,8BAA8B,CAAC,OAAe,EAAE,OAAgB;IAC9E,MAAM,KAAK,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAE,OAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,MAAM,aAAa,GACjB,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;QACrC,CAAC,CAAC,KAAK,CAAC,aAAa;QACrB,CAAC,CAAC,+CAA+C,CAAC;IACtD,MAAM,aAAa,GACjB,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,OAAO,GAAG,OAAO,0BAA0B,aAAa,0BAA0B,aAAa,EAAE,CAAC;AACpG,CAAC"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAEtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA0DnD,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA6FD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,WAAW,EAChB,aAAa,GAAE,wBAA6B,GAC3C,SAAS,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAEtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA0DnD,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA6FD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,WAAW,EAChB,aAAa,GAAE,wBAA6B,GAC3C,SAAS,CA6qDX"}
|