@kilnci/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/bin/kiln.js +5 -0
  2. package/dist/base-command.d.ts +21 -0
  3. package/dist/base-command.d.ts.map +1 -0
  4. package/dist/base-command.js +30 -0
  5. package/dist/base-command.js.map +1 -0
  6. package/dist/client.d.ts +166 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +321 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands/artifacts.d.ts +17 -0
  11. package/dist/commands/artifacts.d.ts.map +1 -0
  12. package/dist/commands/artifacts.js +96 -0
  13. package/dist/commands/artifacts.js.map +1 -0
  14. package/dist/commands/build.d.ts +15 -0
  15. package/dist/commands/build.d.ts.map +1 -0
  16. package/dist/commands/build.js +79 -0
  17. package/dist/commands/build.js.map +1 -0
  18. package/dist/commands/cancel.d.ts +10 -0
  19. package/dist/commands/cancel.d.ts.map +1 -0
  20. package/dist/commands/cancel.js +27 -0
  21. package/dist/commands/cancel.js.map +1 -0
  22. package/dist/commands/login.d.ts +18 -0
  23. package/dist/commands/login.d.ts.map +1 -0
  24. package/dist/commands/login.js +188 -0
  25. package/dist/commands/login.js.map +1 -0
  26. package/dist/commands/logout.d.ts +7 -0
  27. package/dist/commands/logout.d.ts.map +1 -0
  28. package/dist/commands/logout.js +17 -0
  29. package/dist/commands/logout.js.map +1 -0
  30. package/dist/commands/logs.d.ts +18 -0
  31. package/dist/commands/logs.d.ts.map +1 -0
  32. package/dist/commands/logs.js +139 -0
  33. package/dist/commands/logs.js.map +1 -0
  34. package/dist/commands/org/create.d.ts +13 -0
  35. package/dist/commands/org/create.d.ts.map +1 -0
  36. package/dist/commands/org/create.js +39 -0
  37. package/dist/commands/org/create.js.map +1 -0
  38. package/dist/commands/org/delete.d.ts +13 -0
  39. package/dist/commands/org/delete.d.ts.map +1 -0
  40. package/dist/commands/org/delete.js +44 -0
  41. package/dist/commands/org/delete.js.map +1 -0
  42. package/dist/commands/org/gitlab/remove.d.ts +13 -0
  43. package/dist/commands/org/gitlab/remove.d.ts.map +1 -0
  44. package/dist/commands/org/gitlab/remove.js +51 -0
  45. package/dist/commands/org/gitlab/remove.js.map +1 -0
  46. package/dist/commands/org/gitlab/setup.d.ts +17 -0
  47. package/dist/commands/org/gitlab/setup.d.ts.map +1 -0
  48. package/dist/commands/org/gitlab/setup.js +83 -0
  49. package/dist/commands/org/gitlab/setup.js.map +1 -0
  50. package/dist/commands/org/gitlab/show.d.ts +10 -0
  51. package/dist/commands/org/gitlab/show.d.ts.map +1 -0
  52. package/dist/commands/org/gitlab/show.js +54 -0
  53. package/dist/commands/org/gitlab/show.js.map +1 -0
  54. package/dist/commands/org/gitlab/sync.d.ts +10 -0
  55. package/dist/commands/org/gitlab/sync.d.ts.map +1 -0
  56. package/dist/commands/org/gitlab/sync.js +38 -0
  57. package/dist/commands/org/gitlab/sync.js.map +1 -0
  58. package/dist/commands/org/index.d.ts +11 -0
  59. package/dist/commands/org/index.d.ts.map +1 -0
  60. package/dist/commands/org/index.js +46 -0
  61. package/dist/commands/org/index.js.map +1 -0
  62. package/dist/commands/org/repos/disable.d.ts +11 -0
  63. package/dist/commands/org/repos/disable.d.ts.map +1 -0
  64. package/dist/commands/org/repos/disable.js +32 -0
  65. package/dist/commands/org/repos/disable.js.map +1 -0
  66. package/dist/commands/org/repos/enable.d.ts +11 -0
  67. package/dist/commands/org/repos/enable.d.ts.map +1 -0
  68. package/dist/commands/org/repos/enable.js +32 -0
  69. package/dist/commands/org/repos/enable.js.map +1 -0
  70. package/dist/commands/org/repos.d.ts +14 -0
  71. package/dist/commands/org/repos.d.ts.map +1 -0
  72. package/dist/commands/org/repos.js +54 -0
  73. package/dist/commands/org/repos.js.map +1 -0
  74. package/dist/commands/status.d.ts +17 -0
  75. package/dist/commands/status.d.ts.map +1 -0
  76. package/dist/commands/status.js +73 -0
  77. package/dist/commands/status.js.map +1 -0
  78. package/dist/commands/workers/create.d.ts +15 -0
  79. package/dist/commands/workers/create.d.ts.map +1 -0
  80. package/dist/commands/workers/create.js +74 -0
  81. package/dist/commands/workers/create.js.map +1 -0
  82. package/dist/commands/workers/delete.d.ts +13 -0
  83. package/dist/commands/workers/delete.d.ts.map +1 -0
  84. package/dist/commands/workers/delete.js +40 -0
  85. package/dist/commands/workers/delete.js.map +1 -0
  86. package/dist/commands/workers/index.d.ts +10 -0
  87. package/dist/commands/workers/index.d.ts.map +1 -0
  88. package/dist/commands/workers/index.js +42 -0
  89. package/dist/commands/workers/index.js.map +1 -0
  90. package/dist/commands/workers/logs.d.ts +11 -0
  91. package/dist/commands/workers/logs.d.ts.map +1 -0
  92. package/dist/commands/workers/logs.js +54 -0
  93. package/dist/commands/workers/logs.js.map +1 -0
  94. package/dist/commands/workers/revoke.d.ts +10 -0
  95. package/dist/commands/workers/revoke.d.ts.map +1 -0
  96. package/dist/commands/workers/revoke.js +27 -0
  97. package/dist/commands/workers/revoke.js.map +1 -0
  98. package/dist/commands/workers/start.d.ts +19 -0
  99. package/dist/commands/workers/start.d.ts.map +1 -0
  100. package/dist/commands/workers/start.js +329 -0
  101. package/dist/commands/workers/start.js.map +1 -0
  102. package/dist/commands/workers/status.d.ts +7 -0
  103. package/dist/commands/workers/status.d.ts.map +1 -0
  104. package/dist/commands/workers/status.js +75 -0
  105. package/dist/commands/workers/status.js.map +1 -0
  106. package/dist/commands/workers/stop.d.ts +10 -0
  107. package/dist/commands/workers/stop.d.ts.map +1 -0
  108. package/dist/commands/workers/stop.js +79 -0
  109. package/dist/commands/workers/stop.js.map +1 -0
  110. package/dist/commands/workers/token.d.ts +13 -0
  111. package/dist/commands/workers/token.d.ts.map +1 -0
  112. package/dist/commands/workers/token.js +38 -0
  113. package/dist/commands/workers/token.js.map +1 -0
  114. package/dist/config.d.ts +38 -0
  115. package/dist/config.d.ts.map +1 -0
  116. package/dist/config.js +68 -0
  117. package/dist/config.js.map +1 -0
  118. package/dist/formatters.d.ts +42 -0
  119. package/dist/formatters.d.ts.map +1 -0
  120. package/dist/formatters.js +194 -0
  121. package/dist/formatters.js.map +1 -0
  122. package/dist/index.d.ts +4 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +5 -0
  125. package/dist/index.js.map +1 -0
  126. package/dist/lib/workers-helpers.d.ts +20 -0
  127. package/dist/lib/workers-helpers.d.ts.map +1 -0
  128. package/dist/lib/workers-helpers.js +51 -0
  129. package/dist/lib/workers-helpers.js.map +1 -0
  130. package/package.json +56 -0
