@task-mcp/shared 1.0.28 → 1.0.29

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 (48) hide show
  1. package/dist/algorithms/index.d.ts +1 -1
  2. package/dist/algorithms/index.d.ts.map +1 -1
  3. package/dist/algorithms/index.js +1 -1
  4. package/dist/algorithms/index.js.map +1 -1
  5. package/dist/algorithms/topological-sort.d.ts +21 -1
  6. package/dist/algorithms/topological-sort.d.ts.map +1 -1
  7. package/dist/algorithms/topological-sort.js +12 -1
  8. package/dist/algorithms/topological-sort.js.map +1 -1
  9. package/dist/schemas/index.d.ts +1 -0
  10. package/dist/schemas/index.d.ts.map +1 -1
  11. package/dist/schemas/index.js +2 -0
  12. package/dist/schemas/index.js.map +1 -1
  13. package/dist/schemas/session.d.ts +521 -0
  14. package/dist/schemas/session.d.ts.map +1 -0
  15. package/dist/schemas/session.js +79 -0
  16. package/dist/schemas/session.js.map +1 -0
  17. package/dist/schemas/task.d.ts.map +1 -1
  18. package/dist/schemas/task.js +20 -6
  19. package/dist/schemas/task.js.map +1 -1
  20. package/dist/schemas/view.d.ts +18 -18
  21. package/dist/utils/hierarchy.d.ts.map +1 -1
  22. package/dist/utils/hierarchy.js +6 -3
  23. package/dist/utils/hierarchy.js.map +1 -1
  24. package/dist/utils/index.d.ts +2 -1
  25. package/dist/utils/index.d.ts.map +1 -1
  26. package/dist/utils/index.js +17 -1
  27. package/dist/utils/index.js.map +1 -1
  28. package/dist/utils/plan-parser.d.ts +57 -0
  29. package/dist/utils/plan-parser.d.ts.map +1 -0
  30. package/dist/utils/plan-parser.js +377 -0
  31. package/dist/utils/plan-parser.js.map +1 -0
  32. package/dist/utils/terminal-ui.d.ts +129 -0
  33. package/dist/utils/terminal-ui.d.ts.map +1 -1
  34. package/dist/utils/terminal-ui.js +191 -0
  35. package/dist/utils/terminal-ui.js.map +1 -1
  36. package/dist/utils/terminal-ui.test.js +236 -0
  37. package/dist/utils/terminal-ui.test.js.map +1 -1
  38. package/package.json +2 -2
  39. package/src/algorithms/index.ts +3 -0
  40. package/src/algorithms/topological-sort.ts +31 -1
  41. package/src/schemas/index.ts +11 -0
  42. package/src/schemas/session.ts +100 -0
  43. package/src/schemas/task.ts +30 -16
  44. package/src/utils/hierarchy.ts +8 -3
  45. package/src/utils/index.ts +31 -0
  46. package/src/utils/plan-parser.ts +478 -0
  47. package/src/utils/terminal-ui.test.ts +286 -0
  48. package/src/utils/terminal-ui.ts +315 -0
