@ginkoai/cli 2.0.5 → 2.1.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 (91) hide show
  1. package/dist/commands/epic/index.d.ts +29 -0
  2. package/dist/commands/epic/index.d.ts.map +1 -0
  3. package/dist/commands/epic/index.js +94 -0
  4. package/dist/commands/epic/index.js.map +1 -0
  5. package/dist/commands/epic/status.d.ts +40 -0
  6. package/dist/commands/epic/status.d.ts.map +1 -0
  7. package/dist/commands/epic/status.js +244 -0
  8. package/dist/commands/epic/status.js.map +1 -0
  9. package/dist/commands/graph/api-client.d.ts +209 -0
  10. package/dist/commands/graph/api-client.d.ts.map +1 -1
  11. package/dist/commands/graph/api-client.js +125 -0
  12. package/dist/commands/graph/api-client.js.map +1 -1
  13. package/dist/commands/graph/load.d.ts.map +1 -1
  14. package/dist/commands/graph/load.js +40 -2
  15. package/dist/commands/graph/load.js.map +1 -1
  16. package/dist/commands/migrate/index.d.ts +27 -0
  17. package/dist/commands/migrate/index.d.ts.map +1 -0
  18. package/dist/commands/migrate/index.js +76 -0
  19. package/dist/commands/migrate/index.js.map +1 -0
  20. package/dist/commands/migrate/status-migration.d.ts +58 -0
  21. package/dist/commands/migrate/status-migration.d.ts.map +1 -0
  22. package/dist/commands/migrate/status-migration.js +323 -0
  23. package/dist/commands/migrate/status-migration.js.map +1 -0
  24. package/dist/commands/sprint/index.d.ts.map +1 -1
  25. package/dist/commands/sprint/index.js +4 -0
  26. package/dist/commands/sprint/index.js.map +1 -1
  27. package/dist/commands/sprint/status.d.ts +42 -0
  28. package/dist/commands/sprint/status.d.ts.map +1 -0
  29. package/dist/commands/sprint/status.js +278 -0
  30. package/dist/commands/sprint/status.js.map +1 -0
  31. package/dist/commands/start/start-reflection.d.ts +39 -0
  32. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  33. package/dist/commands/start/start-reflection.js +311 -91
  34. package/dist/commands/start/start-reflection.js.map +1 -1
  35. package/dist/commands/sync/sprint-syncer.d.ts +19 -12
  36. package/dist/commands/sync/sprint-syncer.d.ts.map +1 -1
  37. package/dist/commands/sync/sprint-syncer.js +58 -140
  38. package/dist/commands/sync/sprint-syncer.js.map +1 -1
  39. package/dist/commands/sync/sync-command.d.ts.map +1 -1
  40. package/dist/commands/sync/sync-command.js +6 -18
  41. package/dist/commands/sync/sync-command.js.map +1 -1
  42. package/dist/commands/task/index.d.ts +25 -0
  43. package/dist/commands/task/index.d.ts.map +1 -0
  44. package/dist/commands/task/index.js +100 -0
  45. package/dist/commands/task/index.js.map +1 -0
  46. package/dist/commands/task/status.d.ts +43 -0
  47. package/dist/commands/task/status.d.ts.map +1 -0
  48. package/dist/commands/task/status.js +301 -0
  49. package/dist/commands/task/status.js.map +1 -0
  50. package/dist/index.js +12 -29
  51. package/dist/index.js.map +1 -1
  52. package/dist/lib/context-loader-events.d.ts +1 -0
  53. package/dist/lib/context-loader-events.d.ts.map +1 -1
  54. package/dist/lib/context-loader-events.js +28 -41
  55. package/dist/lib/context-loader-events.js.map +1 -1
  56. package/dist/lib/output-formatter.d.ts +12 -4
  57. package/dist/lib/output-formatter.d.ts.map +1 -1
  58. package/dist/lib/output-formatter.js +186 -14
  59. package/dist/lib/output-formatter.js.map +1 -1
  60. package/dist/lib/pending-updates.d.ts +148 -0
  61. package/dist/lib/pending-updates.d.ts.map +1 -0
  62. package/dist/lib/pending-updates.js +301 -0
  63. package/dist/lib/pending-updates.js.map +1 -0
  64. package/dist/lib/sprint-loader.d.ts +86 -14
  65. package/dist/lib/sprint-loader.d.ts.map +1 -1
  66. package/dist/lib/sprint-loader.js +293 -98
  67. package/dist/lib/sprint-loader.js.map +1 -1
  68. package/dist/lib/state-cache.d.ts +142 -0
  69. package/dist/lib/state-cache.d.ts.map +1 -0
  70. package/dist/lib/state-cache.js +259 -0
  71. package/dist/lib/state-cache.js.map +1 -0
  72. package/dist/lib/task-graph-sync.d.ts +105 -0
  73. package/dist/lib/task-graph-sync.d.ts.map +1 -0
  74. package/dist/lib/task-graph-sync.js +178 -0
  75. package/dist/lib/task-graph-sync.js.map +1 -0
  76. package/dist/lib/task-parser.d.ts +107 -0
  77. package/dist/lib/task-parser.d.ts.map +1 -0
  78. package/dist/lib/task-parser.js +384 -0
  79. package/dist/lib/task-parser.js.map +1 -0
  80. package/dist/templates/ai-instructions-template.d.ts.map +1 -1
  81. package/dist/templates/ai-instructions-template.js +7 -5
  82. package/dist/templates/ai-instructions-template.js.map +1 -1
  83. package/dist/templates/epic-template.md +0 -2
  84. package/dist/types/config.d.ts.map +1 -1
  85. package/dist/types/config.js +7 -5
  86. package/dist/types/config.js.map +1 -1
  87. package/dist/utils/synthesis.d.ts +4 -0
  88. package/dist/utils/synthesis.d.ts.map +1 -1
  89. package/dist/utils/synthesis.js +12 -18
  90. package/dist/utils/synthesis.js.map +1 -1
  91. package/package.json +1 -1
