@calltelemetry/cli 0.3.0 → 0.3.2

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 (107) hide show
  1. package/dist/index.js +3 -11
  2. package/dist/index.js.map +1 -1
  3. package/dist/lib/brand.d.ts +2 -0
  4. package/dist/lib/brand.d.ts.map +1 -0
  5. package/dist/lib/brand.js +7 -0
  6. package/dist/lib/brand.js.map +1 -0
  7. package/dist/ui/components/AppShell.d.ts +4 -1
  8. package/dist/ui/components/AppShell.d.ts.map +1 -1
  9. package/dist/ui/components/AppShell.js +17 -3
  10. package/dist/ui/components/AppShell.js.map +1 -1
  11. package/dist/ui/components/Confirm.js +2 -2
  12. package/dist/ui/components/Confirm.js.map +1 -1
  13. package/dist/ui/components/SelectMenu.d.ts +1 -6
  14. package/dist/ui/components/SelectMenu.d.ts.map +1 -1
  15. package/dist/ui/components/SelectMenu.js +7 -1
  16. package/dist/ui/components/SelectMenu.js.map +1 -1
  17. package/dist/ui/components/index.d.ts +1 -1
  18. package/dist/ui/components/index.d.ts.map +1 -1
  19. package/dist/ui/utils/serviceDisplay.js +3 -3
  20. package/dist/ui/views/CertsStatusView.d.ts.map +1 -1
  21. package/dist/ui/views/CertsStatusView.js +6 -17
  22. package/dist/ui/views/CertsStatusView.js.map +1 -1
  23. package/dist/ui/views/DbBackupView.d.ts.map +1 -1
  24. package/dist/ui/views/DbBackupView.js +3 -10
  25. package/dist/ui/views/DbBackupView.js.map +1 -1
  26. package/dist/ui/views/DbCompactView.d.ts.map +1 -1
  27. package/dist/ui/views/DbCompactView.js +2 -10
  28. package/dist/ui/views/DbCompactView.js.map +1 -1
  29. package/dist/ui/views/DbListView.d.ts.map +1 -1
  30. package/dist/ui/views/DbListView.js +4 -15
  31. package/dist/ui/views/DbListView.js.map +1 -1
  32. package/dist/ui/views/DbSizeView.d.ts.map +1 -1
  33. package/dist/ui/views/DbSizeView.js +2 -13
  34. package/dist/ui/views/DbSizeView.js.map +1 -1
  35. package/dist/ui/views/DbStatusView.d.ts.map +1 -1
  36. package/dist/ui/views/DbStatusView.js +3 -12
  37. package/dist/ui/views/DbStatusView.js.map +1 -1
  38. package/dist/ui/views/DbTablesView.d.ts.map +1 -1
  39. package/dist/ui/views/DbTablesView.js +2 -11
  40. package/dist/ui/views/DbTablesView.js.map +1 -1
  41. package/dist/ui/views/DiagDatabaseView.d.ts.map +1 -1
  42. package/dist/ui/views/DiagDatabaseView.js +3 -12
  43. package/dist/ui/views/DiagDatabaseView.js.map +1 -1
  44. package/dist/ui/views/DiagNetworkView.d.ts.map +1 -1
  45. package/dist/ui/views/DiagNetworkView.js +6 -16
  46. package/dist/ui/views/DiagNetworkView.js.map +1 -1
  47. package/dist/ui/views/DiagServiceView.d.ts.map +1 -1
  48. package/dist/ui/views/DiagServiceView.js +2 -11
  49. package/dist/ui/views/DiagServiceView.js.map +1 -1
  50. package/dist/ui/views/DockerNetworkView.d.ts.map +1 -1
  51. package/dist/ui/views/DockerNetworkView.js +20 -31
  52. package/dist/ui/views/DockerNetworkView.js.map +1 -1
  53. package/dist/ui/views/DockerPruneView.d.ts.map +1 -1
  54. package/dist/ui/views/DockerPruneView.js +16 -16
  55. package/dist/ui/views/DockerPruneView.js.map +1 -1
  56. package/dist/ui/views/DockerStatusView.d.ts.map +1 -1
  57. package/dist/ui/views/DockerStatusView.js +2 -14
  58. package/dist/ui/views/DockerStatusView.js.map +1 -1
  59. package/dist/ui/views/JtapiDisableView.d.ts.map +1 -1
  60. package/dist/ui/views/JtapiDisableView.js +3 -10
  61. package/dist/ui/views/JtapiDisableView.js.map +1 -1
  62. package/dist/ui/views/JtapiEnableView.d.ts.map +1 -1
  63. package/dist/ui/views/JtapiEnableView.js +4 -15
  64. package/dist/ui/views/JtapiEnableView.js.map +1 -1
  65. package/dist/ui/views/JtapiStatusView.d.ts.map +1 -1
  66. package/dist/ui/views/JtapiStatusView.js +3 -16
  67. package/dist/ui/views/JtapiStatusView.js.map +1 -1
  68. package/dist/ui/views/JtapiTroubleshootView.d.ts.map +1 -1
  69. package/dist/ui/views/JtapiTroubleshootView.js +4 -14
  70. package/dist/ui/views/JtapiTroubleshootView.js.map +1 -1
  71. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  72. package/dist/ui/views/MainMenu.js +64 -203
  73. package/dist/ui/views/MainMenu.js.map +1 -1
  74. package/dist/ui/views/MigrateHistoryView.d.ts.map +1 -1
  75. package/dist/ui/views/MigrateHistoryView.js +2 -11
  76. package/dist/ui/views/MigrateHistoryView.js.map +1 -1
  77. package/dist/ui/views/MigrateRollbackView.d.ts.map +1 -1
  78. package/dist/ui/views/MigrateRollbackView.js +16 -13
  79. package/dist/ui/views/MigrateRollbackView.js.map +1 -1
  80. package/dist/ui/views/MigrateRunView.d.ts.map +1 -1
  81. package/dist/ui/views/MigrateRunView.js +16 -13
  82. package/dist/ui/views/MigrateRunView.js.map +1 -1
  83. package/dist/ui/views/MigrateStatusView.d.ts.map +1 -1
  84. package/dist/ui/views/MigrateStatusView.js +2 -10
  85. package/dist/ui/views/MigrateStatusView.js.map +1 -1
  86. package/dist/ui/views/MigrateWatchView.d.ts.map +1 -1
  87. package/dist/ui/views/MigrateWatchView.js +4 -11
  88. package/dist/ui/views/MigrateWatchView.js.map +1 -1
  89. package/dist/ui/views/OfflineListView.d.ts.map +1 -1
  90. package/dist/ui/views/OfflineListView.js +5 -16
  91. package/dist/ui/views/OfflineListView.js.map +1 -1
  92. package/dist/ui/views/SecretsSetupView.d.ts.map +1 -1
  93. package/dist/ui/views/SecretsSetupView.js +2 -10
  94. package/dist/ui/views/SecretsSetupView.js.map +1 -1
  95. package/dist/ui/views/SecretsStatusView.d.ts.map +1 -1
  96. package/dist/ui/views/SecretsStatusView.js +5 -19
  97. package/dist/ui/views/SecretsStatusView.js.map +1 -1
  98. package/dist/ui/views/ServiceLogsView.js +9 -7
  99. package/dist/ui/views/ServiceLogsView.js.map +1 -1
  100. package/dist/ui/views/ServicesView.js +1 -1
  101. package/dist/ui/views/ServicesView.js.map +1 -1
  102. package/dist/ui/views/StatusView.js +1 -1
  103. package/dist/ui/views/StatusView.js.map +1 -1
  104. package/dist/ui/views/UpdateView.d.ts.map +1 -1
  105. package/dist/ui/views/UpdateView.js +24 -28
  106. package/dist/ui/views/UpdateView.js.map +1 -1
  107. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"JtapiDisableView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiDisableView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAO7D,MAAM,UAAU,gBAAgB,CAAC,EAAE,MAAM,EAAyB;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,eAAe,GAAG,CAAC,cAAc,EAAE,CAAC;IAE1C,MAAM,KAAK,GAAW;QACpB;YACE,KAAK,EAAE,oBAAoB;YAC3B,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,kBAAkB,CAAC;gBAC5B,CAAC;gBACD,OAAO,iCAAiC,CAAC;YAC3C,CAAC;SACF;QACD;YACE,KAAK,EAAE,8BAA8B;YACrC,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACzE,OAAO,SAAS,CAAC;YACnB,CAAC;SACF;QACD;YACE,KAAK,EAAE,mBAAmB;YAC1B,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,YAAY,EAAE,CAAC;gBACrB,OAAO,SAAS,CAAC;YACnB,CAAC;SACF;QACD;YACE,KAAK,EAAE,kCAAkC;YACzC,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,OAAO,WAAW,CAAC;YACrB,CAAC;SACF;KACF,CAAC;IAEF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,MAAM,IAAI,CAAC,MAAM;QAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEhF,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;YAAE,MAAM,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAC,kBAAkB,aAClC,KAAC,OAAO,IAAC,KAAK,EAAC,eAAe,YAC5B,KAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,GAAI,GACnB,EACT,MAAM,IAAI,CACT,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,OAAO,KAAG,EACX,KAAC,UAAU,IACT,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EACvC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,wBAAwB,GAC/E,IACE,CACP,EACA,MAAM,IAAI,MAAM,IAAI,CACnB,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAChC,KAAC,IAAI,IAAC,QAAQ,yCAA0B,GACpC,CACP,IACQ,CACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"JtapiDisableView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiDisableView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOlD,MAAM,UAAU,gBAAgB,CAAC,EAAE,MAAM,EAAyB;IAChE,MAAM,eAAe,GAAG,CAAC,cAAc,EAAE,CAAC;IAE1C,MAAM,KAAK,GAAW;QACpB;YACE,KAAK,EAAE,oBAAoB;YAC3B,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,kBAAkB,CAAC;gBAC5B,CAAC;gBACD,OAAO,iCAAiC,CAAC;YAC3C,CAAC;SACF;QACD;YACE,KAAK,EAAE,8BAA8B;YACrC,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACzE,OAAO,SAAS,CAAC;YACnB,CAAC;SACF;QACD;YACE,KAAK,EAAE,mBAAmB;YAC1B,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,YAAY,EAAE,CAAC;gBACrB,OAAO,SAAS,CAAC;YACnB,CAAC;SACF;QACD;YACE,KAAK,EAAE,kCAAkC;YACzC,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,OAAO,WAAW,CAAC;YACrB,CAAC;SACF;KACF,CAAC;IAEF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnC,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAC,kBAAkB,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aACrE,KAAC,OAAO,IAAC,KAAK,EAAC,eAAe,YAC5B,KAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,GAAI,GACnB,EACT,MAAM,IAAI,CACT,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,OAAO,KAAG,EACX,KAAC,UAAU,IACT,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EACvC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,wBAAwB,GAC/E,IACE,CACP,IACQ,CACZ,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"JtapiEnableView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiEnableView.tsx"],"names":[],"mappings":"AAkCA,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,oBAAoB,2CAmC/D"}
