@j0hanz/todokit-mcp 1.0.5 → 1.0.7
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 +48 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/db.d.ts +8 -0
- package/dist/lib/db.d.ts.map +1 -0
- package/dist/lib/db.js +177 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/errors.js +17 -12
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/resolve.js +1 -1
- package/dist/lib/resolve.js.map +1 -1
- package/dist/lib/storage.d.ts +7 -6
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +148 -71
- package/dist/lib/storage.js.map +1 -1
- package/dist/lib/storage_filters.d.ts +6 -6
- package/dist/lib/storage_filters.d.ts.map +1 -1
- package/dist/lib/storage_filters.js +26 -45
- package/dist/lib/storage_filters.js.map +1 -1
- package/dist/lib/storage_mutations.d.ts +8 -3
- package/dist/lib/storage_mutations.d.ts.map +1 -1
- package/dist/lib/storage_mutations.js +0 -58
- package/dist/lib/storage_mutations.js.map +1 -1
- package/dist/lib/storage_state.d.ts.map +1 -1
- package/dist/lib/storage_state.js +36 -2
- package/dist/lib/storage_state.js.map +1 -1
- package/dist/schemas/inputs.d.ts +74 -40
- package/dist/schemas/inputs.d.ts.map +1 -1
- package/dist/schemas/inputs.js +54 -66
- package/dist/schemas/inputs.js.map +1 -1
- package/dist/tools/complete_todo.d.ts.map +1 -1
- package/dist/tools/complete_todo.js +2 -1
- package/dist/tools/complete_todo.js.map +1 -1
- package/dist/tools/delete_todo.d.ts.map +1 -1
- package/dist/tools/delete_todo.js +4 -2
- package/dist/tools/delete_todo.js.map +1 -1
- package/dist/tools/delete_todos.d.ts +3 -0
- package/dist/tools/delete_todos.d.ts.map +1 -0
- package/dist/tools/delete_todos.js +134 -0
- package/dist/tools/delete_todos.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list_todos.d.ts.map +1 -1
- package/dist/tools/list_todos.js +68 -45
- package/dist/tools/list_todos.js.map +1 -1
- package/dist/tools/update_todo.d.ts.map +1 -1
- package/dist/tools/update_todo.js +55 -50
- package/dist/tools/update_todo.js.map +1 -1
- package/package.json +1 -1
package/dist/tools/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import { registerAddTodo } from './add_todo.js';
|
|
|
2
2
|
import { registerAddTodos } from './add_todos.js';
|
|
3
3
|
import { registerCompleteTodo } from './complete_todo.js';
|
|
4
4
|
import { registerDeleteTodo } from './delete_todo.js';
|
|
5
|
+
import { registerDeleteTodos } from './delete_todos.js';
|
|
5
6
|
import { registerListTodos } from './list_todos.js';
|
|
6
7
|
import { registerUpdateTodo } from './update_todo.js';
|
|
7
8
|
export function registerAllTools(server) {
|
|
@@ -11,5 +12,6 @@ export function registerAllTools(server) {
|
|
|
11
12
|
registerUpdateTodo(server);
|
|
12
13
|
registerCompleteTodo(server);
|
|
13
14
|
registerDeleteTodo(server);
|
|
15
|
+
registerDeleteTodos(server);
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_todos.d.ts","sourceRoot":"","sources":["../../src/tools/list_todos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"list_todos.d.ts","sourceRoot":"","sources":["../../src/tools/list_todos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmOzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqBzD"}
|
package/dist/tools/list_todos.js
CHANGED
|
@@ -11,8 +11,15 @@ const PRIORITY_WEIGHT = {
|
|
|
11
11
|
high: 3,
|
|
12
12
|
};
|
|
13
13
|
const MISSING_DUE_DATE = '9999-12-31';
|
|
14
|
+
function pad2(value) {
|
|
15
|
+
return String(value).padStart(2, '0');
|
|
16
|
+
}
|
|
14
17
|
function getTodayIso() {
|
|
15
|
-
|
|
18
|
+
const now = new Date();
|
|
19
|
+
const year = String(now.getFullYear());
|
|
20
|
+
const month = pad2(now.getMonth() + 1);
|
|
21
|
+
const day = pad2(now.getDate());
|
|
22
|
+
return `${year}-${month}-${day}`;
|
|
16
23
|
}
|
|
17
24
|
function isOverdue(todo, todayIso) {
|
|
18
25
|
if (!todo.dueDate)
|
|
@@ -21,37 +28,20 @@ function isOverdue(todo, todayIso) {
|
|
|
21
28
|
return false;
|
|
22
29
|
return todo.dueDate < todayIso;
|
|
23
30
|
}
|
|
24
|
-
function compareStrings(a, b) {
|
|
25
|
-
return a.localeCompare(b);
|
|
26
|
-
}
|
|
27
|
-
function compareDueDate(a, b) {
|
|
28
|
-
const dateA = a.dueDate ?? MISSING_DUE_DATE;
|
|
29
|
-
const dateB = b.dueDate ?? MISSING_DUE_DATE;
|
|
30
|
-
return compareStrings(dateA, dateB);
|
|
31
|
-
}
|
|
32
|
-
function comparePriority(a, b) {
|
|
33
|
-
return PRIORITY_WEIGHT[a.priority] - PRIORITY_WEIGHT[b.priority];
|
|
34
|
-
}
|
|
35
|
-
function compareTitle(a, b) {
|
|
36
|
-
return compareStrings(a.title, b.title);
|
|
37
|
-
}
|
|
38
|
-
function compareCreatedAt(a, b) {
|
|
39
|
-
return compareStrings(a.createdAt, b.createdAt);
|
|
40
|
-
}
|
|
41
31
|
const COMPARATORS = {
|
|
42
|
-
dueDate:
|
|
43
|
-
priority:
|
|
44
|
-
title:
|
|
45
|
-
createdAt:
|
|
32
|
+
dueDate: (a, b) => (a.dueDate ?? MISSING_DUE_DATE).localeCompare(b.dueDate ?? MISSING_DUE_DATE),
|
|
33
|
+
priority: (a, b) => PRIORITY_WEIGHT[a.priority] - PRIORITY_WEIGHT[b.priority],
|
|
34
|
+
title: (a, b) => a.title.localeCompare(b.title),
|
|
35
|
+
createdAt: (a, b) => a.createdAt.localeCompare(b.createdAt),
|
|
46
36
|
};
|
|
47
37
|
function sortTodos(todos, sortBy, order) {
|
|
48
38
|
const direction = order === 'desc' ? -1 : 1;
|
|
49
39
|
const comparator = COMPARATORS[sortBy];
|
|
50
40
|
return [...todos].sort((a, b) => {
|
|
51
|
-
const
|
|
52
|
-
if (
|
|
53
|
-
return
|
|
54
|
-
return
|
|
41
|
+
const diff = comparator(a, b);
|
|
42
|
+
if (diff !== 0)
|
|
43
|
+
return diff * direction;
|
|
44
|
+
return a.createdAt.localeCompare(b.createdAt);
|
|
55
45
|
});
|
|
56
46
|
}
|
|
57
47
|
function resolveCompletedFilter(status, completed) {
|
|
@@ -75,20 +65,41 @@ function normalizeFilters(filters) {
|
|
|
75
65
|
offset: filters.offset ?? DEFAULT_OFFSET,
|
|
76
66
|
};
|
|
77
67
|
}
|
|
78
|
-
function countMatches(todos, predicate) {
|
|
79
|
-
return todos.reduce((total, todo) => total + (predicate(todo) ? 1 : 0), 0);
|
|
80
|
-
}
|
|
81
68
|
function computeCounts(todos, todayIso) {
|
|
69
|
+
let completed = 0;
|
|
70
|
+
let overdue = 0;
|
|
71
|
+
let previousCreatedAt = null;
|
|
72
|
+
const orderState = { isCreatedAtAsc: true, isCreatedAtDesc: true };
|
|
73
|
+
for (const todo of todos) {
|
|
74
|
+
if (todo.completed) {
|
|
75
|
+
completed += 1;
|
|
76
|
+
}
|
|
77
|
+
if (isOverdue(todo, todayIso)) {
|
|
78
|
+
overdue += 1;
|
|
79
|
+
}
|
|
80
|
+
previousCreatedAt = updateCreatedAtOrder(previousCreatedAt, todo.createdAt, orderState);
|
|
81
|
+
}
|
|
82
82
|
const total = todos.length;
|
|
83
|
-
const completed = countMatches(todos, (todo) => todo.completed);
|
|
84
|
-
const overdue = countMatches(todos, (todo) => isOverdue(todo, todayIso));
|
|
85
83
|
return {
|
|
86
84
|
total,
|
|
87
85
|
completed,
|
|
88
86
|
pending: total - completed,
|
|
89
87
|
overdue,
|
|
88
|
+
...orderState,
|
|
90
89
|
};
|
|
91
90
|
}
|
|
91
|
+
function updateCreatedAtOrder(previous, current, orderState) {
|
|
92
|
+
if (previous === null) {
|
|
93
|
+
return current;
|
|
94
|
+
}
|
|
95
|
+
if (current < previous) {
|
|
96
|
+
orderState.isCreatedAtAsc = false;
|
|
97
|
+
}
|
|
98
|
+
if (current > previous) {
|
|
99
|
+
orderState.isCreatedAtDesc = false;
|
|
100
|
+
}
|
|
101
|
+
return current;
|
|
102
|
+
}
|
|
92
103
|
function buildSummary(counts, pageCount) {
|
|
93
104
|
if (counts.total === 0) {
|
|
94
105
|
return 'No todos found';
|
|
@@ -99,21 +110,14 @@ function buildSummary(counts, pageCount) {
|
|
|
99
110
|
function paginateTodos(todos, offset, limit) {
|
|
100
111
|
return todos.slice(offset, offset + limit);
|
|
101
112
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
dueBefore: normalized.dueBefore,
|
|
109
|
-
dueAfter: normalized.dueAfter,
|
|
110
|
-
query: normalized.query,
|
|
111
|
-
});
|
|
112
|
-
const todayIso = getTodayIso();
|
|
113
|
-
const counts = computeCounts(allTodos, todayIso);
|
|
114
|
-
const sorted = sortTodos(allTodos, normalized.sortBy, normalized.order);
|
|
115
|
-
const paged = paginateTodos(sorted, normalized.offset, normalized.limit);
|
|
113
|
+
function canReuseOrder(sortBy, order, counts) {
|
|
114
|
+
if (sortBy !== 'createdAt')
|
|
115
|
+
return false;
|
|
116
|
+
return order === 'asc' ? counts.isCreatedAtAsc : counts.isCreatedAtDesc;
|
|
117
|
+
}
|
|
118
|
+
function buildListResponse(paged, counts, normalized) {
|
|
116
119
|
const summary = buildSummary(counts, paged.length);
|
|
120
|
+
const hasMore = normalized.offset + paged.length < counts.total;
|
|
117
121
|
return createToolResponse({
|
|
118
122
|
ok: true,
|
|
119
123
|
result: {
|
|
@@ -127,9 +131,28 @@ async function handleListTodos(filters) {
|
|
|
127
131
|
},
|
|
128
132
|
limit: normalized.limit,
|
|
129
133
|
offset: normalized.offset,
|
|
134
|
+
hasMore,
|
|
130
135
|
},
|
|
131
136
|
});
|
|
132
137
|
}
|
|
138
|
+
async function handleListTodos(filters) {
|
|
139
|
+
const normalized = normalizeFilters(filters);
|
|
140
|
+
const allTodos = await getTodos({
|
|
141
|
+
completed: normalized.completed,
|
|
142
|
+
priority: normalized.priority,
|
|
143
|
+
tag: normalized.tag,
|
|
144
|
+
dueBefore: normalized.dueBefore,
|
|
145
|
+
dueAfter: normalized.dueAfter,
|
|
146
|
+
query: normalized.query,
|
|
147
|
+
});
|
|
148
|
+
const todayIso = getTodayIso();
|
|
149
|
+
const counts = computeCounts(allTodos, todayIso);
|
|
150
|
+
const sorted = canReuseOrder(normalized.sortBy, normalized.order, counts)
|
|
151
|
+
? allTodos
|
|
152
|
+
: sortTodos(allTodos, normalized.sortBy, normalized.order);
|
|
153
|
+
const paged = paginateTodos(sorted, normalized.offset, normalized.limit);
|
|
154
|
+
return buildListResponse(paged, counts, normalized);
|
|
155
|
+
}
|
|
133
156
|
export function registerListTodos(server) {
|
|
134
157
|
server.registerTool('list_todos', {
|
|
135
158
|
title: 'List Todos',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_todos.js","sourceRoot":"","sources":["../../src/tools/list_todos.ts"],"names":[],"mappings":"AAKA,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;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"list_todos.js","sourceRoot":"","sources":["../../src/tools/list_todos.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update_todo.d.ts","sourceRoot":"","sources":["../../src/tools/update_todo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"update_todo.d.ts","sourceRoot":"","sources":["../../src/tools/update_todo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuIzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqB1D"}
|
|
@@ -4,67 +4,72 @@ import { normalizeTags, updateTodoBySelector } from '../lib/storage.js';
|
|
|
4
4
|
import { createToolResponse } from '../lib/tool_response.js';
|
|
5
5
|
import { UpdateTodoSchema } from '../schemas/inputs.js';
|
|
6
6
|
import { DefaultOutputSchema } from '../schemas/outputs.js';
|
|
7
|
-
function
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
updates.dueDate = undefined;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function countTags(tags) {
|
|
16
|
-
return tags?.length ?? 0;
|
|
7
|
+
function normalizeTagOps(tagOps) {
|
|
8
|
+
return {
|
|
9
|
+
add: normalizeTags(tagOps?.add ?? []),
|
|
10
|
+
remove: new Set(normalizeTags(tagOps?.remove ?? [])),
|
|
11
|
+
};
|
|
17
12
|
}
|
|
18
|
-
function
|
|
19
|
-
|
|
13
|
+
function getTagOps(tagOps) {
|
|
14
|
+
if (!tagOps)
|
|
15
|
+
return null;
|
|
16
|
+
const { add, remove } = normalizeTagOps(tagOps);
|
|
17
|
+
if (add.length === 0 && remove.size === 0)
|
|
18
|
+
return null;
|
|
19
|
+
return { add, remove };
|
|
20
20
|
}
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return
|
|
21
|
+
function mergeTags(current, ops) {
|
|
22
|
+
const toAdd = ops?.add ?? [];
|
|
23
|
+
const toRemove = ops?.remove ?? new Set();
|
|
24
|
+
return normalizeTags([...current, ...toAdd]).filter((t) => !toRemove.has(t));
|
|
25
25
|
}
|
|
26
|
-
function
|
|
27
|
-
|
|
26
|
+
function resolveTags(baseTags, clears, tagOps, newTags) {
|
|
27
|
+
if (newTags !== undefined)
|
|
28
|
+
return newTags;
|
|
29
|
+
const shouldClear = clears.has('tags');
|
|
30
|
+
const ops = getTagOps(tagOps);
|
|
31
|
+
if (!shouldClear && !ops)
|
|
32
|
+
return undefined;
|
|
33
|
+
return mergeTags(shouldClear ? [] : baseTags, ops);
|
|
28
34
|
}
|
|
29
|
-
function
|
|
30
|
-
|
|
35
|
+
function assignContentFields(updates, fields) {
|
|
36
|
+
if (fields.title !== undefined)
|
|
37
|
+
updates.title = fields.title;
|
|
38
|
+
if (fields.description !== undefined)
|
|
39
|
+
updates.description = fields.description;
|
|
31
40
|
}
|
|
32
|
-
function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
function assignStatusFields(updates, fields) {
|
|
42
|
+
if (fields.completed !== undefined)
|
|
43
|
+
updates.completed = fields.completed;
|
|
44
|
+
if (fields.priority !== undefined)
|
|
45
|
+
updates.priority = fields.priority;
|
|
46
|
+
if (fields.dueDate !== undefined)
|
|
47
|
+
updates.dueDate = fields.dueDate;
|
|
37
48
|
}
|
|
38
|
-
function
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
updates.tags = buildMergedTags(baseTodo, fieldsToClear, tagOps);
|
|
49
|
+
function assignFields(updates, fields) {
|
|
50
|
+
assignContentFields(updates, fields);
|
|
51
|
+
assignStatusFields(updates, fields);
|
|
42
52
|
}
|
|
43
|
-
function
|
|
44
|
-
if (
|
|
45
|
-
updates
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
function buildBaseUpdates(input) {
|
|
49
|
-
const updates = {};
|
|
50
|
-
assignIfDefined(updates, 'title', input.title);
|
|
51
|
-
assignIfDefined(updates, 'description', input.description);
|
|
52
|
-
assignIfDefined(updates, 'completed', input.completed);
|
|
53
|
-
assignIfDefined(updates, 'priority', input.priority);
|
|
54
|
-
assignIfDefined(updates, 'dueDate', input.dueDate);
|
|
55
|
-
assignIfDefined(updates, 'tags', input.tags);
|
|
56
|
-
return updates;
|
|
53
|
+
function applyClears(updates, clears) {
|
|
54
|
+
if (clears.has('description'))
|
|
55
|
+
updates.description = undefined;
|
|
56
|
+
if (clears.has('dueDate'))
|
|
57
|
+
updates.dueDate = undefined;
|
|
57
58
|
}
|
|
58
59
|
function buildUpdatePayload(baseTodo, input) {
|
|
59
|
-
const { clearFields, tagOps } = input;
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
const { clearFields = [], tagOps, ...fields } = input;
|
|
61
|
+
const clears = new Set(clearFields);
|
|
62
|
+
const updates = {};
|
|
63
|
+
assignFields(updates, fields);
|
|
64
|
+
applyClears(updates, clears);
|
|
65
|
+
const resolvedTags = resolveTags(baseTodo.tags, clears, tagOps, fields.tags);
|
|
66
|
+
if (resolvedTags !== undefined)
|
|
67
|
+
updates.tags = resolvedTags;
|
|
68
|
+
return Object.keys(updates).length > 0 ? updates : null;
|
|
65
69
|
}
|
|
66
70
|
async function handleUpdateTodo(input) {
|
|
67
|
-
const
|
|
71
|
+
const selector = input.id !== undefined ? { id: input.id } : { query: input.query };
|
|
72
|
+
const outcome = await updateTodoBySelector(toResolveInput(selector), (todo) => buildUpdatePayload(todo, input));
|
|
68
73
|
if (outcome.kind === 'error' || outcome.kind === 'ambiguous') {
|
|
69
74
|
return outcome.response;
|
|
70
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update_todo.js","sourceRoot":"","sources":["../../src/tools/update_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,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"update_todo.js","sourceRoot":"","sources":["../../src/tools/update_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,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D,SAAS,eAAe,CAAC,MAAiC;IAIxD,OAAO;QACL,GAAG,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,EAAE,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAkC;IAInD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAChB,OAAiB,EACjB,GAAkD;IAElD,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;IAC1C,OAAO,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,WAAW,CAClB,QAAkB,EAClB,MAAuB,EACvB,MAAkC,EAClC,OAAkB;IAElB,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAE1C,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAE9B,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAqB,EACrB,MAAuD;IAEvD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7D,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;QAClC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAqB,EACrB,MAAuD;IAEvD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACzE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtE,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACrE,CAAC;AAED,SAAS,YAAY,CACnB,OAAqB,EACrB,MAAuD;IAEvD,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,WAAW,CAAC,OAAqB,EAAE,MAAuB;IACjE,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;QAAE,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/D,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;AACzD,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAc,EACd,KAAsB;IAEtB,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE7B,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7E,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;IAE5D,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,KAAsB;IAEtB,MAAM,QAAQ,GACZ,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAC5E,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAChC,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC7D,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAClC,OAAO,mBAAmB,CAAC,eAAe,EAAE,8BAA8B,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,kBAAkB,CAAC;QACxB,EAAE,EAAE,IAAI;QACR,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,iBAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG;YAC/C,WAAW,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;SAC7C;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE,gBAAgB;QAC7B,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,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED