clawsql 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 (311) hide show
  1. package/.env.example +97 -0
  2. package/README.md +372 -0
  3. package/dist/__tests__/config/settings.test.d.ts +5 -0
  4. package/dist/__tests__/config/settings.test.d.ts.map +1 -0
  5. package/dist/__tests__/config/settings.test.js +154 -0
  6. package/dist/__tests__/config/settings.test.js.map +1 -0
  7. package/dist/__tests__/core/discovery/topology.test.d.ts +5 -0
  8. package/dist/__tests__/core/discovery/topology.test.d.ts.map +1 -0
  9. package/dist/__tests__/core/discovery/topology.test.js +191 -0
  10. package/dist/__tests__/core/discovery/topology.test.js.map +1 -0
  11. package/dist/__tests__/core/failover/executor.test.d.ts +5 -0
  12. package/dist/__tests__/core/failover/executor.test.d.ts.map +1 -0
  13. package/dist/__tests__/core/failover/executor.test.js +256 -0
  14. package/dist/__tests__/core/failover/executor.test.js.map +1 -0
  15. package/dist/__tests__/core/monitoring/collector.test.d.ts +5 -0
  16. package/dist/__tests__/core/monitoring/collector.test.d.ts.map +1 -0
  17. package/dist/__tests__/core/monitoring/collector.test.js +131 -0
  18. package/dist/__tests__/core/monitoring/collector.test.js.map +1 -0
  19. package/dist/__tests__/core/monitoring/exporters.test.d.ts +5 -0
  20. package/dist/__tests__/core/monitoring/exporters.test.d.ts.map +1 -0
  21. package/dist/__tests__/core/monitoring/exporters.test.js +90 -0
  22. package/dist/__tests__/core/monitoring/exporters.test.js.map +1 -0
  23. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts +5 -0
  24. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts.map +1 -0
  25. package/dist/__tests__/core/routing/proxysql-manager.test.js +155 -0
  26. package/dist/__tests__/core/routing/proxysql-manager.test.js.map +1 -0
  27. package/dist/__tests__/types/index.test.d.ts +5 -0
  28. package/dist/__tests__/types/index.test.d.ts.map +1 -0
  29. package/dist/__tests__/types/index.test.js +290 -0
  30. package/dist/__tests__/types/index.test.js.map +1 -0
  31. package/dist/__tests__/utils/exceptions.test.d.ts +5 -0
  32. package/dist/__tests__/utils/exceptions.test.d.ts.map +1 -0
  33. package/dist/__tests__/utils/exceptions.test.js +142 -0
  34. package/dist/__tests__/utils/exceptions.test.js.map +1 -0
  35. package/dist/api/routes/clusters.d.ts +7 -0
  36. package/dist/api/routes/clusters.d.ts.map +1 -0
  37. package/dist/api/routes/clusters.js +123 -0
  38. package/dist/api/routes/clusters.js.map +1 -0
  39. package/dist/api/routes/config.d.ts +7 -0
  40. package/dist/api/routes/config.d.ts.map +1 -0
  41. package/dist/api/routes/config.js +65 -0
  42. package/dist/api/routes/config.js.map +1 -0
  43. package/dist/api/routes/failover.d.ts +7 -0
  44. package/dist/api/routes/failover.d.ts.map +1 -0
  45. package/dist/api/routes/failover.js +100 -0
  46. package/dist/api/routes/failover.js.map +1 -0
  47. package/dist/api/routes/instances.d.ts +11 -0
  48. package/dist/api/routes/instances.d.ts.map +1 -0
  49. package/dist/api/routes/instances.js +315 -0
  50. package/dist/api/routes/instances.js.map +1 -0
  51. package/dist/api/routes/monitoring.d.ts +7 -0
  52. package/dist/api/routes/monitoring.d.ts.map +1 -0
  53. package/dist/api/routes/monitoring.js +72 -0
  54. package/dist/api/routes/monitoring.js.map +1 -0
  55. package/dist/api/routes/webhooks.d.ts +12 -0
  56. package/dist/api/routes/webhooks.d.ts.map +1 -0
  57. package/dist/api/routes/webhooks.js +232 -0
  58. package/dist/api/routes/webhooks.js.map +1 -0
  59. package/dist/api/schemas/index.d.ts +965 -0
  60. package/dist/api/schemas/index.d.ts.map +1 -0
  61. package/dist/api/schemas/index.js +171 -0
  62. package/dist/api/schemas/index.js.map +1 -0
  63. package/dist/app.d.ts +13 -0
  64. package/dist/app.d.ts.map +1 -0
  65. package/dist/app.js +197 -0
  66. package/dist/app.js.map +1 -0
  67. package/dist/bin/clawsql.d.ts +12 -0
  68. package/dist/bin/clawsql.d.ts.map +1 -0
  69. package/dist/bin/clawsql.js +43 -0
  70. package/dist/bin/clawsql.js.map +1 -0
  71. package/dist/cli/agent/handler.d.ts +73 -0
  72. package/dist/cli/agent/handler.d.ts.map +1 -0
  73. package/dist/cli/agent/handler.js +258 -0
  74. package/dist/cli/agent/handler.js.map +1 -0
  75. package/dist/cli/agent/index.d.ts +14 -0
  76. package/dist/cli/agent/index.d.ts.map +1 -0
  77. package/dist/cli/agent/index.js +30 -0
  78. package/dist/cli/agent/index.js.map +1 -0
  79. package/dist/cli/agent/openclaw-integration.d.ts +81 -0
  80. package/dist/cli/agent/openclaw-integration.d.ts.map +1 -0
  81. package/dist/cli/agent/openclaw-integration.js +341 -0
  82. package/dist/cli/agent/openclaw-integration.js.map +1 -0
  83. package/dist/cli/agent/providers/anthropic.d.ts +27 -0
  84. package/dist/cli/agent/providers/anthropic.d.ts.map +1 -0
  85. package/dist/cli/agent/providers/anthropic.js +106 -0
  86. package/dist/cli/agent/providers/anthropic.js.map +1 -0
  87. package/dist/cli/agent/providers/base.d.ts +91 -0
  88. package/dist/cli/agent/providers/base.d.ts.map +1 -0
  89. package/dist/cli/agent/providers/base.js +24 -0
  90. package/dist/cli/agent/providers/base.js.map +1 -0
  91. package/dist/cli/agent/providers/openai.d.ts +27 -0
  92. package/dist/cli/agent/providers/openai.d.ts.map +1 -0
  93. package/dist/cli/agent/providers/openai.js +98 -0
  94. package/dist/cli/agent/providers/openai.js.map +1 -0
  95. package/dist/cli/agent/tools/index.d.ts +32 -0
  96. package/dist/cli/agent/tools/index.d.ts.map +1 -0
  97. package/dist/cli/agent/tools/index.js +263 -0
  98. package/dist/cli/agent/tools/index.js.map +1 -0
  99. package/dist/cli/commands/cleanup.d.ts +12 -0
  100. package/dist/cli/commands/cleanup.d.ts.map +1 -0
  101. package/dist/cli/commands/cleanup.js +205 -0
  102. package/dist/cli/commands/cleanup.js.map +1 -0
  103. package/dist/cli/commands/clusters.d.ts +12 -0
  104. package/dist/cli/commands/clusters.d.ts.map +1 -0
  105. package/dist/cli/commands/clusters.js +468 -0
  106. package/dist/cli/commands/clusters.js.map +1 -0
  107. package/dist/cli/commands/config.d.ts +12 -0
  108. package/dist/cli/commands/config.d.ts.map +1 -0
  109. package/dist/cli/commands/config.js +406 -0
  110. package/dist/cli/commands/config.js.map +1 -0
  111. package/dist/cli/commands/cron.d.ts +12 -0
  112. package/dist/cli/commands/cron.d.ts.map +1 -0
  113. package/dist/cli/commands/cron.js +215 -0
  114. package/dist/cli/commands/cron.js.map +1 -0
  115. package/dist/cli/commands/doctor.d.ts +13 -0
  116. package/dist/cli/commands/doctor.d.ts.map +1 -0
  117. package/dist/cli/commands/doctor.js +687 -0
  118. package/dist/cli/commands/doctor.js.map +1 -0
  119. package/dist/cli/commands/failover.d.ts +16 -0
  120. package/dist/cli/commands/failover.d.ts.map +1 -0
  121. package/dist/cli/commands/failover.js +333 -0
  122. package/dist/cli/commands/failover.js.map +1 -0
  123. package/dist/cli/commands/health.d.ts +12 -0
  124. package/dist/cli/commands/health.d.ts.map +1 -0
  125. package/dist/cli/commands/health.js +125 -0
  126. package/dist/cli/commands/health.js.map +1 -0
  127. package/dist/cli/commands/help.d.ts +12 -0
  128. package/dist/cli/commands/help.d.ts.map +1 -0
  129. package/dist/cli/commands/help.js +52 -0
  130. package/dist/cli/commands/help.js.map +1 -0
  131. package/dist/cli/commands/instances.d.ts +12 -0
  132. package/dist/cli/commands/instances.d.ts.map +1 -0
  133. package/dist/cli/commands/instances.js +801 -0
  134. package/dist/cli/commands/instances.js.map +1 -0
  135. package/dist/cli/commands/notify.d.ts +12 -0
  136. package/dist/cli/commands/notify.d.ts.map +1 -0
  137. package/dist/cli/commands/notify.js +43 -0
  138. package/dist/cli/commands/notify.js.map +1 -0
  139. package/dist/cli/commands/sql.d.ts +12 -0
  140. package/dist/cli/commands/sql.d.ts.map +1 -0
  141. package/dist/cli/commands/sql.js +90 -0
  142. package/dist/cli/commands/sql.js.map +1 -0
  143. package/dist/cli/commands/start.d.ts +12 -0
  144. package/dist/cli/commands/start.d.ts.map +1 -0
  145. package/dist/cli/commands/start.js +174 -0
  146. package/dist/cli/commands/start.js.map +1 -0
  147. package/dist/cli/commands/status.d.ts +12 -0
  148. package/dist/cli/commands/status.d.ts.map +1 -0
  149. package/dist/cli/commands/status.js +218 -0
  150. package/dist/cli/commands/status.js.map +1 -0
  151. package/dist/cli/commands/stop.d.ts +12 -0
  152. package/dist/cli/commands/stop.d.ts.map +1 -0
  153. package/dist/cli/commands/stop.js +128 -0
  154. package/dist/cli/commands/stop.js.map +1 -0
  155. package/dist/cli/commands/topology.d.ts +12 -0
  156. package/dist/cli/commands/topology.d.ts.map +1 -0
  157. package/dist/cli/commands/topology.js +106 -0
  158. package/dist/cli/commands/topology.js.map +1 -0
  159. package/dist/cli/completer.d.ts +47 -0
  160. package/dist/cli/completer.d.ts.map +1 -0
  161. package/dist/cli/completer.js +332 -0
  162. package/dist/cli/completer.js.map +1 -0
  163. package/dist/cli/formatter.d.ts +165 -0
  164. package/dist/cli/formatter.d.ts.map +1 -0
  165. package/dist/cli/formatter.js +408 -0
  166. package/dist/cli/formatter.js.map +1 -0
  167. package/dist/cli/index.d.ts +21 -0
  168. package/dist/cli/index.d.ts.map +1 -0
  169. package/dist/cli/index.js +79 -0
  170. package/dist/cli/index.js.map +1 -0
  171. package/dist/cli/raw-input.d.ts +97 -0
  172. package/dist/cli/raw-input.d.ts.map +1 -0
  173. package/dist/cli/raw-input.js +493 -0
  174. package/dist/cli/raw-input.js.map +1 -0
  175. package/dist/cli/registry.d.ts +103 -0
  176. package/dist/cli/registry.d.ts.map +1 -0
  177. package/dist/cli/registry.js +205 -0
  178. package/dist/cli/registry.js.map +1 -0
  179. package/dist/cli/repl.d.ts +83 -0
  180. package/dist/cli/repl.d.ts.map +1 -0
  181. package/dist/cli/repl.js +447 -0
  182. package/dist/cli/repl.js.map +1 -0
  183. package/dist/cli/ui/components.d.ts +144 -0
  184. package/dist/cli/ui/components.d.ts.map +1 -0
  185. package/dist/cli/ui/components.js +331 -0
  186. package/dist/cli/ui/components.js.map +1 -0
  187. package/dist/cli/ui/index.d.ts +7 -0
  188. package/dist/cli/ui/index.d.ts.map +1 -0
  189. package/dist/cli/ui/index.js +23 -0
  190. package/dist/cli/ui/index.js.map +1 -0
  191. package/dist/cli/utils/docker-files.d.ts +39 -0
  192. package/dist/cli/utils/docker-files.d.ts.map +1 -0
  193. package/dist/cli/utils/docker-files.js +223 -0
  194. package/dist/cli/utils/docker-files.js.map +1 -0
  195. package/dist/cli/utils/docker-prereq.d.ts +48 -0
  196. package/dist/cli/utils/docker-prereq.d.ts.map +1 -0
  197. package/dist/cli/utils/docker-prereq.js +203 -0
  198. package/dist/cli/utils/docker-prereq.js.map +1 -0
  199. package/dist/config/settings.d.ts +594 -0
  200. package/dist/config/settings.d.ts.map +1 -0
  201. package/dist/config/settings.js +250 -0
  202. package/dist/config/settings.js.map +1 -0
  203. package/dist/core/discovery/cluster-view.d.ts +50 -0
  204. package/dist/core/discovery/cluster-view.d.ts.map +1 -0
  205. package/dist/core/discovery/cluster-view.js +235 -0
  206. package/dist/core/discovery/cluster-view.js.map +1 -0
  207. package/dist/core/discovery/scanner.d.ts +70 -0
  208. package/dist/core/discovery/scanner.d.ts.map +1 -0
  209. package/dist/core/discovery/scanner.js +197 -0
  210. package/dist/core/discovery/scanner.js.map +1 -0
  211. package/dist/core/discovery/topology.d.ts +118 -0
  212. package/dist/core/discovery/topology.d.ts.map +1 -0
  213. package/dist/core/discovery/topology.js +550 -0
  214. package/dist/core/discovery/topology.js.map +1 -0
  215. package/dist/core/failover/candidate-selector.d.ts +46 -0
  216. package/dist/core/failover/candidate-selector.d.ts.map +1 -0
  217. package/dist/core/failover/candidate-selector.js +70 -0
  218. package/dist/core/failover/candidate-selector.js.map +1 -0
  219. package/dist/core/failover/executor.d.ts +104 -0
  220. package/dist/core/failover/executor.d.ts.map +1 -0
  221. package/dist/core/failover/executor.js +248 -0
  222. package/dist/core/failover/executor.js.map +1 -0
  223. package/dist/core/failover/operation-builder.d.ts +71 -0
  224. package/dist/core/failover/operation-builder.d.ts.map +1 -0
  225. package/dist/core/failover/operation-builder.js +157 -0
  226. package/dist/core/failover/operation-builder.js.map +1 -0
  227. package/dist/core/failover/operation-runner.d.ts +75 -0
  228. package/dist/core/failover/operation-runner.d.ts.map +1 -0
  229. package/dist/core/failover/operation-runner.js +191 -0
  230. package/dist/core/failover/operation-runner.js.map +1 -0
  231. package/dist/core/failover/promoter.d.ts +33 -0
  232. package/dist/core/failover/promoter.d.ts.map +1 -0
  233. package/dist/core/failover/promoter.js +97 -0
  234. package/dist/core/failover/promoter.js.map +1 -0
  235. package/dist/core/failover/recovery-manager.d.ts +47 -0
  236. package/dist/core/failover/recovery-manager.d.ts.map +1 -0
  237. package/dist/core/failover/recovery-manager.js +145 -0
  238. package/dist/core/failover/recovery-manager.js.map +1 -0
  239. package/dist/core/failover/types.d.ts +54 -0
  240. package/dist/core/failover/types.d.ts.map +1 -0
  241. package/dist/core/failover/types.js +8 -0
  242. package/dist/core/failover/types.js.map +1 -0
  243. package/dist/core/monitoring/collector.d.ts +25 -0
  244. package/dist/core/monitoring/collector.d.ts.map +1 -0
  245. package/dist/core/monitoring/collector.js +115 -0
  246. package/dist/core/monitoring/collector.js.map +1 -0
  247. package/dist/core/monitoring/exporters.d.ts +49 -0
  248. package/dist/core/monitoring/exporters.d.ts.map +1 -0
  249. package/dist/core/monitoring/exporters.js +126 -0
  250. package/dist/core/monitoring/exporters.js.map +1 -0
  251. package/dist/core/routing/proxysql-manager.d.ts +213 -0
  252. package/dist/core/routing/proxysql-manager.d.ts.map +1 -0
  253. package/dist/core/routing/proxysql-manager.js +632 -0
  254. package/dist/core/routing/proxysql-manager.js.map +1 -0
  255. package/dist/core/sync/replica-recovery.d.ts +40 -0
  256. package/dist/core/sync/replica-recovery.d.ts.map +1 -0
  257. package/dist/core/sync/replica-recovery.js +134 -0
  258. package/dist/core/sync/replica-recovery.js.map +1 -0
  259. package/dist/core/sync/sync-coordinator.d.ts +83 -0
  260. package/dist/core/sync/sync-coordinator.d.ts.map +1 -0
  261. package/dist/core/sync/sync-coordinator.js +254 -0
  262. package/dist/core/sync/sync-coordinator.js.map +1 -0
  263. package/dist/core/sync/topology-watcher.d.ts +76 -0
  264. package/dist/core/sync/topology-watcher.d.ts.map +1 -0
  265. package/dist/core/sync/topology-watcher.js +222 -0
  266. package/dist/core/sync/topology-watcher.js.map +1 -0
  267. package/dist/core/sync/types.d.ts +85 -0
  268. package/dist/core/sync/types.d.ts.map +1 -0
  269. package/dist/core/sync/types.js +8 -0
  270. package/dist/core/sync/types.js.map +1 -0
  271. package/dist/index.d.ts +5 -0
  272. package/dist/index.d.ts.map +1 -0
  273. package/dist/index.js +9 -0
  274. package/dist/index.js.map +1 -0
  275. package/dist/types/index.d.ts +212 -0
  276. package/dist/types/index.d.ts.map +1 -0
  277. package/dist/types/index.js +153 -0
  278. package/dist/types/index.js.map +1 -0
  279. package/dist/utils/database.d.ts +62 -0
  280. package/dist/utils/database.d.ts.map +1 -0
  281. package/dist/utils/database.js +257 -0
  282. package/dist/utils/database.js.map +1 -0
  283. package/dist/utils/exceptions.d.ts +69 -0
  284. package/dist/utils/exceptions.d.ts.map +1 -0
  285. package/dist/utils/exceptions.js +121 -0
  286. package/dist/utils/exceptions.js.map +1 -0
  287. package/dist/utils/logger.d.ts +20 -0
  288. package/dist/utils/logger.d.ts.map +1 -0
  289. package/dist/utils/logger.js +90 -0
  290. package/dist/utils/logger.js.map +1 -0
  291. package/dist/utils/mysql-client.d.ts +43 -0
  292. package/dist/utils/mysql-client.d.ts.map +1 -0
  293. package/dist/utils/mysql-client.js +125 -0
  294. package/dist/utils/mysql-client.js.map +1 -0
  295. package/docker/Dockerfile +61 -0
  296. package/docker/Dockerfile.node +41 -0
  297. package/docker/grafana/dashboards/clawsql.json +212 -0
  298. package/docker/grafana/provisioning/dashboards/dashboards.yml +13 -0
  299. package/docker/grafana/provisioning/datasources/datasources.yml +12 -0
  300. package/docker/init/primary.sql +26 -0
  301. package/docker/init/replica.sql +16 -0
  302. package/docker/orchestrator/orchestrator.conf.json +98 -0
  303. package/docker/prometheus/prometheus.yml +45 -0
  304. package/docker/proxysql/entrypoint.sh +8 -0
  305. package/docker/proxysql/init.sql.demo +30 -0
  306. package/docker/proxysql/proxysql.cnf +38 -0
  307. package/docker-compose.demo.yml +115 -0
  308. package/docker-compose.yml +217 -0
  309. package/init/primary.sql +19 -0
  310. package/init/replica.sql +13 -0
  311. package/package.json +84 -0
