agent-database-cli 0.2.7 → 0.2.14

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 (72) hide show
  1. package/AI_INSTALL.md +1 -1
  2. package/README.md +81 -61
  3. package/README_EN.md +37 -11
  4. package/SKILL.md +2 -1
  5. package/bin/agent-database-cli.js +55 -0
  6. package/package.json +20 -27
  7. package/dist/adapters/base-sql.d.ts +0 -12
  8. package/dist/adapters/base-sql.js +0 -22
  9. package/dist/adapters/base-sql.js.map +0 -1
  10. package/dist/adapters/factory.d.ts +0 -2
  11. package/dist/adapters/factory.js +0 -26
  12. package/dist/adapters/factory.js.map +0 -1
  13. package/dist/adapters/mongodb.d.ts +0 -14
  14. package/dist/adapters/mongodb.js +0 -137
  15. package/dist/adapters/mongodb.js.map +0 -1
  16. package/dist/adapters/mysql.d.ts +0 -12
  17. package/dist/adapters/mysql.js +0 -38
  18. package/dist/adapters/mysql.js.map +0 -1
  19. package/dist/adapters/oracle-sqlcl.d.ts +0 -19
  20. package/dist/adapters/oracle-sqlcl.js +0 -334
  21. package/dist/adapters/oracle-sqlcl.js.map +0 -1
  22. package/dist/adapters/oracle.d.ts +0 -13
  23. package/dist/adapters/oracle.js +0 -47
  24. package/dist/adapters/oracle.js.map +0 -1
  25. package/dist/adapters/postgres.d.ts +0 -12
  26. package/dist/adapters/postgres.js +0 -40
  27. package/dist/adapters/postgres.js.map +0 -1
  28. package/dist/adapters/redis.d.ts +0 -15
  29. package/dist/adapters/redis.js +0 -91
  30. package/dist/adapters/redis.js.map +0 -1
  31. package/dist/cli.d.ts +0 -2
  32. package/dist/cli.js +0 -118
  33. package/dist/cli.js.map +0 -1
  34. package/dist/config.d.ts +0 -8
  35. package/dist/config.js +0 -147
  36. package/dist/config.js.map +0 -1
  37. package/dist/connection-manager.d.ts +0 -24
  38. package/dist/connection-manager.js +0 -91
  39. package/dist/connection-manager.js.map +0 -1
  40. package/dist/daemon/client.d.ts +0 -3
  41. package/dist/daemon/client.js +0 -33
  42. package/dist/daemon/client.js.map +0 -1
  43. package/dist/daemon/config-manager.d.ts +0 -15
  44. package/dist/daemon/config-manager.js +0 -44
  45. package/dist/daemon/config-manager.js.map +0 -1
  46. package/dist/daemon/control.d.ts +0 -9
  47. package/dist/daemon/control.js +0 -53
  48. package/dist/daemon/control.js.map +0 -1
  49. package/dist/daemon/paths.d.ts +0 -5
  50. package/dist/daemon/paths.js +0 -18
  51. package/dist/daemon/paths.js.map +0 -1
  52. package/dist/daemon/server.d.ts +0 -1
  53. package/dist/daemon/server.js +0 -119
  54. package/dist/daemon/server.js.map +0 -1
  55. package/dist/output.d.ts +0 -2
  56. package/dist/output.js +0 -39
  57. package/dist/output.js.map +0 -1
  58. package/dist/runtime.d.ts +0 -5
  59. package/dist/runtime.js +0 -25
  60. package/dist/runtime.js.map +0 -1
  61. package/dist/security.d.ts +0 -8
  62. package/dist/security.js +0 -239
  63. package/dist/security.js.map +0 -1
  64. package/dist/ssh-tunnel.d.ts +0 -8
  65. package/dist/ssh-tunnel.js +0 -231
  66. package/dist/ssh-tunnel.js.map +0 -1
  67. package/dist/types.d.ts +0 -69
  68. package/dist/types.js +0 -2
  69. package/dist/types.js.map +0 -1
  70. package/dist/utils/masking.d.ts +0 -2
  71. package/dist/utils/masking.js +0 -14
  72. package/dist/utils/masking.js.map +0 -1
