@standardbeagle/dart-query 0.3.2

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 (128) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +427 -0
  3. package/TOOLS.md +2148 -0
  4. package/dist/api/dartClient.d.ts +123 -0
  5. package/dist/api/dartClient.d.ts.map +1 -0
  6. package/dist/api/dartClient.js +436 -0
  7. package/dist/api/dartClient.js.map +1 -0
  8. package/dist/batch/batchOperations.d.ts +14 -0
  9. package/dist/batch/batchOperations.d.ts.map +1 -0
  10. package/dist/batch/batchOperations.js +65 -0
  11. package/dist/batch/batchOperations.js.map +1 -0
  12. package/dist/cache/configCache.d.ts +20 -0
  13. package/dist/cache/configCache.d.ts.map +1 -0
  14. package/dist/cache/configCache.js +59 -0
  15. package/dist/cache/configCache.js.map +1 -0
  16. package/dist/index.d.ts +3 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +1120 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/parsers/csv.d.ts +44 -0
  21. package/dist/parsers/csv.d.ts.map +1 -0
  22. package/dist/parsers/csv.js +574 -0
  23. package/dist/parsers/csv.js.map +1 -0
  24. package/dist/parsers/dartql.d.ts +104 -0
  25. package/dist/parsers/dartql.d.ts.map +1 -0
  26. package/dist/parsers/dartql.js +889 -0
  27. package/dist/parsers/dartql.js.map +1 -0
  28. package/dist/tools/add_task_comment.d.ts +3 -0
  29. package/dist/tools/add_task_comment.d.ts.map +1 -0
  30. package/dist/tools/add_task_comment.js +43 -0
  31. package/dist/tools/add_task_comment.js.map +1 -0
  32. package/dist/tools/add_time_tracking.d.ts +3 -0
  33. package/dist/tools/add_time_tracking.d.ts.map +1 -0
  34. package/dist/tools/add_time_tracking.js +52 -0
  35. package/dist/tools/add_time_tracking.js.map +1 -0
  36. package/dist/tools/attach_url.d.ts +3 -0
  37. package/dist/tools/attach_url.d.ts.map +1 -0
  38. package/dist/tools/attach_url.js +38 -0
  39. package/dist/tools/attach_url.js.map +1 -0
  40. package/dist/tools/batch_delete_tasks.d.ts +3 -0
  41. package/dist/tools/batch_delete_tasks.d.ts.map +1 -0
  42. package/dist/tools/batch_delete_tasks.js +125 -0
  43. package/dist/tools/batch_delete_tasks.js.map +1 -0
  44. package/dist/tools/batch_update_tasks.d.ts +3 -0
  45. package/dist/tools/batch_update_tasks.d.ts.map +1 -0
  46. package/dist/tools/batch_update_tasks.js +327 -0
  47. package/dist/tools/batch_update_tasks.js.map +1 -0
  48. package/dist/tools/create_doc.d.ts +3 -0
  49. package/dist/tools/create_doc.d.ts.map +1 -0
  50. package/dist/tools/create_doc.js +65 -0
  51. package/dist/tools/create_doc.js.map +1 -0
  52. package/dist/tools/create_task.d.ts +3 -0
  53. package/dist/tools/create_task.d.ts.map +1 -0
  54. package/dist/tools/create_task.js +143 -0
  55. package/dist/tools/create_task.js.map +1 -0
  56. package/dist/tools/delete_doc.d.ts +3 -0
  57. package/dist/tools/delete_doc.d.ts.map +1 -0
  58. package/dist/tools/delete_doc.js +35 -0
  59. package/dist/tools/delete_doc.js.map +1 -0
  60. package/dist/tools/delete_task.d.ts +3 -0
  61. package/dist/tools/delete_task.d.ts.map +1 -0
  62. package/dist/tools/delete_task.js +35 -0
  63. package/dist/tools/delete_task.js.map +1 -0
  64. package/dist/tools/get_batch_status.d.ts +3 -0
  65. package/dist/tools/get_batch_status.d.ts.map +1 -0
  66. package/dist/tools/get_batch_status.js +24 -0
  67. package/dist/tools/get_batch_status.js.map +1 -0
  68. package/dist/tools/get_config.d.ts +3 -0
  69. package/dist/tools/get_config.d.ts.map +1 -0
  70. package/dist/tools/get_config.js +74 -0
  71. package/dist/tools/get_config.js.map +1 -0
  72. package/dist/tools/get_dartboard.d.ts +3 -0
  73. package/dist/tools/get_dartboard.d.ts.map +1 -0
  74. package/dist/tools/get_dartboard.js +43 -0
  75. package/dist/tools/get_dartboard.js.map +1 -0
  76. package/dist/tools/get_doc.d.ts +3 -0
  77. package/dist/tools/get_doc.d.ts.map +1 -0
  78. package/dist/tools/get_doc.js +34 -0
  79. package/dist/tools/get_doc.js.map +1 -0
  80. package/dist/tools/get_folder.d.ts +3 -0
  81. package/dist/tools/get_folder.d.ts.map +1 -0
  82. package/dist/tools/get_folder.js +45 -0
  83. package/dist/tools/get_folder.js.map +1 -0
  84. package/dist/tools/get_task.d.ts +3 -0
  85. package/dist/tools/get_task.d.ts.map +1 -0
  86. package/dist/tools/get_task.js +109 -0
  87. package/dist/tools/get_task.js.map +1 -0
  88. package/dist/tools/import_tasks_csv.d.ts +3 -0
  89. package/dist/tools/import_tasks_csv.d.ts.map +1 -0
  90. package/dist/tools/import_tasks_csv.js +218 -0
  91. package/dist/tools/import_tasks_csv.js.map +1 -0
  92. package/dist/tools/info.d.ts +3 -0
  93. package/dist/tools/info.d.ts.map +1 -0
  94. package/dist/tools/info.js +474 -0
  95. package/dist/tools/info.js.map +1 -0
  96. package/dist/tools/list_comments.d.ts +3 -0
  97. package/dist/tools/list_comments.d.ts.map +1 -0
  98. package/dist/tools/list_comments.js +46 -0
  99. package/dist/tools/list_comments.js.map +1 -0
  100. package/dist/tools/list_docs.d.ts +3 -0
  101. package/dist/tools/list_docs.d.ts.map +1 -0
  102. package/dist/tools/list_docs.js +101 -0
  103. package/dist/tools/list_docs.js.map +1 -0
  104. package/dist/tools/list_tasks.d.ts +3 -0
  105. package/dist/tools/list_tasks.d.ts.map +1 -0
  106. package/dist/tools/list_tasks.js +325 -0
  107. package/dist/tools/list_tasks.js.map +1 -0
  108. package/dist/tools/move_task.d.ts +3 -0
  109. package/dist/tools/move_task.d.ts.map +1 -0
  110. package/dist/tools/move_task.js +44 -0
  111. package/dist/tools/move_task.js.map +1 -0
  112. package/dist/tools/search_tasks.d.ts +3 -0
  113. package/dist/tools/search_tasks.d.ts.map +1 -0
  114. package/dist/tools/search_tasks.js +227 -0
  115. package/dist/tools/search_tasks.js.map +1 -0
  116. package/dist/tools/update_doc.d.ts +3 -0
  117. package/dist/tools/update_doc.d.ts.map +1 -0
  118. package/dist/tools/update_doc.js +102 -0
  119. package/dist/tools/update_doc.js.map +1 -0
  120. package/dist/tools/update_task.d.ts +3 -0
  121. package/dist/tools/update_task.d.ts.map +1 -0
  122. package/dist/tools/update_task.js +241 -0
  123. package/dist/tools/update_task.js.map +1 -0
  124. package/dist/types/index.d.ts +529 -0
  125. package/dist/types/index.d.ts.map +1 -0
  126. package/dist/types/index.js +65 -0
  127. package/dist/types/index.js.map +1 -0
  128. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete_doc.js","sourceRoot":"","sources":["../../src/tools/delete_doc.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAC;AAc3B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAqB;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAE1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CACpB,4GAA4G,EAC5G,GAAG,CACJ,CAAC;IACJ,CAAC;IAKD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,YAAY,CACpB,yCAAyC,EACzC,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACpF,MAAM,IAAI,YAAY,CACpB,mDAAmD,EACnD,GAAG,CACJ,CAAC;IACJ,CAAC;IAKD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAErD,IAAI,MAA4C,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9D,MAAM,IAAI,YAAY,CACpB,gDAAgD,KAAK,CAAC,MAAM,uBAAuB,EACnF,GAAG,EACH,KAAK,CAAC,QAAQ,CACf,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,YAAY,CACpB,8BAA8B,KAAK,CAAC,OAAO,EAAE,EAC7C,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,QAAQ,CACf,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAKD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,aAAa,MAAM,CAAC,MAAM,6EAA6E;KACjH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { DeleteTaskInput, DeleteTaskOutput } from '../types/index.js';
