@ginkoai/cli 2.4.4 → 2.5.0

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 (180) hide show
  1. package/LICENSE +661 -21
  2. package/dist/commands/agent/status.d.ts.map +1 -1
  3. package/dist/commands/agent/status.js +2 -0
  4. package/dist/commands/agent/status.js.map +1 -1
  5. package/dist/commands/assign.d.ts.map +1 -1
  6. package/dist/commands/assign.js +2 -0
  7. package/dist/commands/assign.js.map +1 -1
  8. package/dist/commands/charter.js +3 -3
  9. package/dist/commands/charter.js.map +1 -1
  10. package/dist/commands/context/index.d.ts +28 -0
  11. package/dist/commands/context/index.d.ts.map +1 -0
  12. package/dist/commands/context/index.js +165 -0
  13. package/dist/commands/context/index.js.map +1 -0
  14. package/dist/commands/context/score.d.ts +34 -0
  15. package/dist/commands/context/score.d.ts.map +1 -0
  16. package/dist/commands/context/score.js +163 -0
  17. package/dist/commands/context/score.js.map +1 -0
  18. package/dist/commands/create.d.ts.map +1 -1
  19. package/dist/commands/create.js +10 -0
  20. package/dist/commands/create.js.map +1 -1
  21. package/dist/commands/diff/diff-command.d.ts.map +1 -1
  22. package/dist/commands/diff/diff-command.js +2 -0
  23. package/dist/commands/diff/diff-command.js.map +1 -1
  24. package/dist/commands/epic/status.d.ts.map +1 -1
  25. package/dist/commands/epic/status.js +5 -0
  26. package/dist/commands/epic/status.js.map +1 -1
  27. package/dist/commands/graph/api-client.d.ts +131 -0
  28. package/dist/commands/graph/api-client.d.ts.map +1 -1
  29. package/dist/commands/graph/api-client.js +153 -0
  30. package/dist/commands/graph/api-client.js.map +1 -1
  31. package/dist/commands/graph/cleanup.d.ts.map +1 -1
  32. package/dist/commands/graph/cleanup.js +2 -0
  33. package/dist/commands/graph/cleanup.js.map +1 -1
  34. package/dist/commands/graph/explore.d.ts.map +1 -1
  35. package/dist/commands/graph/explore.js +2 -0
  36. package/dist/commands/graph/explore.js.map +1 -1
  37. package/dist/commands/graph/init.d.ts.map +1 -1
  38. package/dist/commands/graph/init.js +4 -10
  39. package/dist/commands/graph/init.js.map +1 -1
  40. package/dist/commands/graph/query.d.ts.map +1 -1
  41. package/dist/commands/graph/query.js +2 -0
  42. package/dist/commands/graph/query.js.map +1 -1
  43. package/dist/commands/graph/status.d.ts.map +1 -1
  44. package/dist/commands/graph/status.js +2 -0
  45. package/dist/commands/graph/status.js.map +1 -1
  46. package/dist/commands/handoff.d.ts.map +1 -1
  47. package/dist/commands/handoff.js +34 -0
  48. package/dist/commands/handoff.js.map +1 -1
  49. package/dist/commands/health.d.ts +15 -0
  50. package/dist/commands/health.d.ts.map +1 -0
  51. package/dist/commands/health.js +212 -0
  52. package/dist/commands/health.js.map +1 -0
  53. package/dist/commands/init-copilot.js +1 -1
  54. package/dist/commands/init-copilot.js.map +1 -1
  55. package/dist/commands/init.d.ts.map +1 -1
  56. package/dist/commands/init.js +74 -2
  57. package/dist/commands/init.js.map +1 -1
  58. package/dist/commands/join/index.js +2 -2
  59. package/dist/commands/knowledge/create.d.ts.map +1 -1
  60. package/dist/commands/knowledge/create.js +2 -0
  61. package/dist/commands/knowledge/create.js.map +1 -1
  62. package/dist/commands/knowledge/graph.d.ts.map +1 -1
  63. package/dist/commands/knowledge/graph.js +2 -0
  64. package/dist/commands/knowledge/graph.js.map +1 -1
  65. package/dist/commands/knowledge/search.d.ts.map +1 -1
  66. package/dist/commands/knowledge/search.js +2 -0
  67. package/dist/commands/knowledge/search.js.map +1 -1
  68. package/dist/commands/log.d.ts.map +1 -1
  69. package/dist/commands/log.js +4 -3
  70. package/dist/commands/log.js.map +1 -1
  71. package/dist/commands/orchestrate.d.ts.map +1 -1
  72. package/dist/commands/orchestrate.js +2 -0
  73. package/dist/commands/orchestrate.js.map +1 -1
  74. package/dist/commands/pull/pull-command.d.ts.map +1 -1
  75. package/dist/commands/pull/pull-command.js +2 -0
  76. package/dist/commands/pull/pull-command.js.map +1 -1
  77. package/dist/commands/push/push-command.d.ts.map +1 -1
  78. package/dist/commands/push/push-command.js +19 -2
  79. package/dist/commands/push/push-command.js.map +1 -1
  80. package/dist/commands/ship.js +1 -1
  81. package/dist/commands/ship.js.map +1 -1
  82. package/dist/commands/sprint/create.d.ts +9 -5
  83. package/dist/commands/sprint/create.d.ts.map +1 -1
  84. package/dist/commands/sprint/create.js +226 -29
  85. package/dist/commands/sprint/create.js.map +1 -1
  86. package/dist/commands/sprint/index.d.ts.map +1 -1
  87. package/dist/commands/sprint/index.js +9 -5
  88. package/dist/commands/sprint/index.js.map +1 -1
  89. package/dist/commands/sprint/status.d.ts +3 -0
  90. package/dist/commands/sprint/status.d.ts.map +1 -1
  91. package/dist/commands/sprint/status.js +88 -2
  92. package/dist/commands/sprint/status.js.map +1 -1
  93. package/dist/commands/start/index.js +3 -3
  94. package/dist/commands/start/index.js.map +1 -1
  95. package/dist/commands/start/start-reflection.d.ts +5 -0
  96. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  97. package/dist/commands/start/start-reflection.js +60 -11
  98. package/dist/commands/start/start-reflection.js.map +1 -1
  99. package/dist/commands/sync/sync-command.js +1 -1
  100. package/dist/commands/sync/sync-command.js.map +1 -1
  101. package/dist/commands/sync/team-sync.js +1 -1
  102. package/dist/commands/task/status.d.ts +1 -1
  103. package/dist/commands/task/status.d.ts.map +1 -1
  104. package/dist/commands/task/status.js +161 -6
  105. package/dist/commands/task/status.js.map +1 -1
  106. package/dist/commands/team/members.d.ts.map +1 -1
  107. package/dist/commands/team/members.js +4 -0
  108. package/dist/commands/team/members.js.map +1 -1
  109. package/dist/commands/team/projects.d.ts.map +1 -1
  110. package/dist/commands/team/projects.js +3 -0
  111. package/dist/commands/team/projects.js.map +1 -1
  112. package/dist/commands/team/status.d.ts.map +1 -1
  113. package/dist/commands/team/status.js +2 -0
  114. package/dist/commands/team/status.js.map +1 -1
  115. package/dist/index.js +12 -8
  116. package/dist/index.js.map +1 -1
  117. package/dist/lib/adoption-score.d.ts +1 -1
  118. package/dist/lib/adoption-score.d.ts.map +1 -1
  119. package/dist/lib/adoption-score.js +1 -0
  120. package/dist/lib/adoption-score.js.map +1 -1
  121. package/dist/lib/context-loader-events.d.ts +4 -4
  122. package/dist/lib/context-loader-events.d.ts.map +1 -1
  123. package/dist/lib/context-loader-events.js +69 -18
  124. package/dist/lib/context-loader-events.js.map +1 -1
  125. package/dist/lib/context-quality.d.ts +224 -0
  126. package/dist/lib/context-quality.d.ts.map +1 -0
  127. package/dist/lib/context-quality.js +363 -0
  128. package/dist/lib/context-quality.js.map +1 -0
  129. package/dist/lib/event-logger.d.ts.map +1 -1
  130. package/dist/lib/event-logger.js +2 -3
  131. package/dist/lib/event-logger.js.map +1 -1
  132. package/dist/lib/health-checker.d.ts +35 -0
  133. package/dist/lib/health-checker.d.ts.map +1 -0
  134. package/dist/lib/health-checker.js +475 -0
  135. package/dist/lib/health-checker.js.map +1 -0
  136. package/dist/lib/output-formatter.d.ts +48 -0
  137. package/dist/lib/output-formatter.d.ts.map +1 -1
  138. package/dist/lib/output-formatter.js +168 -4
  139. package/dist/lib/output-formatter.js.map +1 -1
  140. package/dist/lib/resumption-brief.d.ts +91 -0
  141. package/dist/lib/resumption-brief.d.ts.map +1 -0
  142. package/dist/lib/resumption-brief.js +344 -0
  143. package/dist/lib/resumption-brief.js.map +1 -0
  144. package/dist/lib/staleness-detector.js +1 -1
  145. package/dist/lib/state-cache.d.ts +43 -0
  146. package/dist/lib/state-cache.d.ts.map +1 -1
  147. package/dist/lib/state-cache.js +72 -0
  148. package/dist/lib/state-cache.js.map +1 -1
  149. package/dist/lib/targeted-coaching.js +2 -2
  150. package/dist/lib/task-parser.d.ts +34 -4
  151. package/dist/lib/task-parser.d.ts.map +1 -1
  152. package/dist/lib/task-parser.js +110 -4
  153. package/dist/lib/task-parser.js.map +1 -1
  154. package/dist/services/context-search.d.ts.map +1 -1
  155. package/dist/services/context-search.js +4 -2
  156. package/dist/services/context-search.js.map +1 -1
  157. package/dist/templates/ai-instructions-template.d.ts.map +1 -1
  158. package/dist/templates/ai-instructions-template.js +20 -0
  159. package/dist/templates/ai-instructions-template.js.map +1 -1
  160. package/dist/templates/commands/handoff.md +40 -0
  161. package/dist/templates/commands/quick.md +27 -0
  162. package/dist/templates/commands/ship.md +43 -0
  163. package/dist/templates/commands/start.md +15 -0
  164. package/dist/templates/commands/vibecheck.md +36 -0
  165. package/dist/templates/skills/ginko/SKILL.md +1 -8
  166. package/dist/templates/sprint-template.md +273 -0
  167. package/dist/utils/cloud-guard.d.ts +48 -0
  168. package/dist/utils/cloud-guard.d.ts.map +1 -0
  169. package/dist/utils/cloud-guard.js +107 -0
  170. package/dist/utils/cloud-guard.js.map +1 -0
  171. package/dist/utils/config-loader.d.ts +2 -2
  172. package/dist/utils/config-loader.js +2 -2
  173. package/dist/utils/helpers.d.ts.map +1 -1
  174. package/dist/utils/helpers.js +11 -10
  175. package/dist/utils/helpers.js.map +1 -1
  176. package/dist/utils/perf-logger.d.ts +100 -0
  177. package/dist/utils/perf-logger.d.ts.map +1 -0
  178. package/dist/utils/perf-logger.js +132 -0
  179. package/dist/utils/perf-logger.js.map +1 -0
  180. package/package.json +3 -3
