@task-mcp/shared 1.0.19 → 1.0.21

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 (163) hide show
  1. package/package.json +1 -6
  2. package/src/schemas/task.ts +60 -14
  3. package/src/utils/date.ts +40 -0
  4. package/src/utils/hierarchy.ts +63 -1
  5. package/src/utils/index.ts +2 -0
  6. package/src/utils/natural-language.ts +12 -0
  7. package/src/utils/projection.ts +14 -3
  8. package/dist/algorithms/critical-path.d.ts +0 -46
  9. package/dist/algorithms/critical-path.d.ts.map +0 -1
  10. package/dist/algorithms/critical-path.js +0 -320
  11. package/dist/algorithms/critical-path.js.map +0 -1
  12. package/dist/algorithms/critical-path.test.d.ts +0 -2
  13. package/dist/algorithms/critical-path.test.d.ts.map +0 -1
  14. package/dist/algorithms/critical-path.test.js +0 -194
  15. package/dist/algorithms/critical-path.test.js.map +0 -1
  16. package/dist/algorithms/dependency-integrity.d.ts +0 -81
  17. package/dist/algorithms/dependency-integrity.d.ts.map +0 -1
  18. package/dist/algorithms/dependency-integrity.js +0 -207
  19. package/dist/algorithms/dependency-integrity.js.map +0 -1
  20. package/dist/algorithms/dependency-integrity.test.d.ts +0 -2
  21. package/dist/algorithms/dependency-integrity.test.d.ts.map +0 -1
  22. package/dist/algorithms/dependency-integrity.test.js +0 -309
  23. package/dist/algorithms/dependency-integrity.test.js.map +0 -1
  24. package/dist/algorithms/index.d.ts +0 -5
  25. package/dist/algorithms/index.d.ts.map +0 -1
  26. package/dist/algorithms/index.js +0 -5
  27. package/dist/algorithms/index.js.map +0 -1
  28. package/dist/algorithms/tech-analysis.d.ts +0 -106
  29. package/dist/algorithms/tech-analysis.d.ts.map +0 -1
  30. package/dist/algorithms/tech-analysis.js +0 -344
  31. package/dist/algorithms/tech-analysis.js.map +0 -1
  32. package/dist/algorithms/tech-analysis.test.d.ts +0 -2
  33. package/dist/algorithms/tech-analysis.test.d.ts.map +0 -1
  34. package/dist/algorithms/tech-analysis.test.js +0 -338
  35. package/dist/algorithms/tech-analysis.test.js.map +0 -1
  36. package/dist/algorithms/topological-sort.d.ts +0 -41
  37. package/dist/algorithms/topological-sort.d.ts.map +0 -1
  38. package/dist/algorithms/topological-sort.js +0 -165
  39. package/dist/algorithms/topological-sort.js.map +0 -1
  40. package/dist/algorithms/topological-sort.test.d.ts +0 -2
  41. package/dist/algorithms/topological-sort.test.d.ts.map +0 -1
  42. package/dist/algorithms/topological-sort.test.js +0 -162
  43. package/dist/algorithms/topological-sort.test.js.map +0 -1
  44. package/dist/index.d.ts +0 -4
  45. package/dist/index.d.ts.map +0 -1
  46. package/dist/index.js +0 -7
  47. package/dist/index.js.map +0 -1
  48. package/dist/schemas/inbox.d.ts +0 -55
  49. package/dist/schemas/inbox.d.ts.map +0 -1
  50. package/dist/schemas/inbox.js +0 -25
  51. package/dist/schemas/inbox.js.map +0 -1
  52. package/dist/schemas/index.d.ts +0 -7
  53. package/dist/schemas/index.d.ts.map +0 -1
  54. package/dist/schemas/index.js +0 -17
  55. package/dist/schemas/index.js.map +0 -1
  56. package/dist/schemas/project.d.ts +0 -177
  57. package/dist/schemas/project.d.ts.map +0 -1
  58. package/dist/schemas/project.js +0 -56
  59. package/dist/schemas/project.js.map +0 -1
  60. package/dist/schemas/response-format.d.ts +0 -148
  61. package/dist/schemas/response-format.d.ts.map +0 -1
  62. package/dist/schemas/response-format.js +0 -18
  63. package/dist/schemas/response-format.js.map +0 -1
  64. package/dist/schemas/response-schema.d.ts +0 -307
  65. package/dist/schemas/response-schema.d.ts.map +0 -1
  66. package/dist/schemas/response-schema.js +0 -75
  67. package/dist/schemas/response-schema.js.map +0 -1
  68. package/dist/schemas/response-schema.test.d.ts +0 -2
  69. package/dist/schemas/response-schema.test.d.ts.map +0 -1
  70. package/dist/schemas/response-schema.test.js +0 -256
  71. package/dist/schemas/response-schema.test.js.map +0 -1
  72. package/dist/schemas/state.d.ts +0 -17
  73. package/dist/schemas/state.d.ts.map +0 -1
  74. package/dist/schemas/state.js +0 -17
  75. package/dist/schemas/state.js.map +0 -1
  76. package/dist/schemas/task.d.ts +0 -625
  77. package/dist/schemas/task.d.ts.map +0 -1
  78. package/dist/schemas/task.js +0 -152
  79. package/dist/schemas/task.js.map +0 -1
  80. package/dist/schemas/view.d.ts +0 -143
  81. package/dist/schemas/view.d.ts.map +0 -1
  82. package/dist/schemas/view.js +0 -48
  83. package/dist/schemas/view.js.map +0 -1
  84. package/dist/utils/dashboard-renderer.d.ts +0 -93
  85. package/dist/utils/dashboard-renderer.d.ts.map +0 -1
  86. package/dist/utils/dashboard-renderer.js +0 -424
  87. package/dist/utils/dashboard-renderer.js.map +0 -1
  88. package/dist/utils/dashboard-renderer.test.d.ts +0 -2
  89. package/dist/utils/dashboard-renderer.test.d.ts.map +0 -1
  90. package/dist/utils/dashboard-renderer.test.js +0 -774
  91. package/dist/utils/dashboard-renderer.test.js.map +0 -1
  92. package/dist/utils/date.d.ts +0 -81
  93. package/dist/utils/date.d.ts.map +0 -1
  94. package/dist/utils/date.js +0 -294
  95. package/dist/utils/date.js.map +0 -1
  96. package/dist/utils/date.test.d.ts +0 -2
  97. package/dist/utils/date.test.d.ts.map +0 -1
  98. package/dist/utils/date.test.js +0 -276
  99. package/dist/utils/date.test.js.map +0 -1
  100. package/dist/utils/hierarchy.d.ts +0 -75
  101. package/dist/utils/hierarchy.d.ts.map +0 -1
  102. package/dist/utils/hierarchy.js +0 -189
  103. package/dist/utils/hierarchy.js.map +0 -1
  104. package/dist/utils/hierarchy.test.d.ts +0 -2
  105. package/dist/utils/hierarchy.test.d.ts.map +0 -1
  106. package/dist/utils/hierarchy.test.js +0 -351
  107. package/dist/utils/hierarchy.test.js.map +0 -1
  108. package/dist/utils/id.d.ts +0 -60
  109. package/dist/utils/id.d.ts.map +0 -1
  110. package/dist/utils/id.js +0 -118
  111. package/dist/utils/id.js.map +0 -1
  112. package/dist/utils/id.test.d.ts +0 -2
  113. package/dist/utils/id.test.d.ts.map +0 -1
  114. package/dist/utils/id.test.js +0 -193
  115. package/dist/utils/id.test.js.map +0 -1
  116. package/dist/utils/index.d.ts +0 -12
  117. package/dist/utils/index.d.ts.map +0 -1
  118. package/dist/utils/index.js +0 -34
  119. package/dist/utils/index.js.map +0 -1
  120. package/dist/utils/natural-language.d.ts +0 -57
  121. package/dist/utils/natural-language.d.ts.map +0 -1
  122. package/dist/utils/natural-language.js +0 -205
  123. package/dist/utils/natural-language.js.map +0 -1
  124. package/dist/utils/natural-language.test.d.ts +0 -2
  125. package/dist/utils/natural-language.test.d.ts.map +0 -1
  126. package/dist/utils/natural-language.test.js +0 -156
  127. package/dist/utils/natural-language.test.js.map +0 -1
  128. package/dist/utils/priority-queue.d.ts +0 -17
  129. package/dist/utils/priority-queue.d.ts.map +0 -1
  130. package/dist/utils/priority-queue.js +0 -62
  131. package/dist/utils/priority-queue.js.map +0 -1
  132. package/dist/utils/projection.d.ts +0 -65
  133. package/dist/utils/projection.d.ts.map +0 -1
  134. package/dist/utils/projection.js +0 -170
  135. package/dist/utils/projection.js.map +0 -1
  136. package/dist/utils/projection.test.d.ts +0 -2
  137. package/dist/utils/projection.test.d.ts.map +0 -1
  138. package/dist/utils/projection.test.js +0 -336
  139. package/dist/utils/projection.test.js.map +0 -1
  140. package/dist/utils/terminal-ui.d.ts +0 -208
  141. package/dist/utils/terminal-ui.d.ts.map +0 -1
  142. package/dist/utils/terminal-ui.js +0 -611
  143. package/dist/utils/terminal-ui.js.map +0 -1
  144. package/dist/utils/terminal-ui.test.d.ts +0 -2
  145. package/dist/utils/terminal-ui.test.d.ts.map +0 -1
  146. package/dist/utils/terminal-ui.test.js +0 -683
  147. package/dist/utils/terminal-ui.test.js.map +0 -1
  148. package/dist/utils/workspace.d.ts +0 -100
  149. package/dist/utils/workspace.d.ts.map +0 -1
  150. package/dist/utils/workspace.js +0 -173
  151. package/dist/utils/workspace.js.map +0 -1
  152. package/src/algorithms/critical-path.test.ts +0 -241
  153. package/src/algorithms/dependency-integrity.test.ts +0 -348
  154. package/src/algorithms/tech-analysis.test.ts +0 -413
  155. package/src/algorithms/topological-sort.test.ts +0 -190
  156. package/src/schemas/response-schema.test.ts +0 -314
  157. package/src/utils/dashboard-renderer.test.ts +0 -983
  158. package/src/utils/date.test.ts +0 -329
  159. package/src/utils/hierarchy.test.ts +0 -411
  160. package/src/utils/id.test.ts +0 -235
  161. package/src/utils/natural-language.test.ts +0 -182
  162. package/src/utils/projection.test.ts +0 -425
  163. package/src/utils/terminal-ui.test.ts +0 -831