1
+ {"version":3,"file":"JtapiEnableView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiEnableView.tsx"],"names":[],"mappings":"AAkCA,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,oBAAoB,2CAqB/D"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect } from 'react';
3
- import { Box, Text, useInput } from 'ink';
3
+ import { Box } from 'ink';
4
4
  import { composeUp } from '../../lib/compose.js';
5
5
  import { hasOverlayFile, enableJtapi } from '../../lib/jtapi.js';
6
6
  import { AppShell, Section, StepList, Divider, StatusLine } from '../components/index.js';
7
- import { useStepRunner, useFinish } from '../hooks/index.js';
7
+ import { useStepRunner } from '../hooks/index.js';
8
8
  const steps = [
9
9
  {
10
10
  label: 'Check overlay file exists',
@@ -31,21 +31,10 @@ const steps = [
31
31
  },
32
32
  ];
33
33
  export function JtapiEnableView({ onBack }) {
34
- const finish = useFinish(onBack);
35
34
  const { states, isRunning, isDone, run } = useStepRunner(steps);
36
35
  useEffect(() => { run(); }, [run]);
37
- useEffect(() => { if (isDone && !onBack)
38
- finish(); }, [isDone, onBack, finish]);
39
- // Exit on error (isRunning becomes false without isDone)
40
36
  const hasError = states.some(s => s.status === 'error');
41
- useEffect(() => {
42
- if (!isRunning && hasError && !onBack)
43
- finish();
44
- }, [isRunning, hasError, onBack, finish]);
45
- useInput((input, key) => {
46
- if (onBack && (isDone || (!isRunning && hasError)) && (input === 'q' || key.escape))
47
- finish();
48
- });
49
- return (_jsxs(AppShell, { command: "ct jtapi enable", children: [_jsx(Section, { title: "JTAPI Enable", children: _jsx(StepList, { steps: states }) }), isDone && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Divider, {}), _jsx(StatusLine, { status: "ok", label: "JTAPI sidecar enabled" })] })), onBack && (isDone || (!isRunning && hasError)) && (_jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsx(Text, { dimColor: true, children: "Press q to go back" }) }))] }));
37
+ const isComplete = isDone || (!isRunning && hasError);
38
+ return (_jsxs(AppShell, { command: "ct jtapi enable", onBack: onBack, isComplete: isComplete, children: [_jsx(Section, { title: "JTAPI Enable", children: _jsx(StepList, { steps: states }) }), isDone && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Divider, {}), _jsx(StatusLine, { status: "ok", label: "JTAPI sidecar enabled" })] }))] }));
50
39
  }
