@ginkoai/cli 2.0.6 → 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.
- package/dist/commands/epic/index.d.ts +29 -0
- package/dist/commands/epic/index.d.ts.map +1 -0
- package/dist/commands/epic/index.js +94 -0
- package/dist/commands/epic/index.js.map +1 -0
- package/dist/commands/epic/status.d.ts +40 -0
- package/dist/commands/epic/status.d.ts.map +1 -0
- package/dist/commands/epic/status.js +244 -0
- package/dist/commands/epic/status.js.map +1 -0
- package/dist/commands/graph/api-client.d.ts +209 -0
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js +125 -0
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/graph/load.d.ts.map +1 -1
- package/dist/commands/graph/load.js +40 -2
- package/dist/commands/graph/load.js.map +1 -1
- package/dist/commands/migrate/index.d.ts +27 -0
- package/dist/commands/migrate/index.d.ts.map +1 -0
- package/dist/commands/migrate/index.js +76 -0
- package/dist/commands/migrate/index.js.map +1 -0
- package/dist/commands/migrate/status-migration.d.ts +58 -0
- package/dist/commands/migrate/status-migration.d.ts.map +1 -0
- package/dist/commands/migrate/status-migration.js +323 -0
- package/dist/commands/migrate/status-migration.js.map +1 -0
- package/dist/commands/sprint/index.d.ts.map +1 -1
- package/dist/commands/sprint/index.js +4 -0
- package/dist/commands/sprint/index.js.map +1 -1
- package/dist/commands/sprint/status.d.ts +42 -0
- package/dist/commands/sprint/status.d.ts.map +1 -0
- package/dist/commands/sprint/status.js +278 -0
- package/dist/commands/sprint/status.js.map +1 -0
- package/dist/commands/start/start-reflection.d.ts +39 -0
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +292 -70
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/sync/sprint-syncer.d.ts +19 -12
- package/dist/commands/sync/sprint-syncer.d.ts.map +1 -1
- package/dist/commands/sync/sprint-syncer.js +58 -140
- package/dist/commands/sync/sprint-syncer.js.map +1 -1
- package/dist/commands/sync/sync-command.d.ts.map +1 -1
- package/dist/commands/sync/sync-command.js +6 -18
- package/dist/commands/sync/sync-command.js.map +1 -1
- package/dist/commands/task/index.d.ts +25 -0
- package/dist/commands/task/index.d.ts.map +1 -0
- package/dist/commands/task/index.js +100 -0
- package/dist/commands/task/index.js.map +1 -0
- package/dist/commands/task/status.d.ts +43 -0
- package/dist/commands/task/status.d.ts.map +1 -0
- package/dist/commands/task/status.js +301 -0
- package/dist/commands/task/status.js.map +1 -0
- package/dist/index.js +11 -29
- package/dist/index.js.map +1 -1
- package/dist/lib/context-loader-events.d.ts.map +1 -1
- package/dist/lib/context-loader-events.js +7 -26
- package/dist/lib/context-loader-events.js.map +1 -1
- package/dist/lib/output-formatter.d.ts +8 -2
- package/dist/lib/output-formatter.d.ts.map +1 -1
- package/dist/lib/output-formatter.js +98 -18
- package/dist/lib/output-formatter.js.map +1 -1
- package/dist/lib/pending-updates.d.ts +148 -0
- package/dist/lib/pending-updates.d.ts.map +1 -0
- package/dist/lib/pending-updates.js +301 -0
- package/dist/lib/pending-updates.js.map +1 -0
- package/dist/lib/sprint-loader.d.ts +86 -14
- package/dist/lib/sprint-loader.d.ts.map +1 -1
- package/dist/lib/sprint-loader.js +293 -98
- package/dist/lib/sprint-loader.js.map +1 -1
- package/dist/lib/state-cache.d.ts +142 -0
- package/dist/lib/state-cache.d.ts.map +1 -0
- package/dist/lib/state-cache.js +259 -0
- package/dist/lib/state-cache.js.map +1 -0
- package/dist/lib/task-graph-sync.d.ts +105 -0
- package/dist/lib/task-graph-sync.d.ts.map +1 -0
- package/dist/lib/task-graph-sync.js +178 -0
- package/dist/lib/task-graph-sync.js.map +1 -0
- package/dist/lib/task-parser.d.ts +107 -0
- package/dist/lib/task-parser.d.ts.map +1 -0
- package/dist/lib/task-parser.js +384 -0
- package/dist/lib/task-parser.js.map +1 -0
- package/dist/templates/ai-instructions-template.d.ts.map +1 -1
- package/dist/templates/ai-instructions-template.js +7 -5
- package/dist/templates/ai-instructions-template.js.map +1 -1
- package/dist/templates/epic-template.md +0 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +7 -5
- package/dist/types/config.js.map +1 -1
- package/dist/utils/synthesis.d.ts +4 -0
- package/dist/utils/synthesis.d.ts.map +1 -1
- package/dist/utils/synthesis.js +12 -18
- package/dist/utils/synthesis.js.map +1 -1
- 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;
|
|
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"}
|