@@ -1,231 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import { homedir } from "node:os";
3
- import { isAbsolute, join } from "node:path";
4
- import net from "node:net";
5
- import { Client } from "ssh2";
6
- const DEFAULT_PORTS = {
7
- mysql: 3306,
8
- postgres: 5432,
9
- redis: 6379,
10
- oracle: 1521,
11
- mongodb: 27017
12
- };
13
- export async function startSshTunnel(config) {
14
- if (!config.sshTunnel) {
15
- return undefined;
16
- }
17
- if (config.type === "redis" && config.redisCluster) {
18
- return startRedisClusterSshTunnel(config);
19
- }
20
- const endpoint = parseDatabaseEndpoint(config.type, config.url);
21
- const ssh = new Client();
22
- const server = net.createServer((socket) => {
23
- ssh.forwardOut(socket.localAddress || "127.0.0.1", socket.localPort || 0, endpoint.host, endpoint.port, (error, stream) => {
24
- if (error) {
25
- socket.destroy(error);
26
- return;
27
- }
28
- socket.pipe(stream).pipe(socket);
29
- });
30
- });
31
- try {
32
- await connectSshClient(ssh, config.sshTunnel);
33
- const localPort = await listenLocal(server);
34
- const url = rewriteDatabaseUrl(config.type, config.url, "127.0.0.1", localPort);
35
- return {
36
- url,
37
- async close() {
38
- await closeServer(server);
39
- ssh.end();
40
- }
41
- };
42
- }
43
- catch (error) {
44
- await closeServer(server);
45
- ssh.end();
46
- throw error;
47
- }
48
- }
49
- async function startRedisClusterSshTunnel(config) {
50
- const ssh = new Client();
51
- const servers = [];
52
- try {
53
- await connectSshClient(ssh, config.sshTunnel);
54
- const nodeAddressMap = {};
55
- const localNodes = [];
56
- for (const nodeUrl of config.redisCluster.nodes) {
57
- const endpoint = parseRedisClusterNode(nodeUrl);
58
- const server = createForwardServer(ssh, endpoint.host, endpoint.port);
59
- servers.push(server);
60
- const localPort = await listenLocal(server);
61
- localNodes.push(rewriteDatabaseUrl("redis", nodeUrl, "127.0.0.1", localPort));
62
- nodeAddressMap[`${endpoint.host}:${endpoint.port}`] = { host: "127.0.0.1", port: localPort };
63
- }
64
- return {
65
- url: rewriteDatabaseUrl("redis", config.url, "127.0.0.1", extractPort(localNodes[0])),
66
- redisCluster: {
67
- nodes: localNodes,
68
- nodeAddressMap
69
- },
70
- async close() {
71
- await Promise.all(servers.map((server) => closeServer(server)));
72
- ssh.end();
73
- }
74
- };
75
- }
76
- catch (error) {
77
- await Promise.all(servers.map((server) => closeServer(server).catch(() => undefined)));
78
- ssh.end();
79
- throw error;
80
- }
81
- }
82
- function createForwardServer(ssh, host, port) {
83
- return net.createServer((socket) => {
84
- ssh.forwardOut(socket.localAddress || "127.0.0.1", socket.localPort || 0, host, port, (error, stream) => {
85
- if (error) {
86
- socket.destroy(error);
87
- return;
88
- }
89
- socket.pipe(stream).pipe(socket);
90
- });
91
- });
92
- }
93
- export function rewriteDatabaseUrl(type, url, host, port) {
94
- if (type === "mongodb") {
95
- return rewriteMongoUrl(url, host, port);
96
- }
97
- const parsed = new URL(url);
98
- parsed.hostname = host;
99
- parsed.port = String(port);
100
- return parsed.toString();
101
- }
102
- function rewriteMongoUrl(url, host, port) {
103
- if (isMongoMultiHostUrl(url)) {
104
- throw new Error("SSH 隧道暂不支持 MongoDB 多 host URL");
105
- }
106
- const parsed = new URL(url);
107
- parsed.hostname = host;
108
- parsed.port = String(port);
109
- return parsed.toString();
110
- }
111
- function parseDatabaseEndpoint(type, url) {
112
- if (type === "mongodb" && isMongoMultiHostUrl(url)) {
113
- throw new Error("SSH 隧道暂不支持 MongoDB 多 host URL");
114
- }
115
- const parsed = new URL(url);
116
- const host = parsed.hostname;
117
- if (!host) {
118
- throw new Error("数据库 URL 必须包含 host 才能建立 SSH 隧道");
119
- }
120
- return {
121
- host,
122
- port: parsed.port ? Number(parsed.port) : DEFAULT_PORTS[type]
123
- };
124
- }
125
- function parseRedisClusterNode(url) {
126
- const parsed = new URL(url);
127
- if (!parsed.hostname) {
128
- throw new Error("Redis Cluster 节点 URL 必须包含 host");
129
- }
130
- return {
131
- host: parsed.hostname,
132
- port: parsed.port ? Number(parsed.port) : DEFAULT_PORTS.redis
133
- };
134
- }
135
- function extractPort(url) {
136
- const parsed = new URL(url);
137
- return parsed.port ? Number(parsed.port) : DEFAULT_PORTS.redis;
138
- }
139
- async function connectSshClient(client, tunnel) {
140
- const connectConfig = await buildConnectConfig(tunnel);
141
- await new Promise((resolve, reject) => {
142
- const onReady = () => {
143
- cleanup();
144
- resolve();
145
- };
146
- const onError = (error) => {
147
- cleanup();
148
- reject(error);
149
- };
150
- const cleanup = () => {
151
- client.off("ready", onReady);
152
- client.off("error", onError);
153
- };
154
- client.once("ready", onReady);
155
- client.once("error", onError);
156
- client.connect(connectConfig);
157
- });
158
- }
159
- async function buildConnectConfig(tunnel) {
160
- const connectConfig = {
161
- host: tunnel.host,
162
- port: tunnel.port ?? 22,
163
- username: tunnel.username,
164
- readyTimeout: tunnel.readyTimeout
165
- };
166
- if (tunnel.password) {
167
- connectConfig.password = tunnel.password;
168
- }
169
- if (tunnel.privateKeyPath) {
170
- connectConfig.privateKey = await readFile(resolveHomePath(tunnel.privateKeyPath), "utf8");
171
- }
172
- else if (tunnel.privateKey) {
173
- connectConfig.privateKey = tunnel.privateKey;
174
- }
175
- if (tunnel.passphrase) {
176
- connectConfig.passphrase = tunnel.passphrase;
177
- }
178
- return connectConfig;
179
- }
180
- function listenLocal(server) {
181
- return new Promise((resolve, reject) => {
182
- const onError = (error) => {
183
- server.off("listening", onListening);
184
- reject(error);
185
- };
186
- const onListening = () => {
187
- server.off("error", onError);
188
- const address = server.address();
189
- if (!address || typeof address === "string") {
190
- reject(new Error("本地 SSH 隧道端口监听失败"));
191
- return;
192
- }
193
- resolve(address.port);
194
- };
195
- server.once("error", onError);
196
- server.once("listening", onListening);
197
- server.listen(0, "127.0.0.1");
198
- });
199
- }
200
- function closeServer(server) {
201
- if (!server.listening) {
202
- return Promise.resolve();
203
- }
204
- return new Promise((resolve, reject) => {
205
- server.close((error) => {
206
- if (error) {
207
- reject(error);
208
- return;
209
- }
210
- resolve();
211
- });
212
- });
213
- }
214
- function resolveHomePath(path) {
215
- if (path === "~") {
216
- return homedir();
217
- }
218
- if (path.startsWith("~/")) {
219
- return join(homedir(), path.slice(2));
220
- }
221
- return isAbsolute(path) ? path : path;
222
- }
223
- function isMongoMultiHostUrl(url) {
224
- if (!url.startsWith("mongodb://")) {
225
- return false;
226
- }
227
- const authority = url.slice("mongodb://".length).split(/[/?#]/, 1)[0] ?? "";
228
- const hosts = authority.includes("@") ? authority.slice(authority.lastIndexOf("@") + 1) : authority;
229
- return hosts.includes(",");
230
- }
231
- //# sourceMappingURL=ssh-tunnel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssh-tunnel.js","sourceRoot":"","sources":["../src/ssh-tunnel.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts DELETED
@@ -1,69 +0,0 @@
1
- export type DatabaseType = "mysql" | "postgres" | "redis" | "oracle" | "mongodb";
2
- export type OutputFormat = "json" | "table";
3
- export interface DatabaseConfig {
4
- type: DatabaseType;
5
- url: string;
6
- redisCluster?: RedisClusterConfig;
7
- sshTunnel?: SshTunnelConfig;
8
- database?: string;
9
- oracleDriver?: "oracledb" | "sqlcl";
10
- sqlclPath?: string;
11
- javaHome?: string;
12
- readonly?: boolean;
13
- blacklist?: string[];
14
- keepAliveSeconds?: number;
15
- }
16
- export interface RedisClusterConfig {
17
- nodes: string[];
18
- }
19
- export interface RedisClusterConnectionConfig {
20
- nodes: string[];
21
- nodeAddressMap?: Record<string, RedisNodeAddress>;
22
- }
23
- export interface RedisNodeAddress {
24
- host: string;
25
- port: number;
26
- }
27
- export interface SshTunnelConfig {
28
- host: string;
29
- port?: number;
30
- username: string;
31
- password?: string;
32
- privateKeyPath?: string;
33
- privateKey?: string;
34
- passphrase?: string;
35
- readyTimeout?: number;
36
- }
37
- export interface AppConfig {
38
- databases: Record<string, DatabaseConfig>;
39
- }
40
- export interface MetadataRequest {
41
- type: "tables" | "columns" | "collections" | "keys";
42
- table?: string;
43
- pattern?: string;
44
- }
45
- export interface QueryResult {
46
- rows: unknown[];
47
- fields?: string[];
48
- rowCount?: number;
49
- }
50
- export interface DatabaseAdapter {
51
- connect(): Promise<void>;
52
- disconnect(): Promise<void>;
53
- test(): Promise<void>;
54
- execute(command: string): Promise<QueryResult>;
55
- metadata(request: MetadataRequest): Promise<QueryResult>;
56
- }
57
- export type DaemonAction = "test" | "execute" | "metadata" | "reset" | "status" | "stop";
58
- export interface DaemonRequest {
59
- action: DaemonAction;
60
- db?: string;
61
- command?: string;
62
- metadata?: MetadataRequest;
63
- configPath?: string;
64
- }
65
- export interface DaemonResponse {
66
- ok: boolean;
67
- data?: unknown;
68
- error?: string;
69
- }
package/dist/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export declare function maskSecret(input: string): string;
2
- export declare function toErrorMessage(error: unknown): string;
@@ -1,14 +0,0 @@
1
- export function maskSecret(input) {
2
- return input
3
- .replace(/(password=)([^&\s]+)/gi, "$1****")
4
- .replace(/(token=)([^&\s]+)/gi, "$1****")
5
- .replace(/(secret=)([^&\s]+)/gi, "$1****")
6
- .replace(/:\/\/([^:\s/@]+):([^@\s]+)@/g, "://$1:****@");
7
- }
8
- export function toErrorMessage(error) {
9
- if (error instanceof Error) {
10
- return maskSecret(error.message);
11
- }
12
- return maskSecret(String(error));
13
- }
14
- //# sourceMappingURL=masking.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"masking.js","sourceRoot":"","sources":["../../src/utils/masking.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK;SACT,OAAO,CAAC,wBAAwB,EAAE,QAAQ,CAAC;SAC3C,OAAO,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACxC,OAAO,CAAC,sBAAsB,EAAE,QAAQ,CAAC;SACzC,OAAO,CAAC,8BAA8B,EAAE,aAAa,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACnC,CAAC"}