@calltelemetry/cli 0.4.26 → 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 (164) hide show
  1. package/dist/commands/diag.d.ts.map +1 -1
  2. package/dist/commands/diag.js +29 -0
  3. package/dist/commands/diag.js.map +1 -1
  4. package/dist/commands/k8s.d.ts +3 -0
  5. package/dist/commands/k8s.d.ts.map +1 -0
  6. package/dist/commands/k8s.js +192 -0
  7. package/dist/commands/k8s.js.map +1 -0
  8. package/dist/commands/network.d.ts +3 -0
  9. package/dist/commands/network.d.ts.map +1 -0
  10. package/dist/commands/network.js +120 -0
  11. package/dist/commands/network.js.map +1 -0
  12. package/dist/commands/shell.d.ts +3 -0
  13. package/dist/commands/shell.d.ts.map +1 -0
  14. package/dist/commands/shell.js +10 -0
  15. package/dist/commands/shell.js.map +1 -0
  16. package/dist/index.js +7 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/backend.d.ts +85 -0
  19. package/dist/lib/backend.d.ts.map +1 -0
  20. package/dist/lib/backend.js +6 -0
  21. package/dist/lib/backend.js.map +1 -0
  22. package/dist/lib/compose-backend.d.ts +19 -0
  23. package/dist/lib/compose-backend.d.ts.map +1 -0
  24. package/dist/lib/compose-backend.js +78 -0
  25. package/dist/lib/compose-backend.js.map +1 -0
  26. package/dist/lib/deployment.d.ts +6 -0
  27. package/dist/lib/deployment.d.ts.map +1 -0
  28. package/dist/lib/deployment.js +51 -0
  29. package/dist/lib/deployment.js.map +1 -0
  30. package/dist/lib/doctor.d.ts +13 -0
  31. package/dist/lib/doctor.d.ts.map +1 -0
  32. package/dist/lib/doctor.js +82 -0
  33. package/dist/lib/doctor.js.map +1 -0
  34. package/dist/lib/helmfile.d.ts +14 -0
  35. package/dist/lib/helmfile.d.ts.map +1 -0
  36. package/dist/lib/helmfile.js +78 -0
  37. package/dist/lib/helmfile.js.map +1 -0
  38. package/dist/lib/k8s-backend.d.ts +36 -0
  39. package/dist/lib/k8s-backend.d.ts.map +1 -0
  40. package/dist/lib/k8s-backend.js +301 -0
  41. package/dist/lib/k8s-backend.js.map +1 -0
  42. package/dist/lib/k8s-client.d.ts +14 -0
  43. package/dist/lib/k8s-client.d.ts.map +1 -0
  44. package/dist/lib/k8s-client.js +42 -0
  45. package/dist/lib/k8s-client.js.map +1 -0
  46. package/dist/lib/prefs.d.ts +3 -0
  47. package/dist/lib/prefs.d.ts.map +1 -1
  48. package/dist/lib/prefs.js +9 -1
  49. package/dist/lib/prefs.js.map +1 -1
  50. package/dist/shell/commands/config.d.ts +11 -0
  51. package/dist/shell/commands/config.d.ts.map +1 -0
  52. package/dist/shell/commands/config.js +193 -0
  53. package/dist/shell/commands/config.js.map +1 -0
  54. package/dist/shell/commands/connect.d.ts +18 -0
  55. package/dist/shell/commands/connect.d.ts.map +1 -0
  56. package/dist/shell/commands/connect.js +99 -0
  57. package/dist/shell/commands/connect.js.map +1 -0
  58. package/dist/shell/commands/db.d.ts +11 -0
  59. package/dist/shell/commands/db.d.ts.map +1 -0
  60. package/dist/shell/commands/db.js +237 -0
  61. package/dist/shell/commands/db.js.map +1 -0
  62. package/dist/shell/commands/debug.d.ts +15 -0
  63. package/dist/shell/commands/debug.d.ts.map +1 -0
  64. package/dist/shell/commands/debug.js +310 -0
  65. package/dist/shell/commands/debug.js.map +1 -0
  66. package/dist/shell/commands/diag.d.ts +16 -0
  67. package/dist/shell/commands/diag.d.ts.map +1 -0
  68. package/dist/shell/commands/diag.js +555 -0
  69. package/dist/shell/commands/diag.js.map +1 -0
  70. package/dist/shell/commands/registry.d.ts +7 -0
  71. package/dist/shell/commands/registry.d.ts.map +1 -0
  72. package/dist/shell/commands/registry.js +391 -0
  73. package/dist/shell/commands/registry.js.map +1 -0
  74. package/dist/shell/commands/secrets.d.ts +18 -0
  75. package/dist/shell/commands/secrets.d.ts.map +1 -0
  76. package/dist/shell/commands/secrets.js +100 -0
  77. package/dist/shell/commands/secrets.js.map +1 -0
  78. package/dist/shell/commands/services.d.ts +7 -0
  79. package/dist/shell/commands/services.d.ts.map +1 -0
  80. package/dist/shell/commands/services.js +115 -0
  81. package/dist/shell/commands/services.js.map +1 -0
  82. package/dist/shell/commands/show.d.ts +26 -0
  83. package/dist/shell/commands/show.d.ts.map +1 -0
  84. package/dist/shell/commands/show.js +897 -0
  85. package/dist/shell/commands/show.js.map +1 -0
  86. package/dist/shell/commands/system.d.ts +13 -0
  87. package/dist/shell/commands/system.d.ts.map +1 -0
  88. package/dist/shell/commands/system.js +270 -0
  89. package/dist/shell/commands/system.js.map +1 -0
  90. package/dist/shell/commands/test.d.ts +12 -0
  91. package/dist/shell/commands/test.d.ts.map +1 -0
  92. package/dist/shell/commands/test.js +197 -0
  93. package/dist/shell/commands/test.js.map +1 -0
  94. package/dist/shell/commands/users.d.ts +14 -0
  95. package/dist/shell/commands/users.d.ts.map +1 -0
  96. package/dist/shell/commands/users.js +86 -0
  97. package/dist/shell/commands/users.js.map +1 -0
  98. package/dist/shell/completer.d.ts +16 -0
  99. package/dist/shell/completer.d.ts.map +1 -0
  100. package/dist/shell/completer.js +124 -0
  101. package/dist/shell/completer.js.map +1 -0
  102. package/dist/shell/context.d.ts +12 -0
  103. package/dist/shell/context.d.ts.map +1 -0
  104. package/dist/shell/context.js +2 -0
  105. package/dist/shell/context.js.map +1 -0
  106. package/dist/shell/footer.d.ts +8 -0
  107. package/dist/shell/footer.d.ts.map +1 -0
  108. package/dist/shell/footer.js +47 -0
  109. package/dist/shell/footer.js.map +1 -0
  110. package/dist/shell/formatter.d.ts +47 -0
  111. package/dist/shell/formatter.d.ts.map +1 -0
  112. package/dist/shell/formatter.js +135 -0
  113. package/dist/shell/formatter.js.map +1 -0
  114. package/dist/shell/mcp-bridge.d.ts +13 -0
  115. package/dist/shell/mcp-bridge.d.ts.map +1 -0
  116. package/dist/shell/mcp-bridge.js +23 -0
  117. package/dist/shell/mcp-bridge.js.map +1 -0
  118. package/dist/shell/parser.d.ts +33 -0
  119. package/dist/shell/parser.d.ts.map +1 -0
  120. package/dist/shell/parser.js +100 -0
  121. package/dist/shell/parser.js.map +1 -0
  122. package/dist/shell/repl.d.ts +5 -0
  123. package/dist/shell/repl.d.ts.map +1 -0
  124. package/dist/shell/repl.js +251 -0
  125. package/dist/shell/repl.js.map +1 -0
  126. package/dist/shell/sparkline.d.ts +16 -0
  127. package/dist/shell/sparkline.d.ts.map +1 -0
  128. package/dist/shell/sparkline.js +56 -0
  129. package/dist/shell/sparkline.js.map +1 -0
  130. package/dist/shell/theme.d.ts +72 -0
  131. package/dist/shell/theme.d.ts.map +1 -0
  132. package/dist/shell/theme.js +60 -0
  133. package/dist/shell/theme.js.map +1 -0
  134. package/dist/ui/views/DbHealthView.d.ts +6 -0
  135. package/dist/ui/views/DbHealthView.d.ts.map +1 -0
  136. package/dist/ui/views/DbHealthView.js +180 -0
  137. package/dist/ui/views/DbHealthView.js.map +1 -0
  138. package/dist/ui/views/K8sDeployView.d.ts +8 -0
  139. package/dist/ui/views/K8sDeployView.d.ts.map +1 -0
  140. package/dist/ui/views/K8sDeployView.js +81 -0
  141. package/dist/ui/views/K8sDeployView.js.map +1 -0
  142. package/dist/ui/views/K8sRunbookView.d.ts +8 -0
  143. package/dist/ui/views/K8sRunbookView.d.ts.map +1 -0
  144. package/dist/ui/views/K8sRunbookView.js +181 -0
  145. package/dist/ui/views/K8sRunbookView.js.map +1 -0
  146. package/dist/ui/views/K8sServicesView.d.ts +8 -0
  147. package/dist/ui/views/K8sServicesView.d.ts.map +1 -0
  148. package/dist/ui/views/K8sServicesView.js +106 -0
  149. package/dist/ui/views/K8sServicesView.js.map +1 -0
  150. package/dist/ui/views/K8sStatusView.d.ts +8 -0
  151. package/dist/ui/views/K8sStatusView.d.ts.map +1 -0
  152. package/dist/ui/views/K8sStatusView.js +135 -0
  153. package/dist/ui/views/K8sStatusView.js.map +1 -0
  154. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  155. package/dist/ui/views/MainMenu.js +54 -24
  156. package/dist/ui/views/MainMenu.js.map +1 -1
  157. package/dist/ui/views/SettingsView.d.ts.map +1 -1
  158. package/dist/ui/views/SettingsView.js +19 -1
  159. package/dist/ui/views/SettingsView.js.map +1 -1
  160. package/dist/ui/views/SetupWizardView.d.ts +7 -0
  161. package/dist/ui/views/SetupWizardView.d.ts.map +1 -0
  162. package/dist/ui/views/SetupWizardView.js +244 -0
  163. package/dist/ui/views/SetupWizardView.js.map +1 -0
  164. package/package.json +2 -1