@@ -0,0 +1,344 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2026-02-05
5
+ * @tags: [resumption-brief, context-synthesis, session-start, epic-018]
6
+ * @related: [context-loader-events.ts, ../commands/start/start-reflection.ts]
7
+ * @priority: critical
8
+ * @complexity: medium
9
+ * @dependencies: [context-loader-events.ts]
10
+ */
11
+ /**
12
+ * Synthesize a resumption brief from loaded context (EPIC-018 Sprint 1 t01)
13
+ *
14
+ * Takes the raw events from LoadedContext and produces a structured
15
+ * ResumptionBrief that AI assistants can use to understand session state.
16
+ *
17
+ * @param context - Loaded context from event stream
18
+ * @param options - Synthesis options
19
+ * @returns Synthesized resumption brief
20
+ */
21
+ export function synthesizeResumptionBrief(context, options = {}) {
22
+ const { maxEvents = 50, maxFiles = 10, includeTeam = false } = options;
23
+ // Combine events (my events + optionally team events)
24
+ const allEvents = includeTeam && context.teamEvents
25
+ ? [...context.myEvents, ...context.teamEvents]
26
+ : context.myEvents;
27
+ // Sort by timestamp descending (most recent first)
28
+ const sortedEvents = [...allEvents]
29
+ .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime())
30
+ .slice(0, maxEvents);
31
+ // Extract components
32
+ const summary = generateSessionSummary(sortedEvents);
33
+ const stoppingPoint = findStoppingPoint(sortedEvents);
34
+ const openQuestions = extractOpenQuestions(sortedEvents);
35
+ const filesModified = extractFilesTouched(sortedEvents, maxFiles);
36
+ const duration = calculateSessionDuration(sortedEvents);
37
+ const decisions = extractDecisions(sortedEvents);
38
+ const insights = extractInsights(sortedEvents);
39
+ return {
40
+ lastSession: {
41
+ summary,
42
+ stoppingPoint,
43
+ openQuestions,
44
+ filesModified,
45
+ duration
46
+ },
47
+ decisions,
48
+ insights,
49
+ synthesizedAt: new Date(),
50
+ eventCount: sortedEvents.length
51
+ };
52
+ }
53
+ /**
54
+ * Generate a summary of the session work (t01)
55
+ *
56
+ * Analyzes events to produce a concise summary like:
57
+ * "Renamed settings panel, investigating API"
58
+ */
59
+ function generateSessionSummary(events) {
60
+ if (events.length === 0) {
61
+ return 'No recent session activity';
62
+ }
63
+ // Group events by category
64
+ const features = events.filter(e => e.category === 'feature');
65
+ const fixes = events.filter(e => e.category === 'fix');
66
+ const achievements = events.filter(e => e.category === 'achievement');
67
+ const summaryParts = [];
68
+ // Prioritize achievements (completed work)
69
+ if (achievements.length > 0) {
70
+ const recentAchievement = achievements[0];
71
+ summaryParts.push(truncateDescription(recentAchievement.description, 50));
72
+ }
73
+ // Add feature work
74
+ if (features.length > 0 && summaryParts.length < 2) {
75
+ const recentFeature = features[0];
76
+ const prefix = summaryParts.length > 0 ? 'working on' : '';
77
+ const desc = truncateDescription(recentFeature.description, 40);
78
+ summaryParts.push(prefix ? `${prefix} ${desc}` : desc);
79
+ }
80
+ // Add fix work
81
+ if (fixes.length > 0 && summaryParts.length < 2) {
82
+ const recentFix = fixes[0];
83
+ const prefix = summaryParts.length > 0 ? 'fixing' : '';
84
+ const desc = truncateDescription(recentFix.description, 40);
85
+ summaryParts.push(prefix ? `${prefix} ${desc}` : desc);
86
+ }
87
+ // Fallback to most recent event
88
+ if (summaryParts.length === 0) {
89
+ summaryParts.push(truncateDescription(events[0].description, 60));
90
+ }
91
+ return summaryParts.join(', ');
92
+ }
93
+ /**
94
+ * Find where work stopped (t01)
95
+ *
96
+ * Looks at the most recent events to determine the stopping point.
97
+ * Returns something like: "Checking if 'team' appears in API responses"
98
+ */
99
+ function findStoppingPoint(events) {
100
+ if (events.length === 0) {
101
+ return 'No stopping point identified';
102
+ }
103
+ // Most recent non-git event is typically where work stopped
104
+ const workEvents = events.filter(e => e.category !== 'git' &&
105
+ e.category !== 'achievement' // Achievements are completed, not stopping points
106
+ );
107
+ if (workEvents.length === 0) {
108
+ // If only git/achievements, last event was probably a commit
109
+ const lastEvent = events[0];
110
+ if (lastEvent.category === 'git') {
111
+ return `Last commit: ${truncateDescription(lastEvent.description, 60)}`;
112
+ }
113
+ if (lastEvent.category === 'achievement') {
114
+ return `Completed: ${truncateDescription(lastEvent.description, 60)}`;
115
+ }
116
+ return truncateDescription(lastEvent.description, 60);
117
+ }
118
+ const stoppingEvent = workEvents[0];
119
+ // Add file context if available
120
+ if (stoppingEvent.files && stoppingEvent.files.length > 0) {
121
+ const mainFile = stoppingEvent.files[0];
122
+ const fileName = mainFile.split('/').pop() || mainFile;
123
+ return `${truncateDescription(stoppingEvent.description, 50)} (in ${fileName})`;
124
+ }
125
+ return truncateDescription(stoppingEvent.description, 60);
126
+ }
127
+ /**
128
+ * Extract open questions from events (EPIC-018 Sprint 1 t03)
129
+ *
130
+ * Looks for decision/insight events with high impact that might indicate
131
+ * unresolved questions. Also parses descriptions for question patterns.
132
+ */
133
+ function extractOpenQuestions(events) {
134
+ const questions = [];
135
+ const seenQuestions = new Set();
136
+ for (const event of events) {
137
+ // Look for explicit questions in descriptions
138
+ const questionPatterns = [
139
+ /\?$/, // Ends with question mark
140
+ /should we/i,
141
+ /need to decide/i,
142
+ /unclear/i,
143
+ /not sure/i,
144
+ /question:/i,
145
+ /todo:/i,
146
+ /tbd/i,
147
+ /investigate/i,
148
+ /figure out/i
149
+ ];
150
+ const hasQuestionIndicator = questionPatterns.some(pattern => pattern.test(event.description));
151
+ // High-impact decisions might indicate open questions
152
+ const isHighImpactDecision = event.category === 'decision' &&
153
+ event.impact === 'high';
154
+ // Insights with uncertainty might be open questions
155
+ const isUncertainInsight = event.category === 'insight' &&
156
+ (event.description.toLowerCase().includes('maybe') ||
157
+ event.description.toLowerCase().includes('might') ||
158
+ event.description.toLowerCase().includes('could'));
159
+ if (hasQuestionIndicator || isHighImpactDecision || isUncertainInsight) {
160
+ // Extract the question or create one from the description
161
+ let question = event.description;
162
+ // Clean up the question
163
+ if (!question.endsWith('?')) {
164
+ // Convert statement to question if needed
165
+ if (question.toLowerCase().startsWith('should we')) {
166
+ question = question + '?';
167
+ }
168
+ else if (question.toLowerCase().includes('need to decide')) {
169
+ question = question.replace(/need to decide/i, 'Decision needed:');
170
+ }
171
+ }
172
+ // Deduplicate
173
+ const normalizedQuestion = question.toLowerCase().trim();
174
+ if (!seenQuestions.has(normalizedQuestion)) {
175
+ seenQuestions.add(normalizedQuestion);
176
+ questions.push(truncateDescription(question, 100));
177
+ }
178
+ }
179
+ }
180
+ return questions.slice(0, 5); // Limit to 5 questions
181
+ }
182
+ /**
183
+ * Extract files touched from events (EPIC-018 Sprint 1 t02)
184
+ *
185
+ * Collects unique files from event.files arrays and returns them
186
+ * sorted by frequency (most touched first).
187
+ */
188
+ function extractFilesTouched(events, maxFiles) {
189
+ const fileCount = new Map();
190
+ for (const event of events) {
191
+ if (event.files && Array.isArray(event.files)) {
192
+ for (const file of event.files) {
193
+ if (file && typeof file === 'string') {
194
+ const count = fileCount.get(file) || 0;
195
+ fileCount.set(file, count + 1);
196
+ }
197
+ }
198
+ }
199
+ }
200
+ // Sort by frequency (most touched first)
201
+ const sortedFiles = Array.from(fileCount.entries())
202
+ .sort((a, b) => b[1] - a[1])
203
+ .map(([file]) => file);
204
+ return sortedFiles.slice(0, maxFiles);
205
+ }
206
+ /**
207
+ * Calculate session duration from events (t01)
208
+ *
209
+ * Returns human-readable duration like "2h 15m"
210
+ */
211
+ function calculateSessionDuration(events) {
212
+ if (events.length < 2) {
213
+ return 'Unknown';
214
+ }
215
+ // Events are sorted descending (most recent first)
216
+ const mostRecent = new Date(events[0].timestamp);
217
+ const oldest = new Date(events[events.length - 1].timestamp);
218
+ const durationMs = mostRecent.getTime() - oldest.getTime();
219
+ const durationMinutes = Math.round(durationMs / (1000 * 60));
220
+ if (durationMinutes < 1) {
221
+ return 'Less than 1 minute';
222
+ }
223
+ else if (durationMinutes < 60) {
224
+ return `${durationMinutes}m`;
225
+ }
226
+ else {
227
+ const hours = Math.floor(durationMinutes / 60);
228
+ const minutes = durationMinutes % 60;
229
+ return minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`;
230
+ }
231
+ }
232
+ /**
233
+ * Extract decisions from events (t01)
234
+ */
235
+ function extractDecisions(events) {
236
+ return events
237
+ .filter(e => e.category === 'decision')
238
+ .map(e => ({
239
+ description: e.description,
240
+ timestamp: new Date(e.timestamp)
241
+ }))
242
+ .slice(0, 5); // Limit to 5 most recent
243
+ }
244
+ /**
245
+ * Extract insights from events (t01)
246
+ */
247
+ function extractInsights(events) {
248
+ return events
249
+ .filter(e => e.category === 'insight')
250
+ .map(e => ({
251
+ description: e.description,
252
+ timestamp: new Date(e.timestamp)
253
+ }))
254
+ .slice(0, 5); // Limit to 5 most recent
255
+ }
256
+ /**
257
+ * Helper: Truncate description to max length with ellipsis
258
+ */
259
+ function truncateDescription(description, maxLength) {
260
+ if (description.length <= maxLength) {
261
+ return description;
262
+ }
263
+ return description.substring(0, maxLength - 3) + '...';
264
+ }
265
+ /**
266
+ * Format resumption brief for human display
267
+ *
268
+ * Converts the structured brief into a readable format.
269
+ */
270
+ export function formatResumptionBrief(brief) {
271
+ const lines = [];
272
+ lines.push('=== Resumption Brief ===');
273
+ lines.push('');
274
+ // Last session summary
275
+ lines.push(`Summary: ${brief.lastSession.summary}`);
276
+ lines.push(`Stopping point: ${brief.lastSession.stoppingPoint}`);
277
+ lines.push(`Duration: ${brief.lastSession.duration}`);
278
+ lines.push('');
279
+ // Files modified
280
+ if (brief.lastSession.filesModified.length > 0) {
281
+ lines.push('Files touched:');
282
+ for (const file of brief.lastSession.filesModified.slice(0, 5)) {
283
+ lines.push(` - ${file}`);
284
+ }
285
+ if (brief.lastSession.filesModified.length > 5) {
286
+ lines.push(` ... and ${brief.lastSession.filesModified.length - 5} more`);
287
+ }
288
+ lines.push('');
289
+ }
290
+ // Open questions
291
+ if (brief.lastSession.openQuestions.length > 0) {
292
+ lines.push('Open questions:');
293
+ for (const question of brief.lastSession.openQuestions) {
294
+ lines.push(` ? ${question}`);
295
+ }
296
+ lines.push('');
297
+ }
298
+ // Decisions
299
+ if (brief.decisions.length > 0) {
300
+ lines.push('Recent decisions:');
301
+ for (const decision of brief.decisions.slice(0, 3)) {
302
+ lines.push(` - ${decision.description}`);
303
+ }
304
+ lines.push('');
305
+ }
306
+ // Insights
307
+ if (brief.insights.length > 0) {
308
+ lines.push('Insights:');
309
+ for (const insight of brief.insights.slice(0, 3)) {
310
+ lines.push(` - ${insight.description}`);
311
+ }
312
+ lines.push('');
313
+ }
314
+ lines.push(`Analyzed ${brief.eventCount} events`);
315
+ return lines.join('\n');
316
+ }
317
+ /**
318
+ * Format resumption brief for AI context (JSONL entry)
319
+ *
320
+ * Returns a structured object suitable for AI consumption.
321
+ */
322
+ export function formatResumptionBriefForAI(brief) {
323
+ return {
324
+ type: 'resumption_brief',
325
+ timestamp: brief.synthesizedAt.toISOString(),
326
+ lastSession: {
327
+ summary: brief.lastSession.summary,
328
+ stoppingPoint: brief.lastSession.stoppingPoint,
329
+ openQuestions: brief.lastSession.openQuestions,
330
+ filesModified: brief.lastSession.filesModified,
331
+ duration: brief.lastSession.duration
332
+ },
333
+ decisions: brief.decisions.map(d => ({
334
+ description: d.description,
335
+ timestamp: d.timestamp.toISOString()
336
+ })),
337
+ insights: brief.insights.map(i => ({
338
+ description: i.description,
339
+ timestamp: i.timestamp.toISOString()
340
+ })),
341
+ eventCount: brief.eventCount
342
+ };
343
+ }
344
+ //# sourceMappingURL=resumption-brief.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resumption-brief.js","sourceRoot":"","sources":["../../src/lib/resumption-brief.ts"],"names":[],"mappings":"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"}
@@ -166,7 +166,7 @@ export function displayStalenessWarning(result) {
166
166
  }
167
167
  }
168
168
  console.log('');
169
- console.log(chalk.dim(' Run `ginko sync` to pull team updates.'));
169
+ console.log(chalk.dim(' Run `ginko pull` to pull team updates.'));
170
170
  console.log('');
171
171
  }
172
172
  // =============================================================================
@@ -123,6 +123,49 @@ export declare function checkCacheStaleness(cache: StateCache): CacheStalenessRe
123
123
  * ```
124
124
  */
125
125
  export declare function formatCacheAge(fetchedAt: string): string;
126
+ /**
127
+ * Load cached state only if it's fresh (< 5 minutes old)
128
+ * Returns null if cache is stale or doesn't exist
129
+ *
130
+ * This enables cache-first loading for faster startup:
131
+ * 1. Check cache - if fresh, return immediately (0ms network)
132
+ * 2. If stale/missing, fetch from API and update cache
133
+ *
134
+ * @param graphId - Graph ID to match against cached data
135
+ * @returns Fresh cache data or null if stale/missing
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * // Cache-first pattern in start-reflection.ts:
140
+ * const cached = await loadFreshCache(graphId);
141
+ * if (cached) {
142
+ * return cached; // Skip API call, use cache
143
+ * }
144
+ * // Cache miss/stale - fetch from API
145
+ * const fresh = await fetchFromApi();
146
+ * await saveStateCache(fresh, graphId);
147
+ * ```
148
+ */
149
+ export declare function loadFreshCache(graphId: string): Promise<ActiveSprintData | null>;
150
+ /**
151
+ * Try to load from cache first, falling back to API call
152
+ * Automatically updates cache on successful API fetch
153
+ *
154
+ * @param graphId - Graph namespace identifier
155
+ * @param fetchFn - Function to call if cache is stale/missing
156
+ * @returns Sprint data from cache or fresh API call
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * const data = await loadWithCacheFallback(graphId, async () => {
161
+ * return await client.getActiveSprint(graphId);
162
+ * });
163
+ * ```
164
+ */
165
+ export declare function loadWithCacheFallback(graphId: string, fetchFn: () => Promise<ActiveSprintData>): Promise<{
166
+ data: ActiveSprintData;
167
+ source: 'cache' | 'api';
168
+ }>;
126
169
  /**
127
170
  * Get the full path to the cache file
128
171
  */
@@ -1 +1 @@
1
- {"version":3,"file":"state-cache.d.ts","sourceRoot":"","sources":["../../src/lib/state-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;KACjD,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,gBAAgB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAoBjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,oBAAoB,CAsB3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAwBxD;AAMD;;GAEG;AACH,iBAAe,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAG7C;AAED;;GAEG;AACH,iBAAS,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,UAAU,CAsCvD;AAMD,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC"}
1
+ {"version":3,"file":"state-cache.d.ts","sourceRoot":"","sources":["../../src/lib/state-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;KACjD,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,gBAAgB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAoBjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,oBAAoB,CAsB3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAwBxD;AAMD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAoBtF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GACvC,OAAO,CAAC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAAA;CAAE,CAAC,CAgB9D;AAMD;;GAEG;AACH,iBAAe,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAG7C;AAED;;GAEG;AACH,iBAAS,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,UAAU,CAsCvD;AAMD,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC"}
@@ -203,6 +203,78 @@ export function formatCacheAge(fetchedAt) {
203
203
  return date.toLocaleDateString();
204
204
  }
205
205
  // =============================================================================
206
+ // EPIC-018 Sprint 1 TASK-04: Cache-First Optimization
207
+ // =============================================================================
208
+ /**
209
+ * Load cached state only if it's fresh (< 5 minutes old)
210
+ * Returns null if cache is stale or doesn't exist
211
+ *
212
+ * This enables cache-first loading for faster startup:
213
+ * 1. Check cache - if fresh, return immediately (0ms network)
214
+ * 2. If stale/missing, fetch from API and update cache
215
+ *
216
+ * @param graphId - Graph ID to match against cached data
217
+ * @returns Fresh cache data or null if stale/missing
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * // Cache-first pattern in start-reflection.ts:
222
+ * const cached = await loadFreshCache(graphId);
223
+ * if (cached) {
224
+ * return cached; // Skip API call, use cache
225
+ * }
226
+ * // Cache miss/stale - fetch from API
227
+ * const fresh = await fetchFromApi();
228
+ * await saveStateCache(fresh, graphId);
229
+ * ```
230
+ */
231
+ export async function loadFreshCache(graphId) {
232
+ const cache = await loadStateCache();
233
+ // No cache exists
234
+ if (!cache) {
235
+ return null;
236
+ }
237
+ // Cache is for a different graph
238
+ if (cache.graph_id !== graphId) {
239
+ return null;
240
+ }
241
+ // Check if cache is fresh
242
+ const staleness = checkCacheStaleness(cache);
243
+ if (!staleness.isFresh) {
244
+ return null;
245
+ }
246
+ return cache.active_sprint;
247
+ }
248
+ /**
249
+ * Try to load from cache first, falling back to API call
250
+ * Automatically updates cache on successful API fetch
251
+ *
252
+ * @param graphId - Graph namespace identifier
253
+ * @param fetchFn - Function to call if cache is stale/missing
254
+ * @returns Sprint data from cache or fresh API call
255
+ *
256
+ * @example
257
+ * ```typescript
258
+ * const data = await loadWithCacheFallback(graphId, async () => {
259
+ * return await client.getActiveSprint(graphId);
260
+ * });
261
+ * ```
262
+ */
263
+ export async function loadWithCacheFallback(graphId, fetchFn) {
264
+ // Try cache first
265
+ const cached = await loadFreshCache(graphId);
266
+ if (cached) {
267
+ return { data: cached, source: 'cache' };
268
+ }
269
+ // Cache miss - fetch from API
270
+ const fresh = await fetchFn();
271
+ // Update cache in background (don't await)
272
+ saveStateCache(fresh, graphId).catch(() => {
273
+ // Ignore cache save errors - non-critical
274
+ });
275
+ return { data: fresh, source: 'api' };
276
+ }
277
+ // =============================================================================
206
278
  // Helper Functions
207
279
  // =============================================================================
208
280
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"state-cache.js","sourceRoot":"","sources":["../../src/lib/state-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-cache.js","sourceRoot":"","sources":["../../src/lib/state-cache.ts"],"names":[],"mappings":"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"}
@@ -109,8 +109,8 @@ export const COACHING_TIPS = [
109
109
  id: 'quality-team-sync',
110
110
  metric: 'collaborationQuality',
111
111
  context: ['start'],
112
- message: 'Run `ginko sync` periodically to stay aligned with team updates',
113
- action: 'ginko sync',
112
+ message: 'Run `ginko pull` periodically to stay aligned with team updates',
113
+ action: 'ginko pull',
114
114
  priority: 6,
115
115
  },
116
116
  // Anti-Patterns Tips
@@ -12,8 +12,19 @@
12
12
  * Task status values (aligned with Status API)
13
13
  */
14
14
  export type TaskStatus = 'not_started' | 'in_progress' | 'blocked' | 'complete' | 'paused';
15
+ /**
16
+ * Task content quality assessment (EPIC-018)
17
+ */
18
+ export type TaskContentQuality = 'thin' | 'adequate' | 'rich';
15
19
  /**
16
20
  * Parsed task from sprint markdown
21
+ *
22
+ * EPIC-018: Rich task content follows WHY-WHAT-HOW structure:
23
+ * - problem: WHY this task exists (motivation)
24
+ * - solution: WHAT we're achieving (outcome)
25
+ * - approach: HOW we'll implement it (strategy)
26
+ * - scope: boundaries (in/out of scope)
27
+ * - acceptance_criteria: done when (definition of done)
17
28
  */
18
29
  export interface ParsedTask {
19
30
  /** Task ID (e.g., e015_s00a_t01, TASK-1, adhoc_260119_s01_t01) */
@@ -32,16 +43,26 @@ export interface ParsedTask {
32
43
  assignee: string | null;
33
44
  /** Initial status from checkbox (used only on CREATE) */
34
45
  initial_status: TaskStatus;
35
- /** Task goal/description */
36
- goal: string | null;
37
- /** Approach/implementation notes (e014_s02_t04) */
46
+ /** WHY: Problem/motivation - why this task exists */
47
+ problem: string | null;
48
+ /** WHAT: Solution/outcome - what we're achieving */
49
+ solution: string | null;
50
+ /** HOW: Approach/strategy - implementation notes */
38
51
  approach: string | null;
39
- /** Acceptance criteria list */
52
+ /** Boundaries: What's in/out of scope */
53
+ scope: string | null;
54
+ /** @deprecated Use 'solution' instead. Kept for backward compatibility. */
55
+ goal: string | null;
56
+ /** Acceptance criteria list (definition of done) */
40
57
  acceptance_criteria: string[];
41
58
  /** Referenced files */
42
59
  files: string[];
43
60
  /** Related ADR references */
44
61
  related_adrs: string[];
62
+ /** AI confidence score (0-100) when task was created */
63
+ confidence: number | null;
64
+ /** Assessed content quality */
65
+ content_quality: TaskContentQuality;
45
66
  }
46
67
  /**
47
68
  * Sprint metadata extracted alongside tasks
@@ -73,6 +94,15 @@ export declare function parseTaskHierarchy(taskId: string): {
73
94
  sprint_id: string;
74
95
  epic_id: string;
75
96
  } | null;
97
+ /**
98
+ * Assess task content quality (EPIC-018)
99
+ *
100
+ * Evaluates whether a task has enough content to work autonomously.
101
+ * - thin: Missing critical fields (problem, acceptance criteria)
102
+ * - adequate: Has basics but missing approach or scope
103
+ * - rich: Complete WHY-WHAT-HOW structure
104
+ */
105
+ export declare function assessTaskContentQuality(task: ParsedTask): TaskContentQuality;
76
106
  /**
77
107
  * Parse a single task block
78
108
  *
@@ -1 +1 @@
1
- {"version":3,"file":"task-parser.d.ts","sourceRoot":"","sources":["../../src/lib/task-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,qBAAqB;IACrB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,yDAAyD;IACzD,cAAc,EAAE,UAAU,CAAC;IAC3B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,+BAA+B;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,uBAAuB;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA8BhG;AAqID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD,UAAU,GAAG,IAAI,CA6GnB;AA4GD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAwBrF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAazF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyBtF"}
1
+ {"version":3,"file":"task-parser.d.ts","sourceRoot":"","sources":["../../src/lib/task-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE3F;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,qBAAqB;IACrB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,yDAAyD;IACzD,cAAc,EAAE,UAAU,CAAC;IAG3B,qDAAqD;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,yCAAyC;IACzC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpB,oDAAoD;IACpD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,uBAAuB;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IAGvB,wDAAwD;IACxD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+BAA+B;IAC/B,eAAe,EAAE,kBAAkB,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA8BhG;AAkJD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,CAa7E;AAwED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD,UAAU,GAAG,IAAI,CAgInB;AA4GD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAwBrF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAazF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyBtF"}