@@ -0,0 +1,79 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { execSync } from 'child_process';
3
+ import { BaseCommand } from '../../base-command.js';
4
+ const CONTAINER_NAME = 'kiln-local-worker';
5
+ /**
6
+ * Check if a container is running.
7
+ */
8
+ function isContainerRunning(name) {
9
+ try {
10
+ const result = execSync(`docker inspect -f '{{.State.Running}}' ${name}`, {
11
+ encoding: 'utf-8',
12
+ stdio: 'pipe',
13
+ }).trim();
14
+ return result === 'true';
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ /**
21
+ * Check if a container exists (running or stopped).
22
+ */
23
+ function containerExists(name) {
24
+ try {
25
+ execSync(`docker inspect ${name}`, { stdio: 'pipe' });
26
+ return true;
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ export default class WorkersStop extends BaseCommand {
33
+ static description = 'Stop the local worker container.';
34
+ static examples = [
35
+ '<%= config.bin %> workers stop',
36
+ '<%= config.bin %> workers stop --force',
37
+ ];
38
+ static flags = {
39
+ force: Flags.boolean({
40
+ char: 'f',
41
+ description: 'Force stop (kill) the container',
42
+ default: false,
43
+ }),
44
+ };
45
+ async run() {
46
+ const { flags } = await this.parse(WorkersStop);
47
+ if (!containerExists(CONTAINER_NAME)) {
48
+ this.log('No local worker container found.');
49
+ return;
50
+ }
51
+ if (!isContainerRunning(CONTAINER_NAME)) {
52
+ this.log('Local worker container is not running.');
53
+ // Clean up stopped container
54
+ try {
55
+ execSync(`docker rm ${CONTAINER_NAME}`, { stdio: 'pipe' });
56
+ this.log('Removed stopped container.');
57
+ }
58
+ catch {
59
+ // Ignore
60
+ }
61
+ return;
62
+ }
63
+ try {
64
+ if (flags.force) {
65
+ this.log('Force stopping local worker container...');
66
+ execSync(`docker kill ${CONTAINER_NAME}`, { stdio: 'pipe' });
67
+ }
68
+ else {
69
+ this.log('Stopping local worker container (gracefully)...');
70
+ execSync(`docker stop ${CONTAINER_NAME}`, { stdio: 'pipe' });
71
+ }
72
+ this.log('Local worker stopped.');
73
+ }
74
+ catch (error) {
75
+ this.handleError(error, 'stop worker container');
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/workers/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAE3C;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,0CAA0C,IAAI,EAAE,EAAE;YACxE,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,KAAK,MAAM,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,QAAQ,CAAC,kBAAkB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAU,WAAW,GAAG,kCAAkC,CAAC;IAEjE,MAAM,CAAU,QAAQ,GAAG;QACzB,gCAAgC;QAChC,wCAAwC;KACzC,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEhD,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACnD,6BAA6B;YAC7B,IAAI,CAAC;gBACH,QAAQ,CAAC,aAAa,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;gBACrD,QAAQ,CAAC,eAAe,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC5D,QAAQ,CAAC,eAAe,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;QACnD,CAAC;IACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class WorkersToken extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ ttl: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/commands/workers/token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SAAqE;IAEhG,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;MAKnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgBlC"}
@@ -0,0 +1,38 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ export default class WorkersToken extends BaseCommand {
4
+ static description = 'Regenerate registration token for a pending worker (admin only)';
5
+ static examples = [
6
+ '<%= config.bin %> workers token wrk_abc123',
7
+ '<%= config.bin %> workers token wrk_abc123 --ttl 60',
8
+ ];
9
+ static args = {
10
+ id: Args.string({
11
+ description: 'Worker ID',
12
+ required: true,
13
+ }),
14
+ };
15
+ static flags = {
16
+ ttl: Flags.integer({
17
+ description: 'Token time-to-live in minutes (default: 1440 = 24h)',
18
+ default: 1440,
19
+ }),
20
+ };
21
+ async run() {
22
+ const { args, flags } = await this.parse(WorkersToken);
23
+ this.requireAuth();
24
+ try {
25
+ const result = await this.client.regenerateWorkerToken(args.id, flags.ttl);
26
+ this.log(`Registration token regenerated for worker ${args.id}`);
27
+ this.log('');
28
+ this.log('Worker Token (one-time use, keep secure):');
29
+ this.log(` ${result.workerToken}`);
30
+ this.log('');
31
+ this.log(`Token expires: ${new Date(result.tokenExpiresAt).toLocaleString()}`);
32
+ }
33
+ catch (error) {
34
+ this.handleError(error, 'regenerate worker token');
35
+ }
36
+ }
37
+ }
38
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/commands/workers/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAU,WAAW,GAAG,iEAAiE,CAAC;IAEhG,MAAM,CAAU,QAAQ,GAAG;QACzB,4CAA4C;QAC5C,qDAAqD;KACtD,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACrB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;YACjB,WAAW,EAAE,qDAAqD;YAClE,OAAO,EAAE,IAAI;SACd,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,IAAI,CAAC,GAAG,CAAC,6CAA6C,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ export interface Config {
2
+ url: string;
3
+ token?: string;
4
+ }
5
+ export interface WorkerConfig {
6
+ env?: Record<string, string>;
7
+ }
8
+ export interface ConfigFile {
9
+ url?: string;
10
+ token?: string;
11
+ workers?: WorkerConfig;
12
+ }
13
+ /**
14
+ * Load configuration from environment variables and config file
15
+ * Priority: Environment variables > Config file > Defaults
16
+ */
17
+ export declare function loadConfig(): Config;
18
+ /**
19
+ * Load full configuration file
20
+ */
21
+ export declare function loadConfigFile(): ConfigFile;
22
+ /**
23
+ * Save configuration to ~/.kiln.yml
24
+ */
25
+ export declare function saveConfigFile(config: ConfigFile): void;
26
+ /**
27
+ * Delete the configuration file
28
+ */
29
+ export declare function deleteConfigFile(): boolean;
30
+ /**
31
+ * Get the path to the config file
32
+ */
33
+ export declare function getConfigPath(): string;
34
+ /**
35
+ * Get default Kiln URL
36
+ */
37
+ export declare function getKilnUrl(): string;
38
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAKD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAe3C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAIvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAGnC"}
package/dist/config.js ADDED
@@ -0,0 +1,68 @@
1
+ import { readFileSync, writeFileSync, existsSync, unlinkSync } from 'fs';
2
+ import { homedir } from 'os';
3
+ import { join } from 'path';
4
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
5
+ const DEFAULT_URL = 'http://localhost:3000';
6
+ const CONFIG_FILE_NAME = '.kiln.yml';
7
+ /**
8
+ * Load configuration from environment variables and config file
9
+ * Priority: Environment variables > Config file > Defaults
10
+ */
11
+ export function loadConfig() {
12
+ const configFile = loadConfigFile();
13
+ return {
14
+ url: process.env.KILN_URL || configFile.url || DEFAULT_URL,
15
+ token: process.env.KILN_TOKEN || configFile.token,
16
+ };
17
+ }
18
+ /**
19
+ * Load full configuration file
20
+ */
21
+ export function loadConfigFile() {
22
+ const configPath = join(homedir(), CONFIG_FILE_NAME);
23
+ if (!existsSync(configPath)) {
24
+ return {};
25
+ }
26
+ try {
27
+ const content = readFileSync(configPath, 'utf-8');
28
+ const config = parseYaml(content);
29
+ return config || {};
30
+ }
31
+ catch {
32
+ // Silently ignore config file errors
33
+ return {};
34
+ }
35
+ }
36
+ /**
37
+ * Save configuration to ~/.kiln.yml
38
+ */
39
+ export function saveConfigFile(config) {
40
+ const configPath = join(homedir(), CONFIG_FILE_NAME);
41
+ const content = stringifyYaml(config);
42
+ writeFileSync(configPath, content, { mode: 0o600 }); // Read/write only for owner
43
+ }
44
+ /**
45
+ * Delete the configuration file
46
+ */
47
+ export function deleteConfigFile() {
48
+ const configPath = join(homedir(), CONFIG_FILE_NAME);
49
+ if (existsSync(configPath)) {
50
+ unlinkSync(configPath);
51
+ return true;
52
+ }
53
+ return false;
54
+ }
55
+ /**
56
+ * Get the path to the config file
57
+ */
58
+ export function getConfigPath() {
59
+ return join(homedir(), CONFIG_FILE_NAME);
60
+ }
61
+ /**
62
+ * Get default Kiln URL
63
+ */
64
+ export function getKilnUrl() {
65
+ const configFile = loadConfigFile();
66
+ return process.env.KILN_URL || configFile.url || DEFAULT_URL;
67
+ }
68
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAiBtE,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAC5C,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IAEpC,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,IAAI,WAAW;QAC1D,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK;KAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAe,CAAC;QAChD,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,4BAA4B;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,UAAU,CAAC,UAAU,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,IAAI,WAAW,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { Build, Worker, Workspace } from '@kilnci/shared';
2
+ /**
3
+ * Format a build status with color
4
+ */
5
+ export declare function formatStatus(status: string): string;
6
+ /**
7
+ * Format a date for display
8
+ */
9
+ export declare function formatDate(date: Date | string | null): string;
10
+ /**
11
+ * Format a date relative to now
12
+ */
13
+ export declare function formatRelativeDate(date: Date | string | null): string;
14
+ /**
15
+ * Truncate a string to a maximum length
16
+ */
17
+ export declare function truncate(str: string, maxLength: number): string;
18
+ /**
19
+ * Format a builds table
20
+ */
21
+ export declare function formatBuildsTable(builds: Build[]): string;
22
+ /**
23
+ * Format a single build for detailed view
24
+ */
25
+ export declare function formatBuildDetails(build: Build): string;
26
+ /**
27
+ * Format a workspaces table
28
+ */
29
+ export declare function formatWorkspacesTable(workspaces: Workspace[]): string;
30
+ /**
31
+ * Format a log line for display
32
+ */
33
+ export declare function formatLogLine(timestamp: Date, stream: string, line: string): string;
34
+ /**
35
+ * Format a worker status with color
36
+ */
37
+ export declare function formatWorkerStatus(status: string): string;
38
+ /**
39
+ * Format a workers table
40
+ */
41
+ export declare function formatWorkersTable(workers: Worker[]): string;
42
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAenD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAI7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAkBrE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAuBzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CA8BvD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAuBrE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAazD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAwB5D"}
@@ -0,0 +1,194 @@
1
+ import chalk from 'chalk';
2
+ import Table from 'cli-table3';
3
+ /**
4
+ * Format a build status with color
5
+ */
6
+ export function formatStatus(status) {
7
+ switch (status) {
8
+ case 'pending':
9
+ return chalk.yellow('pending');
10
+ case 'running':
11
+ return chalk.blue('running');
12
+ case 'success':
13
+ return chalk.green('success');
14
+ case 'failed':
15
+ return chalk.red('failed');
16
+ case 'cancelled':
17
+ return chalk.gray('cancelled');
18
+ default:
19
+ return status;
20
+ }
21
+ }
22
+ /**
23
+ * Format a date for display
24
+ */
25
+ export function formatDate(date) {
26
+ if (!date)
27
+ return '-';
28
+ const d = typeof date === 'string' ? new Date(date) : date;
29
+ return d.toLocaleString();
30
+ }
31
+ /**
32
+ * Format a date relative to now
33
+ */
34
+ export function formatRelativeDate(date) {
35
+ if (!date)
36
+ return '-';
37
+ const d = typeof date === 'string' ? new Date(date) : date;
38
+ const now = new Date();
39
+ const diff = now.getTime() - d.getTime();
40
+ if (diff < 60000) {
41
+ return 'just now';
42
+ }
43
+ else if (diff < 3600000) {
44
+ const minutes = Math.floor(diff / 60000);
45
+ return `${minutes}m ago`;
46
+ }
47
+ else if (diff < 86400000) {
48
+ const hours = Math.floor(diff / 3600000);
49
+ return `${hours}h ago`;
50
+ }
51
+ else {
52
+ const days = Math.floor(diff / 86400000);
53
+ return `${days}d ago`;
54
+ }
55
+ }
56
+ /**
57
+ * Truncate a string to a maximum length
58
+ */
59
+ export function truncate(str, maxLength) {
60
+ if (str.length <= maxLength)
61
+ return str;
62
+ return str.substring(0, maxLength - 3) + '...';
63
+ }
64
+ /**
65
+ * Format a builds table
66
+ */
67
+ export function formatBuildsTable(builds) {
68
+ const table = new Table({
69
+ head: [
70
+ chalk.bold('ID'),
71
+ chalk.bold('Status'),
72
+ chalk.bold('Repo'),
73
+ chalk.bold('Branch'),
74
+ chalk.bold('Created'),
75
+ ],
76
+ colWidths: [40, 12, 35, 15, 15],
77
+ });
78
+ for (const build of builds) {
79
+ table.push([
80
+ build.id,
81
+ formatStatus(build.status),
82
+ truncate(build.repo, 33),
83
+ truncate(build.branch, 13),
84
+ formatRelativeDate(build.createdAt),
85
+ ]);
86
+ }
87
+ return table.toString();
88
+ }
89
+ /**
90
+ * Format a single build for detailed view
91
+ */
92
+ export function formatBuildDetails(build) {
93
+ const lines = [
94
+ '',
95
+ `${chalk.bold('Build ID:')} ${build.id}`,
96
+ `${chalk.bold('Status:')} ${formatStatus(build.status)}`,
97
+ `${chalk.bold('Repository:')} ${build.repo}`,
98
+ `${chalk.bold('Branch:')} ${build.branch}`,
99
+ `${chalk.bold('Commands:')} ${build.commands?.join(', ') ?? chalk.dim('(from .kiln.yml)')}`,
100
+ '',
101
+ `${chalk.bold('Created:')} ${formatDate(build.createdAt)}`,
102
+ `${chalk.bold('Started:')} ${formatDate(build.startedAt)}`,
103
+ `${chalk.bold('Finished:')} ${formatDate(build.finishedAt)}`,
104
+ ];
105
+ if (build.workerId) {
106
+ lines.push(`${chalk.bold('Worker ID:')} ${build.workerId}`);
107
+ }
108
+ if (build.exitCode !== null) {
109
+ const exitCodeColor = build.exitCode === 0 ? chalk.green : chalk.red;
110
+ lines.push(`${chalk.bold('Exit Code:')} ${exitCodeColor(build.exitCode)}`);
111
+ }
112
+ if (build.errorMessage) {
113
+ lines.push(`${chalk.bold('Error:')} ${chalk.red(build.errorMessage)}`);
114
+ }
115
+ lines.push('');
116
+ return lines.join('\n');
117
+ }
118
+ /**
119
+ * Format a workspaces table
120
+ */
121
+ export function formatWorkspacesTable(workspaces) {
122
+ const table = new Table({
123
+ head: [
124
+ chalk.bold('ID'),
125
+ chalk.bold('Repo'),
126
+ chalk.bold('Branch'),
127
+ chalk.bold('Worker'),
128
+ chalk.bold('Last Used'),
129
+ ],
130
+ colWidths: [40, 35, 15, 12, 15],
131
+ });
132
+ for (const ws of workspaces) {
133
+ table.push([
134
+ ws.id,
135
+ truncate(ws.repo, 33),
136
+ truncate(ws.branch, 13),
137
+ truncate(ws.workerId, 10),
138
+ formatRelativeDate(ws.lastUsedAt),
139
+ ]);
140
+ }
141
+ return table.toString();
142
+ }
143
+ /**
144
+ * Format a log line for display
145
+ */
146
+ export function formatLogLine(timestamp, stream, line) {
147
+ const time = timestamp.toISOString().substring(11, 23);
148
+ const streamColor = stream === 'stderr' ? chalk.red : chalk.gray;
149
+ return `${chalk.gray(time)} ${streamColor(`[${stream}]`)} ${line}`;
150
+ }
151
+ /**
152
+ * Format a worker status with color
153
+ */
154
+ export function formatWorkerStatus(status) {
155
+ switch (status) {
156
+ case 'pending':
157
+ return chalk.blue('pending');
158
+ case 'online':
159
+ return chalk.green('online');
160
+ case 'busy':
161
+ return chalk.yellow('busy');
162
+ case 'offline':
163
+ return chalk.gray('offline');
164
+ default:
165
+ return status;
166
+ }
167
+ }
168
+ /**
169
+ * Format a workers table
170
+ */
171
+ export function formatWorkersTable(workers) {
172
+ const table = new Table({
173
+ head: [
174
+ chalk.bold('Name'),
175
+ chalk.bold('Status'),
176
+ chalk.bold('Hostname'),
177
+ chalk.bold('Builds'),
178
+ chalk.bold('Last Heartbeat'),
179
+ ],
180
+ colWidths: [20, 10, 25, 12, 18],
181
+ });
182
+ for (const worker of workers) {
183
+ const builds = `${worker.activeBuilds}/${worker.maxConcurrentBuilds}`;
184
+ table.push([
185
+ truncate(worker.name || worker.id, 18),
186
+ formatWorkerStatus(worker.status),
187
+ truncate(worker.hostname || '-', 23),
188
+ builds,
189
+ formatRelativeDate(worker.lastHeartbeatAt),
190
+ ]);
191
+ }
192
+ return table.toString();
193
+ }
194
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { loadConfig, getConfigPath, type Config } from './config.js';
2
+ export { ApiClient, LogStreamClient } from './client.js';
3
+ export * from './formatters.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // Kiln CLI - exports for programmatic usage
2
+ export { loadConfig, getConfigPath } from './config.js';
3
+ export { ApiClient, LogStreamClient } from './client.js';
4
+ export * from './formatters.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Helper functions for the workers commands.
3
+ * Extracted to a separate file for testability.
4
+ */
5
+ /**
6
+ * Convert a URL to be accessible from inside a Docker container.
7
+ * On macOS/Windows, localhost needs to become host.docker.internal.
8
+ */
9
+ export declare function toDockerAccessibleUrl(url: string): string;
10
+ /**
11
+ * Parse selector string into matchLabels object.
12
+ * Format: key=value or key1=value1,key2=value2
13
+ */
14
+ export declare function parseSelector(selectorStr: string): Record<string, string>;
15
+ /**
16
+ * Parse environment variable flags from CLI (format: KEY=VALUE).
17
+ * Returns a Record of key-value pairs.
18
+ */
19
+ export declare function parseEnvFlags(envFlags: string[]): Record<string, string>;
20
+ //# sourceMappingURL=workers-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/workers-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUzE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexE"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Helper functions for the workers commands.
3
+ * Extracted to a separate file for testability.
4
+ */
5
+ /**
6
+ * Convert a URL to be accessible from inside a Docker container.
7
+ * On macOS/Windows, localhost needs to become host.docker.internal.
8
+ */
9
+ export function toDockerAccessibleUrl(url) {
10
+ const parsed = new URL(url);
11
+ if (parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1') {
12
+ parsed.hostname = 'host.docker.internal';
13
+ }
14
+ return parsed.toString().replace(/\/$/, '');
15
+ }
16
+ /**
17
+ * Parse selector string into matchLabels object.
18
+ * Format: key=value or key1=value1,key2=value2
19
+ */
20
+ export function parseSelector(selectorStr) {
21
+ const matchLabels = {};
22
+ const pairs = selectorStr.split(',');
23
+ for (const pair of pairs) {
24
+ const [key, ...valueParts] = pair.split('=');
25
+ if (key && valueParts.length > 0) {
26
+ matchLabels[key.trim()] = valueParts.join('=').trim();
27
+ }
28
+ }
29
+ return matchLabels;
30
+ }
31
+ /**
32
+ * Parse environment variable flags from CLI (format: KEY=VALUE).
33
+ * Returns a Record of key-value pairs.
34
+ */
35
+ export function parseEnvFlags(envFlags) {
36
+ const result = {};
37
+ for (const envFlag of envFlags) {
38
+ const idx = envFlag.indexOf('=');
39
+ if (idx === -1) {
40
+ // No '=' found, skip this entry (invalid format)
41
+ continue;
42
+ }
43
+ const key = envFlag.slice(0, idx);
44
+ const value = envFlag.slice(idx + 1);
45
+ if (key) {
46
+ result[key] = value;
47
+ }
48
+ }
49
+ return result;
50
+ }
51
+ //# sourceMappingURL=workers-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers-helpers.js","sourceRoot":"","sources":["../../src/lib/workers-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACvE,MAAM,CAAC,QAAQ,GAAG,sBAAsB,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,iDAAiD;YACjD,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}