@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,371 @@
1
+ import { extractMetadata } from "./natural-language.js";
2
+ /**
3
+ * Maximum input length to prevent DoS
4
+ */
5
+ const MAX_PLAN_LENGTH = 50000;
6
+ /**
7
+ * Preprocess input to remove code blocks and YAML frontmatter
8
+ */
9
+ function preprocessInput(input) {
10
+ let result = input;
11
+ // Remove YAML frontmatter (--- at start of file)
12
+ // Must be at the very beginning of the document
13
+ const frontmatterMatch = result.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/);
14
+ if (frontmatterMatch) {
15
+ result = result.slice(frontmatterMatch[0].length);
16
+ }
17
+ // Remove fenced code blocks (``` or ~~~)
18
+ // Matches both backticks and tildes, with optional language identifier
19
+ result = result.replace(/^(`{3,}|~{3,})[^\n]*\n[\s\S]*?\n\1$/gm, "");
20
+ // Also handle code blocks that might not have matching closing fence
21
+ // (replace opening fence and content until next fence or end)
22
+ result = result.replace(/^(`{3,}|~{3,})[^\n]*\n[\s\S]*?(?=\n(`{3,}|~{3,})|$)/gm, (match) => {
23
+ // Only remove if it looks like a code block (has content)
24
+ if (match.includes("\n")) {
25
+ return "";
26
+ }
27
+ return match;
28
+ });
29
+ return result;
30
+ }
31
+ /**
32
+ * Parse markdown/structured text into hierarchical tasks
33
+ *
34
+ * Parsing rules:
35
+ * - `# Header` → Top-level phase (level 0)
36
+ * - `## SubHeader` → Section (level 1)
37
+ * - `- Item` → Task (level based on indentation)
38
+ * - `depends on X`, `after X` → Dependency inference
39
+ * - `!high`, `#tag` → Natural language patterns
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const result = parsePlan(`
44
+ * # Phase 1: Setup
45
+ * - Create database schema !high
46
+ * - Define user table
47
+ * - Define session table
48
+ * - Setup API endpoints (depends on database)
49
+ * `);
50
+ * ```
51
+ */
52
+ export function parsePlan(input, options = {}) {
53
+ if (input.length > MAX_PLAN_LENGTH) {
54
+ return {
55
+ tasks: [],
56
+ phases: [],
57
+ warnings: [`Input exceeds maximum length of ${MAX_PLAN_LENGTH} characters`],
58
+ };
59
+ }
60
+ const { defaultPriority = "medium", parseNaturalLanguage = true, inferDependencies = true, } = options;
61
+ // Preprocess to remove code blocks and YAML frontmatter
62
+ const processedInput = preprocessInput(input);
63
+ const lines = processedInput.split("\n");
64
+ const tasks = [];
65
+ const phases = [];
66
+ const warnings = [];
67
+ let taskCounter = 0;
68
+ let currentPhase = null;
69
+ let currentSection = null;
70
+ const parentStack = [];
71
+ for (const line of lines) {
72
+ const trimmed = line.trim();
73
+ // Skip empty lines
74
+ if (!trimmed)
75
+ continue;
76
+ // Parse H1 headers as phases (level 0)
77
+ const h1Match = trimmed.match(/^#\s+(.+)$/);
78
+ if (h1Match) {
79
+ const phaseTitle = h1Match[1].trim();
80
+ const tempId = `phase-${++taskCounter}`;
81
+ currentPhase = { tempId, title: phaseTitle };
82
+ phases.push(phaseTitle);
83
+ // Extract metadata if enabled
84
+ let title = phaseTitle;
85
+ let priority;
86
+ let tags;
87
+ if (parseNaturalLanguage) {
88
+ const metadata = extractMetadata(phaseTitle);
89
+ title = metadata.remaining || phaseTitle;
90
+ priority = metadata.priority;
91
+ tags = metadata.tags;
92
+ }
93
+ tasks.push({
94
+ title,
95
+ level: 0,
96
+ tempId,
97
+ priority: priority ?? "high",
98
+ ...(tags && tags.length > 0 && { tags }),
99
+ });
100
+ // Reset section and parent stack
101
+ currentSection = null;
102
+ parentStack.length = 0;
103
+ continue;
104
+ }
105
+ // Parse H2 headers as sections (level 1)
106
+ const h2Match = trimmed.match(/^##\s+(.+)$/);
107
+ if (h2Match) {
108
+ const sectionTitle = h2Match[1].trim();
109
+ const tempId = `section-${++taskCounter}`;
110
+ let title = sectionTitle;
111
+ let priority;
112
+ let tags;
113
+ if (parseNaturalLanguage) {
114
+ const metadata = extractMetadata(sectionTitle);
115
+ title = metadata.remaining || sectionTitle;
116
+ priority = metadata.priority;
117
+ tags = metadata.tags;
118
+ }
119
+ tasks.push({
120
+ title,
121
+ level: 1,
122
+ tempId,
123
+ ...(currentPhase && { parentTempId: currentPhase.tempId }),
124
+ priority: priority ?? defaultPriority,
125
+ ...(tags && tags.length > 0 && { tags }),
126
+ });
127
+ currentSection = { tempId, level: 1 };
128
+ parentStack.length = 0;
129
+ continue;
130
+ }
131
+ // Parse list items as tasks
132
+ const listMatch = line.match(/^(\s*)[-*]\s+(.+)$/);
133
+ if (listMatch) {
134
+ const indent = listMatch[1].length;
135
+ const content = listMatch[2].trim();
136
+ const tempId = `task-${++taskCounter}`;
137
+ // Determine parent based on indentation
138
+ let parentTempId;
139
+ let level;
140
+ // Pop parents from stack that have same or greater indentation
141
+ while (parentStack.length > 0 && parentStack[parentStack.length - 1].indent >= indent) {
142
+ parentStack.pop();
143
+ }
144
+ if (parentStack.length > 0) {
145
+ // Use the last item on stack as parent
146
+ const parent = parentStack[parentStack.length - 1];
147
+ parentTempId = parent.tempId;
148
+ level = Math.min(parent.level + 1, 3); // Max depth 3
149
+ }
150
+ else if (currentSection) {
151
+ parentTempId = currentSection.tempId;
152
+ level = 2;
153
+ }
154
+ else if (currentPhase) {
155
+ parentTempId = currentPhase.tempId;
156
+ level = 1;
157
+ }
158
+ else {
159
+ level = 0;
160
+ }
161
+ // Extract metadata from content
162
+ let title = content;
163
+ let priority;
164
+ let tags;
165
+ let dependsOn;
166
+ if (parseNaturalLanguage) {
167
+ const metadata = extractMetadata(content);
168
+ title = metadata.remaining || content;
169
+ priority = metadata.priority;
170
+ tags = metadata.tags;
171
+ }
172
+ // Infer dependencies from text
173
+ if (inferDependencies) {
174
+ dependsOn = inferDependenciesFromText(title, tasks);
175
+ // Clean up dependency text from title
176
+ title = cleanDependencyText(title);
177
+ }
178
+ // Extract description from remaining parentheses (not dependency-related)
179
+ const descExtracted = extractDescription(title);
180
+ title = descExtracted.title;
181
+ const description = descExtracted.description;
182
+ const task = {
183
+ title,
184
+ level,
185
+ tempId,
186
+ ...(parentTempId && { parentTempId }),
187
+ ...(description && { description }),
188
+ priority: priority ?? defaultPriority,
189
+ ...(tags && tags.length > 0 && { tags }),
190
+ ...(dependsOn && dependsOn.length > 0 && { dependsOn }),
191
+ };
192
+ tasks.push(task);
193
+ // Push to parent stack for potential children
194
+ parentStack.push({ tempId, level, indent });
195
+ continue;
196
+ }
197
+ // Parse numbered list items
198
+ const numberedMatch = line.match(/^(\s*)(\d+)[.)]\s+(.+)$/);
199
+ if (numberedMatch) {
200
+ const indent = numberedMatch[1].length;
201
+ const content = numberedMatch[3].trim();
202
+ const tempId = `task-${++taskCounter}`;
203
+ // Same logic as unordered lists
204
+ while (parentStack.length > 0 && parentStack[parentStack.length - 1].indent >= indent) {
205
+ parentStack.pop();
206
+ }
207
+ let parentTempId;
208
+ let level;
209
+ if (parentStack.length > 0) {
210
+ const parent = parentStack[parentStack.length - 1];
211
+ parentTempId = parent.tempId;
212
+ level = Math.min(parent.level + 1, 3);
213
+ }
214
+ else if (currentSection) {
215
+ parentTempId = currentSection.tempId;
216
+ level = 2;
217
+ }
218
+ else if (currentPhase) {
219
+ parentTempId = currentPhase.tempId;
220
+ level = 1;
221
+ }
222
+ else {
223
+ level = 0;
224
+ }
225
+ let title = content;
226
+ let priority;
227
+ let tags;
228
+ let dependsOn;
229
+ if (parseNaturalLanguage) {
230
+ const metadata = extractMetadata(content);
231
+ title = metadata.remaining || content;
232
+ priority = metadata.priority;
233
+ tags = metadata.tags;
234
+ }
235
+ if (inferDependencies) {
236
+ dependsOn = inferDependenciesFromText(title, tasks);
237
+ title = cleanDependencyText(title);
238
+ }
239
+ // Extract description from remaining parentheses
240
+ const descExtracted = extractDescription(title);
241
+ title = descExtracted.title;
242
+ const description = descExtracted.description;
243
+ tasks.push({
244
+ title,
245
+ level,
246
+ tempId,
247
+ ...(parentTempId && { parentTempId }),
248
+ ...(description && { description }),
249
+ priority: priority ?? defaultPriority,
250
+ ...(tags && tags.length > 0 && { tags }),
251
+ ...(dependsOn && dependsOn.length > 0 && { dependsOn }),
252
+ });
253
+ parentStack.push({ tempId, level, indent });
254
+ continue;
255
+ }
256
+ }
257
+ return { tasks, phases, warnings };
258
+ }
259
+ /**
260
+ * Infer dependencies from text patterns like "depends on X", "after X"
261
+ */
262
+ function inferDependenciesFromText(content, existingTasks) {
263
+ const deps = [];
264
+ const lower = content.toLowerCase();
265
+ // Pattern: (depends on|after|requires|following) "phrase" or phrase
266
+ const patterns = [
267
+ /\(?\s*depends?\s+on\s+(.+?)\s*\)?/gi,
268
+ /\(?\s*after\s+(.+?)\s*\)?/gi,
269
+ /\(?\s*requires?\s+(.+?)\s*\)?/gi,
270
+ /\(?\s*following\s+(.+?)\s*\)?/gi,
271
+ /\(?\s*blocked\s+by\s+(.+?)\s*\)?/gi,
272
+ ];
273
+ for (const pattern of patterns) {
274
+ let match;
275
+ while ((match = pattern.exec(lower)) !== null) {
276
+ const depPhrase = match[1].trim();
277
+ // Try to find matching task by title
278
+ const found = existingTasks.find((t) => {
279
+ const taskTitle = t.title.toLowerCase();
280
+ return (taskTitle.includes(depPhrase) ||
281
+ depPhrase.includes(taskTitle) ||
282
+ fuzzyMatch(taskTitle, depPhrase));
283
+ });
284
+ if (found && !deps.includes(found.tempId)) {
285
+ deps.push(found.tempId);
286
+ }
287
+ }
288
+ }
289
+ return deps;
290
+ }
291
+ /**
292
+ * Simple fuzzy matching for dependency detection
293
+ */
294
+ function fuzzyMatch(a, b) {
295
+ // Remove common words and compare
296
+ const stopWords = ["the", "a", "an", "to", "for", "of", "in", "on", "at"];
297
+ const normalize = (s) => s
298
+ .toLowerCase()
299
+ .split(/\s+/)
300
+ .filter((w) => !stopWords.includes(w))
301
+ .join(" ");
302
+ const aNorm = normalize(a);
303
+ const bNorm = normalize(b);
304
+ // Check if significant overlap
305
+ const aWords = aNorm.split(" ");
306
+ const bWords = bNorm.split(" ");
307
+ const matches = aWords.filter((w) => bWords.includes(w));
308
+ return matches.length >= Math.min(2, Math.min(aWords.length, bWords.length));
309
+ }
310
+ /**
311
+ * Remove dependency text from title
312
+ */
313
+ function cleanDependencyText(title) {
314
+ return title
315
+ .replace(/\(?\s*depends?\s+on\s+.+?\s*\)?/gi, "")
316
+ .replace(/\(?\s*after\s+.+?\s*\)?/gi, "")
317
+ .replace(/\(?\s*requires?\s+.+?\s*\)?/gi, "")
318
+ .replace(/\(?\s*following\s+.+?\s*\)?/gi, "")
319
+ .replace(/\(?\s*blocked\s+by\s+.+?\s*\)?/gi, "")
320
+ .replace(/\s+/g, " ")
321
+ .trim();
322
+ }
323
+ /**
324
+ * Extract description from title
325
+ *
326
+ * Patterns supported:
327
+ * - "제목: 설명" → colon separator
328
+ * - "제목 -- 설명" → double dash separator
329
+ * - "제목 (설명)" → parentheses (after dependency cleanup)
330
+ *
331
+ * @example
332
+ * extractDescription("API 구현: 라우팅, 인증 담당")
333
+ * // → { title: "API 구현", description: "라우팅, 인증 담당" }
334
+ *
335
+ * extractDescription("API 구현 (라우팅, 인증 담당)")
336
+ * // → { title: "API 구현", description: "라우팅, 인증 담당" }
337
+ */
338
+ function extractDescription(title) {
339
+ // Pattern 1: Colon separator (but not time like "10:30")
340
+ // Match "제목: 설명" but not "10:30" or "http://..."
341
+ const colonMatch = title.match(/^(.+?):\s+([^/].{5,})$/);
342
+ if (colonMatch && !/^\d+:\d+/.test(colonMatch[2])) {
343
+ return {
344
+ title: colonMatch[1].trim(),
345
+ description: colonMatch[2].trim(),
346
+ };
347
+ }
348
+ // Pattern 2: Double dash separator "제목 -- 설명"
349
+ const dashMatch = title.match(/^(.+?)\s+--\s+(.+)$/);
350
+ if (dashMatch) {
351
+ return {
352
+ title: dashMatch[1].trim(),
353
+ description: dashMatch[2].trim(),
354
+ };
355
+ }
356
+ // Pattern 3: Parentheses at end (only if not dependency-like)
357
+ // Already cleaned by cleanDependencyText, so remaining () is description
358
+ const parenMatch = title.match(/^(.+?)\s*\(([^)]+)\)\s*$/);
359
+ if (parenMatch) {
360
+ const content = parenMatch[2].trim();
361
+ // Skip if looks like a short annotation (single word, abbreviation)
362
+ if (content.length > 3 && content.includes(" ")) {
363
+ return {
364
+ title: parenMatch[1].trim(),
365
+ description: content,
366
+ };
367
+ }
368
+ }
369
+ return { title };
370
+ }
371
+ //# sourceMappingURL=plan-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-parser.js","sourceRoot":"","sources":["../../src/utils/plan-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAsCxD;;GAEG;AACH,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,iDAAiD;IACjD,gDAAgD;IAChD,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC1E,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,yCAAyC;IACzC,uEAAuE;IACvE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uCAAuC,EAAE,EAAE,CAAC,CAAC;IAErE,qEAAqE;IACrE,8DAA8D;IAC9D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uDAAuD,EAAE,CAAC,KAAK,EAAE,EAAE;QACzF,0DAA0D;QAC1D,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,UAA4B,EAAE;IACrE,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC,mCAAmC,eAAe,aAAa,CAAC;SAC5E,CAAC;IACJ,CAAC;IAED,MAAM,EACJ,eAAe,GAAG,QAAQ,EAC1B,oBAAoB,GAAG,IAAI,EAC3B,iBAAiB,GAAG,IAAI,GACzB,GAAG,OAAO,CAAC;IAEZ,wDAAwD;IACxD,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAA6C,IAAI,CAAC;IAClE,IAAI,cAAc,GAA6C,IAAI,CAAC;IACpE,MAAM,WAAW,GAA6D,EAAE,CAAC;IAEjF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,mBAAmB;QACnB,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,uCAAuC;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,CAAC;YACxC,YAAY,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAExB,8BAA8B;YAC9B,IAAI,KAAK,GAAG,UAAU,CAAC;YACvB,IAAI,QAA8B,CAAC;YACnC,IAAI,IAA0B,CAAC;YAE/B,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;gBAC7C,KAAK,GAAG,QAAQ,CAAC,SAAS,IAAI,UAAU,CAAC;gBACzC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBAC7B,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK;gBACL,KAAK,EAAE,CAAC;gBACR,MAAM;gBACN,QAAQ,EAAE,QAAQ,IAAI,MAAM;gBAC5B,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;aACzC,CAAC,CAAC;YAEH,iCAAiC;YACjC,cAAc,GAAG,IAAI,CAAC;YACtB,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QAED,yCAAyC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,WAAW,EAAE,WAAW,EAAE,CAAC;YAE1C,IAAI,KAAK,GAAG,YAAY,CAAC;YACzB,IAAI,QAA8B,CAAC;YACnC,IAAI,IAA0B,CAAC;YAE/B,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;gBAC/C,KAAK,GAAG,QAAQ,CAAC,SAAS,IAAI,YAAY,CAAC;gBAC3C,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBAC7B,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK;gBACL,KAAK,EAAE,CAAC;gBACR,MAAM;gBACN,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC1D,QAAQ,EAAE,QAAQ,IAAI,eAAe;gBACrC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;aACzC,CAAC,CAAC;YAEH,cAAc,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACtC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;YACpC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,QAAQ,EAAE,WAAW,EAAE,CAAC;YAEvC,wCAAwC;YACxC,IAAI,YAAgC,CAAC;YACrC,IAAI,KAAa,CAAC;YAElB,+DAA+D;YAC/D,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;gBACvF,WAAW,CAAC,GAAG,EAAE,CAAC;YACpB,CAAC;YAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,uCAAuC;gBACvC,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;gBACpD,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC7B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc;YACvD,CAAC;iBAAM,IAAI,cAAc,EAAE,CAAC;gBAC1B,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;gBACrC,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACxB,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;gBACnC,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;YAED,gCAAgC;YAChC,IAAI,KAAK,GAAG,OAAO,CAAC;YACpB,IAAI,QAA8B,CAAC;YACnC,IAAI,IAA0B,CAAC;YAC/B,IAAI,SAA+B,CAAC;YAEpC,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC1C,KAAK,GAAG,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC;gBACtC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBAC7B,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC;YAED,+BAA+B;YAC/B,IAAI,iBAAiB,EAAE,CAAC;gBACtB,SAAS,GAAG,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACpD,sCAAsC;gBACtC,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;YAED,0EAA0E;YAC1E,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAChD,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;YAC5B,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;YAE9C,MAAM,IAAI,GAAmB;gBAC3B,KAAK;gBACL,KAAK;gBACL,MAAM;gBACN,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;gBACrC,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;gBACnC,QAAQ,EAAE,QAAQ,IAAI,eAAe;gBACrC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACxC,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;aACxD,CAAC;YAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEjB,8CAA8C;YAC9C,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5D,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;YACxC,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,QAAQ,EAAE,WAAW,EAAE,CAAC;YAEvC,gCAAgC;YAChC,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;gBACvF,WAAW,CAAC,GAAG,EAAE,CAAC;YACpB,CAAC;YAED,IAAI,YAAgC,CAAC;YACrC,IAAI,KAAa,CAAC;YAElB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;gBACpD,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC7B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,cAAc,EAAE,CAAC;gBAC1B,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;gBACrC,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACxB,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;gBACnC,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;YAED,IAAI,KAAK,GAAG,OAAO,CAAC;YACpB,IAAI,QAA8B,CAAC;YACnC,IAAI,IAA0B,CAAC;YAC/B,IAAI,SAA+B,CAAC;YAEpC,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC1C,KAAK,GAAG,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC;gBACtC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBAC7B,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC;YAED,IAAI,iBAAiB,EAAE,CAAC;gBACtB,SAAS,GAAG,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACpD,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;YAED,iDAAiD;YACjD,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAChD,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;YAC5B,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;YAE9C,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK;gBACL,KAAK;gBACL,MAAM;gBACN,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;gBACrC,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;gBACnC,QAAQ,EAAE,QAAQ,IAAI,eAAe;gBACrC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACxC,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;aACxD,CAAC,CAAC;YAEH,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,OAAe,EAAE,aAA+B;IACjF,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEpC,oEAAoE;IACpE,MAAM,QAAQ,GAAG;QACf,qCAAqC;QACrC,6BAA6B;QAC7B,iCAAiC;QACjC,iCAAiC;QACjC,oCAAoC;KACrC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YAEnC,qCAAqC;YACrC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACxC,OAAO,CACL,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAC7B,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAC7B,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CACjC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS;IACtC,kCAAkC;IAClC,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAC9B,CAAC;SACE,WAAW,EAAE;SACb,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACrC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEf,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAE3B,+BAA+B;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,KAAK;SACT,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;SAChD,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;SACxC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC;SAC5C,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC;SAC5C,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC;SAC/C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,kBAAkB,CAAC,KAAa;IACvC,yDAAyD;IACzD,iDAAiD;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACzD,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;QACnD,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE;YAC5B,WAAW,EAAE,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE;SACnC,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,KAAK,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE;YAC3B,WAAW,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE;SAClC,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,yEAAyE;IACzE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC3D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;QACtC,oEAAoE;QACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO;gBACL,KAAK,EAAE,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE;gBAC5B,WAAW,EAAE,OAAO;aACrB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/utils/projection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAUvC;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,IAAI,CAgD/F;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,EAAE,CAGtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,EAAE,cAAc,EACtB,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB,iBAAiB,CAAC,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,CAYrD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,GACrB,YAAY,GAAG,YAAY,GAAG,SAAS,CAuBzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAAE,EAClB,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC,EAAE,CAG7C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EACb,MAAM,EAAE,cAAc,EACtB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,GAC5C,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAUjD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAGrE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,MAAM,YAAI,EACtB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GACzB;IAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAS/D;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,GAAE,WAAW,GAAG,UAAU,GAAG,SAAuB,GAChE,IAAI,EAAE,CAkCR"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/utils/projection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAUvC;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,IAAI,CA2F/F;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,EAAE,CAGtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,EAAE,cAAc,EACtB,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB,iBAAiB,CAAC,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,CAYrD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,GACrB,YAAY,GAAG,YAAY,GAAG,SAAS,CAuBzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAAE,EAClB,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC,EAAE,CAG7C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EACb,MAAM,EAAE,cAAc,EACtB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,GAC5C,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAUjD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAGrE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,MAAM,YAAI,EACtB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GACzB;IAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAS/D;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,GAAE,WAAW,GAAG,UAAU,GAAG,SAAuB,GAChE,IAAI,EAAE,CAkCR"}
@@ -23,13 +23,42 @@ export function formatTask(task, format) {
23
23
  status: task.status,
24
24
  priority: task.priority,
25
25
  };
26
- // Include intent + qualityLevel for quick context understanding
26
+ // Include description for session context (truncated for token efficiency)
27
+ // Skip if intent exists and provides enough context
28
+ if (task.description) {
29
+ const hasIntent = !!task.workContext?.intent;
30
+ // With intent: shorter description (100 chars), without: fuller context (200 chars)
31
+ const maxLen = hasIntent ? 100 : 200;
32
+ summary.description = truncate(task.description, maxLen);
33
+ }
34
+ // Include workContext fields for session resumption
27
35
  if (task.workContext?.intent) {
28
36
  summary.intent = task.workContext.intent;
29
37
  }
38
+ if (task.workContext?.methodology) {
39
+ summary.methodology = task.workContext.methodology;
40
+ }
30
41
  if (task.workContext?.qualityLevel) {
31
42
  summary.quality = task.workContext.qualityLevel;
32
43
  }
44
+ // Include patterns for execution guidance
45
+ if (task.workContext?.patterns) {
46
+ const p = task.workContext.patterns;
47
+ const patterns = {};
48
+ if (p.parallelExecution !== undefined)
49
+ patterns.parallelExecution = p.parallelExecution;
50
+ if (p.testFirst !== undefined)
51
+ patterns.testFirst = p.testFirst;
52
+ if (p.reviewRequired !== undefined)
53
+ patterns.reviewRequired = p.reviewRequired;
54
+ if (Object.keys(patterns).length > 0) {
55
+ summary.patterns = patterns;
56
+ }
57
+ }
58
+ // Include acceptance criteria for completion validation
59
+ if (task.workContext?.acceptanceCriteria?.length) {
60
+ summary.criteria = task.workContext.acceptanceCriteria;
61
+ }
33
62
  return summary;
34
63
  }
35
64
  case "standard": {
@@ -39,6 +68,7 @@ export function formatTask(task, format) {
39
68
  title: task.title,
40
69
  status: task.status,
41
70
  priority: task.priority,
71
+ ...(task.description !== undefined && { description: task.description }),
42
72
  ...(task.dueDate !== undefined && { dueDate: task.dueDate }),
43
73
  ...(task.tags !== undefined && { tags: task.tags }),
44
74
  ...(task.contexts !== undefined && { contexts: task.contexts }),
@@ -51,6 +81,18 @@ export function formatTask(task, format) {
51
81
  ...(wc.intent !== undefined && { intent: wc.intent }),
52
82
  ...(wc.methodology !== undefined && { methodology: wc.methodology }),
53
83
  ...(wc.qualityLevel !== undefined && { qualityLevel: wc.qualityLevel }),
84
+ ...(wc.patterns !== undefined && {
85
+ patterns: {
86
+ ...(wc.patterns.parallelExecution !== undefined && {
87
+ parallelExecution: wc.patterns.parallelExecution,
88
+ }),
89
+ ...(wc.patterns.testFirst !== undefined && { testFirst: wc.patterns.testFirst }),
90
+ ...(wc.patterns.reviewRequired !== undefined && {
91
+ reviewRequired: wc.patterns.reviewRequired,
92
+ }),
93
+ },
94
+ }),
95
+ ...(wc.acceptanceCriteria?.length && { acceptanceCriteria: wc.acceptanceCriteria }),
54
96
  };
55
97
  }
56
98
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/utils/projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/utils/projection.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ const createInboxItem = (overrides = {}) => ({
30
30
  ...overrides,
31
31
  });
32
32
  describe("formatTask", () => {
33
- test("concise format returns only 4 essential fields", () => {
33
+ test("concise format returns essential fields plus description for context", () => {
34
34
  const task = createTask();
35
35
  const result = formatTask(task, "concise");
36
36
  expect(result).toEqual({
@@ -38,10 +38,11 @@ describe("formatTask", () => {
38
38
  title: "Test Task",
39
39
  status: "pending",
40
40
  priority: "medium",
41
+ description: "This is a test task with a long description",
41
42
  });
42
- expect(Object.keys(result)).toHaveLength(4);
43
+ expect(Object.keys(result)).toHaveLength(5);
43
44
  });
44
- test("standard format returns 8 common fields", () => {
45
+ test("standard format returns common fields including description", () => {
45
46
  const task = createTask();
46
47
  const result = formatTask(task, "standard");
47
48
  expect(result).toEqual({
@@ -49,6 +50,7 @@ describe("formatTask", () => {
49
50
  title: "Test Task",
50
51
  status: "pending",
51
52
  priority: "medium",
53
+ description: "This is a test task with a long description",
52
54
  dueDate: "2025-01-15",
53
55
  tags: ["test", "unit"],
54
56
  contexts: ["work"],
@@ -72,6 +74,53 @@ describe("formatTask", () => {
72
74
  expect(result).not.toHaveProperty("dueDate");
73
75
  expect(result).not.toHaveProperty("tags");
74
76
  });
77
+ test("concise format includes workContext fields (intent, methodology, quality, patterns, criteria)", () => {
78
+ const task = createTask({
79
+ workContext: {
80
+ intent: "Migrate API layer to service pattern",
81
+ methodology: "TDD + iterative refactoring",
82
+ qualityLevel: "thorough",
83
+ patterns: {
84
+ parallelExecution: true,
85
+ testFirst: true,
86
+ },
87
+ acceptanceCriteria: ["All tests pass", "No type errors"],
88
+ },
89
+ });
90
+ const result = formatTask(task, "concise");
91
+ expect(result).toHaveProperty("intent", "Migrate API layer to service pattern");
92
+ expect(result).toHaveProperty("methodology", "TDD + iterative refactoring");
93
+ expect(result).toHaveProperty("quality", "thorough");
94
+ expect(result).toHaveProperty("patterns", { parallelExecution: true, testFirst: true });
95
+ expect(result).toHaveProperty("criteria", ["All tests pass", "No type errors"]);
96
+ });
97
+ test("standard format includes full workContext with patterns and criteria", () => {
98
+ const task = createTask({
99
+ workContext: {
100
+ intent: "Refactor module",
101
+ methodology: "Analyze → Extract → Test",
102
+ qualityLevel: "standard",
103
+ patterns: {
104
+ parallelExecution: true,
105
+ testFirst: true,
106
+ reviewRequired: false,
107
+ },
108
+ acceptanceCriteria: ["Tests pass", "No regressions"],
109
+ },
110
+ });
111
+ const result = formatTask(task, "standard");
112
+ expect(result).toHaveProperty("workContext");
113
+ const wc = result.workContext;
114
+ expect(wc["intent"]).toBe("Refactor module");
115
+ expect(wc["methodology"]).toBe("Analyze → Extract → Test");
116
+ expect(wc["qualityLevel"]).toBe("standard");
117
+ expect(wc["patterns"]).toEqual({
118
+ parallelExecution: true,
119
+ testFirst: true,
120
+ reviewRequired: false,
121
+ });
122
+ expect(wc["acceptanceCriteria"]).toEqual(["Tests pass", "No regressions"]);
123
+ });
75
124
  });
76
125
  describe("formatTasks", () => {
77
126
  test("projects all tasks without limit", () => {
@@ -83,6 +132,7 @@ describe("formatTasks", () => {
83
132
  title: "Test Task",
84
133
  status: "pending",
85
134
  priority: "medium",
135
+ description: "This is a test task with a long description",
86
136
  });
87
137
  });
88
138
  test("limits tasks when limit provided", () => {
@@ -320,8 +370,8 @@ describe("token efficiency", () => {
320
370
  const full = formatTask(task, "detailed");
321
371
  const conciseSize = JSON.stringify(concise).length;
322
372
  const fullSize = JSON.stringify(full).length;
323
- // Concise should be at least 50% smaller
324
- expect(conciseSize).toBeLessThan(fullSize * 0.5);
373
+ // Concise should be at least 40% smaller (now includes description for session context)
374
+ expect(conciseSize).toBeLessThan(fullSize * 0.6);
325
375
  });
326
376
  test("concise list is significantly smaller than full list", () => {
327
377
  const tasks = Array.from({ length: 20 }, (_, i) => createTask({
@@ -334,8 +384,8 @@ describe("token efficiency", () => {
334
384
  const full = formatTasks(tasks, "detailed");
335
385
  const conciseSize = JSON.stringify(concise).length;
336
386
  const fullSize = JSON.stringify(full).length;
337
- // For list of 20 tasks, concise should be 70%+ smaller
338
- expect(conciseSize).toBeLessThan(fullSize * 0.4);
387
+ // For list of 20 tasks, concise should be 40%+ smaller (now includes description)
388
+ expect(conciseSize).toBeLessThan(fullSize * 0.6);
339
389
  });
340
390
  });
341
391
  //# sourceMappingURL=projection.test.js.map