@task-mcp/shared 1.0.28 → 1.0.30

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 (94) hide show
  1. package/dist/algorithms/index.d.ts +1 -1
  2. package/dist/algorithms/index.d.ts.map +1 -1
  3. package/dist/algorithms/index.js +1 -1
  4. package/dist/algorithms/index.js.map +1 -1
  5. package/dist/algorithms/topological-sort.d.ts +21 -1
  6. package/dist/algorithms/topological-sort.d.ts.map +1 -1
  7. package/dist/algorithms/topological-sort.js +12 -1
  8. package/dist/algorithms/topological-sort.js.map +1 -1
  9. package/dist/schemas/inbox.d.ts +2 -2
  10. package/dist/schemas/index.d.ts +1 -0
  11. package/dist/schemas/index.d.ts.map +1 -1
  12. package/dist/schemas/index.js +2 -0
  13. package/dist/schemas/index.js.map +1 -1
  14. package/dist/schemas/response-format.d.ts +11 -0
  15. package/dist/schemas/response-format.d.ts.map +1 -1
  16. package/dist/schemas/response-format.js.map +1 -1
  17. package/dist/schemas/session.d.ts +521 -0
  18. package/dist/schemas/session.d.ts.map +1 -0
  19. package/dist/schemas/session.js +79 -0
  20. package/dist/schemas/session.js.map +1 -0
  21. package/dist/schemas/state.d.ts +2 -2
  22. package/dist/schemas/task.d.ts +9 -0
  23. package/dist/schemas/task.d.ts.map +1 -1
  24. package/dist/schemas/task.js +23 -6
  25. package/dist/schemas/task.js.map +1 -1
  26. package/dist/schemas/view.d.ts +18 -18
  27. package/dist/utils/clustering.d.ts +60 -0
  28. package/dist/utils/clustering.d.ts.map +1 -0
  29. package/dist/utils/clustering.js +283 -0
  30. package/dist/utils/clustering.js.map +1 -0
  31. package/dist/utils/clustering.test.d.ts +2 -0
  32. package/dist/utils/clustering.test.d.ts.map +1 -0
  33. package/dist/utils/clustering.test.js +237 -0
  34. package/dist/utils/clustering.test.js.map +1 -0
  35. package/dist/utils/env.d.ts +24 -0
  36. package/dist/utils/env.d.ts.map +1 -0
  37. package/dist/utils/env.js +40 -0
  38. package/dist/utils/env.js.map +1 -0
  39. package/dist/utils/hierarchy.d.ts.map +1 -1
  40. package/dist/utils/hierarchy.js +13 -6
  41. package/dist/utils/hierarchy.js.map +1 -1
  42. package/dist/utils/index.d.ts +6 -2
  43. package/dist/utils/index.d.ts.map +1 -1
  44. package/dist/utils/index.js +24 -2
  45. package/dist/utils/index.js.map +1 -1
  46. package/dist/utils/intent-extractor.d.ts +30 -0
  47. package/dist/utils/intent-extractor.d.ts.map +1 -0
  48. package/dist/utils/intent-extractor.js +135 -0
  49. package/dist/utils/intent-extractor.js.map +1 -0
  50. package/dist/utils/intent-extractor.test.d.ts +2 -0
  51. package/dist/utils/intent-extractor.test.d.ts.map +1 -0
  52. package/dist/utils/intent-extractor.test.js +69 -0
  53. package/dist/utils/intent-extractor.test.js.map +1 -0
  54. package/dist/utils/natural-language.d.ts.map +1 -1
  55. package/dist/utils/natural-language.js +9 -8
  56. package/dist/utils/natural-language.js.map +1 -1
  57. package/dist/utils/natural-language.test.js +22 -0
  58. package/dist/utils/natural-language.test.js.map +1 -1
  59. package/dist/utils/plan-parser.d.ts +57 -0
  60. package/dist/utils/plan-parser.d.ts.map +1 -0
  61. package/dist/utils/plan-parser.js +371 -0
  62. package/dist/utils/plan-parser.js.map +1 -0
  63. package/dist/utils/projection.d.ts.map +1 -1
  64. package/dist/utils/projection.js +43 -1
  65. package/dist/utils/projection.js.map +1 -1
  66. package/dist/utils/projection.test.js +57 -7
  67. package/dist/utils/projection.test.js.map +1 -1
  68. package/dist/utils/terminal-ui.d.ts +129 -0
  69. package/dist/utils/terminal-ui.d.ts.map +1 -1
  70. package/dist/utils/terminal-ui.js +191 -0
  71. package/dist/utils/terminal-ui.js.map +1 -1
  72. package/dist/utils/terminal-ui.test.js +227 -0
  73. package/dist/utils/terminal-ui.test.js.map +1 -1
  74. package/package.json +2 -2
  75. package/src/algorithms/index.ts +3 -0
  76. package/src/algorithms/topological-sort.ts +31 -1
  77. package/src/schemas/index.ts +11 -0
  78. package/src/schemas/response-format.ts +15 -2
  79. package/src/schemas/session.ts +100 -0
  80. package/src/schemas/task.ts +33 -16
  81. package/src/utils/clustering.test.ts +285 -0
  82. package/src/utils/clustering.ts +336 -0
  83. package/src/utils/env.ts +41 -0
  84. package/src/utils/hierarchy.ts +17 -8
  85. package/src/utils/index.ts +48 -0
  86. package/src/utils/intent-extractor.test.ts +84 -0
  87. package/src/utils/intent-extractor.ts +156 -0
  88. package/src/utils/natural-language.test.ts +27 -0
  89. package/src/utils/natural-language.ts +10 -9
  90. package/src/utils/plan-parser.ts +466 -0
  91. package/src/utils/projection.test.ts +61 -7
  92. package/src/utils/projection.ts +44 -1
  93. package/src/utils/terminal-ui.test.ts +277 -0
  94. package/src/utils/terminal-ui.ts +315 -0
