centy 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/commands/create/item-type.d.ts +20 -0
  2. package/dist/commands/create/item-type.d.ts.map +1 -0
  3. package/dist/commands/create/item-type.js +90 -0
  4. package/dist/commands/create/item-type.js.map +1 -0
  5. package/dist/commands/init.d.ts +0 -1
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +0 -4
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/link.d.ts +19 -0
  10. package/dist/commands/link.d.ts.map +1 -0
  11. package/dist/commands/link.js +74 -0
  12. package/dist/commands/link.js.map +1 -0
  13. package/dist/commands/links.d.ts +18 -0
  14. package/dist/commands/links.d.ts.map +1 -0
  15. package/dist/commands/links.js +70 -0
  16. package/dist/commands/links.js.map +1 -0
  17. package/dist/commands/list/link-types.d.ts +14 -0
  18. package/dist/commands/list/link-types.d.ts.map +1 -0
  19. package/dist/commands/list/link-types.js +59 -0
  20. package/dist/commands/list/link-types.js.map +1 -0
  21. package/dist/commands/unlink.d.ts +19 -0
  22. package/dist/commands/unlink.d.ts.map +1 -0
  23. package/dist/commands/unlink.js +73 -0
  24. package/dist/commands/unlink.js.map +1 -0
  25. package/dist/commands/version.d.ts +13 -0
  26. package/dist/commands/version.d.ts.map +1 -0
  27. package/dist/commands/version.js +51 -0
  28. package/dist/commands/version.js.map +1 -0
  29. package/dist/daemon/daemon-create-item-type.d.ts +6 -0
  30. package/dist/daemon/daemon-create-item-type.d.ts.map +1 -0
  31. package/dist/daemon/daemon-create-item-type.js +9 -0
  32. package/dist/daemon/daemon-create-item-type.js.map +1 -0
  33. package/dist/daemon/daemon-create-link.d.ts +6 -0
  34. package/dist/daemon/daemon-create-link.d.ts.map +1 -0
  35. package/dist/daemon/daemon-create-link.js +9 -0
  36. package/dist/daemon/daemon-create-link.js.map +1 -0
  37. package/dist/daemon/daemon-delete-link.d.ts +6 -0
  38. package/dist/daemon/daemon-delete-link.d.ts.map +1 -0
  39. package/dist/daemon/daemon-delete-link.js +9 -0
  40. package/dist/daemon/daemon-delete-link.js.map +1 -0
  41. package/dist/daemon/daemon-get-available-link-types.d.ts +6 -0
  42. package/dist/daemon/daemon-get-available-link-types.d.ts.map +1 -0
  43. package/dist/daemon/daemon-get-available-link-types.js +9 -0
  44. package/dist/daemon/daemon-get-available-link-types.js.map +1 -0
  45. package/dist/daemon/daemon-list-links.d.ts +6 -0
  46. package/dist/daemon/daemon-list-links.d.ts.map +1 -0
  47. package/dist/daemon/daemon-list-links.js +9 -0
  48. package/dist/daemon/daemon-list-links.js.map +1 -0
  49. package/dist/daemon/daemon-open-in-temp-workspace.d.ts +2 -2
  50. package/dist/daemon/daemon-open-in-temp-workspace.d.ts.map +1 -1
  51. package/dist/daemon/daemon-open-in-temp-workspace.js.map +1 -1
  52. package/dist/daemon/grpc-client-extended.d.ts +4 -8
  53. package/dist/daemon/grpc-client-extended.d.ts.map +1 -1
  54. package/dist/daemon/grpc-client-items.d.ts +19 -0
  55. package/dist/daemon/grpc-client-items.d.ts.map +1 -0
  56. package/dist/daemon/grpc-client-items.js +2 -0
  57. package/dist/daemon/grpc-client-items.js.map +1 -0
  58. package/dist/daemon/grpc-client-link.d.ts +12 -0
  59. package/dist/daemon/grpc-client-link.d.ts.map +1 -0
  60. package/dist/daemon/grpc-client-link.js +2 -0
  61. package/dist/daemon/grpc-client-link.js.map +1 -0
  62. package/dist/daemon/load-proto.d.ts +3 -1
  63. package/dist/daemon/load-proto.d.ts.map +1 -1
  64. package/dist/daemon/load-proto.js +3 -1
  65. package/dist/daemon/load-proto.js.map +1 -1
  66. package/dist/daemon/types/config.d.ts +0 -1
  67. package/dist/daemon/types/config.d.ts.map +1 -1
  68. package/dist/daemon/types/generic-item.d.ts +104 -0
  69. package/dist/daemon/types/generic-item.d.ts.map +1 -0
  70. package/dist/daemon/types/generic-item.js +6 -0
  71. package/dist/daemon/types/generic-item.js.map +1 -0
  72. package/dist/daemon/types/item-type.d.ts +37 -0
  73. package/dist/daemon/types/item-type.d.ts.map +1 -0
  74. package/dist/daemon/types/item-type.js +6 -0
  75. package/dist/daemon/types/item-type.js.map +1 -0
  76. package/dist/daemon/types.d.ts +2 -0
  77. package/dist/daemon/types.d.ts.map +1 -1
  78. package/dist/daemon/types.js +2 -0
  79. package/dist/daemon/types.js.map +1 -1
  80. package/dist/lib/create-item-type/features.d.ts +18 -0
  81. package/dist/lib/create-item-type/features.d.ts.map +1 -0
  82. package/dist/lib/create-item-type/features.js +58 -0
  83. package/dist/lib/create-item-type/features.js.map +1 -0
  84. package/dist/lib/init/config-builder.d.ts.map +1 -1
  85. package/dist/lib/init/config-builder.js +0 -2
  86. package/dist/lib/init/config-builder.js.map +1 -1
  87. package/dist/types/init-options.d.ts +0 -2
  88. package/dist/types/init-options.d.ts.map +1 -1
  89. package/dist/utils/parse-link-target.d.ts +5 -0
  90. package/dist/utils/parse-link-target.d.ts.map +1 -0
  91. package/dist/utils/parse-link-target.js +16 -0
  92. package/dist/utils/parse-link-target.js.map +1 -0
  93. package/oclif.manifest.json +446 -128
  94. package/package.json +1 -1
  95. package/proto/{centy.proto → centy/v1/centy.proto} +44 -15
  96. package/proto/centy/v1/generic_item.proto +177 -0