@@ -0,0 +1,278 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-19
5
+ * @tags: [cli, sprint, status, graph-authoritative, epic-015]
6
+ * @related: [../graph/api-client.ts, index.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [chalk, commander]
10
+ */
11
+ import { Command } from 'commander';
12
+ import chalk from 'chalk';
13
+ import readline from 'readline';
14
+ import { GraphApiClient } from '../graph/api-client.js';
15
+ import { getGraphId } from '../graph/config.js';
16
+ // =============================================================================
17
+ // Helpers
18
+ // =============================================================================
19
+ /**
20
+ * Get graph ID from config
21
+ */
22
+ async function requireGraphId() {
23
+ const graphId = process.env.GINKO_GRAPH_ID || await getGraphId();
24
+ if (!graphId) {
25
+ console.error(chalk.red('✗ Graph not initialized'));
26
+ console.error(chalk.dim(' Run `ginko graph init` first'));
27
+ process.exit(1);
28
+ }
29
+ return graphId;
30
+ }
31
+ /**
32
+ * Prompt user for confirmation
33
+ */
34
+ async function confirm(message) {
35
+ const rl = readline.createInterface({
36
+ input: process.stdin,
37
+ output: process.stdout,
38
+ });
39
+ return new Promise((resolve) => {
40
+ rl.question(`${message} [Y/n] `, (answer) => {
41
+ rl.close();
42
+ resolve(answer.toLowerCase() !== 'n');
43
+ });
44
+ });
45
+ }
46
+ /**
47
+ * Extract epic ID from sprint ID
48
+ * e.g., e015_s01 -> e015
49
+ */
50
+ function extractEpicId(sprintId) {
51
+ const match = sprintId.match(/^(e\d+)_s\d+$/);
52
+ return match ? match[1] : null;
53
+ }
54
+ /**
55
+ * Check if all sprints in epic are complete and offer to complete epic
56
+ */
57
+ async function checkEpicCompletion(client, graphId, epicId, skipPrompt) {
58
+ try {
59
+ const sprints = await client.getEpicSprints(graphId, epicId);
60
+ const allComplete = sprints.every(s => s.status === 'complete');
61
+ if (allComplete && sprints.length > 0) {
62
+ console.log(chalk.cyan(`\nAll sprints in ${epicId} are complete.`));
63
+ const shouldComplete = skipPrompt || await confirm('Mark epic complete?');
64
+ if (shouldComplete) {
65
+ await client.updateEpicStatus(graphId, epicId, 'complete');
66
+ console.log(chalk.green(`✓ Epic ${epicId} marked complete`));
67
+ }
68
+ }
69
+ }
70
+ catch (error) {
71
+ // Silently ignore cascade errors
72
+ if (process.env.GINKO_DEBUG_API === 'true') {
73
+ console.log(chalk.dim(` Epic cascade check failed: ${error}`));
74
+ }
75
+ }
76
+ }
77
+ function formatStatus(status) {
78
+ switch (status) {
79
+ case 'complete':
80
+ return chalk.green('✓ complete');
81
+ case 'active':
82
+ return chalk.cyan('▶ active');
83
+ case 'paused':
84
+ return chalk.yellow('⏸ paused');
85
+ case 'planned':
86
+ default:
87
+ return chalk.dim('○ planned');
88
+ }
89
+ }
90
+ function handleError(action, sprintId, error) {
91
+ if (error instanceof Error) {
92
+ if (error.message.includes('SPRINT_NOT_FOUND') || error.message.includes('not found')) {
93
+ console.error(chalk.red(`✗ Sprint not found: ${sprintId}`));
94
+ console.error(chalk.dim(' Make sure the sprint ID is correct and exists in the graph'));
95
+ }
96
+ else if (error.message.includes('AUTH_REQUIRED')) {
97
+ console.error(chalk.red('✗ Authentication required'));
98
+ console.error(chalk.dim(' Run `ginko login` first'));
99
+ }
100
+ else if (error.message.includes('SERVICE_UNAVAILABLE')) {
101
+ console.error(chalk.red('✗ Graph database unavailable'));
102
+ console.error(chalk.dim(' Please try again later'));
103
+ }
104
+ else {
105
+ console.error(chalk.red(`✗ Failed to ${action} sprint: ${error.message}`));
106
+ }
107
+ }
108
+ else {
109
+ console.error(chalk.red(`✗ Failed to ${action} sprint`));
110
+ }
111
+ process.exit(1);
112
+ }
113
+ /**
114
+ * Start sprint (planned -> active)
115
+ */
116
+ async function startSprintCommand(sprintId, options = {}) {
117
+ const graphId = await requireGraphId();
118
+ const client = new GraphApiClient();
119
+ try {
120
+ const current = await client.getSprintStatus(graphId, sprintId);
121
+ if (current.status === 'active') {
122
+ console.log(chalk.yellow(`Sprint ${sprintId} is already active (no change)`));
123
+ return;
124
+ }
125
+ const response = await client.updateSprintStatus(graphId, sprintId, 'active');
126
+ console.log(chalk.cyan(`▶ Sprint ${sprintId} started`));
127
+ if (response.sprint.name) {
128
+ console.log(chalk.dim(` "${response.sprint.name}"`));
129
+ }
130
+ }
131
+ catch (error) {
132
+ handleError('start', sprintId, error);
133
+ }
134
+ }
135
+ /**
136
+ * Complete sprint (active -> complete)
137
+ */
138
+ async function completeSprintCommand(sprintId, options = {}) {
139
+ const graphId = await requireGraphId();
140
+ const client = new GraphApiClient();
141
+ try {
142
+ const current = await client.getSprintStatus(graphId, sprintId);
143
+ if (current.status === 'complete') {
144
+ console.log(chalk.yellow(`Sprint ${sprintId} is already complete (no change)`));
145
+ return;
146
+ }
147
+ const response = await client.updateSprintStatus(graphId, sprintId, 'complete');
148
+ console.log(chalk.green(`✓ Sprint ${sprintId} marked complete`));
149
+ if (response.sprint.name) {
150
+ console.log(chalk.dim(` "${response.sprint.name}"`));
151
+ }
152
+ // Cascade completion check
153
+ if (options.cascade) {
154
+ const epicId = extractEpicId(sprintId);
155
+ if (epicId) {
156
+ await checkEpicCompletion(client, graphId, epicId, !!options.yes);
157
+ }
158
+ }
159
+ }
160
+ catch (error) {
161
+ handleError('complete', sprintId, error);
162
+ }
163
+ }
164
+ /**
165
+ * Pause sprint (active -> paused)
166
+ */
167
+ async function pauseSprintCommand(sprintId, options = {}) {
168
+ const graphId = await requireGraphId();
169
+ const client = new GraphApiClient();
170
+ try {
171
+ const current = await client.getSprintStatus(graphId, sprintId);
172
+ if (current.status === 'paused') {
173
+ console.log(chalk.yellow(`Sprint ${sprintId} is already paused (no change)`));
174
+ return;
175
+ }
176
+ const response = await client.updateSprintStatus(graphId, sprintId, 'paused');
177
+ console.log(chalk.yellow(`⏸ Sprint ${sprintId} paused`));
178
+ if (response.sprint.name) {
179
+ console.log(chalk.dim(` "${response.sprint.name}"`));
180
+ }
181
+ }
182
+ catch (error) {
183
+ handleError('pause', sprintId, error);
184
+ }
185
+ }
186
+ /**
187
+ * Show sprint status
188
+ */
189
+ async function showSprintCommand(sprintId, options = {}) {
190
+ const graphId = await requireGraphId();
191
+ const client = new GraphApiClient();
192
+ try {
193
+ const status = await client.getSprintStatus(graphId, sprintId);
194
+ console.log(chalk.bold(`Sprint: ${status.id}`));
195
+ console.log(`Status: ${formatStatus(status.status)}`);
196
+ }
197
+ catch (error) {
198
+ handleError('show', sprintId, error);
199
+ }
200
+ }
201
+ // =============================================================================
202
+ // Command Factory
203
+ // =============================================================================
204
+ /**
205
+ * Create sprint status subcommand group
206
+ */
207
+ export function createSprintStatusCommands() {
208
+ const status = new Command('status')
209
+ .description('Sprint status management (EPIC-015)')
210
+ .addHelpText('after', `
211
+ ${chalk.gray('Commands:')}
212
+ ${chalk.green('ginko sprint status start')} <id> ${chalk.dim('Start sprint (planned -> active)')}
213
+ ${chalk.green('ginko sprint status complete')} <id> ${chalk.dim('Complete sprint (active -> complete)')}
214
+ ${chalk.green('ginko sprint status pause')} <id> ${chalk.dim('Pause sprint (active -> paused)')}
215
+ ${chalk.green('ginko sprint status show')} <id> ${chalk.dim('Show current sprint status')}
216
+
217
+ ${chalk.gray('Shortcuts (without "status"):')}
218
+ ${chalk.green('ginko sprint start')} <id>
219
+ ${chalk.green('ginko sprint complete')} <id>
220
+ ${chalk.green('ginko sprint pause')} <id>
221
+
222
+ ${chalk.gray('Valid Sprint Statuses:')}
223
+ ${chalk.dim('planned - Sprint not yet started (default)')}
224
+ ${chalk.dim('active - Sprint in progress')}
225
+ ${chalk.dim('paused - Sprint temporarily on hold')}
226
+ ${chalk.dim('complete - Sprint finished')}
227
+ `)
228
+ .action(() => {
229
+ status.help({ error: false });
230
+ });
231
+ status
232
+ .command('start <sprintId>')
233
+ .description('Start sprint (planned -> active)')
234
+ .option('-v, --verbose', 'Show detailed output')
235
+ .action(startSprintCommand);
236
+ status
237
+ .command('complete <sprintId>')
238
+ .description('Complete sprint')
239
+ .option('--cascade', 'Auto-complete parent epic if all sprints complete')
240
+ .option('--yes', 'Skip confirmation prompts')
241
+ .option('-v, --verbose', 'Show detailed output')
242
+ .action(completeSprintCommand);
243
+ status
244
+ .command('pause <sprintId>')
245
+ .description('Pause sprint (active -> paused)')
246
+ .option('-v, --verbose', 'Show detailed output')
247
+ .action(pauseSprintCommand);
248
+ status
249
+ .command('show <sprintId>')
250
+ .description('Show sprint status')
251
+ .option('-v, --verbose', 'Show detailed output')
252
+ .action(showSprintCommand);
253
+ return status;
254
+ }
255
+ /**
256
+ * Create shortcut commands for sprint status (without "status" prefix)
257
+ */
258
+ export function addSprintStatusShortcuts(sprint) {
259
+ sprint
260
+ .command('start <sprintId>')
261
+ .description('Start sprint (shortcut for status start)')
262
+ .option('-v, --verbose', 'Show detailed output')
263
+ .action(startSprintCommand);
264
+ sprint
265
+ .command('complete <sprintId>')
266
+ .description('Complete sprint (shortcut for status complete)')
267
+ .option('--cascade', 'Auto-complete parent epic if all sprints complete')
268
+ .option('--yes', 'Skip confirmation prompts')
269
+ .option('-v, --verbose', 'Show detailed output')
270
+ .action(completeSprintCommand);
271
+ sprint
272
+ .command('pause <sprintId>')
273
+ .description('Pause sprint (shortcut for status pause)')
274
+ .option('-v, --verbose', 'Show detailed output')
275
+ .action(pauseSprintCommand);
276
+ }
277
+ export { startSprintCommand, completeSprintCommand, pauseSprintCommand, showSprintCommand, };
278
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/sprint/status.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,45 @@ export declare class StartReflectionCommand extends ReflectionCommand {
31
31
  * Handles both clean API responses and raw Neo4j node format
32
32
  */
33
33
  private convertGraphSprintToChecklist;
34
+ /**
35
+ * Load sprint state from graph API with cache fallback (EPIC-015 Sprint 2 Task 3)
36
+ *
37
+ * Data flow:
38
+ * 1. Try to fetch from graph API first
39
+ * 2. On success: save to cache for offline use
40
+ * 3. On failure: load from cache
41
+ *
42
+ * @param graphId - The graph namespace ID
43
+ * @returns Sprint data and source indicator ('graph' | 'cache' | null)
44
+ */
45
+ private loadSprintStateFromGraph;
46
+ /**
47
+ * Load sprint data from cache only (for offline fallback)
48
+ */
49
+ private loadFromCacheOnly;
50
+ /**
51
+ * Convert cached ActiveSprintData to SprintChecklist format
52
+ */
53
+ private convertCachedDataToChecklist;
54
+ /**
55
+ * Map graph API status string to TaskStatus enum
56
+ */
57
+ private mapGraphStatusToTaskStatus;
58
+ /**
59
+ * Map graph status to TaskState enum for SprintChecklist
60
+ */
61
+ private mapStatusToTaskState;
62
+ /**
63
+ * Merge graph status with local file content (EPIC-015 Sprint 2 Task 3)
64
+ *
65
+ * Graph API is authoritative for STATUS (progress, task states).
66
+ * Local file provides CONTENT (descriptions, acceptance criteria, ADRs).
67
+ *
68
+ * @param graphData - Status data from graph API (or cache)
69
+ * @param fileContent - Content from local sprint file
70
+ * @returns Merged SprintChecklist with graph status + file content
71
+ */
72
+ private mergeGraphStatusWithContent;
34
73
  /**
35
74
  * Override execute to process handoff and display session info
36
75
  */
@@ -1 +1 @@
1
- {"version":3,"file":"start-reflection.d.ts","sourceRoot":"","sources":["../../../src/commands/start/start-reflection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAqDrE;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,OAAO,CAAC,cAAc,CAAuB;;IAQ7C;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;OAGG;YACW,kBAAkB;IAmChC;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IA8ErC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6V/D;;;;;OAKG;YACW,kBAAkB;IA6VhC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC;IA+BlC;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAsDlF;;OAEG;YACW,WAAW;IAuBzB;;OAEG;YACW,0BAA0B;IA2DxC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;YACW,aAAa;IAM3B;;OAEG;YACW,iBAAiB;IAU/B;;OAEG;YACW,WAAW;IAKzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA6BpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4CzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;OAEG;IACG,aAAa,CAAC,YAAY,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAmCpD;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAC,CAI1B;IAEF;;;;;OAKG;YACW,iBAAiB;IAwI/B;;;;;OAKG;YACW,cAAc;IAiJ5B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;;OAIG;YACW,cAAc;IAa5B;;OAEG;YACW,oBAAoB;IAuBlC;;;;;OAKG;YACW,kBAAkB;IA0BhC;;;;OAIG;YACW,oBAAoB;CAsDnC;AAGD,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"start-reflection.d.ts","sourceRoot":"","sources":["../../../src/commands/start/start-reflection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAmErE;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,OAAO,CAAC,cAAc,CAAuB;;IAQ7C;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;OAGG;YACW,kBAAkB;IAmChC;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IA8ErC;;;;;;;;;;OAUG;YACW,wBAAwB;IA4DtC;;OAEG;YACW,iBAAiB;IAiB/B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAoCpC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAalC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;;;;;;;OASG;IACH,OAAO,CAAC,2BAA2B;IAuDnC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAwX/D;;;;;OAKG;YACW,kBAAkB;IA6VhC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC;IA+BlC;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAsDlF;;OAEG;YACW,WAAW;IAuBzB;;OAEG;YACW,0BAA0B;IA2DxC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;YACW,aAAa;IAM3B;;OAEG;YACW,iBAAiB;IAU/B;;OAEG;YACW,WAAW;IAKzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA6BpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4CzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;OAEG;IACG,aAAa,CAAC,YAAY,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAmCpD;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAC,CAI1B;IAEF;;;;;OAKG;YACW,iBAAiB;IAwI/B;;;;;OAKG;YACW,cAAc;IA0J5B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;;;OAIG;YACW,cAAc;IAa5B;;OAEG;YACW,oBAAoB;IAuBlC;;;;;OAKG;YACW,kBAAkB;IA0BhC;;;;OAIG;YACW,oBAAoB;CAsDnC;AAGD,eAAe,sBAAsB,CAAC"}