mcp-taskflow 0.1.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 (187) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +275 -0
  4. package/dist/config/pathResolver.d.ts +33 -0
  5. package/dist/config/pathResolver.d.ts.map +1 -0
  6. package/dist/config/pathResolver.js +130 -0
  7. package/dist/config/pathResolver.js.map +1 -0
  8. package/dist/data/fileOperations.d.ts +43 -0
  9. package/dist/data/fileOperations.d.ts.map +1 -0
  10. package/dist/data/fileOperations.js +248 -0
  11. package/dist/data/fileOperations.js.map +1 -0
  12. package/dist/data/memoryStore.d.ts +86 -0
  13. package/dist/data/memoryStore.d.ts.map +1 -0
  14. package/dist/data/memoryStore.js +216 -0
  15. package/dist/data/memoryStore.js.map +1 -0
  16. package/dist/data/rulesStore.d.ts +63 -0
  17. package/dist/data/rulesStore.d.ts.map +1 -0
  18. package/dist/data/rulesStore.js +196 -0
  19. package/dist/data/rulesStore.js.map +1 -0
  20. package/dist/data/schemas.d.ts +840 -0
  21. package/dist/data/schemas.d.ts.map +1 -0
  22. package/dist/data/schemas.js +265 -0
  23. package/dist/data/schemas.js.map +1 -0
  24. package/dist/data/taskSearchService.d.ts +110 -0
  25. package/dist/data/taskSearchService.d.ts.map +1 -0
  26. package/dist/data/taskSearchService.js +165 -0
  27. package/dist/data/taskSearchService.js.map +1 -0
  28. package/dist/data/taskStore.d.ts +192 -0
  29. package/dist/data/taskStore.d.ts.map +1 -0
  30. package/dist/data/taskStore.js +347 -0
  31. package/dist/data/taskStore.js.map +1 -0
  32. package/dist/index.d.ts +23 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +86 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/prompts/index.d.ts +12 -0
  37. package/dist/prompts/index.d.ts.map +1 -0
  38. package/dist/prompts/index.js +17 -0
  39. package/dist/prompts/index.js.map +1 -0
  40. package/dist/prompts/projectPromptBuilder.d.ts +13 -0
  41. package/dist/prompts/projectPromptBuilder.d.ts.map +1 -0
  42. package/dist/prompts/projectPromptBuilder.js +29 -0
  43. package/dist/prompts/projectPromptBuilder.js.map +1 -0
  44. package/dist/prompts/researchPromptBuilder.d.ts +10 -0
  45. package/dist/prompts/researchPromptBuilder.d.ts.map +1 -0
  46. package/dist/prompts/researchPromptBuilder.js +20 -0
  47. package/dist/prompts/researchPromptBuilder.js.map +1 -0
  48. package/dist/prompts/taskPromptBuilders.d.ts +87 -0
  49. package/dist/prompts/taskPromptBuilders.d.ts.map +1 -0
  50. package/dist/prompts/taskPromptBuilders.js +529 -0
  51. package/dist/prompts/taskPromptBuilders.js.map +1 -0
  52. package/dist/prompts/templateEngine.d.ts +102 -0
  53. package/dist/prompts/templateEngine.d.ts.map +1 -0
  54. package/dist/prompts/templateEngine.js +145 -0
  55. package/dist/prompts/templateEngine.js.map +1 -0
  56. package/dist/prompts/templateLoader.d.ts +61 -0
  57. package/dist/prompts/templateLoader.d.ts.map +1 -0
  58. package/dist/prompts/templateLoader.js +129 -0
  59. package/dist/prompts/templateLoader.js.map +1 -0
  60. package/dist/prompts/templates/v1/templates_en/analyzeTask/index.md +65 -0
  61. package/dist/prompts/templates/v1/templates_en/analyzeTask/iteration.md +12 -0
  62. package/dist/prompts/templates/v1/templates_en/clearAllTasks/backupInfo.md +1 -0
  63. package/dist/prompts/templates/v1/templates_en/clearAllTasks/cancel.md +7 -0
  64. package/dist/prompts/templates/v1/templates_en/clearAllTasks/empty.md +5 -0
  65. package/dist/prompts/templates/v1/templates_en/clearAllTasks/index.md +5 -0
  66. package/dist/prompts/templates/v1/templates_en/clearAllTasks/result.md +7 -0
  67. package/dist/prompts/templates/v1/templates_en/clearAllTasks/success.md +5 -0
  68. package/dist/prompts/templates/v1/templates_en/deleteTask/completed.md +5 -0
  69. package/dist/prompts/templates/v1/templates_en/deleteTask/index.md +5 -0
  70. package/dist/prompts/templates/v1/templates_en/deleteTask/notFound.md +5 -0
  71. package/dist/prompts/templates/v1/templates_en/deleteTask/result.md +5 -0
  72. package/dist/prompts/templates/v1/templates_en/deleteTask/success.md +5 -0
  73. package/dist/prompts/templates/v1/templates_en/executeTask/analysisResult.md +3 -0
  74. package/dist/prompts/templates/v1/templates_en/executeTask/complexity.md +15 -0
  75. package/dist/prompts/templates/v1/templates_en/executeTask/dependencies.md +3 -0
  76. package/dist/prompts/templates/v1/templates_en/executeTask/dependencyTasks.md +3 -0
  77. package/dist/prompts/templates/v1/templates_en/executeTask/implementationGuide.md +3 -0
  78. package/dist/prompts/templates/v1/templates_en/executeTask/index.md +39 -0
  79. package/dist/prompts/templates/v1/templates_en/executeTask/notes.md +1 -0
  80. package/dist/prompts/templates/v1/templates_en/executeTask/relatedFilesSummary.md +5 -0
  81. package/dist/prompts/templates/v1/templates_en/executeTask/verificationCriteria.md +3 -0
  82. package/dist/prompts/templates/v1/templates_en/getTaskDetail/complatedSummary.md +5 -0
  83. package/dist/prompts/templates/v1/templates_en/getTaskDetail/dependencies.md +1 -0
  84. package/dist/prompts/templates/v1/templates_en/getTaskDetail/error.md +3 -0
  85. package/dist/prompts/templates/v1/templates_en/getTaskDetail/implementationGuide.md +3 -0
  86. package/dist/prompts/templates/v1/templates_en/getTaskDetail/index.md +25 -0
  87. package/dist/prompts/templates/v1/templates_en/getTaskDetail/notFound.md +3 -0
  88. package/dist/prompts/templates/v1/templates_en/getTaskDetail/notes.md +1 -0
  89. package/dist/prompts/templates/v1/templates_en/getTaskDetail/relatedFiles.md +3 -0
  90. package/dist/prompts/templates/v1/templates_en/getTaskDetail/verificationCriteria.md +3 -0
  91. package/dist/prompts/templates/v1/templates_en/initProjectRules/index.md +81 -0
  92. package/dist/prompts/templates/v1/templates_en/listTasks/index.md +7 -0
  93. package/dist/prompts/templates/v1/templates_en/listTasks/notFound.md +3 -0
  94. package/dist/prompts/templates/v1/templates_en/listTasks/taskDetails.md +13 -0
  95. package/dist/prompts/templates/v1/templates_en/planTask/hasThought.md +4 -0
  96. package/dist/prompts/templates/v1/templates_en/planTask/index.md +96 -0
  97. package/dist/prompts/templates/v1/templates_en/planTask/noThought.md +4 -0
  98. package/dist/prompts/templates/v1/templates_en/planTask/tasks.md +17 -0
  99. package/dist/prompts/templates/v1/templates_en/processThought/complatedThought.md +6 -0
  100. package/dist/prompts/templates/v1/templates_en/processThought/index.md +13 -0
  101. package/dist/prompts/templates/v1/templates_en/processThought/moreThought.md +1 -0
  102. package/dist/prompts/templates/v1/templates_en/queryTask/index.md +24 -0
  103. package/dist/prompts/templates/v1/templates_en/queryTask/notFound.md +15 -0
  104. package/dist/prompts/templates/v1/templates_en/queryTask/taskDetails.md +5 -0
  105. package/dist/prompts/templates/v1/templates_en/reflectTask/index.md +57 -0
  106. package/dist/prompts/templates/v1/templates_en/researchMode/index.md +95 -0
  107. package/dist/prompts/templates/v1/templates_en/researchMode/previousState.md +9 -0
  108. package/dist/prompts/templates/v1/templates_en/splitTasks/index.md +34 -0
  109. package/dist/prompts/templates/v1/templates_en/splitTasks/taskDetails.md +12 -0
  110. package/dist/prompts/templates/v1/templates_en/tests/basic.md +1 -0
  111. package/dist/prompts/templates/v1/templates_en/toolsDescription/analyzeTask.md +1 -0
  112. package/dist/prompts/templates/v1/templates_en/toolsDescription/clearAllTasks.md +1 -0
  113. package/dist/prompts/templates/v1/templates_en/toolsDescription/deleteTask.md +1 -0
  114. package/dist/prompts/templates/v1/templates_en/toolsDescription/executeTask.md +1 -0
  115. package/dist/prompts/templates/v1/templates_en/toolsDescription/getTaskDetail.md +1 -0
  116. package/dist/prompts/templates/v1/templates_en/toolsDescription/initProjectRules.md +1 -0
  117. package/dist/prompts/templates/v1/templates_en/toolsDescription/listTasks.md +1 -0
  118. package/dist/prompts/templates/v1/templates_en/toolsDescription/planTask.md +3 -0
  119. package/dist/prompts/templates/v1/templates_en/toolsDescription/processThought.md +1 -0
  120. package/dist/prompts/templates/v1/templates_en/toolsDescription/queryTask.md +1 -0
  121. package/dist/prompts/templates/v1/templates_en/toolsDescription/reflectTask.md +1 -0
  122. package/dist/prompts/templates/v1/templates_en/toolsDescription/researchMode.md +1 -0
  123. package/dist/prompts/templates/v1/templates_en/toolsDescription/splitTasks.md +83 -0
  124. package/dist/prompts/templates/v1/templates_en/toolsDescription/updateTask.md +1 -0
  125. package/dist/prompts/templates/v1/templates_en/toolsDescription/verifyTask.md +37 -0
  126. package/dist/prompts/templates/v1/templates_en/updateTaskContent/emptyUpdate.md +5 -0
  127. package/dist/prompts/templates/v1/templates_en/updateTaskContent/fileDetails.md +1 -0
  128. package/dist/prompts/templates/v1/templates_en/updateTaskContent/index.md +7 -0
  129. package/dist/prompts/templates/v1/templates_en/updateTaskContent/notFound.md +5 -0
  130. package/dist/prompts/templates/v1/templates_en/updateTaskContent/success.md +9 -0
  131. package/dist/prompts/templates/v1/templates_en/updateTaskContent/successDetails.md +3 -0
  132. package/dist/prompts/templates/v1/templates_en/updateTaskContent/validation.md +5 -0
  133. package/dist/prompts/templates/v1/templates_en/verifyTask/index.md +19 -0
  134. package/dist/prompts/templates/v1/templates_en/verifyTask/noPass.md +12 -0
  135. package/dist/prompts/thoughtPromptBuilder.d.ts +11 -0
  136. package/dist/prompts/thoughtPromptBuilder.d.ts.map +1 -0
  137. package/dist/prompts/thoughtPromptBuilder.js +30 -0
  138. package/dist/prompts/thoughtPromptBuilder.js.map +1 -0
  139. package/dist/server/container.d.ts +111 -0
  140. package/dist/server/container.d.ts.map +1 -0
  141. package/dist/server/container.js +135 -0
  142. package/dist/server/container.js.map +1 -0
  143. package/dist/server/logger.d.ts +98 -0
  144. package/dist/server/logger.d.ts.map +1 -0
  145. package/dist/server/logger.js +295 -0
  146. package/dist/server/logger.js.map +1 -0
  147. package/dist/server/mcpServer.d.ts +162 -0
  148. package/dist/server/mcpServer.d.ts.map +1 -0
  149. package/dist/server/mcpServer.js +236 -0
  150. package/dist/server/mcpServer.js.map +1 -0
  151. package/dist/tools/project/index.d.ts +7 -0
  152. package/dist/tools/project/index.d.ts.map +1 -0
  153. package/dist/tools/project/index.js +7 -0
  154. package/dist/tools/project/index.js.map +1 -0
  155. package/dist/tools/project/projectTools.d.ts +17 -0
  156. package/dist/tools/project/projectTools.d.ts.map +1 -0
  157. package/dist/tools/project/projectTools.js +73 -0
  158. package/dist/tools/project/projectTools.js.map +1 -0
  159. package/dist/tools/research/index.d.ts +7 -0
  160. package/dist/tools/research/index.d.ts.map +1 -0
  161. package/dist/tools/research/index.js +7 -0
  162. package/dist/tools/research/index.js.map +1 -0
  163. package/dist/tools/research/researchTools.d.ts +16 -0
  164. package/dist/tools/research/researchTools.d.ts.map +1 -0
  165. package/dist/tools/research/researchTools.js +41 -0
  166. package/dist/tools/research/researchTools.js.map +1 -0
  167. package/dist/tools/task/index.d.ts +8 -0
  168. package/dist/tools/task/index.d.ts.map +1 -0
  169. package/dist/tools/task/index.js +8 -0
  170. package/dist/tools/task/index.js.map +1 -0
  171. package/dist/tools/task/taskTools.d.ts +32 -0
  172. package/dist/tools/task/taskTools.d.ts.map +1 -0
  173. package/dist/tools/task/taskTools.js +542 -0
  174. package/dist/tools/task/taskTools.js.map +1 -0
  175. package/dist/tools/thought/index.d.ts +7 -0
  176. package/dist/tools/thought/index.d.ts.map +1 -0
  177. package/dist/tools/thought/index.js +7 -0
  178. package/dist/tools/thought/index.js.map +1 -0
  179. package/dist/tools/thought/thoughtTools.d.ts +16 -0
  180. package/dist/tools/thought/thoughtTools.d.ts.map +1 -0
  181. package/dist/tools/thought/thoughtTools.js +47 -0
  182. package/dist/tools/thought/thoughtTools.js.map +1 -0
  183. package/docs/API.md +32 -0
  184. package/docs/ARCHITECTURE.md +44 -0
  185. package/docs/COMPATIBILITY_REPORT.md +26 -0
  186. package/docs/PERFORMANCE.md +66 -0
  187. package/package.json +77 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/data/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Zod schemas for runtime validation
