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,447 @@
1
+ "use strict";
2
+ /**
3
+ * ClawSQL CLI - Interactive REPL
4
+ *
5
+ * Read-Eval-Print Loop for interactive CLI sessions.
6
+ * Features: Real-time suggestions, keyboard navigation, professional UI.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.REPL = void 0;
43
+ exports.startREPL = startREPL;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const os = __importStar(require("os"));
47
+ const registry_js_1 = require("./registry.js");
48
+ const index_js_1 = require("./agent/index.js");
49
+ const completer_js_1 = require("./completer.js");
50
+ const formatter_js_1 = require("./formatter.js");
51
+ const raw_input_js_1 = require("./raw-input.js");
52
+ const components_js_1 = require("./ui/components.js");
53
+ /**
54
+ * Default REPL configuration
55
+ */
56
+ const DEFAULT_CONFIG = {
57
+ prompt: 'clawsql> ',
58
+ historyFile: path.join(os.homedir(), '.clawsql', 'history'),
59
+ historySize: 1000,
60
+ };
61
+ /**
62
+ * Interactive REPL session
63
+ */
64
+ class REPL {
65
+ config;
66
+ context;
67
+ running = false;
68
+ history = [];
69
+ agent = null;
70
+ keepAlive = null;
71
+ completer = null;
72
+ currentContext = '';
73
+ orchestratorConnected = false;
74
+ rawInputHandler = null;
75
+ constructor(config) {
76
+ this.config = { ...DEFAULT_CONFIG, ...config };
77
+ this.context = (0, registry_js_1.createCLIContext)();
78
+ this.loadHistory();
79
+ this.initAgent();
80
+ this.initCompleter();
81
+ this.rawInputHandler = new raw_input_js_1.RawInputHandler(this.getPrompt());
82
+ }
83
+ /**
84
+ * Initialize the completer
85
+ */
86
+ initCompleter() {
87
+ this.completer = (0, completer_js_1.createCompleter)();
88
+ }
89
+ /**
90
+ * Check orchestrator connection
91
+ */
92
+ async checkOrchestratorConnection() {
93
+ try {
94
+ return await this.context.orchestrator.healthCheck();
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Initialize AI agent
102
+ */
103
+ initAgent() {
104
+ const aiConfig = (0, index_js_1.loadAIConfig)();
105
+ // Always create agent - it will try OpenClaw first, then fall back to LLM
106
+ this.agent = (0, index_js_1.createAIAgent)(this.context, {
107
+ enabled: aiConfig.enabled || true, // Default enabled
108
+ provider: aiConfig.provider,
109
+ });
110
+ }
111
+ /**
112
+ * Start the REPL session
113
+ */
114
+ start() {
115
+ this.running = true;
116
+ // Keep the process alive for async operations
117
+ this.keepAlive = setInterval(() => { }, 10000);
118
+ // Check orchestrator connection in background
119
+ void this.checkOrchestratorConnection().then(connected => {
120
+ this.orchestratorConnected = connected;
121
+ });
122
+ // Print welcome banner
123
+ this.printBanner();
124
+ // Start the main input loop with raw input handler
125
+ void this.runInputLoop();
126
+ }
127
+ /**
128
+ * Main input loop using RawInputHandler for real-time suggestions
129
+ */
130
+ async runInputLoop() {
131
+ while (this.running) {
132
+ try {
133
+ // Show prompt and get input with real-time suggestions
134
+ process.stdout.write(this.getPrompt());
135
+ const result = await this.rawInputHandler.readLine();
136
+ // Ctrl+D - exit requested
137
+ if (result.exitRequested) {
138
+ this.stop();
139
+ return;
140
+ }
141
+ // Ctrl+C - cancel current input, continue
142
+ if (result.cancelled) {
143
+ continue;
144
+ }
145
+ const input = result.value.trim();
146
+ // Skip empty input
147
+ if (!input) {
148
+ continue;
149
+ }
150
+ // Add to history
151
+ this.addToHistory(input);
152
+ // Handle special commands
153
+ if (input === '/exit' || input === '/quit' || input === '/q') {
154
+ // Move up one line (console.log moved us down), clear, and show goodbye
155
+ process.stdout.write('\x1B[1A\r\x1B[K');
156
+ process.stdout.write(this.getPrompt() + input + ' ' + components_js_1.theme.primary('Goodbye!') + '\n');
157
+ this.stop(false);
158
+ return;
159
+ }
160
+ // Clear screen command
161
+ if (input === '/clear' || input === '/cls') {
162
+ (0, components_js_1.clearScreen)();
163
+ this.printBanner();
164
+ continue;
165
+ }
166
+ // Parse and execute command
167
+ const parsed = (0, registry_js_1.parseInput)(input);
168
+ if (parsed) {
169
+ if (parsed.command) {
170
+ // Check if command exists
171
+ const cmd = (0, registry_js_1.getCommand)(parsed.command);
172
+ if (!cmd) {
173
+ // Command not found - show suggestions
174
+ if (this.completer) {
175
+ const similar = this.completer.findSimilar(parsed.command);
176
+ console.log((0, components_js_1.createDidYouMean)(`/${parsed.command}`, similar));
177
+ }
178
+ else {
179
+ console.log(this.context.formatter.error(`Unknown command: /${parsed.command}`));
180
+ console.log(this.context.formatter.info('Type /help to see available commands.'));
181
+ }
182
+ continue;
183
+ }
184
+ await (0, registry_js_1.executeCommand)(parsed.command, parsed.args, this.context);
185
+ }
186
+ else {
187
+ // No command prefix - treat as natural language
188
+ await this.handleNaturalLanguage(input);
189
+ }
190
+ }
191
+ }
192
+ catch (err) {
193
+ console.error('Command error:', err);
194
+ }
195
+ }
196
+ }
197
+ /**
198
+ * Stop the REPL session
199
+ */
200
+ stop(printGoodbye = true) {
201
+ // Set running to false immediately to prevent prompt from showing
202
+ this.running = false;
203
+ // Cleanup raw input handler (disable bracketed paste mode)
204
+ if (this.rawInputHandler) {
205
+ this.rawInputHandler.cleanup();
206
+ }
207
+ if (this.keepAlive) {
208
+ clearInterval(this.keepAlive);
209
+ this.keepAlive = null;
210
+ }
211
+ this.saveHistory();
212
+ if (printGoodbye) {
213
+ process.stdout.write(' ' + components_js_1.theme.primary('Goodbye!\n'));
214
+ }
215
+ process.exit(0);
216
+ }
217
+ /**
218
+ * Handle natural language input using AI agent
219
+ */
220
+ async handleNaturalLanguage(input) {
221
+ const processor = new formatter_js_1.StreamingMarkdownProcessor();
222
+ let gotFirstChunk = false;
223
+ let spinnerInterval = null;
224
+ const startTime = Date.now();
225
+ // AbortController for cancelling the AI request
226
+ const abortController = new AbortController();
227
+ let wasAborted = false;
228
+ // Start thinking spinner
229
+ const spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
230
+ const thinkingMessages = [
231
+ 'Thinking...',
232
+ 'Consulting the cluster...',
233
+ 'Querying the depths...',
234
+ 'Processing your request...',
235
+ 'Analyzing topology...',
236
+ 'Connecting the dots...',
237
+ 'Parsing SQL mysteries...',
238
+ 'Asking the replicas nicely...',
239
+ 'Waking up the primary...',
240
+ 'Counting rows in background...',
241
+ 'Optimizing queries in my head...',
242
+ 'Checking for runaway transactions...',
243
+ 'Petitioning the binlogs...',
244
+ 'Synchronizing brain cells...',
245
+ 'Consulting the MySQL oracle...',
246
+ 'Herding the clusters...',
247
+ 'Decoding network packets...',
248
+ 'Channeling database vibes...',
249
+ 'Asking nicely for permission...',
250
+ 'Negotiating with ProxySQL...',
251
+ ];
252
+ let frameIndex = 0;
253
+ let msgIndex = 0;
254
+ spinnerInterval = setInterval(() => {
255
+ const frame = spinnerFrames[frameIndex % spinnerFrames.length];
256
+ const msg = thinkingMessages[msgIndex % thinkingMessages.length];
257
+ // Clear line before writing to handle shorter messages after longer ones
258
+ process.stdout.write(`\r\x1b[K${frame} ${msg} ${components_js_1.theme.muted('(double tap ESC to stop)')}`);
259
+ frameIndex++;
260
+ if (frameIndex % 20 === 0)
261
+ msgIndex++; // Change message every ~2s
262
+ }, 100);
263
+ // Set up ESC key listener to abort AI thinking
264
+ // Require double-ESC to abort: two ESC presses within 500ms
265
+ // This prevents spurious terminal-generated ESC events from triggering abort
266
+ let lastEscTime = 0;
267
+ const doubleEscThresholdMs = 500;
268
+ let abortResolve = null;
269
+ const abortPromise = new Promise((resolve) => {
270
+ abortResolve = resolve;
271
+ });
272
+ const escListener = (data) => {
273
+ // Ignore if not ESC
274
+ if (data !== '\x1B') {
275
+ return;
276
+ }
277
+ const now = Date.now();
278
+ // Check for double-ESC (two ESCs within threshold)
279
+ if (now - lastEscTime < doubleEscThresholdMs && !wasAborted) {
280
+ // Double-ESC detected - abort!
281
+ wasAborted = true;
282
+ abortController.abort();
283
+ process.stdin.off('data', escListener);
284
+ // Clean up spinner
285
+ if (spinnerInterval) {
286
+ clearInterval(spinnerInterval);
287
+ spinnerInterval = null;
288
+ }
289
+ // Show stopped message
290
+ const elapsed = ((now - startTime) / 1000).toFixed(1);
291
+ process.stdout.write(`\r\x1b[K${components_js_1.theme.warning('⏹ Stopped')} (${elapsed}s)\n`);
292
+ // Immediately resolve the abort promise to unblock the main flow
293
+ // This ensures the prompt appears without waiting for agent cleanup
294
+ if (abortResolve) {
295
+ abortResolve();
296
+ }
297
+ }
298
+ else {
299
+ // First ESC or too slow - just record the time
300
+ lastEscTime = now;
301
+ }
302
+ };
303
+ // Enable raw mode and add listener
304
+ const wasRaw = process.stdin.isRaw;
305
+ if (process.stdin.isTTY) {
306
+ if (wasRaw !== true) {
307
+ process.stdin.setRawMode(true);
308
+ }
309
+ }
310
+ process.stdin.on('data', escListener);
311
+ try {
312
+ // Race between the agent processing and the abort promise
313
+ await Promise.race([
314
+ this.agent.process(input, (chunk) => {
315
+ // Ignore chunks if already aborted
316
+ if (wasAborted) {
317
+ return;
318
+ }
319
+ // Stop spinner on first chunk
320
+ if (!gotFirstChunk) {
321
+ gotFirstChunk = true;
322
+ if (spinnerInterval) {
323
+ clearInterval(spinnerInterval);
324
+ spinnerInterval = null;
325
+ }
326
+ // Clear the spinner line
327
+ process.stdout.write('\r\x1b[K');
328
+ }
329
+ const { text, backspace } = processor.process(chunk);
330
+ if (backspace > 0) {
331
+ process.stdout.write(`\x1b[${backspace}D\x1b[K${text}`);
332
+ }
333
+ else if (text) {
334
+ process.stdout.write(text);
335
+ }
336
+ }, abortController.signal),
337
+ abortPromise,
338
+ ]);
339
+ // Make sure spinner is stopped
340
+ if (spinnerInterval) {
341
+ clearInterval(spinnerInterval);
342
+ process.stdout.write('\r\x1b[K');
343
+ }
344
+ // Don't show remaining output if aborted
345
+ if (!wasAborted) {
346
+ const remaining = processor.flush();
347
+ if (remaining)
348
+ process.stdout.write(remaining);
349
+ process.stdout.write('\n\n');
350
+ }
351
+ }
352
+ catch (error) {
353
+ // Clean up spinner
354
+ if (spinnerInterval) {
355
+ clearInterval(spinnerInterval);
356
+ process.stdout.write('\r\x1b[K');
357
+ }
358
+ // Don't show error if aborted (already shown by ESC handler)
359
+ if (!wasAborted) {
360
+ const message = error instanceof Error ? error.message : String(error);
361
+ console.log(this.context.formatter.error(`AI error: ${message}`));
362
+ }
363
+ }
364
+ finally {
365
+ // Clean up ESC listener and restore raw mode
366
+ process.stdin.off('data', escListener);
367
+ if (process.stdin.isTTY && wasRaw !== undefined) {
368
+ process.stdin.setRawMode(wasRaw);
369
+ }
370
+ }
371
+ }
372
+ /**
373
+ * Get the prompt string
374
+ */
375
+ getPrompt() {
376
+ return (0, components_js_1.createPrompt)({
377
+ context: this.currentContext || undefined,
378
+ status: 'normal',
379
+ });
380
+ }
381
+ /**
382
+ * Print welcome banner
383
+ */
384
+ printBanner() {
385
+ const version = this.context.settings.appVersion;
386
+ const aiProvider = this.agent?.getProviderName();
387
+ console.log((0, components_js_1.createBanner)({
388
+ version,
389
+ aiStatus: {
390
+ enabled: this.agent?.isConfigured() ?? false,
391
+ provider: aiProvider,
392
+ },
393
+ orchestratorStatus: this.orchestratorConnected ? 'connected' : 'unknown',
394
+ }));
395
+ console.log((0, components_js_1.formatWelcomeMessage)());
396
+ }
397
+ /**
398
+ * Load command history from file
399
+ */
400
+ loadHistory() {
401
+ try {
402
+ const historyDir = path.dirname(this.config.historyFile);
403
+ if (!fs.existsSync(historyDir)) {
404
+ fs.mkdirSync(historyDir, { recursive: true });
405
+ }
406
+ if (fs.existsSync(this.config.historyFile)) {
407
+ const content = fs.readFileSync(this.config.historyFile, 'utf-8');
408
+ this.history = content.split('\n').filter(Boolean);
409
+ }
410
+ }
411
+ catch (error) {
412
+ // Ignore errors loading history
413
+ }
414
+ }
415
+ /**
416
+ * Save command history to file
417
+ */
418
+ saveHistory() {
419
+ try {
420
+ const historyDir = path.dirname(this.config.historyFile);
421
+ if (!fs.existsSync(historyDir)) {
422
+ fs.mkdirSync(historyDir, { recursive: true });
423
+ }
424
+ fs.writeFileSync(this.config.historyFile, this.history.slice(-this.config.historySize).join('\n'), 'utf-8');
425
+ }
426
+ catch (error) {
427
+ // Ignore errors saving history
428
+ }
429
+ }
430
+ /**
431
+ * Add command to history
432
+ */
433
+ addToHistory(command) {
434
+ this.history.push(command);
435
+ // Note: readline.Interface has history property but it's not in TypeScript types
436
+ // We manage history separately and sync on save
437
+ }
438
+ }
439
+ exports.REPL = REPL;
440
+ /**
441
+ * Start an interactive REPL session
442
+ */
443
+ function startREPL() {
444
+ const repl = new REPL();
445
+ repl.start();
446
+ }
447
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * ClawSQL CLI - UI Components
3
+ *
4
+ * Professional UI components for the interactive CLI.
5
+ * Inspired by Claude Code's clean, minimal style.
6
+ */
7
+ import { Ora } from 'ora';
8
+ /**
9
+ * Nord Theme Colors (https://www.nordtheme.com)
10
+ * Single source of truth for all CLI colors
11
+ */
12
+ export declare const nord: {
13
+ readonly polarNight: {
14
+ readonly nord0: "#2E3440";
15
+ readonly nord1: "#3B4252";
16
+ readonly nord2: "#434C5E";
17
+ readonly nord3: "#4C566A";
18
+ };
19
+ readonly snowStorm: {
20
+ readonly nord4: "#D8DEE9";
21
+ readonly nord5: "#E5E9F0";
22
+ readonly nord6: "#ECEFF4";
23
+ };
24
+ readonly frost: {
25
+ readonly nord7: "#8FBCBB";
26
+ readonly nord8: "#88C0D0";
27
+ readonly nord9: "#81A1C1";
28
+ readonly nord10: "#5E81AC";
29
+ };
30
+ readonly aurora: {
31
+ readonly nord11: "#BF616A";
32
+ readonly nord12: "#D08770";
33
+ readonly nord13: "#EBCB8B";
34
+ readonly nord14: "#A3BE8C";
35
+ readonly nord15: "#B48EAD";
36
+ };
37
+ };
38
+ /**
39
+ * Chalk-based theme for CLI output
40
+ * Use these functions for consistent colors across the CLI
41
+ */
42
+ export declare const theme: {
43
+ primary: import("chalk", { with: { "resolution-mode": "import" } }).ChalkInstance;
44
+ secondary: import("chalk", { with: { "resolution-mode": "import" } }).ChalkInstance;
45
+ success: import("chalk", { with: { "resolution-mode": "import" } }).ChalkInstance;
46
+ warning: import("chalk", { with: { "resolution-mode": "import" } }).ChalkInstance;
47
+ error: import("chalk", { with: { "resolution-mode": "import" } }).ChalkInstance;
48
+ info: import("chalk", { with: { "resolution-mode": "import" } }).ChalkInstance;
49
+ muted: import("chalk", { with: { "resolution-mode": "import" } }).ChalkInstance;
50
+ highlight: import("chalk", { with: { "resolution-mode": "import" } }).ChalkInstance;
51
+ accent: import("chalk", { with: { "resolution-mode": "import" } }).ChalkInstance;
52
+ };
53
+ /**
54
+ * Clean status indicators (no emojis)
55
+ * Use these for consistent icons across the CLI
56
+ */
57
+ export declare const indicators: {
58
+ success: string;
59
+ error: string;
60
+ warning: string;
61
+ info: string;
62
+ arrow: string;
63
+ bullet: string;
64
+ circle: string;
65
+ check: string;
66
+ cross: string;
67
+ prompt: string;
68
+ };
69
+ /**
70
+ * Create a professional banner with VSCode-inspired styling
71
+ */
72
+ export declare function createBanner(options: {
73
+ version: string;
74
+ aiStatus?: {
75
+ enabled: boolean;
76
+ provider?: string;
77
+ };
78
+ orchestratorStatus?: 'connected' | 'disconnected' | 'unknown';
79
+ }): string;
80
+ /**
81
+ * Create a contextual prompt string
82
+ */
83
+ export declare function createPrompt(options: {
84
+ context?: string;
85
+ status?: 'normal' | 'warning' | 'error';
86
+ }): string;
87
+ /**
88
+ * Create a suggestion box for command completions
89
+ */
90
+ export declare function createSuggestionBox(suggestions: string[], hint?: string): string;
91
+ /**
92
+ * Create a "did you mean?" suggestion
93
+ */
94
+ export declare function createDidYouMean(typed: string, suggestions: string[]): string;
95
+ /**
96
+ * Create a status bar
97
+ */
98
+ export declare function createStatusBar(options: {
99
+ clusters?: number;
100
+ instances?: number;
101
+ alerts?: number;
102
+ }): string;
103
+ /**
104
+ * Create a keybindings help box
105
+ */
106
+ export declare function createKeybindingsHelp(): string;
107
+ /**
108
+ * Clear the terminal screen
109
+ */
110
+ export declare function clearScreen(): void;
111
+ /**
112
+ * Create a spinner for async operations
113
+ */
114
+ export declare function createSpinner(text: string): Ora;
115
+ /**
116
+ * Format a command hint
117
+ */
118
+ export declare function formatCommandHint(command: string, description: string, usage: string): string;
119
+ /**
120
+ * Create a divider line
121
+ */
122
+ export declare function divider(char?: string, width?: number): string;
123
+ /**
124
+ * Format a welcome message
125
+ */
126
+ export declare function formatWelcomeMessage(): string;
127
+ /**
128
+ * Suggestion item for dropdown
129
+ */
130
+ export interface SuggestionItem {
131
+ name: string;
132
+ description: string;
133
+ }
134
+ /**
135
+ * Format a suggestions dropdown in Claude Code style
136
+ * Shows command suggestions with descriptions in a formatted panel
137
+ */
138
+ export declare function formatSuggestionsDropdown(suggestions: SuggestionItem[], selectedIndex: number, maxWidth?: number): string;
139
+ /**
140
+ * Clear the suggestions dropdown from the terminal
141
+ * @param numLines Number of lines to clear
142
+ */
143
+ export declare function clearSuggestionsDropdown(numLines: number): void;
144
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/components.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B;;;GAGG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;CAyBP,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;CAUjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;CAWtB,CAAC;AAUF;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,kBAAkB,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;CAC/D,GAAG,MAAM,CAuET;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;CACzC,GAAG,MAAM,CAkBT;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAa7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAiBT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAa9C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAM/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7F;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,GAAE,MAAY,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,cAAc,EAAE,EAC7B,aAAa,EAAE,MAAM,EACrB,QAAQ,GAAE,MAAqC,GAC9C,MAAM,CAsCR;AAWD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAO/D"}