@@ -0,0 +1,237 @@
1
+ import { describe, test, expect } from "bun:test";
2
+ import { tokenize, jaccardSimilarity, calculateTaskSimilarity, findRelatedTasks, clusterTasks, } from "./clustering.js";
3
+ // Helper to create minimal task for testing
4
+ function createTask(overrides) {
5
+ return {
6
+ status: "pending",
7
+ priority: "medium",
8
+ workspace: "test-workspace",
9
+ tags: [],
10
+ contexts: [],
11
+ createdAt: new Date().toISOString(),
12
+ updatedAt: new Date().toISOString(),
13
+ ...overrides,
14
+ };
15
+ }
16
+ describe("tokenize", () => {
17
+ test("splits on whitespace and punctuation", () => {
18
+ expect(tokenize("Fix the bug")).toEqual(["fix", "bug"]);
19
+ expect(tokenize("user-authentication")).toEqual(["user", "authentication"]);
20
+ expect(tokenize("task.create")).toEqual(["task", "create"]);
21
+ });
22
+ test("removes stop words", () => {
23
+ expect(tokenize("the user is authenticated")).toEqual(["user", "authenticated"]);
24
+ expect(tokenize("to be or not to be")).toEqual([]);
25
+ });
26
+ test("removes short tokens (< 2 chars)", () => {
27
+ // "I" and "a" are 1 char, removed. "am" is a stop word
28
+ expect(tokenize("I am a user")).toEqual(["user"]);
29
+ });
30
+ test("handles Korean text", () => {
31
+ expect(tokenize("버그 수정하기")).toEqual(["버그", "수정하기"]);
32
+ // Korean particles are removed
33
+ expect(tokenize("사용자를")).toEqual(["사용자를"]); // 를 is suffix, not separate word
34
+ });
35
+ test("handles empty input", () => {
36
+ expect(tokenize("")).toEqual([]);
37
+ expect(tokenize(" ")).toEqual([]);
38
+ });
39
+ });
40
+ describe("jaccardSimilarity", () => {
41
+ test("returns 1 for identical sets", () => {
42
+ expect(jaccardSimilarity(["fix", "bug"], ["fix", "bug"])).toBe(1);
43
+ });
44
+ test("returns 0 for completely different sets", () => {
45
+ expect(jaccardSimilarity(["fix", "bug"], ["create", "feature"])).toBe(0);
46
+ });
47
+ test("returns 0.5 for half overlap", () => {
48
+ expect(jaccardSimilarity(["fix", "bug"], ["fix", "error"])).toBeCloseTo(0.333, 2);
49
+ });
50
+ test("handles empty arrays", () => {
51
+ expect(jaccardSimilarity([], [])).toBe(0);
52
+ expect(jaccardSimilarity(["fix"], [])).toBe(0);
53
+ });
54
+ });
55
+ describe("calculateTaskSimilarity", () => {
56
+ test("returns high similarity for tasks with same intent", () => {
57
+ const task1 = createTask({
58
+ id: "1",
59
+ title: "Fix login bug",
60
+ workContext: { intent: "Fix issue or bug" },
61
+ });
62
+ const task2 = createTask({
63
+ id: "2",
64
+ title: "Debug authentication",
65
+ workContext: { intent: "Fix issue or bug" },
66
+ });
67
+ const similarity = calculateTaskSimilarity(task1, task2);
68
+ expect(similarity).toBeGreaterThan(0.3);
69
+ });
70
+ test("returns high similarity for tasks with similar titles", () => {
71
+ const task1 = createTask({
72
+ id: "1",
73
+ title: "Implement user authentication",
74
+ });
75
+ const task2 = createTask({
76
+ id: "2",
77
+ title: "Implement admin authentication",
78
+ });
79
+ const similarity = calculateTaskSimilarity(task1, task2);
80
+ expect(similarity).toBeGreaterThan(0.3);
81
+ });
82
+ test("returns low similarity for unrelated tasks", () => {
83
+ const task1 = createTask({
84
+ id: "1",
85
+ title: "Fix login bug",
86
+ workContext: { intent: "Fix issue or bug" },
87
+ });
88
+ const task2 = createTask({
89
+ id: "2",
90
+ title: "Write documentation",
91
+ workContext: { intent: "Document functionality" },
92
+ });
93
+ const similarity = calculateTaskSimilarity(task1, task2);
94
+ expect(similarity).toBeLessThan(0.2);
95
+ });
96
+ test("handles tasks with missing fields", () => {
97
+ const task1 = createTask({ id: "1", title: "Task one" });
98
+ const task2 = createTask({ id: "2", title: "Task two" });
99
+ // Should not throw
100
+ const similarity = calculateTaskSimilarity(task1, task2);
101
+ expect(similarity).toBeGreaterThanOrEqual(0);
102
+ });
103
+ });
104
+ describe("findRelatedTasks", () => {
105
+ const tasks = [
106
+ createTask({
107
+ id: "auth-1",
108
+ title: "Implement user authentication",
109
+ workContext: { intent: "Implement new functionality" },
110
+ }),
111
+ createTask({
112
+ id: "auth-2",
113
+ title: "Implement OAuth authentication",
114
+ workContext: { intent: "Implement new functionality" },
115
+ }),
116
+ createTask({
117
+ id: "bug-1",
118
+ title: "Fix login bug",
119
+ workContext: { intent: "Fix issue or bug" },
120
+ }),
121
+ createTask({
122
+ id: "doc-1",
123
+ title: "Write API documentation",
124
+ workContext: { intent: "Document functionality" },
125
+ }),
126
+ createTask({
127
+ id: "completed-1",
128
+ title: "Implement session authentication",
129
+ status: "completed",
130
+ workContext: { intent: "Implement new functionality" },
131
+ }),
132
+ ];
133
+ test("finds related tasks by similarity", () => {
134
+ const related = findRelatedTasks(tasks[0], tasks);
135
+ // auth-2 should be most similar to auth-1
136
+ expect(related.length).toBeGreaterThan(0);
137
+ expect(related[0].task.id).toBe("auth-2");
138
+ });
139
+ test("excludes completed tasks by default", () => {
140
+ const related = findRelatedTasks(tasks[0], tasks);
141
+ const hasCompleted = related.some((r) => r.task.status === "completed");
142
+ expect(hasCompleted).toBe(false);
143
+ });
144
+ test("includes completed tasks when requested", () => {
145
+ const related = findRelatedTasks(tasks[0], tasks, { excludeCompleted: false });
146
+ const hasCompleted = related.some((r) => r.task.status === "completed");
147
+ expect(hasCompleted).toBe(true);
148
+ });
149
+ test("respects limit option", () => {
150
+ const related = findRelatedTasks(tasks[0], tasks, { limit: 1 });
151
+ expect(related.length).toBe(1);
152
+ });
153
+ test("excludes self", () => {
154
+ const related = findRelatedTasks(tasks[0], tasks);
155
+ const hasSelf = related.some((r) => r.task.id === tasks[0].id);
156
+ expect(hasSelf).toBe(false);
157
+ });
158
+ test("excludes siblings when excludeSameParent is true", () => {
159
+ const parentId = "parent-1";
160
+ const tasksWithParent = [
161
+ createTask({ id: "child-1", title: "Task one", parentId }),
162
+ createTask({ id: "child-2", title: "Task one similar", parentId }),
163
+ createTask({ id: "other", title: "Task one other" }),
164
+ ];
165
+ const related = findRelatedTasks(tasksWithParent[0], tasksWithParent, {
166
+ excludeSameParent: true,
167
+ });
168
+ const hasSibling = related.some((r) => r.task.id === "child-2");
169
+ expect(hasSibling).toBe(false);
170
+ });
171
+ });
172
+ describe("clusterTasks", () => {
173
+ test("groups similar tasks together", () => {
174
+ const tasks = [
175
+ createTask({
176
+ id: "auth-1",
177
+ title: "Implement user authentication",
178
+ priority: "high",
179
+ workContext: { intent: "Implement new functionality" },
180
+ }),
181
+ createTask({
182
+ id: "auth-2",
183
+ title: "Implement OAuth authentication",
184
+ priority: "medium",
185
+ workContext: { intent: "Implement new functionality" },
186
+ }),
187
+ createTask({
188
+ id: "bug-1",
189
+ title: "Fix critical login bug",
190
+ priority: "critical",
191
+ workContext: { intent: "Fix issue or bug" },
192
+ }),
193
+ createTask({
194
+ id: "bug-2",
195
+ title: "Fix authentication bug",
196
+ priority: "high",
197
+ workContext: { intent: "Fix issue or bug" },
198
+ }),
199
+ ];
200
+ const clusters = clusterTasks(tasks, { minClusterSize: 2 });
201
+ // Should have at least one cluster
202
+ expect(clusters.length).toBeGreaterThan(0);
203
+ // Each cluster should have at least minClusterSize members
204
+ for (const cluster of clusters) {
205
+ expect(cluster.members.length).toBeGreaterThanOrEqual(2);
206
+ }
207
+ });
208
+ test("uses higher priority tasks as representatives", () => {
209
+ const tasks = [
210
+ createTask({
211
+ id: "low",
212
+ title: "Implement feature",
213
+ priority: "low",
214
+ workContext: { intent: "Implement new functionality" },
215
+ }),
216
+ createTask({
217
+ id: "high",
218
+ title: "Implement similar feature",
219
+ priority: "high",
220
+ workContext: { intent: "Implement new functionality" },
221
+ }),
222
+ ];
223
+ const clusters = clusterTasks(tasks, { minClusterSize: 2, similarityThreshold: 0.1 });
224
+ if (clusters.length > 0) {
225
+ expect(clusters[0].representative.id).toBe("high");
226
+ }
227
+ });
228
+ test("returns empty array for no matching clusters", () => {
229
+ const tasks = [
230
+ createTask({ id: "1", title: "Unique task one" }),
231
+ createTask({ id: "2", title: "Different topic completely" }),
232
+ ];
233
+ const clusters = clusterTasks(tasks, { minClusterSize: 2, similarityThreshold: 0.5 });
234
+ expect(clusters.length).toBe(0);
235
+ });
236
+ });
237
+ //# sourceMappingURL=clustering.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clustering.test.js","sourceRoot":"","sources":["../../src/utils/clustering.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Environment detection utilities
3
+ */
4
+ /**
5
+ * Check if running in test environment.
6
+ * Detects: NODE_ENV=test, BUN_TEST (set by bun test), VITEST, JEST_WORKER_ID
7
+ */
8
+ export declare function isTestEnv(): boolean;
9
+ /**
10
+ * Check if debug mode is enabled via environment variable
11
+ */
12
+ export declare function isDebugEnabled(): boolean;
13
+ /**
14
+ * Check if verbose logging should be suppressed.
15
+ *
16
+ * Logs are suppressed if:
17
+ * - In test environment AND
18
+ * - TASK_MCP_DEBUG is not set AND
19
+ * - TASK_MCP_TEST_VERBOSE is not set
20
+ *
21
+ * Set TASK_MCP_TEST_VERBOSE=true to enable logs in specific tests.
22
+ */
23
+ export declare function shouldSuppressLogs(): boolean;
24
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAOnC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAK5C"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Environment detection utilities
3
+ */
4
+ /**
5
+ * Check if running in test environment.
6
+ * Detects: NODE_ENV=test, BUN_TEST (set by bun test), VITEST, JEST_WORKER_ID
7
+ */
8
+ export function isTestEnv() {
9
+ return (process.env.NODE_ENV === "test" ||
10
+ process.env["BUN_TEST"] !== undefined ||
11
+ process.env["VITEST"] !== undefined ||
12
+ process.env["JEST_WORKER_ID"] !== undefined);
13
+ }
14
+ /**
15
+ * Check if debug mode is enabled via environment variable
16
+ */
17
+ export function isDebugEnabled() {
18
+ const debugEnv = process.env["TASK_MCP_DEBUG"];
19
+ return debugEnv === "true" || debugEnv === "1";
20
+ }
21
+ /**
22
+ * Check if verbose logging should be suppressed.
23
+ *
24
+ * Logs are suppressed if:
25
+ * - In test environment AND
26
+ * - TASK_MCP_DEBUG is not set AND
27
+ * - TASK_MCP_TEST_VERBOSE is not set
28
+ *
29
+ * Set TASK_MCP_TEST_VERBOSE=true to enable logs in specific tests.
30
+ */
31
+ export function shouldSuppressLogs() {
32
+ if (!isTestEnv())
33
+ return false;
34
+ if (isDebugEnabled())
35
+ return false;
36
+ if (process.env["TASK_MCP_TEST_VERBOSE"] === "true")
37
+ return false;
38
+ return true;
39
+ }
40
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM;QAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS;QACrC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS;QACnC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,SAAS,CAC5C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,GAAG,CAAC;AACjD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC,SAAS,EAAE;QAAE,OAAO,KAAK,CAAC;IAC/B,IAAI,cAAc,EAAE;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../src/utils/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA6BlE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAU/E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BtE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBxE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAiBtE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,GAAE,MAAgC,GACzC,YAAY,EAAE,CA6ChB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,yBAAyB,CAsC1E"}
1
+ {"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../src/utils/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG/C;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA+BlE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAU/E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BtE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBxE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAiBtE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,GAAE,MAAgC,GACzC,YAAY,EAAE,CAmDhB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,yBAAyB,CAsC1E"}
@@ -1,3 +1,4 @@
1
+ import { shouldSuppressLogs } from "./env.js";
1
2
  /**
2
3
  * Maximum allowed hierarchy depth (0-indexed)
3
4
  * 0 = root task
@@ -28,7 +29,9 @@ export function getTaskLevel(tasks, taskId) {
28
29
  while (currentTask.parentId) {
29
30
  const parent = taskMap.get(currentTask.parentId);
30
31
  if (!parent) {
31
- console.warn(`[task-mcp] Orphaned parent reference: task "${currentTask.id}" references non-existent parent "${currentTask.parentId}"`);
32
+ if (!shouldSuppressLogs()) {
33
+ console.warn(`[task-mcp] Detached parent reference: task "${currentTask.id}" references non-existent parent "${currentTask.parentId}"`);
34
+ }
32
35
  break;
33
36
  }
34
37
  level++;
@@ -168,12 +171,15 @@ export function buildTaskTree(tasks, rootId, maxDepth = MAX_HIERARCHY_DEPTH + 1)
168
171
  if (depth >= maxDepth) {
169
172
  return { task, children: [] };
170
173
  }
171
- const newVisited = new Set(visited);
172
- newVisited.add(task.id);
174
+ // Mark as visited (O(1) instead of copying the Set)
175
+ visited.add(task.id);
173
176
  const children = childrenMap.get(task.id) || [];
177
+ const childNodes = children.map((child) => buildNode(child, depth + 1, visited));
178
+ // Restore visited state after processing children (backtracking)
179
+ visited.delete(task.id);
174
180
  return {
175
181
  task,
176
- children: children.map((child) => buildNode(child, depth + 1, newVisited)),
182
+ children: childNodes,
177
183
  };
178
184
  }
179
185
  if (rootId) {
@@ -183,8 +189,9 @@ export function buildTaskTree(tasks, rootId, maxDepth = MAX_HIERARCHY_DEPTH + 1)
183
189
  }
184
190
  return [buildNode(rootTask, 0, new Set())];
185
191
  }
186
- // Return all root tasks (no parent)
187
- const rootTasks = tasks.filter((t) => !t.parentId);
192
+ // Return all root tasks (no parent OR parent not in filtered tasks)
193
+ // This ensures orphaned subtasks (whose parent was filtered out) are still visible
194
+ const rootTasks = tasks.filter((t) => !t.parentId || !taskMap.has(t.parentId));
188
195
  return rootTasks.map((task) => buildNode(task, 0, new Set()));
189
196
  }
190
197
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/utils/hierarchy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/utils/hierarchy.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,15 @@ export { generateId, generateTaskId, generateViewId, isValidTaskId, generateInbo
2
2
  export { PriorityQueue } from "./priority-queue.js";
3
3
  export { now, parseRelativeDate, parseRelativeDateSafe, parseDateString, formatDate, formatDisplayDate, isToday, isPastDue, isWithinDays, isWithinDaysSafe, isValidDate, DateParseError, type DateParseErrorReason, type DateParseResult, type IsWithinDaysResult, } from "./date.js";
4
4
  export { parseTaskInput, parseInboxInput, parseInput, type ParseTarget, type ParsedInput, } from "./natural-language.js";
5
- export { MAX_HIERARCHY_DEPTH, getTaskLevel, validateHierarchyDepth, getAncestorIds, getDescendantIds, getChildTasks, getRootTask, buildTaskTree, type TaskTreeNode, } from "./hierarchy.js";
5
+ export { MAX_HIERARCHY_DEPTH, getTaskLevel, validateHierarchyDepth, validateHierarchy, type HierarchyValidationResult, getAncestorIds, getDescendantIds, getChildTasks, getRootTask, buildTaskTree, type TaskTreeNode, } from "./hierarchy.js";
6
6
  export { formatTask, formatTasks, formatTasksPaginated, formatInboxItem, formatInboxItems, formatResponse, applyPagination, truncate, summarizeList, sortTasks, } from "./projection.js";
7
7
  export { calculateStats, calculateDependencyMetrics, renderStatusWidget, renderActionsWidget, renderInboxWidget, renderWorkspacesTable, renderProjectsTable, // Legacy alias
8
8
  renderTasksTable, renderDashboard, renderWorkspaceDashboard, renderProjectDashboard, // Legacy alias
9
9
  renderGlobalDashboard, type DashboardStats, type DependencyMetrics, type WorkspaceInfo, type DashboardData, type RenderDashboardOptions, } from "./dashboard-renderer.js";
10
- export { color, style, styled, c, BOX, box, drawBox, hline, stripAnsi, displayWidth, visibleLength, pad, padEnd, padStart, center, truncateStr, progressBar, type ProgressBarOptions, sideBySide, sideBySideArrays, type BoxOptions, table, renderTable, type TableColumn, statusColors, statusIcons, icons, formatStatus, priorityColors, formatPriority, formatDependencies, banner, } from "./terminal-ui.js";
10
+ export { color, style, styled, c, BOX, box, drawBox, hline, stripAnsi, displayWidth, visibleLength, pad, padEnd, padStart, center, truncateStr, progressBar, type ProgressBarOptions, sideBySide, sideBySideArrays, type BoxOptions, table, renderTable, type TableColumn, statusColors, statusIcons, icons, formatStatus, priorityColors, formatPriority, formatDependencies, banner, STATUS_SYMBOLS, formatStatusSymbol, PRIORITY_LEVELS, formatPriorityBadge, renderSection, renderSections, type SectionItem, type SectionOptions, renderAlert, type AlertSeverity, type AlertOptions, renderStats, type StatItem, formatDueDate, formatTaskLine, type TaskLineOptions, } from "./terminal-ui.js";
11
11
  export { normalizeWorkspace, getGitRepoRoot, getGitRepoRootSync, getWorkspaceFromGit, getWorkspaceFromGitSync, getWorkspaceFromPath, detectWorkspace, detectWorkspaceSync, } from "./workspace.js";
12
+ export { parsePlan, type ParsedPlanTask, type ParsePlanOptions, type ParsePlanResult, } from "./plan-parser.js";
13
+ export { extractIntent, generateFallbackIntent, getIntent } from "./intent-extractor.js";
14
+ export { tokenize, jaccardSimilarity, calculateTaskSimilarity, findRelatedTasks, clusterTasks, } from "./clustering.js";
15
+ export { isTestEnv, isDebugEnabled, shouldSuppressLogs } from "./env.js";
12
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EAEd,cAAc,EACd,KAAK,kBAAkB,EACvB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,GAAG,EACH,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,aAAa,EACb,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,QAAQ,EACR,aAAa,EACb,SAAS,GACV,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EAAE,eAAe;AACpC,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,sBAAsB,EAAE,eAAe;AACvC,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAEL,KAAK,EACL,KAAK,EACL,MAAM,EACN,CAAC,EAED,GAAG,EACH,GAAG,EACH,OAAO,EACP,KAAK,EAEL,SAAS,EACT,YAAY,EACZ,aAAa,EACb,GAAG,EACH,MAAM,EACN,QAAQ,EACR,MAAM,EACN,WAAW,EAEX,WAAW,EACX,KAAK,kBAAkB,EAEvB,UAAU,EACV,gBAAgB,EAChB,KAAK,UAAU,EAEf,KAAK,EACL,WAAW,EACX,KAAK,WAAW,EAEhB,YAAY,EACZ,WAAW,EACX,KAAK,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB,EAElB,MAAM,GACP,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ InvalidIdError, validateTaskId, validateInboxId, assertValidTaskId, assertValidI
4
4
  export { PriorityQueue } from "./priority-queue.js";
5
5
  export { now, parseRelativeDate, parseRelativeDateSafe, parseDateString, formatDate, formatDisplayDate, isToday, isPastDue, isWithinDays, isWithinDaysSafe, isValidDate, DateParseError, } from "./date.js";
6
6
  export { parseTaskInput, parseInboxInput, parseInput, } from "./natural-language.js";
7
- export { MAX_HIERARCHY_DEPTH, getTaskLevel, validateHierarchyDepth, getAncestorIds, getDescendantIds, getChildTasks, getRootTask, buildTaskTree, } from "./hierarchy.js";
7
+ export { MAX_HIERARCHY_DEPTH, getTaskLevel, validateHierarchyDepth, validateHierarchy, getAncestorIds, getDescendantIds, getChildTasks, getRootTask, buildTaskTree, } from "./hierarchy.js";
8
8
  // Projection utilities (token optimization)
9
9
  export { formatTask, formatTasks, formatTasksPaginated, formatInboxItem, formatInboxItems, formatResponse, applyPagination, truncate, summarizeList, sortTasks, } from "./projection.js";
10
10
  // Dashboard renderer
@@ -28,7 +28,29 @@ table, renderTable,
28
28
  // Formatters
29
29
  statusColors, statusIcons, icons, formatStatus, priorityColors, formatPriority, formatDependencies,
30
30
  // Banner
31
- banner, } from "./terminal-ui.js";
31
+ banner,
32
+ // Status symbols (checkbox style)
33
+ STATUS_SYMBOLS, formatStatusSymbol,
34
+ // Priority badge (P0-P3 style)
35
+ PRIORITY_LEVELS, formatPriorityBadge,
36
+ // Section renderer (GitHub CLI style)
37
+ renderSection, renderSections,
38
+ // Alert box
39
+ renderAlert,
40
+ // Stats row
41
+ renderStats,
42
+ // Due date formatter
43
+ formatDueDate,
44
+ // Task line formatter
45
+ formatTaskLine, } from "./terminal-ui.js";
32
46
  // Workspace detection
33
47
  export { normalizeWorkspace, getGitRepoRoot, getGitRepoRootSync, getWorkspaceFromGit, getWorkspaceFromGitSync, getWorkspaceFromPath, detectWorkspace, detectWorkspaceSync, } from "./workspace.js";
48
+ // Plan parser
49
+ export { parsePlan, } from "./plan-parser.js";
50
+ // Intent extractor (auto-generate intent from title/description)
51
+ export { extractIntent, generateFallbackIntent, getIntent } from "./intent-extractor.js";
52
+ // Semantic clustering (task similarity for session resumption)
53
+ export { tokenize, jaccardSimilarity, calculateTaskSimilarity, findRelatedTasks, clusterTasks, } from "./clustering.js";
54
+ // Environment detection
55
+ export { isTestEnv, isDebugEnabled, shouldSuppressLogs } from "./env.js";
34
56
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc;AACd,uDAAuD;AACvD,cAAc,EAEd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,GAAG,EACH,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,GAIf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,GAGX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,aAAa,GAEd,MAAM,gBAAgB,CAAC;AAExB,4CAA4C;AAC5C,OAAO,EACL,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,QAAQ,EACR,aAAa,EACb,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EAAE,eAAe;AACpC,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,sBAAsB,EAAE,eAAe;AACvC,qBAAqB,GAMtB,MAAM,yBAAyB,CAAC;AAEjC,wBAAwB;AACxB,OAAO;AACL,oBAAoB;AACpB,KAAK,EACL,KAAK,EACL,MAAM,EACN,CAAC;AACD,cAAc;AACd,GAAG,EACH,GAAG,EACH,OAAO,EACP,KAAK;AACL,mBAAmB;AACnB,SAAS,EACT,YAAY,EACZ,aAAa,EACb,GAAG,EACH,MAAM,EACN,QAAQ,EACR,MAAM,EACN,WAAW;AACX,eAAe;AACf,WAAW;AAEX,SAAS;AACT,UAAU,EACV,gBAAgB;AAEhB,SAAS;AACT,KAAK,EACL,WAAW;AAEX,aAAa;AACb,YAAY,EACZ,WAAW,EACX,KAAK,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB;AAClB,SAAS;AACT,MAAM,GACP,MAAM,kBAAkB,CAAC;AAE1B,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc;AACd,uDAAuD;AACvD,cAAc,EAEd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,GAAG,EACH,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,GAIf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,GAGX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EAEjB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,aAAa,GAEd,MAAM,gBAAgB,CAAC;AAExB,4CAA4C;AAC5C,OAAO,EACL,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,QAAQ,EACR,aAAa,EACb,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EAAE,eAAe;AACpC,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,sBAAsB,EAAE,eAAe;AACvC,qBAAqB,GAMtB,MAAM,yBAAyB,CAAC;AAEjC,wBAAwB;AACxB,OAAO;AACL,oBAAoB;AACpB,KAAK,EACL,KAAK,EACL,MAAM,EACN,CAAC;AACD,cAAc;AACd,GAAG,EACH,GAAG,EACH,OAAO,EACP,KAAK;AACL,mBAAmB;AACnB,SAAS,EACT,YAAY,EACZ,aAAa,EACb,GAAG,EACH,MAAM,EACN,QAAQ,EACR,MAAM,EACN,WAAW;AACX,eAAe;AACf,WAAW;AAEX,SAAS;AACT,UAAU,EACV,gBAAgB;AAEhB,SAAS;AACT,KAAK,EACL,WAAW;AAEX,aAAa;AACb,YAAY,EACZ,WAAW,EACX,KAAK,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB;AAClB,SAAS;AACT,MAAM;AACN,kCAAkC;AAClC,cAAc,EACd,kBAAkB;AAClB,+BAA+B;AAC/B,eAAe,EACf,mBAAmB;AACnB,sCAAsC;AACtC,aAAa,EACb,cAAc;AAGd,YAAY;AACZ,WAAW;AAGX,YAAY;AACZ,WAAW;AAEX,qBAAqB;AACrB,aAAa;AACb,sBAAsB;AACtB,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAE1B,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EACL,SAAS,GAIV,MAAM,kBAAkB,CAAC;AAE1B,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEzF,+DAA+D;AAC/D,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,wBAAwB;AACxB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Intent Extractor
3
+ *
4
+ * Extracts intent from task title/description using pattern matching.
5
+ * Provides fallback intent generation when workContext.intent is not provided.
6
+ */
7
+ /**
8
+ * Extract intent from task title and description
9
+ *
10
+ * @param title - Task title
11
+ * @param description - Optional task description
12
+ * @returns Extracted intent or undefined if no pattern matches
13
+ */
14
+ export declare function extractIntent(title: string, description?: string): string | undefined;
15
+ /**
16
+ * Generate a fallback intent based on title structure
17
+ *
18
+ * Used when no pattern matches but we still want some intent
19
+ */
20
+ export declare function generateFallbackIntent(title: string): string;
21
+ /**
22
+ * Get intent for a task, extracting from content or generating fallback
23
+ *
24
+ * @param title - Task title
25
+ * @param description - Optional task description
26
+ * @param autoGenerate - Whether to generate fallback if no pattern matches (default: true)
27
+ * @returns Intent string
28
+ */
29
+ export declare function getIntent(title: string, description?: string, autoGenerate?: boolean): string | undefined;
30
+ //# sourceMappingURL=intent-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-extractor.d.ts","sourceRoot":"","sources":["../../src/utils/intent-extractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsEH;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAyBrF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAe5D;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,GAAE,OAAc,GAC3B,MAAM,GAAG,SAAS,CAYpB"}