@task-mcp/shared 1.0.3 → 1.0.6
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.map +1 -1
- package/dist/algorithms/critical-path.js +50 -26
- package/dist/algorithms/critical-path.js.map +1 -1
- package/dist/algorithms/dependency-integrity.d.ts +73 -0
- package/dist/algorithms/dependency-integrity.d.ts.map +1 -0
- package/dist/algorithms/dependency-integrity.js +189 -0
- package/dist/algorithms/dependency-integrity.js.map +1 -0
- package/dist/algorithms/index.d.ts +2 -0
- package/dist/algorithms/index.d.ts.map +1 -1
- package/dist/algorithms/index.js +2 -0
- package/dist/algorithms/index.js.map +1 -1
- 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 +296 -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 +338 -0
- package/dist/algorithms/tech-analysis.test.js.map +1 -0
- package/dist/algorithms/topological-sort.d.ts.map +1 -1
- package/dist/algorithms/topological-sort.js +60 -8
- package/dist/algorithms/topological-sort.js.map +1 -1
- package/dist/schemas/inbox.d.ts +24 -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 +3 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +9 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/response-format.d.ts +79 -0
- package/dist/schemas/response-format.d.ts.map +1 -0
- package/dist/schemas/response-format.js +17 -0
- package/dist/schemas/response-format.js.map +1 -0
- package/dist/schemas/task.d.ts +57 -0
- package/dist/schemas/task.d.ts.map +1 -1
- package/dist/schemas/task.js +34 -0
- package/dist/schemas/task.js.map +1 -1
- package/dist/utils/date.d.ts.map +1 -1
- package/dist/utils/date.js +17 -2
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/hierarchy.d.ts +75 -0
- package/dist/utils/hierarchy.d.ts.map +1 -0
- package/dist/utils/hierarchy.js +179 -0
- package/dist/utils/hierarchy.js.map +1 -0
- package/dist/utils/id.d.ts +51 -1
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +124 -4
- package/dist/utils/id.js.map +1 -1
- 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 +228 -0
- package/dist/utils/id.test.js.map +1 -0
- package/dist/utils/index.d.ts +4 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +7 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/natural-language.d.ts +45 -0
- package/dist/utils/natural-language.d.ts.map +1 -1
- package/dist/utils/natural-language.js +86 -0
- package/dist/utils/natural-language.js.map +1 -1
- package/dist/utils/projection.d.ts +65 -0
- package/dist/utils/projection.d.ts.map +1 -0
- package/dist/utils/projection.js +181 -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 +400 -0
- package/dist/utils/projection.test.js.map +1 -0
- package/package.json +1 -1
- package/src/algorithms/critical-path.ts +56 -24
- package/src/algorithms/dependency-integrity.ts +270 -0
- package/src/algorithms/index.ts +28 -0
- package/src/algorithms/tech-analysis.test.ts +413 -0
- package/src/algorithms/tech-analysis.ts +412 -0
- package/src/algorithms/topological-sort.ts +66 -9
- package/src/schemas/inbox.ts +32 -0
- package/src/schemas/index.ts +31 -0
- package/src/schemas/response-format.ts +108 -0
- package/src/schemas/task.ts +50 -0
- package/src/utils/date.ts +18 -2
- package/src/utils/hierarchy.ts +224 -0
- package/src/utils/id.test.ts +281 -0
- package/src/utils/id.ts +139 -4
- package/src/utils/index.ts +46 -2
- package/src/utils/natural-language.ts +113 -0
- package/src/utils/projection.test.ts +505 -0
- package/src/utils/projection.ts +251 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"critical-path.d.ts","sourceRoot":"","sources":["../../src/algorithms/critical-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG/C;;GAEG;AACH,MAAM,WAAW,OAAQ,SAAQ,IAAI;IAEnC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,EAAE,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"critical-path.d.ts","sourceRoot":"","sources":["../../src/algorithms/critical-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG/C;;GAEG;AACH,MAAM,WAAW,OAAQ,SAAQ,IAAI;IAEnC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,EAAE,CAAC;CACxB;AA8ND;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,CAmD7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAiDzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GACL,IAAI,GAAG,IAAI,CAyDb"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { topologicalSort
|
|
1
|
+
import { topologicalSort } from "./topological-sort.js";
|
|
2
2
|
/** Default task duration if no estimate provided */
|
|
3
3
|
const DEFAULT_DURATION = 30;
|
|
4
4
|
/**
|
|
@@ -66,38 +66,50 @@ function calculateProjectDuration(taskMap) {
|
|
|
66
66
|
return Math.max(...Array.from(taskMap.values()).map((t) => t.earliestFinish));
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
|
-
*
|
|
69
|
+
* Build successor index: maps taskId -> list of tasks that depend on it
|
|
70
|
+
* This is O(n * d) where d is average dependencies, done once upfront
|
|
71
|
+
* Allows O(1) successor lookup instead of O(n) per task
|
|
70
72
|
*/
|
|
71
|
-
function
|
|
72
|
-
const
|
|
73
|
+
function buildSuccessorIndex(sortedTasks, taskMap) {
|
|
74
|
+
const successorIndex = new Map();
|
|
75
|
+
// Initialize empty arrays for all tasks
|
|
76
|
+
for (const task of sortedTasks) {
|
|
77
|
+
successorIndex.set(task.id, []);
|
|
78
|
+
}
|
|
79
|
+
// Build the index: if task A is blocked_by task B, then A is a successor of B
|
|
73
80
|
for (const task of sortedTasks) {
|
|
74
81
|
const deps = getBlockedByDeps(task);
|
|
82
|
+
const cpmTask = taskMap.get(task.id);
|
|
83
|
+
if (!cpmTask)
|
|
84
|
+
continue;
|
|
75
85
|
for (const depId of deps) {
|
|
76
|
-
|
|
86
|
+
const successors = successorIndex.get(depId);
|
|
87
|
+
if (successors) {
|
|
88
|
+
successors.push(cpmTask);
|
|
89
|
+
}
|
|
77
90
|
}
|
|
78
91
|
}
|
|
79
|
-
return
|
|
92
|
+
return successorIndex;
|
|
80
93
|
}
|
|
81
94
|
/**
|
|
82
|
-
* Find
|
|
95
|
+
* Find tasks that have successors (are dependencies of other tasks)
|
|
83
96
|
*/
|
|
84
|
-
function
|
|
85
|
-
const
|
|
86
|
-
for (const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
successors.push(other);
|
|
97
|
+
function findTasksWithSuccessors(successorIndex) {
|
|
98
|
+
const tasksWithSuccessors = new Set();
|
|
99
|
+
for (const [taskId, successors] of successorIndex) {
|
|
100
|
+
if (successors.length > 0) {
|
|
101
|
+
tasksWithSuccessors.add(taskId);
|
|
90
102
|
}
|
|
91
103
|
}
|
|
92
|
-
return
|
|
104
|
+
return tasksWithSuccessors;
|
|
93
105
|
}
|
|
94
106
|
/**
|
|
95
107
|
* Backward pass: Calculate latest start/finish times
|
|
96
108
|
* LF = min(LS of all successors) or projectDuration for end tasks
|
|
97
109
|
* LS = LF - duration
|
|
98
110
|
*/
|
|
99
|
-
function backwardPass(sortedTasks, taskMap, projectDuration) {
|
|
100
|
-
const tasksWithSuccessors = findTasksWithSuccessors(
|
|
111
|
+
function backwardPass(sortedTasks, taskMap, successorIndex, projectDuration) {
|
|
112
|
+
const tasksWithSuccessors = findTasksWithSuccessors(successorIndex);
|
|
101
113
|
// Initialize end tasks (tasks with no successors)
|
|
102
114
|
for (const task of taskMap.values()) {
|
|
103
115
|
if (!tasksWithSuccessors.has(task.id)) {
|
|
@@ -113,7 +125,7 @@ function backwardPass(sortedTasks, taskMap, projectDuration) {
|
|
|
113
125
|
if (!cpmTask)
|
|
114
126
|
continue;
|
|
115
127
|
const duration = getTaskDuration(task);
|
|
116
|
-
const successors =
|
|
128
|
+
const successors = successorIndex.get(task.id) ?? [];
|
|
117
129
|
if (successors.length > 0) {
|
|
118
130
|
// LF = min(LS of all successors)
|
|
119
131
|
cpmTask.latestFinish = Math.min(...successors.map((s) => s.latestStart));
|
|
@@ -134,14 +146,24 @@ function calculateSlackAndCritical(taskMap) {
|
|
|
134
146
|
}
|
|
135
147
|
}
|
|
136
148
|
/**
|
|
137
|
-
* Count dependents for bottleneck detection
|
|
149
|
+
* Count dependents for bottleneck detection using successor index
|
|
150
|
+
* Uses dynamic programming: dependentCount = direct successors + their dependentCounts
|
|
151
|
+
* O(n) instead of O(n³) with findDependents
|
|
138
152
|
*/
|
|
139
|
-
function countDependents(sortedTasks,
|
|
140
|
-
|
|
153
|
+
function countDependents(sortedTasks, taskMap, successorIndex) {
|
|
154
|
+
// Process in reverse topological order so we compute children before parents
|
|
155
|
+
const reverseSorted = [...sortedTasks].reverse();
|
|
156
|
+
for (const task of reverseSorted) {
|
|
141
157
|
const cpmTask = taskMap.get(task.id);
|
|
142
|
-
if (cpmTask)
|
|
143
|
-
|
|
158
|
+
if (!cpmTask)
|
|
159
|
+
continue;
|
|
160
|
+
const successors = successorIndex.get(task.id) ?? [];
|
|
161
|
+
// dependentCount = number of direct successors + sum of their dependentCounts
|
|
162
|
+
let count = successors.length;
|
|
163
|
+
for (const successor of successors) {
|
|
164
|
+
count += successor.dependentCount;
|
|
144
165
|
}
|
|
166
|
+
cpmTask.dependentCount = count;
|
|
145
167
|
}
|
|
146
168
|
}
|
|
147
169
|
/**
|
|
@@ -186,16 +208,18 @@ export function criticalPathAnalysis(tasks) {
|
|
|
186
208
|
const sortedTasks = topologicalSort(activeTasks);
|
|
187
209
|
// Initialize CPM tasks
|
|
188
210
|
const taskMap = initializeCPMTasks(sortedTasks);
|
|
211
|
+
// Build successor index once (O(n*d)) for O(1) lookups
|
|
212
|
+
const successorIndex = buildSuccessorIndex(sortedTasks, taskMap);
|
|
189
213
|
// Forward pass: Calculate earliest start/finish
|
|
190
214
|
forwardPass(sortedTasks, taskMap);
|
|
191
215
|
// Calculate project duration
|
|
192
216
|
const projectDuration = calculateProjectDuration(taskMap);
|
|
193
|
-
// Backward pass: Calculate latest start/finish
|
|
194
|
-
backwardPass(sortedTasks, taskMap, projectDuration);
|
|
217
|
+
// Backward pass: Calculate latest start/finish (uses successorIndex)
|
|
218
|
+
backwardPass(sortedTasks, taskMap, successorIndex, projectDuration);
|
|
195
219
|
// Calculate slack and mark critical tasks
|
|
196
220
|
calculateSlackAndCritical(taskMap);
|
|
197
|
-
// Count dependents for bottleneck detection
|
|
198
|
-
countDependents(sortedTasks,
|
|
221
|
+
// Count dependents for bottleneck detection (uses successorIndex, O(n))
|
|
222
|
+
countDependents(sortedTasks, taskMap, successorIndex);
|
|
199
223
|
// Extract critical path
|
|
200
224
|
const criticalPath = extractCriticalPath(sortedTasks, taskMap);
|
|
201
225
|
// Find bottlenecks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"critical-path.js","sourceRoot":"","sources":["../../src/algorithms/critical-path.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"critical-path.js","sourceRoot":"","sources":["../../src/algorithms/critical-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { Task } from "../schemas/task.js";
|
|
2
|
+
/**
|
|
3
|
+
* Error codes for dependency validation failures
|
|
4
|
+
*/
|
|
5
|
+
export declare enum DependencyErrorCode {
|
|
6
|
+
SELF_DEPENDENCY = "SELF_DEPENDENCY",
|
|
7
|
+
TASK_NOT_FOUND = "TASK_NOT_FOUND",
|
|
8
|
+
BLOCKER_NOT_FOUND = "BLOCKER_NOT_FOUND",
|
|
9
|
+
CIRCULAR_DEPENDENCY = "CIRCULAR_DEPENDENCY",
|
|
10
|
+
DUPLICATE_DEPENDENCY = "DUPLICATE_DEPENDENCY"
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Result of dependency validation
|
|
14
|
+
*/
|
|
15
|
+
export interface DependencyValidationResult {
|
|
16
|
+
valid: boolean;
|
|
17
|
+
errorCode?: DependencyErrorCode;
|
|
18
|
+
errorMessage?: string;
|
|
19
|
+
suggestion?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Options for dependency validation
|
|
23
|
+
*/
|
|
24
|
+
export interface ValidateDependencyOptions {
|
|
25
|
+
taskId: string;
|
|
26
|
+
blockedBy: string;
|
|
27
|
+
tasks: Task[];
|
|
28
|
+
checkDuplicates?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Validates if a dependency can be added between two tasks
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateDependency(options: ValidateDependencyOptions): DependencyValidationResult;
|
|
34
|
+
/**
|
|
35
|
+
* Invalid dependency reference
|
|
36
|
+
*/
|
|
37
|
+
export interface InvalidDependencyReference {
|
|
38
|
+
taskId: string;
|
|
39
|
+
taskTitle: string;
|
|
40
|
+
invalidDependencyId: string;
|
|
41
|
+
type: "blocked_by" | "blocks" | "related";
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find all invalid dependency references (orphaned references)
|
|
45
|
+
*/
|
|
46
|
+
export declare function findInvalidDependencies(tasks: Task[]): InvalidDependencyReference[];
|
|
47
|
+
/**
|
|
48
|
+
* Find tasks with self-dependencies
|
|
49
|
+
*/
|
|
50
|
+
export declare function findSelfDependencies(tasks: Task[]): string[];
|
|
51
|
+
/**
|
|
52
|
+
* Detect all circular dependency chains
|
|
53
|
+
*/
|
|
54
|
+
export declare function detectCircularDependencies(tasks: Task[]): string[][];
|
|
55
|
+
/**
|
|
56
|
+
* Comprehensive dependency integrity report
|
|
57
|
+
*/
|
|
58
|
+
export interface DependencyIntegrityReport {
|
|
59
|
+
valid: boolean;
|
|
60
|
+
totalTasks: number;
|
|
61
|
+
totalDependencies: number;
|
|
62
|
+
issues: {
|
|
63
|
+
selfDependencies: string[];
|
|
64
|
+
invalidReferences: InvalidDependencyReference[];
|
|
65
|
+
circularDependencies: string[][];
|
|
66
|
+
};
|
|
67
|
+
summary: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check overall dependency integrity of a project
|
|
71
|
+
*/
|
|
72
|
+
export declare function checkDependencyIntegrity(tasks: Task[]): DependencyIntegrityReport;
|
|
73
|
+
//# sourceMappingURL=dependency-integrity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-integrity.d.ts","sourceRoot":"","sources":["../../src/algorithms/dependency-integrity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG/C;;GAEG;AACH,oBAAY,mBAAmB;IAC7B,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,oBAAoB,yBAAyB;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,yBAAyB,GACjC,0BAA0B,CA8D5B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,IAAI,EAAE,GACZ,0BAA0B,EAAE,CAmB9B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAW5D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,EAAE,CAgDpE;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE;QACN,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,iBAAiB,EAAE,0BAA0B,EAAE,CAAC;QAChD,oBAAoB,EAAE,MAAM,EAAE,EAAE,CAAC;KAClC,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,IAAI,EAAE,GACZ,yBAAyB,CAyC3B"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { wouldCreateCycle } from "./topological-sort.js";
|
|
2
|
+
/**
|
|
3
|
+
* Error codes for dependency validation failures
|
|
4
|
+
*/
|
|
5
|
+
export var DependencyErrorCode;
|
|
6
|
+
(function (DependencyErrorCode) {
|
|
7
|
+
DependencyErrorCode["SELF_DEPENDENCY"] = "SELF_DEPENDENCY";
|
|
8
|
+
DependencyErrorCode["TASK_NOT_FOUND"] = "TASK_NOT_FOUND";
|
|
9
|
+
DependencyErrorCode["BLOCKER_NOT_FOUND"] = "BLOCKER_NOT_FOUND";
|
|
10
|
+
DependencyErrorCode["CIRCULAR_DEPENDENCY"] = "CIRCULAR_DEPENDENCY";
|
|
11
|
+
DependencyErrorCode["DUPLICATE_DEPENDENCY"] = "DUPLICATE_DEPENDENCY";
|
|
12
|
+
})(DependencyErrorCode || (DependencyErrorCode = {}));
|
|
13
|
+
/**
|
|
14
|
+
* Validates if a dependency can be added between two tasks
|
|
15
|
+
*/
|
|
16
|
+
export function validateDependency(options) {
|
|
17
|
+
const { taskId, blockedBy, tasks, checkDuplicates = true } = options;
|
|
18
|
+
// 1. Self-dependency check
|
|
19
|
+
if (taskId === blockedBy) {
|
|
20
|
+
return {
|
|
21
|
+
valid: false,
|
|
22
|
+
errorCode: DependencyErrorCode.SELF_DEPENDENCY,
|
|
23
|
+
errorMessage: `Task "${taskId}" cannot depend on itself`,
|
|
24
|
+
suggestion: "Specify a different blocker task",
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// 2. Task existence check
|
|
28
|
+
const task = tasks.find((t) => t.id === taskId);
|
|
29
|
+
if (!task) {
|
|
30
|
+
return {
|
|
31
|
+
valid: false,
|
|
32
|
+
errorCode: DependencyErrorCode.TASK_NOT_FOUND,
|
|
33
|
+
errorMessage: `Task not found: "${taskId}"`,
|
|
34
|
+
suggestion: "Use task_list to find available tasks",
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// 3. Blocker task existence check
|
|
38
|
+
const blocker = tasks.find((t) => t.id === blockedBy);
|
|
39
|
+
if (!blocker) {
|
|
40
|
+
return {
|
|
41
|
+
valid: false,
|
|
42
|
+
errorCode: DependencyErrorCode.BLOCKER_NOT_FOUND,
|
|
43
|
+
errorMessage: `Blocking task not found: "${blockedBy}"`,
|
|
44
|
+
suggestion: "Use task_list to find available tasks",
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// 4. Duplicate dependency check
|
|
48
|
+
if (checkDuplicates) {
|
|
49
|
+
const existingDeps = task.dependencies ?? [];
|
|
50
|
+
const alreadyExists = existingDeps.some((d) => d.taskId === blockedBy && d.type === "blocked_by");
|
|
51
|
+
if (alreadyExists) {
|
|
52
|
+
return {
|
|
53
|
+
valid: false,
|
|
54
|
+
errorCode: DependencyErrorCode.DUPLICATE_DEPENDENCY,
|
|
55
|
+
errorMessage: `"${task.title}" is already blocked by "${blocker.title}"`,
|
|
56
|
+
suggestion: "This dependency already exists",
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// 5. Circular dependency check
|
|
61
|
+
if (wouldCreateCycle(tasks, taskId, blockedBy)) {
|
|
62
|
+
return {
|
|
63
|
+
valid: false,
|
|
64
|
+
errorCode: DependencyErrorCode.CIRCULAR_DEPENDENCY,
|
|
65
|
+
errorMessage: "Adding this dependency would create a cycle",
|
|
66
|
+
suggestion: `"${blocker.title}" depends on "${task.title}". Use dependency_remove to break existing dependencies.`,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return { valid: true };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Find all invalid dependency references (orphaned references)
|
|
73
|
+
*/
|
|
74
|
+
export function findInvalidDependencies(tasks) {
|
|
75
|
+
const taskIds = new Set(tasks.map((t) => t.id));
|
|
76
|
+
const invalid = [];
|
|
77
|
+
for (const task of tasks) {
|
|
78
|
+
const deps = task.dependencies ?? [];
|
|
79
|
+
for (const dep of deps) {
|
|
80
|
+
if (!taskIds.has(dep.taskId)) {
|
|
81
|
+
invalid.push({
|
|
82
|
+
taskId: task.id,
|
|
83
|
+
taskTitle: task.title,
|
|
84
|
+
invalidDependencyId: dep.taskId,
|
|
85
|
+
type: dep.type,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return invalid;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Find tasks with self-dependencies
|
|
94
|
+
*/
|
|
95
|
+
export function findSelfDependencies(tasks) {
|
|
96
|
+
const selfDeps = [];
|
|
97
|
+
for (const task of tasks) {
|
|
98
|
+
const deps = task.dependencies ?? [];
|
|
99
|
+
if (deps.some((d) => d.taskId === task.id)) {
|
|
100
|
+
selfDeps.push(task.id);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return selfDeps;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Detect all circular dependency chains
|
|
107
|
+
*/
|
|
108
|
+
export function detectCircularDependencies(tasks) {
|
|
109
|
+
const taskMap = new Map(tasks.map((t) => [t.id, t]));
|
|
110
|
+
const visited = new Set();
|
|
111
|
+
const recStack = new Set();
|
|
112
|
+
const cycles = [];
|
|
113
|
+
function dfs(taskId, path) {
|
|
114
|
+
visited.add(taskId);
|
|
115
|
+
recStack.add(taskId);
|
|
116
|
+
path.push(taskId);
|
|
117
|
+
const task = taskMap.get(taskId);
|
|
118
|
+
if (!task)
|
|
119
|
+
return;
|
|
120
|
+
const deps = (task.dependencies ?? [])
|
|
121
|
+
.filter((d) => d.type === "blocked_by")
|
|
122
|
+
.map((d) => d.taskId);
|
|
123
|
+
for (const depId of deps) {
|
|
124
|
+
if (!taskMap.has(depId))
|
|
125
|
+
continue;
|
|
126
|
+
if (!visited.has(depId)) {
|
|
127
|
+
dfs(depId, [...path]);
|
|
128
|
+
}
|
|
129
|
+
else if (recStack.has(depId)) {
|
|
130
|
+
const cycleStart = path.indexOf(depId);
|
|
131
|
+
if (cycleStart !== -1) {
|
|
132
|
+
const cycle = path.slice(cycleStart);
|
|
133
|
+
const cycleKey = [...cycle].sort().join(",");
|
|
134
|
+
const exists = cycles.some((c) => [...c].sort().join(",") === cycleKey);
|
|
135
|
+
if (!exists) {
|
|
136
|
+
cycles.push(cycle);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
recStack.delete(taskId);
|
|
142
|
+
}
|
|
143
|
+
for (const task of tasks) {
|
|
144
|
+
if (!visited.has(task.id)) {
|
|
145
|
+
dfs(task.id, []);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return cycles;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Check overall dependency integrity of a project
|
|
152
|
+
*/
|
|
153
|
+
export function checkDependencyIntegrity(tasks) {
|
|
154
|
+
const selfDeps = findSelfDependencies(tasks);
|
|
155
|
+
const invalidRefs = findInvalidDependencies(tasks);
|
|
156
|
+
const cycles = detectCircularDependencies(tasks);
|
|
157
|
+
const totalDependencies = tasks.reduce((sum, t) => sum + (t.dependencies?.length ?? 0), 0);
|
|
158
|
+
const issueCount = selfDeps.length + invalidRefs.length + cycles.length;
|
|
159
|
+
const valid = issueCount === 0;
|
|
160
|
+
let summary;
|
|
161
|
+
if (valid) {
|
|
162
|
+
summary = `All ${totalDependencies} dependencies across ${tasks.length} tasks are valid.`;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const parts = [];
|
|
166
|
+
if (selfDeps.length > 0) {
|
|
167
|
+
parts.push(`${selfDeps.length} self-dependencies`);
|
|
168
|
+
}
|
|
169
|
+
if (invalidRefs.length > 0) {
|
|
170
|
+
parts.push(`${invalidRefs.length} invalid references`);
|
|
171
|
+
}
|
|
172
|
+
if (cycles.length > 0) {
|
|
173
|
+
parts.push(`${cycles.length} circular dependency chains`);
|
|
174
|
+
}
|
|
175
|
+
summary = `Found ${issueCount} issue(s): ${parts.join(", ")}.`;
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
valid,
|
|
179
|
+
totalTasks: tasks.length,
|
|
180
|
+
totalDependencies,
|
|
181
|
+
issues: {
|
|
182
|
+
selfDependencies: selfDeps,
|
|
183
|
+
invalidReferences: invalidRefs,
|
|
184
|
+
circularDependencies: cycles,
|
|
185
|
+
},
|
|
186
|
+
summary,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=dependency-integrity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-integrity.js","sourceRoot":"","sources":["../../src/algorithms/dependency-integrity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { topologicalSort, wouldCreateCycle, findDependents, findDependencies, priorityToNumber, taskToNode, type TaskNode, } from "./topological-sort.js";
|
|
2
2
|
export { criticalPathAnalysis, findParallelTasks, suggestNextTask, type CPMTask, type CPMResult, } from "./critical-path.js";
|
|
3
|
+
export { suggestSafeOrder, findBreakingChanges, findHighRiskTasks, groupByTechArea, getComplexitySummary, getTechStackSummary, suggestSubtaskCount, type SafeOrderResult, type SafeOrderPhase, type ComplexityDistribution, type ComplexitySummary, type TechStackSummary, } from "./tech-analysis.js";
|
|
4
|
+
export { validateDependency, findInvalidDependencies, findSelfDependencies, detectCircularDependencies, checkDependencyIntegrity, DependencyErrorCode, type DependencyValidationResult, type ValidateDependencyOptions, type InvalidDependencyReference, type DependencyIntegrityReport, } from "./dependency-integrity.js";
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,KAAK,QAAQ,GACd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,GACf,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,KAAK,QAAQ,GACd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,2BAA2B,CAAC"}
|
package/dist/algorithms/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { topologicalSort, wouldCreateCycle, findDependents, findDependencies, priorityToNumber, taskToNode, } from "./topological-sort.js";
|
|
2
2
|
export { criticalPathAnalysis, findParallelTasks, suggestNextTask, } from "./critical-path.js";
|
|
3
|
+
export { suggestSafeOrder, findBreakingChanges, findHighRiskTasks, groupByTechArea, getComplexitySummary, getTechStackSummary, suggestSubtaskCount, } from "./tech-analysis.js";
|
|
4
|
+
export { validateDependency, findInvalidDependencies, findSelfDependencies, detectCircularDependencies, checkDependencyIntegrity, DependencyErrorCode, } from "./dependency-integrity.js";
|
|
3
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,GAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAGhB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,GAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAGhB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GAMpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,GAKpB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { Task, TechArea, RiskLevel } from "../schemas/task.js";
|
|
2
|
+
/**
|
|
3
|
+
* Result of safe order suggestion
|
|
4
|
+
*/
|
|
5
|
+
export interface SafeOrderResult {
|
|
6
|
+
/** Tasks ordered for safe execution */
|
|
7
|
+
orderedTasks: Task[];
|
|
8
|
+
/** Grouping by phase/tech level */
|
|
9
|
+
phases: SafeOrderPhase[];
|
|
10
|
+
/** Summary statistics */
|
|
11
|
+
summary: {
|
|
12
|
+
totalTasks: number;
|
|
13
|
+
breakingChanges: number;
|
|
14
|
+
highRiskCount: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A phase in the safe execution order
|
|
19
|
+
*/
|
|
20
|
+
export interface SafeOrderPhase {
|
|
21
|
+
/** Phase number (1-based) */
|
|
22
|
+
phase: number;
|
|
23
|
+
/** Primary tech area for this phase */
|
|
24
|
+
primaryArea: TechArea | "mixed";
|
|
25
|
+
/** Tasks in this phase */
|
|
26
|
+
tasks: Task[];
|
|
27
|
+
/** Notes about this phase */
|
|
28
|
+
notes: string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Suggest safe execution order for tasks
|
|
32
|
+
*
|
|
33
|
+
* Ordering strategy:
|
|
34
|
+
* 1. Tech level (schema → infra → devops → backend → frontend → test → docs → refactor)
|
|
35
|
+
* 2. Risk level within same tech level (low → medium → high → critical)
|
|
36
|
+
* 3. Breaking changes last within same tech/risk level
|
|
37
|
+
* 4. Priority as tiebreaker (critical > high > medium > low)
|
|
38
|
+
*/
|
|
39
|
+
export declare function suggestSafeOrder(tasks: Task[]): SafeOrderResult;
|
|
40
|
+
/**
|
|
41
|
+
* Find tasks with breaking changes
|
|
42
|
+
*/
|
|
43
|
+
export declare function findBreakingChanges(tasks: Task[]): Task[];
|
|
44
|
+
/**
|
|
45
|
+
* Find high-risk tasks (high or critical risk level)
|
|
46
|
+
*/
|
|
47
|
+
export declare function findHighRiskTasks(tasks: Task[]): Task[];
|
|
48
|
+
/**
|
|
49
|
+
* Group tasks by tech area
|
|
50
|
+
* A task may appear in multiple groups if it spans multiple areas
|
|
51
|
+
*/
|
|
52
|
+
export declare function groupByTechArea(tasks: Task[]): Map<TechArea, Task[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Complexity distribution by level
|
|
55
|
+
*/
|
|
56
|
+
export interface ComplexityDistribution {
|
|
57
|
+
low: number;
|
|
58
|
+
medium: number;
|
|
59
|
+
high: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get complexity summary for a project
|
|
63
|
+
*/
|
|
64
|
+
export interface ComplexitySummary {
|
|
65
|
+
/** Distribution of complexity scores */
|
|
66
|
+
distribution: ComplexityDistribution;
|
|
67
|
+
/** Tasks that should be broken down (score >= 7) */
|
|
68
|
+
needsBreakdown: Task[];
|
|
69
|
+
/** Average complexity score */
|
|
70
|
+
averageScore: number;
|
|
71
|
+
/** Tasks without complexity analysis */
|
|
72
|
+
unanalyzed: Task[];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Analyze complexity distribution across tasks
|
|
76
|
+
*/
|
|
77
|
+
export declare function getComplexitySummary(tasks: Task[]): ComplexitySummary;
|
|
78
|
+
/**
|
|
79
|
+
* Get tech stack summary for a project
|
|
80
|
+
*/
|
|
81
|
+
export interface TechStackSummary {
|
|
82
|
+
/** Count of tasks per tech area */
|
|
83
|
+
areaCounts: Record<TechArea, number>;
|
|
84
|
+
/** Tasks with breaking changes */
|
|
85
|
+
breakingChanges: Task[];
|
|
86
|
+
/** Risk distribution */
|
|
87
|
+
riskDistribution: Record<RiskLevel, number>;
|
|
88
|
+
/** Tasks without tech stack analysis */
|
|
89
|
+
unanalyzed: Task[];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Analyze tech stack distribution across tasks
|
|
93
|
+
*/
|
|
94
|
+
export declare function getTechStackSummary(tasks: Task[]): TechStackSummary;
|
|
95
|
+
/**
|
|
96
|
+
* Suggest number of subtasks based on complexity score
|
|
97
|
+
*
|
|
98
|
+
* Mapping:
|
|
99
|
+
* 1-2: 0 (no breakdown needed)
|
|
100
|
+
* 3-4: 2
|
|
101
|
+
* 5-6: 3-4
|
|
102
|
+
* 7-8: 5-6
|
|
103
|
+
* 9-10: 7-10
|
|
104
|
+
*/
|
|
105
|
+
export declare function suggestSubtaskCount(score: number): number;
|
|
106
|
+
//# sourceMappingURL=tech-analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tech-analysis.d.ts","sourceRoot":"","sources":["../../src/algorithms/tech-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA2BpE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,YAAY,EAAE,IAAI,EAAE,CAAC;IACrB,mCAAmC;IACnC,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,yBAAyB;IACzB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC;IAChC,0BAA0B;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,6BAA6B;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AA4BD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,eAAe,CA6F/D;AAoBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAMzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAMvD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CA6BpE;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,YAAY,EAAE,sBAAsB,CAAC;IACrC,oDAAoD;IACpD,cAAc,EAAE,IAAI,EAAE,CAAC;IACvB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,UAAU,EAAE,IAAI,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAsCrE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,kCAAkC;IAClC,eAAe,EAAE,IAAI,EAAE,CAAC;IACxB,wBAAwB;IACxB,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,wCAAwC;IACxC,UAAU,EAAE,IAAI,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAgDnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD"}
|