51
40
  //# sourceMappingURL=JtapiEnableView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JtapiEnableView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiEnableView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JtapiEnableView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiEnableView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,KAAK,GAAW;IACpB;QACE,KAAK,EAAE,2BAA2B;QAClC,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF;IACD;QACE,KAAK,EAAE,mBAAmB;QAC1B,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,WAAW,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;KACF;IACD;QACE,KAAK,EAAE,mCAAmC;QAC1C,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,OAAO,SAAS,CAAC;QACnB,CAAC;KACF;CACF,CAAC;AAMF,MAAM,UAAU,eAAe,CAAC,EAAE,MAAM,EAAwB;IAC9D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEhE,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC;IAEtD,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAC,iBAAiB,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,aACxE,KAAC,OAAO,IAAC,KAAK,EAAC,cAAc,YAC3B,KAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,GAAI,GACnB,EACT,MAAM,IAAI,CACT,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,OAAO,KAAG,EACX,KAAC,UAAU,IAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,uBAAuB,GAAG,IACpD,CACP,IACQ,CACZ,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"JtapiStatusView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiStatusView.tsx"],"names":[],"mappings":"AAMA,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,oBAAoB,2CAoC/D"}
1
+ {"version":3,"file":"JtapiStatusView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiStatusView.tsx"],"names":[],"mappings":"AAIA,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,oBAAoB,2CAoB/D"}
@@ -1,24 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect } from 'react';
3
- import { Box, Text, useInput } from 'ink';
4
2
  import { isJtapiEnabled, hasOverlayFile } from '../../lib/jtapi.js';
5
3
  import { AppShell, Section, StatusLine } from '../components/index.js';
