@task-mcp/shared 1.0.20 → 1.0.22

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 (175) hide show
  1. package/README.md +122 -0
  2. package/package.json +1 -6
  3. package/src/algorithms/critical-path.ts +31 -6
  4. package/src/algorithms/dependency-integrity.ts +5 -2
  5. package/src/algorithms/topological-sort.ts +66 -17
  6. package/src/utils/index.ts +5 -5
  7. package/src/utils/natural-language.ts +210 -83
  8. package/src/utils/projection.ts +8 -8
  9. package/src/utils/workspace.ts +16 -4
  10. package/dist/algorithms/critical-path.d.ts +0 -46
  11. package/dist/algorithms/critical-path.d.ts.map +0 -1
  12. package/dist/algorithms/critical-path.js +0 -320
  13. package/dist/algorithms/critical-path.js.map +0 -1
  14. package/dist/algorithms/critical-path.test.d.ts +0 -2
  15. package/dist/algorithms/critical-path.test.d.ts.map +0 -1
  16. package/dist/algorithms/critical-path.test.js +0 -194
  17. package/dist/algorithms/critical-path.test.js.map +0 -1
  18. package/dist/algorithms/dependency-integrity.d.ts +0 -81
  19. package/dist/algorithms/dependency-integrity.d.ts.map +0 -1
  20. package/dist/algorithms/dependency-integrity.js +0 -207
  21. package/dist/algorithms/dependency-integrity.js.map +0 -1
  22. package/dist/algorithms/dependency-integrity.test.d.ts +0 -2
  23. package/dist/algorithms/dependency-integrity.test.d.ts.map +0 -1
  24. package/dist/algorithms/dependency-integrity.test.js +0 -309
  25. package/dist/algorithms/dependency-integrity.test.js.map +0 -1
  26. package/dist/algorithms/index.d.ts +0 -5
  27. package/dist/algorithms/index.d.ts.map +0 -1
  28. package/dist/algorithms/index.js +0 -5
  29. package/dist/algorithms/index.js.map +0 -1
  30. package/dist/algorithms/tech-analysis.d.ts +0 -106
  31. package/dist/algorithms/tech-analysis.d.ts.map +0 -1
  32. package/dist/algorithms/tech-analysis.js +0 -344
  33. package/dist/algorithms/tech-analysis.js.map +0 -1
  34. package/dist/algorithms/tech-analysis.test.d.ts +0 -2
  35. package/dist/algorithms/tech-analysis.test.d.ts.map +0 -1
  36. package/dist/algorithms/tech-analysis.test.js +0 -338
  37. package/dist/algorithms/tech-analysis.test.js.map +0 -1
  38. package/dist/algorithms/topological-sort.d.ts +0 -41
  39. package/dist/algorithms/topological-sort.d.ts.map +0 -1
  40. package/dist/algorithms/topological-sort.js +0 -165
  41. package/dist/algorithms/topological-sort.js.map +0 -1
  42. package/dist/algorithms/topological-sort.test.d.ts +0 -2
  43. package/dist/algorithms/topological-sort.test.d.ts.map +0 -1
  44. package/dist/algorithms/topological-sort.test.js +0 -162
  45. package/dist/algorithms/topological-sort.test.js.map +0 -1
  46. package/dist/index.d.ts +0 -4
  47. package/dist/index.d.ts.map +0 -1
  48. package/dist/index.js +0 -7
  49. package/dist/index.js.map +0 -1
  50. package/dist/schemas/inbox.d.ts +0 -55
  51. package/dist/schemas/inbox.d.ts.map +0 -1
  52. package/dist/schemas/inbox.js +0 -25
  53. package/dist/schemas/inbox.js.map +0 -1
  54. package/dist/schemas/index.d.ts +0 -7
  55. package/dist/schemas/index.d.ts.map +0 -1
  56. package/dist/schemas/index.js +0 -17
  57. package/dist/schemas/index.js.map +0 -1
  58. package/dist/schemas/project.d.ts +0 -177
  59. package/dist/schemas/project.d.ts.map +0 -1
  60. package/dist/schemas/project.js +0 -56
  61. package/dist/schemas/project.js.map +0 -1
  62. package/dist/schemas/response-format.d.ts +0 -148
  63. package/dist/schemas/response-format.d.ts.map +0 -1
  64. package/dist/schemas/response-format.js +0 -18
  65. package/dist/schemas/response-format.js.map +0 -1
  66. package/dist/schemas/response-schema.d.ts +0 -307
  67. package/dist/schemas/response-schema.d.ts.map +0 -1
  68. package/dist/schemas/response-schema.js +0 -75
  69. package/dist/schemas/response-schema.js.map +0 -1
  70. package/dist/schemas/response-schema.test.d.ts +0 -2
  71. package/dist/schemas/response-schema.test.d.ts.map +0 -1
  72. package/dist/schemas/response-schema.test.js +0 -256
  73. package/dist/schemas/response-schema.test.js.map +0 -1
  74. package/dist/schemas/state.d.ts +0 -17
  75. package/dist/schemas/state.d.ts.map +0 -1
  76. package/dist/schemas/state.js +0 -17
  77. package/dist/schemas/state.js.map +0 -1
  78. package/dist/schemas/task.d.ts +0 -881
  79. package/dist/schemas/task.d.ts.map +0 -1
  80. package/dist/schemas/task.js +0 -189
  81. package/dist/schemas/task.js.map +0 -1
  82. package/dist/schemas/view.d.ts +0 -143
  83. package/dist/schemas/view.d.ts.map +0 -1
  84. package/dist/schemas/view.js +0 -48
  85. package/dist/schemas/view.js.map +0 -1
  86. package/dist/utils/dashboard-renderer.d.ts +0 -93
  87. package/dist/utils/dashboard-renderer.d.ts.map +0 -1
  88. package/dist/utils/dashboard-renderer.js +0 -424
  89. package/dist/utils/dashboard-renderer.js.map +0 -1
  90. package/dist/utils/dashboard-renderer.test.d.ts +0 -2
  91. package/dist/utils/dashboard-renderer.test.d.ts.map +0 -1
  92. package/dist/utils/dashboard-renderer.test.js +0 -774
  93. package/dist/utils/dashboard-renderer.test.js.map +0 -1
  94. package/dist/utils/date.d.ts +0 -94
  95. package/dist/utils/date.d.ts.map +0 -1
  96. package/dist/utils/date.js +0 -323
  97. package/dist/utils/date.js.map +0 -1
  98. package/dist/utils/date.test.d.ts +0 -2
  99. package/dist/utils/date.test.d.ts.map +0 -1
  100. package/dist/utils/date.test.js +0 -276
  101. package/dist/utils/date.test.js.map +0 -1
  102. package/dist/utils/hierarchy.d.ts +0 -102
  103. package/dist/utils/hierarchy.d.ts.map +0 -1
  104. package/dist/utils/hierarchy.js +0 -236
  105. package/dist/utils/hierarchy.js.map +0 -1
  106. package/dist/utils/hierarchy.test.d.ts +0 -2
  107. package/dist/utils/hierarchy.test.d.ts.map +0 -1
  108. package/dist/utils/hierarchy.test.js +0 -436
  109. package/dist/utils/hierarchy.test.js.map +0 -1
  110. package/dist/utils/id.d.ts +0 -60
  111. package/dist/utils/id.d.ts.map +0 -1
  112. package/dist/utils/id.js +0 -118
  113. package/dist/utils/id.js.map +0 -1
  114. package/dist/utils/id.test.d.ts +0 -2
  115. package/dist/utils/id.test.d.ts.map +0 -1
  116. package/dist/utils/id.test.js +0 -193
  117. package/dist/utils/id.test.js.map +0 -1
  118. package/dist/utils/index.d.ts +0 -12
  119. package/dist/utils/index.d.ts.map +0 -1
  120. package/dist/utils/index.js +0 -34
  121. package/dist/utils/index.js.map +0 -1
  122. package/dist/utils/natural-language.d.ts +0 -57
  123. package/dist/utils/natural-language.d.ts.map +0 -1
  124. package/dist/utils/natural-language.js +0 -211
  125. package/dist/utils/natural-language.js.map +0 -1
  126. package/dist/utils/natural-language.test.d.ts +0 -2
  127. package/dist/utils/natural-language.test.d.ts.map +0 -1
  128. package/dist/utils/natural-language.test.js +0 -197
  129. package/dist/utils/natural-language.test.js.map +0 -1
  130. package/dist/utils/priority-queue.d.ts +0 -17
  131. package/dist/utils/priority-queue.d.ts.map +0 -1
  132. package/dist/utils/priority-queue.js +0 -62
  133. package/dist/utils/priority-queue.js.map +0 -1
  134. package/dist/utils/priority-queue.test.d.ts +0 -2
  135. package/dist/utils/priority-queue.test.d.ts.map +0 -1
  136. package/dist/utils/priority-queue.test.js +0 -82
  137. package/dist/utils/priority-queue.test.js.map +0 -1
  138. package/dist/utils/projection.d.ts +0 -65
  139. package/dist/utils/projection.d.ts.map +0 -1
  140. package/dist/utils/projection.js +0 -180
  141. package/dist/utils/projection.js.map +0 -1
  142. package/dist/utils/projection.test.d.ts +0 -2
  143. package/dist/utils/projection.test.d.ts.map +0 -1
  144. package/dist/utils/projection.test.js +0 -336
  145. package/dist/utils/projection.test.js.map +0 -1
  146. package/dist/utils/terminal-ui.d.ts +0 -208
  147. package/dist/utils/terminal-ui.d.ts.map +0 -1
  148. package/dist/utils/terminal-ui.js +0 -611
  149. package/dist/utils/terminal-ui.js.map +0 -1
  150. package/dist/utils/terminal-ui.test.d.ts +0 -2
  151. package/dist/utils/terminal-ui.test.d.ts.map +0 -1
  152. package/dist/utils/terminal-ui.test.js +0 -683
  153. package/dist/utils/terminal-ui.test.js.map +0 -1
  154. package/dist/utils/workspace.d.ts +0 -100
  155. package/dist/utils/workspace.d.ts.map +0 -1
  156. package/dist/utils/workspace.js +0 -173
  157. package/dist/utils/workspace.js.map +0 -1
  158. package/dist/utils/workspace.test.d.ts +0 -2
  159. package/dist/utils/workspace.test.d.ts.map +0 -1
  160. package/dist/utils/workspace.test.js +0 -97
  161. package/dist/utils/workspace.test.js.map +0 -1
  162. package/src/algorithms/critical-path.test.ts +0 -241
  163. package/src/algorithms/dependency-integrity.test.ts +0 -348
  164. package/src/algorithms/tech-analysis.test.ts +0 -413
  165. package/src/algorithms/topological-sort.test.ts +0 -190
  166. package/src/schemas/response-schema.test.ts +0 -314
  167. package/src/utils/dashboard-renderer.test.ts +0 -983
  168. package/src/utils/date.test.ts +0 -329
  169. package/src/utils/hierarchy.test.ts +0 -505
  170. package/src/utils/id.test.ts +0 -235
  171. package/src/utils/natural-language.test.ts +0 -242
  172. package/src/utils/priority-queue.test.ts +0 -103
  173. package/src/utils/projection.test.ts +0 -425
  174. package/src/utils/terminal-ui.test.ts +0 -831
  175. package/src/utils/workspace.test.ts +0 -125
