@ginkoai/cli 2.0.2 → 2.0.4

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 (59) hide show
  1. package/dist/commands/epic.d.ts +4 -4
  2. package/dist/commands/epic.d.ts.map +1 -1
  3. package/dist/commands/epic.js +68 -6
  4. package/dist/commands/epic.js.map +1 -1
  5. package/dist/commands/graph/api-client.d.ts +14 -1
  6. package/dist/commands/graph/api-client.d.ts.map +1 -1
  7. package/dist/commands/graph/api-client.js.map +1 -1
  8. package/dist/commands/graph/explore.d.ts.map +1 -1
  9. package/dist/commands/graph/explore.js +27 -1
  10. package/dist/commands/graph/explore.js.map +1 -1
  11. package/dist/commands/graph/index.d.ts +3 -3
  12. package/dist/commands/graph/index.d.ts.map +1 -1
  13. package/dist/commands/graph/index.js +39 -3
  14. package/dist/commands/graph/index.js.map +1 -1
  15. package/dist/commands/graph/load.d.ts.map +1 -1
  16. package/dist/commands/graph/load.js +10 -1
  17. package/dist/commands/graph/load.js.map +1 -1
  18. package/dist/commands/graph/migrations/009-epic-roadmap-properties.d.ts +41 -0
  19. package/dist/commands/graph/migrations/009-epic-roadmap-properties.d.ts.map +1 -0
  20. package/dist/commands/graph/migrations/009-epic-roadmap-properties.js +90 -0
  21. package/dist/commands/graph/migrations/009-epic-roadmap-properties.js.map +1 -0
  22. package/dist/commands/graph/migrations/010-epic-graph-id.d.ts +30 -0
  23. package/dist/commands/graph/migrations/010-epic-graph-id.d.ts.map +1 -0
  24. package/dist/commands/graph/migrations/010-epic-graph-id.js +67 -0
  25. package/dist/commands/graph/migrations/010-epic-graph-id.js.map +1 -0
  26. package/dist/commands/graph/migrations/011-sprint-epic-id.d.ts +32 -0
  27. package/dist/commands/graph/migrations/011-sprint-epic-id.d.ts.map +1 -0
  28. package/dist/commands/graph/migrations/011-sprint-epic-id.js +71 -0
  29. package/dist/commands/graph/migrations/011-sprint-epic-id.js.map +1 -0
  30. package/dist/commands/roadmap/index.d.ts +27 -0
  31. package/dist/commands/roadmap/index.d.ts.map +1 -0
  32. package/dist/commands/roadmap/index.js +208 -0
  33. package/dist/commands/roadmap/index.js.map +1 -0
  34. package/dist/commands/start/start-reflection.d.ts +4 -2
  35. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  36. package/dist/commands/start/start-reflection.js +124 -60
  37. package/dist/commands/start/start-reflection.js.map +1 -1
  38. package/dist/commands/sync/sprint-syncer.d.ts.map +1 -1
  39. package/dist/commands/sync/sprint-syncer.js +8 -0
  40. package/dist/commands/sync/sprint-syncer.js.map +1 -1
  41. package/dist/index.js +6 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/lib/output-formatter.d.ts +90 -0
  44. package/dist/lib/output-formatter.d.ts.map +1 -1
  45. package/dist/lib/output-formatter.js +244 -0
  46. package/dist/lib/output-formatter.js.map +1 -1
  47. package/dist/lib/roadmap/changelog-inference.d.ts +84 -0
  48. package/dist/lib/roadmap/changelog-inference.d.ts.map +1 -0
  49. package/dist/lib/roadmap/changelog-inference.js +163 -0
  50. package/dist/lib/roadmap/changelog-inference.js.map +1 -0
  51. package/dist/lib/sprint-loader.d.ts +25 -1
  52. package/dist/lib/sprint-loader.d.ts.map +1 -1
  53. package/dist/lib/sprint-loader.js +196 -2
  54. package/dist/lib/sprint-loader.js.map +1 -1
  55. package/dist/lib/user-sprint.d.ts +59 -0
  56. package/dist/lib/user-sprint.d.ts.map +1 -0
  57. package/dist/lib/user-sprint.js +147 -0
  58. package/dist/lib/user-sprint.js.map +1 -0
  59. package/package.json +1 -1
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-09
5
+ * @tags: [migration, epic, roadmap, graph, ADR-056]
6
+ * @related: [../api-client.ts, ADR-056]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [chalk]
10
+ */
11
+ export interface MigrationOptions {
12
+ dryRun?: boolean;
13
+ verbose?: boolean;
14
+ }
15
+ export interface MigrationResult {
16
+ success: boolean;
17
+ migratedCount: number;
18
+ skippedCount: number;
19
+ errors: string[];
20
+ dryRun: boolean;
21
+ }
22
+ /**
23
+ * Migration 009: Add roadmap properties to all Epic nodes
24
+ *
25
+ * This migration adds the following properties to Epic nodes:
26
+ * - commitment_status: 'uncommitted' (default)
27
+ * - roadmap_status: 'not_started' (default)
28
+ * - roadmap_visible: true (default)
29
+ * - changelog: [] (empty array, initialized)
30
+ *
31
+ * Epics that already have these properties will be skipped.
32
+ *
33
+ * @param options Migration options
34
+ * @returns Migration result
35
+ */
36
+ export declare function runMigration009(options?: MigrationOptions): Promise<MigrationResult>;
37
+ /**
38
+ * CLI entry point for migration 009
39
+ */
40
+ export declare function migrate009Command(options?: MigrationOptions): Promise<void>;
41
+ //# sourceMappingURL=009-epic-roadmap-properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"009-epic-roadmap-properties.d.ts","sourceRoot":"","sources":["../../../../src/commands/graph/migrations/009-epic-roadmap-properties.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAaD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgE9F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrF"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-09
5
+ * @tags: [migration, epic, roadmap, graph, ADR-056]
6
+ * @related: [../api-client.ts, ADR-056]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [chalk]
10
+ */
11
+ import chalk from 'chalk';
12
+ import { GraphApiClient } from '../api-client.js';
13
+ /**
14
+ * Migration 009: Add roadmap properties to all Epic nodes
15
+ *
16
+ * This migration adds the following properties to Epic nodes:
17
+ * - commitment_status: 'uncommitted' (default)
18
+ * - roadmap_status: 'not_started' (default)
19
+ * - roadmap_visible: true (default)
20
+ * - changelog: [] (empty array, initialized)
21
+ *
22
+ * Epics that already have these properties will be skipped.
23
+ *
24
+ * @param options Migration options
25
+ * @returns Migration result
26
+ */
27
+ export async function runMigration009(options = {}) {
28
+ const { dryRun = false, verbose = false } = options;
29
+ const client = new GraphApiClient();
30
+ console.log(chalk.blue('\n🔄 Migration 009: Epic Roadmap Properties'));
31
+ console.log(chalk.dim(' Adding roadmap properties to Epic nodes (ADR-056)\n'));
32
+ if (dryRun) {
33
+ console.log(chalk.yellow(' 📋 DRY RUN MODE - No changes will be made\n'));
34
+ }
35
+ try {
36
+ // Call the migration API endpoint
37
+ const endpoint = dryRun
38
+ ? '/api/v1/migrations/009-epic-roadmap?dryRun=true'
39
+ : '/api/v1/migrations/009-epic-roadmap';
40
+ const response = await client.request('POST', endpoint);
41
+ // Display results
42
+ if (verbose && response.details) {
43
+ console.log(chalk.dim('\n Details:'));
44
+ for (const detail of response.details) {
45
+ const icon = detail.status === 'migrated' ? '✓' :
46
+ detail.status === 'skipped' ? '○' : '✗';
47
+ const color = detail.status === 'migrated' ? chalk.green :
48
+ detail.status === 'skipped' ? chalk.dim : chalk.red;
49
+ console.log(color(` ${icon} ${detail.epic_id}: ${detail.message || detail.status}`));
50
+ }
51
+ }
52
+ console.log(chalk.green(`\n✓ Migration complete`));
53
+ console.log(chalk.dim(` Migrated: ${response.migrated}`));
54
+ console.log(chalk.dim(` Skipped: ${response.skipped}`));
55
+ if (response.errors.length > 0) {
56
+ console.log(chalk.red(` Errors: ${response.errors.length}`));
57
+ for (const error of response.errors) {
58
+ console.log(chalk.red(` - ${error}`));
59
+ }
60
+ }
61
+ return {
62
+ success: response.errors.length === 0,
63
+ migratedCount: response.migrated,
64
+ skippedCount: response.skipped,
65
+ errors: response.errors,
66
+ dryRun,
67
+ };
68
+ }
69
+ catch (error) {
70
+ const message = error instanceof Error ? error.message : String(error);
71
+ console.log(chalk.red(`\n✗ Migration failed: ${message}`));
72
+ return {
73
+ success: false,
74
+ migratedCount: 0,
75
+ skippedCount: 0,
76
+ errors: [message],
77
+ dryRun,
78
+ };
79
+ }
80
+ }
81
+ /**
82
+ * CLI entry point for migration 009
83
+ */
84
+ export async function migrate009Command(options = {}) {
85
+ const result = await runMigration009(options);
86
+ if (!result.success) {
87
+ process.exit(1);
88
+ }
89
+ }
90
+ //# sourceMappingURL=009-epic-roadmap-properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"009-epic-roadmap-properties.js","sourceRoot":"","sources":["../../../../src/commands/graph/migrations/009-epic-roadmap-properties.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA8BlD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA4B,EAAE;IAClE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;IAEjF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,QAAQ,GAAG,MAAM;YACrB,CAAC,CAAC,iDAAiD;YACnD,CAAC,CAAC,qCAAqC,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC,MAAM,EACN,QAAQ,CACT,CAAC;QAEF,kBAAkB;QAClB,IAAI,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;YACxC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACrD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC5C,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3D,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YACrC,aAAa,EAAE,QAAQ,CAAC,QAAQ;YAChC,YAAY,EAAE,QAAQ,CAAC,OAAO;YAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,MAAM;SACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC,OAAO,CAAC;YACjB,MAAM;SACP,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAA4B,EAAE;IACpE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-14
5
+ * @tags: [migration, epic, graph_id, EPIC-011]
6
+ * @related: [../api-client.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: [chalk]
10
+ */
11
+ export interface MigrationOptions {
12
+ dryRun?: boolean;
13
+ verbose?: boolean;
14
+ }
15
+ export interface MigrationResult {
16
+ success: boolean;
17
+ migratedCount: number;
18
+ skippedCount: number;
19
+ errors: string[];
20
+ dryRun: boolean;
21
+ }
22
+ /**
23
+ * Migration 010: Add graph_id to Epic nodes
24
+ *
25
+ * Adds graph_id (snake_case) to Epic nodes that only have graphId (camelCase).
26
+ * This ensures consistency with other node types and fixes nodes API filtering.
27
+ */
28
+ export declare function runMigration010(options?: MigrationOptions): Promise<MigrationResult>;
29
+ export declare function migrate010Command(options?: MigrationOptions): Promise<void>;
30
+ //# sourceMappingURL=010-epic-graph-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"010-epic-graph-id.d.ts","sourceRoot":"","sources":["../../../../src/commands/graph/migrations/010-epic-graph-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAQD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgD9F;AAED,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKrF"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-14
5
+ * @tags: [migration, epic, graph_id, EPIC-011]
6
+ * @related: [../api-client.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: [chalk]
10
+ */
11
+ import chalk from 'chalk';
12
+ import { GraphApiClient } from '../api-client.js';
13
+ /**
14
+ * Migration 010: Add graph_id to Epic nodes
15
+ *
16
+ * Adds graph_id (snake_case) to Epic nodes that only have graphId (camelCase).
17
+ * This ensures consistency with other node types and fixes nodes API filtering.
18
+ */
19
+ export async function runMigration010(options = {}) {
20
+ const { dryRun = false, verbose = false } = options;
21
+ const client = new GraphApiClient();
22
+ console.log(chalk.blue('\n🔄 Migration 010: Epic graph_id Property'));
23
+ console.log(chalk.dim(' Adding graph_id to Epic nodes for API consistency (EPIC-011)\n'));
24
+ if (dryRun) {
25
+ console.log(chalk.yellow(' 📋 DRY RUN MODE - No changes will be made\n'));
26
+ }
27
+ try {
28
+ const endpoint = dryRun
29
+ ? '/api/v1/migrations/010-epic-graph-id?dryRun=true'
30
+ : '/api/v1/migrations/010-epic-graph-id';
31
+ const response = await client.request('POST', endpoint);
32
+ console.log(chalk.green(`\n✓ Migration complete`));
33
+ console.log(chalk.dim(` Migrated: ${response.migrated}`));
34
+ console.log(chalk.dim(` Skipped: ${response.skipped}`));
35
+ if (response.errors.length > 0) {
36
+ console.log(chalk.red(` Errors: ${response.errors.length}`));
37
+ for (const error of response.errors) {
38
+ console.log(chalk.red(` - ${error}`));
39
+ }
40
+ }
41
+ return {
42
+ success: response.errors.length === 0,
43
+ migratedCount: response.migrated,
44
+ skippedCount: response.skipped,
45
+ errors: response.errors,
46
+ dryRun,
47
+ };
48
+ }
49
+ catch (error) {
50
+ const message = error instanceof Error ? error.message : String(error);
51
+ console.log(chalk.red(`\n✗ Migration failed: ${message}`));
52
+ return {
53
+ success: false,
54
+ migratedCount: 0,
55
+ skippedCount: 0,
56
+ errors: [message],
57
+ dryRun,
58
+ };
59
+ }
60
+ }
61
+ export async function migrate010Command(options = {}) {
62
+ const result = await runMigration010(options);
63
+ if (!result.success) {
64
+ process.exit(1);
65
+ }
66
+ }
67
+ //# sourceMappingURL=010-epic-graph-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"010-epic-graph-id.js","sourceRoot":"","sources":["../../../../src/commands/graph/migrations/010-epic-graph-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAqBlD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA4B,EAAE;IAClE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC,CAAC;IAE5F,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM;YACrB,CAAC,CAAC,kDAAkD;YACpD,CAAC,CAAC,sCAAsC,CAAC;QAE3C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAsB,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3D,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YACrC,aAAa,EAAE,QAAQ,CAAC,QAAQ;YAChC,YAAY,EAAE,QAAQ,CAAC,OAAO;YAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,MAAM;SACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC,OAAO,CAAC;YACjB,MAAM;SACP,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAA4B,EAAE;IACpE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-14
5
+ * @tags: [migration, sprint, task, epic_id, EPIC-011]
6
+ * @related: [../api-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [chalk]
10
+ */
11
+ export interface MigrationOptions {
12
+ dryRun?: boolean;
13
+ verbose?: boolean;
14
+ }
15
+ export interface MigrationResult {
16
+ success: boolean;
17
+ sprintsMigrated: number;
18
+ tasksMigrated: number;
19
+ errors: string[];
20
+ dryRun: boolean;
21
+ }
22
+ /**
23
+ * Migration 011: Add epic_id and graph_id to Sprint and Task nodes
24
+ *
25
+ * This migration:
26
+ * 1. Adds graph_id (snake_case) to Sprint/Task nodes
27
+ * 2. Extracts epic_id from Sprint ID (e{NNN}_s{NN} → EPIC-{N})
28
+ * 3. Adds epic_id to Task nodes based on parent Sprint
29
+ */
30
+ export declare function runMigration011(options?: MigrationOptions): Promise<MigrationResult>;
31
+ export declare function migrate011Command(options?: MigrationOptions): Promise<void>;
32
+ //# sourceMappingURL=011-sprint-epic-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"011-sprint-epic-id.d.ts","sourceRoot":"","sources":["../../../../src/commands/graph/migrations/011-sprint-epic-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAUD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAkD9F;AAED,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKrF"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-14
5
+ * @tags: [migration, sprint, task, epic_id, EPIC-011]
6
+ * @related: [../api-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [chalk]
10
+ */
11
+ import chalk from 'chalk';
12
+ import { GraphApiClient } from '../api-client.js';
13
+ /**
14
+ * Migration 011: Add epic_id and graph_id to Sprint and Task nodes
15
+ *
16
+ * This migration:
17
+ * 1. Adds graph_id (snake_case) to Sprint/Task nodes
18
+ * 2. Extracts epic_id from Sprint ID (e{NNN}_s{NN} → EPIC-{N})
19
+ * 3. Adds epic_id to Task nodes based on parent Sprint
20
+ */
21
+ export async function runMigration011(options = {}) {
22
+ const { dryRun = false, verbose = false } = options;
23
+ const client = new GraphApiClient();
24
+ console.log(chalk.blue('\n🔄 Migration 011: Sprint & Task Hierarchy Properties'));
25
+ console.log(chalk.dim(' Adding epic_id and graph_id to Sprint and Task nodes (EPIC-011)\n'));
26
+ if (dryRun) {
27
+ console.log(chalk.yellow(' 📋 DRY RUN MODE - No changes will be made\n'));
28
+ }
29
+ try {
30
+ const endpoint = dryRun
31
+ ? '/api/v1/migrations/011-sprint-epic-id?dryRun=true'
32
+ : '/api/v1/migrations/011-sprint-epic-id';
33
+ const response = await client.request('POST', endpoint);
34
+ console.log(chalk.green(`\n✓ Migration complete`));
35
+ console.log(chalk.dim(` Sprints migrated: ${response.sprintsMigrated}`));
36
+ console.log(chalk.dim(` Sprints skipped: ${response.sprintsSkipped}`));
37
+ console.log(chalk.dim(` Tasks migrated: ${response.tasksMigrated}`));
38
+ console.log(chalk.dim(` Tasks skipped: ${response.tasksSkipped}`));
39
+ if (response.errors.length > 0) {
40
+ console.log(chalk.red(` Errors: ${response.errors.length}`));
41
+ for (const error of response.errors) {
42
+ console.log(chalk.red(` - ${error}`));
43
+ }
44
+ }
45
+ return {
46
+ success: response.errors.length === 0,
47
+ sprintsMigrated: response.sprintsMigrated,
48
+ tasksMigrated: response.tasksMigrated,
49
+ errors: response.errors,
50
+ dryRun,
51
+ };
52
+ }
53
+ catch (error) {
54
+ const message = error instanceof Error ? error.message : String(error);
55
+ console.log(chalk.red(`\n✗ Migration failed: ${message}`));
56
+ return {
57
+ success: false,
58
+ sprintsMigrated: 0,
59
+ tasksMigrated: 0,
60
+ errors: [message],
61
+ dryRun,
62
+ };
63
+ }
64
+ }
65
+ export async function migrate011Command(options = {}) {
66
+ const result = await runMigration011(options);
67
+ if (!result.success) {
68
+ process.exit(1);
69
+ }
70
+ }
71
+ //# sourceMappingURL=011-sprint-epic-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"011-sprint-epic-id.js","sourceRoot":"","sources":["../../../../src/commands/graph/migrations/011-sprint-epic-id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-11
5
+ * @tags: [roadmap, cli, epic, product-management, ADR-056, now-next-later]
6
+ * @related: [../graph/api-client.ts, ADR-056]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk]
10
+ */
11
+ import { Command } from 'commander';
12
+ interface RoadmapOptions {
13
+ all?: boolean;
14
+ lane?: string;
15
+ status?: string;
16
+ json?: boolean;
17
+ }
18
+ /**
19
+ * Main roadmap command
20
+ */
21
+ export declare function roadmapAction(options: RoadmapOptions): Promise<void>;
22
+ /**
23
+ * Create the roadmap command
24
+ */
25
+ export declare function roadmapCommand(): Command;
26
+ export {};
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/roadmap/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAmID;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC1E;AAED;;GAEG;AACH,wBAAgB,cAAc,YAgC7B"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-11
5
+ * @tags: [roadmap, cli, epic, product-management, ADR-056, now-next-later]
6
+ * @related: [../graph/api-client.ts, ADR-056]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk]
10
+ */
11
+ import { Command } from 'commander';
12
+ import chalk from 'chalk';
13
+ import { GraphApiClient } from '../graph/api-client.js';
14
+ import { loadGraphConfig } from '../graph/config.js';
15
+ /**
16
+ * Get status icon based on roadmap_status
17
+ */
18
+ function getStatusIcon(status) {
19
+ switch (status) {
20
+ case 'not_started':
21
+ return chalk.gray('○');
22
+ case 'in_progress':
23
+ return chalk.blue('◐');
24
+ case 'completed':
25
+ return chalk.green('●');
26
+ case 'cancelled':
27
+ return chalk.red('✗');
28
+ default:
29
+ return chalk.gray('?');
30
+ }
31
+ }
32
+ /**
33
+ * Get lane header with icon
34
+ */
35
+ function getLaneHeader(lane, count) {
36
+ switch (lane) {
37
+ case 'now':
38
+ return chalk.green(`⚡ Now`) + chalk.dim(` (${count})`);
39
+ case 'next':
40
+ return chalk.cyan(`📋 Next`) + chalk.dim(` (${count})`);
41
+ case 'later':
42
+ return chalk.yellow(`💭 Later`) + chalk.dim(` (${count})`);
43
+ case 'done':
44
+ return chalk.gray(`✓ Done`) + chalk.dim(` (${count})`);
45
+ case 'dropped':
46
+ return chalk.red(`✗ Dropped`) + chalk.dim(` (${count})`);
47
+ }
48
+ }
49
+ /**
50
+ * Format decision factors as tags
51
+ */
52
+ function formatDecisionFactors(factors) {
53
+ if (!factors || factors.length === 0)
54
+ return '';
55
+ return chalk.dim(`[${factors.slice(0, 2).join(', ')}]`);
56
+ }
57
+ /**
58
+ * Display roadmap in CLI format
59
+ */
60
+ function displayRoadmap(response, options) {
61
+ const { lanes, summary } = response;
62
+ // Header
63
+ console.log(chalk.bold('\n🗺️ Product Roadmap\n'));
64
+ // Summary line
65
+ const summaryParts = [];
66
+ if (summary.byLane.now > 0) {
67
+ summaryParts.push(chalk.green(`${summary.byLane.now} now`));
68
+ }
69
+ if (summary.byLane.next > 0) {
70
+ summaryParts.push(chalk.cyan(`${summary.byLane.next} next`));
71
+ }
72
+ if (options.all && summary.byLane.later > 0) {
73
+ summaryParts.push(chalk.yellow(`${summary.byLane.later} later`));
74
+ }
75
+ if (options.all && summary.byLane.done > 0) {
76
+ summaryParts.push(chalk.gray(`${summary.byLane.done} done`));
77
+ }
78
+ if (options.all && summary.byLane.dropped > 0) {
79
+ summaryParts.push(chalk.red(`${summary.byLane.dropped} dropped`));
80
+ }
81
+ if (summary.byStatus.in_progress) {
82
+ summaryParts.push(chalk.blue(`${summary.byStatus.in_progress} in progress`));
83
+ }
84
+ if (summaryParts.length > 0) {
85
+ console.log(chalk.dim(` ${summaryParts.join(' · ')}\n`));
86
+ }
87
+ // Check if empty
88
+ const hasContent = lanes.some(l => l.epics.length > 0);
89
+ if (!hasContent) {
90
+ console.log(chalk.yellow(' No epics found on the roadmap.\n'));
91
+ console.log(chalk.dim(' Tip: Run `ginko roadmap --all` to include Later items.'));
92
+ return;
93
+ }
94
+ // Display each lane
95
+ for (const laneGroup of lanes) {
96
+ if (laneGroup.epics.length === 0)
97
+ continue;
98
+ console.log(getLaneHeader(laneGroup.lane, laneGroup.epics.length));
99
+ console.log(chalk.dim(' ' + '─'.repeat(50)));
100
+ for (const epic of laneGroup.epics) {
101
+ const icon = getStatusIcon(epic.roadmap_status);
102
+ const title = epic.title;
103
+ const id = chalk.dim(`(${epic.id})`);
104
+ // Build extra info
105
+ const extras = [];
106
+ // Show decision factors for Later items
107
+ if (laneGroup.lane === 'later' && epic.decision_factors) {
108
+ extras.push(formatDecisionFactors(epic.decision_factors));
109
+ }
110
+ // Show tags if present
111
+ if (epic.tags && epic.tags.length > 0) {
112
+ extras.push(chalk.dim(epic.tags.slice(0, 2).join(', ')));
113
+ }
114
+ console.log(` ${icon} ${title} ${id}${extras.length ? ' ' + extras.join(' ') : ''}`);
115
+ }
116
+ console.log('');
117
+ }
118
+ // Footer - show hidden counts
119
+ if (!options.all) {
120
+ const hiddenCounts = [];
121
+ if (summary.byLane.later > 0)
122
+ hiddenCounts.push(`${summary.byLane.later} later`);
123
+ if (summary.byLane.done > 0)
124
+ hiddenCounts.push(`${summary.byLane.done} done`);
125
+ if (summary.byLane.dropped > 0)
126
+ hiddenCounts.push(`${summary.byLane.dropped} dropped`);
127
+ if (hiddenCounts.length > 0) {
128
+ console.log(chalk.dim(` ${hiddenCounts.join(', ')} hidden. Use --all to show.`));
129
+ }
130
+ }
131
+ console.log(chalk.dim(' Tip: Use --lane or --status to filter'));
132
+ }
133
+ /**
134
+ * Main roadmap command
135
+ */
136
+ export async function roadmapAction(options) {
137
+ try {
138
+ // Get graph config
139
+ const config = await loadGraphConfig();
140
+ if (!config || !config.graphId) {
141
+ console.log(chalk.red('\n✗ Graph not initialized. Run `ginko graph init` first.\n'));
142
+ process.exit(1);
143
+ }
144
+ // Build query params
145
+ const params = new URLSearchParams();
146
+ params.set('graphId', config.graphId);
147
+ if (options.all) {
148
+ params.set('all', 'true');
149
+ }
150
+ if (options.lane) {
151
+ params.set('lane', options.lane);
152
+ }
153
+ if (options.status) {
154
+ params.set('status', options.status);
155
+ }
156
+ // Call the API
157
+ const client = new GraphApiClient();
158
+ const response = await client.request('GET', `/api/v1/graph/roadmap?${params.toString()}`);
159
+ // Output
160
+ if (options.json) {
161
+ console.log(JSON.stringify(response, null, 2));
162
+ }
163
+ else {
164
+ displayRoadmap(response, options);
165
+ }
166
+ }
167
+ catch (error) {
168
+ const message = error instanceof Error ? error.message : String(error);
169
+ console.log(chalk.red(`\n✗ Failed to load roadmap: ${message}\n`));
170
+ process.exit(1);
171
+ }
172
+ }
173
+ /**
174
+ * Create the roadmap command
175
+ */
176
+ export function roadmapCommand() {
177
+ const roadmap = new Command('roadmap')
178
+ .description('View product roadmap (Now/Next/Later priority lanes)')
179
+ .option('-a, --all', 'Include Later, Done, and Dropped items')
180
+ .option('-l, --lane <lane>', 'Filter by lane (now, next, later, done, dropped)')
181
+ .option('-s, --status <status>', 'Filter by status (not_started, in_progress, completed, cancelled)')
182
+ .option('--json', 'Output as JSON')
183
+ .addHelpText('after', `
184
+ ${chalk.gray('Lanes (ADR-056):')}
185
+ ${chalk.green('⚡ Now')} Fully planned, committed, ready for implementation
186
+ ${chalk.cyan('📋 Next')} Committed but may need additional planning
187
+ ${chalk.yellow('💭 Later')} Proposed but not yet committed (has decision factors)
188
+ ${chalk.gray('✓ Done')} Completed work (hidden by default)
189
+ ${chalk.red('✗ Dropped')} Cancelled/abandoned work (hidden by default)
190
+
191
+ ${chalk.gray('Examples:')}
192
+ ${chalk.green('ginko roadmap')} ${chalk.gray('# Show Now and Next lanes')}
193
+ ${chalk.green('ginko roadmap --all')} ${chalk.gray('# Include Later, Done, Dropped')}
194
+ ${chalk.green('ginko roadmap --lane now')} ${chalk.gray('# Show only Now lane')}
195
+ ${chalk.green('ginko roadmap --lane done')} ${chalk.gray('# Show completed work')}
196
+ ${chalk.green('ginko roadmap --status in_progress')} ${chalk.gray('# Show only in-progress epics')}
197
+
198
+ ${chalk.gray('Status Icons:')}
199
+ ${chalk.gray('○')} not_started ${chalk.blue('◐')} in_progress
200
+ ${chalk.green('●')} completed ${chalk.red('✗')} cancelled
201
+
202
+ ${chalk.gray('Decision Factors (for Later items):')}
203
+ planning, value, feasibility, architecture, design, risks, market-fit, dependencies
204
+ `)
205
+ .action(roadmapAction);
206
+ return roadmap;
207
+ }
208
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/roadmap/index.ts"],"names":[],"mappings":"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"}
@@ -115,8 +115,10 @@ export declare class StartReflectionCommand extends ReflectionCommand {
115
115
  /**
116
116
  * Display concise human output (TASK-11)
117
117
  *
118
- * Shows only essential info for instant productivity (6-8 lines).
119
- * Used with --concise flag.
118
+ * Now uses table view by default (EPIC-012 Sprint 1).
119
+ * - Default: Table view with branding
120
+ * - --compact: Previous concise format without borders
121
+ * - --no-table: Plain text format for piping
120
122
  */
121
123
  private displayConciseOutput;
122
124
  /**
@@ -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;AAqCrE;;;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;IA0R/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;IA+I5B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;;;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;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;IA0V/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"}