6
- import { useFinish } from '../hooks/index.js';
7
4
  export function JtapiStatusView({ onBack }) {
8
- const finish = useFinish(onBack);
9
5
  const enabled = isJtapiEnabled();
10
6
  const overlay = hasOverlayFile();
11
- useEffect(() => {
12
- // Auto-exit only when running standalone (no onBack)
13
- if (!onBack)
14
- finish();
15
- }, [onBack, finish]);
16
- useInput((input, key) => {
17
- if (onBack && (input === 'q' || key.escape))
18
- finish();
19
- });
20
- return (_jsxs(AppShell, { command: "ct jtapi status", children: [_jsxs(Section, { title: "JTAPI Status", children: [_jsx(StatusLine, { status: enabled ? 'ok' : 'warn', label: enabled ? 'JTAPI is ENABLED' : 'JTAPI is DISABLED' }), _jsx(StatusLine, { status: overlay ? 'ok' : 'fail', label: overlay
21
- ? 'Overlay file (docker-compose-jtapi.yml) exists'
22
- : 'Overlay file (docker-compose-jtapi.yml) NOT FOUND' })] }), onBack && (_jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsx(Text, { dimColor: true, children: "Press q to go back" }) }))] }));
7
+ return (_jsx(AppShell, { command: "ct jtapi status", onBack: onBack, isComplete: true, children: _jsxs(Section, { title: "JTAPI Status", children: [_jsx(StatusLine, { status: enabled ? 'ok' : 'warn', label: enabled ? 'JTAPI is ENABLED' : 'JTAPI is DISABLED' }), _jsx(StatusLine, { status: overlay ? 'ok' : 'fail', label: overlay
8
+ ? 'Overlay file (docker-compose-jtapi.yml) exists'
9
+ : 'Overlay file (docker-compose-jtapi.yml) NOT FOUND' })] }) }));
23
10
  }
24
11
  //# sourceMappingURL=JtapiStatusView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JtapiStatusView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiStatusView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAM9C,MAAM,UAAU,eAAe,CAAC,EAAE,MAAM,EAAwB;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,SAAS,CAAC,GAAG,EAAE;QACb,qDAAqD;QACrD,IAAI,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC;IACxB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAErB,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,MAAM,IAAI,CAAC,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;YAAE,MAAM,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAC,iBAAiB,aACjC,MAAC,OAAO,IAAC,KAAK,EAAC,cAAc,aAC3B,KAAC,UAAU,IACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAC/B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,GACzD,EACF,KAAC,UAAU,IACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAC/B,KAAK,EAAE,OAAO;4BACZ,CAAC,CAAC,gDAAgD;4BAClD,CAAC,CAAC,mDAAmD,GACvD,IACM,EACT,MAAM,IAAI,CACT,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAChC,KAAC,IAAI,IAAC,QAAQ,yCAA0B,GACpC,CACP,IACQ,CACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"JtapiStatusView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiStatusView.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMvE,MAAM,UAAU,eAAe,CAAC,EAAE,MAAM,EAAwB;IAC9D,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,OAAO,CACL,KAAC,QAAQ,IAAC,OAAO,EAAC,iBAAiB,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,YAClE,MAAC,OAAO,IAAC,KAAK,EAAC,cAAc,aAC3B,KAAC,UAAU,IACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAC/B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,GACzD,EACF,KAAC,UAAU,IACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAC/B,KAAK,EAAE,OAAO;wBACZ,CAAC,CAAC,gDAAgD;wBAClD,CAAC,CAAC,mDAAmD,GACvD,IACM,GACD,CACZ,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"JtapiTroubleshootView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiTroubleshootView.tsx"],"names":[],"mappings":"AAiGA,UAAU,0BAA0B;IAClC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE,0BAA0B,2CA6C3E"}
1
+ {"version":3,"file":"JtapiTroubleshootView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiTroubleshootView.tsx"],"names":[],"mappings":"AAiGA,UAAU,0BAA0B;IAClC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE,0BAA0B,2CA6B3E"}
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect } from 'react';
3
- import { Box, Text, useInput } from 'ink';
3
+ import { Box } from 'ink';
4
4
  import { AppShell, Section, StepList, Divider, StatusLine } from '../components/index.js';
5
- import { useStepRunner, useFinish } from '../hooks/index.js';
5
+ import { useStepRunner } from '../hooks/index.js';
6
6
  import { compose, composeExec } from '../../lib/compose.js';
7
7
  import { isJtapiEnabled, hasOverlayFile } from '../../lib/jtapi.js';
8
8
  const steps = [
@@ -100,25 +100,15 @@ const steps = [
100
100
  },
101
101
  ];
