@j0hanz/todokit-mcp 1.0.1
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/README.md +61 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/errors.d.ts +19 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +44 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/match.d.ts +47 -0
- package/dist/lib/match.d.ts.map +1 -0
- package/dist/lib/match.js +8 -0
- package/dist/lib/match.js.map +1 -0
- package/dist/lib/resolve.js +83 -0
- package/dist/lib/resolve.js.map +1 -0
- package/dist/lib/storage.d.ts +16 -0
- package/dist/lib/storage.d.ts.map +1 -0
- package/dist/lib/storage.js +363 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/storage_filters.d.ts +12 -0
- package/dist/lib/storage_filters.d.ts.map +1 -0
- package/dist/lib/storage_filters.js +70 -0
- package/dist/lib/storage_filters.js.map +1 -0
- package/dist/lib/tool_response.d.ts +5 -0
- package/dist/lib/tool_response.d.ts.map +1 -0
- package/dist/lib/tool_response.js +7 -0
- package/dist/lib/tool_response.js.map +1 -0
- package/dist/lib/types.d.ts +72 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +16 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/schemas/inputs.d.ts +170 -0
- package/dist/schemas/inputs.d.ts.map +1 -0
- package/dist/schemas/inputs.js +163 -0
- package/dist/schemas/inputs.js.map +1 -0
- package/dist/schemas/iso_date.js +20 -0
- package/dist/schemas/iso_date.js.map +1 -0
- package/dist/schemas/outputs.d.ts +30 -0
- package/dist/schemas/outputs.d.ts.map +1 -0
- package/dist/schemas/outputs.js +9 -0
- package/dist/schemas/outputs.js.map +1 -0
- package/dist/tools/add_todo.d.ts +3 -0
- package/dist/tools/add_todo.d.ts.map +1 -0
- package/dist/tools/add_todo.js +34 -0
- package/dist/tools/add_todo.js.map +1 -0
- package/dist/tools/add_todos.d.ts +3 -0
- package/dist/tools/add_todos.d.ts.map +1 -0
- package/dist/tools/add_todos.js +34 -0
- package/dist/tools/add_todos.js.map +1 -0
- package/dist/tools/complete_todo.d.ts +3 -0
- package/dist/tools/complete_todo.d.ts.map +1 -0
- package/dist/tools/complete_todo.js +65 -0
- package/dist/tools/complete_todo.js.map +1 -0
- package/dist/tools/delete_todo.d.ts +3 -0
- package/dist/tools/delete_todo.d.ts.map +1 -0
- package/dist/tools/delete_todo.js +95 -0
- package/dist/tools/delete_todo.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list_todos.d.ts +3 -0
- package/dist/tools/list_todos.d.ts.map +1 -0
- package/dist/tools/list_todos.js +157 -0
- package/dist/tools/list_todos.js.map +1 -0
- package/dist/tools/update_todo.d.ts +3 -0
- package/dist/tools/update_todo.d.ts.map +1 -0
- package/dist/tools/update_todo.js +90 -0
- package/dist/tools/update_todo.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const AddTodoSchema: z.ZodObject<{
|
|
3
|
+
title: z.ZodString;
|
|
4
|
+
description: z.ZodOptional<z.ZodString>;
|
|
5
|
+
priority: z.ZodOptional<z.ZodEnum<["low", "normal", "high"]>>;
|
|
6
|
+
dueDate: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
7
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
8
|
+
}, "strict", z.ZodTypeAny, {
|
|
9
|
+
title: string;
|
|
10
|
+
description?: string | undefined;
|
|
11
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
12
|
+
dueDate?: string | undefined;
|
|
13
|
+
tags?: string[] | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
title: string;
|
|
16
|
+
description?: string | undefined;
|
|
17
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
18
|
+
dueDate?: string | undefined;
|
|
19
|
+
tags?: string[] | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
export declare const AddTodosSchema: z.ZodObject<{
|
|
22
|
+
items: z.ZodArray<z.ZodObject<{
|
|
23
|
+
title: z.ZodString;
|
|
24
|
+
description: z.ZodOptional<z.ZodString>;
|
|
25
|
+
priority: z.ZodOptional<z.ZodEnum<["low", "normal", "high"]>>;
|
|
26
|
+
dueDate: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
27
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
28
|
+
}, "strict", z.ZodTypeAny, {
|
|
29
|
+
title: string;
|
|
30
|
+
description?: string | undefined;
|
|
31
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
32
|
+
dueDate?: string | undefined;
|
|
33
|
+
tags?: string[] | undefined;
|
|
34
|
+
}, {
|
|
35
|
+
title: string;
|
|
36
|
+
description?: string | undefined;
|
|
37
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
38
|
+
dueDate?: string | undefined;
|
|
39
|
+
tags?: string[] | undefined;
|
|
40
|
+
}>, "many">;
|
|
41
|
+
}, "strict", z.ZodTypeAny, {
|
|
42
|
+
items: {
|
|
43
|
+
title: string;
|
|
44
|
+
description?: string | undefined;
|
|
45
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
46
|
+
dueDate?: string | undefined;
|
|
47
|
+
tags?: string[] | undefined;
|
|
48
|
+
}[];
|
|
49
|
+
}, {
|
|
50
|
+
items: {
|
|
51
|
+
title: string;
|
|
52
|
+
description?: string | undefined;
|
|
53
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
54
|
+
dueDate?: string | undefined;
|
|
55
|
+
tags?: string[] | undefined;
|
|
56
|
+
}[];
|
|
57
|
+
}>;
|
|
58
|
+
export declare const DeleteTodoSchema: z.ZodObject<{
|
|
59
|
+
id: z.ZodOptional<z.ZodString>;
|
|
60
|
+
query: z.ZodOptional<z.ZodString>;
|
|
61
|
+
dryRun: z.ZodOptional<z.ZodBoolean>;
|
|
62
|
+
}, "strict", z.ZodTypeAny, {
|
|
63
|
+
id?: string | undefined;
|
|
64
|
+
query?: string | undefined;
|
|
65
|
+
dryRun?: boolean | undefined;
|
|
66
|
+
}, {
|
|
67
|
+
id?: string | undefined;
|
|
68
|
+
query?: string | undefined;
|
|
69
|
+
dryRun?: boolean | undefined;
|
|
70
|
+
}>;
|
|
71
|
+
export declare const CompleteTodoSchema: z.ZodObject<{
|
|
72
|
+
id: z.ZodOptional<z.ZodString>;
|
|
73
|
+
query: z.ZodOptional<z.ZodString>;
|
|
74
|
+
completed: z.ZodOptional<z.ZodBoolean>;
|
|
75
|
+
}, "strict", z.ZodTypeAny, {
|
|
76
|
+
id?: string | undefined;
|
|
77
|
+
completed?: boolean | undefined;
|
|
78
|
+
query?: string | undefined;
|
|
79
|
+
}, {
|
|
80
|
+
id?: string | undefined;
|
|
81
|
+
completed?: boolean | undefined;
|
|
82
|
+
query?: string | undefined;
|
|
83
|
+
}>;
|
|
84
|
+
export declare const UpdateTodoSchema: z.ZodObject<{
|
|
85
|
+
id: z.ZodOptional<z.ZodString>;
|
|
86
|
+
query: z.ZodOptional<z.ZodString>;
|
|
87
|
+
title: z.ZodOptional<z.ZodString>;
|
|
88
|
+
description: z.ZodOptional<z.ZodString>;
|
|
89
|
+
completed: z.ZodOptional<z.ZodBoolean>;
|
|
90
|
+
priority: z.ZodOptional<z.ZodEnum<["low", "normal", "high"]>>;
|
|
91
|
+
dueDate: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
92
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
93
|
+
clearFields: z.ZodOptional<z.ZodArray<z.ZodEnum<["description", "dueDate", "tags"]>, "many">>;
|
|
94
|
+
tagOps: z.ZodOptional<z.ZodObject<{
|
|
95
|
+
add: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
96
|
+
remove: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
97
|
+
}, "strict", z.ZodTypeAny, {
|
|
98
|
+
add?: string[] | undefined;
|
|
99
|
+
remove?: string[] | undefined;
|
|
100
|
+
}, {
|
|
101
|
+
add?: string[] | undefined;
|
|
102
|
+
remove?: string[] | undefined;
|
|
103
|
+
}>>;
|
|
104
|
+
}, "strict", z.ZodTypeAny, {
|
|
105
|
+
description?: string | undefined;
|
|
106
|
+
title?: string | undefined;
|
|
107
|
+
id?: string | undefined;
|
|
108
|
+
completed?: boolean | undefined;
|
|
109
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
110
|
+
dueDate?: string | undefined;
|
|
111
|
+
tags?: string[] | undefined;
|
|
112
|
+
query?: string | undefined;
|
|
113
|
+
clearFields?: ("description" | "dueDate" | "tags")[] | undefined;
|
|
114
|
+
tagOps?: {
|
|
115
|
+
add?: string[] | undefined;
|
|
116
|
+
remove?: string[] | undefined;
|
|
117
|
+
} | undefined;
|
|
118
|
+
}, {
|
|
119
|
+
description?: string | undefined;
|
|
120
|
+
title?: string | undefined;
|
|
121
|
+
id?: string | undefined;
|
|
122
|
+
completed?: boolean | undefined;
|
|
123
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
124
|
+
dueDate?: string | undefined;
|
|
125
|
+
tags?: string[] | undefined;
|
|
126
|
+
query?: string | undefined;
|
|
127
|
+
clearFields?: ("description" | "dueDate" | "tags")[] | undefined;
|
|
128
|
+
tagOps?: {
|
|
129
|
+
add?: string[] | undefined;
|
|
130
|
+
remove?: string[] | undefined;
|
|
131
|
+
} | undefined;
|
|
132
|
+
}>;
|
|
133
|
+
export declare const ListTodosFilterSchema: z.ZodObject<{
|
|
134
|
+
completed: z.ZodOptional<z.ZodBoolean>;
|
|
135
|
+
status: z.ZodOptional<z.ZodEnum<["pending", "completed", "all"]>>;
|
|
136
|
+
query: z.ZodOptional<z.ZodString>;
|
|
137
|
+
priority: z.ZodOptional<z.ZodEnum<["low", "normal", "high"]>>;
|
|
138
|
+
tag: z.ZodOptional<z.ZodString>;
|
|
139
|
+
dueBefore: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
140
|
+
dueAfter: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
141
|
+
sortBy: z.ZodOptional<z.ZodEnum<["dueDate", "priority", "createdAt", "title"]>>;
|
|
142
|
+
order: z.ZodOptional<z.ZodEnum<["asc", "desc"]>>;
|
|
143
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
144
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
145
|
+
}, "strict", z.ZodTypeAny, {
|
|
146
|
+
completed?: boolean | undefined;
|
|
147
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
148
|
+
status?: "completed" | "pending" | "all" | undefined;
|
|
149
|
+
query?: string | undefined;
|
|
150
|
+
tag?: string | undefined;
|
|
151
|
+
dueBefore?: string | undefined;
|
|
152
|
+
dueAfter?: string | undefined;
|
|
153
|
+
sortBy?: "title" | "priority" | "dueDate" | "createdAt" | undefined;
|
|
154
|
+
order?: "asc" | "desc" | undefined;
|
|
155
|
+
limit?: number | undefined;
|
|
156
|
+
offset?: number | undefined;
|
|
157
|
+
}, {
|
|
158
|
+
completed?: boolean | undefined;
|
|
159
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
160
|
+
status?: "completed" | "pending" | "all" | undefined;
|
|
161
|
+
query?: string | undefined;
|
|
162
|
+
tag?: string | undefined;
|
|
163
|
+
dueBefore?: string | undefined;
|
|
164
|
+
dueAfter?: string | undefined;
|
|
165
|
+
sortBy?: "title" | "priority" | "dueDate" | "createdAt" | undefined;
|
|
166
|
+
order?: "asc" | "desc" | undefined;
|
|
167
|
+
limit?: number | undefined;
|
|
168
|
+
offset?: number | undefined;
|
|
169
|
+
}>;
|
|
170
|
+
//# sourceMappingURL=inputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/schemas/inputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiDxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;EAAkB,CAAC;AAE7C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQhB,CAAC;AAEZ,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAmBlB,CAAC;AAEZ,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAmBpB,CAAC;AASZ,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BlB,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CvB,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { IsoDateSchema } from './iso_date.js';
|
|
3
|
+
const TagSchema = z.string().min(1).max(50);
|
|
4
|
+
const SortBySchema = z.enum(['dueDate', 'priority', 'createdAt', 'title']);
|
|
5
|
+
const SortOrderSchema = z.enum(['asc', 'desc']);
|
|
6
|
+
const TodoInputSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
title: z.string().min(1).max(200).describe('The title of the todo'),
|
|
9
|
+
description: z
|
|
10
|
+
.string()
|
|
11
|
+
.max(2000)
|
|
12
|
+
.optional()
|
|
13
|
+
.describe('Optional description of the todo'),
|
|
14
|
+
priority: z
|
|
15
|
+
.enum(['low', 'normal', 'high'])
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Priority level (default: normal)'),
|
|
18
|
+
dueDate: IsoDateSchema.optional().describe('Due date in ISO format (YYYY-MM-DD)'),
|
|
19
|
+
tags: z
|
|
20
|
+
.array(TagSchema)
|
|
21
|
+
.max(50)
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('Tags for categorization'),
|
|
24
|
+
})
|
|
25
|
+
.strict();
|
|
26
|
+
export const AddTodoSchema = TodoInputSchema;
|
|
27
|
+
export const AddTodosSchema = z
|
|
28
|
+
.object({
|
|
29
|
+
items: z
|
|
30
|
+
.array(TodoInputSchema)
|
|
31
|
+
.min(1)
|
|
32
|
+
.max(50)
|
|
33
|
+
.describe('Todos to add in a single batch'),
|
|
34
|
+
})
|
|
35
|
+
.strict();
|
|
36
|
+
export const DeleteTodoSchema = z
|
|
37
|
+
.object({
|
|
38
|
+
id: z
|
|
39
|
+
.string()
|
|
40
|
+
.min(1)
|
|
41
|
+
.max(100)
|
|
42
|
+
.optional()
|
|
43
|
+
.describe('The ID of the todo to delete'),
|
|
44
|
+
query: z
|
|
45
|
+
.string()
|
|
46
|
+
.min(1)
|
|
47
|
+
.max(200)
|
|
48
|
+
.optional()
|
|
49
|
+
.describe('Search text to find a single todo to delete'),
|
|
50
|
+
dryRun: z
|
|
51
|
+
.boolean()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe('Simulate the deletion without changing data'),
|
|
54
|
+
})
|
|
55
|
+
.strict()
|
|
56
|
+
.refine((value) => Boolean(value.id ?? value.query), {
|
|
57
|
+
message: 'Provide id or query to identify the todo',
|
|
58
|
+
});
|
|
59
|
+
export const CompleteTodoSchema = z
|
|
60
|
+
.object({
|
|
61
|
+
id: z
|
|
62
|
+
.string()
|
|
63
|
+
.min(1)
|
|
64
|
+
.max(100)
|
|
65
|
+
.optional()
|
|
66
|
+
.describe('The ID of the todo to complete'),
|
|
67
|
+
query: z
|
|
68
|
+
.string()
|
|
69
|
+
.min(1)
|
|
70
|
+
.max(200)
|
|
71
|
+
.optional()
|
|
72
|
+
.describe('Search text to find a single todo to complete'),
|
|
73
|
+
completed: z
|
|
74
|
+
.boolean()
|
|
75
|
+
.optional()
|
|
76
|
+
.describe('Set completion status (default: true)'),
|
|
77
|
+
})
|
|
78
|
+
.strict()
|
|
79
|
+
.refine((value) => Boolean(value.id ?? value.query), {
|
|
80
|
+
message: 'Provide id or query to identify the todo',
|
|
81
|
+
});
|
|
82
|
+
const TagOpsSchema = z
|
|
83
|
+
.object({
|
|
84
|
+
add: z.array(TagSchema).max(50).optional().describe('Tags to add'),
|
|
85
|
+
remove: z.array(TagSchema).max(50).optional().describe('Tags to remove'),
|
|
86
|
+
})
|
|
87
|
+
.strict();
|
|
88
|
+
export const UpdateTodoSchema = z
|
|
89
|
+
.object({
|
|
90
|
+
id: z
|
|
91
|
+
.string()
|
|
92
|
+
.min(1)
|
|
93
|
+
.max(100)
|
|
94
|
+
.optional()
|
|
95
|
+
.describe('The ID of the todo to update'),
|
|
96
|
+
query: z
|
|
97
|
+
.string()
|
|
98
|
+
.min(1)
|
|
99
|
+
.max(200)
|
|
100
|
+
.optional()
|
|
101
|
+
.describe('Search text to find a single todo to update'),
|
|
102
|
+
title: z.string().min(1).max(200).optional().describe('New title'),
|
|
103
|
+
description: z.string().max(2000).optional().describe('New description'),
|
|
104
|
+
completed: z.boolean().optional().describe('Completion status'),
|
|
105
|
+
priority: z
|
|
106
|
+
.enum(['low', 'normal', 'high'])
|
|
107
|
+
.optional()
|
|
108
|
+
.describe('New priority level'),
|
|
109
|
+
dueDate: IsoDateSchema.optional().describe('New due date (ISO format)'),
|
|
110
|
+
tags: z.array(TagSchema).max(50).optional().describe('New tags'),
|
|
111
|
+
clearFields: z
|
|
112
|
+
.array(z.enum(['description', 'dueDate', 'tags']))
|
|
113
|
+
.max(3)
|
|
114
|
+
.optional()
|
|
115
|
+
.describe('Fields to clear'),
|
|
116
|
+
tagOps: TagOpsSchema.optional().describe('Tag modifications to apply'),
|
|
117
|
+
})
|
|
118
|
+
.strict()
|
|
119
|
+
.refine((value) => Boolean(value.id ?? value.query), {
|
|
120
|
+
message: 'Provide id or query to identify the todo',
|
|
121
|
+
});
|
|
122
|
+
export const ListTodosFilterSchema = z
|
|
123
|
+
.object({
|
|
124
|
+
completed: z
|
|
125
|
+
.boolean()
|
|
126
|
+
.optional()
|
|
127
|
+
.describe('Filter by completion status (deprecated; use status)'),
|
|
128
|
+
status: z
|
|
129
|
+
.enum(['pending', 'completed', 'all'])
|
|
130
|
+
.optional()
|
|
131
|
+
.describe('Filter by status'),
|
|
132
|
+
query: z
|
|
133
|
+
.string()
|
|
134
|
+
.min(1)
|
|
135
|
+
.max(200)
|
|
136
|
+
.optional()
|
|
137
|
+
.describe('Search text in title, description, or tags'),
|
|
138
|
+
priority: z
|
|
139
|
+
.enum(['low', 'normal', 'high'])
|
|
140
|
+
.optional()
|
|
141
|
+
.describe('Filter by priority level'),
|
|
142
|
+
tag: TagSchema.optional().describe('Filter by tag (must contain)'),
|
|
143
|
+
dueBefore: IsoDateSchema.optional().describe('Filter todos due before this date (ISO format)'),
|
|
144
|
+
dueAfter: IsoDateSchema.optional().describe('Filter todos due after this date (ISO format)'),
|
|
145
|
+
sortBy: SortBySchema.optional().describe('Sort results by field'),
|
|
146
|
+
order: SortOrderSchema.optional().describe('Sort order (default: asc)'),
|
|
147
|
+
limit: z
|
|
148
|
+
.number()
|
|
149
|
+
.int()
|
|
150
|
+
.min(1)
|
|
151
|
+
.max(200)
|
|
152
|
+
.optional()
|
|
153
|
+
.describe('Max number of results to return (default: 50)'),
|
|
154
|
+
offset: z
|
|
155
|
+
.number()
|
|
156
|
+
.int()
|
|
157
|
+
.min(0)
|
|
158
|
+
.max(10000)
|
|
159
|
+
.optional()
|
|
160
|
+
.describe('Number of results to skip'),
|
|
161
|
+
})
|
|
162
|
+
.strict();
|
|
163
|
+
//# sourceMappingURL=inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/schemas/inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/;
|
|
3
|
+
function isValidIsoDate(value) {
|
|
4
|
+
if (!ISO_DATE_REGEX.test(value))
|
|
5
|
+
return false;
|
|
6
|
+
const [yearPart, monthPart, dayPart] = value.split('-');
|
|
7
|
+
const year = Number(yearPart);
|
|
8
|
+
const month = Number(monthPart);
|
|
9
|
+
const day = Number(dayPart);
|
|
10
|
+
const date = new Date(Date.UTC(year, month - 1, day));
|
|
11
|
+
return (date.getUTCFullYear() === year &&
|
|
12
|
+
date.getUTCMonth() === month - 1 &&
|
|
13
|
+
date.getUTCDate() === day);
|
|
14
|
+
}
|
|
15
|
+
export const IsoDateSchema = z
|
|
16
|
+
.string()
|
|
17
|
+
.refine((value) => isValidIsoDate(value), {
|
|
18
|
+
message: 'Invalid date (YYYY-MM-DD)',
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=iso_date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iso_date.js","sourceRoot":"","sources":["../../src/schemas/iso_date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAE7C,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtD,OAAO,CACL,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI;QAC9B,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,GAAG,CAAC;QAChC,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,CAC1B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;IACxC,OAAO,EAAE,2BAA2B;CACrC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const DefaultOutputSchema: z.ZodObject<{
|
|
3
|
+
ok: z.ZodBoolean;
|
|
4
|
+
result: z.ZodOptional<z.ZodUnknown>;
|
|
5
|
+
error: z.ZodOptional<z.ZodObject<{
|
|
6
|
+
code: z.ZodString;
|
|
7
|
+
message: z.ZodString;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
message: string;
|
|
10
|
+
code: string;
|
|
11
|
+
}, {
|
|
12
|
+
message: string;
|
|
13
|
+
code: string;
|
|
14
|
+
}>>;
|
|
15
|
+
}, "strict", z.ZodTypeAny, {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
result?: unknown;
|
|
18
|
+
error?: {
|
|
19
|
+
message: string;
|
|
20
|
+
code: string;
|
|
21
|
+
} | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
ok: boolean;
|
|
24
|
+
result?: unknown;
|
|
25
|
+
error?: {
|
|
26
|
+
message: string;
|
|
27
|
+
code: string;
|
|
28
|
+
} | undefined;
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=outputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputs.d.ts","sourceRoot":"","sources":["../../src/schemas/outputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputs.js","sourceRoot":"","sources":["../../src/schemas/outputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;IACf,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtE,CAAC;KACD,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add_todo.d.ts","sourceRoot":"","sources":["../../src/tools/add_todo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8BvD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { createErrorResponse, getErrorMessage } from '../lib/errors.js';
|
|
2
|
+
import { addTodo } from '../lib/storage.js';
|
|
3
|
+
import { createToolResponse } from '../lib/tool_response.js';
|
|
4
|
+
import { AddTodoSchema } from '../schemas/inputs.js';
|
|
5
|
+
import { DefaultOutputSchema } from '../schemas/outputs.js';
|
|
6
|
+
export function registerAddTodo(server) {
|
|
7
|
+
server.registerTool('add_todo', {
|
|
8
|
+
title: 'Add Todo',
|
|
9
|
+
description: 'Add a new todo item',
|
|
10
|
+
inputSchema: AddTodoSchema,
|
|
11
|
+
outputSchema: DefaultOutputSchema,
|
|
12
|
+
annotations: {
|
|
13
|
+
readOnlyHint: false,
|
|
14
|
+
idempotentHint: false,
|
|
15
|
+
},
|
|
16
|
+
}, async ({ title, description, priority, dueDate, tags }) => {
|
|
17
|
+
try {
|
|
18
|
+
const todo = await addTodo(title, description, priority, dueDate, tags);
|
|
19
|
+
const structured = {
|
|
20
|
+
ok: true,
|
|
21
|
+
result: {
|
|
22
|
+
item: todo,
|
|
23
|
+
summary: `Added todo "${todo.title}"`,
|
|
24
|
+
nextActions: ['list_todos', 'update_todo', 'complete_todo'],
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
return createToolResponse(structured);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
return createErrorResponse('E_ADD_TODO', getErrorMessage(err));
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=add_todo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add_todo.js","sourceRoot":"","sources":["../../src/tools/add_todo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,aAAa;QAC1B,YAAY,EAAE,mBAAmB;QACjC,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;SACtB;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACxD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACxE,MAAM,UAAU,GAAG;gBACjB,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE;oBACN,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,eAAe,IAAI,CAAC,KAAK,GAAG;oBACrC,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC;iBAC5D;aACF,CAAC;YACF,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,mBAAmB,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add_todos.d.ts","sourceRoot":"","sources":["../../src/tools/add_todos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8BxD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { createErrorResponse, getErrorMessage } from '../lib/errors.js';
|
|
2
|
+
import { addTodos } from '../lib/storage.js';
|
|
3
|
+
import { createToolResponse } from '../lib/tool_response.js';
|
|
4
|
+
import { AddTodosSchema } from '../schemas/inputs.js';
|
|
5
|
+
import { DefaultOutputSchema } from '../schemas/outputs.js';
|
|
6
|
+
export function registerAddTodos(server) {
|
|
7
|
+
server.registerTool('add_todos', {
|
|
8
|
+
title: 'Add Todos (Batch)',
|
|
9
|
+
description: 'Add multiple todo items in one call',
|
|
10
|
+
inputSchema: AddTodosSchema,
|
|
11
|
+
outputSchema: DefaultOutputSchema,
|
|
12
|
+
annotations: {
|
|
13
|
+
readOnlyHint: false,
|
|
14
|
+
idempotentHint: false,
|
|
15
|
+
},
|
|
16
|
+
}, async ({ items }) => {
|
|
17
|
+
try {
|
|
18
|
+
const todos = await addTodos(items);
|
|
19
|
+
const structured = {
|
|
20
|
+
ok: true,
|
|
21
|
+
result: {
|
|
22
|
+
items: todos,
|
|
23
|
+
summary: `Added ${String(todos.length)} todos`,
|
|
24
|
+
nextActions: ['list_todos', 'update_todo'],
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
return createToolResponse(structured);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
return createErrorResponse('E_ADD_TODOS', getErrorMessage(err));
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=add_todos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add_todos.js","sourceRoot":"","sources":["../../src/tools/add_todos.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE,cAAc;QAC3B,YAAY,EAAE,mBAAmB;QACjC,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;SACtB;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,UAAU,GAAG;gBACjB,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE;oBACN,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,SAAS,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;oBAC9C,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;iBAC3C;aACF,CAAC;YACF,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,mBAAmB,CAAC,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complete_todo.d.ts","sourceRoot":"","sources":["../../src/tools/complete_todo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwFzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqB5D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createErrorResponse, getErrorMessage } from '../lib/errors.js';
|
|
2
|
+
import { toResolveInput } from '../lib/resolve.js';
|
|
3
|
+
import { completeTodoBySelector } from '../lib/storage.js';
|
|
4
|
+
import { createToolResponse } from '../lib/tool_response.js';
|
|
5
|
+
import { CompleteTodoSchema } from '../schemas/inputs.js';
|
|
6
|
+
import { DefaultOutputSchema } from '../schemas/outputs.js';
|
|
7
|
+
function resolveTargetCompleted(input) {
|
|
8
|
+
return input.completed ?? true;
|
|
9
|
+
}
|
|
10
|
+
function buildAlreadyStatusResponse(todo, completed) {
|
|
11
|
+
return createToolResponse({
|
|
12
|
+
ok: true,
|
|
13
|
+
result: {
|
|
14
|
+
item: todo,
|
|
15
|
+
summary: completed
|
|
16
|
+
? `Todo "${todo.title}" is already completed`
|
|
17
|
+
: `Todo "${todo.title}" is already pending`,
|
|
18
|
+
nextActions: ['list_todos'],
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function buildCompletionResponse(todo, completed) {
|
|
23
|
+
return createToolResponse({
|
|
24
|
+
ok: true,
|
|
25
|
+
result: {
|
|
26
|
+
item: todo,
|
|
27
|
+
summary: completed
|
|
28
|
+
? `Completed todo "${todo.title}"`
|
|
29
|
+
: `Reopened todo "${todo.title}"`,
|
|
30
|
+
nextActions: ['list_todos'],
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async function handleCompleteTodo(input) {
|
|
35
|
+
const targetCompleted = resolveTargetCompleted(input);
|
|
36
|
+
const outcome = await completeTodoBySelector(toResolveInput({ id: input.id, query: input.query }), targetCompleted);
|
|
37
|
+
if (outcome.kind === 'error')
|
|
38
|
+
return outcome.response;
|
|
39
|
+
if (outcome.kind === 'ambiguous')
|
|
40
|
+
return outcome.response;
|
|
41
|
+
if (outcome.kind === 'already') {
|
|
42
|
+
return buildAlreadyStatusResponse(outcome.todo, targetCompleted);
|
|
43
|
+
}
|
|
44
|
+
return buildCompletionResponse(outcome.todo, targetCompleted);
|
|
45
|
+
}
|
|
46
|
+
export function registerCompleteTodo(server) {
|
|
47
|
+
server.registerTool('complete_todo', {
|
|
48
|
+
title: 'Complete Todo',
|
|
49
|
+
description: 'Set completion status for a todo item',
|
|
50
|
+
inputSchema: CompleteTodoSchema,
|
|
51
|
+
outputSchema: DefaultOutputSchema,
|
|
52
|
+
annotations: {
|
|
53
|
+
readOnlyHint: false,
|
|
54
|
+
idempotentHint: true,
|
|
55
|
+
},
|
|
56
|
+
}, async (input) => {
|
|
57
|
+
try {
|
|
58
|
+
return await handleCompleteTodo(input);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
return createErrorResponse('E_COMPLETE_TODO', getErrorMessage(err));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=complete_todo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complete_todo.js","sourceRoot":"","sources":["../../src/tools/complete_todo.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAI5D,SAAS,sBAAsB,CAAC,KAAwB;IACtD,OAAO,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAU,EACV,SAAkB;IAElB,OAAO,kBAAkB,CAAC;QACxB,EAAE,EAAE,IAAI;QACR,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,SAAS;gBAChB,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,wBAAwB;gBAC7C,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,sBAAsB;YAC7C,WAAW,EAAE,CAAC,YAAY,CAAC;SAC5B;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAU,EACV,SAAkB;IAElB,OAAO,kBAAkB,CAAC;QACxB,EAAE,EAAE,IAAI;QACR,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,SAAS;gBAChB,CAAC,CAAC,mBAAmB,IAAI,CAAC,KAAK,GAAG;gBAClC,CAAC,CAAC,kBAAkB,IAAI,CAAC,KAAK,GAAG;YACnC,WAAW,EAAE,CAAC,YAAY,CAAC;SAC5B;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAwB;IAExB,MAAM,eAAe,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAC1C,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EACpD,eAAe,CAChB,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;IACtD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1D,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,0BAA0B,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE,kBAAkB;QAC/B,YAAY,EAAE,mBAAmB;QACjC,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC;YACH,OAAO,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,mBAAmB,CAAC,iBAAiB,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete_todo.d.ts","sourceRoot":"","sources":["../../src/tools/delete_todo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkGzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB1D"}
|