@doist/todoist-mcp 13.9.0 → 13.10.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/dist/index.d.ts +88 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -24
- package/dist/main-http.js +2 -2
- package/dist/main.js +1 -1
- package/dist/mcp-apps/index.html +1 -1
- package/dist/{mcp-server-WydXh5Y4.js → mcp-server-Dk7rBod1.js} +3096 -2909
- package/dist/mcp-server.d.ts +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/{require-valid-todoist-token-CwcK3Dvu.js → require-valid-todoist-token-C43pfSGR.js} +17 -17
- package/dist/tool-registry.d.ts +85 -0
- package/dist/tool-registry.d.ts.map +1 -1
- package/dist/tools/add-tasks.d.ts.map +1 -1
- package/dist/tools/get-user-status.d.ts +35 -0
- package/dist/tools/get-user-status.d.ts.map +1 -0
- package/dist/tools/reschedule-tasks.d.ts +2 -0
- package/dist/tools/reschedule-tasks.d.ts.map +1 -1
- package/dist/tools/set-user-status.d.ts +51 -0
- package/dist/tools/set-user-status.d.ts.map +1 -0
- package/dist/tools/update-tasks.d.ts +2 -0
- package/dist/tools/update-tasks.d.ts.map +1 -1
- package/dist/utils/duration-parser.d.ts +5 -0
- package/dist/utils/duration-parser.d.ts.map +1 -1
- package/dist/utils/tool-names.d.ts +2 -0
- package/dist/utils/tool-names.d.ts.map +1 -1
- package/dist/utils/user-status.d.ts +32 -0
- package/dist/utils/user-status.d.ts.map +1 -0
- package/package.json +1 -1
- package/scripts/eval-instructions.ts +14 -0
package/dist/mcp-server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import { FEATURE_NAMES, Feature, FeatureName, Features } from './mcp-helpers.js';
|
|
3
|
-
export declare const instructions = "\n## Todoist Task and Project Management Tools\n\nYou have access to comprehensive Todoist management tools for personal productivity and team collaboration. Use these tools to help users manage tasks, projects, sections, comments, and assignments effectively.\n\n### Core Capabilities:\n- Create, update, complete, and search tasks with rich metadata (priorities, due dates, durations, assignments)\n- Manage projects and sections with flexible organization\n- Handle comments and collaboration features\n- Bulk assignment operations for team workflows\n- Get overviews and insights about workload and progress\n\n### Choosing between tools\n\nWhat each tool does and how to fill its parameters is in the tool's own description and input schema. This section covers only what those cannot: which tool to reach for, and how tools relate to each other.\n\n**Dates**\n\n- To move a task to a different date use **reschedule-tasks**, never **update-tasks**. update-tasks replaces the whole due string,
|
|
3
|
+
export declare const instructions = "\n## Todoist Task and Project Management Tools\n\nYou have access to comprehensive Todoist management tools for personal productivity and team collaboration. Use these tools to help users manage tasks, projects, sections, comments, and assignments effectively.\n\n### Core Capabilities:\n- Create, update, complete, and search tasks with rich metadata (priorities, due dates, durations, assignments)\n- Manage projects and sections with flexible organization\n- Handle comments and collaboration features\n- Bulk assignment operations for team workflows\n- Get overviews and insights about workload and progress\n\n### Choosing between tools\n\nWhat each tool does and how to fill its parameters is in the tool's own description and input schema. This section covers only what those cannot: which tool to reach for, and how tools relate to each other.\n\n**Dates**\n\n- To move a task to a different date or time use **reschedule-tasks**, never **update-tasks**. It also sets duration, for time-blocking. update-tasks replaces the whole due string, so it refuses a dueString on a recurring task unless replaceRecurrence is true.\n- Never send a task's existing projectId, sectionId or parentId back to **update-tasks** \u2014 those fields are treated as a move.\n- All dates respect the user's timezone.\n- Todoist apps only display task durations under 24 hours. A longer one (\"36h\") or a day-based one (\"3d\") is stored and reported faithfully, but the apps show the task as having no duration \u2014 only set one when the user explicitly asks for it.\n\n**Finding things**\n\n- For \"what did I complete?\", call **user-info** for the asker's user ID, then **find-activity** with objectType=\"task\", eventType=\"completed\", initiatorId, and dateFrom/dateTo. Without initiatorId the answer covers every collaborator. find-activity reports completion events, including each occurrence of a recurring task; **find-completed-tasks** lists completed tasks, which is not the same question.\n- To resolve a person's name or email to a user ID, or to answer \"who is X?\", use **find-project-collaborators** with just a searchTerm. It covers every shared project you can access plus yourself, so an empty result means they collaborate on none of them \u2014 not that they do not exist.\n- Before assigning work to someone, call **find-project-collaborators** again with the target projectId. Resolving an ID only proves they collaborate on *some* project you can see; assignment fails unless they collaborate on that one.\n- To find out whether a task hides subtasks, use **fetch-object** with includeChildren rather than a speculative **find-tasks** call.\n- Filter tasks by label **name**. Label IDs are only for **delete-object** and **update-labels**. Shared labels can be renamed but not recoloured, reordered or favourited.\n\n**Comments**\n\n- Comments notify only the people **add-comments** is handed. When a comment mentions someone, name them in `notifyUsers` \u2014 writing \"@Ana\" in the text notifies nobody. Omit `notifyUsers` to notify whoever the Todoist apps would, or pass `[\"none\"]` to stay silent.\n- Notification cannot be sent when editing a comment, only when adding one.\n\n**Deleting and archiving**\n\n- **delete-object** removes every object type; there is no per-type delete tool. Reminders use type \"reminder\", location reminders \"location_reminder\".\n- A workspace project must be archived with **project-management** before it can be deleted. A personal project can be deleted directly.\n\n**Templates**\n\n- Templates cannot be listed through this server, so only use an ID or URL the user gave you. To start a new project from one, call **add-projects** first and import into it. Imports write immediately and cannot be undone.\n\n**Project health**\n\n- Health data may be stale \u2014 check the isStale flag, and call **analyze-project-health** to refresh it before reading again.\n\n**Batches**\n\n- Prefer a batch tool over one call per item.\n- Where a batch tool returns per-item `failures` alongside successes, one failure does not undo the rest: never retry the whole batch, re-send only the items whose failure reason is fixable. **reschedule-tasks** is the exception \u2014 it has no per-item failures and throws if any task fails, so retry it as a whole.\n\nUse the **productivity-analysis** prompt for a combined productivity review \u2014 it pulls together user-info, get-productivity-stats and find-completed-tasks.\n\nAlways provide clear, actionable task titles and descriptions. Use the overview tools to give users context about their workload and project status.\n";
|
|
4
4
|
/**
|
|
5
5
|
* Create the MCP server.
|
|
6
6
|
* @param todoistApiKey - The API key for the todoist account.
|
package/dist/mcp-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,OAAO,EACH,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,QAAQ,EAEhB,MAAM,kBAAkB,CAAA;AAMzB,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,OAAO,EACH,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,QAAQ,EAEhB,MAAM,kBAAkB,CAAA;AAMzB,eAAO,MAAM,YAAY,qhJAyDxB,CAAA;AAgBD;;;;;;GAMG;AAEH,iBAAS,YAAY,CAAC,EAClB,aAAa,EACb,OAAO,EACP,QAAa,GAChB,EAAE;IACC,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACtB,aAmDA;AAED,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/{require-valid-todoist-token-CwcK3Dvu.js → require-valid-todoist-token-C43pfSGR.js}
RENAMED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const
|
|
3
|
-
function
|
|
1
|
+
import { $ as A, a0 as v, a1 as T } from "./mcp-server-Dk7rBod1.js";
|
|
2
|
+
const y = /* @__PURE__ */ new Set([401, 403]);
|
|
3
|
+
function C(e) {
|
|
4
4
|
const t = T(e);
|
|
5
5
|
if (t !== void 0)
|
|
6
6
|
return t;
|
|
7
7
|
if (e !== null && typeof e == "object" && "response" in e)
|
|
8
8
|
return T(e.response);
|
|
9
9
|
}
|
|
10
|
-
async function
|
|
10
|
+
async function _(e, t) {
|
|
11
11
|
const r = A(e, { baseUrl: t });
|
|
12
12
|
try {
|
|
13
|
-
return await
|
|
14
|
-
} catch (
|
|
15
|
-
const
|
|
16
|
-
if (
|
|
13
|
+
return await v("auth:validate-token", () => r.getUser()), !0;
|
|
14
|
+
} catch (a) {
|
|
15
|
+
const i = C(a);
|
|
16
|
+
if (i !== void 0 && y.has(i))
|
|
17
17
|
return !1;
|
|
18
|
-
throw
|
|
18
|
+
throw a;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
const p = 3e5, w = 12e4, h = 1e4, n = /* @__PURE__ */ new Map();
|
|
@@ -46,21 +46,21 @@ function d(e, t) {
|
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
function M(e) {
|
|
49
|
-
const t = e.type === "static" ? p : w, r = e.cacheTtlMs ?? t, { resourceMetadataUrl:
|
|
50
|
-
return async (
|
|
51
|
-
const u = e.type === "static" ? e.apiKey : e.getApiKey(
|
|
49
|
+
const t = e.type === "static" ? p : w, r = e.cacheTtlMs ?? t, { resourceMetadataUrl: a } = e;
|
|
50
|
+
return async (i, s, c) => {
|
|
51
|
+
const u = e.type === "static" ? e.apiKey : e.getApiKey(i);
|
|
52
52
|
if (!u) {
|
|
53
|
-
d(s,
|
|
53
|
+
d(s, a);
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
56
|
const f = k(u, e.baseUrl), l = S(f);
|
|
57
57
|
if (l !== void 0) {
|
|
58
|
-
l ? c() : d(s,
|
|
58
|
+
l ? c() : d(s, a);
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
try {
|
|
62
|
-
const o = await
|
|
63
|
-
g(f, o, r), o ? c() : d(s,
|
|
62
|
+
const o = await _(u, e.baseUrl);
|
|
63
|
+
g(f, o, r), o ? c() : d(s, a);
|
|
64
64
|
} catch (o) {
|
|
65
65
|
console.warn("[Token validation] Transient error, proceeding:", o), c();
|
|
66
66
|
}
|
|
@@ -68,5 +68,5 @@ function M(e) {
|
|
|
68
68
|
}
|
|
69
69
|
export {
|
|
70
70
|
M as r,
|
|
71
|
-
|
|
71
|
+
_ as v
|
|
72
72
|
};
|
package/dist/tool-registry.d.ts
CHANGED
|
@@ -226,6 +226,7 @@ declare const toolRegistry: {
|
|
|
226
226
|
p4: "p4";
|
|
227
227
|
}>>;
|
|
228
228
|
dueString: import('zod').ZodOptional<import('zod').ZodPreprocess<import('zod').ZodString, unknown>>;
|
|
229
|
+
replaceRecurrence: import('zod').ZodOptional<import('zod').ZodBoolean>;
|
|
229
230
|
deadlineDate: import('zod').ZodOptional<import('zod').ZodPreprocess<import('zod').ZodString, unknown>>;
|
|
230
231
|
duration: import('zod').ZodOptional<import('zod').ZodString>;
|
|
231
232
|
responsibleUser: import('zod').ZodOptional<import('zod').ZodPreprocess<import('zod').ZodString, unknown>>;
|
|
@@ -291,6 +292,7 @@ declare const toolRegistry: {
|
|
|
291
292
|
order?: number | undefined;
|
|
292
293
|
priority?: "p1" | "p2" | "p3" | "p4" | undefined;
|
|
293
294
|
dueString?: string | undefined;
|
|
295
|
+
replaceRecurrence?: boolean | undefined;
|
|
294
296
|
deadlineDate?: string | undefined;
|
|
295
297
|
duration?: string | undefined;
|
|
296
298
|
responsibleUser?: string | undefined;
|
|
@@ -343,6 +345,7 @@ declare const toolRegistry: {
|
|
|
343
345
|
tasks: import('zod').ZodArray<import('zod').ZodObject<{
|
|
344
346
|
id: import('zod').ZodString;
|
|
345
347
|
date: import('zod').ZodString;
|
|
348
|
+
duration: import('zod').ZodOptional<import('zod').ZodString>;
|
|
346
349
|
}, import('zod/v4/core').$strip>>;
|
|
347
350
|
};
|
|
348
351
|
outputSchema: {
|
|
@@ -384,6 +387,7 @@ declare const toolRegistry: {
|
|
|
384
387
|
tasks: {
|
|
385
388
|
id: string;
|
|
386
389
|
date: string;
|
|
390
|
+
duration?: string | undefined;
|
|
387
391
|
}[];
|
|
388
392
|
}, client: import('@doist/todoist-sdk').TodoistApi): Promise<{
|
|
389
393
|
textContent: string;
|
|
@@ -3761,6 +3765,87 @@ declare const toolRegistry: {
|
|
|
3761
3765
|
structuredContent: import('./tools/user-info.js').UserInfoStructured;
|
|
3762
3766
|
}>;
|
|
3763
3767
|
};
|
|
3768
|
+
getUserStatus: {
|
|
3769
|
+
name: "get-user-status";
|
|
3770
|
+
description: string;
|
|
3771
|
+
parameters: {};
|
|
3772
|
+
outputSchema: {
|
|
3773
|
+
hasStatus: import('zod').ZodBoolean;
|
|
3774
|
+
status: import('zod').ZodOptional<import('zod').ZodObject<{
|
|
3775
|
+
message: import('zod').ZodString;
|
|
3776
|
+
emoji: import('zod').ZodOptional<import('zod').ZodString>;
|
|
3777
|
+
activeUntil: import('zod').ZodOptional<import('zod').ZodString>;
|
|
3778
|
+
pauseNotifications: import('zod').ZodBoolean;
|
|
3779
|
+
pauseActivity: import('zod').ZodBoolean;
|
|
3780
|
+
}, import('zod/v4/core').$strip>>;
|
|
3781
|
+
};
|
|
3782
|
+
annotations: {
|
|
3783
|
+
readOnlyHint: true;
|
|
3784
|
+
destructiveHint: false;
|
|
3785
|
+
idempotentHint: true;
|
|
3786
|
+
};
|
|
3787
|
+
execute(_args: Record<string, never>, client: import('@doist/todoist-sdk').TodoistApi): Promise<{
|
|
3788
|
+
textContent: string;
|
|
3789
|
+
structuredContent: {
|
|
3790
|
+
hasStatus: boolean;
|
|
3791
|
+
status?: {
|
|
3792
|
+
message: string;
|
|
3793
|
+
pauseNotifications: boolean;
|
|
3794
|
+
pauseActivity: boolean;
|
|
3795
|
+
emoji?: string | undefined;
|
|
3796
|
+
activeUntil?: string | undefined;
|
|
3797
|
+
};
|
|
3798
|
+
};
|
|
3799
|
+
}>;
|
|
3800
|
+
};
|
|
3801
|
+
setUserStatus: {
|
|
3802
|
+
name: "set-user-status";
|
|
3803
|
+
description: string;
|
|
3804
|
+
parameters: {
|
|
3805
|
+
message: import('zod').ZodOptional<import('zod').ZodString>;
|
|
3806
|
+
emoji: import('zod').ZodOptional<import('zod').ZodString>;
|
|
3807
|
+
activeUntil: import('zod').ZodOptional<import('zod').ZodString>;
|
|
3808
|
+
pauseNotifications: import('zod').ZodOptional<import('zod').ZodBoolean>;
|
|
3809
|
+
pauseActivity: import('zod').ZodOptional<import('zod').ZodBoolean>;
|
|
3810
|
+
clear: import('zod').ZodOptional<import('zod').ZodBoolean>;
|
|
3811
|
+
};
|
|
3812
|
+
outputSchema: {
|
|
3813
|
+
hasStatus: import('zod').ZodBoolean;
|
|
3814
|
+
status: import('zod').ZodOptional<import('zod').ZodObject<{
|
|
3815
|
+
message: import('zod').ZodString;
|
|
3816
|
+
emoji: import('zod').ZodOptional<import('zod').ZodString>;
|
|
3817
|
+
activeUntil: import('zod').ZodOptional<import('zod').ZodString>;
|
|
3818
|
+
pauseNotifications: import('zod').ZodBoolean;
|
|
3819
|
+
pauseActivity: import('zod').ZodBoolean;
|
|
3820
|
+
}, import('zod/v4/core').$strip>>;
|
|
3821
|
+
};
|
|
3822
|
+
annotations: {
|
|
3823
|
+
readOnlyHint: false;
|
|
3824
|
+
destructiveHint: true;
|
|
3825
|
+
idempotentHint: true;
|
|
3826
|
+
openWorldHint: true;
|
|
3827
|
+
};
|
|
3828
|
+
execute(args: {
|
|
3829
|
+
message?: string | undefined;
|
|
3830
|
+
emoji?: string | undefined;
|
|
3831
|
+
activeUntil?: string | undefined;
|
|
3832
|
+
pauseNotifications?: boolean | undefined;
|
|
3833
|
+
pauseActivity?: boolean | undefined;
|
|
3834
|
+
clear?: boolean | undefined;
|
|
3835
|
+
}, client: import('@doist/todoist-sdk').TodoistApi): Promise<{
|
|
3836
|
+
textContent: string;
|
|
3837
|
+
structuredContent: {
|
|
3838
|
+
hasStatus: boolean;
|
|
3839
|
+
status?: {
|
|
3840
|
+
message: string;
|
|
3841
|
+
pauseNotifications: boolean;
|
|
3842
|
+
pauseActivity: boolean;
|
|
3843
|
+
emoji?: string | undefined;
|
|
3844
|
+
activeUntil?: string | undefined;
|
|
3845
|
+
};
|
|
3846
|
+
};
|
|
3847
|
+
}>;
|
|
3848
|
+
};
|
|
3764
3849
|
findProjectCollaborators: {
|
|
3765
3850
|
name: "find-project-collaborators";
|
|
3766
3851
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAkEvD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+EjB,CAAA;AAED;;;;;GAKG;AACH,QAAA,MAAM,eAAe,EAAE,SAAS,cAAc,EAAgC,CAAA;AAE9E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/add-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"add-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/add-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAwBvB,QAAA,MAAM,uBAAuB,IAAkC,CAAA;AA4D/D,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAyDwB,MAAM;uBAAS,MAAM;;;;;;;CAyCI,CAAA;AAoL/D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
declare const getUserStatus: {
|
|
2
|
+
name: "get-user-status";
|
|
3
|
+
description: string;
|
|
4
|
+
parameters: {};
|
|
5
|
+
outputSchema: {
|
|
6
|
+
hasStatus: import('zod').ZodBoolean;
|
|
7
|
+
status: import('zod').ZodOptional<import('zod').ZodObject<{
|
|
8
|
+
message: import('zod').ZodString;
|
|
9
|
+
emoji: import('zod').ZodOptional<import('zod').ZodString>;
|
|
10
|
+
activeUntil: import('zod').ZodOptional<import('zod').ZodString>;
|
|
11
|
+
pauseNotifications: import('zod').ZodBoolean;
|
|
12
|
+
pauseActivity: import('zod').ZodBoolean;
|
|
13
|
+
}, import('zod/v4/core').$strip>>;
|
|
14
|
+
};
|
|
15
|
+
annotations: {
|
|
16
|
+
readOnlyHint: true;
|
|
17
|
+
destructiveHint: false;
|
|
18
|
+
idempotentHint: true;
|
|
19
|
+
};
|
|
20
|
+
execute(_args: Record<string, never>, client: import('@doist/todoist-sdk').TodoistApi): Promise<{
|
|
21
|
+
textContent: string;
|
|
22
|
+
structuredContent: {
|
|
23
|
+
hasStatus: boolean;
|
|
24
|
+
status?: {
|
|
25
|
+
message: string;
|
|
26
|
+
pauseNotifications: boolean;
|
|
27
|
+
pauseActivity: boolean;
|
|
28
|
+
emoji?: string | undefined;
|
|
29
|
+
activeUntil?: string | undefined;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
}>;
|
|
33
|
+
};
|
|
34
|
+
export { getUserStatus };
|
|
35
|
+
//# sourceMappingURL=get-user-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-user-status.d.ts","sourceRoot":"","sources":["../../src/tools/get-user-status.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUsD,CAAA;AAEzE,OAAO,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -7,6 +7,7 @@ declare const rescheduleTasks: {
|
|
|
7
7
|
tasks: z.ZodArray<z.ZodObject<{
|
|
8
8
|
id: z.ZodString;
|
|
9
9
|
date: z.ZodString;
|
|
10
|
+
duration: z.ZodOptional<z.ZodString>;
|
|
10
11
|
}, z.core.$strip>>;
|
|
11
12
|
};
|
|
12
13
|
outputSchema: {
|
|
@@ -48,6 +49,7 @@ declare const rescheduleTasks: {
|
|
|
48
49
|
tasks: {
|
|
49
50
|
id: string;
|
|
50
51
|
date: string;
|
|
52
|
+
duration?: string | undefined;
|
|
51
53
|
}[];
|
|
52
54
|
}, client: import('@doist/todoist-sdk').TodoistApi): Promise<{
|
|
53
55
|
textContent: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reschedule-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/reschedule-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"reschedule-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/reschedule-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAoCvB,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6E0C,CAAA;AAE/D,iBAAS,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAU7F;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const setUserStatus: {
|
|
3
|
+
name: "set-user-status";
|
|
4
|
+
description: string;
|
|
5
|
+
parameters: {
|
|
6
|
+
message: z.ZodOptional<z.ZodString>;
|
|
7
|
+
emoji: z.ZodOptional<z.ZodString>;
|
|
8
|
+
activeUntil: z.ZodOptional<z.ZodString>;
|
|
9
|
+
pauseNotifications: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
pauseActivity: z.ZodOptional<z.ZodBoolean>;
|
|
11
|
+
clear: z.ZodOptional<z.ZodBoolean>;
|
|
12
|
+
};
|
|
13
|
+
outputSchema: {
|
|
14
|
+
hasStatus: z.ZodBoolean;
|
|
15
|
+
status: z.ZodOptional<z.ZodObject<{
|
|
16
|
+
message: z.ZodString;
|
|
17
|
+
emoji: z.ZodOptional<z.ZodString>;
|
|
18
|
+
activeUntil: z.ZodOptional<z.ZodString>;
|
|
19
|
+
pauseNotifications: z.ZodBoolean;
|
|
20
|
+
pauseActivity: z.ZodBoolean;
|
|
21
|
+
}, z.core.$strip>>;
|
|
22
|
+
};
|
|
23
|
+
annotations: {
|
|
24
|
+
readOnlyHint: false;
|
|
25
|
+
destructiveHint: true;
|
|
26
|
+
idempotentHint: true;
|
|
27
|
+
openWorldHint: true;
|
|
28
|
+
};
|
|
29
|
+
execute(args: {
|
|
30
|
+
message?: string | undefined;
|
|
31
|
+
emoji?: string | undefined;
|
|
32
|
+
activeUntil?: string | undefined;
|
|
33
|
+
pauseNotifications?: boolean | undefined;
|
|
34
|
+
pauseActivity?: boolean | undefined;
|
|
35
|
+
clear?: boolean | undefined;
|
|
36
|
+
}, client: import('@doist/todoist-sdk').TodoistApi): Promise<{
|
|
37
|
+
textContent: string;
|
|
38
|
+
structuredContent: {
|
|
39
|
+
hasStatus: boolean;
|
|
40
|
+
status?: {
|
|
41
|
+
message: string;
|
|
42
|
+
pauseNotifications: boolean;
|
|
43
|
+
pauseActivity: boolean;
|
|
44
|
+
emoji?: string | undefined;
|
|
45
|
+
activeUntil?: string | undefined;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
}>;
|
|
49
|
+
};
|
|
50
|
+
export { setUserStatus };
|
|
51
|
+
//# sourceMappingURL=set-user-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-user-status.d.ts","sourceRoot":"","sources":["../../src/tools/set-user-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAkKvB,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDsD,CAAA;AAEzE,OAAO,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -19,6 +19,7 @@ declare const updateTasks: {
|
|
|
19
19
|
p4: "p4";
|
|
20
20
|
}>>;
|
|
21
21
|
dueString: z.ZodOptional<z.ZodPreprocess<z.ZodString, unknown>>;
|
|
22
|
+
replaceRecurrence: z.ZodOptional<z.ZodBoolean>;
|
|
22
23
|
deadlineDate: z.ZodOptional<z.ZodPreprocess<z.ZodString, unknown>>;
|
|
23
24
|
duration: z.ZodOptional<z.ZodString>;
|
|
24
25
|
responsibleUser: z.ZodOptional<z.ZodPreprocess<z.ZodString, unknown>>;
|
|
@@ -84,6 +85,7 @@ declare const updateTasks: {
|
|
|
84
85
|
order?: number | undefined;
|
|
85
86
|
priority?: "p1" | "p2" | "p3" | "p4" | undefined;
|
|
86
87
|
dueString?: string | undefined;
|
|
88
|
+
replaceRecurrence?: boolean | undefined;
|
|
87
89
|
deadlineDate?: string | undefined;
|
|
88
90
|
duration?: string | undefined;
|
|
89
91
|
responsibleUser?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/update-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIR,UAAU,EAEb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"update-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/update-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIR,UAAU,EAEb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiMvB,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAiOW,MAAM;uBAAS,MAAM;uBAAS,MAAM;;;;;;;;;;CARD,CAAA;AA0f/D,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -29,6 +29,11 @@ export declare function parseDuration(durationStr: string): ParsedDuration;
|
|
|
29
29
|
* @param unit - The unit the amount is stored in
|
|
30
30
|
* @returns Formatted duration string like "2h30m", "45m" or "3d"
|
|
31
31
|
*/
|
|
32
|
+
/**
|
|
33
|
+
* Parses one batch item's duration, prefixing a format error with `label` (e.g.
|
|
34
|
+
* `Task 123`) so the caller can report it against that item.
|
|
35
|
+
*/
|
|
36
|
+
export declare function parseItemDuration(label: string, durationStr: string): ParsedDuration;
|
|
32
37
|
export declare function formatDuration(amount: number, unit?: DurationUnit): string;
|
|
33
38
|
export {};
|
|
34
39
|
//# sourceMappingURL=duration-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duration-parser.d.ts","sourceRoot":"","sources":["../../src/utils/duration-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,KAAK,cAAc,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,0BAA0B,gXACgU,CAAA;AAIvW,qBAAa,kBAAmB,SAAQ,KAAK;gBAC7B,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI5C;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CA0BjE;AAqFD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,YAAuB,GAAG,MAAM,CAmBpF"}
|
|
1
|
+
{"version":3,"file":"duration-parser.d.ts","sourceRoot":"","sources":["../../src/utils/duration-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,KAAK,cAAc,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,0BAA0B,gXACgU,CAAA;AAIvW,qBAAa,kBAAmB,SAAQ,KAAK;gBAC7B,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI5C;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CA0BjE;AAqFD;;;;;;;;;;;;GAYG;AACH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc,CASpF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,YAAuB,GAAG,MAAM,CAmBpF"}
|
|
@@ -42,6 +42,8 @@ export declare const ToolNames: {
|
|
|
42
42
|
readonly FETCH_OBJECT: "fetch-object";
|
|
43
43
|
readonly REORDER_OBJECTS: "reorder-objects";
|
|
44
44
|
readonly USER_INFO: "user-info";
|
|
45
|
+
readonly GET_USER_STATUS: "get-user-status";
|
|
46
|
+
readonly SET_USER_STATUS: "set-user-status";
|
|
45
47
|
readonly ADD_LABELS: "add-labels";
|
|
46
48
|
readonly UPDATE_LABELS: "update-labels";
|
|
47
49
|
readonly FIND_LABELS: "find-labels";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-names.d.ts","sourceRoot":"","sources":["../../src/utils/tool-names.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"tool-names.d.ts","sourceRoot":"","sources":["../../src/utils/tool-names.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+EZ,CAAA;AAGV,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { TodoistApi, UserStatus } from '@doist/todoist-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
declare const StatusOutputSchema: z.ZodObject<{
|
|
4
|
+
message: z.ZodString;
|
|
5
|
+
emoji: z.ZodOptional<z.ZodString>;
|
|
6
|
+
activeUntil: z.ZodOptional<z.ZodString>;
|
|
7
|
+
pauseNotifications: z.ZodBoolean;
|
|
8
|
+
pauseActivity: z.ZodBoolean;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
declare const UserStatusOutputSchema: {
|
|
11
|
+
hasStatus: z.ZodBoolean;
|
|
12
|
+
status: z.ZodOptional<z.ZodObject<{
|
|
13
|
+
message: z.ZodString;
|
|
14
|
+
emoji: z.ZodOptional<z.ZodString>;
|
|
15
|
+
activeUntil: z.ZodOptional<z.ZodString>;
|
|
16
|
+
pauseNotifications: z.ZodBoolean;
|
|
17
|
+
pauseActivity: z.ZodBoolean;
|
|
18
|
+
}, z.core.$strip>>;
|
|
19
|
+
};
|
|
20
|
+
type StatusOutput = z.infer<typeof StatusOutputSchema>;
|
|
21
|
+
type UserStatusStructured = {
|
|
22
|
+
hasStatus: boolean;
|
|
23
|
+
status?: StatusOutput;
|
|
24
|
+
};
|
|
25
|
+
/** The user's active status, or `null` when there is none or it has expired. */
|
|
26
|
+
declare function fetchUserStatus(client: TodoistApi): Promise<UserStatus | null>;
|
|
27
|
+
declare function buildUserStatusResult(status: UserStatus | null, heading: string): {
|
|
28
|
+
textContent: string;
|
|
29
|
+
structuredContent: UserStatusStructured;
|
|
30
|
+
};
|
|
31
|
+
export { buildUserStatusResult, fetchUserStatus, UserStatusOutputSchema };
|
|
32
|
+
//# sourceMappingURL=user-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-status.d.ts","sourceRoot":"","sources":["../../src/utils/user-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,QAAA,MAAM,kBAAkB;;;;;;iBAMtB,CAAA;AAEF,QAAA,MAAM,sBAAsB;;;;;;;;;CAG3B,CAAA;AAED,KAAK,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEtD,KAAK,oBAAoB,GAAG;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,YAAY,CAAA;CACxB,CAAA;AAUD,gFAAgF;AAChF,iBAAe,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAK7E;AAaD,iBAAS,qBAAqB,CAC1B,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,OAAO,EAAE,MAAM,GAChB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,oBAAoB,CAAA;CAAE,CAuBlE;AAED,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -87,6 +87,20 @@ const SCENARIOS: Scenario[] = [
|
|
|
87
87
|
forbid: [ToolNames.UPDATE_TASKS],
|
|
88
88
|
guards: 'instructions: reschedule-tasks vs update-tasks (recurrence loss)',
|
|
89
89
|
},
|
|
90
|
+
{
|
|
91
|
+
// Doist/Issues#21505: time-blocking needs a time and a duration, and
|
|
92
|
+
// update-tasks used to be the only tool that set both.
|
|
93
|
+
id: 'time-block-recurring',
|
|
94
|
+
prompt: 'Block 10:00-10:15 today for task 6XG4Vw2c9J ("Give meds", repeats every day at 9:00).',
|
|
95
|
+
forbid: [ToolNames.UPDATE_TASKS],
|
|
96
|
+
check: (input) => {
|
|
97
|
+
const task = firstItem(input, 'tasks')
|
|
98
|
+
// Only the reschedule call carries a date; a lookup is fine.
|
|
99
|
+
if (!task || !('date' in task)) return null
|
|
100
|
+
return task.duration ? null : `rescheduled without a duration: ${JSON.stringify(task)}`
|
|
101
|
+
},
|
|
102
|
+
guards: 'reschedule-tasks duration: time-blocking a recurring task',
|
|
103
|
+
},
|
|
90
104
|
{
|
|
91
105
|
id: 'completed-via-activity',
|
|
92
106
|
prompt: 'What did I actually get done last week?',
|