@@ -0,0 +1,19 @@
1
+ import type { DeploymentBackend, ServiceInfo, HealthResult } from './backend.js';
2
+ export declare class ComposeBackend implements DeploymentBackend {
3
+ readonly mode: "docker-compose";
4
+ listServices(): Promise<ServiceInfo[]>;
5
+ startService(name: string): Promise<void>;
6
+ stopService(name: string): Promise<void>;
7
+ restartService(name: string): Promise<void>;
8
+ startAll(): Promise<void>;
9
+ stopAll(): Promise<void>;
10
+ getLogs(service: string, lines?: number): Promise<string>;
11
+ getHealth(): Promise<HealthResult>;
12
+ exec(service: string, command: string[], opts?: {
13
+ pipe?: boolean;
14
+ }): Promise<{
15
+ stdout: string;
16
+ exitCode: number;
17
+ }>;
18
+ }
19
+ //# sourceMappingURL=compose-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-backend.d.ts","sourceRoot":"","sources":["../../src/lib/compose-backend.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjF,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;IAEpC,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAUtC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9D,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IA0BlC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAOzH"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * ComposeBackend — wraps existing compose.ts, services.ts, and rpc.ts
3
+ * into the DeploymentBackend interface. No changes to original files.
4
+ */
5
+ import { compose, composeExec } from './compose.js';
6
+ import { getServiceList, startService as composeStartService, stopService as composeStopService, restartService as composeRestartService, startAllServices, stopAllServices, } from './services.js';
7
+ import { getAppHealth } from './rpc.js';
8
+ export class ComposeBackend {
9
+ mode = 'docker-compose';
10
+ async listServices() {
11
+ const list = await getServiceList();
12
+ return list.map(s => ({
13
+ name: s.service,
14
+ status: s.state,
15
+ ready: s.health || s.state,
16
+ image: s.image,
17
+ }));
18
+ }
19
+ async startService(name) {
20
+ await composeStartService(name);
21
+ }
22
+ async stopService(name) {
23
+ await composeStopService(name);
24
+ }
25
+ async restartService(name) {
26
+ await composeRestartService(name);
27
+ }
28
+ async startAll() {
29
+ await startAllServices();
30
+ }
31
+ async stopAll() {
32
+ await stopAllServices();
33
+ }
34
+ async getLogs(service, lines = 100) {
35
+ const result = await compose(['logs', '--tail', String(lines), service], { pipe: true });
36
+ return result.stdout ?? '';
37
+ }
38
+ async getHealth() {
39
+ const h = await getAppHealth();
40
+ const errors = {};
41
+ if (h.apiError)
42
+ errors.api = h.apiError;
43
+ if (h.curriError)
44
+ errors.curri = h.curriError;
45
+ if (h.rpcError)
46
+ errors.rpc = h.rpcError;
47
+ if (h.dbError)
48
+ errors.db = h.dbError;
49
+ if (h.dbDirectError)
50
+ errors.dbDirect = h.dbDirectError;
51
+ if (h.curriProxyError)
52
+ errors.curriProxy = h.curriProxyError;
53
+ if (h.adminProxyError)
54
+ errors.adminProxy = h.adminProxyError;
55
+ if (h.sftpError)
56
+ errors.sftp = h.sftpError;
57
+ return {
58
+ api: h.api,
59
+ curri: h.curri,
60
+ rpc: h.rpc,
61
+ dbConnected: h.dbConnected,
62
+ dbDirect: h.dbDirect,
63
+ curriProxy: h.curriProxy,
64
+ adminProxy: h.adminProxy,
65
+ sftp: h.sftp,
66
+ overall: h.overall,
67
+ errors,
68
+ };
69
+ }
70
+ async exec(service, command, opts) {
71
+ const result = await composeExec(service, command, { pipe: opts?.pipe ?? true });
72
+ return {
73
+ stdout: result.stdout ?? '',
74
+ exitCode: result.exitCode ?? 0,
75
+ };
76
+ }
77
+ }
78
+ //# sourceMappingURL=compose-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-backend.js","sourceRoot":"","sources":["../../src/lib/compose-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DeploymentBackend } from './backend.js';
2
+ export type DeploymentMode = 'docker-compose' | 'k3s';
3
+ export declare function detectDeploymentMode(): DeploymentMode;
4
+ export declare function getBackend(): Promise<DeploymentBackend>;
5
+ export declare function resetBackendCache(): void;
6
+ //# sourceMappingURL=deployment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,KAAK,CAAC;AAItD,wBAAgB,oBAAoB,IAAI,cAAc,CAwBrD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAgB7D;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Deployment mode detection and backend factory.
3
+ * Auto-detects Docker Compose vs K8s, with user preference override.
4
+ */
5
+ import { existsSync } from 'node:fs';
6
+ import { isKubeConfigAvailable } from './k8s-client.js';
7
+ import { getPrefs } from './prefs.js';
8
+ import { getPaths } from './paths.js';
9
+ import { debug } from './log.js';
10
+ let cachedBackend = null;
11
+ export function detectDeploymentMode() {
12
+ const prefs = getPrefs();
13
+ // User override from preferences
14
+ if (prefs.deploymentMode && prefs.deploymentMode !== 'docker-compose') {
15
+ debug(`Deployment mode from prefs: ${prefs.deploymentMode}`);
16
+ return prefs.deploymentMode;
17
+ }
18
+ // Auto-detect: k3s marker + kubeconfig available
19
+ if (existsSync('/etc/rancher/k3s') && isKubeConfigAvailable()) {
20
+ debug('Auto-detected k3s deployment mode');
21
+ return 'k3s';
22
+ }
23
+ // Fallback: docker-compose
24
+ const { composeFile } = getPaths();
25
+ if (existsSync(composeFile)) {
26
+ debug('Auto-detected docker-compose deployment mode');
27
+ return 'docker-compose';
28
+ }
29
+ debug('No deployment mode detected, defaulting to docker-compose');
30
+ return 'docker-compose';
31
+ }
32
+ export async function getBackend() {
33
+ if (cachedBackend)
34
+ return cachedBackend;
35
+ const mode = detectDeploymentMode();
36
+ if (mode === 'k3s') {
37
+ const { K8sBackend } = await import('./k8s-backend.js');
38
+ const prefs = getPrefs();
39
+ cachedBackend = new K8sBackend(prefs.k8sNamespace ?? 'ct');
40
+ }
41
+ else {
42
+ const { ComposeBackend } = await import('./compose-backend.js');
43
+ cachedBackend = new ComposeBackend();
44
+ }
45
+ debug(`Using ${mode} backend`);
46
+ return cachedBackend;
47
+ }
48
+ export function resetBackendCache() {
49
+ cachedBackend = null;
50
+ }
51
+ //# sourceMappingURL=deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAKjC,IAAI,aAAa,GAA6B,IAAI,CAAC;AAEnD,MAAM,UAAU,oBAAoB;IAClC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,iCAAiC;IACjC,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,KAAK,gBAAgB,EAAE,CAAC;QACtE,KAAK,CAAC,+BAA+B,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC,cAAc,CAAC;IAC9B,CAAC;IAED,iDAAiD;IACjD,IAAI,UAAU,CAAC,kBAAkB,CAAC,IAAI,qBAAqB,EAAE,EAAE,CAAC;QAC9D,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2BAA2B;IAC3B,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC;IACnC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACtD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACnE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IAEpC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,aAAa,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAChE,aAAa,GAAG,IAAI,cAAc,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC,CAAC;IAC/B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface DoctorCheck {
2
+ tool: string;
3
+ label: string;
4
+ status: 'ok' | 'missing' | 'error';
5
+ version?: string;
6
+ hint?: string;
7
+ }
8
+ export interface DoctorResult {
9
+ checks: DoctorCheck[];
10
+ allPassed: boolean;
11
+ }
12
+ export declare function runK8sDoctorChecks(): Promise<DoctorResult>;
13
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAsBD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CA6EhE"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * K8s prerequisite checker — validates that required tools are installed
3
+ * for Kubernetes deployment mode (kubectl, helm, helmfile, etc.).
4
+ */
5
+ import { existsSync } from 'node:fs';
6
+ import { exec } from './exec.js';
7
+ import { isKubeConfigAvailable } from './k8s-client.js';
8
+ import { resolveHelmfilePath } from './helmfile.js';
9
+ async function checkTool(tool, label, cmd, args, hint, parseVersion) {
10
+ try {
11
+ const result = await exec(cmd, args);
12
+ const stdout = String(result.stdout ?? '');
13
+ const version = parseVersion
14
+ ? parseVersion(stdout)
15
+ : stdout.trim().split('\n')[0];
16
+ return { tool, label, status: 'ok', version };
17
+ }
18
+ catch {
19
+ return { tool, label, status: 'missing', hint };
20
+ }
21
+ }
22
+ export async function runK8sDoctorChecks() {
23
+ const checks = [];
24
+ // 1. kubectl
25
+ checks.push(await checkTool('kubectl', 'kubectl', 'kubectl', ['version', '--client', '--short'], 'Install kubectl: https://kubernetes.io/docs/tasks/tools/', (out) => out.replace(/^Client Version:\s*/i, '').trim()));
26
+ // 2. helm
27
+ checks.push(await checkTool('helm', 'helm', 'helm', ['version', '--short'], 'Install helm: https://helm.sh/docs/intro/install/', (out) => out.trim()));
28
+ // 3. helmfile
29
+ checks.push(await checkTool('helmfile', 'helmfile', 'helmfile', ['version'], 'Install helmfile: https://github.com/helmfile/helmfile', (out) => out.trim()));
30
+ // 4. helm-diff plugin
31
+ try {
32
+ const result = await exec('helm', ['plugin', 'list']);
33
+ const stdout = String(result.stdout ?? '');
34
+ const lines = stdout.split('\n');
35
+ const diffLine = lines.find((l) => /^diff\s/.test(l));
36
+ if (diffLine) {
37
+ const version = diffLine.split(/\s+/)[1] ?? 'installed';
38
+ checks.push({ tool: 'helm-diff', label: 'helm-diff', status: 'ok', version });
39
+ }
40
+ else {
41
+ checks.push({
42
+ tool: 'helm-diff', label: 'helm-diff', status: 'missing',
43
+ hint: 'Run: helm plugin install https://github.com/databus23/helm-diff',
44
+ });
45
+ }
46
+ }
47
+ catch {
48
+ checks.push({
49
+ tool: 'helm-diff', label: 'helm-diff', status: 'missing',
50
+ hint: 'Run: helm plugin install https://github.com/databus23/helm-diff',
51
+ });
52
+ }
53
+ // 5. kubeconfig
54
+ if (isKubeConfigAvailable()) {
55
+ checks.push({ tool: 'kubeconfig', label: 'kubeconfig', status: 'ok', version: 'available' });
56
+ }
57
+ else {
58
+ checks.push({
59
+ tool: 'kubeconfig', label: 'kubeconfig', status: 'missing',
60
+ hint: 'No kubeconfig found at ~/.kube/config',
61
+ });
62
+ }
63
+ // 6. helmfile.yaml
64
+ const helmfilePath = resolveHelmfilePath();
65
+ if (existsSync(helmfilePath)) {
66
+ checks.push({
67
+ tool: 'helmfile.yaml', label: 'helmfile.yaml', status: 'ok',
68
+ version: helmfilePath.split('/').slice(-2).join('/'),
69
+ });
70
+ }
71
+ else {
72
+ checks.push({
73
+ tool: 'helmfile.yaml', label: 'helmfile.yaml', status: 'missing',
74
+ hint: 'helmfile.yaml not found — place at k8s/helmfile.yaml',
75
+ });
76
+ }
77
+ return {
78
+ checks,
79
+ allPassed: checks.every(c => c.status === 'ok'),
80
+ };
81
+ }
82
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type HelmfileEnvironment = 'ct-dev' | 'ct-prod' | 'ct-test';
2
+ export interface HelmfileOpts {
3
+ helmfilePath: string;
4
+ environment: HelmfileEnvironment;
5
+ selector?: string;
6
+ }
7
+ export declare function detectHelmfile(): Promise<boolean>;
8
+ export declare function resolveHelmfilePath(): string;
9
+ export declare function helmfileSync(opts: HelmfileOpts): Promise<void>;
10
+ export declare function helmfileApply(opts: HelmfileOpts): Promise<void>;
11
+ export declare function helmfileDiff(opts: HelmfileOpts): Promise<string>;
12
+ export declare function helmfileDestroy(opts: HelmfileOpts): Promise<void>;
13
+ export declare function helmfileStatus(opts: HelmfileOpts): Promise<string>;
14
+ //# sourceMappingURL=helmfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helmfile.d.ts","sourceRoot":"","sources":["../../src/lib/helmfile.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,mBAAmB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAWD,wBAAgB,mBAAmB,IAAI,MAAM,CAY5C;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAOrE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAMtE;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAMxE"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Helmfile abstraction layer — manages K8s deployments via helmfile binary.
3
+ * Uses existing k8s/helmfile.yaml with --environment ct-dev|ct-prod|ct-test.
4
+ */
5
+ import { existsSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { execa } from 'execa';
8
+ import { exec } from './exec.js';
9
+ import { debug } from './log.js';
10
+ import { getPaths } from './paths.js';
11
+ export async function detectHelmfile() {
12
+ try {
13
+ await exec('helmfile', ['version']);
14
+ return true;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ function helmfileArgs(opts, action, extra = []) {
21
+ const args = ['-f', opts.helmfilePath, '--environment', opts.environment];
22
+ if (opts.selector) {
23
+ args.push('--selector', opts.selector);
24
+ }
25
+ args.push(action, ...extra);
26
+ return args;
27
+ }
28
+ export function resolveHelmfilePath() {
29
+ const { installDir } = getPaths();
30
+ // Production helmfile
31
+ const prodPath = join(installDir, 'k8s', 'helmfile.yaml');
32
+ if (existsSync(prodPath))
33
+ return prodPath;
34
+ // Dev helmfile (gotmpl)
35
+ const devPath = join(installDir, 'k8s-dev', 'helmfile.yaml.gotmpl');
36
+ if (existsSync(devPath))
37
+ return devPath;
38
+ return prodPath; // default even if not found yet
39
+ }
40
+ export async function helmfileSync(opts) {
41
+ debug(`helmfile sync: env=${opts.environment} file=${opts.helmfilePath}`);
42
+ await execa('helmfile', helmfileArgs(opts, 'sync'), {
43
+ cwd: join(opts.helmfilePath, '..', '..'),
44
+ stdout: 'inherit',
45
+ stderr: 'inherit',
46
+ });
47
+ }
48
+ export async function helmfileApply(opts) {
49
+ debug(`helmfile apply: env=${opts.environment} file=${opts.helmfilePath}`);
50
+ await execa('helmfile', helmfileArgs(opts, 'apply'), {
51
+ cwd: join(opts.helmfilePath, '..', '..'),
52
+ stdout: 'inherit',
53
+ stderr: 'inherit',
54
+ });
55
+ }
56
+ export async function helmfileDiff(opts) {
57
+ debug(`helmfile diff: env=${opts.environment} file=${opts.helmfilePath}`);
58
+ const result = await execa('helmfile', helmfileArgs(opts, 'diff'), {
59
+ cwd: join(opts.helmfilePath, '..', '..'),
60
+ });
61
+ return result.stdout ?? '';
62
+ }
63
+ export async function helmfileDestroy(opts) {
64
+ debug(`helmfile destroy: env=${opts.environment} file=${opts.helmfilePath}`);
65
+ await execa('helmfile', helmfileArgs(opts, 'destroy'), {
66
+ cwd: join(opts.helmfilePath, '..', '..'),
67
+ stdout: 'inherit',
68
+ stderr: 'inherit',
69
+ });
70
+ }
71
+ export async function helmfileStatus(opts) {
72
+ debug(`helmfile status: env=${opts.environment} file=${opts.helmfilePath}`);
73
+ const result = await execa('helmfile', helmfileArgs(opts, 'status'), {
74
+ cwd: join(opts.helmfilePath, '..', '..'),
75
+ });
76
+ return result.stdout ?? '';
77
+ }
78
+ //# sourceMappingURL=helmfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helmfile.js","sourceRoot":"","sources":["../../src/lib/helmfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { DeploymentBackend, ServiceInfo, HealthResult, NodeInfo, HelmRelease, CnpgClusterStatus } from './backend.js';
2
+ export declare class K8sBackend implements DeploymentBackend {
3
+ private namespace;
4
+ readonly mode: "k3s";
5
+ constructor(namespace?: string);
6
+ listServices(): Promise<ServiceInfo[]>;
7
+ startService(_name: string): Promise<void>;
8
+ stopService(name: string): Promise<void>;
9
+ restartService(name: string): Promise<void>;
10
+ startAll(): Promise<void>;
11
+ stopAll(): Promise<void>;
12
+ getLogs(service: string, lines?: number): Promise<string>;
13
+ getHealth(): Promise<HealthResult>;
14
+ exec(service: string, command: string[]): Promise<{
15
+ stdout: string;
16
+ exitCode: number;
17
+ }>;
18
+ getNodes(): Promise<NodeInfo[]>;
19
+ scaleService(name: string, replicas: number): Promise<void>;
20
+ getHelmReleases(): Promise<HelmRelease[]>;
21
+ getCnpgClusterStatus(): Promise<CnpgClusterStatus>;
22
+ getPVCs(): Promise<Array<{
23
+ name: string;
24
+ status: string;
25
+ size: string;
26
+ storageClass: string;
27
+ }>>;
28
+ private healthCheck;
29
+ private findPodByLabel;
30
+ private execPod;
31
+ private podReadiness;
32
+ private podAge;
33
+ private nodeReady;
34
+ private nodeRoles;
35
+ }
36
+ //# sourceMappingURL=k8s-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s-backend.d.ts","sourceRoot":"","sources":["../../src/lib/k8s-backend.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAatB,qBAAa,UAAW,YAAW,iBAAiB;IAGtC,OAAO,CAAC,SAAS;IAF7B,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;gBAEX,SAAS,GAAE,MAAa;IAEtC,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAYtC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B3C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAY9D,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IA4DlC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAMvF,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAU/B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3D,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAkBzC,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAyBlD,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;YAYvF,WAAW;YAaX,cAAc;YAiBd,OAAO;IA+BrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,SAAS;CAUlB"}