@@ -1,156 +0,0 @@
1
- import { describe, test, expect } from "bun:test";
2
- import { parseTaskInput } from "./natural-language.js";
3
- describe("parseTaskInput", () => {
4
- describe("priority parsing", () => {
5
- test("parses !critical priority", () => {
6
- const result = parseTaskInput("Fix bug !critical");
7
- expect(result.priority).toBe("critical");
8
- expect(result.title).toBe("Fix bug");
9
- });
10
- test("parses !high priority", () => {
11
- const result = parseTaskInput("Review PR !high");
12
- expect(result.priority).toBe("high");
13
- });
14
- test("parses !medium priority", () => {
15
- const result = parseTaskInput("Write docs !medium");
16
- expect(result.priority).toBe("medium");
17
- });
18
- test("parses !low priority", () => {
19
- const result = parseTaskInput("Clean up !low");
20
- expect(result.priority).toBe("low");
21
- });
22
- test("parses Korean priority !높음", () => {
23
- const result = parseTaskInput("버그 수정 !높음");
24
- expect(result.priority).toBe("high");
25
- expect(result.title).toBe("버그 수정");
26
- });
27
- test("parses Korean priority !긴급", () => {
28
- const result = parseTaskInput("장애 대응 !긴급");
29
- expect(result.priority).toBe("critical");
30
- expect(result.title).toBe("장애 대응");
31
- });
32
- });
33
- describe("tag parsing", () => {
34
- test("parses single tag", () => {
35
- const result = parseTaskInput("Fix auth #backend");
36
- expect(result.tags).toEqual(["backend"]);
37
- expect(result.title).toBe("Fix auth");
38
- });
39
- test("parses multiple tags", () => {
40
- const result = parseTaskInput("Update API #backend #api #v2");
41
- expect(result.tags).toEqual(["backend", "api", "v2"]);
42
- });
43
- test("parses Korean tags", () => {
44
- const result = parseTaskInput("보고서 작성 #업무 #문서");
45
- expect(result.tags).toEqual(["업무", "문서"]);
46
- expect(result.title).toBe("보고서 작성");
47
- });
48
- });
49
- describe("context parsing", () => {
50
- test("parses single context", () => {
51
- const result = parseTaskInput("Deep work task @focus");
52
- expect(result.contexts).toEqual(["focus"]);
53
- expect(result.title).toBe("Deep work task");
54
- });
55
- test("parses multiple contexts", () => {
56
- const result = parseTaskInput("Review code @focus @office");
57
- expect(result.contexts).toEqual(["focus", "office"]);
58
- });
59
- });
60
- describe("due date parsing", () => {
61
- test("parses 'by tomorrow'", () => {
62
- const result = parseTaskInput("Submit report by tomorrow");
63
- expect(result.dueDate).toBeDefined();
64
- expect(result.title).toBe("Submit report");
65
- });
66
- test("parses 'until Friday'", () => {
67
- const result = parseTaskInput("Complete feature until Friday");
68
- expect(result.dueDate).toBeDefined();
69
- });
70
- test("parses Korean '내일까지'", () => {
71
- const result = parseTaskInput("보고서 제출 내일까지");
72
- expect(result.dueDate).toBeDefined();
73
- expect(result.title).toBe("보고서 제출");
74
- });
75
- test("parses standalone 'tomorrow' at end", () => {
76
- const result = parseTaskInput("Submit PR tomorrow");
77
- expect(result.dueDate).toBeDefined();
78
- expect(result.title).toBe("Submit PR");
79
- });
80
- });
81
- describe("time estimate parsing", () => {
82
- test("parses hours only", () => {
83
- const result = parseTaskInput("Write tests 2h");
84
- expect(result.estimate?.expected).toBe(120);
85
- });
86
- test("parses minutes only", () => {
87
- const result = parseTaskInput("Quick fix 30m");
88
- expect(result.estimate?.expected).toBe(30);
89
- });
90
- test("parses combined hours and minutes", () => {
91
- const result = parseTaskInput("Big refactor 1h30m");
92
- expect(result.estimate?.expected).toBe(90);
93
- });
94
- test("removes time estimate from title", () => {
95
- const result = parseTaskInput("Task 2h30m done");
96
- expect(result.estimate?.expected).toBe(150);
97
- expect(result.title).toBe("Task done");
98
- });
99
- });
100
- describe("sortOrder parsing", () => {
101
- test("parses ^1 as sortOrder 1", () => {
102
- const result = parseTaskInput("First task ^1");
103
- expect(result.sortOrder).toBe(1);
104
- expect(result.title).toBe("First task");
105
- });
106
- test("parses ^10 as sortOrder 10", () => {
107
- const result = parseTaskInput("Tenth task ^10");
108
- expect(result.sortOrder).toBe(10);
109
- expect(result.title).toBe("Tenth task");
110
- });
111
- test("parses sortOrder in middle of input", () => {
112
- const result = parseTaskInput("Task ^5 with more text");
113
- expect(result.sortOrder).toBe(5);
114
- expect(result.title).toBe("Task with more text");
115
- });
116
- test("parses sortOrder with other metadata", () => {
117
- const result = parseTaskInput("Task ^3 #dev !high");
118
- expect(result.sortOrder).toBe(3);
119
- expect(result.tags).toEqual(["dev"]);
120
- expect(result.priority).toBe("high");
121
- expect(result.title).toBe("Task");
122
- });
123
- });
124
- describe("combined parsing", () => {
125
- test("parses full English input", () => {
126
- const result = parseTaskInput("Review PR #dev !high @focus");
127
- expect(result.title).toBe("Review PR");
128
- expect(result.tags).toEqual(["dev"]);
129
- expect(result.priority).toBe("high");
130
- expect(result.contexts).toEqual(["focus"]);
131
- });
132
- test("parses input with due date", () => {
133
- const result = parseTaskInput("Submit report by tomorrow #work");
134
- expect(result.title).toBe("Submit report");
135
- expect(result.tags).toEqual(["work"]);
136
- expect(result.dueDate).toBeDefined();
137
- });
138
- test("parses full Korean input", () => {
139
- const result = parseTaskInput("보고서 작성 내일까지 #업무 !높음 @집중");
140
- expect(result.title).toBe("보고서 작성");
141
- expect(result.tags).toEqual(["업무"]);
142
- expect(result.priority).toBe("high");
143
- expect(result.contexts).toEqual(["집중"]);
144
- expect(result.dueDate).toBeDefined();
145
- });
146
- test("returns clean title with no metadata", () => {
147
- const result = parseTaskInput("Simple task");
148
- expect(result.title).toBe("Simple task");
149
- expect(result.tags).toBeUndefined();
150
- expect(result.priority).toBeUndefined();
151
- expect(result.contexts).toBeUndefined();
152
- expect(result.dueDate).toBeUndefined();
153
- });
154
- });
155
- });
156
- //# sourceMappingURL=natural-language.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"natural-language.test.js","sourceRoot":"","sources":["../../src/utils/natural-language.test.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Max-heap implementation for priority queue (higher priority = higher value comes first)
3
- * O(log n) insert and extract operations vs O(n log n) for sort-based approach
4
- */
5
- export declare class PriorityQueue<T> {
6
- private heap;
7
- private compare;
8
- constructor(compare: (a: T, b: T) => number);
9
- get length(): number;
10
- push(item: T): void;
11
- pop(): T | undefined;
12
- peek(): T | undefined;
13
- isEmpty(): boolean;
14
- private bubbleUp;
15
- private bubbleDown;
16
- }
17
- //# sourceMappingURL=priority-queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"priority-queue.d.ts","sourceRoot":"","sources":["../../src/utils/priority-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM;IAI3C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAKnB,GAAG,IAAI,CAAC,GAAG,SAAS;IAUpB,IAAI,IAAI,CAAC,GAAG,SAAS;IAIrB,OAAO,IAAI,OAAO;IAIlB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,UAAU;CAmBnB"}
@@ -1,62 +0,0 @@
1
- /**
2
- * Max-heap implementation for priority queue (higher priority = higher value comes first)
3
- * O(log n) insert and extract operations vs O(n log n) for sort-based approach
4
- */
5
- export class PriorityQueue {
6
- heap = [];
7
- compare;
8
- constructor(compare) {
9
- this.compare = compare;
10
- }
11
- get length() {
12
- return this.heap.length;
13
- }
14
- push(item) {
15
- this.heap.push(item);
16
- this.bubbleUp(this.heap.length - 1);
17
- }
18
- pop() {
19
- if (this.heap.length === 0)
20
- return undefined;
21
- if (this.heap.length === 1)
22
- return this.heap.pop();
23
- const result = this.heap[0];
24
- this.heap[0] = this.heap.pop();
25
- this.bubbleDown(0);
26
- return result;
27
- }
28
- peek() {
29
- return this.heap[0];
30
- }
31
- isEmpty() {
32
- return this.heap.length === 0;
33
- }
34
- bubbleUp(index) {
35
- while (index > 0) {
36
- const parentIndex = Math.floor((index - 1) / 2);
37
- if (this.compare(this.heap[index], this.heap[parentIndex]) <= 0)
38
- break;
39
- [this.heap[index], this.heap[parentIndex]] = [this.heap[parentIndex], this.heap[index]];
40
- index = parentIndex;
41
- }
42
- }
43
- bubbleDown(index) {
44
- const length = this.heap.length;
45
- while (true) {
46
- const leftChild = 2 * index + 1;
47
- const rightChild = 2 * index + 2;
48
- let largest = index;
49
- if (leftChild < length && this.compare(this.heap[leftChild], this.heap[largest]) > 0) {
50
- largest = leftChild;
51
- }
52
- if (rightChild < length && this.compare(this.heap[rightChild], this.heap[largest]) > 0) {
53
- largest = rightChild;
54
- }
55
- if (largest === index)
56
- break;
57
- [this.heap[index], this.heap[largest]] = [this.heap[largest], this.heap[index]];
58
- index = largest;
59
- }
60
- }
61
- }
62
- //# sourceMappingURL=priority-queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"priority-queue.js","sourceRoot":"","sources":["../../src/utils/priority-queue.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- /**
2
- * Projection Utilities
3
- *
4
- * Transform full objects into token-efficient projections.
5
- * Reduces token usage by 70-88% for list operations.
6
- */
7
- import type { Task } from "../schemas/task.js";
8
- import type { InboxItem } from "../schemas/inbox.js";
9
- import type { ResponseFormat, TaskSummary, TaskPreview, InboxSummary, InboxPreview, PaginatedResponse } from "../schemas/response-format.js";
10
- /**
11
- * Project a single task to the specified format
12
- */
13
- export declare function projectTask(task: Task, format: ResponseFormat): TaskSummary | TaskPreview | Task;
14
- /**
15
- * Project multiple tasks with optional limit
16
- */
17
- export declare function projectTasks(tasks: Task[], format: ResponseFormat, limit?: number): (TaskSummary | TaskPreview | Task)[];
18
- /**
19
- * Project tasks with pagination
20
- */
21
- export declare function projectTasksPaginated(tasks: Task[], format: ResponseFormat, limit?: number, offset?: number): PaginatedResponse<TaskSummary | TaskPreview | Task>;
22
- /**
23
- * Project a single inbox item to the specified format
24
- */
25
- export declare function projectInboxItem(item: InboxItem, format: ResponseFormat): InboxSummary | InboxPreview | InboxItem;
26
- /**
27
- * Project multiple inbox items with optional limit
28
- */
29
- export declare function projectInboxItems(items: InboxItem[], format: ResponseFormat, limit?: number): (InboxSummary | InboxPreview | InboxItem)[];
30
- /**
31
- * Format response based on format type
32
- * - concise/standard: JSON string for machine processing
33
- * - detailed: Human-readable text
34
- */
35
- export declare function formatResponse<T>(data: T | T[], format: ResponseFormat, detailedFormatter?: (data: T | T[]) => string): string;
36
- /**
37
- * Apply pagination parameters
38
- */
39
- export declare function applyPagination<T>(items: T[], limit?: number, offset?: number): {
40
- items: T[];
41
- hasMore: boolean;
42
- total: number;
43
- };
44
- /**
45
- * Truncate string for token efficiency
46
- */
47
- export declare function truncate(str: string, maxLength?: number): string;
48
- /**
49
- * Summarize a list of items for token efficiency
50
- */
51
- export declare function summarizeList<T>(items: T[], maxDisplay: number | undefined, getId: (item: T) => string): {
52
- displayed: T[];
53
- remaining: number;
54
- remainingIds: string[];
55
- };
56
- /**
57
- * Sort tasks by sortOrder, then by other criteria.
58
- * Tasks with sortOrder come first (ascending), then tasks without sortOrder (by updatedAt descending).
59
- *
60
- * @param tasks - Array of tasks to sort
61
- * @param secondarySort - Optional secondary sort when sortOrder is equal or both undefined
62
- * @returns Sorted array (mutates the original)
63
- */
64
- export declare function sortTasks(tasks: Task[], secondarySort?: "updatedAt" | "priority" | "dueDate"): Task[];
65
- //# sourceMappingURL=projection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/utils/projection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAEvC;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,IAAI,CA0BhG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,EAAE,CAGtC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,EAAE,cAAc,EACtB,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB,iBAAiB,CAAC,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,CAYrD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,GACrB,YAAY,GAAG,YAAY,GAAG,SAAS,CAsBzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAAE,EAClB,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC,EAAE,CAG7C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EACb,MAAM,EAAE,cAAc,EACtB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,GAC5C,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAUjD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAGrE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,MAAM,YAAI,EACtB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GACzB;IAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAS/D;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,GAAE,WAAW,GAAG,UAAU,GAAG,SAAuB,GAChE,IAAI,EAAE,CAiCR"}
@@ -1,170 +0,0 @@
1
- /**
2
- * Projection Utilities
3
- *
4
- * Transform full objects into token-efficient projections.
5
- * Reduces token usage by 70-88% for list operations.
6
- */
7
- /**
8
- * Project a single task to the specified format
9
- */
10
- export function projectTask(task, format) {
11
- switch (format) {
12
- case "concise":
13
- return {
14
- id: task.id,
15
- title: task.title,
16
- status: task.status,
17
- priority: task.priority,
18
- };
19
- case "standard":
20
- return {
21
- id: task.id,
22
- title: task.title,
23
- status: task.status,
24
- priority: task.priority,
25
- dueDate: task.dueDate,
26
- tags: task.tags,
27
- contexts: task.contexts,
28
- parentId: task.parentId,
29
- };
30
- case "detailed":
31
- default:
32
- return task;
33
- }
34
- }
35
- /**
36
- * Project multiple tasks with optional limit
37
- */
38
- export function projectTasks(tasks, format, limit) {
39
- const sliced = limit ? tasks.slice(0, limit) : tasks;
40
- return sliced.map((task) => projectTask(task, format));
41
- }
42
- /**
43
- * Project tasks with pagination
44
- */
45
- export function projectTasksPaginated(tasks, format, limit = 20, offset = 0) {
46
- const effectiveLimit = Math.min(limit, 100);
47
- const sliced = tasks.slice(offset, offset + effectiveLimit);
48
- const projected = sliced.map((task) => projectTask(task, format));
49
- return {
50
- items: projected,
51
- total: tasks.length,
52
- limit: effectiveLimit,
53
- offset,
54
- hasMore: offset + effectiveLimit < tasks.length,
55
- };
56
- }
57
- /**
58
- * Project a single inbox item to the specified format
59
- */
60
- export function projectInboxItem(item, format) {
61
- switch (format) {
62
- case "concise":
63
- return {
64
- id: item.id,
65
- content: item.content,
66
- status: item.status,
67
- };
68
- case "standard":
69
- return {
70
- id: item.id,
71
- content: item.content,
72
- status: item.status,
73
- capturedAt: item.capturedAt,
74
- tags: item.tags,
75
- };
76
- case "detailed":
77
- default:
78
- return item;
79
- }
80
- }
81
- /**
82
- * Project multiple inbox items with optional limit
83
- */
84
- export function projectInboxItems(items, format, limit) {
85
- const sliced = limit ? items.slice(0, limit) : items;
86
- return sliced.map((item) => projectInboxItem(item, format));
87
- }
88
- /**
89
- * Format response based on format type
90
- * - concise/standard: JSON string for machine processing
91
- * - detailed: Human-readable text
92
- */
93
- export function formatResponse(data, format, detailedFormatter) {
94
- if (format === "detailed" && detailedFormatter) {
95
- return detailedFormatter(data);
96
- }
97
- // Concise and standard: compact JSON
98
- return JSON.stringify(data);
99
- }
100
- /**
101
- * Apply pagination parameters
102
- */
103
- export function applyPagination(items, limit = 20, offset = 0) {
104
- const effectiveLimit = Math.min(Math.max(1, limit), 100);
105
- const effectiveOffset = Math.max(0, offset);
106
- const sliced = items.slice(effectiveOffset, effectiveOffset + effectiveLimit);
107
- return {
108
- items: sliced,
109
- hasMore: effectiveOffset + effectiveLimit < items.length,
110
- total: items.length,
111
- };
112
- }
113
- /**
114
- * Truncate string for token efficiency
115
- */
116
- export function truncate(str, maxLength = 100) {
117
- if (str.length <= maxLength)
118
- return str;
119
- return str.slice(0, maxLength - 3) + "...";
120
- }
121
- /**
122
- * Summarize a list of items for token efficiency
123
- */
124
- export function summarizeList(items, maxDisplay = 5, getId) {
125
- const displayed = items.slice(0, maxDisplay);
126
- const remaining = items.slice(maxDisplay);
127
- return {
128
- displayed,
129
- remaining: remaining.length,
130
- remainingIds: remaining.map(getId),
131
- };
132
- }
133
- /**
134
- * Sort tasks by sortOrder, then by other criteria.
135
- * Tasks with sortOrder come first (ascending), then tasks without sortOrder (by updatedAt descending).
136
- *
137
- * @param tasks - Array of tasks to sort
138
- * @param secondarySort - Optional secondary sort when sortOrder is equal or both undefined
139
- * @returns Sorted array (mutates the original)
140
- */
141
- export function sortTasks(tasks, secondarySort = "updatedAt") {
142
- const priorityWeight = {
143
- critical: 0,
144
- high: 1,
145
- medium: 2,
146
- low: 3,
147
- };
148
- return tasks.sort((a, b) => {
149
- // Primary: sortOrder (ascending, undefined goes last)
150
- const orderA = a.sortOrder ?? Infinity;
151
- const orderB = b.sortOrder ?? Infinity;
152
- if (orderA !== orderB) {
153
- return orderA - orderB;
154
- }
155
- // Secondary sort when sortOrder is equal or both undefined
156
- switch (secondarySort) {
157
- case "priority":
158
- return (priorityWeight[a.priority] ?? 2) - (priorityWeight[b.priority] ?? 2);
159
- case "dueDate": {
160
- const dateA = a.dueDate ? new Date(a.dueDate).getTime() : Infinity;
161
- const dateB = b.dueDate ? new Date(b.dueDate).getTime() : Infinity;
162
- return dateA - dateB;
163
- }
164
- case "updatedAt":
165
- default:
166
- return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();
167
- }
168
- });
169
- }
170
- //# sourceMappingURL=projection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/utils/projection.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=projection.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projection.test.d.ts","sourceRoot":"","sources":["../../src/utils/projection.test.ts"],"names":[],"mappings":""}