@@ -0,0 +1,493 @@
1
+ "use strict";
2
+ /**
3
+ * ClawSQL CLI - Raw Input Handler
4
+ *
5
+ * Handles raw keyboard input for real-time command suggestions.
6
+ * Provides Claude Code-style interactive hints with keyboard navigation.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RawInputHandler = void 0;
10
+ const registry_js_1 = require("./registry.js");
11
+ const components_js_1 = require("./ui/components.js");
12
+ const completer_js_1 = require("./completer.js");
13
+ /**
14
+ * Built-in commands that are handled directly by the REPL
15
+ */
16
+ const BUILTIN_COMMANDS = [
17
+ { name: 'exit', description: 'Exit the CLI' },
18
+ { name: 'quit', description: 'Exit the CLI (alias for exit)' },
19
+ { name: 'q', description: 'Exit the CLI (short alias)' },
20
+ { name: 'clear', description: 'Clear the screen' },
21
+ { name: 'cls', description: 'Clear the screen (alias)' },
22
+ ];
23
+ /**
24
+ * Get all commands with descriptions
25
+ */
26
+ function getAllCommandSuggestions() {
27
+ const commands = (0, registry_js_1.listCommands)().map(cmd => ({
28
+ name: cmd.name,
29
+ description: cmd.description,
30
+ }));
31
+ return [...commands, ...BUILTIN_COMMANDS];
32
+ }
33
+ /**
34
+ * Raw input handler for real-time suggestions
35
+ */
36
+ class RawInputHandler {
37
+ buffer = '';
38
+ filteredSuggestions = [];
39
+ selectedIndex = 0;
40
+ showingSuggestions = false;
41
+ prompt;
42
+ allCommands;
43
+ lastSuggestionLineCount = 0;
44
+ inBracketedPaste = false;
45
+ pasteBuffer = '';
46
+ pasteTimeout = null;
47
+ static PASTE_TIMEOUT_MS = 5000; // 5 second timeout for bracketed paste
48
+ constructor(prompt = 'clawsql ❯ ') {
49
+ this.prompt = prompt;
50
+ this.allCommands = getAllCommandSuggestions();
51
+ this.enableBracketedPaste();
52
+ }
53
+ /**
54
+ * Enable bracketed paste mode (for better paste handling)
55
+ */
56
+ enableBracketedPaste() {
57
+ if (process.stdout.isTTY) {
58
+ process.stdout.write('\x1B[?2004h');
59
+ }
60
+ }
61
+ /**
62
+ * Disable bracketed paste mode
63
+ */
64
+ disableBracketedPaste() {
65
+ if (process.stdout.isTTY) {
66
+ process.stdout.write('\x1B[?2004l');
67
+ }
68
+ }
69
+ /**
70
+ * Clear the paste timeout
71
+ */
72
+ clearPasteTimeout() {
73
+ if (this.pasteTimeout) {
74
+ clearTimeout(this.pasteTimeout);
75
+ this.pasteTimeout = null;
76
+ }
77
+ }
78
+ /**
79
+ * Cleanup - call when done with the handler
80
+ */
81
+ cleanup() {
82
+ this.clearPasteTimeout();
83
+ this.disableBracketedPaste();
84
+ }
85
+ /**
86
+ * Get visible prompt length (strips ANSI escape codes)
87
+ */
88
+ getVisiblePromptLength() {
89
+ // Strip ANSI escape codes to get visible character count
90
+ // eslint-disable-next-line no-control-regex
91
+ return this.prompt.replace(/\x1B\[[0-9;]*m/g, '').length;
92
+ }
93
+ /**
94
+ * Start raw input mode and return the result
95
+ */
96
+ async readLine() {
97
+ return new Promise((resolve) => {
98
+ // Save current terminal state
99
+ const wasRaw = process.stdin.isRaw;
100
+ // Enable raw mode
101
+ if (process.stdin.isTTY) {
102
+ process.stdin.setRawMode(true);
103
+ }
104
+ process.stdin.resume();
105
+ process.stdin.setEncoding('utf8');
106
+ // Reset state
107
+ this.buffer = '';
108
+ this.filteredSuggestions = [];
109
+ this.selectedIndex = 0;
110
+ this.showingSuggestions = false;
111
+ this.lastSuggestionLineCount = 0;
112
+ // Show initial prompt
113
+ this.render();
114
+ const onData = (data) => {
115
+ const result = this.handleInput(data);
116
+ if (result.done) {
117
+ // Cleanup
118
+ process.stdin.off('data', onData);
119
+ if (process.stdin.isTTY && wasRaw !== undefined) {
120
+ process.stdin.setRawMode(wasRaw);
121
+ }
122
+ if (this.showingSuggestions) {
123
+ this.clearSuggestions();
124
+ }
125
+ resolve({
126
+ value: result.value ?? this.buffer,
127
+ cancelled: result.cancelled ?? false,
128
+ exitRequested: result.exitRequested ?? false,
129
+ });
130
+ }
131
+ };
132
+ process.stdin.on('data', onData);
133
+ });
134
+ }
135
+ /**
136
+ * Handle keyboard input
137
+ */
138
+ handleInput(data) {
139
+ // Handle bracketed paste mode
140
+ if (data.startsWith('\x1B[200~')) {
141
+ // Start of bracketed paste
142
+ this.inBracketedPaste = true;
143
+ this.pasteBuffer = '';
144
+ // Check if the end sequence is also in this chunk (complete paste in one chunk)
145
+ const endIdx = data.indexOf('\x1B[201~');
146
+ if (endIdx !== -1) {
147
+ // Complete paste in single chunk - extract content between markers
148
+ const content = data.slice(6, endIdx); // Between start and end sequences
149
+ this.inBracketedPaste = false;
150
+ this.processPaste(content);
151
+ return {};
152
+ }
153
+ // Set timeout to prevent getting stuck if end sequence never arrives
154
+ this.clearPasteTimeout();
155
+ this.pasteTimeout = setTimeout(() => {
156
+ if (this.inBracketedPaste && this.pasteBuffer) {
157
+ // Timeout - process what we have and exit bracketed paste mode
158
+ this.inBracketedPaste = false;
159
+ this.processPaste(this.pasteBuffer);
160
+ this.pasteBuffer = '';
161
+ }
162
+ }, RawInputHandler.PASTE_TIMEOUT_MS);
163
+ // Extract any content after the start sequence
164
+ const afterStart = data.slice(6); // '\x1B[200~'.length = 6
165
+ if (afterStart) {
166
+ this.pasteBuffer += afterStart;
167
+ }
168
+ return {};
169
+ }
170
+ if (this.inBracketedPaste) {
171
+ if (data.includes('\x1B[201~')) {
172
+ // End of bracketed paste
173
+ this.clearPasteTimeout();
174
+ this.inBracketedPaste = false;
175
+ // Extract content before the end sequence
176
+ const endIndex = data.indexOf('\x1B[201~');
177
+ this.pasteBuffer += data.slice(0, endIndex);
178
+ // Process the pasted content
179
+ this.processPaste(this.pasteBuffer);
180
+ this.pasteBuffer = '';
181
+ return {};
182
+ }
183
+ else {
184
+ // Continue collecting paste content
185
+ this.pasteBuffer += data;
186
+ return {};
187
+ }
188
+ }
189
+ // Ignore stray end bracketed paste sequence (can happen after timeout)
190
+ if (data.includes('\x1B[201~')) {
191
+ return {};
192
+ }
193
+ // Handle special keys
194
+ if (data === '\x03') { // Ctrl+C
195
+ // Cancel bracketed paste mode if stuck
196
+ this.clearPasteTimeout();
197
+ this.inBracketedPaste = false;
198
+ this.pasteBuffer = '';
199
+ this.clearSuggestions();
200
+ console.log();
201
+ return { done: true, cancelled: true };
202
+ }
203
+ if (data === '\x04') { // Ctrl+D
204
+ // Cancel bracketed paste mode if stuck
205
+ this.clearPasteTimeout();
206
+ this.inBracketedPaste = false;
207
+ this.pasteBuffer = '';
208
+ this.clearSuggestions();
209
+ return { done: true, cancelled: true, exitRequested: true };
210
+ }
211
+ if (data === '\x1B') { // Escape
212
+ // Cancel bracketed paste mode if stuck
213
+ if (this.inBracketedPaste) {
214
+ this.clearPasteTimeout();
215
+ this.inBracketedPaste = false;
216
+ // Process what we have so far
217
+ if (this.pasteBuffer) {
218
+ this.processPaste(this.pasteBuffer);
219
+ }
220
+ this.pasteBuffer = '';
221
+ this.render();
222
+ return {};
223
+ }
224
+ if (this.showingSuggestions) {
225
+ this.clearSuggestions();
226
+ this.showingSuggestions = false;
227
+ this.render();
228
+ }
229
+ return {};
230
+ }
231
+ // Arrow keys
232
+ if (data === '\x1B[A') { // Up
233
+ if (this.showingSuggestions && this.filteredSuggestions.length > 0) {
234
+ this.selectedIndex = Math.max(0, this.selectedIndex - 1);
235
+ this.renderSuggestions();
236
+ }
237
+ return {};
238
+ }
239
+ if (data === '\x1B[B') { // Down
240
+ if (this.showingSuggestions && this.filteredSuggestions.length > 0) {
241
+ this.selectedIndex = Math.min(this.filteredSuggestions.length - 1, this.selectedIndex + 1);
242
+ this.renderSuggestions();
243
+ }
244
+ return {};
245
+ }
246
+ // Tab or Enter - accept suggestion or submit
247
+ if (data === '\t' || data === '\r' || data === '\n') {
248
+ if (this.showingSuggestions && this.filteredSuggestions.length > 0) {
249
+ // Accept selected suggestion
250
+ const selected = this.filteredSuggestions[this.selectedIndex];
251
+ if (selected.isFlag) {
252
+ // Flag completion - replace the last part
253
+ const parts = this.buffer.split(/\s+/);
254
+ parts[parts.length - 1] = selected.name.split(' ')[0]; // Just the flag name
255
+ this.buffer = parts.join(' ') + ' ';
256
+ }
257
+ else {
258
+ // Command completion
259
+ this.buffer = '/' + selected.name + ' ';
260
+ }
261
+ this.clearSuggestions();
262
+ this.showingSuggestions = false;
263
+ if (data === '\r' || data === '\n') {
264
+ // Enter submits the command
265
+ console.log();
266
+ return { done: true, value: this.buffer };
267
+ }
268
+ else {
269
+ // Tab just accepts, continue editing
270
+ this.render();
271
+ return {};
272
+ }
273
+ }
274
+ else if (data === '\r' || data === '\n') {
275
+ // No suggestions, submit current buffer
276
+ console.log();
277
+ return { done: true, value: this.buffer };
278
+ }
279
+ return {};
280
+ }
281
+ // Backspace
282
+ if (data === '\x7F' || data === '\x08') {
283
+ if (this.buffer.length > 0) {
284
+ this.buffer = this.buffer.slice(0, -1);
285
+ this.updateSuggestions();
286
+ this.render();
287
+ }
288
+ return {};
289
+ }
290
+ // Regular character or multi-character paste (without bracketed paste mode)
291
+ if (data.length >= 1) {
292
+ // Filter out control characters and handle multi-character input
293
+ const printableChars = data.split('').filter(c => c >= ' ' && c <= '~').join('');
294
+ if (printableChars.length > 0) {
295
+ this.buffer += printableChars;
296
+ this.updateSuggestions();
297
+ this.render();
298
+ }
299
+ return {};
300
+ }
301
+ // Ignore other control sequences
302
+ return {};
303
+ }
304
+ /**
305
+ * Process pasted content
306
+ */
307
+ processPaste(content) {
308
+ // Filter out control characters but keep the paste content
309
+ const printableChars = content.split('').filter(c => c >= ' ' && c <= '~' || c === '\t').join('');
310
+ if (printableChars.length > 0) {
311
+ this.buffer += printableChars;
312
+ this.updateSuggestions();
313
+ this.render();
314
+ }
315
+ }
316
+ /**
317
+ * Update suggestions based on current buffer
318
+ */
319
+ updateSuggestions() {
320
+ if (!this.buffer.startsWith('/')) {
321
+ this.showingSuggestions = false;
322
+ this.filteredSuggestions = [];
323
+ return;
324
+ }
325
+ const input = this.buffer.slice(1);
326
+ const parts = input.split(/\s+/);
327
+ // Command name completion (first part)
328
+ if (parts.length === 1) {
329
+ const partial = parts[0].toLowerCase();
330
+ this.filteredSuggestions = this.allCommands.filter(cmd => cmd.name.toLowerCase().startsWith(partial));
331
+ this.selectedIndex = 0;
332
+ this.showingSuggestions = this.filteredSuggestions.length > 0;
333
+ return;
334
+ }
335
+ // Flag completion (starts with --)
336
+ const lastPart = parts[parts.length - 1];
337
+ if (lastPart.startsWith('--') || lastPart.startsWith('-')) {
338
+ const commandName = parts[0].toLowerCase();
339
+ const partial = lastPart.toLowerCase();
340
+ const flags = (0, completer_js_1.getFlags)(commandName);
341
+ this.filteredSuggestions = flags
342
+ .filter(f => f.name.toLowerCase().startsWith(partial))
343
+ .map(f => ({
344
+ name: f.name + (f.hasValue ? ` ${f.valuePlaceholder || '<value>'}` : ''),
345
+ description: f.description,
346
+ isFlag: true,
347
+ }));
348
+ this.selectedIndex = 0;
349
+ this.showingSuggestions = this.filteredSuggestions.length > 0;
350
+ return;
351
+ }
352
+ // No suggestions for other cases
353
+ this.showingSuggestions = false;
354
+ this.filteredSuggestions = [];
355
+ }
356
+ /**
357
+ * Render the current state
358
+ */
359
+ render() {
360
+ // Clear current line and show prompt + buffer
361
+ process.stdout.write('\x1B[2K\x1B[0G');
362
+ process.stdout.write(this.prompt + this.buffer);
363
+ // Show suggestions if applicable
364
+ if (this.showingSuggestions) {
365
+ this.renderSuggestions();
366
+ }
367
+ else if (this.lastSuggestionLineCount > 0) {
368
+ // No suggestions now, but we had some - clear them
369
+ this.clearOldSuggestions();
370
+ this.lastSuggestionLineCount = 0;
371
+ }
372
+ }
373
+ /**
374
+ * Render the suggestions dropdown
375
+ */
376
+ renderSuggestions() {
377
+ if (this.filteredSuggestions.length === 0)
378
+ return;
379
+ // Calculate terminal width
380
+ const width = process.stdout.columns || 80;
381
+ const nameWidth = Math.max(...this.filteredSuggestions.map(s => s.name.length)) + 2;
382
+ const descWidth = width - nameWidth - 6;
383
+ // Build suggestion lines
384
+ const lines = [];
385
+ // Top border
386
+ const borderLen = Math.min(width, 100);
387
+ lines.push(components_js_1.theme.muted('─'.repeat(borderLen)));
388
+ // Suggestions (show max 8)
389
+ const maxShow = Math.min(this.filteredSuggestions.length, 8);
390
+ for (let i = 0; i < maxShow; i++) {
391
+ const suggestion = this.filteredSuggestions[i];
392
+ const isSelected = i === this.selectedIndex;
393
+ const name = suggestion.name.padEnd(nameWidth);
394
+ const desc = this.truncateText(suggestion.description, descWidth);
395
+ if (isSelected) {
396
+ lines.push(components_js_1.theme.primary('❯ ') +
397
+ components_js_1.theme.primary.bold(name) +
398
+ components_js_1.theme.muted(desc));
399
+ }
400
+ else {
401
+ lines.push(' ' +
402
+ components_js_1.theme.info(name) +
403
+ components_js_1.theme.muted(desc));
404
+ }
405
+ }
406
+ if (this.filteredSuggestions.length > 8) {
407
+ lines.push(components_js_1.theme.muted(` ... and ${this.filteredSuggestions.length - 8} more`));
408
+ }
409
+ // Bottom border
410
+ lines.push(components_js_1.theme.muted('─'.repeat(borderLen)));
411
+ const newLineCount = lines.length;
412
+ const oldLineCount = this.lastSuggestionLineCount;
413
+ // Step 1: Move cursor down to first suggestion line (below input)
414
+ process.stdout.write('\x1B[1B'); // Move down 1 line
415
+ process.stdout.write('\x1B[0G'); // Go to start of line
416
+ // Step 2: Clear ONLY old suggestion lines (not new ones!)
417
+ // If oldLineCount is 0 (first render), we clear nothing
418
+ for (let i = 0; i < oldLineCount; i++) {
419
+ process.stdout.write('\x1B[2K'); // Clear this line
420
+ if (i < oldLineCount - 1) {
421
+ process.stdout.write('\x1B[1B'); // Move down to next line
422
+ }
423
+ }
424
+ // Step 3: Move cursor back to first suggestion line
425
+ if (oldLineCount > 0) {
426
+ process.stdout.write('\x1B[' + (oldLineCount - 1) + 'A');
427
+ }
428
+ process.stdout.write('\x1B[0G'); // Start of line
429
+ // Step 4: Write new suggestions
430
+ for (let i = 0; i < lines.length; i++) {
431
+ process.stdout.write(lines[i]);
432
+ if (i < lines.length - 1) {
433
+ process.stdout.write('\n'); // Newline to next line
434
+ }
435
+ }
436
+ // Step 5: Move cursor back up to input line
437
+ // We're at the last suggestion line, need to move up newLineCount lines
438
+ process.stdout.write('\x1B[' + newLineCount + 'A');
439
+ process.stdout.write('\x1B[0G'); // Start of line
440
+ // Step 6: Redraw input line (prompt + buffer) and position cursor
441
+ process.stdout.write(this.prompt + this.buffer);
442
+ const cursorCol = this.getVisiblePromptLength() + this.buffer.length + 1;
443
+ process.stdout.write('\x1B[' + cursorCol + 'G');
444
+ // Update line count for next render
445
+ this.lastSuggestionLineCount = newLineCount;
446
+ }
447
+ /**
448
+ * Clear suggestions from terminal
449
+ * @param resetCount If true, reset lastSuggestionLineCount to 0
450
+ */
451
+ clearSuggestions(resetCount = true) {
452
+ if (this.lastSuggestionLineCount === 0)
453
+ return;
454
+ // Move cursor down to first suggestion line
455
+ process.stdout.write('\x1B[1B');
456
+ process.stdout.write('\x1B[0G');
457
+ // Clear all suggestion lines
458
+ for (let i = 0; i < this.lastSuggestionLineCount; i++) {
459
+ process.stdout.write('\x1B[2K'); // Clear line
460
+ if (i < this.lastSuggestionLineCount - 1) {
461
+ process.stdout.write('\x1B[1B'); // Move down
462
+ }
463
+ }
464
+ // Move cursor back up to input line
465
+ process.stdout.write('\x1B[' + this.lastSuggestionLineCount + 'A');
466
+ process.stdout.write('\x1B[0G');
467
+ // Redraw input line and position cursor (using visible length)
468
+ process.stdout.write(this.prompt + this.buffer);
469
+ const cursorCol = this.getVisiblePromptLength() + this.buffer.length + 1;
470
+ process.stdout.write('\x1B[' + cursorCol + 'G');
471
+ if (resetCount) {
472
+ this.lastSuggestionLineCount = 0;
473
+ }
474
+ }
475
+ /**
476
+ * Clear old suggestions when no longer showing suggestions
477
+ */
478
+ clearOldSuggestions() {
479
+ this.clearSuggestions(true);
480
+ }
481
+ /**
482
+ * Truncate text with ellipsis
483
+ */
484
+ truncateText(text, maxWidth) {
485
+ if (text.length <= maxWidth)
486
+ return text;
487
+ if (maxWidth <= 3)
488
+ return '...';
489
+ return text.slice(0, maxWidth - 3) + '...';
490
+ }
491
+ }
492
+ exports.RawInputHandler = RawInputHandler;
493
+ //# sourceMappingURL=raw-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-input.js","sourceRoot":"","sources":["../../src/cli/raw-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * ClawSQL CLI - Command Registry
3
+ *
4
+ * Manages registration and lookup of CLI commands.
5
+ */
6
+ import { getSettings } from '../config/settings.js';
7
+ import { getOrchestratorClient } from '../core/discovery/topology.js';
8
+ import { getFailoverExecutor } from '../core/failover/executor.js';
9
+ import { getProxySQLManager } from '../core/routing/proxysql-manager.js';
10
+ import { getClusterViewService } from '../core/discovery/cluster-view.js';
11
+ import { Formatter } from './formatter.js';
12
+ /**
13
+ * CLI context passed to command handlers
14
+ */
15
+ export interface CLIContext {
16
+ settings: ReturnType<typeof getSettings>;
17
+ orchestrator: ReturnType<typeof getOrchestratorClient>;
18
+ failoverExecutor: ReturnType<typeof getFailoverExecutor>;
19
+ proxysql: ReturnType<typeof getProxySQLManager>;
20
+ clusterView: ReturnType<typeof getClusterViewService>;
21
+ formatter: Formatter;
22
+ outputFormat: 'table' | 'json';
23
+ /** Prompt user for confirmation. Returns true if user confirms. */
24
+ confirm: (message: string) => Promise<boolean>;
25
+ }
26
+ /**
27
+ * Command handler function type
28
+ */
29
+ export type CommandHandler = (args: string[], context: CLIContext) => Promise<void>;
30
+ /**
31
+ * Command definition
32
+ */
33
+ export interface Command {
34
+ /** Command name (e.g., 'topology' for /topology) */
35
+ name: string;
36
+ /** Short description for help */
37
+ description: string;
38
+ /** Usage example */
39
+ usage: string;
40
+ /** Command handler */
41
+ handler: CommandHandler;
42
+ /** Subcommands (optional) */
43
+ subcommands?: Map<string, Command>;
44
+ }
45
+ /**
46
+ * Command registry
47
+ */
48
+ declare class CommandRegistry {
49
+ private commands;
50
+ /**
51
+ * Register a new command
52
+ */
53
+ register(command: Command): void;
54
+ /**
55
+ * Get a command by name
56
+ */
57
+ get(name: string): Command | undefined;
58
+ /**
59
+ * Check if a command exists
60
+ */
61
+ has(name: string): boolean;
62
+ /**
63
+ * List all registered commands
64
+ */
65
+ list(): Command[];
66
+ /**
67
+ * Get command names
68
+ */
69
+ names(): string[];
70
+ }
71
+ /**
72
+ * Get the command registry instance
73
+ */
74
+ export declare function getRegistry(): CommandRegistry;
75
+ /**
76
+ * Register a command in the registry
77
+ */
78
+ export declare function registerCommand(command: Command): void;
79
+ /**
80
+ * Get a command from the registry
81
+ */
82
+ export declare function getCommand(name: string): Command | undefined;
83
+ /**
84
+ * List all commands
85
+ */
86
+ export declare function listCommands(): Command[];
87
+ /**
88
+ * Create CLI context with all services
89
+ */
90
+ export declare function createCLIContext(outputFormat?: 'table' | 'json', confirm?: (message: string) => Promise<boolean>): CLIContext;
91
+ /**
92
+ * Parse command input into command name and arguments
93
+ */
94
+ export declare function parseInput(input: string): {
95
+ command: string;
96
+ args: string[];
97
+ } | null;
98
+ /**
99
+ * Execute a command by name with arguments
100
+ */
101
+ export declare function executeCommand(commandName: string, args: string[], ctx: CLIContext): Promise<boolean>;
102
+ export {};
103
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"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"}