@ginkoai/cli 2.1.0 → 2.1.2

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 (92) hide show
  1. package/dist/commands/graph/api-client.d.ts +36 -1
  2. package/dist/commands/graph/api-client.d.ts.map +1 -1
  3. package/dist/commands/graph/api-client.js +32 -2
  4. package/dist/commands/graph/api-client.js.map +1 -1
  5. package/dist/commands/graph/config.d.ts +6 -1
  6. package/dist/commands/graph/config.d.ts.map +1 -1
  7. package/dist/commands/graph/config.js +9 -1
  8. package/dist/commands/graph/config.js.map +1 -1
  9. package/dist/commands/graph/init.d.ts +1 -1
  10. package/dist/commands/graph/init.d.ts.map +1 -1
  11. package/dist/commands/graph/init.js +17 -2
  12. package/dist/commands/graph/init.js.map +1 -1
  13. package/dist/commands/handoff.d.ts +3 -3
  14. package/dist/commands/handoff.d.ts.map +1 -1
  15. package/dist/commands/handoff.js +32 -3
  16. package/dist/commands/handoff.js.map +1 -1
  17. package/dist/commands/nudging/index.d.ts +24 -0
  18. package/dist/commands/nudging/index.d.ts.map +1 -0
  19. package/dist/commands/nudging/index.js +175 -0
  20. package/dist/commands/nudging/index.js.map +1 -0
  21. package/dist/commands/sprint/create.d.ts +26 -0
  22. package/dist/commands/sprint/create.d.ts.map +1 -0
  23. package/dist/commands/sprint/create.js +269 -0
  24. package/dist/commands/sprint/create.js.map +1 -0
  25. package/dist/commands/sprint/index.d.ts.map +1 -1
  26. package/dist/commands/sprint/index.js +24 -0
  27. package/dist/commands/sprint/index.js.map +1 -1
  28. package/dist/commands/sprint/quick-fix.d.ts +25 -0
  29. package/dist/commands/sprint/quick-fix.d.ts.map +1 -0
  30. package/dist/commands/sprint/quick-fix.js +151 -0
  31. package/dist/commands/sprint/quick-fix.js.map +1 -0
  32. package/dist/commands/sprint/sprint-pipeline-enhanced.d.ts.map +1 -1
  33. package/dist/commands/sprint/sprint-pipeline-enhanced.js +37 -0
  34. package/dist/commands/sprint/sprint-pipeline-enhanced.js.map +1 -1
  35. package/dist/commands/sprint/status.d.ts.map +1 -1
  36. package/dist/commands/sprint/status.js +21 -1
  37. package/dist/commands/sprint/status.js.map +1 -1
  38. package/dist/commands/start/start-reflection.d.ts +14 -0
  39. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  40. package/dist/commands/start/start-reflection.js +180 -9
  41. package/dist/commands/start/start-reflection.js.map +1 -1
  42. package/dist/commands/task/status.d.ts +3 -0
  43. package/dist/commands/task/status.d.ts.map +1 -1
  44. package/dist/commands/task/status.js +48 -1
  45. package/dist/commands/task/status.js.map +1 -1
  46. package/dist/commands/team/index.d.ts +5 -0
  47. package/dist/commands/team/index.d.ts.map +1 -1
  48. package/dist/commands/team/index.js +28 -0
  49. package/dist/commands/team/index.js.map +1 -1
  50. package/dist/commands/team/status.d.ts +16 -0
  51. package/dist/commands/team/status.d.ts.map +1 -0
  52. package/dist/commands/team/status.js +180 -0
  53. package/dist/commands/team/status.js.map +1 -0
  54. package/dist/index.js +10 -3
  55. package/dist/index.js.map +1 -1
  56. package/dist/lib/adoption-score.d.ts +69 -0
  57. package/dist/lib/adoption-score.d.ts.map +1 -0
  58. package/dist/lib/adoption-score.js +206 -0
  59. package/dist/lib/adoption-score.js.map +1 -0
  60. package/dist/lib/coaching-level.d.ts +127 -0
  61. package/dist/lib/coaching-level.d.ts.map +1 -0
  62. package/dist/lib/coaching-level.js +406 -0
  63. package/dist/lib/coaching-level.js.map +1 -0
  64. package/dist/lib/event-logger.d.ts +42 -0
  65. package/dist/lib/event-logger.d.ts.map +1 -1
  66. package/dist/lib/event-logger.js +77 -0
  67. package/dist/lib/event-logger.js.map +1 -1
  68. package/dist/lib/planning-menu.d.ts +69 -0
  69. package/dist/lib/planning-menu.d.ts.map +1 -0
  70. package/dist/lib/planning-menu.js +342 -0
  71. package/dist/lib/planning-menu.js.map +1 -0
  72. package/dist/lib/targeted-coaching.d.ts +71 -0
  73. package/dist/lib/targeted-coaching.d.ts.map +1 -0
  74. package/dist/lib/targeted-coaching.js +318 -0
  75. package/dist/lib/targeted-coaching.js.map +1 -0
  76. package/dist/lib/task-parser.d.ts +2 -0
  77. package/dist/lib/task-parser.d.ts.map +1 -1
  78. package/dist/lib/task-parser.js +23 -0
  79. package/dist/lib/task-parser.js.map +1 -1
  80. package/dist/lib/user-sprint.d.ts +53 -0
  81. package/dist/lib/user-sprint.d.ts.map +1 -1
  82. package/dist/lib/user-sprint.js +137 -2
  83. package/dist/lib/user-sprint.js.map +1 -1
  84. package/dist/lib/work-reconciliation.d.ts +59 -0
  85. package/dist/lib/work-reconciliation.d.ts.map +1 -0
  86. package/dist/lib/work-reconciliation.js +267 -0
  87. package/dist/lib/work-reconciliation.js.map +1 -0
  88. package/dist/utils/version-check.d.ts +26 -0
  89. package/dist/utils/version-check.d.ts.map +1 -0
  90. package/dist/utils/version-check.js +186 -0
  91. package/dist/utils/version-check.js.map +1 -0
  92. package/package.json +2 -2