@@ -0,0 +1,521 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Session - Captures work context for resumption
4
+ *
5
+ * When a work session is interrupted and resumed later, this schema
6
+ * enables immediate context restoration without manual review.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * {
11
+ * id: "session_abc123",
12
+ * name: "Phase 2 리팩토링",
13
+ * startedAt: "2025-01-02T10:00:00Z",
14
+ * endedAt: "2025-01-02T12:30:00Z",
15
+ * tasksWorked: ["task_123", "task_456"],
16
+ * tasksSummary: { completed: 2, inProgress: 1, created: 0 },
17
+ * context: "API 레이어 서비스 패턴 마이그레이션 진행 중"
18
+ * }
19
+ * ```
20
+ */
21
+ export declare const SessionSummary: z.ZodObject<{
22
+ completed: z.ZodDefault<z.ZodNumber>;
23
+ inProgress: z.ZodDefault<z.ZodNumber>;
24
+ created: z.ZodDefault<z.ZodNumber>;
25
+ cancelled: z.ZodDefault<z.ZodNumber>;
26
+ }, "strip", z.ZodTypeAny, {
27
+ completed: number;
28
+ cancelled: number;
29
+ inProgress: number;
30
+ created: number;
31
+ }, {
32
+ completed?: number | undefined;
33
+ cancelled?: number | undefined;
34
+ inProgress?: number | undefined;
35
+ created?: number | undefined;
36
+ }>;
37
+ export type SessionSummary = z.infer<typeof SessionSummary>;
38
+ export declare const SessionTaskSnapshot: z.ZodObject<{
39
+ taskId: z.ZodString;
40
+ title: z.ZodString;
41
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "completed", "cancelled"]>;
42
+ priority: z.ZodOptional<z.ZodEnum<["critical", "high", "medium", "low"]>>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ title: string;
45
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
46
+ taskId: string;
47
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
48
+ }, {
49
+ title: string;
50
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
51
+ taskId: string;
52
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
53
+ }>;
54
+ export type SessionTaskSnapshot = z.infer<typeof SessionTaskSnapshot>;
55
+ export declare const Session: z.ZodObject<{
56
+ id: z.ZodString;
57
+ workspace: z.ZodString;
58
+ name: z.ZodOptional<z.ZodString>;
59
+ startedAt: z.ZodString;
60
+ endedAt: z.ZodOptional<z.ZodString>;
61
+ tasksWorked: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
62
+ tasksSummary: z.ZodOptional<z.ZodObject<{
63
+ completed: z.ZodDefault<z.ZodNumber>;
64
+ inProgress: z.ZodDefault<z.ZodNumber>;
65
+ created: z.ZodDefault<z.ZodNumber>;
66
+ cancelled: z.ZodDefault<z.ZodNumber>;
67
+ }, "strip", z.ZodTypeAny, {
68
+ completed: number;
69
+ cancelled: number;
70
+ inProgress: number;
71
+ created: number;
72
+ }, {
73
+ completed?: number | undefined;
74
+ cancelled?: number | undefined;
75
+ inProgress?: number | undefined;
76
+ created?: number | undefined;
77
+ }>>;
78
+ taskSnapshots: z.ZodOptional<z.ZodArray<z.ZodObject<{
79
+ taskId: z.ZodString;
80
+ title: z.ZodString;
81
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "completed", "cancelled"]>;
82
+ priority: z.ZodOptional<z.ZodEnum<["critical", "high", "medium", "low"]>>;
83
+ }, "strip", z.ZodTypeAny, {
84
+ title: string;
85
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
86
+ taskId: string;
87
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
88
+ }, {
89
+ title: string;
90
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
91
+ taskId: string;
92
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
93
+ }>, "many">>;
94
+ context: z.ZodOptional<z.ZodString>;
95
+ durationMinutes: z.ZodOptional<z.ZodNumber>;
96
+ }, "strip", z.ZodTypeAny, {
97
+ id: string;
98
+ workspace: string;
99
+ startedAt: string;
100
+ tasksWorked: string[];
101
+ name?: string | undefined;
102
+ endedAt?: string | undefined;
103
+ tasksSummary?: {
104
+ completed: number;
105
+ cancelled: number;
106
+ inProgress: number;
107
+ created: number;
108
+ } | undefined;
109
+ taskSnapshots?: {
110
+ title: string;
111
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
112
+ taskId: string;
113
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
114
+ }[] | undefined;
115
+ context?: string | undefined;
116
+ durationMinutes?: number | undefined;
117
+ }, {
118
+ id: string;
119
+ workspace: string;
120
+ startedAt: string;
121
+ name?: string | undefined;
122
+ endedAt?: string | undefined;
123
+ tasksWorked?: string[] | undefined;
124
+ tasksSummary?: {
125
+ completed?: number | undefined;
126
+ cancelled?: number | undefined;
127
+ inProgress?: number | undefined;
128
+ created?: number | undefined;
129
+ } | undefined;
130
+ taskSnapshots?: {
131
+ title: string;
132
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
133
+ taskId: string;
134
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
135
+ }[] | undefined;
136
+ context?: string | undefined;
137
+ durationMinutes?: number | undefined;
138
+ }>;
139
+ export type Session = z.infer<typeof Session>;
140
+ export declare const SessionCreateInput: z.ZodObject<{
141
+ name: z.ZodOptional<z.ZodString>;
142
+ context: z.ZodOptional<z.ZodString>;
143
+ }, "strip", z.ZodTypeAny, {
144
+ name?: string | undefined;
145
+ context?: string | undefined;
146
+ }, {
147
+ name?: string | undefined;
148
+ context?: string | undefined;
149
+ }>;
150
+ export type SessionCreateInput = z.infer<typeof SessionCreateInput>;
151
+ export declare const SessionEndInput: z.ZodObject<{
152
+ context: z.ZodOptional<z.ZodString>;
153
+ }, "strip", z.ZodTypeAny, {
154
+ context?: string | undefined;
155
+ }, {
156
+ context?: string | undefined;
157
+ }>;
158
+ export type SessionEndInput = z.infer<typeof SessionEndInput>;
159
+ export declare const SessionListFilter: z.ZodObject<{
160
+ limit: z.ZodDefault<z.ZodNumber>;
161
+ workspace: z.ZodOptional<z.ZodString>;
162
+ includeActive: z.ZodDefault<z.ZodBoolean>;
163
+ }, "strip", z.ZodTypeAny, {
164
+ limit: number;
165
+ includeActive: boolean;
166
+ workspace?: string | undefined;
167
+ }, {
168
+ workspace?: string | undefined;
169
+ limit?: number | undefined;
170
+ includeActive?: boolean | undefined;
171
+ }>;
172
+ export type SessionListFilter = z.infer<typeof SessionListFilter>;
173
+ export declare const SessionResumeInfo: z.ZodObject<{
174
+ lastSession: z.ZodOptional<z.ZodObject<{
175
+ id: z.ZodString;
176
+ workspace: z.ZodString;
177
+ name: z.ZodOptional<z.ZodString>;
178
+ startedAt: z.ZodString;
179
+ endedAt: z.ZodOptional<z.ZodString>;
180
+ tasksWorked: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
181
+ tasksSummary: z.ZodOptional<z.ZodObject<{
182
+ completed: z.ZodDefault<z.ZodNumber>;
183
+ inProgress: z.ZodDefault<z.ZodNumber>;
184
+ created: z.ZodDefault<z.ZodNumber>;
185
+ cancelled: z.ZodDefault<z.ZodNumber>;
186
+ }, "strip", z.ZodTypeAny, {
187
+ completed: number;
188
+ cancelled: number;
189
+ inProgress: number;
190
+ created: number;
191
+ }, {
192
+ completed?: number | undefined;
193
+ cancelled?: number | undefined;
194
+ inProgress?: number | undefined;
195
+ created?: number | undefined;
196
+ }>>;
197
+ taskSnapshots: z.ZodOptional<z.ZodArray<z.ZodObject<{
198
+ taskId: z.ZodString;
199
+ title: z.ZodString;
200
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "completed", "cancelled"]>;
201
+ priority: z.ZodOptional<z.ZodEnum<["critical", "high", "medium", "low"]>>;
202
+ }, "strip", z.ZodTypeAny, {
203
+ title: string;
204
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
205
+ taskId: string;
206
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
207
+ }, {
208
+ title: string;
209
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
210
+ taskId: string;
211
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
212
+ }>, "many">>;
213
+ context: z.ZodOptional<z.ZodString>;
214
+ durationMinutes: z.ZodOptional<z.ZodNumber>;
215
+ }, "strip", z.ZodTypeAny, {
216
+ id: string;
217
+ workspace: string;
218
+ startedAt: string;
219
+ tasksWorked: string[];
220
+ name?: string | undefined;
221
+ endedAt?: string | undefined;
222
+ tasksSummary?: {
223
+ completed: number;
224
+ cancelled: number;
225
+ inProgress: number;
226
+ created: number;
227
+ } | undefined;
228
+ taskSnapshots?: {
229
+ title: string;
230
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
231
+ taskId: string;
232
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
233
+ }[] | undefined;
234
+ context?: string | undefined;
235
+ durationMinutes?: number | undefined;
236
+ }, {
237
+ id: string;
238
+ workspace: string;
239
+ startedAt: string;
240
+ name?: string | undefined;
241
+ endedAt?: string | undefined;
242
+ tasksWorked?: string[] | undefined;
243
+ tasksSummary?: {
244
+ completed?: number | undefined;
245
+ cancelled?: number | undefined;
246
+ inProgress?: number | undefined;
247
+ created?: number | undefined;
248
+ } | undefined;
249
+ taskSnapshots?: {
250
+ title: string;
251
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
252
+ taskId: string;
253
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
254
+ }[] | undefined;
255
+ context?: string | undefined;
256
+ durationMinutes?: number | undefined;
257
+ }>>;
258
+ currentSession: z.ZodOptional<z.ZodObject<{
259
+ id: z.ZodString;
260
+ workspace: z.ZodString;
261
+ name: z.ZodOptional<z.ZodString>;
262
+ startedAt: z.ZodString;
263
+ endedAt: z.ZodOptional<z.ZodString>;
264
+ tasksWorked: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
265
+ tasksSummary: z.ZodOptional<z.ZodObject<{
266
+ completed: z.ZodDefault<z.ZodNumber>;
267
+ inProgress: z.ZodDefault<z.ZodNumber>;
268
+ created: z.ZodDefault<z.ZodNumber>;
269
+ cancelled: z.ZodDefault<z.ZodNumber>;
270
+ }, "strip", z.ZodTypeAny, {
271
+ completed: number;
272
+ cancelled: number;
273
+ inProgress: number;
274
+ created: number;
275
+ }, {
276
+ completed?: number | undefined;
277
+ cancelled?: number | undefined;
278
+ inProgress?: number | undefined;
279
+ created?: number | undefined;
280
+ }>>;
281
+ taskSnapshots: z.ZodOptional<z.ZodArray<z.ZodObject<{
282
+ taskId: z.ZodString;
283
+ title: z.ZodString;
284
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "completed", "cancelled"]>;
285
+ priority: z.ZodOptional<z.ZodEnum<["critical", "high", "medium", "low"]>>;
286
+ }, "strip", z.ZodTypeAny, {
287
+ title: string;
288
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
289
+ taskId: string;
290
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
291
+ }, {
292
+ title: string;
293
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
294
+ taskId: string;
295
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
296
+ }>, "many">>;
297
+ context: z.ZodOptional<z.ZodString>;
298
+ durationMinutes: z.ZodOptional<z.ZodNumber>;
299
+ }, "strip", z.ZodTypeAny, {
300
+ id: string;
301
+ workspace: string;
302
+ startedAt: string;
303
+ tasksWorked: string[];
304
+ name?: string | undefined;
305
+ endedAt?: string | undefined;
306
+ tasksSummary?: {
307
+ completed: number;
308
+ cancelled: number;
309
+ inProgress: number;
310
+ created: number;
311
+ } | undefined;
312
+ taskSnapshots?: {
313
+ title: string;
314
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
315
+ taskId: string;
316
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
317
+ }[] | undefined;
318
+ context?: string | undefined;
319
+ durationMinutes?: number | undefined;
320
+ }, {
321
+ id: string;
322
+ workspace: string;
323
+ startedAt: string;
324
+ name?: string | undefined;
325
+ endedAt?: string | undefined;
326
+ tasksWorked?: string[] | undefined;
327
+ tasksSummary?: {
328
+ completed?: number | undefined;
329
+ cancelled?: number | undefined;
330
+ inProgress?: number | undefined;
331
+ created?: number | undefined;
332
+ } | undefined;
333
+ taskSnapshots?: {
334
+ title: string;
335
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
336
+ taskId: string;
337
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
338
+ }[] | undefined;
339
+ context?: string | undefined;
340
+ durationMinutes?: number | undefined;
341
+ }>>;
342
+ inProgressTasks: z.ZodDefault<z.ZodArray<z.ZodObject<{
343
+ taskId: z.ZodString;
344
+ title: z.ZodString;
345
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "completed", "cancelled"]>;
346
+ priority: z.ZodOptional<z.ZodEnum<["critical", "high", "medium", "low"]>>;
347
+ }, "strip", z.ZodTypeAny, {
348
+ title: string;
349
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
350
+ taskId: string;
351
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
352
+ }, {
353
+ title: string;
354
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
355
+ taskId: string;
356
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
357
+ }>, "many">>;
358
+ recentlyCompleted: z.ZodDefault<z.ZodArray<z.ZodObject<{
359
+ taskId: z.ZodString;
360
+ title: z.ZodString;
361
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "completed", "cancelled"]>;
362
+ priority: z.ZodOptional<z.ZodEnum<["critical", "high", "medium", "low"]>>;
363
+ }, "strip", z.ZodTypeAny, {
364
+ title: string;
365
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
366
+ taskId: string;
367
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
368
+ }, {
369
+ title: string;
370
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
371
+ taskId: string;
372
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
373
+ }>, "many">>;
374
+ suggestedNextTask: z.ZodOptional<z.ZodObject<{
375
+ taskId: z.ZodString;
376
+ title: z.ZodString;
377
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "completed", "cancelled"]>;
378
+ priority: z.ZodOptional<z.ZodEnum<["critical", "high", "medium", "low"]>>;
379
+ }, "strip", z.ZodTypeAny, {
380
+ title: string;
381
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
382
+ taskId: string;
383
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
384
+ }, {
385
+ title: string;
386
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
387
+ taskId: string;
388
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
389
+ }>>;
390
+ timeSinceLastSession: z.ZodOptional<z.ZodString>;
391
+ }, "strip", z.ZodTypeAny, {
392
+ inProgressTasks: {
393
+ title: string;
394
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
395
+ taskId: string;
396
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
397
+ }[];
398
+ recentlyCompleted: {
399
+ title: string;
400
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
401
+ taskId: string;
402
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
403
+ }[];
404
+ lastSession?: {
405
+ id: string;
406
+ workspace: string;
407
+ startedAt: string;
408
+ tasksWorked: string[];
409
+ name?: string | undefined;
410
+ endedAt?: string | undefined;
411
+ tasksSummary?: {
412
+ completed: number;
413
+ cancelled: number;
414
+ inProgress: number;
415
+ created: number;
416
+ } | undefined;
417
+ taskSnapshots?: {
418
+ title: string;
419
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
420
+ taskId: string;
421
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
422
+ }[] | undefined;
423
+ context?: string | undefined;
424
+ durationMinutes?: number | undefined;
425
+ } | undefined;
426
+ currentSession?: {
427
+ id: string;
428
+ workspace: string;
429
+ startedAt: string;
430
+ tasksWorked: string[];
431
+ name?: string | undefined;
432
+ endedAt?: string | undefined;
433
+ tasksSummary?: {
434
+ completed: number;
435
+ cancelled: number;
436
+ inProgress: number;
437
+ created: number;
438
+ } | undefined;
439
+ taskSnapshots?: {
440
+ title: string;
441
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
442
+ taskId: string;
443
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
444
+ }[] | undefined;
445
+ context?: string | undefined;
446
+ durationMinutes?: number | undefined;
447
+ } | undefined;
448
+ suggestedNextTask?: {
449
+ title: string;
450
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
451
+ taskId: string;
452
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
453
+ } | undefined;
454
+ timeSinceLastSession?: string | undefined;
455
+ }, {
456
+ lastSession?: {
457
+ id: string;
458
+ workspace: string;
459
+ startedAt: string;
460
+ name?: string | undefined;
461
+ endedAt?: string | undefined;
462
+ tasksWorked?: string[] | undefined;
463
+ tasksSummary?: {
464
+ completed?: number | undefined;
465
+ cancelled?: number | undefined;
466
+ inProgress?: number | undefined;
467
+ created?: number | undefined;
468
+ } | undefined;
469
+ taskSnapshots?: {
470
+ title: string;
471
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
472
+ taskId: string;
473
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
474
+ }[] | undefined;
475
+ context?: string | undefined;
476
+ durationMinutes?: number | undefined;
477
+ } | undefined;
478
+ currentSession?: {
479
+ id: string;
480
+ workspace: string;
481
+ startedAt: string;
482
+ name?: string | undefined;
483
+ endedAt?: string | undefined;
484
+ tasksWorked?: string[] | undefined;
485
+ tasksSummary?: {
486
+ completed?: number | undefined;
487
+ cancelled?: number | undefined;
488
+ inProgress?: number | undefined;
489
+ created?: number | undefined;
490
+ } | undefined;
491
+ taskSnapshots?: {
492
+ title: string;
493
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
494
+ taskId: string;
495
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
496
+ }[] | undefined;
497
+ context?: string | undefined;
498
+ durationMinutes?: number | undefined;
499
+ } | undefined;
500
+ inProgressTasks?: {
501
+ title: string;
502
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
503
+ taskId: string;
504
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
505
+ }[] | undefined;
506
+ recentlyCompleted?: {
507
+ title: string;
508
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
509
+ taskId: string;
510
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
511
+ }[] | undefined;
512
+ suggestedNextTask?: {
513
+ title: string;
514
+ status: "pending" | "in_progress" | "blocked" | "completed" | "cancelled";
515
+ taskId: string;
516
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
517
+ } | undefined;
518
+ timeSinceLastSession?: string | undefined;
519
+ }>;
520
+ export type SessionResumeInfo = z.infer<typeof SessionResumeInfo>;
521
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/schemas/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;GAkBG;AAGH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAG5D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGtE,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBlB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAG9C,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAGpE,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAG9D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAGlE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Session - Captures work context for resumption
4
+ *
5
+ * When a work session is interrupted and resumed later, this schema
6
+ * enables immediate context restoration without manual review.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * {
11
+ * id: "session_abc123",
12
+ * name: "Phase 2 리팩토링",
13
+ * startedAt: "2025-01-02T10:00:00Z",
14
+ * endedAt: "2025-01-02T12:30:00Z",
15
+ * tasksWorked: ["task_123", "task_456"],
16
+ * tasksSummary: { completed: 2, inProgress: 1, created: 0 },
17
+ * context: "API 레이어 서비스 패턴 마이그레이션 진행 중"
18
+ * }
19
+ * ```
20
+ */
21
+ // Session summary - snapshot at session end
22
+ export const SessionSummary = z.object({
23
+ completed: z.number().default(0),
24
+ inProgress: z.number().default(0),
25
+ created: z.number().default(0),
26
+ cancelled: z.number().default(0),
27
+ });
28
+ // Task snapshot for session history (lightweight)
29
+ export const SessionTaskSnapshot = z.object({
30
+ taskId: z.string(),
31
+ title: z.string(),
32
+ status: z.enum(["pending", "in_progress", "blocked", "completed", "cancelled"]),
33
+ priority: z.enum(["critical", "high", "medium", "low"]).optional(),
34
+ });
35
+ // Core Session schema
36
+ export const Session = z.object({
37
+ id: z.string(),
38
+ workspace: z.string(),
39
+ // Optional session name for easy identification
40
+ name: z.string().optional(),
41
+ // Timestamps
42
+ startedAt: z.string(), // ISO datetime
43
+ endedAt: z.string().optional(), // ISO datetime, undefined if active
44
+ // Tasks worked during this session
45
+ tasksWorked: z.array(z.string()).default([]), // Task IDs
46
+ // Summary at session end
47
+ tasksSummary: SessionSummary.optional(),
48
+ // Detailed snapshots of tasks (for context restoration)
49
+ taskSnapshots: z.array(SessionTaskSnapshot).optional(),
50
+ // Free-form context memo (what was being worked on)
51
+ context: z.string().optional(),
52
+ // Duration in minutes (calculated at end)
53
+ durationMinutes: z.number().optional(),
54
+ });
55
+ // Session creation input
56
+ export const SessionCreateInput = z.object({
57
+ name: z.string().optional(),
58
+ context: z.string().optional(),
59
+ });
60
+ // Session update input (for ending session)
61
+ export const SessionEndInput = z.object({
62
+ context: z.string().optional(), // Update context memo at end
63
+ });
64
+ // Session list filter
65
+ export const SessionListFilter = z.object({
66
+ limit: z.number().min(1).max(100).default(10),
67
+ workspace: z.string().optional(), // Filter by workspace
68
+ includeActive: z.boolean().default(true), // Include sessions without endedAt
69
+ });
70
+ // Session resume response (for session_resume tool)
71
+ export const SessionResumeInfo = z.object({
72
+ lastSession: Session.optional(),
73
+ currentSession: Session.optional(),
74
+ inProgressTasks: z.array(SessionTaskSnapshot).default([]),
75
+ recentlyCompleted: z.array(SessionTaskSnapshot).default([]),
76
+ suggestedNextTask: SessionTaskSnapshot.optional(),
77
+ timeSinceLastSession: z.string().optional(), // Human-readable: "2 hours ago"
78
+ });
79
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/schemas/session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/schemas/task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/schemas/task.ts"],"names":[],"mappings":"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"}
@@ -19,19 +19,33 @@ export const TimeEstimate = z
19
19
  pessimistic: z.number().min(0).max(10080).optional(), // minutes
