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,332 @@
1
+ "use strict";
2
+ /**
3
+ * ClawSQL CLI - Autocomplete Module
4
+ *
5
+ * Provides tab completion for commands, subcommands, and arguments.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.createCompleter = createCompleter;
9
+ exports.formatCompletions = formatCompletions;
10
+ exports.getFlags = getFlags;
11
+ exports.completeFlags = completeFlags;
12
+ const registry_js_1 = require("./registry.js");
13
+ /**
14
+ * Built-in commands that are handled directly by the REPL
15
+ * These are not registered in the command registry
16
+ */
17
+ const BUILTIN_COMMANDS = [
18
+ { name: 'exit', description: 'Exit the CLI' },
19
+ { name: 'quit', description: 'Exit the CLI (alias for exit)' },
20
+ { name: 'q', description: 'Exit the CLI (short alias)' },
21
+ { name: 'clear', description: 'Clear the screen' },
22
+ { name: 'cls', description: 'Clear the screen (alias)' },
23
+ ];
24
+ /**
25
+ * Get all commands (registered + built-in) for completion
26
+ */
27
+ function getAllCommands() {
28
+ return [...(0, registry_js_1.listCommands)(), ...BUILTIN_COMMANDS];
29
+ }
30
+ /**
31
+ * Known subcommands for each command
32
+ * These are extracted from command handlers
33
+ */
34
+ const SUBCOMMANDS = {
35
+ failover: [
36
+ { name: 'status', description: 'Show failover status' },
37
+ { name: 'history', description: 'Show failover history' },
38
+ { name: 'switchover', description: 'Planned primary change' },
39
+ { name: 'failover', description: 'Emergency failover' },
40
+ { name: 'recover', description: 'Recover old primary' },
41
+ ],
42
+ instances: [
43
+ { name: 'list', description: 'List all instances' },
44
+ { name: 'add', description: 'Register new instance' },
45
+ { name: 'remove', description: 'Deregister instance' },
46
+ { name: 'discover', description: 'Scan network for MySQL instances' },
47
+ ],
48
+ clusters: [
49
+ { name: 'list', description: 'List all clusters' },
50
+ { name: 'topology', description: 'Show cluster topology' },
51
+ { name: 'sync', description: 'Sync cluster to ProxySQL' },
52
+ { name: 'promote', description: 'Promote a replica to primary' },
53
+ ],
54
+ cron: [
55
+ { name: 'list', description: 'List scheduled tasks' },
56
+ { name: 'add', description: 'Add scheduled task' },
57
+ { name: 'remove', description: 'Remove scheduled task' },
58
+ ],
59
+ notify: [
60
+ { name: 'send', description: 'Send notification' },
61
+ { name: 'channels', description: 'List channels' },
62
+ ],
63
+ config: [
64
+ { name: 'show', description: 'Display current configuration' },
65
+ { name: 'init', description: 'Interactive configuration wizard' },
66
+ { name: 'set', description: 'Set configuration value' },
67
+ { name: 'get', description: 'Get configuration value' },
68
+ ],
69
+ };
70
+ /**
71
+ * Known flags for each command
72
+ */
73
+ const FLAGS = {
74
+ start: [
75
+ { name: '--demo', description: 'Start with demo MySQL cluster' },
76
+ { name: '--json', description: 'Output in JSON format' },
77
+ ],
78
+ instances: [
79
+ { name: '--host', description: 'MySQL host', hasValue: true, valuePlaceholder: '<host>' },
80
+ { name: '--port', description: 'MySQL port', hasValue: true, valuePlaceholder: '<port>' },
81
+ { name: '--network', description: 'Network to scan', hasValue: true, valuePlaceholder: '<cidr>' },
82
+ { name: '--user', description: 'Admin user', hasValue: true, valuePlaceholder: '<user>' },
83
+ { name: '--password', description: 'Admin password', hasValue: true, valuePlaceholder: '<password>' },
84
+ ],
85
+ clusters: [
86
+ { name: '--name', description: 'Cluster name', hasValue: true, valuePlaceholder: '<name>' },
87
+ { name: '--primary', description: 'Primary host:port', hasValue: true, valuePlaceholder: '<host:port>' },
88
+ { name: '--replicas', description: 'Replica host:port list', hasValue: true, valuePlaceholder: '<h:p,...>' },
89
+ { name: '--host', description: 'Host to promote', hasValue: true, valuePlaceholder: '<host:port>' },
90
+ { name: '--json', description: 'Output in JSON format' },
91
+ ],
92
+ failover: [
93
+ { name: '--host', description: 'Target host:port', hasValue: true, valuePlaceholder: '<host:port>' },
94
+ { name: '--force', description: 'Skip confirmation prompts' },
95
+ { name: '--dry-run', description: 'Simulate without executing' },
96
+ ],
97
+ cleanup: [
98
+ { name: '--force', description: 'Skip confirmation prompt' },
99
+ ],
100
+ status: [
101
+ { name: '--json', description: 'Output in JSON format' },
102
+ { name: '--watch', description: 'Continuously update status' },
103
+ ],
104
+ topology: [
105
+ { name: '--cluster', description: 'Cluster name', hasValue: true, valuePlaceholder: '<name>' },
106
+ { name: '--json', description: 'Output in JSON format' },
107
+ ],
108
+ };
109
+ /**
110
+ * Create an autocomplete completer function for readline
111
+ */
112
+ function createCompleter() {
113
+ const registry = (0, registry_js_1.getRegistry)();
114
+ /**
115
+ * Complete command input
116
+ * Returns [completions, originalInput] for readline completer interface
117
+ */
118
+ function complete(line) {
119
+ const trimmed = line.trim();
120
+ // Empty line - show all commands
121
+ if (!trimmed) {
122
+ const allCommands = getAllCommands();
123
+ return [allCommands.map(c => `/${c.name}`), ''];
124
+ }
125
+ // Not a command (doesn't start with /)
126
+ if (!trimmed.startsWith('/')) {
127
+ return [[], line];
128
+ }
129
+ // Remove the leading / for processing
130
+ const input = trimmed.slice(1);
131
+ const parts = input.split(/\s+/);
132
+ const commandName = parts[0]?.toLowerCase() ?? '';
133
+ const args = parts.slice(1);
134
+ // Completing command name
135
+ if (parts.length === 1) {
136
+ const matches = completeCommand(commandName);
137
+ // Return with the / prefix
138
+ return [matches.map(m => `/${m}`), line];
139
+ }
140
+ // Completing subcommand or arguments
141
+ if (parts.length >= 2) {
142
+ const command = registry.get(commandName);
143
+ if (command) {
144
+ const subcommandMatches = completeSubcommand(commandName, args);
145
+ // Reconstruct the line prefix for the completion
146
+ const prefix = `/${commandName} `;
147
+ return [subcommandMatches.map(m => prefix + m), line];
148
+ }
149
+ }
150
+ return [[], line];
151
+ }
152
+ /**
153
+ * Complete a command name
154
+ */
155
+ function completeCommand(partial) {
156
+ const lower = partial.toLowerCase();
157
+ const allCommands = getAllCommands();
158
+ // Exact match
159
+ if (allCommands.some(c => c.name === lower)) {
160
+ return [lower];
161
+ }
162
+ // Prefix matches
163
+ return allCommands
164
+ .filter(c => c.name.startsWith(lower))
165
+ .map(c => c.name);
166
+ }
167
+ /**
168
+ * Complete a subcommand for a given command
169
+ */
170
+ function completeSubcommand(commandName, args) {
171
+ const subcommands = SUBCOMMANDS[commandName];
172
+ if (!subcommands || subcommands.length === 0) {
173
+ return [];
174
+ }
175
+ const partial = args[0]?.toLowerCase() ?? '';
176
+ // If we already have a complete subcommand, no more completions
177
+ if (args.length > 1) {
178
+ return [];
179
+ }
180
+ // Exact match
181
+ if (subcommands.some(s => s.name === partial)) {
182
+ return [partial];
183
+ }
184
+ // Prefix matches
185
+ return subcommands
186
+ .filter(s => s.name.startsWith(partial))
187
+ .map(s => s.name);
188
+ }
189
+ /**
190
+ * Get completion suggestions with descriptions
191
+ * Used for displaying help during autocomplete
192
+ */
193
+ function getSuggestions(input) {
194
+ const trimmed = input.trim();
195
+ if (!trimmed.startsWith('/')) {
196
+ return { completions: [] };
197
+ }
198
+ const parts = trimmed.slice(1).split(/\s+/);
199
+ const commandName = parts[0]?.toLowerCase() ?? '';
200
+ // Command name completion
201
+ if (parts.length === 1) {
202
+ const allCommands = getAllCommands();
203
+ const matches = allCommands.filter(c => c.name.startsWith(commandName));
204
+ if (matches.length === 0) {
205
+ return { completions: [] };
206
+ }
207
+ if (matches.length === 1) {
208
+ return {
209
+ completions: [`/${matches[0].name}`],
210
+ hint: matches[0].description,
211
+ };
212
+ }
213
+ return {
214
+ completions: matches.map(c => `/${c.name}`),
215
+ hint: `${matches.length} commands available`,
216
+ };
217
+ }
218
+ // Subcommand completion
219
+ if (parts.length >= 2) {
220
+ const subcommands = SUBCOMMANDS[commandName];
221
+ if (!subcommands) {
222
+ return { completions: [] };
223
+ }
224
+ const partial = parts[1]?.toLowerCase() ?? '';
225
+ const matches = subcommands.filter(s => s.name.startsWith(partial));
226
+ if (matches.length === 0) {
227
+ return { completions: [] };
228
+ }
229
+ if (matches.length === 1) {
230
+ return {
231
+ completions: [matches[0].name],
232
+ hint: matches[0].description,
233
+ };
234
+ }
235
+ // Multiple matches - show all with descriptions
236
+ const hint = matches.map(s => ` ${s.name.padEnd(12)} - ${s.description}`).join('\n');
237
+ return {
238
+ completions: matches.map(s => s.name),
239
+ hint,
240
+ };
241
+ }
242
+ return { completions: [] };
243
+ }
244
+ /**
245
+ * Get hint text for current input
246
+ */
247
+ function getHint(input) {
248
+ const result = getSuggestions(input);
249
+ return result.hint;
250
+ }
251
+ /**
252
+ * Find similar commands for "did you mean?" suggestions
253
+ */
254
+ function findSimilar(input) {
255
+ const allCommands = getAllCommands();
256
+ const inputLower = input.toLowerCase();
257
+ // Calculate Levenshtein distance for fuzzy matching
258
+ const withDistance = allCommands.map(c => ({
259
+ name: c.name,
260
+ distance: levenshteinDistance(inputLower, c.name.toLowerCase()),
261
+ }));
262
+ // Return commands with distance <= 3, sorted by distance
263
+ return withDistance
264
+ .filter(c => c.distance <= 3 && c.distance < input.length)
265
+ .sort((a, b) => a.distance - b.distance)
266
+ .slice(0, 3)
267
+ .map(c => c.name);
268
+ }
269
+ return {
270
+ complete,
271
+ getSuggestions,
272
+ getHint,
273
+ findSimilar,
274
+ completeCommand,
275
+ completeSubcommand,
276
+ };
277
+ }
278
+ /**
279
+ * Calculate Levenshtein distance between two strings
280
+ */
281
+ function levenshteinDistance(a, b) {
282
+ const matrix = [];
283
+ for (let i = 0; i <= b.length; i++) {
284
+ matrix[i] = [i];
285
+ }
286
+ for (let j = 0; j <= a.length; j++) {
287
+ matrix[0][j] = j;
288
+ }
289
+ for (let i = 1; i <= b.length; i++) {
290
+ for (let j = 1; j <= a.length; j++) {
291
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
292
+ matrix[i][j] = matrix[i - 1][j - 1];
293
+ }
294
+ else {
295
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
296
+ }
297
+ }
298
+ }
299
+ return matrix[b.length][a.length];
300
+ }
301
+ /**
302
+ * Format completions for display
303
+ */
304
+ function formatCompletions(completions, maxWidth = 80) {
305
+ if (completions.length === 0)
306
+ return '';
307
+ const maxLen = Math.max(...completions.map(c => c.length));
308
+ const cols = Math.floor(maxWidth / (maxLen + 2)) || 1;
309
+ const lines = [];
310
+ for (let i = 0; i < completions.length; i += cols) {
311
+ const row = completions.slice(i, i + cols);
312
+ lines.push(row.map(c => c.padEnd(maxLen + 2)).join(''));
313
+ }
314
+ return lines.join('\n');
315
+ }
316
+ /**
317
+ * Get flags for a command
318
+ */
319
+ function getFlags(commandName) {
320
+ return FLAGS[commandName] || [];
321
+ }
322
+ /**
323
+ * Complete flags for a command
324
+ */
325
+ function completeFlags(commandName, partial) {
326
+ const flags = FLAGS[commandName];
327
+ if (!flags)
328
+ return [];
329
+ const lower = partial.toLowerCase();
330
+ return flags.filter(f => f.name.toLowerCase().startsWith(lower));
331
+ }
332
+ //# sourceMappingURL=completer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completer.js","sourceRoot":"","sources":["../../src/cli/completer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * ClawSQL CLI - Output Formatter
3
+ *
4
+ * Provides formatted output for CLI commands (tables, colors, JSON).
5
+ */
6
+ /**
7
+ * Output format options
8
+ */
9
+ export type OutputFormat = 'table' | 'json' | 'plain';
10
+ /**
11
+ * Formatter configuration
12
+ */
13
+ export interface FormatterOptions {
14
+ format: OutputFormat;
15
+ colors: boolean;
16
+ }
17
+ /**
18
+ * Table column definition
19
+ */
20
+ export interface Column {
21
+ key: string;
22
+ header: string;
23
+ width?: number;
24
+ align?: 'left' | 'right' | 'center';
25
+ }
26
+ /**
27
+ * CLI Output Formatter
28
+ */
29
+ export declare class Formatter {
30
+ private format;
31
+ private colors;
32
+ constructor(options?: Partial<FormatterOptions>);
33
+ /**
34
+ * Format data as a table
35
+ */
36
+ table(data: Record<string, unknown>[], columns: Column[]): string;
37
+ /**
38
+ * Format data as JSON
39
+ */
40
+ json(data: unknown): string;
41
+ /**
42
+ * Format a success message
43
+ */
44
+ success(message: string): string;
45
+ /**
46
+ * Format an error message
47
+ */
48
+ error(message: string): string;
49
+ /**
50
+ * Format a warning message
51
+ */
52
+ warning(message: string): string;
53
+ /**
54
+ * Format an info message
55
+ */
56
+ info(message: string): string;
57
+ /**
58
+ * Format a header/title
59
+ */
60
+ header(title: string): string;
61
+ /**
62
+ * Format a section header (compact)
63
+ */
64
+ section(title: string): string;
65
+ /**
66
+ * Format a key-value pair (compact)
67
+ */
68
+ keyValue(key: string, value: unknown): string;
69
+ /**
70
+ * Format a tree structure (for topology)
71
+ */
72
+ tree(nodes: TreeNode[], indent?: number): string;
73
+ /**
74
+ * Format a merged cluster topology view
75
+ */
76
+ clusterTopology(cluster: ClusterTopologyData): string;
77
+ /**
78
+ * Format a single instance line for cluster topology
79
+ */
80
+ private formatInstanceLine;
81
+ /**
82
+ * Convert markdown to terminal-formatted text
83
+ */
84
+ markdown(text: string): string;
85
+ /**
86
+ * Set output format
87
+ */
88
+ setFormat(format: OutputFormat): void;
89
+ /**
90
+ * Get current format
91
+ */
92
+ getFormat(): OutputFormat;
93
+ }
94
+ /**
95
+ * Process streaming text with markdown formatting.
96
+ * Buffers text, processes markdown when complete patterns found.
97
+ */
98
+ export declare class StreamingMarkdownProcessor {
99
+ private buffer;
100
+ process(chunk: string): {
101
+ text: string;
102
+ backspace: number;
103
+ };
104
+ flush(): string;
105
+ }
106
+ /**
107
+ * Tree node for topology display
108
+ */
109
+ export interface TreeNode {
110
+ name: string;
111
+ type: 'primary' | 'replica' | 'unknown';
112
+ status?: string;
113
+ extra?: string;
114
+ children?: TreeNode[];
115
+ }
116
+ /**
117
+ * Merged instance info for cluster topology display
118
+ */
119
+ export interface ClusterInstanceInfo {
120
+ host: string;
121
+ port: number;
122
+ state: string;
123
+ role: string;
124
+ version?: string;
125
+ serverId?: number;
126
+ replicationLag?: number;
127
+ hostgroup?: number;
128
+ proxysqlStatus?: string;
129
+ connections?: number;
130
+ }
131
+ /**
132
+ * Sync warning for display
133
+ */
134
+ export interface SyncWarningDisplay {
135
+ type: 'missing_in_proxysql' | 'wrong_hostgroup' | 'unknown_in_orchestrator';
136
+ instance: string;
137
+ message: string;
138
+ }
139
+ /**
140
+ * Cluster topology data for display
141
+ */
142
+ export interface ClusterTopologyData {
143
+ displayName: string;
144
+ endpoint?: {
145
+ host: string;
146
+ port: number;
147
+ };
148
+ hostgroups?: {
149
+ writer: number;
150
+ reader: number;
151
+ };
152
+ primary: ClusterInstanceInfo | null;
153
+ replicas: ClusterInstanceInfo[];
154
+ health: string;
155
+ syncWarnings?: SyncWarningDisplay[];
156
+ }
157
+ /**
158
+ * Get the default formatter instance
159
+ */
160
+ export declare function getFormatter(): Formatter;
161
+ /**
162
+ * Create a new formatter with specific options
163
+ */
164
+ export declare function createFormatter(options?: Partial<FormatterOptions>): Formatter;
165
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/cli/formatter.ts"],"names":[],"mappings":"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"}