2
+ export declare function handleDeleteTask(input: DeleteTaskInput): Promise<DeleteTaskOutput>;
3
+ //# sourceMappingURL=delete_task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete_task.d.ts","sourceRoot":"","sources":["../../src/tools/delete_task.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,eAAe,EACf,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAkB3B,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgExF"}
@@ -0,0 +1,35 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { DartAPIError, ValidationError, } from '../types/index.js';
3
+ export async function handleDeleteTask(input) {
4
+ const DART_TOKEN = process.env.DART_TOKEN;
5
+ if (!DART_TOKEN) {
6
+ throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
7
+ }
8
+ if (!input || typeof input !== 'object') {
9
+ throw new ValidationError('input is required and must be an object', 'input');
10
+ }
11
+ if (!input.dart_id || typeof input.dart_id !== 'string' || input.dart_id.trim() === '') {
12
+ throw new ValidationError('dart_id is required and must be a non-empty string', 'dart_id');
13
+ }
14
+ const client = new DartClient({ token: DART_TOKEN });
15
+ let deleteResult;
16
+ try {
17
+ deleteResult = await client.deleteTask(input.dart_id);
18
+ }
19
+ catch (error) {
20
+ if (error instanceof DartAPIError && error.statusCode === 404) {
21
+ throw new DartAPIError(`Task not found: No task with dart_id "${input.dart_id}" exists in workspace`, 404, error.response);
22
+ }
23
+ if (error instanceof DartAPIError) {
24
+ throw new DartAPIError(`Failed to delete task: ${error.message}`, error.statusCode, error.response);
25
+ }
26
+ throw error;
27
+ }
28
+ return {
29
+ dart_id: deleteResult.dart_id,
30
+ deleted: true,
31
+ recoverable: true,
32
+ message: `Task "${input.dart_id}" has been moved to trash. You can restore it from the Dart web UI at https://app.dartai.com/`,
33
+ };
34
+ }
35
+ //# sourceMappingURL=delete_task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete_task.js","sourceRoot":"","sources":["../../src/tools/delete_task.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,eAAe,GAGhB,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAsB;IAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAE1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CACpB,4GAA4G,EAC5G,GAAG,CACJ,CAAC;IACJ,CAAC;IAKD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CACvB,yCAAyC,EACzC,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvF,MAAM,IAAI,eAAe,CACvB,oDAAoD,EACpD,SAAS,CACV,CAAC;IACJ,CAAC;IAKD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAErD,IAAI,YAAmD,CAAC;IACxD,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9D,MAAM,IAAI,YAAY,CACpB,yCAAyC,KAAK,CAAC,OAAO,uBAAuB,EAC7E,GAAG,EACH,KAAK,CAAC,QAAQ,CACf,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,YAAY,CACpB,0BAA0B,KAAK,CAAC,OAAO,EAAE,EACzC,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,QAAQ,CACf,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAKD,OAAO;QACL,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,SAAS,KAAK,CAAC,OAAO,+FAA+F;KAC/H,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { GetBatchStatusInput, GetBatchStatusOutput } from '../types/index.js';
2
+ export declare function handleGetBatchStatus(input: GetBatchStatusInput): Promise<GetBatchStatusOutput>;
3
+ //# sourceMappingURL=get_batch_status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_batch_status.d.ts","sourceRoot":"","sources":["../../src/tools/get_batch_status.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EAErB,MAAM,mBAAmB,CAAC;AAW3B,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAsC/B"}
@@ -0,0 +1,24 @@
1
+ import { getBatchOperation } from '../batch/batchOperations.js';
2
+ import { ValidationError, } from '../types/index.js';
3
+ export async function handleGetBatchStatus(input) {
4
+ if (!input || typeof input !== 'object') {
5
+ throw new ValidationError('input is required and must be an object', 'input');
6
+ }
7
+ if (!input.batch_operation_id ||
8
+ typeof input.batch_operation_id !== 'string' ||
9
+ input.batch_operation_id.trim() === '') {
10
+ throw new ValidationError('batch_operation_id is required and must be a non-empty string', 'batch_operation_id');
11
+ }
12
+ const operation = getBatchOperation(input.batch_operation_id);
13
+ if (!operation) {
14
+ return {
15
+ found: false,
16
+ message: `Batch operation "${input.batch_operation_id}" not found. Operations are kept in memory for 1 hour after completion.`,
17
+ };
18
+ }
19
+ return {
20
+ found: true,
21
+ operation,
22
+ };
23
+ }
24
+ //# sourceMappingURL=get_batch_status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_batch_status.js","sourceRoot":"","sources":["../../src/tools/get_batch_status.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAGL,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAW3B,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAA0B;IAK1B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CAAC,yCAAyC,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAED,IACE,CAAC,KAAK,CAAC,kBAAkB;QACzB,OAAO,KAAK,CAAC,kBAAkB,KAAK,QAAQ;QAC5C,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,EACtC,CAAC;QACD,MAAM,IAAI,eAAe,CACvB,+DAA+D,EAC/D,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAKD,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAK9D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,oBAAoB,KAAK,CAAC,kBAAkB,yEAAyE;SAC/H,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { DartConfig, GetConfigInput } from '../types/index.js';
2
+ export declare function handleGetConfig(input: GetConfigInput): Promise<DartConfig>;
3
+ //# sourceMappingURL=get_config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_config.d.ts","sourceRoot":"","sources":["../../src/tools/get_config.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAC;AAgB7E,wBAAsB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA0GhF"}
@@ -0,0 +1,74 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { configCache } from '../cache/configCache.js';
3
+ import { DartAPIError } from '../types/index.js';
4
+ export async function handleGetConfig(input) {
5
+ const DART_TOKEN = process.env.DART_TOKEN;
6
+ if (!DART_TOKEN) {
7
+ throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
8
+ }
9
+ const client = new DartClient({ token: DART_TOKEN });
10
+ let config;
11
+ let cachedAtTimestamp;
12
+ if (!input.cache_bust) {
13
+ const cachedConfig = configCache.get();
14
+ if (cachedConfig) {
15
+ config = cachedConfig;
16
+ cachedAtTimestamp = cachedConfig.cached_at;
17
+ }
18
+ }
19
+ if (!config) {
20
+ try {
21
+ config = await client.getConfig();
22
+ const configWithTimestamp = {
23
+ ...config,
24
+ cached_at: new Date().toISOString(),
25
+ cache_ttl_seconds: configCache.getTTL(),
26
+ };
27
+ configCache.set(configWithTimestamp);
28
+ config = configWithTimestamp;
29
+ cachedAtTimestamp = configWithTimestamp.cached_at;
30
+ }
31
+ catch (error) {
32
+ if (error instanceof DartAPIError) {
33
+ if (error.statusCode === 401) {
34
+ throw new DartAPIError('Authentication failed: Invalid DART_TOKEN. Get a valid token from: https://app.dartai.com/?settings=account', 401, error.response);
35
+ }
36
+ else if (error.statusCode === 403) {
37
+ throw new DartAPIError('Access forbidden: Your DART_TOKEN does not have permission to access workspace configuration.', 403, error.response);
38
+ }
39
+ }
40
+ throw error;
41
+ }
42
+ }
43
+ const validSections = ['assignees', 'dartboards', 'statuses', 'tags', 'priorities', 'sizes', 'folders'];
44
+ if (input.include && Array.isArray(input.include)) {
45
+ for (const section of input.include) {
46
+ if (!validSections.includes(section)) {
47
+ throw new DartAPIError(`Invalid include section: "${section}". Valid sections: ${validSections.join(', ')}`, 400);
48
+ }
49
+ }
50
+ }
51
+ let finalConfig;
52
+ if (input.include && Array.isArray(input.include) && input.include.length > 0) {
53
+ finalConfig = {
54
+ assignees: input.include.includes('assignees') ? config.assignees : [],
55
+ dartboards: input.include.includes('dartboards') ? config.dartboards : [],
56
+ statuses: input.include.includes('statuses') ? config.statuses : [],
57
+ tags: input.include.includes('tags') ? config.tags : [],
58
+ priorities: input.include.includes('priorities') ? config.priorities : [],
59
+ sizes: input.include.includes('sizes') ? config.sizes : [],
60
+ folders: input.include.includes('folders') ? config.folders : [],
61
+ cached_at: cachedAtTimestamp || new Date().toISOString(),
62
+ cache_ttl_seconds: configCache.getTTL(),
63
+ };
64
+ }
65
+ else {
66
+ finalConfig = {
67
+ ...config,
68
+ cached_at: cachedAtTimestamp || new Date().toISOString(),
69
+ cache_ttl_seconds: configCache.getTTL(),
70
+ };
71
+ }
72
+ return finalConfig;
73
+ }
74
+ //# sourceMappingURL=get_config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_config.js","sourceRoot":"","sources":["../../src/tools/get_config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { GetDartboardInput, GetDartboardOutput } from '../types/index.js';
2
+ export declare function handleGetDartboard(input: GetDartboardInput): Promise<GetDartboardOutput>;
3
+ //# sourceMappingURL=get_dartboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_dartboard.d.ts","sourceRoot":"","sources":["../../src/tools/get_dartboard.ts"],"names":[],"mappings":"AASA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAKnB,MAAM,mBAAmB,CAAC;AAQ3B,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuD9F"}
@@ -0,0 +1,43 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { handleGetConfig } from './get_config.js';
3
+ import { DartAPIError, ValidationError, findDartboard, getDartboardNames, } from '../types/index.js';
4
+ export async function handleGetDartboard(input) {
5
+ const DART_TOKEN = process.env.DART_TOKEN;
6
+ if (!DART_TOKEN) {
7
+ throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
8
+ }
9
+ if (!input || typeof input !== 'object') {
10
+ throw new ValidationError('Input must be an object', 'input');
11
+ }
12
+ if (!input.dartboard_id || typeof input.dartboard_id !== 'string' || input.dartboard_id.trim() === '') {
13
+ throw new ValidationError('dartboard_id is required and must be a non-empty string', 'dartboard_id');
14
+ }
15
+ const config = await handleGetConfig({ cache_bust: false });
16
+ const dartboard = findDartboard(config.dartboards, input.dartboard_id.trim());
17
+ if (!dartboard) {
18
+ const dartboardNames = getDartboardNames(config.dartboards);
19
+ throw new ValidationError(`Dartboard "${input.dartboard_id}" not found. Available: ${dartboardNames.slice(0, 5).join(', ')}${dartboardNames.length > 5 ? '...' : ''}`, 'dartboard_id', dartboardNames);
20
+ }
21
+ const client = new DartClient({ token: DART_TOKEN });
22
+ try {
23
+ const result = await client.getDartboard(dartboard.dart_id);
24
+ return {
25
+ dart_id: result.dart_id,
26
+ name: result.name || dartboard.name,
27
+ description: result.description,
28
+ task_count: result.task_count,
29
+ url: `https://app.dartai.com/b/${result.dart_id}`,
30
+ };
31
+ }
32
+ catch (error) {
33
+ if (error instanceof DartAPIError && error.statusCode === 404) {
34
+ return {
35
+ dart_id: dartboard.dart_id,
36
+ name: dartboard.name,
37
+ url: `https://app.dartai.com/b/${dartboard.dart_id}`,
38
+ };
39
+ }
40
+ throw error;
41
+ }
42
+ }
43
+ //# sourceMappingURL=get_dartboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_dartboard.js","sourceRoot":"","sources":["../../src/tools/get_dartboard.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAGL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAwB;IAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAE1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CACpB,4GAA4G,EAC5G,GAAG,CACJ,CAAC;IACJ,CAAC;IAGD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtG,MAAM,IAAI,eAAe,CAAC,yDAAyD,EAAE,cAAc,CAAC,CAAC;IACvG,CAAC;IAGD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAE9E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5D,MAAM,IAAI,eAAe,CACvB,cAAc,KAAK,CAAC,YAAY,2BAA2B,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAC3I,cAAc,EACd,cAAc,CACf,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE5D,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI;YACnC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,GAAG,EAAE,4BAA4B,MAAM,CAAC,OAAO,EAAE;SAClD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,GAAG,EAAE,4BAA4B,SAAS,CAAC,OAAO,EAAE;aACrD,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { GetDocInput, GetDocOutput } from '../types/index.js';
2
+ export declare function handleGetDoc(input: GetDocInput): Promise<GetDocOutput>;
3
+ //# sourceMappingURL=get_doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_doc.d.ts","sourceRoot":"","sources":["../../src/tools/get_doc.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,WAAW,EACX,YAAY,EACb,MAAM,mBAAmB,CAAC;AAe3B,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAmE5E"}
@@ -0,0 +1,34 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { DartAPIError, } from '../types/index.js';
3
+ export async function handleGetDoc(input) {
4
+ const DART_TOKEN = process.env.DART_TOKEN;
5
+ if (!DART_TOKEN) {
6
+ throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
7
+ }
8
+ if (!input || typeof input !== 'object') {
9
+ throw new DartAPIError('input is required and must be an object', 400);
10
+ }
11
+ if (!input.doc_id || typeof input.doc_id !== 'string' || input.doc_id.trim() === '') {
12
+ throw new DartAPIError('doc_id is required and must be a non-empty string', 400);
13
+ }
14
+ const client = new DartClient({ token: DART_TOKEN });
15
+ let doc;
16
+ try {
17
+ doc = await client.getDoc(input.doc_id);
18
+ }
19
+ catch (error) {
20
+ if (error instanceof DartAPIError && error.statusCode === 404) {
21
+ throw new DartAPIError(`Document not found: No document with doc_id "${input.doc_id}" exists in workspace`, 404, error.response);
22
+ }
23
+ if (error instanceof DartAPIError) {
24
+ throw new DartAPIError(`Failed to retrieve document: ${error.message}`, error.statusCode, error.response);
25
+ }
26
+ throw error;
27
+ }
28
+ const deepLinkUrl = `https://app.dartai.com/doc/${doc.doc_id}`;
29
+ return {
30
+ doc,
31
+ url: deepLinkUrl,
32
+ };
33
+ }
34
+ //# sourceMappingURL=get_doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_doc.js","sourceRoot":"","sources":["../../src/tools/get_doc.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,YAAY,GAIb,MAAM,mBAAmB,CAAC;AAe3B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAkB;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAE1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CACpB,4GAA4G,EAC5G,GAAG,CACJ,CAAC;IACJ,CAAC;IAKD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,YAAY,CACpB,yCAAyC,EACzC,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACpF,MAAM,IAAI,YAAY,CACpB,mDAAmD,EACnD,GAAG,CACJ,CAAC;IACJ,CAAC;IAKD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAErD,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9D,MAAM,IAAI,YAAY,CACpB,gDAAgD,KAAK,CAAC,MAAM,uBAAuB,EACnF,GAAG,EACH,KAAK,CAAC,QAAQ,CACf,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,YAAY,CACpB,gCAAgC,KAAK,CAAC,OAAO,EAAE,EAC/C,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,QAAQ,CACf,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAKD,MAAM,WAAW,GAAG,8BAA8B,GAAG,CAAC,MAAM,EAAE,CAAC;IAK/D,OAAO;QACL,GAAG;QACH,GAAG,EAAE,WAAW;KACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { GetFolderInput, GetFolderOutput } from '../types/index.js';
2
+ export declare function handleGetFolder(input: GetFolderInput): Promise<GetFolderOutput>;
3
+ //# sourceMappingURL=get_folder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_folder.d.ts","sourceRoot":"","sources":["../../src/tools/get_folder.ts"],"names":[],"mappings":"AASA,OAAO,EACL,cAAc,EACd,eAAe,EAKhB,MAAM,mBAAmB,CAAC;AAQ3B,wBAAsB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA8DrF"}
@@ -0,0 +1,45 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { handleGetConfig } from './get_config.js';
3
+ import { DartAPIError, ValidationError, findFolder, getFolderNames, } from '../types/index.js';
4
+ export async function handleGetFolder(input) {
5
+ const DART_TOKEN = process.env.DART_TOKEN;
6
+ if (!DART_TOKEN) {
7
+ throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
8
+ }
9
+ if (!input || typeof input !== 'object') {
10
+ throw new ValidationError('Input must be an object', 'input');
11
+ }
12
+ if (!input.folder_id || typeof input.folder_id !== 'string' || input.folder_id.trim() === '') {
13
+ throw new ValidationError('folder_id is required and must be a non-empty string', 'folder_id');
14
+ }
15
+ const config = await handleGetConfig({ cache_bust: false });
16
+ if (!config.folders || config.folders.length === 0) {
17
+ throw new ValidationError('No folders found in workspace. Create a folder first in Dart AI.', 'folder_id');
18
+ }
19
+ const folder = findFolder(config.folders, input.folder_id.trim());
20
+ if (!folder) {
21
+ const folderNames = getFolderNames(config.folders);
22
+ throw new ValidationError(`Folder "${input.folder_id}" not found. Available: ${folderNames.slice(0, 5).join(', ')}${folderNames.length > 5 ? '...' : ''}`, 'folder_id', folderNames);
23
+ }
24
+ const client = new DartClient({ token: DART_TOKEN });
25
+ try {
26
+ const result = await client.getFolder(folder.dart_id);
27
+ return {
28
+ dart_id: result.dart_id,
29
+ name: result.name || folder.name,
30
+ doc_count: result.doc_count,
31
+ url: `https://app.dartai.com/folder/${result.dart_id}`,
32
+ };
33
+ }
34
+ catch (error) {
35
+ if (error instanceof DartAPIError && error.statusCode === 404) {
36
+ return {
37
+ dart_id: folder.dart_id,
38
+ name: folder.name,
39
+ url: `https://app.dartai.com/folder/${folder.dart_id}`,
40
+ };
41
+ }
42
+ throw error;
43
+ }
44
+ }
45
+ //# sourceMappingURL=get_folder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_folder.js","sourceRoot":"","sources":["../../src/tools/get_folder.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAGL,YAAY,EACZ,eAAe,EACf,UAAU,EACV,cAAc,GACf,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAqB;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAE1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CACpB,4GAA4G,EAC5G,GAAG,CACJ,CAAC;IACJ,CAAC;IAGD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7F,MAAM,IAAI,eAAe,CAAC,sDAAsD,EAAE,WAAW,CAAC,CAAC;IACjG,CAAC;IAGD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAE5D,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,eAAe,CACvB,kEAAkE,EAClE,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAElE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,IAAI,eAAe,CACvB,WAAW,KAAK,CAAC,SAAS,2BAA2B,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAC/H,WAAW,EACX,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI;YAChC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,GAAG,EAAE,iCAAiC,MAAM,CAAC,OAAO,EAAE;SACvD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,iCAAiC,MAAM,CAAC,OAAO,EAAE;aACvD,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { GetTaskInput, GetTaskOutput } from '../types/index.js';
2
+ export declare function handleGetTask(input: GetTaskInput): Promise<GetTaskOutput>;
3
+ //# sourceMappingURL=get_task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_task.d.ts","sourceRoot":"","sources":["../../src/tools/get_task.ts"],"names":[],"mappings":"AAaA,OAAO,EAIL,YAAY,EACZ,aAAa,EAId,MAAM,mBAAmB,CAAC;AA8G3B,wBAAsB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAgH/E"}
@@ -0,0 +1,109 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { DartAPIError, } from '../types/index.js';
3
+ function calculateRelationshipCounts(task) {
4
+ const subtasks = task.subtask_ids?.length ?? 0;
5
+ const blockers = task.blocker_ids?.length ?? 0;
6
+ const blocking = task.blocking_ids?.length ?? 0;
7
+ const duplicates = task.duplicate_ids?.length ?? 0;
8
+ const related = task.related_ids?.length ?? 0;
9
+ return {
10
+ subtasks,
11
+ blockers,
12
+ blocking,
13
+ duplicates,
14
+ related,
15
+ total: subtasks + blockers + blocking + duplicates + related,
16
+ };
17
+ }
18
+ async function fetchTaskSummaries(client, dartIds) {
19
+ if (!dartIds || dartIds.length === 0) {
20
+ return [];
21
+ }
22
+ const summaries = [];
23
+ const results = await Promise.allSettled(dartIds.map(async (dartId) => {
24
+ const task = await client.getTask(dartId);
25
+ return {
26
+ dart_id: task.dart_id,
27
+ title: task.title,
28
+ };
29
+ }));
30
+ for (const result of results) {
31
+ if (result.status === 'fulfilled') {
32
+ summaries.push(result.value);
33
+ }
34
+ }
35
+ return summaries;
36
+ }
37
+ async function fetchExpandedRelationships(client, task) {
38
+ const expanded = {};
39
+ const [subtasks, blockers, blocking, duplicates, related] = await Promise.all([
40
+ fetchTaskSummaries(client, task.subtask_ids ?? []),
41
+ fetchTaskSummaries(client, task.blocker_ids ?? []),
42
+ fetchTaskSummaries(client, task.blocking_ids ?? []),
43
+ fetchTaskSummaries(client, task.duplicate_ids ?? []),
44
+ fetchTaskSummaries(client, task.related_ids ?? []),
45
+ ]);
46
+ if (subtasks.length > 0)
47
+ expanded.subtasks = subtasks;
48
+ if (blockers.length > 0)
49
+ expanded.blockers = blockers;
50
+ if (blocking.length > 0)
51
+ expanded.blocking = blocking;
52
+ if (duplicates.length > 0)
53
+ expanded.duplicates = duplicates;
54
+ if (related.length > 0)
55
+ expanded.related = related;
56
+ return expanded;
57
+ }
58
+ function stripRelationshipFields(task) {
59
+ const { subtask_ids: _subtask_ids, blocker_ids: _blocker_ids, blocking_ids: _blocking_ids, duplicate_ids: _duplicate_ids, related_ids: _related_ids, ...taskWithoutRelationships } = task;
60
+ return taskWithoutRelationships;
61
+ }
62
+ export async function handleGetTask(input) {
63
+ const DART_TOKEN = process.env.DART_TOKEN;
64
+ if (!DART_TOKEN) {
65
+ throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
66
+ }
67
+ if (!input || typeof input !== 'object') {
68
+ throw new DartAPIError('input is required and must be an object', 400);
69
+ }
70
+ if (!input.dart_id || typeof input.dart_id !== 'string' || input.dart_id.trim() === '') {
71
+ throw new DartAPIError('dart_id is required and must be a non-empty string', 400);
72
+ }
73
+ const includeRelationships = input.include_relationships !== false;
74
+ const expandRelationships = input.expand_relationships === true;
75
+ const client = new DartClient({ token: DART_TOKEN });
76
+ let task;
77
+ try {
78
+ task = await client.getTask(input.dart_id);
79
+ }
80
+ catch (error) {
81
+ if (error instanceof DartAPIError && error.statusCode === 404) {
82
+ throw new DartAPIError(`Task not found: No task with dart_id "${input.dart_id}" exists in workspace`, 404, error.response);
83
+ }
84
+ if (error instanceof DartAPIError) {
85
+ throw new DartAPIError(`Failed to retrieve task: ${error.message}`, error.statusCode, error.response);
86
+ }
87
+ throw error;
88
+ }
89
+ const deepLinkUrl = `https://app.dartai.com/task/${task.dart_id}`;
90
+ let comments;
91
+ if (input.include_comments) {
92
+ comments = [];
93
+ }
94
+ const output = {
95
+ task: includeRelationships ? task : stripRelationshipFields(task),
96
+ url: deepLinkUrl,
97
+ };
98
+ if (input.include_comments) {
99
+ output.comments = comments;
100
+ }
101
+ if (includeRelationships) {
102
+ output.relationship_counts = calculateRelationshipCounts(task);
103
+ if (expandRelationships) {
104
+ output.expanded_relationships = await fetchExpandedRelationships(client, task);
105
+ }
106
+ }
107
+ return output;
108
+ }
109
+ //# sourceMappingURL=get_task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_task.js","sourceRoot":"","sources":["../../src/tools/get_task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ImportTasksCSVInput, ImportTasksCSVOutput } from '../types/index.js';
2
+ export declare function handleImportTasksCSV(input: ImportTasksCSVInput): Promise<ImportTasksCSVOutput>;
3
+ //# sourceMappingURL=import_tasks_csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import_tasks_csv.d.ts","sourceRoot":"","sources":["../../src/tools/import_tasks_csv.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EAOrB,MAAM,mBAAmB,CAAC;AAoB3B,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CA+V/B"}