102
102
  export function JtapiTroubleshootView({ onBack }) {
103
- const finish = useFinish(onBack);
104
103
  const { states, isDone, run } = useStepRunner(steps);
105
104
  useEffect(() => {
106
105
  run();
107
106
  }, [run]);
108
- useEffect(() => {
109
- if (isDone && !onBack) {
110
- finish();
111
- }
112
- }, [isDone, onBack, finish]);
113
- useInput((input, key) => {
114
- if (onBack && isDone && (input === 'q' || key.escape))
115
- finish();
116
- });
117
107
  const passed = states.filter(s => s.status === 'done').length;
118
108
  const failed = states.filter(s => s.status === 'error').length;
119
109
  const total = states.length;
120
- return (_jsxs(AppShell, { command: "ct jtapi troubleshoot", children: [_jsx(Section, { title: "JTAPI Troubleshoot", children: _jsx(StepList, { steps: states }) }), isDone && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Divider, {}), _jsx(StatusLine, { status: failed === 0 ? 'ok' : 'warn', label: failed === 0
110
+ return (_jsxs(AppShell, { command: "ct jtapi troubleshoot", onBack: onBack, isComplete: isDone, children: [_jsx(Section, { title: "JTAPI Troubleshoot", children: _jsx(StepList, { steps: states }) }), isDone && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Divider, {}), _jsx(StatusLine, { status: failed === 0 ? 'ok' : 'warn', label: failed === 0
121
111
  ? `${passed}/${total} checks passed`
122
- : `${passed}/${total} checks passed, ${failed} failed` })] })), onBack && isDone && (_jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsx(Text, { dimColor: true, children: "Press q to go back" }) }))] }));
112
+ : `${passed}/${total} checks passed, ${failed} failed` })] }))] }));
123
113
  }
124
114
  //# sourceMappingURL=JtapiTroubleshootView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JtapiTroubleshootView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiTroubleshootView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JtapiTroubleshootView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiTroubleshootView.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MainMenu.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MainMenu.tsx"],"names":[],"mappings":"AA0MA,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,aAAa,2CAmSxE"}
1
+ {"version":3,"file":"MainMenu.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MainMenu.tsx"],"names":[],"mappings":"AA4KA,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,aAAa,2CAuJxE"}
@@ -1,10 +1,10 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState, useCallback, useEffect } from 'react';
3
3
  import { Box, Text, useInput } from 'ink';
4
4
  import { AppShell, Spinner } from '../components/index.js';
5
5
  import { usePolling } from '../hooks/index.js';
6
- import { getServiceList, startService, stopService, restartService, startAllServices, stopAllServices, } from '../../lib/services.js';
7
- import { healthIcon, healthColor, extractVersion, extractUptime } from '../utils/serviceDisplay.js';
6
+ import { getServiceList } from '../../lib/services.js';
7
+ import { LOGO } from '../../lib/brand.js';
8
8
  // View imports
9
9
  import { StatusView } from './StatusView.js';
10
10
  import { DbStatusView } from './DbStatusView.js';
@@ -49,29 +49,27 @@ const MENU_ITEMS = [
49
49
  description: 'Update to latest or specific version',
50
50
  value: 'update',
51
51
  },
52
+ {
53
+ label: 'Services',
54
+ description: 'Interactive container manager',
55
+ value: 'services',
56
+ },
52
57
  {
53
58
  label: 'Database',
54
- description: 'Backup, restore, compact, and inspect',
59
+ description: 'Backup, migrate, inspect, and compact',
55
60
  value: 'db',
56
61
  children: [
57
- { label: 'Status', description: 'Show database status', value: 'db status' },
62
+ { label: 'Status', description: 'Database connection and size', value: 'db status' },
58
63
  { label: 'Backup', description: 'Create a database backup', value: 'db backup' },
59
- { label: 'List', description: 'List available backups', value: 'db list' },
60
- { label: 'Compact', description: 'Vacuum and compact database', value: 'db compact' },
64
+ { label: 'List Backups', description: 'List available backups', value: 'db list' },
61
65
  { label: 'Tables', description: 'Show table sizes', value: 'db tables' },
62
66
  { label: 'Size', description: 'Show database size', value: 'db size' },
63
- ],
64
- },
65
- {
66
- label: 'Migrate',
67
- description: 'Database migration status and control',
68
- value: 'migrate',
69
- children: [
70
- { label: 'Status', description: 'Show migration status', value: 'migrate status' },
71
- { label: 'Run', description: 'Run pending migrations', value: 'migrate run' },
67
+ { label: 'Compact', description: 'Vacuum and compact', value: 'db compact' },
68
+ { label: 'Migrations', description: 'Migration status', value: 'migrate status' },
69
+ { label: 'Run Migrations', description: 'Run pending migrations', value: 'migrate run' },
72
70
  { label: 'Rollback', description: 'Rollback last migration', value: 'migrate rollback' },
73
- { label: 'History', description: 'Show last 10 migrations', value: 'migrate history' },
74
- { label: 'Watch', description: 'Watch migration progress', value: 'migrate watch' },
71
+ { label: 'Migration History', description: 'Recent migrations', value: 'migrate history' },
72
+ { label: 'Watch Migrations', description: 'Live migration progress', value: 'migrate watch' },
75
73
  ],
76
74
  },
77
75
  {
@@ -84,20 +82,9 @@ const MENU_ITEMS = [
84
82
  ],
85
83
  },
86
84
  {
87
- label: 'Config',
88
- description: 'Logging, IPv6, PostgreSQL, certificates',
89
- value: 'config',
90
- children: [
91
- { label: 'Certificates', description: 'Certificate status and management', value: 'certs' },
92
- ],
93
- },
94
- {
95
- label: 'Services',
96
- description: 'Manage Docker Compose services',
97
- value: 'services',
98
- children: [
99
- { label: 'Dashboard', description: 'Interactive service manager', value: 'services' },
100
- ],
85
+ label: 'Certificates',
86
+ description: 'Certificate status and management',
87
+ value: 'certs',
101
88
  },
