@task-mcp/shared 1.0.22 → 1.0.24
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.
- package/dist/algorithms/critical-path.d.ts +47 -0
- package/dist/algorithms/critical-path.d.ts.map +1 -0
- package/dist/algorithms/critical-path.js +340 -0
- package/dist/algorithms/critical-path.js.map +1 -0
- package/dist/algorithms/critical-path.test.d.ts +2 -0
- package/dist/algorithms/critical-path.test.d.ts.map +1 -0
- package/dist/algorithms/critical-path.test.js +184 -0
- package/dist/algorithms/critical-path.test.js.map +1 -0
- package/dist/algorithms/dependency-integrity.d.ts +81 -0
- package/dist/algorithms/dependency-integrity.d.ts.map +1 -0
- package/dist/algorithms/dependency-integrity.js +209 -0
- package/dist/algorithms/dependency-integrity.js.map +1 -0
- package/dist/algorithms/dependency-integrity.test.d.ts +2 -0
- package/dist/algorithms/dependency-integrity.test.d.ts.map +1 -0
- package/dist/algorithms/dependency-integrity.test.js +296 -0
- package/dist/algorithms/dependency-integrity.test.js.map +1 -0
- package/dist/algorithms/index.d.ts +5 -0
- package/dist/algorithms/index.d.ts.map +1 -0
- package/dist/algorithms/index.js +5 -0
- package/dist/algorithms/index.js.map +1 -0
- package/dist/algorithms/tech-analysis.d.ts +106 -0
- package/dist/algorithms/tech-analysis.d.ts.map +1 -0
- package/dist/algorithms/tech-analysis.js +351 -0
- package/dist/algorithms/tech-analysis.js.map +1 -0
- package/dist/algorithms/tech-analysis.test.d.ts +2 -0
- package/dist/algorithms/tech-analysis.test.d.ts.map +1 -0
- package/dist/algorithms/tech-analysis.test.js +330 -0
- package/dist/algorithms/tech-analysis.test.js.map +1 -0
- package/dist/algorithms/topological-sort.d.ts +58 -0
- package/dist/algorithms/topological-sort.d.ts.map +1 -0
- package/dist/algorithms/topological-sort.js +201 -0
- package/dist/algorithms/topological-sort.js.map +1 -0
- package/dist/algorithms/topological-sort.test.d.ts +2 -0
- package/dist/algorithms/topological-sort.test.d.ts.map +1 -0
- package/dist/algorithms/topological-sort.test.js +154 -0
- package/dist/algorithms/topological-sort.test.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/inbox.d.ts +55 -0
- package/dist/schemas/inbox.d.ts.map +1 -0
- package/dist/schemas/inbox.js +25 -0
- package/dist/schemas/inbox.js.map +1 -0
- package/dist/schemas/index.d.ts +7 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +17 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/llm-guide.d.ts +147 -0
- package/dist/schemas/llm-guide.d.ts.map +1 -0
- package/dist/schemas/llm-guide.js +72 -0
- package/dist/schemas/llm-guide.js.map +1 -0
- package/dist/schemas/project.d.ts +177 -0
- package/dist/schemas/project.d.ts.map +1 -0
- package/dist/schemas/project.js +56 -0
- package/dist/schemas/project.js.map +1 -0
- package/dist/schemas/response-format.d.ts +148 -0
- package/dist/schemas/response-format.d.ts.map +1 -0
- package/dist/schemas/response-format.js +18 -0
- package/dist/schemas/response-format.js.map +1 -0
- package/dist/schemas/response-schema.d.ts +307 -0
- package/dist/schemas/response-schema.d.ts.map +1 -0
- package/dist/schemas/response-schema.js +78 -0
- package/dist/schemas/response-schema.js.map +1 -0
- package/dist/schemas/response-schema.test.d.ts +2 -0
- package/dist/schemas/response-schema.test.d.ts.map +1 -0
- package/dist/schemas/response-schema.test.js +256 -0
- package/dist/schemas/response-schema.test.js.map +1 -0
- package/dist/schemas/state.d.ts +17 -0
- package/dist/schemas/state.d.ts.map +1 -0
- package/dist/schemas/state.js +17 -0
- package/dist/schemas/state.js.map +1 -0
- package/dist/schemas/task.d.ts +881 -0
- package/dist/schemas/task.d.ts.map +1 -0
- package/dist/schemas/task.js +177 -0
- package/dist/schemas/task.js.map +1 -0
- package/dist/schemas/view.d.ts +143 -0
- package/dist/schemas/view.d.ts.map +1 -0
- package/dist/schemas/view.js +48 -0
- package/dist/schemas/view.js.map +1 -0
- package/dist/utils/dashboard-renderer.d.ts +93 -0
- package/dist/utils/dashboard-renderer.d.ts.map +1 -0
- package/dist/utils/dashboard-renderer.js +416 -0
- package/dist/utils/dashboard-renderer.js.map +1 -0
- package/dist/utils/dashboard-renderer.test.d.ts +2 -0
- package/dist/utils/dashboard-renderer.test.d.ts.map +1 -0
- package/dist/utils/dashboard-renderer.test.js +772 -0
- package/dist/utils/dashboard-renderer.test.js.map +1 -0
- package/dist/utils/date.d.ts +94 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +323 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/date.test.d.ts +2 -0
- package/dist/utils/date.test.d.ts.map +1 -0
- package/dist/utils/date.test.js +276 -0
- package/dist/utils/date.test.js.map +1 -0
- package/dist/utils/hierarchy.d.ts +102 -0
- package/dist/utils/hierarchy.d.ts.map +1 -0
- package/dist/utils/hierarchy.js +236 -0
- package/dist/utils/hierarchy.js.map +1 -0
- package/dist/utils/hierarchy.test.d.ts +2 -0
- package/dist/utils/hierarchy.test.d.ts.map +1 -0
- package/dist/utils/hierarchy.test.js +423 -0
- package/dist/utils/hierarchy.test.js.map +1 -0
- package/dist/utils/id.d.ts +60 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +118 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/id.test.d.ts +2 -0
- package/dist/utils/id.test.d.ts.map +1 -0
- package/dist/utils/id.test.js +193 -0
- package/dist/utils/id.test.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +34 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/natural-language.d.ts +111 -0
- package/dist/utils/natural-language.d.ts.map +1 -0
- package/dist/utils/natural-language.js +297 -0
- package/dist/utils/natural-language.js.map +1 -0
- package/dist/utils/natural-language.test.d.ts +2 -0
- package/dist/utils/natural-language.test.d.ts.map +1 -0
- package/dist/utils/natural-language.test.js +197 -0
- package/dist/utils/natural-language.test.js.map +1 -0
- package/dist/utils/priority-queue.d.ts +17 -0
- package/dist/utils/priority-queue.d.ts.map +1 -0
- package/dist/utils/priority-queue.js +62 -0
- package/dist/utils/priority-queue.js.map +1 -0
- package/dist/utils/priority-queue.test.d.ts +2 -0
- package/dist/utils/priority-queue.test.d.ts.map +1 -0
- package/dist/utils/priority-queue.test.js +82 -0
- package/dist/utils/priority-queue.test.js.map +1 -0
- package/dist/utils/projection.d.ts +65 -0
- package/dist/utils/projection.d.ts.map +1 -0
- package/dist/utils/projection.js +180 -0
- package/dist/utils/projection.js.map +1 -0
- package/dist/utils/projection.test.d.ts +2 -0
- package/dist/utils/projection.test.d.ts.map +1 -0
- package/dist/utils/projection.test.js +341 -0
- package/dist/utils/projection.test.js.map +1 -0
- package/dist/utils/terminal-ui.d.ts +208 -0
- package/dist/utils/terminal-ui.d.ts.map +1 -0
- package/dist/utils/terminal-ui.js +614 -0
- package/dist/utils/terminal-ui.js.map +1 -0
- package/dist/utils/terminal-ui.test.d.ts +2 -0
- package/dist/utils/terminal-ui.test.d.ts.map +1 -0
- package/dist/utils/terminal-ui.test.js +683 -0
- package/dist/utils/terminal-ui.test.js.map +1 -0
- package/dist/utils/workspace.d.ts +102 -0
- package/dist/utils/workspace.d.ts.map +1 -0
- package/dist/utils/workspace.js +183 -0
- package/dist/utils/workspace.js.map +1 -0
- package/dist/utils/workspace.test.d.ts +2 -0
- package/dist/utils/workspace.test.d.ts.map +1 -0
- package/dist/utils/workspace.test.js +97 -0
- package/dist/utils/workspace.test.js.map +1 -0
- package/package.json +5 -1
- package/src/algorithms/critical-path.test.ts +227 -0
- package/src/algorithms/critical-path.ts +14 -34
- package/src/algorithms/dependency-integrity.test.ts +335 -0
- package/src/algorithms/dependency-integrity.ts +4 -13
- package/src/algorithms/tech-analysis.test.ts +405 -0
- package/src/algorithms/tech-analysis.ts +27 -27
- package/src/algorithms/topological-sort.test.ts +182 -0
- package/src/algorithms/topological-sort.ts +6 -10
- package/src/schemas/index.ts +2 -13
- package/src/schemas/response-format.ts +6 -6
- package/src/schemas/response-schema.test.ts +314 -0
- package/src/schemas/response-schema.ts +25 -20
- package/src/schemas/task.ts +4 -22
- package/src/utils/dashboard-renderer.test.ts +976 -0
- package/src/utils/dashboard-renderer.ts +27 -59
- package/src/utils/date.test.ts +329 -0
- package/src/utils/date.ts +2 -10
- package/src/utils/hierarchy.test.ts +488 -0
- package/src/utils/hierarchy.ts +4 -5
- package/src/utils/id.test.ts +235 -0
- package/src/utils/index.ts +7 -1
- package/src/utils/natural-language.test.ts +234 -0
- package/src/utils/priority-queue.test.ts +103 -0
- package/src/utils/projection.test.ts +430 -0
- package/src/utils/terminal-ui.test.ts +831 -0
- package/src/utils/terminal-ui.ts +53 -54
- package/src/utils/workspace.test.ts +125 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { PriorityQueue } from "./priority-queue";
|
|
3
|
+
describe("PriorityQueue", () => {
|
|
4
|
+
test("creates empty queue", () => {
|
|
5
|
+
const pq = new PriorityQueue((a, b) => a - b);
|
|
6
|
+
expect(pq.length).toBe(0);
|
|
7
|
+
expect(pq.isEmpty()).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
test("pop from empty queue returns undefined", () => {
|
|
10
|
+
const pq = new PriorityQueue((a, b) => a - b);
|
|
11
|
+
expect(pq.pop()).toBeUndefined();
|
|
12
|
+
});
|
|
13
|
+
test("peek from empty queue returns undefined", () => {
|
|
14
|
+
const pq = new PriorityQueue((a, b) => a - b);
|
|
15
|
+
expect(pq.peek()).toBeUndefined();
|
|
16
|
+
});
|
|
17
|
+
test("single element operations", () => {
|
|
18
|
+
const pq = new PriorityQueue((a, b) => a - b);
|
|
19
|
+
pq.push(42);
|
|
20
|
+
expect(pq.length).toBe(1);
|
|
21
|
+
expect(pq.peek()).toBe(42);
|
|
22
|
+
expect(pq.pop()).toBe(42);
|
|
23
|
+
expect(pq.isEmpty()).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
test("maintains max-heap property (higher value first with a-b comparator)", () => {
|
|
26
|
+
const pq = new PriorityQueue((a, b) => a - b);
|
|
27
|
+
pq.push(5);
|
|
28
|
+
pq.push(2);
|
|
29
|
+
pq.push(8);
|
|
30
|
+
pq.push(1);
|
|
31
|
+
pq.push(9);
|
|
32
|
+
// Max-heap: higher values come first
|
|
33
|
+
expect(pq.pop()).toBe(9);
|
|
34
|
+
expect(pq.pop()).toBe(8);
|
|
35
|
+
expect(pq.pop()).toBe(5);
|
|
36
|
+
expect(pq.pop()).toBe(2);
|
|
37
|
+
expect(pq.pop()).toBe(1);
|
|
38
|
+
});
|
|
39
|
+
test("works with reversed comparator (min-heap behavior)", () => {
|
|
40
|
+
const pq = new PriorityQueue((a, b) => b - a);
|
|
41
|
+
pq.push(5);
|
|
42
|
+
pq.push(2);
|
|
43
|
+
pq.push(8);
|
|
44
|
+
// Reversed comparator: smaller values come first
|
|
45
|
+
expect(pq.pop()).toBe(2);
|
|
46
|
+
expect(pq.pop()).toBe(5);
|
|
47
|
+
expect(pq.pop()).toBe(8);
|
|
48
|
+
});
|
|
49
|
+
test("works with objects", () => {
|
|
50
|
+
// Higher priority value = higher priority (max-heap)
|
|
51
|
+
const pq = new PriorityQueue((a, b) => a.priority - b.priority);
|
|
52
|
+
pq.push({ priority: 3, name: "high" });
|
|
53
|
+
pq.push({ priority: 1, name: "low" });
|
|
54
|
+
pq.push({ priority: 2, name: "medium" });
|
|
55
|
+
expect(pq.pop()?.name).toBe("high");
|
|
56
|
+
expect(pq.pop()?.name).toBe("medium");
|
|
57
|
+
expect(pq.pop()?.name).toBe("low");
|
|
58
|
+
});
|
|
59
|
+
test("length property tracks queue size correctly", () => {
|
|
60
|
+
const pq = new PriorityQueue((a, b) => a - b);
|
|
61
|
+
expect(pq.length).toBe(0);
|
|
62
|
+
pq.push(1);
|
|
63
|
+
expect(pq.length).toBe(1);
|
|
64
|
+
pq.push(2);
|
|
65
|
+
pq.push(3);
|
|
66
|
+
expect(pq.length).toBe(3);
|
|
67
|
+
pq.pop();
|
|
68
|
+
expect(pq.length).toBe(2);
|
|
69
|
+
pq.pop();
|
|
70
|
+
pq.pop();
|
|
71
|
+
expect(pq.length).toBe(0);
|
|
72
|
+
});
|
|
73
|
+
test("peek does not remove element", () => {
|
|
74
|
+
const pq = new PriorityQueue((a, b) => a - b);
|
|
75
|
+
pq.push(5);
|
|
76
|
+
pq.push(10);
|
|
77
|
+
expect(pq.peek()).toBe(10);
|
|
78
|
+
expect(pq.peek()).toBe(10);
|
|
79
|
+
expect(pq.length).toBe(2);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=priority-queue.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority-queue.test.js","sourceRoot":"","sources":["../../src/utils/priority-queue.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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 formatTask(task: Task, format: ResponseFormat): TaskSummary | TaskPreview | Task;
|
|
14
|
+
/**
|
|
15
|
+
* Project multiple tasks with optional limit
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatTasks(tasks: Task[], format: ResponseFormat, limit?: number): (TaskSummary | TaskPreview | Task)[];
|
|
18
|
+
/**
|
|
19
|
+
* Project tasks with pagination
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatTasksPaginated(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 formatInboxItem(item: InboxItem, format: ResponseFormat): InboxSummary | InboxPreview | InboxItem;
|
|
26
|
+
/**
|
|
27
|
+
* Project multiple inbox items with optional limit
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatInboxItems(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
|
|
@@ -0,0 +1 @@
|
|
|
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;AAUvC;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,IAAI,CA2B/F;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,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,oBAAoB,CAClC,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,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,GACrB,YAAY,GAAG,YAAY,GAAG,SAAS,CAuBzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,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,CAkCR"}
|
|
@@ -0,0 +1,180 @@
|
|
|
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
|
+
* Exhaustiveness check helper for switch statements.
|
|
9
|
+
* TypeScript will error if a case is not handled.
|
|
10
|
+
*/
|
|
11
|
+
function assertNever(value) {
|
|
12
|
+
throw new Error(`Unexpected value: ${value}`);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Project a single task to the specified format
|
|
16
|
+
*/
|
|
17
|
+
export function formatTask(task, format) {
|
|
18
|
+
switch (format) {
|
|
19
|
+
case "concise":
|
|
20
|
+
return {
|
|
21
|
+
id: task.id,
|
|
22
|
+
title: task.title,
|
|
23
|
+
status: task.status,
|
|
24
|
+
priority: task.priority,
|
|
25
|
+
};
|
|
26
|
+
case "standard":
|
|
27
|
+
return {
|
|
28
|
+
id: task.id,
|
|
29
|
+
title: task.title,
|
|
30
|
+
status: task.status,
|
|
31
|
+
priority: task.priority,
|
|
32
|
+
dueDate: task.dueDate,
|
|
33
|
+
tags: task.tags,
|
|
34
|
+
contexts: task.contexts,
|
|
35
|
+
parentId: task.parentId,
|
|
36
|
+
};
|
|
37
|
+
case "detailed":
|
|
38
|
+
return task;
|
|
39
|
+
default:
|
|
40
|
+
return assertNever(format);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Project multiple tasks with optional limit
|
|
45
|
+
*/
|
|
46
|
+
export function formatTasks(tasks, format, limit) {
|
|
47
|
+
const sliced = limit ? tasks.slice(0, limit) : tasks;
|
|
48
|
+
return sliced.map((task) => formatTask(task, format));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Project tasks with pagination
|
|
52
|
+
*/
|
|
53
|
+
export function formatTasksPaginated(tasks, format, limit = 20, offset = 0) {
|
|
54
|
+
const effectiveLimit = Math.min(limit, 100);
|
|
55
|
+
const sliced = tasks.slice(offset, offset + effectiveLimit);
|
|
56
|
+
const projected = sliced.map((task) => formatTask(task, format));
|
|
57
|
+
return {
|
|
58
|
+
items: projected,
|
|
59
|
+
total: tasks.length,
|
|
60
|
+
limit: effectiveLimit,
|
|
61
|
+
offset,
|
|
62
|
+
hasMore: offset + effectiveLimit < tasks.length,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Project a single inbox item to the specified format
|
|
67
|
+
*/
|
|
68
|
+
export function formatInboxItem(item, format) {
|
|
69
|
+
switch (format) {
|
|
70
|
+
case "concise":
|
|
71
|
+
return {
|
|
72
|
+
id: item.id,
|
|
73
|
+
content: item.content,
|
|
74
|
+
status: item.status,
|
|
75
|
+
};
|
|
76
|
+
case "standard":
|
|
77
|
+
return {
|
|
78
|
+
id: item.id,
|
|
79
|
+
content: item.content,
|
|
80
|
+
status: item.status,
|
|
81
|
+
capturedAt: item.capturedAt,
|
|
82
|
+
tags: item.tags,
|
|
83
|
+
};
|
|
84
|
+
case "detailed":
|
|
85
|
+
return item;
|
|
86
|
+
default:
|
|
87
|
+
return assertNever(format);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Project multiple inbox items with optional limit
|
|
92
|
+
*/
|
|
93
|
+
export function formatInboxItems(items, format, limit) {
|
|
94
|
+
const sliced = limit ? items.slice(0, limit) : items;
|
|
95
|
+
return sliced.map((item) => formatInboxItem(item, format));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Format response based on format type
|
|
99
|
+
* - concise/standard: JSON string for machine processing
|
|
100
|
+
* - detailed: Human-readable text
|
|
101
|
+
*/
|
|
102
|
+
export function formatResponse(data, format, detailedFormatter) {
|
|
103
|
+
if (format === "detailed" && detailedFormatter) {
|
|
104
|
+
return detailedFormatter(data);
|
|
105
|
+
}
|
|
106
|
+
// Concise and standard: compact JSON
|
|
107
|
+
return JSON.stringify(data);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Apply pagination parameters
|
|
111
|
+
*/
|
|
112
|
+
export function applyPagination(items, limit = 20, offset = 0) {
|
|
113
|
+
const effectiveLimit = Math.min(Math.max(1, limit), 100);
|
|
114
|
+
const effectiveOffset = Math.max(0, offset);
|
|
115
|
+
const sliced = items.slice(effectiveOffset, effectiveOffset + effectiveLimit);
|
|
116
|
+
return {
|
|
117
|
+
items: sliced,
|
|
118
|
+
hasMore: effectiveOffset + effectiveLimit < items.length,
|
|
119
|
+
total: items.length,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Truncate string for token efficiency
|
|
124
|
+
*/
|
|
125
|
+
export function truncate(str, maxLength = 100) {
|
|
126
|
+
if (str.length <= maxLength)
|
|
127
|
+
return str;
|
|
128
|
+
return str.slice(0, maxLength - 3) + "...";
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Summarize a list of items for token efficiency
|
|
132
|
+
*/
|
|
133
|
+
export function summarizeList(items, maxDisplay = 5, getId) {
|
|
134
|
+
const displayed = items.slice(0, maxDisplay);
|
|
135
|
+
const remaining = items.slice(maxDisplay);
|
|
136
|
+
return {
|
|
137
|
+
displayed,
|
|
138
|
+
remaining: remaining.length,
|
|
139
|
+
remainingIds: remaining.map(getId),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Sort tasks by sortOrder, then by other criteria.
|
|
144
|
+
* Tasks with sortOrder come first (ascending), then tasks without sortOrder (by updatedAt descending).
|
|
145
|
+
*
|
|
146
|
+
* @param tasks - Array of tasks to sort
|
|
147
|
+
* @param secondarySort - Optional secondary sort when sortOrder is equal or both undefined
|
|
148
|
+
* @returns Sorted array (mutates the original)
|
|
149
|
+
*/
|
|
150
|
+
export function sortTasks(tasks, secondarySort = "updatedAt") {
|
|
151
|
+
const priorityWeight = {
|
|
152
|
+
critical: 0,
|
|
153
|
+
high: 1,
|
|
154
|
+
medium: 2,
|
|
155
|
+
low: 3,
|
|
156
|
+
};
|
|
157
|
+
return tasks.sort((a, b) => {
|
|
158
|
+
// Primary: sortOrder (ascending, undefined goes last)
|
|
159
|
+
const orderA = a.sortOrder ?? Infinity;
|
|
160
|
+
const orderB = b.sortOrder ?? Infinity;
|
|
161
|
+
if (orderA !== orderB) {
|
|
162
|
+
return orderA - orderB;
|
|
163
|
+
}
|
|
164
|
+
// Secondary sort when sortOrder is equal or both undefined
|
|
165
|
+
switch (secondarySort) {
|
|
166
|
+
case "priority":
|
|
167
|
+
return (priorityWeight[a.priority] ?? 2) - (priorityWeight[b.priority] ?? 2);
|
|
168
|
+
case "dueDate": {
|
|
169
|
+
const dateA = a.dueDate ? new Date(a.dueDate).getTime() : Infinity;
|
|
170
|
+
const dateB = b.dueDate ? new Date(b.dueDate).getTime() : Infinity;
|
|
171
|
+
return dateA - dateB;
|
|
172
|
+
}
|
|
173
|
+
case "updatedAt":
|
|
174
|
+
return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();
|
|
175
|
+
default:
|
|
176
|
+
return assertNever(secondarySort);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/utils/projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.test.d.ts","sourceRoot":"","sources":["../../src/utils/projection.test.ts"],"names":[],"mappings":""}
|