@@ -0,0 +1,206 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2026-01-26
5
+ * @tags: [adoption, coaching, behavior, quieting, epic-016-s04]
6
+ * @related: [planning-menu.ts, user-sprint.ts, insights/index.ts]
7
+ * @priority: medium
8
+ * @complexity: low
9
+ * @dependencies: [fs-extra, path]
10
+ */
11
+ /**
12
+ * Behavior-Based Quieting (EPIC-016 Sprint 4 t05)
13
+ *
14
+ * Tracks pattern adoption signals and adjusts planning menu verbosity.
15
+ *
16
+ * Signals of Adoption:
17
+ * | User Behavior | Points |
18
+ * |----------------------------------|--------|
19
+ * | "What's our next task?" | +1 |
20
+ * | "Let's continue Sprint X" | +1 |
21
+ * | `ginko sprint` unprompted | +2 |
22
+ * | Selects [d] Something else | +0 |
23
+ * | 3+ consecutive ad-hoc sessions | reset |
24
+ *
25
+ * Quieting Levels:
26
+ * - 0-5 points: Full prompts (default for new users)
27
+ * - 6-15 points: Lighter prompts (briefer menu)
28
+ * - 16+ points: Minimal prompts (only when truly unstructured)
29
+ */
30
+ import fs from 'fs-extra';
31
+ import path from 'path';
32
+ import { getUserEmail, getGinkoDir } from '../utils/helpers.js';
33
+ // =============================================================================
34
+ // Constants
35
+ // =============================================================================
36
+ const ADOPTION_FILE = 'adoption-score.json';
37
+ const SIGNAL_POINTS = {
38
+ 'asked_next_task': 1,
39
+ 'continued_sprint': 1,
40
+ 'created_sprint': 2,
41
+ 'created_epic': 2,
42
+ 'used_quick_fix': 1,
43
+ 'chose_adhoc': 0,
44
+ 'completed_task': 1,
45
+ 'adhoc_streak': -999, // Special: resets score
46
+ };
47
+ const LEVEL_THRESHOLDS = {
48
+ minimal: 16, // 16+ points
49
+ light: 6, // 6-15 points
50
+ full: 0, // 0-5 points
51
+ };
52
+ // =============================================================================
53
+ // Score Management
54
+ // =============================================================================
55
+ /**
56
+ * Get path to user's adoption score file
57
+ */
58
+ async function getAdoptionFilePath() {
59
+ const ginkoDir = await getGinkoDir();
60
+ const userEmail = await getUserEmail();
61
+ const userSlug = userEmail.replace('@', '-at-').replace(/\./g, '-');
62
+ return path.join(ginkoDir, 'sessions', userSlug, ADOPTION_FILE);
63
+ }
64
+ /**
65
+ * Load user's adoption score
66
+ */
67
+ export async function getAdoptionScore() {
68
+ const filePath = await getAdoptionFilePath();
69
+ try {
70
+ if (await fs.pathExists(filePath)) {
71
+ const data = await fs.readJSON(filePath);
72
+ return {
73
+ score: data.score || 0,
74
+ level: calculateLevel(data.score || 0),
75
+ history: data.history || [],
76
+ lastUpdated: data.lastUpdated || new Date().toISOString(),
77
+ };
78
+ }
79
+ }
80
+ catch {
81
+ // Return default if file is corrupted
82
+ }
83
+ return {
84
+ score: 0,
85
+ level: 'full',
86
+ history: [],
87
+ lastUpdated: new Date().toISOString(),
88
+ };
89
+ }
90
+ /**
91
+ * Save user's adoption score
92
+ */
93
+ async function saveAdoptionScore(score) {
94
+ const filePath = await getAdoptionFilePath();
95
+ await fs.ensureDir(path.dirname(filePath));
96
+ await fs.writeJSON(filePath, score, { spaces: 2 });
97
+ }
98
+ /**
99
+ * Calculate quieting level from score
100
+ */
101
+ function calculateLevel(score) {
102
+ if (score >= LEVEL_THRESHOLDS.minimal)
103
+ return 'minimal';
104
+ if (score >= LEVEL_THRESHOLDS.light)
105
+ return 'light';
106
+ return 'full';
107
+ }
108
+ // =============================================================================
109
+ // Signal Recording
110
+ // =============================================================================
111
+ /**
112
+ * Record an adoption signal
113
+ *
114
+ * @param signal - The adoption signal to record
115
+ * @returns Updated adoption score
116
+ */
117
+ export async function recordAdoptionSignal(signal) {
118
+ const current = await getAdoptionScore();
119
+ const points = SIGNAL_POINTS[signal];
120
+ // Special case: adhoc_streak resets score
121
+ if (signal === 'adhoc_streak') {
122
+ current.score = 0;
123
+ current.history = [];
124
+ }
125
+ else {
126
+ current.score = Math.max(0, current.score + points);
127
+ // Keep last 50 history entries
128
+ current.history.push({
129
+ date: new Date().toISOString(),
130
+ signal,
131
+ points,
132
+ });
133
+ if (current.history.length > 50) {
134
+ current.history = current.history.slice(-50);
135
+ }
136
+ }
137
+ current.level = calculateLevel(current.score);
138
+ current.lastUpdated = new Date().toISOString();
139
+ await saveAdoptionScore(current);
140
+ return current;
141
+ }
142
+ /**
143
+ * Check if ad-hoc streak should reset score
144
+ *
145
+ * @param consecutiveAdhocSessions - Number of consecutive ad-hoc sessions
146
+ * @returns true if score was reset
147
+ */
148
+ export async function checkAdhocStreak(consecutiveAdhocSessions) {
149
+ if (consecutiveAdhocSessions >= 3) {
150
+ await recordAdoptionSignal('adhoc_streak');
151
+ return true;
152
+ }
153
+ return false;
154
+ }
155
+ /**
156
+ * Get planning menu configuration based on adoption level
157
+ */
158
+ export async function getPlanningMenuConfig() {
159
+ const { level, score } = await getAdoptionScore();
160
+ switch (level) {
161
+ case 'minimal':
162
+ // High adopters: minimal prompts
163
+ return {
164
+ showFullDescription: false,
165
+ showCoachingTip: false,
166
+ showCelebration: score >= 20, // Celebrate high adopters occasionally
167
+ };
168
+ case 'light':
169
+ // Medium adopters: lighter prompts
170
+ return {
171
+ showFullDescription: true,
172
+ showCoachingTip: false,
173
+ showCelebration: false,
174
+ };
175
+ case 'full':
176
+ default:
177
+ // New/low adopters: full coaching
178
+ return {
179
+ showFullDescription: true,
180
+ showCoachingTip: true,
181
+ showCelebration: false,
182
+ };
183
+ }
184
+ }
185
+ /**
186
+ * Get a brief status message for the adoption score
187
+ * Used in `ginko insights` output
188
+ */
189
+ export async function getAdoptionStatus() {
190
+ const { score, level } = await getAdoptionScore();
191
+ const levelEmoji = {
192
+ full: '🌱', // Growing
193
+ light: '🌿', // Established
194
+ minimal: '🌳', // Mature
195
+ };
196
+ return `${levelEmoji[level]} Pattern Adoption: ${score} points (${level} prompts)`;
197
+ }
198
+ // =============================================================================
199
+ // Exports
200
+ // =============================================================================
201
+ export const __testing = {
202
+ SIGNAL_POINTS,
203
+ LEVEL_THRESHOLDS,
204
+ calculateLevel,
205
+ };
206
+ //# sourceMappingURL=adoption-score.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adoption-score.js","sourceRoot":"","sources":["../../src/lib/adoption-score.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2026-01-26
5
+ * @tags: [coaching, insights, adaptive, epic-016-s05]
6
+ * @related: [adoption-score.ts, planning-menu.ts, api-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [fs-extra, path]
10
+ */
11
+ import { QuietingLevel } from './adoption-score.js';
12
+ export type CoachingLevel = 'minimal' | 'standard' | 'supportive';
13
+ export interface CoachingContext {
14
+ overallScore: number;
15
+ metrics: {
16
+ sessionEfficiency: number;
17
+ patternAdoption: number;
18
+ collaborationQuality: number;
19
+ antiPatterns: number;
20
+ };
21
+ level: CoachingLevel;
22
+ override: CoachingLevel | null;
23
+ source: 'dashboard' | 'cache' | 'adoption_fallback';
24
+ cacheAge?: number;
25
+ }
26
+ export interface InsightScores {
27
+ overallScore: number;
28
+ categoryScores: {
29
+ efficiency: number;
30
+ patterns: number;
31
+ quality: number;
32
+ 'anti-patterns': number;
33
+ };
34
+ fetchedAt: string;
35
+ periodDays: number;
36
+ }
37
+ export interface CoachingConfig {
38
+ override: CoachingLevel | null;
39
+ overrideSetAt: string | null;
40
+ }
41
+ /**
42
+ * Get cache age in minutes
43
+ */
44
+ declare function getCacheAgeMinutes(fetchedAt: string): number;
45
+ /**
46
+ * Load coaching config (manual overrides)
47
+ */
48
+ export declare function loadCoachingConfig(): Promise<CoachingConfig>;
49
+ /**
50
+ * Save coaching config
51
+ */
52
+ export declare function saveCoachingConfig(config: CoachingConfig): Promise<void>;
53
+ /**
54
+ * Set manual coaching level override
55
+ */
56
+ export declare function setCoachingOverride(level: CoachingLevel | 'auto'): Promise<void>;
57
+ /**
58
+ * Calculate coaching level from overall score
59
+ */
60
+ export declare function calculateCoachingLevel(score: number): CoachingLevel;
61
+ /**
62
+ * Convert adoption QuietingLevel to CoachingLevel
63
+ */
64
+ declare function adoptionLevelToCoachingLevel(quieting: QuietingLevel): CoachingLevel;
65
+ /**
66
+ * Estimate score from adoption level for fallback
67
+ */
68
+ declare function adoptionLevelToScore(quieting: QuietingLevel): number;
69
+ /**
70
+ * Get coaching context for current session
71
+ *
72
+ * Priority:
73
+ * 1. Manual override (if set)
74
+ * 2. Dashboard insight scores (if available)
75
+ * 3. Cached scores (if within TTL)
76
+ * 4. Adoption score fallback (if offline)
77
+ */
78
+ export declare function getCoachingContext(graphId?: string): Promise<CoachingContext>;
79
+ /**
80
+ * Get coaching level for quick checks
81
+ * Simplified version that just returns the level
82
+ */
83
+ export declare function getCoachingLevel(graphId?: string): Promise<CoachingLevel>;
84
+ /**
85
+ * Check if a specific metric is low and needs targeted coaching
86
+ */
87
+ export declare function isMetricLow(value: number, threshold?: number): boolean;
88
+ /**
89
+ * Get targeted coaching suggestions based on low metrics
90
+ */
91
+ export declare function getTargetedCoachingSuggestions(context: CoachingContext): string[];
92
+ export interface PromptVariants {
93
+ minimal: string;
94
+ standard: string;
95
+ supportive: string;
96
+ }
97
+ /**
98
+ * Get the appropriate prompt variant based on coaching level
99
+ */
100
+ export declare function selectPrompt<T extends string>(variants: Record<CoachingLevel, T>, level: CoachingLevel): T;
101
+ /**
102
+ * Standard prompt variants for common scenarios
103
+ */
104
+ export declare const PROMPT_VARIANTS: {
105
+ readonly noStructure: {
106
+ readonly minimal: "No active sprint. [a] Epic [b] Sprint [c] Quick [d] Ad-hoc";
107
+ readonly standard: "You have no planned work. What would you like to work on?\n\n[a] New Epic - Large initiative with multiple sprints\n[b] New Feature Sprint - Focused work with clear goals\n[c] Quick fix / Bug fix - Single task, minimal overhead\n[d] Something else - Explore, research, or work ad-hoc";
108
+ readonly supportive: "I notice you're not currently in a sprint. Sprints help track progress and maintain focus.\n\nWhat would you like to work on?\n\n[a] New Epic (Recommended)\n For large initiatives that need multiple sprints to complete.\n Example: \"Implement user authentication system\"\n\n[b] New Feature Sprint\n For focused work with a clear goal that can be done in ~1 week.\n Example: \"Add dark mode toggle\"\n\n[c] Quick fix / Bug fix\n For small, single tasks that don't need sprint overhead.\n Example: \"Fix login button alignment\"\n\n[d] Something else\n For exploration, research, or ad-hoc work.\n\nTip: Structured work (options a-c) improves your collaboration insights!";
109
+ };
110
+ readonly sprintComplete: {
111
+ readonly minimal: "Sprint done! [a] Next sprint [b] New epic [c] Ad-hoc";
112
+ readonly standard: "🎉 Sprint complete! All tasks finished.\n\nWhat's next?\n[a] Start next sprint\n[b] Create new epic\n[c] Work on something else";
113
+ readonly supportive: "🎉 Great work! You've completed all tasks in this sprint.\n\nWhat would you like to do next?\n\n[a] Start next sprint\n Continue momentum with the next planned sprint.\n\n[b] Create new epic\n Begin a new large initiative.\n\n[c] Work on something else\n Take a break or explore other work.\n\nTip: Completing sprints contributes to your pattern adoption score!";
114
+ };
115
+ };
116
+ export declare const __testing: {
117
+ LEVEL_THRESHOLDS: {
118
+ minimal: number;
119
+ standard: number;
120
+ };
121
+ CACHE_TTL_HOURS: number;
122
+ adoptionLevelToCoachingLevel: typeof adoptionLevelToCoachingLevel;
123
+ adoptionLevelToScore: typeof adoptionLevelToScore;
124
+ getCacheAgeMinutes: typeof getCacheAgeMinutes;
125
+ };
126
+ export {};
127
+ //# sourceMappingURL=coaching-level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coaching-level.d.ts","sourceRoot":"","sources":["../../src/lib/coaching-level.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuBH,OAAO,EAAoB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMtE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE;QACP,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,WAAW,GAAG,OAAO,GAAG,mBAAmB,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AA2ED;;GAEG;AACH,iBAAS,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIrD;AAMD;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAelE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYtF;AA2ED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAInE;AAED;;GAEG;AACH,iBAAS,4BAA4B,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CAU5E;AAED;;GAEG;AACH,iBAAS,oBAAoB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAU7D;AAMD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA6DnF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAG/E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,OAAO,CAE1E;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CAqBjF;AAMD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,EAClC,KAAK,EAAE,aAAa,GACnB,CAAC,CAEH;AAED;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;CAsDlB,CAAC;AAMX,eAAO,MAAM,SAAS;;;;;;;;;CAMrB,CAAC"}