@doist/todoist-ai 8.12.2 → 9.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.
Files changed (170) hide show
  1. package/README.md +11 -206
  2. package/bin/_launcher.js +16 -0
  3. package/bin/todoist-ai-http.js +4 -0
  4. package/bin/todoist-ai.js +4 -0
  5. package/index.d.ts +1 -0
  6. package/index.mjs +1 -0
  7. package/package.json +20 -108
  8. package/LICENSE +0 -21
  9. package/dist/filter-helpers.d.ts +0 -51
  10. package/dist/filter-helpers.d.ts.map +0 -1
  11. package/dist/index.d.ts +0 -2954
  12. package/dist/index.d.ts.map +0 -1
  13. package/dist/index.js +0 -103
  14. package/dist/main-http.d.ts +0 -3
  15. package/dist/main-http.d.ts.map +0 -1
  16. package/dist/main-http.js +0 -41
  17. package/dist/main.d.ts +0 -3
  18. package/dist/main.d.ts.map +0 -1
  19. package/dist/main.js +0 -17
  20. package/dist/mcp-apps/index.html +0 -98
  21. package/dist/mcp-helpers.d.ts +0 -58
  22. package/dist/mcp-helpers.d.ts.map +0 -1
  23. package/dist/mcp-server-DO3M1GWl.js +0 -6132
  24. package/dist/mcp-server.d.ts +0 -16
  25. package/dist/mcp-server.d.ts.map +0 -1
  26. package/dist/middleware/require-valid-todoist-token.d.ts +0 -38
  27. package/dist/middleware/require-valid-todoist-token.d.ts.map +0 -1
  28. package/dist/prompts/productivity-analysis.d.ts +0 -58
  29. package/dist/prompts/productivity-analysis.d.ts.map +0 -1
  30. package/dist/require-valid-todoist-token-CpbXZfcm.js +0 -72
  31. package/dist/todoist-tool.d.ts +0 -62
  32. package/dist/todoist-tool.d.ts.map +0 -1
  33. package/dist/tool-execution-error.d.ts +0 -7
  34. package/dist/tool-execution-error.d.ts.map +0 -1
  35. package/dist/tool-helpers.d.ts +0 -265
  36. package/dist/tool-helpers.d.ts.map +0 -1
  37. package/dist/tools/add-comments.d.ts +0 -83
  38. package/dist/tools/add-comments.d.ts.map +0 -1
  39. package/dist/tools/add-filters.d.ts +0 -94
  40. package/dist/tools/add-filters.d.ts.map +0 -1
  41. package/dist/tools/add-labels.d.ts +0 -92
  42. package/dist/tools/add-labels.d.ts.map +0 -1
  43. package/dist/tools/add-projects.d.ts +0 -112
  44. package/dist/tools/add-projects.d.ts.map +0 -1
  45. package/dist/tools/add-reminders.d.ts +0 -148
  46. package/dist/tools/add-reminders.d.ts.map +0 -1
  47. package/dist/tools/add-sections.d.ts +0 -40
  48. package/dist/tools/add-sections.d.ts.map +0 -1
  49. package/dist/tools/add-tasks.d.ts +0 -118
  50. package/dist/tools/add-tasks.d.ts.map +0 -1
  51. package/dist/tools/analyze-project-health.d.ts +0 -45
  52. package/dist/tools/analyze-project-health.d.ts.map +0 -1
  53. package/dist/tools/complete-tasks.d.ts +0 -42
  54. package/dist/tools/complete-tasks.d.ts.map +0 -1
  55. package/dist/tools/delete-object.d.ts +0 -54
  56. package/dist/tools/delete-object.d.ts.map +0 -1
  57. package/dist/tools/fetch-object.d.ts +0 -199
  58. package/dist/tools/fetch-object.d.ts.map +0 -1
  59. package/dist/tools/fetch.d.ts +0 -41
  60. package/dist/tools/fetch.d.ts.map +0 -1
  61. package/dist/tools/find-activity.d.ts +0 -91
  62. package/dist/tools/find-activity.d.ts.map +0 -1
  63. package/dist/tools/find-comments.d.ts +0 -89
  64. package/dist/tools/find-comments.d.ts.map +0 -1
  65. package/dist/tools/find-completed-tasks.d.ts +0 -115
  66. package/dist/tools/find-completed-tasks.d.ts.map +0 -1
  67. package/dist/tools/find-filters.d.ts +0 -92
  68. package/dist/tools/find-filters.d.ts.map +0 -1
  69. package/dist/tools/find-labels.d.ts +0 -81
  70. package/dist/tools/find-labels.d.ts.map +0 -1
  71. package/dist/tools/find-project-collaborators.d.ts +0 -94
  72. package/dist/tools/find-project-collaborators.d.ts.map +0 -1
  73. package/dist/tools/find-projects.d.ts +0 -87
  74. package/dist/tools/find-projects.d.ts.map +0 -1
  75. package/dist/tools/find-reminders.d.ts +0 -95
  76. package/dist/tools/find-reminders.d.ts.map +0 -1
  77. package/dist/tools/find-sections.d.ts +0 -41
  78. package/dist/tools/find-sections.d.ts.map +0 -1
  79. package/dist/tools/find-tasks-by-date.d.ts +0 -133
  80. package/dist/tools/find-tasks-by-date.d.ts.map +0 -1
  81. package/dist/tools/find-tasks.d.ts +0 -116
  82. package/dist/tools/find-tasks.d.ts.map +0 -1
  83. package/dist/tools/get-overview.d.ts +0 -123
  84. package/dist/tools/get-overview.d.ts.map +0 -1
  85. package/dist/tools/get-productivity-stats.d.ts +0 -160
  86. package/dist/tools/get-productivity-stats.d.ts.map +0 -1
  87. package/dist/tools/get-project-activity-stats.d.ts +0 -48
  88. package/dist/tools/get-project-activity-stats.d.ts.map +0 -1
  89. package/dist/tools/get-project-health.d.ts +0 -112
  90. package/dist/tools/get-project-health.d.ts.map +0 -1
  91. package/dist/tools/get-workspace-insights.d.ts +0 -65
  92. package/dist/tools/get-workspace-insights.d.ts.map +0 -1
  93. package/dist/tools/list-workspaces.d.ts +0 -54
  94. package/dist/tools/list-workspaces.d.ts.map +0 -1
  95. package/dist/tools/manage-assignments.d.ts +0 -72
  96. package/dist/tools/manage-assignments.d.ts.map +0 -1
  97. package/dist/tools/project-management.d.ts +0 -78
  98. package/dist/tools/project-management.d.ts.map +0 -1
  99. package/dist/tools/project-move.d.ts +0 -88
  100. package/dist/tools/project-move.d.ts.map +0 -1
  101. package/dist/tools/reorder-objects.d.ts +0 -50
  102. package/dist/tools/reorder-objects.d.ts.map +0 -1
  103. package/dist/tools/reschedule-tasks.d.ts +0 -78
  104. package/dist/tools/reschedule-tasks.d.ts.map +0 -1
  105. package/dist/tools/search.d.ts +0 -43
  106. package/dist/tools/search.d.ts.map +0 -1
  107. package/dist/tools/uncomplete-tasks.d.ts +0 -42
  108. package/dist/tools/uncomplete-tasks.d.ts.map +0 -1
  109. package/dist/tools/update-comments.d.ts +0 -87
  110. package/dist/tools/update-comments.d.ts.map +0 -1
  111. package/dist/tools/update-filters.d.ts +0 -106
  112. package/dist/tools/update-filters.d.ts.map +0 -1
  113. package/dist/tools/update-labels.d.ts +0 -122
  114. package/dist/tools/update-labels.d.ts.map +0 -1
  115. package/dist/tools/update-projects.d.ts +0 -120
  116. package/dist/tools/update-projects.d.ts.map +0 -1
  117. package/dist/tools/update-reminders.d.ts +0 -148
  118. package/dist/tools/update-reminders.d.ts.map +0 -1
  119. package/dist/tools/update-sections.d.ts +0 -42
  120. package/dist/tools/update-sections.d.ts.map +0 -1
  121. package/dist/tools/update-tasks.d.ts +0 -113
  122. package/dist/tools/update-tasks.d.ts.map +0 -1
  123. package/dist/tools/user-info.d.ts +0 -57
  124. package/dist/tools/user-info.d.ts.map +0 -1
  125. package/dist/tools/view-attachment.d.ts +0 -25
  126. package/dist/tools/view-attachment.d.ts.map +0 -1
  127. package/dist/usage-tracking.d.ts +0 -27
  128. package/dist/usage-tracking.d.ts.map +0 -1
  129. package/dist/utils/assignment-validator.d.ts +0 -69
  130. package/dist/utils/assignment-validator.d.ts.map +0 -1
  131. package/dist/utils/colors.d.ts +0 -68
  132. package/dist/utils/colors.d.ts.map +0 -1
  133. package/dist/utils/constants.d.ts +0 -53
  134. package/dist/utils/constants.d.ts.map +0 -1
  135. package/dist/utils/date.d.ts +0 -18
  136. package/dist/utils/date.d.ts.map +0 -1
  137. package/dist/utils/duration-parser.d.ts +0 -36
  138. package/dist/utils/duration-parser.d.ts.map +0 -1
  139. package/dist/utils/filter-resolver.d.ts +0 -27
  140. package/dist/utils/filter-resolver.d.ts.map +0 -1
  141. package/dist/utils/labels.d.ts +0 -13
  142. package/dist/utils/labels.d.ts.map +0 -1
  143. package/dist/utils/output-schemas.d.ts +0 -199
  144. package/dist/utils/output-schemas.d.ts.map +0 -1
  145. package/dist/utils/priorities.d.ts +0 -14
  146. package/dist/utils/priorities.d.ts.map +0 -1
  147. package/dist/utils/reminder-schemas.d.ts +0 -33
  148. package/dist/utils/reminder-schemas.d.ts.map +0 -1
  149. package/dist/utils/response-builders.d.ts +0 -93
  150. package/dist/utils/response-builders.d.ts.map +0 -1
  151. package/dist/utils/retry.d.ts +0 -10
  152. package/dist/utils/retry.d.ts.map +0 -1
  153. package/dist/utils/sanitize-data.d.ts +0 -10
  154. package/dist/utils/sanitize-data.d.ts.map +0 -1
  155. package/dist/utils/schema-helpers.d.ts +0 -10
  156. package/dist/utils/schema-helpers.d.ts.map +0 -1
  157. package/dist/utils/test-helpers.d.ts +0 -91
  158. package/dist/utils/test-helpers.d.ts.map +0 -1
  159. package/dist/utils/tool-names.d.ts +0 -56
  160. package/dist/utils/tool-names.d.ts.map +0 -1
  161. package/dist/utils/user-resolver.d.ts +0 -39
  162. package/dist/utils/user-resolver.d.ts.map +0 -1
  163. package/dist/utils/validate-todoist-token.d.ts +0 -9
  164. package/dist/utils/validate-todoist-token.d.ts.map +0 -1
  165. package/dist/utils/workspace-resolver.d.ts +0 -31
  166. package/dist/utils/workspace-resolver.d.ts.map +0 -1
  167. package/scripts/bump-plugin-version.mjs +0 -14
  168. package/scripts/run-tool.ts +0 -240
  169. package/scripts/test-executable.cjs +0 -69
  170. package/scripts/validate-schemas.ts +0 -284