102
89
  {
103
90
  label: 'Docker',
@@ -130,19 +117,16 @@ const MENU_ITEMS = [
130
117
  { label: 'Troubleshoot', description: 'Comprehensive JTAPI diagnostics', value: 'jtapi troubleshoot' },
131
118
  ],
132
119
  },
120
+ {
121
+ label: 'Offline',
122
+ description: 'List images for air-gapped bundles',
123
+ value: 'offline list',
124
+ },
133
125
  {
134
126
  label: 'Self-Update',
135
127
  description: 'Update the ct CLI tool itself',
136
128
  value: 'self-update',
137
129
  },
138
- {
139
- label: 'Offline',
140
- description: 'Air-gapped update bundle management',
141
- value: 'offline',
142
- children: [
143
- { label: 'List', description: 'List images in docker-compose.yml', value: 'offline list' },
144
- ],
145
- },
146
130
  ];
147
131
  /** Map of command values to inline TUI view components */
148
132
  const VIEW_MAP = {
@@ -175,24 +159,11 @@ const VIEW_MAP = {
175
159
  'services': (onBack) => _jsx(ServicesView, { onBack: onBack }),
176
160
  'update': (onBack) => _jsx(UpdateView, { onBack: onBack }),
177
161
  };
178
- /* ------------------------------------------------------------------ */
179
- /* Main component */
180
- /* ------------------------------------------------------------------ */
181
- const LOGO = ` ______ ____ ______ __ __
182
- / ____/___ _/ / / /_ __/__ / /__ ____ ___ ___ / /________ __
183
- / / / __ \`/ / / / / / _ \\/ / _ \\/ __ \`__ \\/ _ \\/ __/ ___/ / / /
184
- / /___/ /_/ / / / / / / __/ / __/ / / / / / __/ /_/ / / /_/ /
185
- \\____/\\__,_/_/_/ /_/ \\___/_/\\___/_/ /_/ /_/\\___/\\__/_/ \\__, /
186
- /____/`;
187
162
  export function MainMenu({ version, onCliCommand, onExit }) {
188
163
  const [phase, setPhase] = useState('home');
189
164
  const [activeView, setActiveView] = useState(null);
190
- const [zone, setZone] = useState('menu');
191
- const [serviceCursor, setServiceCursor] = useState(0);
192
165
  const [menuCursor, setMenuCursor] = useState(0);
193
166
  const [menuStack, setMenuStack] = useState([]);
194
- const [actionLabel, setActionLabel] = useState('');
195
- const [actionError, setActionError] = useState(null);
196
167
  const [logsService, setLogsService] = useState(null);
197
168
  const { data: services, stop: stopPolling, start: startPolling } = usePolling(getServiceList, 5000, false);
198
169
  // Control polling based on phase — only poll when on home screen
@@ -209,18 +180,6 @@ export function MainMenu({ version, onCliCommand, onExit }) {
209
180
  setActiveView(null);
210
181
  setLogsService(null);
211
182
  }, []);
212
- const executeAction = useCallback(async (label, fn) => {
213
- setPhase('action');
214
- setActionLabel(label);
215
- setActionError(null);
216
- try {
217
- await fn();
218
- }
219
- catch (err) {
220
- setActionError(err instanceof Error ? err.message : String(err));
221
- }
222
- setPhase('home');
223
- }, []);
224
183
  // Build menu display items
225
184
  const currentMenuItems = menuStack.length > 0 ? menuStack[menuStack.length - 1] : MENU_ITEMS;
226
185
  const hasParent = menuStack.length > 0;
@@ -236,136 +195,55 @@ export function MainMenu({ version, onCliCommand, onExit }) {
236
195
  useInput((input, key) => {
237
196
  if (phase !== 'home')
238
197
  return;
239
- if (zone === 'services') {
240
- const count = serviceList.length;
241
- if (key.upArrow) {
242
- if (serviceCursor > 0) {
243
- setServiceCursor(prev => prev - 1);
244
- }
245
- else {
246
- // Wrap to bottom of menu
247
- setZone('menu');
248
- setMenuCursor(menuDisplayItems.length - 1);
249
- }
250
- }
251
- else if (key.downArrow) {
252
- if (serviceCursor < count - 1) {
253
- setServiceCursor(prev => prev + 1);
254
- }
255
- else {
256
- // Cross into menu zone
257
- setZone('menu');
258
- setMenuCursor(0);
259
- }
260
- }
261
- else if (input === 's') {
262
- const svc = serviceList[serviceCursor];
263
- if (svc)
264
- executeAction(`Starting ${svc.service}...`, () => startService(svc.service).then(() => { }));
265
- }
266
- else if (input === 'x') {
267
- const svc = serviceList[serviceCursor];
268
- if (svc)
269
- executeAction(`Stopping ${svc.service}...`, () => stopService(svc.service).then(() => { }));
270
- }
271
- else if (input === 'r') {
272
- const svc = serviceList[serviceCursor];
273
- if (svc)
274
- executeAction(`Restarting ${svc.service}...`, () => restartService(svc.service).then(() => { }));
198
+ if (key.upArrow) {
199
+ if (menuCursor > 0) {
200
+ setMenuCursor(prev => prev - 1);
275
201
  }
276
- else if (input === 'a') {
277
- executeAction('Starting all services...', () => startAllServices().then(() => { }));
278
- }
279
- else if (input === 'X') {
280
- executeAction('Stopping all services...', () => stopAllServices().then(() => { }));
202
+ }
203
+ else if (key.downArrow) {
204
+ if (menuCursor < menuDisplayItems.length - 1) {
205
+ setMenuCursor(prev => prev + 1);
281
206
  }
282
- else if (input === 'l' || key.return) {
283
- const svc = serviceList[serviceCursor];
284
- if (svc) {
285
- setLogsService(svc.service);
286
- setPhase('logs');
287
- }
207
+ }
208
+ else if (key.return || key.rightArrow) {
209
+ const selected = menuDisplayItems[menuCursor];
210
+ if (!selected)
211
+ return;
212
+ if (selected.isBack) {
213
+ setMenuStack(prev => prev.slice(0, -1));
214
+ setMenuCursor(0);
288
215
  }
289
- else if (input === 'q' || key.escape) {
290
- // Drop back to menu zone
291
- setZone('menu');
216
+ else if (selected.item?.children && selected.item.children.length > 1) {
217
+ setMenuStack(prev => [...prev, selected.item.children]);
292
218
  setMenuCursor(0);
293
219
  }
294
- }
295
- else {
296
- // Menu zone
297
- if (key.upArrow) {
298
- if (menuCursor > 0) {
299
- setMenuCursor(prev => prev - 1);
220
+ else if (selected.item) {
221
+ const cmd = selected.item.value;
222
+ if (VIEW_MAP[cmd]) {
223
+ setActiveView(cmd);
224
+ setPhase('view');
300
225
  }
301
- else if (serviceList.length > 0) {
302
- // Cross into services zone
303
- setZone('services');
304
- setServiceCursor(serviceList.length - 1);
226
+ else {
227
+ onCliCommand(cmd);
305
228
  }
306
229
  }
307
- else if (key.downArrow) {
308
- if (menuCursor < menuDisplayItems.length - 1) {
309
- setMenuCursor(prev => prev + 1);
310
- }
311
- else if (serviceList.length > 0) {
312
- // Wrap to top of services
313
- setZone('services');
314
- setServiceCursor(0);
315
- }
230
+ }
231
+ else if (key.leftArrow) {
232
+ if (hasParent) {
233
+ setMenuStack(prev => prev.slice(0, -1));
234
+ setMenuCursor(0);
316
235
  }
317
- else if (key.return) {
318
- const selected = menuDisplayItems[menuCursor];
319
- if (!selected)
320
- return;
321
- if (selected.isBack) {
322
- setMenuStack(prev => prev.slice(0, -1));
323
- setMenuCursor(0);
324
- }
325
- else if (selected.item?.children && selected.item.children.length === 1) {
326
- // Single child — skip submenu, go directly to the child's view
327
- const child = selected.item.children[0];
328
- const cmd = child.value;
329
- if (VIEW_MAP[cmd]) {
330
- setActiveView(cmd);
331
- setPhase('view');
332
- }
333
- else {
334
- onCliCommand(cmd);
335
- }
336
- }
337
- else if (selected.item?.children && selected.item.children.length > 1) {
338
- setMenuStack(prev => [...prev, selected.item.children]);
339
- setMenuCursor(0);
340
- }
341
- else if (selected.item) {
342
- const cmd = selected.item.value;
343
- if (VIEW_MAP[cmd]) {
344
- setActiveView(cmd);
345
- setPhase('view');
346
- }
347
- else {
348
- onCliCommand(cmd);
349
- }
350
- }
236
+ }
237
+ else if (key.escape || input === 'q') {
238
+ if (hasParent) {
239
+ setMenuStack(prev => prev.slice(0, -1));
240
+ setMenuCursor(0);
351
241
  }
352
- else if (key.escape || input === 'q') {
353
- if (hasParent) {
354
- setMenuStack(prev => prev.slice(0, -1));
355
- setMenuCursor(0);
356
- }
357
- else {
358
- onExit();
359
- }
242
+ else {
243
+ onExit();
360
244
  }
361
245
  }
362
246
  });
363
- // Clamp service cursor when list changes
364
- useEffect(() => {
365
- if (serviceList.length > 0 && serviceCursor >= serviceList.length) {
366
- setServiceCursor(serviceList.length - 1);
367
- }
368
- }, [serviceList, serviceCursor]);
369
247
  // --- Phase: view ---
370
248
  if (phase === 'view' && activeView && VIEW_MAP[activeView]) {
371
249
  return VIEW_MAP[activeView](goHome);
@@ -374,32 +252,15 @@ export function MainMenu({ version, onCliCommand, onExit }) {
374
252
  if (phase === 'logs' && logsService) {
375
253
  return _jsx(ServiceLogsView, { service: logsService, onBack: goHome });
376
254
  }
377
- // --- Phase: action ---
378
- if (phase === 'action') {
379
- return (_jsx(AppShell, { title: `CallTelemetry CLI v${version}`, children: _jsx(Spinner, { label: actionLabel }) }));
380
- }
381
255
  // --- Phase: home ---
382
- const svcWidth = serviceList.length > 0
383
- ? Math.max(9, ...serviceList.map(s => s.service.length)) + 2
384
- : 11;
385
- const verWidth = serviceList.length > 0
386
- ? Math.max(9, ...serviceList.map(s => extractVersion(s.image).length)) + 2
387
- : 11;
388
256
  const runningCount = serviceList.filter(s => s.state === 'running').length;
389
257
  const healthyCount = serviceList.filter(s => s.health === 'healthy').length;
258
+ const unhealthyCount = serviceList.filter(s => s.health === 'unhealthy').length;
390
259
  const stoppedCount = serviceList.filter(s => s.state === 'exited' || s.state === 'dead').length;
391
- const inServiceZone = zone === 'services' && serviceList.length > 0;
392
- return (_jsxs(AppShell, { title: `CallTelemetry CLI v${version}`, children: [_jsx(Box, { paddingLeft: 1, marginBottom: 1, children: _jsx(Text, { color: "cyan", children: LOGO }) }), !services && (_jsx(Box, { paddingLeft: 2, marginBottom: 1, children: _jsx(Spinner, { label: "Loading services..." }) })), serviceList.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Box, { paddingLeft: 2, marginBottom: 1, children: _jsxs(Text, { children: [_jsx(Text, { bold: true, children: serviceList.length }), _jsx(Text, { children: " containers" }), runningCount > 0 && _jsxs(Text, { color: "green", children: [" \u2014 ", runningCount, " running"] }), healthyCount > 0 && _jsxs(Text, { color: "green", children: [" (", healthyCount, " healthy)"] }), stoppedCount > 0 && _jsxs(Text, { color: "red", children: [" \u2014 ", stoppedCount, " stopped"] })] }) }), _jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { dimColor: true, bold: true, children: ' '.padEnd(3) }), _jsx(Text, { dimColor: true, bold: true, children: 'Service'.padEnd(svcWidth) }), _jsx(Text, { dimColor: true, bold: true, children: 'Version'.padEnd(verWidth) }), _jsx(Text, { dimColor: true, bold: true, children: 'Uptime' })] }), serviceList.map((svc, i) => {
393
- const isActive = zone === 'services' && i === serviceCursor;
394
- const icon = healthIcon(svc.health, svc.state);
395
- const color = healthColor(svc.health, svc.state);
396
- return (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: isActive ? 'cyan' : color, children: isActive ? ' ❯ ' : ` ${icon} ` }), _jsx(Text, { color: isActive ? 'cyan' : undefined, bold: isActive, children: svc.service.padEnd(svcWidth) }), _jsx(Text, { color: isActive ? 'cyan' : undefined, dimColor: !isActive, children: extractVersion(svc.image).padEnd(verWidth) }), _jsx(Text, { color: isActive ? 'cyan' : undefined, dimColor: !isActive, children: extractUptime(svc.status) })] }, svc.service));
397
- }), _jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsx(Text, { dimColor: true, children: '─'.repeat(60) }) })] })), actionError && (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { color: "red", children: ["Error: ", actionError] }) })), _jsx(Box, { flexDirection: "column", paddingLeft: 2, paddingTop: serviceList.length > 0 ? 0 : 1, children: menuDisplayItems.map((entry, i) => {
398
- const isActive = zone === 'menu' && i === menuCursor;
260
+ return (_jsxs(AppShell, { title: `CallTelemetry CLI v${version}`, children: [_jsx(Box, { paddingLeft: 1, marginBottom: 1, children: _jsx(Text, { color: "cyan", children: LOGO }) }), !services && (_jsx(Box, { paddingLeft: 2, marginBottom: 1, children: _jsx(Spinner, { label: "Loading services..." }) })), serviceList.length > 0 && (_jsx(Box, { paddingLeft: 2, marginBottom: 1, children: _jsxs(Text, { children: [_jsx(Text, { bold: true, children: "Services:" }), _jsxs(Text, { children: [" ", serviceList.length, " containers"] }), healthyCount > 0 && _jsxs(Text, { color: "green", children: [" \u2014 ", healthyCount, " healthy"] }), unhealthyCount > 0 && _jsxs(Text, { color: "yellow", children: [", ", unhealthyCount, " unhealthy"] }), stoppedCount > 0 && _jsxs(Text, { color: "red", children: [", ", stoppedCount, " stopped"] })] }) })), _jsx(Box, { flexDirection: "column", paddingLeft: 2, paddingTop: serviceList.length > 0 ? 0 : 1, children: menuDisplayItems.map((entry, i) => {
261
+ const isActive = i === menuCursor;
399
262
  const prefix = isActive ? '❯' : ' ';
400
263
  return (_jsxs(Box, { children: [_jsx(Text, { color: isActive ? 'cyan' : undefined, bold: isActive, children: `${prefix} ${entry.label.padEnd(16)}` }), _jsx(Text, { dimColor: true, children: entry.description })] }, `menu-${i}`));
401
- }) }), _jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsx(Text, { dimColor: true, children: inServiceZone
402
- ? '↑↓ Navigate Enter/l Logs s Start x Stop r Restart a Start All X Stop All q/Esc Menu'
403
- : '↑↓ Navigate Enter Select q Quit' }) })] }));
264
+ }) }), _jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsx(Text, { dimColor: true, children: '↑↓ Navigate Enter Select q Quit' }) })] }));
404
265
  }
405
266
  //# sourceMappingURL=MainMenu.js.map