@@ -1,106 +0,0 @@
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 >= BREAKDOWN_MIN) */
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 (minimal breakdown)
101
- * 5-6: 3-4 (moderate breakdown)
102
- * 7-8: 5-6 (significant breakdown)
103
- * 9-10: 7-10 (extensive breakdown)
104
- */
105
- export declare function suggestSubtaskCount(score: number): number;
106
- //# sourceMappingURL=tech-analysis.d.ts.map
@@ -1 +0,0 @@
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;AA8EpE;;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,CA4F/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,gEAAgE;IAChE,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,CAwBzD"}
@@ -1,344 +0,0 @@
1
- /**
2
- * Tech area ordering rules (lower = execute first)
3
- * Based on dependency flow: DB changes → Infrastructure → Backend → Frontend → Tests
4
- */
5
- const TECH_ORDER = {
6
- schema: 0, // DB/schema changes first
7
- infra: 0, // Infrastructure setup
8
- devops: 1, // CI/CD pipelines
9
- backend: 2, // API/server
10
- frontend: 3, // UI
11
- test: 4, // Tests
12
- docs: 4, // Documentation
13
- refactor: 5, // Refactoring last
14
- };
15
- /**
16
- * Risk level ordering (lower = safer, execute first)
17
- */
18
- const RISK_ORDER = {
19
- low: 0,
20
- medium: 1,
21
- high: 2,
22
- critical: 3,
23
- };
24
- /**
25
- * Priority ordering for tiebreaker sorting (lower = higher priority)
26
- */
27
- const PRIORITY_ORDER = {
28
- critical: 0,
29
- high: 1,
30
- medium: 2,
31
- low: 3,
32
- };
33
- /** Default priority order when priority is undefined */
34
- const DEFAULT_PRIORITY_ORDER = PRIORITY_ORDER.medium;
35
- /** Initial value for tech order tracking (before any phase) */
36
- const INITIAL_TECH_ORDER = -1;
37
- /**
38
- * Complexity score thresholds for categorization
39
- */
40
- const COMPLEXITY_THRESHOLDS = {
41
- /** Maximum score for "low" complexity (1-3) */
42
- LOW_MAX: 3,
43
- /** Maximum score for "medium" complexity (4-6) */
44
- MEDIUM_MAX: 6,
45
- /** Minimum score requiring task breakdown (7+) */
46
- BREAKDOWN_MIN: 7,
47
- };
48
- /**
49
- * Complexity score ranges for subtask suggestion calculation
50
- */
51
- const SUBTASK_CALCULATION = {
52
- /** Maximum score requiring no breakdown */
53
- NO_BREAKDOWN_MAX: 2,
54
- /** Maximum score for minimal breakdown */
55
- MINIMAL_BREAKDOWN_MAX: 4,
56
- /** Subtask count for minimal breakdown */
57
- MINIMAL_SUBTASK_COUNT: 2,
58
- /** Maximum score for moderate breakdown (3-4 subtasks) */
59
- MODERATE_BREAKDOWN_MAX: 6,
60
- /** Maximum score for significant breakdown (5-6 subtasks) */
61
- SIGNIFICANT_BREAKDOWN_MAX: 8,
62
- /** Coefficients for subtask count calculation */
63
- MODERATE_COEFFICIENT: 0.5,
64
- MODERATE_BASE: 3,
65
- SIGNIFICANT_COEFFICIENT: 0.5,
66
- SIGNIFICANT_BASE: 5,
67
- EXTENSIVE_COEFFICIENT: 1.5,
68
- EXTENSIVE_BASE: 7,
69
- };
70
- /**
71
- * Get the minimum tech order value for a task
72
- * If multiple areas, use the lowest (most foundational)
73
- */
74
- function getMinTechOrder(task) {
75
- const areas = task.techStack?.areas ?? [];
76
- if (areas.length === 0)
77
- return TECH_ORDER.backend; // Default to backend
78
- return Math.min(...areas.map((area) => TECH_ORDER[area]));
79
- }
80
- /**
81
- * Get the risk order value for a task
82
- */
83
- function getRiskOrder(task) {
84
- const riskLevel = task.techStack?.riskLevel ?? "medium";
85
- return RISK_ORDER[riskLevel];
86
- }
87
- /**
88
- * Check if a task has breaking changes
89
- */
90
- function hasBreakingChange(task) {
91
- return task.techStack?.hasBreakingChange === true;
92
- }
93
- /**
94
- * Suggest safe execution order for tasks
95
- *
96
- * Ordering strategy:
97
- * 1. Tech level (schema → infra → devops → backend → frontend → test → docs → refactor)
98
- * 2. Risk level within same tech level (low → medium → high → critical)
99
- * 3. Breaking changes last within same tech/risk level
100
- * 4. Priority as tiebreaker (critical > high > medium > low)
101
- */
102
- export function suggestSafeOrder(tasks) {
103
- // Filter to active tasks only
104
- const activeTasks = tasks.filter((t) => t.status === "pending" || t.status === "in_progress");
105
- if (activeTasks.length === 0) {
106
- return {
107
- orderedTasks: [],
108
- phases: [],
109
- summary: {
110
- totalTasks: 0,
111
- breakingChanges: 0,
112
- highRiskCount: 0,
113
- },
114
- };
115
- }
116
- // Sort tasks
117
- const sorted = [...activeTasks].sort((a, b) => {
118
- // 1. Tech level (lower first)
119
- const techDiff = getMinTechOrder(a) - getMinTechOrder(b);
120
- if (techDiff !== 0)
121
- return techDiff;
122
- // 2. Risk level (lower first)
123
- const riskDiff = getRiskOrder(a) - getRiskOrder(b);
124
- if (riskDiff !== 0)
125
- return riskDiff;
126
- // 3. Breaking changes last
127
- const aBreaking = hasBreakingChange(a) ? 1 : 0;
128
- const bBreaking = hasBreakingChange(b) ? 1 : 0;
129
- if (aBreaking !== bBreaking)
130
- return aBreaking - bBreaking;
131
- // 4. Priority as tiebreaker (higher priority first)
132
- return (PRIORITY_ORDER[a.priority] ?? DEFAULT_PRIORITY_ORDER) - (PRIORITY_ORDER[b.priority] ?? DEFAULT_PRIORITY_ORDER);
133
- });
134
- // Group into phases by tech level
135
- const phases = [];
136
- let currentTechOrder = INITIAL_TECH_ORDER;
137
- let currentPhase = null;
138
- for (const task of sorted) {
139
- const techOrder = getMinTechOrder(task);
140
- if (techOrder !== currentTechOrder) {
141
- // Start new phase
142
- const primaryArea = getPrimaryArea(task);
143
- currentPhase = {
144
- phase: phases.length + 1,
145
- primaryArea,
146
- tasks: [task],
147
- notes: [],
148
- };
149
- phases.push(currentPhase);
150
- currentTechOrder = techOrder;
151
- }
152
- else {
153
- // Add to current phase
154
- currentPhase.tasks.push(task);
155
- }
156
- }
157
- // Add notes to phases
158
- for (const phase of phases) {
159
- const breakingCount = phase.tasks.filter(hasBreakingChange).length;
160
- const highRiskCount = phase.tasks.filter((t) => t.techStack?.riskLevel === "high" || t.techStack?.riskLevel === "critical").length;
161
- if (breakingCount > 0) {
162
- phase.notes.push(`${breakingCount} breaking change(s) - test thoroughly`);
163
- }
164
- if (highRiskCount > 0) {
165
- phase.notes.push(`${highRiskCount} high-risk task(s) - review carefully`);
166
- }
167
- }
168
- // Calculate summary
169
- const breakingChanges = sorted.filter(hasBreakingChange).length;
170
- const highRiskCount = sorted.filter((t) => t.techStack?.riskLevel === "high" || t.techStack?.riskLevel === "critical").length;
171
- return {
172
- orderedTasks: sorted,
173
- phases,
174
- summary: {
175
- totalTasks: sorted.length,
176
- breakingChanges,
177
- highRiskCount,
178
- },
179
- };
180
- }
181
- /**
182
- * Get the primary tech area for a task
183
- */
184
- function getPrimaryArea(task) {
185
- const areas = task.techStack?.areas;
186
- if (!areas || areas.length === 0)
187
- return "mixed";
188
- // Return the one with lowest order (most foundational)
189
- let primary = areas[0];
190
- for (let i = 1; i < areas.length; i++) {
191
- const area = areas[i];
192
- if (TECH_ORDER[area] < TECH_ORDER[primary]) {
193
- primary = area;
194
- }
195
- }
196
- return primary;
197
- }
198
- /**
199
- * Find tasks with breaking changes
200
- */
201
- export function findBreakingChanges(tasks) {
202
- return tasks.filter((t) => (t.status === "pending" || t.status === "in_progress") &&
203
- hasBreakingChange(t));
204
- }
205
- /**
206
- * Find high-risk tasks (high or critical risk level)
207
- */
208
- export function findHighRiskTasks(tasks) {
209
- return tasks.filter((t) => (t.status === "pending" || t.status === "in_progress") &&
210
- (t.techStack?.riskLevel === "high" || t.techStack?.riskLevel === "critical"));
211
- }
212
- /**
213
- * Group tasks by tech area
214
- * A task may appear in multiple groups if it spans multiple areas
215
- */
216
- export function groupByTechArea(tasks) {
217
- const groups = new Map();
218
- // Initialize all groups
219
- const allAreas = [
220
- "schema", "infra", "devops", "backend", "frontend", "test", "docs", "refactor"
221
- ];
222
- for (const area of allAreas) {
223
- groups.set(area, []);
224
- }
225
- // Group active tasks
226
- const activeTasks = tasks.filter((t) => t.status === "pending" || t.status === "in_progress");
227
- for (const task of activeTasks) {
228
- const areas = task.techStack?.areas ?? [];
229
- if (areas.length === 0) {
230
- // Default to backend if no area specified
231
- groups.get("backend").push(task);
232
- }
233
- else {
234
- for (const area of areas) {
235
- groups.get(area).push(task);
236
- }
237
- }
238
- }
239
- return groups;
240
- }
241
- /**
242
- * Analyze complexity distribution across tasks
243
- */
244
- export function getComplexitySummary(tasks) {
245
- const activeTasks = tasks.filter((t) => t.status === "pending" || t.status === "in_progress");
246
- const analyzed = activeTasks.filter((t) => t.complexity?.score !== undefined);
247
- const unanalyzed = activeTasks.filter((t) => t.complexity?.score === undefined);
248
- // Calculate distribution
249
- const distribution = {
250
- low: 0,
251
- medium: 0,
252
- high: 0,
253
- };
254
- let totalScore = 0;
255
- const needsBreakdown = [];
256
- for (const task of analyzed) {
257
- const score = task.complexity.score;
258
- totalScore += score;
259
- if (score <= COMPLEXITY_THRESHOLDS.LOW_MAX) {
260
- distribution.low++;
261
- }
262
- else if (score <= COMPLEXITY_THRESHOLDS.MEDIUM_MAX) {
263
- distribution.medium++;
264
- }
265
- else {
266
- distribution.high++;
267
- needsBreakdown.push(task);
268
- }
269
- }
270
- return {
271
- distribution,
272
- needsBreakdown,
273
- averageScore: analyzed.length > 0 ? totalScore / analyzed.length : 0,
274
- unanalyzed,
275
- };
276
- }
277
- /**
278
- * Analyze tech stack distribution across tasks
279
- */
280
- export function getTechStackSummary(tasks) {
281
- const activeTasks = tasks.filter((t) => t.status === "pending" || t.status === "in_progress");
282
- const analyzed = activeTasks.filter((t) => t.techStack?.areas !== undefined);
283
- const unanalyzed = activeTasks.filter((t) => t.techStack?.areas === undefined);
284
- // Count by area
285
- const areaCounts = {
286
- schema: 0,
287
- infra: 0,
288
- devops: 0,
289
- backend: 0,
290
- frontend: 0,
291
- test: 0,
292
- docs: 0,
293
- refactor: 0,
294
- };
295
- for (const task of analyzed) {
296
- for (const area of task.techStack.areas) {
297
- areaCounts[area]++;
298
- }
299
- }
300
- // Risk distribution
301
- const riskDistribution = {
302
- low: 0,
303
- medium: 0,
304
- high: 0,
305
- critical: 0,
306
- };
307
- for (const task of analyzed) {
308
- const risk = task.techStack?.riskLevel ?? "medium";
309
- riskDistribution[risk]++;
310
- }
311
- // Breaking changes
312
- const breakingChanges = findBreakingChanges(activeTasks);
313
- return {
314
- areaCounts,
315
- breakingChanges,
316
- riskDistribution,
317
- unanalyzed,
318
- };
319
- }
320
- /**
321
- * Suggest number of subtasks based on complexity score
322
- *
323
- * Mapping:
324
- * 1-2: 0 (no breakdown needed)
325
- * 3-4: 2 (minimal breakdown)
326
- * 5-6: 3-4 (moderate breakdown)
327
- * 7-8: 5-6 (significant breakdown)
328
- * 9-10: 7-10 (extensive breakdown)
329
- */
330
- export function suggestSubtaskCount(score) {
331
- const { NO_BREAKDOWN_MAX, MINIMAL_BREAKDOWN_MAX, MINIMAL_SUBTASK_COUNT, MODERATE_BREAKDOWN_MAX, SIGNIFICANT_BREAKDOWN_MAX, MODERATE_COEFFICIENT, MODERATE_BASE, SIGNIFICANT_COEFFICIENT, SIGNIFICANT_BASE, EXTENSIVE_COEFFICIENT, EXTENSIVE_BASE, } = SUBTASK_CALCULATION;
332
- if (score <= NO_BREAKDOWN_MAX)
333
- return 0;
334
- if (score <= MINIMAL_BREAKDOWN_MAX)
335
- return MINIMAL_SUBTASK_COUNT;
336
- if (score <= MODERATE_BREAKDOWN_MAX) {
337
- return Math.ceil((score - MINIMAL_BREAKDOWN_MAX) * MODERATE_COEFFICIENT + MODERATE_BASE);
338
- }
339
- if (score <= SIGNIFICANT_BREAKDOWN_MAX) {
340
- return Math.ceil((score - MODERATE_BREAKDOWN_MAX) * SIGNIFICANT_COEFFICIENT + SIGNIFICANT_BASE);
341
- }
342
- return Math.ceil((score - SIGNIFICANT_BREAKDOWN_MAX) * EXTENSIVE_COEFFICIENT + EXTENSIVE_BASE);
343
- }
344
- //# sourceMappingURL=tech-analysis.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tech-analysis.js","sourceRoot":"","sources":["../../src/algorithms/tech-analysis.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tech-analysis.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tech-analysis.test.d.ts","sourceRoot":"","sources":["../../src/algorithms/tech-analysis.test.ts"],"names":[],"mappings":""}