20
20
  confidence: z.enum(["low", "medium", "high"]).optional(),
21
21
  })
22
- .refine((data) => {
22
+ .superRefine((data, ctx) => {
23
23
  const { optimistic, expected, pessimistic } = data;
24
+ // Check: optimistic <= expected
24
25
  if (optimistic !== undefined && expected !== undefined && optimistic > expected) {
25
- return false;
26
+ ctx.addIssue({
27
+ code: z.ZodIssueCode.custom,
28
+ message: `optimistic (${optimistic}min) must be <= expected (${expected}min)`,
29
+ path: ["optimistic"],
30
+ });
26
31
  }
32
+ // Check: expected <= pessimistic
27
33
  if (expected !== undefined && pessimistic !== undefined && expected > pessimistic) {
28
- return false;
34
+ ctx.addIssue({
35
+ code: z.ZodIssueCode.custom,
36
+ message: `expected (${expected}min) must be <= pessimistic (${pessimistic}min)`,
37
+ path: ["expected"],
38
+ });
29
39
  }
40
+ // Check: optimistic <= pessimistic (when expected is not provided)
30
41
  if (optimistic !== undefined && pessimistic !== undefined && optimistic > pessimistic) {
31
- return false;
42
+ ctx.addIssue({
43
+ code: z.ZodIssueCode.custom,
44
+ message: `optimistic (${optimistic}min) must be <= pessimistic (${pessimistic}min)`,
45
+ path: ["optimistic"],
46
+ });
32
47
  }
33
- return true;
34
- }, { message: "Time estimates must satisfy: optimistic <= expected <= pessimistic" });
48
+ });
35
49
  // Recurrence pattern (discriminated union for type-safe pattern handling)
36
50
  export const Recurrence = z.discriminatedUnion("pattern", [
37
51
  z.object({