@@ -1,16 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { FEATURE_NAMES, Feature, FeatureName, Features } from './mcp-helpers.js';
3
- /**
4
- * Create the MCP server.
5
- * @param todoistApiKey - The API key for the todoist account.
6
- * @param baseUrl - The base URL for the todoist API.
7
- * @param features - Features to enable for the server.
8
- * @returns the MCP server.
9
- */
10
- declare function getMcpServer({ todoistApiKey, baseUrl, features, }: {
11
- todoistApiKey: string;
12
- baseUrl?: string;
13
- features?: Features;
14
- }): McpServer;
15
- export { FEATURE_NAMES, type Feature, type FeatureName, type Features, getMcpServer };
16
- //# sourceMappingURL=mcp-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EACH,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,QAAQ,EAEhB,MAAM,kBAAkB,CAAA;AAoJzB;;;;;;GAMG;AACH,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,aAwHA;AAED,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,CAAA"}
@@ -1,38 +0,0 @@
1
- import { Request, RequestHandler } from 'express';
2
- type StaticTokenSource = {
3
- type: 'static';
4
- apiKey: string;
5
- baseUrl?: string;
6
- };
7
- type DynamicTokenSource = {
8
- type: 'dynamic';
9
- getApiKey: (req: Request) => string | undefined;
10
- baseUrl?: string;
11
- };
12
- type TokenSource = StaticTokenSource | DynamicTokenSource;
13
- type RequireValidTodoistTokenOptions = TokenSource & {
14
- /**
15
- * Cache TTL in milliseconds. Defaults to 300_000 (5 minutes) for static,
16
- * 120_000 (2 minutes) for dynamic.
17
- */
18
- cacheTtlMs?: number;
19
- /**
20
- * URL for the Protected Resource Metadata document (RFC 9728).
21
- * Included in the WWW-Authenticate header when returning 401.
22
- * If omitted, the header is sent without resource_metadata.
23
- */
24
- resourceMetadataUrl?: string;
25
- };
26
- /**
27
- * Express middleware that validates the Todoist API token before MCP processing.
28
- *
29
- * Returns HTTP 401 with a spec-compliant WWW-Authenticate header if the token
30
- * is invalid, allowing MCP clients to trigger OAuth token refresh.
31
- */
32
- declare function requireValidTodoistToken(options: RequireValidTodoistTokenOptions): RequestHandler;
33
- /**
34
- * Clear the token validation cache. Useful for testing.
35
- */
36
- declare function clearTokenValidationCache(): void;
37
- export { clearTokenValidationCache, requireValidTodoistToken, type RequireValidTodoistTokenOptions };
38
- //# sourceMappingURL=require-valid-todoist-token.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"require-valid-todoist-token.d.ts","sourceRoot":"","sources":["../../src/middleware/require-valid-todoist-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,cAAc,EAAY,MAAM,SAAS,CAAA;AAI9E,KAAK,iBAAiB,GAAG;IACrB,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,KAAK,kBAAkB,GAAG;IACtB,IAAI,EAAE,SAAS,CAAA;IACf,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAA;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,KAAK,WAAW,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;AAEzD,KAAK,+BAA+B,GAAG,WAAW,GAAG;IACjD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC/B,CAAA;AA8DD;;;;;GAKG;AACH,iBAAS,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,GAAG,cAAc,CAwC1F;AAED;;GAEG;AACH,iBAAS,yBAAyB,IAAI,IAAI,CAEzC;AAED,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,KAAK,+BAA+B,EAAE,CAAA"}
@@ -1,58 +0,0 @@
1
- import { GetPromptResult } from '@modelcontextprotocol/sdk/types.js';
2
- import { z } from 'zod';
3
- declare const argsSchema: {
4
- period: z.ZodDefault<z.ZodEnum<{
5
- today: "today";
6
- "7d": "7d";
7
- "14d": "14d";
8
- "30d": "30d";
9
- "this-week": "this-week";
10
- "this-month": "this-month";
11
- }>>;
12
- focus: z.ZodDefault<z.ZodEnum<{
13
- overall: "overall";
14
- goals: "goals";
15
- projects: "projects";
16
- trends: "trends";
17
- recommendations: "recommendations";
18
- }>>;
19
- projectId: z.ZodOptional<z.ZodString>;
20
- };
21
- type PromptArgs = z.infer<z.ZodObject<typeof argsSchema>>;
22
- /**
23
- * Compute the date range (since/until as YYYY-MM-DD) for a given period.
24
- * Uses UTC since the prompt instructs the LLM to call user-info for timezone.
25
- */
26
- declare function computeDateRange(period: PromptArgs['period'], now?: Date): {
27
- since: string;
28
- until: string;
29
- periodDescription: string;
30
- };
31
- declare function buildPromptText(args: PromptArgs): string;
32
- declare function callback(args: PromptArgs): GetPromptResult;
33
- declare const productivityAnalysis: {
34
- name: string;
35
- title: string;
36
- description: string;
37
- argsSchema: {
38
- period: z.ZodDefault<z.ZodEnum<{
39
- today: "today";
40
- "7d": "7d";
41
- "14d": "14d";
42
- "30d": "30d";
43
- "this-week": "this-week";
44
- "this-month": "this-month";
45
- }>>;
46
- focus: z.ZodDefault<z.ZodEnum<{
47
- overall: "overall";
48
- goals: "goals";
49
- projects: "projects";
50
- trends: "trends";
51
- recommendations: "recommendations";
52
- }>>;
53
- projectId: z.ZodOptional<z.ZodString>;
54
- };
55
- callback: typeof callback;
56
- };
57
- export { buildPromptText, computeDateRange, productivityAnalysis };
58
- //# sourceMappingURL=productivity-analysis.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"productivity-analysis.d.ts","sourceRoot":"","sources":["../../src/prompts/productivity-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;CAiBf,CAAA;AAED,KAAK,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,UAAU,CAAC,CAAC,CAAA;AAEzD;;;GAGG;AACH,iBAAS,gBAAgB,CACrB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAC5B,GAAG,GAAE,IAAiB,GACvB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CA0D7D;AAwCD,iBAAS,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAkCjD;AAED,iBAAS,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CAYnD;AAED,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;CAOzB,CAAA;AAED,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAA"}
@@ -1,72 +0,0 @@
1
- import { P as A, Q as v, R as T } from "./mcp-server-DO3M1GWl.js";
2
- const y = /* @__PURE__ */ new Set([401, 403]);
3
- function C(e) {
4
- const t = T(e);
5
- if (t !== void 0)
6
- return t;
7
- if (e !== null && typeof e == "object" && "response" in e)
8
- return T(e.response);
9
- }
10
- async function _(e, t) {
11
- const r = A(e, { baseUrl: t });
12
- try {
13
- return await v("auth:validate-token", () => r.getUser()), !0;
14
- } catch (i) {
15
- const a = C(i);
16
- if (a !== void 0 && y.has(a))
17
- return !1;
18
- throw i;
19
- }
20
- }
21
- const p = 3e5, w = 12e4, h = 1e4, n = /* @__PURE__ */ new Map();
22
- function k(e, t) {
23
- return t ? `${e}::${t}` : e;
24
- }
25
- function E() {
26
- const e = Date.now();
27
- for (const [t, r] of n)
28
- e >= r.expiresAt && n.delete(t);
29
- }
30
- function S(e) {
31
- const t = n.get(e);
32
- if (t && Date.now() < t.expiresAt)
33
- return t.valid;
34
- t && n.delete(e);
35
- }
36
- function g(e, t, r) {
37
- n.size >= h && E(), n.size >= h && n.clear(), n.set(e, { valid: t, expiresAt: Date.now() + r });
38
- }
39
- function x(e) {
40
- return e ? `Bearer resource_metadata="${e}"` : "Bearer";
41
- }
42
- function d(e, t) {
43
- e.status(401).set("WWW-Authenticate", x(t)).json({
44
- error: "invalid_token",
45
- error_description: "Todoist API token is invalid or expired"
46
- });
47
- }
48
- function M(e) {
49
- const t = e.type === "static" ? p : w, r = e.cacheTtlMs ?? t, { resourceMetadataUrl: i } = e;
50
- return async (a, s, c) => {
51
- const u = e.type === "static" ? e.apiKey : e.getApiKey(a);
52
- if (!u) {
53
- d(s, i);
54
- return;
55
- }
56
- const f = k(u, e.baseUrl), l = S(f);
57
- if (l !== void 0) {
58
- l ? c() : d(s, i);
59
- return;
60
- }
61
- try {
62
- const o = await _(u, e.baseUrl);
63
- g(f, o, r), o ? c() : d(s, i);
64
- } catch (o) {
65
- console.warn("[Token validation] Transient error, proceeding:", o), c();
66
- }
67
- };
68
- }
69
- export {
70
- M as r,
71
- _ as v
72
- };
@@ -1,62 +0,0 @@
1
- import { TodoistApi } from '@doist/todoist-sdk';
2
- import { ContentBlock, ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
3
- import { z } from 'zod';
4
- type ExecuteResult<Output extends z.ZodRawShape> = Promise<{
5
- textContent?: string;
6
- structuredContent?: z.infer<z.ZodObject<Output>>;
7
- contentItems?: ContentBlock[];
8
- }>;
9
- type RequiredToolAnnotations = ToolAnnotations & {
10
- readOnlyHint: boolean;
11
- destructiveHint: boolean;
12
- idempotentHint: boolean;
13
- };
14
- /**
15
- * A Todoist tool that can be used in an MCP server or other conversational AI interfaces.
16
- */
17
- type TodoistTool<Params extends z.ZodRawShape, Output extends z.ZodRawShape = Record<string, never>> = {
18
- /**
19
- * The name of the tool.
20
- */
21
- name: string;
22
- /**
23
- * The description of the tool. This is important for the LLM to understand what the tool does,
24
- * and how to use it.
25
- */
26
- description: string;
27
- /**
28
- * The schema of the parameters of the tool.
29
- *
30
- * This is used to validate the parameters of the tool, as well as to let the LLM know what the
31
- * parameters are.
32
- */
33
- parameters: Params;
34
- /**
35
- * The schema of the output of the tool.
36
- *
37
- * This is used to describe the structured output format that the tool will return.
38
- */
39
- outputSchema?: Output;
40
- /**
41
- * MCP ToolAnnotations hints for this tool.
42
- */
43
- annotations: RequiredToolAnnotations;
44
- /**
45
- * The meta data of the tool.
46
- *
47
- * This is used to store additional information about the tool.
48
- */
49
- _meta?: Record<string, unknown>;
50
- /**
51
- * The function that executes the tool.
52
- *
53
- * This is the main function that will be called when the tool is used.
54
- *
55
- * @param args - The arguments of the tool.
56
- * @param client - The Todoist API client used to make requests to the Todoist API.
57
- * @returns The result of the tool.
58
- */
59
- execute: (args: z.infer<z.ZodObject<Params>>, client: TodoistApi) => ExecuteResult<Output>;
60
- };
61
- export type { RequiredToolAnnotations, TodoistTool };
62
- //# sourceMappingURL=todoist-tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"todoist-tool.d.ts","sourceRoot":"","sources":["../src/todoist-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACvF,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,KAAK,aAAa,CAAC,MAAM,SAAS,CAAC,CAAC,WAAW,IAAI,OAAO,CAAC;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;IAChD,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;CAChC,CAAC,CAAA;AAEF,KAAK,uBAAuB,GAAG,eAAe,GAAG;IAC7C,YAAY,EAAE,OAAO,CAAA;IACrB,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,KAAK,WAAW,CACZ,MAAM,SAAS,CAAC,CAAC,WAAW,EAC5B,MAAM,SAAS,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IACpD;IACA;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,WAAW,EAAE,uBAAuB,CAAA;IAEpC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/B;;;;;;;;OAQG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,KAAK,aAAa,CAAC,MAAM,CAAC,CAAA;CAC7F,CAAA;AAED,YAAY,EAAE,uBAAuB,EAAE,WAAW,EAAE,CAAA"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Format tool execution errors in a consistent, actionable format.
3
- *
4
- * This is the only public API exposed by this module.
5
- */
6
- export declare function formatToolExecutionError(error: unknown): string;
7
- //# sourceMappingURL=tool-execution-error.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-execution-error.d.ts","sourceRoot":"","sources":["../src/tool-execution-error.ts"],"names":[],"mappings":"AAwbA;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAW/D"}
@@ -1,265 +0,0 @@
1
- import { isPersonalProject, isWorkspaceProject, ActivityEvent, ColorKey, Comment, CurrentUser, Label, MoveTaskArgs, PersonalProject, Reminder, Section, Task, TodoistApi, WorkspaceProject } from '@doist/todoist-sdk';
2
- export { appendToQuery, buildResponsibleUserQueryFilter, filterTasksByResponsibleUser, RESPONSIBLE_USER_FILTERING, type ResponsibleUserFiltering, resolveResponsibleUser, } from './filter-helpers.js';
3
- export type Project = PersonalProject | WorkspaceProject;
4
- export { isPersonalProject, isWorkspaceProject };
5
- /**
6
- * Checks if a project ID represents the inbox (case-insensitive).
7
- *
8
- * @param projectId - The project ID to check
9
- * @returns true if the project ID is inbox-like
10
- */
11
- export declare function isInboxProjectId(projectId: string | undefined): boolean;
12
- /**
13
- * Resolves "inbox" project ID to actual inbox project ID (case-insensitive).
14
- * Only makes API calls when necessary (when projectId is inbox-like and user not provided).
15
- *
16
- * @param args - Configuration object
17
- * @param args.projectId - The project ID to resolve (may be "inbox", "Inbox", etc.)
18
- * @param args.user - The current user object (if already fetched)
19
- * @param args.client - The API client (if user needs to be fetched)
20
- * @returns Promise resolving to the resolved project ID
21
- */
22
- export declare function resolveInboxProjectId(args: {
23
- projectId: string | undefined;
24
- user?: CurrentUser;
25
- client?: TodoistApi;
26
- }): Promise<string | undefined>;
27
- /**
28
- * Generic pagination utility for Todoist API methods
29
- *
30
- * Recursively fetches all pages of data from paginated Todoist API endpoints.
31
- *
32
- * @template TArgs - The type of arguments accepted by the API method
33
- * @template TResponse - The type of response returned by the API method
34
- * @template TResult - The type of individual result items in the response
35
- *
36
- * @param options - Configuration options
37
- * @param options.apiMethod - The Todoist API method to call (e.g., todoistApi.getLabels)
38
- * @param options.args - Initial arguments to pass to the API method (excluding cursor and limit)
39
- * @param options.limit - Number of items to fetch per page (default: 100)
40
- * @returns Promise resolving to an array of all result items across all pages
41
- *
42
- * @example
43
- * const allLabels = await fetchAllPages({
44
- * apiMethod: (args) => todoistApi.getLabels(args),
45
- * args: {},
46
- * limit: 100
47
- * })
48
- */
49
- export declare function fetchAllPages<TArgs extends {
50
- cursor?: string | null;
51
- limit?: number;
52
- }, TResponse extends {
53
- results: TResult[];
54
- nextCursor: string | null;
55
- }, TResult>(options: {
56
- apiMethod: (args: TArgs) => Promise<TResponse>;
57
- args?: Omit<TArgs, 'cursor' | 'limit'>;
58
- limit?: number;
59
- }): Promise<TResult[]>;
60
- /**
61
- * Wraps a search query with wildcards for substring matching.
62
- * If the query already contains unescaped wildcards, it is returned as-is
63
- * to preserve intentional wildcard patterns (e.g. prefix matching with "work*").
64
- */
65
- export declare function toWildcardQuery(query: string): string;
66
- /**
67
- * Searches projects by name and fetches all matching pages.
68
- *
69
- * @param client - The Todoist API client
70
- * @param query - The search query string
71
- * @returns Promise resolving to array of matching projects
72
- */
73
- export declare function searchAllProjects(client: TodoistApi, query: string): Promise<Project[]>;
74
- /**
75
- * Searches labels by name and fetches all matching pages.
76
- *
77
- * @param client - The Todoist API client
78
- * @param query - The search query string
79
- * @returns Promise resolving to array of matching labels
80
- */
81
- export declare function searchAllLabels(client: TodoistApi, query: string): Promise<Label[]>;
82
- export declare function fetchAllSharedLabels(client: TodoistApi): Promise<string[]>;
83
- /**
84
- * Searches sections by name (optionally scoped to a project) and fetches all matching pages.
85
- *
86
- * @param client - The Todoist API client
87
- * @param query - The search query string
88
- * @param projectId - Optional project ID to scope the search
89
- * @returns Promise resolving to array of matching sections
90
- */
91
- export declare function searchAllSections(client: TodoistApi, query: string, projectId?: string): Promise<Section[]>;
92
- /**
93
- * Creates a MoveTaskArgs object from move parameters, validating that exactly one is provided.
94
- * @param taskId - The task ID (used for error messages)
95
- * @param projectId - Optional project ID to move to
96
- * @param sectionId - Optional section ID to move to
97
- * @param parentId - Optional parent ID to move to
98
- * @returns MoveTaskArgs object with exactly one destination
99
- * @throws Error if multiple move parameters are provided or none are provided
100
- */
101
- export declare function createMoveTaskArgs(taskId: string, projectId?: string, sectionId?: string, parentId?: string): MoveTaskArgs;
102
- /**
103
- * Map a single Todoist task to a more structured format, for LLM consumption.
104
- * @param task - The task to map.
105
- * @returns The mapped task.
106
- */
107
- declare function mapTask(task: Task): {
108
- id: string;
109
- content: string;
110
- description: string;
111
- dueDate: string | undefined;
112
- recurring: string | boolean;
113
- deadlineDate: string | undefined;
114
- priority: "p1" | "p2" | "p3" | "p4";
115
- projectId: string;
116
- sectionId: string | undefined;
117
- parentId: string | undefined;
118
- labels: string[];
119
- duration: string | undefined;
120
- responsibleUid: string | undefined;
121
- assignedByUid: string | undefined;
122
- checked: boolean;
123
- completedAt: string | undefined;
124
- };
125
- type MappedTask = ReturnType<typeof mapTask>;
126
- /**
127
- * Map a single Todoist project to a more structured format, for LLM consumption.
128
- * @param project - The project to map.
129
- * @returns The mapped project.
130
- */
131
- declare function mapProject(project: Project): {
132
- id: string;
133
- name: string;
134
- color: ColorKey;
135
- isFavorite: boolean;
136
- isShared: boolean;
137
- parentId: string | undefined;
138
- inboxProject: boolean;
139
- viewStyle: string;
140
- workspaceId: string | undefined;
141
- folderId: string | undefined;
142
- childOrder: number;
143
- };
144
- /**
145
- * Map a single Todoist comment to a more structured format, for LLM consumption.
146
- * @param comment - The comment to map.
147
- * @returns The mapped comment.
148
- */
149
- declare function mapComment(comment: Comment): {
150
- id: string;
151
- taskId: string | undefined;
152
- projectId: string | undefined;
153
- content: string;
154
- postedAt: string;
155
- postedUid: string;
156
- fileAttachment: {
157
- resourceType: string;
158
- fileName: string | undefined;
159
- fileSize: number | undefined;
160
- fileType: string | undefined;
161
- fileUrl: string | undefined;
162
- fileDuration: number | undefined;
163
- uploadState: "completed" | "pending" | undefined;
164
- url: string | undefined;
165
- title: string | undefined;
166
- image: string | undefined;
167
- imageWidth: number | undefined;
168
- imageHeight: number | undefined;
169
- } | undefined;
170
- };
171
- /**
172
- * Map a single Todoist activity event to a more structured format, for LLM consumption.
173
- * @param event - The activity event to map.
174
- * @returns The mapped activity event.
175
- */
176
- declare function mapActivityEvent(event: ActivityEvent): {
177
- id: string | undefined;
178
- objectType: string;
179
- objectId: string;
180
- eventType: string;
181
- eventDate: string;
182
- parentProjectId: string | undefined;
183
- parentItemId: string | undefined;
184
- initiatorId: string | undefined;
185
- extraData: Record<string, any> | undefined;
186
- };
187
- declare function getTasksByFilter({ client, query, limit, cursor, }: {
188
- client: TodoistApi;
189
- query: string;
190
- limit: number | undefined;
191
- cursor: string | undefined;
192
- }): Promise<{
193
- tasks: {
194
- id: string;
195
- content: string;
196
- description: string;
197
- dueDate: string | undefined;
198
- recurring: string | boolean;
199
- deadlineDate: string | undefined;
200
- priority: "p1" | "p2" | "p3" | "p4";
201
- projectId: string;
202
- sectionId: string | undefined;
203
- parentId: string | undefined;
204
- labels: string[];
205
- duration: string | undefined;
206
- responsibleUid: string | undefined;
207
- assignedByUid: string | undefined;
208
- checked: boolean;
209
- completedAt: string | undefined;
210
- }[];
211
- nextCursor: string | null;
212
- }>;
213
- /**
214
- * Map a single Todoist reminder to a more structured format, for LLM consumption.
215
- * Normalizes SDK's `itemId` to `taskId` for consistency with other tools.
216
- * @param reminder - The reminder to map (any of the 3 types).
217
- * @returns The mapped reminder.
218
- */
219
- declare function mapReminder(reminder: Reminder): {
220
- minuteOffset: number;
221
- due: {
222
- isRecurring: boolean;
223
- string: string;
224
- date: string;
225
- datetime: string | undefined;
226
- timezone: string | undefined;
227
- } | undefined;
228
- isUrgent: boolean | undefined;
229
- id: string;
230
- taskId: string;
231
- type: "location" | "absolute" | "relative";
232
- } | {
233
- due: {
234
- isRecurring: boolean;
235
- string: string;
236
- date: string;
237
- datetime: string | undefined;
238
- timezone: string | undefined;
239
- };
240
- isUrgent: boolean | undefined;
241
- id: string;
242
- taskId: string;
243
- type: "location" | "absolute" | "relative";
244
- } | {
245
- name: string;
246
- locLat: string;
247
- locLong: string;
248
- locTrigger: "on_enter" | "on_leave";
249
- radius: number;
250
- id: string;
251
- taskId: string;
252
- type: "location" | "absolute" | "relative";
253
- };
254
- /**
255
- * Count reminders by category: time-based (relative/absolute) and location.
256
- */
257
- declare function countRemindersByType(reminders: {
258
- type: string;
259
- }[]): {
260
- timeBasedCount: number;
261
- locationCount: number;
262
- };
263
- export type { MappedTask };
264
- export { countRemindersByType, getTasksByFilter, mapActivityEvent, mapComment, mapProject, mapReminder, mapTask, };
265
- //# sourceMappingURL=tool-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../src/tool-helpers.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- import { z } from 'zod';
2
- declare const addComments: {
3
- name: "add-comments";
4
- description: string;
5
- parameters: {
6
- comments: z.ZodArray<z.ZodObject<{
7
- taskId: z.ZodOptional<z.ZodString>;
8
- projectId: z.ZodOptional<z.ZodString>;
9
- content: z.ZodString;
10
- }, z.core.$strip>>;
11
- };
12
- outputSchema: {
13
- comments: z.ZodArray<z.ZodObject<{
14
- id: z.ZodString;
15
- taskId: z.ZodOptional<z.ZodString>;
16
- projectId: z.ZodOptional<z.ZodString>;
17
- content: z.ZodString;
18
- postedAt: z.ZodString;
19
- postedUid: z.ZodOptional<z.ZodString>;
20
- fileAttachment: z.ZodOptional<z.ZodObject<{
21
- resourceType: z.ZodString;
22
- fileName: z.ZodOptional<z.ZodString>;
23
- fileSize: z.ZodOptional<z.ZodNumber>;
24
- fileType: z.ZodOptional<z.ZodString>;
25
- fileUrl: z.ZodOptional<z.ZodString>;
26
- fileDuration: z.ZodOptional<z.ZodNumber>;
27
- uploadState: z.ZodOptional<z.ZodEnum<{
28
- completed: "completed";
29
- pending: "pending";
30
- }>>;
31
- url: z.ZodOptional<z.ZodString>;
32
- title: z.ZodOptional<z.ZodString>;
33
- image: z.ZodOptional<z.ZodString>;
34
- imageWidth: z.ZodOptional<z.ZodNumber>;
35
- imageHeight: z.ZodOptional<z.ZodNumber>;
36
- }, z.core.$strip>>;
37
- }, z.core.$strip>>;
38
- totalCount: z.ZodNumber;
39
- addedCommentIds: z.ZodArray<z.ZodString>;
40
- };
41
- annotations: {
42
- readOnlyHint: false;
43
- destructiveHint: false;
44
- idempotentHint: false;
45
- };
46
- execute(args: {
47
- comments: {
48
- content: string;
49
- taskId?: string | undefined;
50
- projectId?: string | undefined;
51
- }[];
52
- }, client: import('@doist/todoist-sdk').TodoistApi): Promise<{
53
- textContent: string;
54
- structuredContent: {
55
- comments: {
56
- id: string;
57
- taskId: string | undefined;
58
- projectId: string | undefined;
59
- content: string;
60
- postedAt: string;
61
- postedUid: string;
62
- fileAttachment: {
63
- resourceType: string;
64
- fileName: string | undefined;
65
- fileSize: number | undefined;
66
- fileType: string | undefined;
67
- fileUrl: string | undefined;
68
- fileDuration: number | undefined;
69
- uploadState: "completed" | "pending" | undefined;
70
- url: string | undefined;
71
- title: string | undefined;
72
- image: string | undefined;
73
- imageWidth: number | undefined;
74
- imageHeight: number | undefined;
75
- } | undefined;
76
- }[];
77
- totalCount: number;
78
- addedCommentIds: string[];
79
- };
80
- }>;
81
- };
82
- export { addComments };
83
- //# sourceMappingURL=add-comments.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-comments.d.ts","sourceRoot":"","sources":["../../src/tools/add-comments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA2BvB,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuD8C,CAAA;AAsB/D,OAAO,EAAE,WAAW,EAAE,CAAA"}