@@ -0,0 +1,20 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * Create a new custom item type in the .centy folder
4
+ */
5
+ export default class CreateItemType extends Command {
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ plural: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ identifier: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ statuses: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'default-status': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'priority-levels': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
15
+ features: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ };
18
+ run(): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=item-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-type.d.ts","sourceRoot":"","sources":["../../../src/commands/create/item-type.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAU5C;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IAEjD,OAAgB,WAAW,SAAkC;IAG7D,OAAgB,QAAQ,WAGvB;IAGD,OAAgB,KAAK;;;;;;;;;MAiCpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2ClC"}
@@ -0,0 +1,90 @@
1
+ // eslint-disable-next-line import/order
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { daemonCreateItemType } from '../../daemon/daemon-create-item-type.js';
4
+ import { projectFlag } from '../../flags/project-flag.js';
5
+ import { VALID_FEATURES, parseFeatures, } from '../../lib/create-item-type/features.js';
6
+ import { resolveProjectPath } from '../../utils/resolve-project-path.js';
7
+ /**
8
+ * Create a new custom item type in the .centy folder
9
+ */
10
+ // eslint-disable-next-line custom/no-default-class-export, class-export/class-export
11
+ export default class CreateItemType extends Command {
12
+ // eslint-disable-next-line no-restricted-syntax
13
+ static description = 'Create a new custom item type';
14
+ // eslint-disable-next-line no-restricted-syntax
15
+ static examples = [
16
+ '<%= config.bin %> create item-type --name "Bug" --plural "bugs" --identifier uuid --statuses open,in-progress,closed --default-status open --priority-levels 3 --features display-number,status,priority,move,duplicate',
17
+ '<%= config.bin %> create item-type --name "Task" --plural "tasks" --identifier slug --statuses todo,doing,done --default-status todo --features status,priority',
18
+ ];
19
+ // eslint-disable-next-line no-restricted-syntax
20
+ static flags = {
21
+ name: Flags.string({
22
+ char: 'n',
23
+ description: 'Singular display name (e.g., "Bug", "Task", "Epic")',
24
+ required: true,
25
+ }),
26
+ plural: Flags.string({
27
+ description: 'Folder/type key, lowercase alphanumeric + hyphens (e.g., "bugs")',
28
+ required: true,
29
+ }),
30
+ identifier: Flags.string({
31
+ description: 'Identifier type for items',
32
+ options: ['uuid', 'slug'],
33
+ required: true,
34
+ }),
35
+ statuses: Flags.string({
36
+ description: 'Comma-separated list of allowed statuses',
37
+ required: true,
38
+ }),
39
+ 'default-status': Flags.string({
40
+ description: 'Default status for new items (must be in statuses list)',
41
+ required: true,
42
+ }),
43
+ 'priority-levels': Flags.integer({
44
+ description: 'Number of priority levels (0 = none)',
45
+ default: 0,
46
+ }),
47
+ features: Flags.string({
48
+ char: 'f',
49
+ description: `Comma-separated features (${VALID_FEATURES.join(', ')})`,
50
+ }),
51
+ project: projectFlag,
52
+ };
53
+ async run() {
54
+ const { flags } = await this.parse(CreateItemType);
55
+ const cwd = await resolveProjectPath(flags.project);
56
+ const statuses = flags.statuses.split(',').map(s => s.trim());
57
+ const defaultStatus = flags['default-status'];
58
+ if (!statuses.includes(defaultStatus)) {
59
+ this.error(`Default status "${defaultStatus}" must be one of: ${statuses.join(', ')}`);
60
+ }
61
+ const features = parseFeatures(flags.features);
62
+ const response = await daemonCreateItemType({
63
+ projectPath: cwd,
64
+ name: flags.name,
65
+ plural: flags.plural,
66
+ // eslint-disable-next-line no-restricted-syntax
67
+ identifier: flags.identifier,
68
+ features,
69
+ statuses,
70
+ defaultStatus,
71
+ priorityLevels: flags['priority-levels'],
72
+ customFields: [],
73
+ });
74
+ if (!response.success) {
75
+ const errorMsg = response.error !== '' ? response.error : 'Failed to create item type';
76
+ this.error(errorMsg);
77
+ }
78
+ this.log(`\nCreated item type "${flags.name}" (${flags.plural})`);
79
+ this.log(` Identifier: ${flags.identifier}`);
80
+ this.log(` Statuses: ${statuses.join(', ')}`);
81
+ this.log(` Default status: ${defaultStatus}`);
82
+ if (flags['priority-levels'] > 0) {
83
+ this.log(` Priority levels: ${flags['priority-levels']}`);
84
+ }
85
+ if (features.length > 0 && flags.features !== undefined) {
86
+ this.log(` Features: ${flags.features}`);
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=item-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-type.js","sourceRoot":"","sources":["../../../src/commands/create/item-type.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,6 @@ export default class Init extends Command {
8
8
  static flags: {
9
9
  force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
10
  'priority-levels': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- 'default-state': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
11
  'allowed-states': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
12
  version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAI5C;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IAEvC,OAAgB,WAAW,SAC0B;IAGrD,OAAgB,QAAQ,WAGvB;IAGD,OAAgB,KAAK;;;;;;MAqBpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyBlC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAI5C;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IAEvC,OAAgB,WAAW,SAC0B;IAGrD,OAAgB,QAAQ,WAGvB;IAGD,OAAgB,KAAK;;;;;MAkBpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwBlC"}
@@ -26,9 +26,6 @@ export default class Init extends Command {
26
26
  min: 1,
27
27
  max: 10,
28
28
  }),
29
- 'default-state': Flags.string({
30
- description: 'Default state for new issues (default: "open")',
31
- }),
32
29
  'allowed-states': Flags.string({
33
30
  description: 'Comma-separated list of allowed states',
34
31
  }),
@@ -49,7 +46,6 @@ export default class Init extends Command {
49
46
  force: flags.force,
50
47
  cwd,
51
48
  priorityLevels: flags['priority-levels'],
52
- defaultState: flags['default-state'],
53
49
  allowedStates,
54
50
  version: flags.version,
55
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C;;GAEG;AACH,qFAAqF;AACrF,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,gDAAgD;IAChD,MAAM,CAAU,WAAW,GACzB,mDAAmD,CAAA;IAErD,gDAAgD;IAChD,MAAM,CAAU,QAAQ,GAAG;QACzB,qCAAqC;QACrC,6CAA6C;KAC9C,CAAA;IAED,gDAAgD;IAChD,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,KAAK;SACf,CAAC;QACF,eAAe;QACf,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,8CAA8C;YAC3D,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,EAAE;SACR,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC;YAC5B,WAAW,EAAE,gDAAgD;SAC9D,CAAC;QACF,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC;YAC7B,WAAW,EAAE,wCAAwC;SACtD,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,0BAA0B;SACxC,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAExC,sEAAsE;QACtE,gDAAgD;QAChD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAEpC,mCAAmC;QACnC,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAC3C,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,CAAC,CAAC,SAAS,CAAA;QAEb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG;YACH,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC;YACxC,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC;YACpC,aAAa;YACb,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACd,CAAC;IACH,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C;;GAEG;AACH,qFAAqF;AACrF,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,gDAAgD;IAChD,MAAM,CAAU,WAAW,GACzB,mDAAmD,CAAA;IAErD,gDAAgD;IAChD,MAAM,CAAU,QAAQ,GAAG;QACzB,qCAAqC;QACrC,6CAA6C;KAC9C,CAAA;IAED,gDAAgD;IAChD,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,KAAK;SACf,CAAC;QACF,eAAe;QACf,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,8CAA8C;YAC3D,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,EAAE;SACR,CAAC;QACF,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC;YAC7B,WAAW,EAAE,wCAAwC;SACtD,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,0BAA0B;SACxC,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAExC,sEAAsE;QACtE,gDAAgD;QAChD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAEpC,mCAAmC;QACnC,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAC3C,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,CAAC,CAAC,SAAS,CAAA;QAEb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG;YACH,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC;YACxC,aAAa;YACb,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACd,CAAC;IACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * Create a link between two entities
4
+ */
5
+ export default class Link extends Command {
6
+ static args: {
7
+ type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
9
+ linkType: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
10
+ target: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
11
+ };
12
+ static description: string;
13
+ static examples: string[];
14
+ static flags: {
15
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAE,MAAM,aAAa,CAAA;AAW3C;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IAEvC,OAAgB,IAAI;;;;;MAkBnB;IAGD,OAAgB,WAAW,SAAuC;IAGlE,OAAgB,QAAQ,WAIvB;IAGD,OAAgB,KAAK;;MAEpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqClC"}
@@ -0,0 +1,74 @@
1
+ // eslint-disable-next-line import/order
2
+ import { Args, Command } from '@oclif/core';
3
+ import { daemonCreateLink } from '../daemon/daemon-create-link.js';
4
+ import { projectFlag } from '../flags/project-flag.js';
5
+ import { ensureInitialized, NotInitializedError, } from '../utils/ensure-initialized.js';
6
+ import { parseLinkTarget } from '../utils/parse-link-target.js';
7
+ import { resolveProjectPath } from '../utils/resolve-project-path.js';
8
+ /**
9
+ * Create a link between two entities
10
+ */
11
+ // eslint-disable-next-line custom/no-default-class-export, class-export/class-export
12
+ export default class Link extends Command {
13
+ // eslint-disable-next-line no-restricted-syntax
14
+ static args = {
15
+ type: Args.string({
16
+ description: 'Source entity type (e.g., issue, doc)',
17
+ required: true,
18
+ }),
19
+ id: Args.string({
20
+ description: 'Source entity ID or slug',
21
+ required: true,
22
+ }),
23
+ linkType: Args.string({
24
+ description: 'Link type (e.g., blocks, relates-to, parent-of)',
25
+ required: true,
26
+ }),
27
+ target: Args.string({
28
+ description: 'Target entity as type:id (e.g., issue:2, doc:getting-started)',
29
+ required: true,
30
+ }),
31
+ };
32
+ // eslint-disable-next-line no-restricted-syntax
33
+ static description = 'Create a link between two entities';
34
+ // eslint-disable-next-line no-restricted-syntax
35
+ static examples = [
36
+ '<%= config.bin %> link issue 1 blocks issue:2',
37
+ '<%= config.bin %> link doc getting-started relates-to issue:5',
38
+ '<%= config.bin %> link issue 1 parent-of issue:3 --project my-project',
39
+ ];
40
+ // eslint-disable-next-line no-restricted-syntax
41
+ static flags = {
42
+ project: projectFlag,
43
+ };
44
+ async run() {
45
+ const { args, flags } = await this.parse(Link);
46
+ const cwd = await resolveProjectPath(flags.project);
47
+ try {
48
+ await ensureInitialized(cwd);
49
+ }
50
+ catch (error) {
51
+ if (error instanceof NotInitializedError) {
52
+ this.error(error.message);
53
+ }
54
+ throw error instanceof Error ? error : new Error(String(error));
55
+ }
56
+ const parsed = parseLinkTarget(args.target);
57
+ if (parsed === undefined) {
58
+ this.error('Invalid target format. Use type:id (e.g., issue:2, doc:getting-started)');
59
+ }
60
+ const response = await daemonCreateLink({
61
+ projectPath: cwd,
62
+ sourceId: args.id,
63
+ sourceType: args.type,
64
+ targetId: parsed[1],
65
+ targetType: parsed[0],
66
+ linkType: args.linkType,
67
+ });
68
+ if (!response.success) {
69
+ this.error(response.error);
70
+ }
71
+ this.log(`Created link: ${args.type} ${args.id} --[${args.linkType}]--> ${args.target}`);
72
+ }
73
+ }
74
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * List all links for an entity
4
+ */
5
+ export default class Links extends Command {
6
+ static args: {
7
+ type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
9
+ };
10
+ static description: string;
11
+ static examples: string[];
12
+ static flags: {
13
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/commands/links.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAUlD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IAExC,OAAgB,IAAI;;;MASnB;IAGD,OAAgB,WAAW,SAAiC;IAG5D,OAAgB,QAAQ,WAIvB;IAGD,OAAgB,KAAK;;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoClC"}
@@ -0,0 +1,70 @@
1
+ // eslint-disable-next-line import/order
2
+ import { Args, Command, Flags } from '@oclif/core';
3
+ import { daemonListLinks } from '../daemon/daemon-list-links.js';
4
+ import { projectFlag } from '../flags/project-flag.js';
5
+ import { ensureInitialized, NotInitializedError, } from '../utils/ensure-initialized.js';
6
+ import { resolveProjectPath } from '../utils/resolve-project-path.js';
7
+ /**
8
+ * List all links for an entity
9
+ */
10
+ // eslint-disable-next-line custom/no-default-class-export, class-export/class-export
11
+ export default class Links extends Command {
12
+ // eslint-disable-next-line no-restricted-syntax
13
+ static args = {
14
+ type: Args.string({
15
+ description: 'Entity type (e.g., issue, doc)',
16
+ required: true,
17
+ }),
18
+ id: Args.string({
19
+ description: 'Entity ID or slug',
20
+ required: true,
21
+ }),
22
+ };
23
+ // eslint-disable-next-line no-restricted-syntax
24
+ static description = 'List all links for an entity';
25
+ // eslint-disable-next-line no-restricted-syntax
26
+ static examples = [
27
+ '<%= config.bin %> links issue 1',
28
+ '<%= config.bin %> links doc getting-started --json',
29
+ '<%= config.bin %> links issue 1 --project my-project',
30
+ ];
31
+ // eslint-disable-next-line no-restricted-syntax
32
+ static flags = {
33
+ json: Flags.boolean({
34
+ description: 'Output as JSON',
35
+ default: false,
36
+ }),
37
+ project: projectFlag,
38
+ };
39
+ async run() {
40
+ const { args, flags } = await this.parse(Links);
41
+ const cwd = await resolveProjectPath(flags.project);
42
+ try {
43
+ await ensureInitialized(cwd);
44
+ }
45
+ catch (error) {
46
+ if (error instanceof NotInitializedError) {
47
+ this.error(error.message);
48
+ }
49
+ throw error instanceof Error ? error : new Error(String(error));
50
+ }
51
+ const response = await daemonListLinks({
52
+ projectPath: cwd,
53
+ entityId: args.id,
54
+ entityType: args.type,
55
+ });
56
+ if (flags.json) {
57
+ this.log(JSON.stringify(response.links, null, 2));
58
+ return;
59
+ }
60
+ if (response.links.length === 0) {
61
+ this.log(`No links found for ${args.type} ${args.id}.`);
62
+ return;
63
+ }
64
+ this.log(`Found ${response.totalCount} link(s) for ${args.type} ${args.id}:\n`);
65
+ for (const link of response.links) {
66
+ this.log(` ${link.linkType} --> ${link.targetType}:${link.targetId}`);
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/commands/links.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * List all available link types
4
+ */
5
+ export default class ListLinkTypes extends Command {
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=link-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-types.d.ts","sourceRoot":"","sources":["../../../src/commands/list/link-types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAU5C;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAEhD,OAAgB,WAAW,SAAkC;IAG7D,OAAgB,QAAQ,WAIvB;IAGD,OAAgB,KAAK;;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmClC"}
@@ -0,0 +1,59 @@
1
+ // eslint-disable-next-line import/order
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { daemonGetAvailableLinkTypes } from '../../daemon/daemon-get-available-link-types.js';
4
+ import { projectFlag } from '../../flags/project-flag.js';
5
+ import { ensureInitialized, NotInitializedError, } from '../../utils/ensure-initialized.js';
6
+ import { resolveProjectPath } from '../../utils/resolve-project-path.js';
7
+ /**
8
+ * List all available link types
9
+ */
10
+ // eslint-disable-next-line custom/no-default-class-export, class-export/class-export
11
+ export default class ListLinkTypes extends Command {
12
+ // eslint-disable-next-line no-restricted-syntax
13
+ static description = 'List all available link types';
14
+ // eslint-disable-next-line no-restricted-syntax
15
+ static examples = [
16
+ '<%= config.bin %> list link-types',
17
+ '<%= config.bin %> list link-types --json',
18
+ '<%= config.bin %> list link-types --project centy-daemon',
19
+ ];
20
+ // eslint-disable-next-line no-restricted-syntax
21
+ static flags = {
22
+ json: Flags.boolean({
23
+ description: 'Output as JSON',
24
+ default: false,
25
+ }),
26
+ project: projectFlag,
27
+ };
28
+ async run() {
29
+ const { flags } = await this.parse(ListLinkTypes);
30
+ const cwd = await resolveProjectPath(flags.project);
31
+ try {
32
+ await ensureInitialized(cwd);
33
+ }
34
+ catch (error) {
35
+ if (error instanceof NotInitializedError) {
36
+ this.error(error.message);
37
+ }
38
+ throw error instanceof Error ? error : new Error(String(error));
39
+ }
40
+ const response = await daemonGetAvailableLinkTypes({
41
+ projectPath: cwd,
42
+ });
43
+ if (flags.json) {
44
+ this.log(JSON.stringify(response.linkTypes, null, 2));
45
+ return;
46
+ }
47
+ if (response.linkTypes.length === 0) {
48
+ this.log('No link types available.');
49
+ return;
50
+ }
51
+ this.log('Available link types:\n');
52
+ for (const linkType of response.linkTypes) {
53
+ const builtinTag = linkType.isBuiltin ? ' (builtin)' : ' (custom)';
54
+ const desc = linkType.description !== '' ? ` - ${linkType.description}` : '';
55
+ this.log(` ${linkType.name} <-> ${linkType.inverse}${builtinTag}${desc}`);
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=link-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-types.js","sourceRoot":"","sources":["../../../src/commands/list/link-types.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAA;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAExE;;GAEG;AACH,qFAAqF;AACrF,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,gDAAgD;IAChD,MAAM,CAAU,WAAW,GAAG,+BAA+B,CAAA;IAE7D,gDAAgD;IAChD,MAAM,CAAU,QAAQ,GAAG;QACzB,mCAAmC;QACnC,0CAA0C;QAC1C,0DAA0D;KAC3D,CAAA;IAED,gDAAgD;IAChD,MAAM,CAAU,KAAK,GAAG;QACtB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,WAAW,EAAE,gBAAgB;YAC7B,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,EAAE,WAAW;KACrB,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEnD,IAAI,CAAC;YACH,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC3B,CAAC;YACD,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACjE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC;YACjD,WAAW,EAAE,GAAG;SACjB,CAAC,CAAA;QAEF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACrD,OAAM;QACR,CAAC;QAED,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;YACpC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACnC,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAA;YAClE,MAAM,IAAI,GACR,QAAQ,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YACjE,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,OAAO,GAAG,UAAU,GAAG,IAAI,EAAE,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * Remove a link between two entities
4
+ */
5
+ export default class Unlink extends Command {
6
+ static args: {
7
+ type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
9
+ target: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
10
+ };
11
+ static description: string;
12
+ static examples: string[];
13
+ static flags: {
14
+ type: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=unlink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlink.d.ts","sourceRoot":"","sources":["../../src/commands/unlink.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAWlD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IAEzC,OAAgB,IAAI;;;;MAcnB;IAGD,OAAgB,WAAW,SAAuC;IAGlE,OAAgB,QAAQ,WAIvB;IAGD,OAAgB,KAAK;;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqClC"}
@@ -0,0 +1,73 @@
1
+ // eslint-disable-next-line import/order
2
+ import { Args, Command, Flags } from '@oclif/core';
3
+ import { daemonDeleteLink } from '../daemon/daemon-delete-link.js';
4
+ import { projectFlag } from '../flags/project-flag.js';
5
+ import { ensureInitialized, NotInitializedError, } from '../utils/ensure-initialized.js';
6
+ import { parseLinkTarget } from '../utils/parse-link-target.js';
7
+ import { resolveProjectPath } from '../utils/resolve-project-path.js';
8
+ /**
9
+ * Remove a link between two entities
10
+ */
11
+ // eslint-disable-next-line custom/no-default-class-export, class-export/class-export
12
+ export default class Unlink extends Command {
13
+ // eslint-disable-next-line no-restricted-syntax
14
+ static args = {
15
+ type: Args.string({
16
+ description: 'Source entity type (e.g., issue, doc)',
17
+ required: true,
18
+ }),
19
+ id: Args.string({
20
+ description: 'Source entity ID or slug',
21
+ required: true,
22
+ }),
23
+ target: Args.string({
24
+ description: 'Target entity as type:id (e.g., issue:2, doc:getting-started)',
25
+ required: true,
26
+ }),
27
+ };
28
+ // eslint-disable-next-line no-restricted-syntax
29
+ static description = 'Remove a link between two entities';
30
+ // eslint-disable-next-line no-restricted-syntax
31
+ static examples = [
32
+ '<%= config.bin %> unlink issue 1 issue:2',
33
+ '<%= config.bin %> unlink issue 1 issue:2 --type blocks',
34
+ '<%= config.bin %> unlink doc getting-started issue:5 --project my-project',
35
+ ];
36
+ // eslint-disable-next-line no-restricted-syntax
37
+ static flags = {
38
+ type: Flags.string({
39
+ description: 'Specific link type to remove (removes all link types if omitted)',
40
+ }),
41
+ project: projectFlag,
42
+ };
43
+ async run() {
44
+ const { args, flags } = await this.parse(Unlink);
45
+ const cwd = await resolveProjectPath(flags.project);
46
+ try {
47
+ await ensureInitialized(cwd);
48
+ }
49
+ catch (error) {
50
+ if (error instanceof NotInitializedError) {
51
+ this.error(error.message);
52
+ }
53
+ throw error instanceof Error ? error : new Error(String(error));
54
+ }
55
+ const parsed = parseLinkTarget(args.target);
56
+ if (parsed === undefined) {
57
+ this.error('Invalid target format. Use type:id (e.g., issue:2, doc:getting-started)');
58
+ }
59
+ const response = await daemonDeleteLink({
60
+ projectPath: cwd,
61
+ sourceId: args.id,
62
+ sourceType: args.type,
63
+ targetId: parsed[1],
64
+ targetType: parsed[0],
65
+ linkType: flags.type,
66
+ });
67
+ if (!response.success) {
68
+ this.error(response.error);
69
+ }
70
+ this.log(`Removed ${response.deletedCount} link(s) from ${args.type} ${args.id} to ${args.target}`);
71
+ }
72
+ }
73
+ //# sourceMappingURL=unlink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlink.js","sourceRoot":"","sources":["../../src/commands/unlink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * Show CLI and daemon version information
4
+ */
5
+ export default class Version extends Command {
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAK5C;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAE1C,OAAgB,WAAW,SAA4C;IAGvE,OAAgB,QAAQ,WAGvB;IAGD,OAAgB,KAAK;;MAKpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsClC"}
@@ -0,0 +1,51 @@
1
+ // eslint-disable-next-line import/order
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { daemonGetDaemonInfo } from '../daemon/daemon-get-daemon-info.js';
4
+ import { getVersion } from '../get-version.js';
5
+ /**
6
+ * Show CLI and daemon version information
7
+ */
8
+ // eslint-disable-next-line custom/no-default-class-export, class-export/class-export
9
+ export default class Version extends Command {
10
+ // eslint-disable-next-line no-restricted-syntax
11
+ static description = 'Show CLI and daemon version information';
12
+ // eslint-disable-next-line no-restricted-syntax
13
+ static examples = [
14
+ '<%= config.bin %> version',
15
+ '<%= config.bin %> version --json',
16
+ ];
17
+ // eslint-disable-next-line no-restricted-syntax
18
+ static flags = {
19
+ json: Flags.boolean({
20
+ description: 'Output as JSON',
21
+ default: false,
22
+ }),
23
+ };
24
+ async run() {
25
+ const { flags } = await this.parse(Version);
26
+ const cliVersion = getVersion();
27
+ let daemonVersion = null;
28
+ let daemonStatus;
29
+ try {
30
+ const daemonInfo = await daemonGetDaemonInfo({});
31
+ daemonVersion = daemonInfo.version;
32
+ daemonStatus =
33
+ daemonVersion === cliVersion ? 'Up to date' : 'Version mismatch';
34
+ }
35
+ catch {
36
+ daemonStatus = 'Not running';
37
+ }
38
+ if (flags.json) {
39
+ this.log(JSON.stringify({
40
+ cli: cliVersion,
41
+ daemon: daemonVersion,
42
+ status: daemonStatus,
43
+ }, null, 2));
44
+ return;
45
+ }
46
+ this.log(`CLI: ${cliVersion}`);
47
+ this.log(`Daemon: ${daemonVersion !== null ? daemonVersion : 'not running'}`);
48
+ this.log(`Status: ${daemonStatus}`);
49
+ }
50
+ }
51
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C;;GAEG;AACH,qFAAqF;AACrF,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,gDAAgD;IAChD,MAAM,CAAU,WAAW,GAAG,yCAAyC,CAAA;IAEvE,gDAAgD;IAChD,MAAM,CAAU,QAAQ,GAAG;QACzB,2BAA2B;QAC3B,kCAAkC;KACnC,CAAA;IAED,gDAAgD;IAChD,MAAM,CAAU,KAAK,GAAG;QACtB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,WAAW,EAAE,gBAAgB;YAC7B,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAE3C,MAAM,UAAU,GAAG,UAAU,EAAE,CAAA;QAE/B,IAAI,aAAa,GAAkB,IAAI,CAAA;QACvC,IAAI,YAAoB,CAAA;QAExB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAA;YAChD,aAAa,GAAG,UAAU,CAAC,OAAO,CAAA;YAClC,YAAY;gBACV,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAA;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,GAAG,aAAa,CAAA;QAC9B,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,SAAS,CACZ;gBACE,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,YAAY;aACrB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAA;YACD,OAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAA;QAC9B,IAAI,CAAC,GAAG,CACN,WAAW,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,CACpE,CAAA;QACD,IAAI,CAAC,GAAG,CAAC,WAAW,YAAY,EAAE,CAAC,CAAA;IACrC,CAAC"}