3
+ *
4
+ * These schemas validate all external input from MCP clients.
5
+ * TypeScript types alone provide no runtime protection!
6
+ */
7
+ import { z } from 'zod';
8
+ /**
9
+ * Task status validation
10
+ * Allowlist validation - only these 4 values permitted.
11
+ */
12
+ export const TaskStatusSchema = z.enum(['pending', 'in_progress', 'completed', 'blocked']);
13
+ /**
14
+ * Task dependency schema
15
+ * NOTE: The 'name' field is computed at runtime for display purposes
16
+ */
17
+ export const TaskDependencySchema = z.object({
18
+ taskId: z.string().uuid(), // Validate GUID format to prevent injection
19
+ });
20
+ /**
21
+ * Related file type enum
22
+ * Allowlist validation - only permitted file relationship types.
23
+ */
24
+ export const RelatedFileTypeSchema = z.enum(['TO_MODIFY', 'REFERENCE', 'CREATE', 'DEPENDENCY', 'OTHER']);
25
+ /**
26
+ * Related file schema
27
+ * Note: Paths will be sanitized separately before file operations.
28
+ */
29
+ export const RelatedFileSchema = z.object({
30
+ path: z.string().min(1).max(1000), // Max path length prevents DoS
31
+ type: RelatedFileTypeSchema,
32
+ description: z.string().max(1000).optional().nullable(),
33
+ lineStart: z.number().int().min(1).optional().nullable(),
34
+ lineEnd: z.number().int().min(1).optional().nullable(),
35
+ });
36
+ /**
37
+ * Main task item schema
38
+ * Validates all task fields with strict limits to prevent malformed data.
39
+ */
40
+ export const TaskItemSchema = z.object({
41
+ id: z.string().uuid(),
42
+ name: z.string().min(1, 'Task name cannot be empty').max(500, 'Task name too long'),
43
+ description: z.string().max(5000, 'Description too long'),
44
+ notes: z.string().max(5000).optional().nullable(),
45
+ status: TaskStatusSchema,
46
+ dependencies: z.array(TaskDependencySchema).default([]),
47
+ createdAt: z.string().datetime(), // ISO 8601 format
48
+ updatedAt: z.string().datetime(), // ISO 8601 format
49
+ completedAt: z.string().datetime().optional().nullable(),
50
+ summary: z.string().max(5000).optional().nullable(),
51
+ relatedFiles: z.array(RelatedFileSchema).default([]),
52
+ analysisResult: z.string().max(20000).optional().nullable(),
53
+ agent: z.string().max(200).optional().nullable(),
54
+ implementationGuide: z.string().max(10000).optional().nullable(),
55
+ verificationCriteria: z.string().max(5000).optional().nullable(),
56
+ });
57
+ /**
58
+ * Task document schema (root JSON structure)
59
+ * Version field used for schema migration support.
60
+ */
61
+ export const TaskDocumentSchema = z.object({
62
+ version: z.string().regex(/^\d+\.\d+$/, 'Version must be format X.Y'),
63
+ tasks: z.array(TaskItemSchema).default([]),
64
+ });
65
+ /**
66
+ * Update mode validation
67
+ */
68
+ export const UpdateModeSchema = z.enum(['append', 'overwrite', 'selective', 'clearAllTasks']);
69
+ // ============================================================================
70
+ // MCP Tool Parameter Schemas (Input Validation)
71
+ // ============================================================================
72
+ /**
73
+ * create_task / plan_task parameters
74
+ * Strict validation on input to ensure data integrity.
75
+ */
76
+ export const CreateTaskParamsSchema = z.object({
77
+ name: z.string()
78
+ .min(1, 'Task name required')
79
+ .max(500, 'Task name exceeds maximum length of 500 characters'),
80
+ description: z.string()
81
+ .min(1, 'Task description required')
82
+ .max(5000, 'Description exceeds maximum length of 5000 characters'),
83
+ dependencies: z.array(z.string().max(500)).optional(),
84
+ relatedFiles: z.array(RelatedFileSchema).optional(),
85
+ implementationGuide: z.string().max(10000).optional().nullable(),
86
+ verificationCriteria: z.string().max(5000).optional().nullable(),
87
+ notes: z.string().max(5000).optional().nullable(),
88
+ agent: z.string().max(200).optional().nullable(),
89
+ });
90
+ /**
91
+ * update_task parameters
92
+ * Validates task ID is GUID, all fields optional for partial update.
93
+ */
94
+ export const UpdateTaskParamsSchema = z.object({
95
+ taskId: z.string().uuid('Task ID must be a valid GUID'),
96
+ name: z.string().min(1).max(500).optional().nullable(),
97
+ description: z.string().max(5000).optional().nullable(),
98
+ dependencies: z.array(z.string().max(500)).optional().nullable(),
99
+ relatedFiles: z.array(RelatedFileSchema).optional().nullable(),
100
+ implementationGuide: z.string().max(10000).optional().nullable(),
101
+ verificationCriteria: z.string().max(5000).optional().nullable(),
102
+ notes: z.string().max(5000).optional().nullable(),
103
+ });
104
+ /**
105
+ * split_tasks parameters
106
+ * Validates array of tasks and update mode.
107
+ */
108
+ export const SplitTasksParamsSchema = z.object({
109
+ updateMode: UpdateModeSchema,
110
+ tasks: z.array(CreateTaskParamsSchema)
111
+ .min(1, 'At least one task required')
112
+ .max(100, 'Maximum 100 tasks per split operation'),
113
+ globalAnalysisResult: z.string().max(20000).optional().nullable(),
114
+ });
115
+ /**
116
+ * list_tasks parameters
117
+ */
118
+ export const ListTasksParamsSchema = z.object({
119
+ status: z.enum(['all', 'pending', 'in_progress', 'completed', 'blocked']).default('all'),
120
+ });
121
+ /**
122
+ * query_task parameters
123
+ * Pagination limits prevent excessive result sets.
124
+ */
125
+ export const QueryTaskParamsSchema = z.object({
126
+ query: z.string().min(1, 'Query cannot be empty').max(500),
127
+ isId: z.boolean().default(false),
128
+ page: z.number().int().min(1).default(1),
129
+ pageSize: z.number().int().min(1).max(100).default(10), // Max 100 per page prevents DoS
130
+ });
131
+ /**
132
+ * get_task_detail parameters
133
+ */
134
+ export const GetTaskDetailParamsSchema = z.object({
135
+ taskId: z.string().uuid('Task ID must be a valid GUID'),
136
+ });
137
+ /**
138
+ * execute_task parameters
139
+ */
140
+ export const ExecuteTaskParamsSchema = z.object({
141
+ taskId: z.string().uuid('Task ID must be a valid GUID'),
142
+ });
143
+ /**
144
+ * verify_task parameters
145
+ */
146
+ export const VerifyTaskParamsSchema = z.object({
147
+ taskId: z.string().uuid('Task ID must be a valid GUID'),
148
+ score: z.number().int().min(0).max(100, 'Score must be between 0-100'),
149
+ summary: z.string().min(1).max(2000),
150
+ });
151
+ /**
152
+ * delete_task parameters
153
+ */
154
+ export const DeleteTaskParamsSchema = z.object({
155
+ taskId: z.string().uuid('Task ID must be a valid GUID'),
156
+ });
157
+ /**
158
+ * clear_all_tasks parameters
159
+ */
160
+ export const ClearAllTasksParamsSchema = z.object({
161
+ confirm: z.boolean().default(false),
162
+ });
163
+ /**
164
+ * analyze_task parameters
165
+ */
166
+ export const AnalyzeTaskParamsSchema = z.object({
167
+ summary: z.string().min(1).max(5000, 'Summary exceeds maximum length'),
168
+ initialConcept: z.string().min(1).max(20000, 'Initial concept exceeds maximum length'),
169
+ previousAnalysis: z.string().max(20000).optional().nullable(),
170
+ });
171
+ /**
172
+ * reflect_task parameters
173
+ */
174
+ export const ReflectTaskParamsSchema = z.object({
175
+ summary: z.string().min(1).max(5000, 'Summary exceeds maximum length'),
176
+ analysis: z.string().min(1).max(20000, 'Analysis exceeds maximum length'),
177
+ });
178
+ /**
179
+ * plan_task parameters
180
+ */
181
+ export const PlanTaskParamsSchema = z.object({
182
+ description: z.string().min(1, 'Description required').max(10000),
183
+ requirements: z.string().max(10000).optional().nullable(),
184
+ existingTasksReference: z.boolean().default(false),
185
+ });
186
+ /**
187
+ * research_mode parameters
188
+ */
189
+ export const ResearchModeParamsSchema = z.object({
190
+ topic: z.string().min(1, 'Topic required').max(1000),
191
+ previousState: z.string().max(20000),
192
+ currentState: z.string().min(1, 'Current state required').max(20000),
193
+ nextSteps: z.string().min(1, 'Next steps required').max(20000),
194
+ });
195
+ /**
196
+ * process_thought parameters
197
+ */
198
+ export const ProcessThoughtParamsSchema = z.object({
199
+ thought: z.string().min(1, 'Thought content required').max(5000),
200
+ thoughtNumber: z.number().int().min(1),
201
+ totalThoughts: z.number().int().min(1),
202
+ stage: z.string().min(1).max(100),
203
+ tags: z.array(z.string().max(50)).max(20).optional().nullable(),
204
+ axiomsUsed: z.array(z.string().max(200)).max(10).optional().nullable(),
205
+ assumptionsChallenged: z.array(z.string().max(200)).max(10).optional().nullable(),
206
+ nextThoughtNeeded: z.boolean().default(false),
207
+ }).refine(data => data.thoughtNumber <= data.totalThoughts, {
208
+ message: 'Thought number cannot exceed total thoughts',
209
+ path: ['thoughtNumber'],
210
+ });
211
+ /**
212
+ * init_project_rules parameters
213
+ */
214
+ export const InitProjectRulesParamsSchema = z.object({
215
+ // No parameters - this tool initializes default rules
216
+ });
217
+ /**
218
+ * get_server_info parameters
219
+ */
220
+ export const GetServerInfoParamsSchema = z.object({
221
+ // No parameters - returns server metadata
222
+ });
223
+ // ============================================================================
224
+ // Validation Helper Functions
225
+ // ============================================================================
226
+ /**
227
+ * Validate and parse a task document from unknown data
228
+ * Use this for all JSON file reads to ensure data integrity.
229
+ *
230
+ * @param data - Unknown data from file or external source
231
+ * @returns Validated TaskDocument
232
+ * @throws ZodError if validation fails
233
+ */
234
+ export function validateTaskDocument(data) {
235
+ return TaskDocumentSchema.parse(data);
236
+ }
237
+ /**
238
+ * Safely validate a task document, returning success/error result
239
+ *
240
+ * @param data - Unknown data from file or external source
241
+ * @returns { success: true, data: TaskDocument } or { success: false, error: ZodError }
242
+ */
243
+ export function safeValidateTaskDocument(data) {
244
+ return TaskDocumentSchema.safeParse(data);
245
+ }
246
+ /**
247
+ * Validate a single task item
248
+ *
249
+ * @param data - Unknown data
250
+ * @returns Validated TaskItem
251
+ * @throws ZodError if validation fails
252
+ */
253
+ export function validateTaskItem(data) {
254
+ return TaskItemSchema.parse(data);
255
+ }
256
+ /**
257
+ * Create an empty task document
258
+ */
259
+ export function createEmptyTaskDocument() {
260
+ return {
261
+ version: '1.0',
262
+ tasks: [],
263
+ };
264
+ }
265
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/data/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AAE3F;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAe,4CAA4C;CACrF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAEzG;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAG,+BAA+B;IACnE,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,MAAM,EAAE,gBAAgB;IACxB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACvD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,kBAAkB;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,kBAAkB;IACpD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACjE,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,4BAA4B,CAAC;IACrE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;AAE9F,+EAA+E;AAC/E,gDAAgD;AAChD,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACb,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC;SAC5B,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC;IACjE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;SACpB,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC;SACnC,GAAG,CAAC,IAAI,EAAE,uDAAuD,CAAC;IACrE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;IACnD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC9D,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAClD,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,UAAU,EAAE,gBAAgB;IAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;SACnC,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC;SACpC,GAAG,CAAC,GAAG,EAAE,uCAAuC,CAAC;IACpD,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAClE,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CACzF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1D,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,gCAAgC;CACzF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC;CACxD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC;CACxD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC;IACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,6BAA6B,CAAC;IACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;CACrC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC;CACxD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACpC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,gCAAgC,CAAC;IACtE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,wCAAwC,CAAC;IACtF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC9D,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,gCAAgC,CAAC;IACtE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,iCAAiC,CAAC;CAC1E,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACjE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACzD,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACpD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACpE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;CAC/D,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IAChE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC/D,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtE,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjF,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE;IAC1D,OAAO,EAAE,6CAA6C;IACtD,IAAI,EAAE,CAAC,eAAe,CAAC;CACxB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;AACnD,sDAAsD;CACvD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;AAChD,0CAA0C;CAC3C,CAAC,CAAC;AAoCH,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAa;IACpD,OAAO,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * TaskSearchService - Search and query functionality for tasks
3
+ *
4
+ * Provides:
5
+ * - Full-text search across task fields
6
+ * - Filtering by status
7
+ * - Pagination with offset/limit
8
+ * - Multiple sorting options
9
+ * - Regex safety
10
+ */
11
+ import { type TaskItem, type TaskStatus } from './schemas.js';
12
+ /**
13
+ * Sort field options
14
+ */
15
+ export type SortField = 'name' | 'createdAt' | 'updatedAt' | 'status';
16
+ /**
17
+ * Sort direction
18
+ */
19
+ export type SortDirection = 'asc' | 'desc';
20
+ /**
21
+ * Search query parameters
22
+ */
23
+ export interface SearchQuery {
24
+ /** Text to search for in name, description, notes */
25
+ query?: string | null;
26
+ /** Filter by task status */
27
+ status?: TaskStatus | null;
28
+ /** Page number (1-based) */
29
+ page?: number;
30
+ /** Items per page (default: 10, max: 1000) */
31
+ pageSize?: number;
32
+ /** Field to sort by */
33
+ sortBy?: SortField;
34
+ /** Sort direction */
35
+ sortDirection?: SortDirection;
36
+ }
37
+ /**
38
+ * Paginated search results
39
+ */
40
+ export interface SearchResults {
41
+ /** Tasks matching the query */
42
+ tasks: TaskItem[];
43
+ /** Total number of matching tasks (before pagination) */
44
+ total: number;
45
+ /** Current page number (1-based) */
46
+ page: number;
47
+ /** Items per page */
48
+ pageSize: number;
49
+ /** Total number of pages */
50
+ totalPages: number;
51
+ /** Whether there are more pages */
52
+ hasMore: boolean;
53
+ }
54
+ /**
55
+ * TaskSearchService - Provides search and query functionality
56
+ *
57
+ * Input validation and safe regex usage.
58
+ */
59
+ export declare class TaskSearchService {
60
+ /**
61
+ * Search tasks with filtering, pagination, and sorting
62
+ *
63
+ * @param tasks - All tasks to search
64
+ * @param query - Search parameters
65
+ * @returns Paginated search results
66
+ */
67
+ search(tasks: TaskItem[], query?: SearchQuery): SearchResults;
68
+ /**
69
+ * Filter tasks by text query (case-insensitive search across name, description, notes)
70
+ *
71
+ * @param tasks - Tasks to filter
72
+ * @param query - Search query string
73
+ * @returns Filtered tasks
74
+ */
75
+ private filterByQuery;
76
+ /**
77
+ * Filter tasks by status
78
+ *
79
+ * @param tasks - Tasks to filter
80
+ * @param status - Status to filter by
81
+ * @returns Filtered tasks
82
+ */
83
+ private filterByStatus;
84
+ /**
85
+ * Sort tasks by specified field and direction
86
+ *
87
+ * @param tasks - Tasks to sort
88
+ * @param sortBy - Field to sort by
89
+ * @param direction - Sort direction
90
+ * @returns Sorted tasks (new array)
91
+ */
92
+ private sortTasks;
93
+ /**
94
+ * Paginate tasks
95
+ *
96
+ * @param tasks - Sorted tasks to paginate
97
+ * @param page - Page number (1-based)
98
+ * @param pageSize - Items per page
99
+ * @returns Slice of tasks for the requested page
100
+ */
101
+ private paginate;
102
+ /**
103
+ * Validate and normalize page size
104
+ *
105
+ * @param pageSize - Requested page size
106
+ * @returns Validated page size (within bounds)
107
+ */
108
+ private validatePageSize;
109
+ }
110
+ //# sourceMappingURL=taskSearchService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskSearchService.d.ts","sourceRoot":"","sources":["../../src/data/taskSearchService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qBAAqB;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB;AAiBD;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,GAAE,WAAgB,GAAG,aAAa;IA+BxE;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IA8BrB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAItB;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS;IAgCjB;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IAMhB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;CAiBzB"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * TaskSearchService - Search and query functionality for tasks
3
+ *
4
+ * Provides:
5
+ * - Full-text search across task fields
6
+ * - Filtering by status
7
+ * - Pagination with offset/limit
8
+ * - Multiple sorting options
9
+ * - Regex safety
10
+ */
11
+ import {} from './schemas.js';
12
+ /**
13
+ * Maximum results to prevent memory exhaustion
14
+ */
15
+ const MAX_PAGE_SIZE = 1000;
16
+ /**
17
+ * Default page size
18
+ */
19
+ const DEFAULT_PAGE_SIZE = 10;
20
+ /**
21
+ * Maximum query length to keep search bounded
22
+ */
23
+ const MAX_PATTERN_LENGTH = 100;
24
+ /**
25
+ * TaskSearchService - Provides search and query functionality
26
+ *
27
+ * Input validation and safe regex usage.
28
+ */
29
+ export class TaskSearchService {
30
+ /**
31
+ * Search tasks with filtering, pagination, and sorting
32
+ *
33
+ * @param tasks - All tasks to search
34
+ * @param query - Search parameters
35
+ * @returns Paginated search results
36
+ */
37
+ search(tasks, query = {}) {
38
+ // Step 1: Filter by query string (if provided)
39
+ let filtered = query.query
40
+ ? this.filterByQuery(tasks, query.query)
41
+ : tasks;
42
+ // Step 2: Filter by status (if provided)
43
+ if (query.status) {
44
+ filtered = this.filterByStatus(filtered, query.status);
45
+ }
46
+ // Step 3: Sort results
47
+ const sortBy = query.sortBy ?? 'createdAt';
48
+ const sortDirection = query.sortDirection ?? 'desc';
49
+ const sorted = this.sortTasks(filtered, sortBy, sortDirection);
50
+ // Step 4: Paginate results
51
+ const page = Math.max(1, query.page ?? 1);
52
+ const pageSize = this.validatePageSize(query.pageSize);
53
+ const paginated = this.paginate(sorted, page, pageSize);
54
+ return {
55
+ tasks: paginated,
56
+ total: sorted.length,
57
+ page,
58
+ pageSize,
59
+ totalPages: Math.ceil(sorted.length / pageSize),
60
+ hasMore: page * pageSize < sorted.length,
61
+ };
62
+ }
63
+ /**
64
+ * Filter tasks by text query (case-insensitive search across name, description, notes)
65
+ *
66
+ * @param tasks - Tasks to filter
67
+ * @param query - Search query string
68
+ * @returns Filtered tasks
69
+ */
70
+ filterByQuery(tasks, query) {
71
+ const trimmed = query.trim();
72
+ if (trimmed.length === 0) {
73
+ return tasks;
74
+ }
75
+ // Validate query length
76
+ if (trimmed.length > MAX_PATTERN_LENGTH) {
77
+ throw new Error(`Search query too long (max ${MAX_PATTERN_LENGTH} characters)`);
78
+ }
79
+ const normalizedQuery = trimmed.toLowerCase();
80
+ // Filter tasks that match in name, description, or notes
81
+ return tasks.filter(task => {
82
+ const searchableText = [
83
+ task.name,
84
+ task.description,
85
+ task.notes ?? '',
86
+ ]
87
+ .join(' ')
88
+ .toLowerCase();
89
+ return searchableText.includes(normalizedQuery);
90
+ });
91
+ }
92
+ /**
93
+ * Filter tasks by status
94
+ *
95
+ * @param tasks - Tasks to filter
96
+ * @param status - Status to filter by
97
+ * @returns Filtered tasks
98
+ */
99
+ filterByStatus(tasks, status) {
100
+ return tasks.filter(task => task.status === status);
101
+ }
102
+ /**
103
+ * Sort tasks by specified field and direction
104
+ *
105
+ * @param tasks - Tasks to sort
106
+ * @param sortBy - Field to sort by
107
+ * @param direction - Sort direction
108
+ * @returns Sorted tasks (new array)
109
+ */
110
+ sortTasks(tasks, sortBy, direction) {
111
+ // Create copy to avoid mutating input
112
+ const sorted = [...tasks];
113
+ sorted.sort((a, b) => {
114
+ let comparison = 0;
115
+ switch (sortBy) {
116
+ case 'name':
117
+ comparison = a.name.localeCompare(b.name);
118
+ break;
119
+ case 'createdAt':
120
+ comparison = a.createdAt.localeCompare(b.createdAt);
121
+ break;
122
+ case 'updatedAt':
123
+ comparison = a.updatedAt.localeCompare(b.updatedAt);
124
+ break;
125
+ case 'status':
126
+ comparison = a.status.localeCompare(b.status);
127
+ break;
128
+ }
129
+ return direction === 'asc' ? comparison : -comparison;
130
+ });
131
+ return sorted;
132
+ }
133
+ /**
134
+ * Paginate tasks
135
+ *
136
+ * @param tasks - Sorted tasks to paginate
137
+ * @param page - Page number (1-based)
138
+ * @param pageSize - Items per page
139
+ * @returns Slice of tasks for the requested page
140
+ */
141
+ paginate(tasks, page, pageSize) {
142
+ const startIndex = (page - 1) * pageSize;
143
+ const endIndex = startIndex + pageSize;
144
+ return tasks.slice(startIndex, endIndex);
145
+ }
146
+ /**
147
+ * Validate and normalize page size
148
+ *
149
+ * @param pageSize - Requested page size
150
+ * @returns Validated page size (within bounds)
151
+ */
152
+ validatePageSize(pageSize) {
153
+ if (pageSize === undefined || pageSize === null) {
154
+ return DEFAULT_PAGE_SIZE;
155
+ }
156
+ if (pageSize < 1) {
157
+ return DEFAULT_PAGE_SIZE;
158
+ }
159
+ if (pageSize > MAX_PAGE_SIZE) {
160
+ return MAX_PAGE_SIZE;
161
+ }
162
+ return Math.floor(pageSize);
163
+ }
164
+ }
165
+ //# sourceMappingURL=taskSearchService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskSearchService.js","sourceRoot":"","sources":["../../src/data/taskSearchService.ts"],"names":[],"mappings":"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"}