@hypnosis/docker-mcp-server 1.2.1 → 1.3.1
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.
- package/README.md +32 -0
- package/dist/adapters/database-adapter.d.ts +9 -5
- package/dist/adapters/database-adapter.d.ts.map +1 -1
- package/dist/adapters/postgresql.d.ts +15 -6
- package/dist/adapters/postgresql.d.ts.map +1 -1
- package/dist/adapters/postgresql.js +61 -32
- package/dist/adapters/postgresql.js.map +1 -1
- package/dist/adapters/redis.d.ts +13 -4
- package/dist/adapters/redis.d.ts.map +1 -1
- package/dist/adapters/redis.js +16 -11
- package/dist/adapters/redis.js.map +1 -1
- package/dist/adapters/sqlite.d.ts +14 -4
- package/dist/adapters/sqlite.d.ts.map +1 -1
- package/dist/adapters/sqlite.js +17 -11
- package/dist/adapters/sqlite.js.map +1 -1
- package/dist/adapters/types.d.ts +7 -0
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/discovery/compose-parser.d.ts.map +1 -1
- package/dist/discovery/compose-parser.js +4 -7
- package/dist/discovery/compose-parser.js.map +1 -1
- package/dist/discovery/project-discovery.d.ts.map +1 -1
- package/dist/discovery/project-discovery.js +4 -2
- package/dist/discovery/project-discovery.js.map +1 -1
- package/dist/index.js +15 -36
- package/dist/index.js.map +1 -1
- package/dist/managers/container-manager.d.ts +7 -0
- package/dist/managers/container-manager.d.ts.map +1 -1
- package/dist/managers/container-manager.js +35 -3
- package/dist/managers/container-manager.js.map +1 -1
- package/dist/tools/container-tools.d.ts +2 -10
- package/dist/tools/container-tools.d.ts.map +1 -1
- package/dist/tools/container-tools.js +50 -74
- package/dist/tools/container-tools.js.map +1 -1
- package/dist/tools/database-tools.d.ts +20 -1
- package/dist/tools/database-tools.d.ts.map +1 -1
- package/dist/tools/database-tools.js +163 -21
- package/dist/tools/database-tools.js.map +1 -1
- package/dist/tools/discovery-tools.d.ts +1 -8
- package/dist/tools/discovery-tools.d.ts.map +1 -1
- package/dist/tools/discovery-tools.js +9 -45
- package/dist/tools/discovery-tools.js.map +1 -1
- package/dist/tools/env-tools.d.ts +1 -7
- package/dist/tools/env-tools.d.ts.map +1 -1
- package/dist/tools/env-tools.js +35 -77
- package/dist/tools/env-tools.js.map +1 -1
- package/dist/tools/executor-tool.d.ts +0 -7
- package/dist/tools/executor-tool.d.ts.map +1 -1
- package/dist/tools/executor-tool.js +8 -45
- package/dist/tools/executor-tool.js.map +1 -1
- package/dist/tools/mcp-health-tool.d.ts +1 -3
- package/dist/tools/mcp-health-tool.d.ts.map +1 -1
- package/dist/tools/mcp-health-tool.js +24 -18
- package/dist/tools/mcp-health-tool.js.map +1 -1
- package/dist/tools/profile-tool.d.ts +5 -12
- package/dist/tools/profile-tool.d.ts.map +1 -1
- package/dist/tools/profile-tool.js +12 -33
- package/dist/tools/profile-tool.js.map +1 -1
- package/dist/utils/docker-client.d.ts +9 -1
- package/dist/utils/docker-client.d.ts.map +1 -1
- package/dist/utils/docker-client.js +30 -3
- package/dist/utils/docker-client.js.map +1 -1
- package/dist/utils/profile-resolver.d.ts +58 -0
- package/dist/utils/profile-resolver.d.ts.map +1 -0
- package/dist/utils/profile-resolver.js +218 -0
- package/dist/utils/profile-resolver.js.map +1 -0
- package/dist/utils/remote-compose.d.ts +32 -0
- package/dist/utils/remote-compose.d.ts.map +1 -0
- package/dist/utils/remote-compose.js +69 -0
- package/dist/utils/remote-compose.js.map +1 -0
- package/dist/utils/schema-helpers.d.ts +96 -0
- package/dist/utils/schema-helpers.d.ts.map +1 -0
- package/dist/utils/schema-helpers.js +61 -0
- package/dist/utils/schema-helpers.js.map +1 -0
- package/dist/utils/ssh-exec.d.ts.map +1 -1
- package/dist/utils/ssh-exec.js +5 -2
- package/dist/utils/ssh-exec.js.map +1 -1
- package/package.json +12 -12
package/README.md
CHANGED
|
@@ -109,6 +109,26 @@ Create `~/.docker-mcp/profiles.json`:
|
|
|
109
109
|
|
|
110
110
|
**Note:** If the profiles file doesn't exist or is invalid, the server will gracefully fall back to local Docker — no errors, no configuration needed!
|
|
111
111
|
|
|
112
|
+
### Using Profiles in Commands
|
|
113
|
+
|
|
114
|
+
Starting from v1.3.0, you can specify a `profile` parameter in any command to work with remote servers:
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
// List containers on remote production server
|
|
118
|
+
docker_container_list({profile: "production"})
|
|
119
|
+
|
|
120
|
+
// Query database on remote server
|
|
121
|
+
docker_db_query({service: "postgres", query: "SELECT * FROM users;", profile: "production"})
|
|
122
|
+
|
|
123
|
+
// Check status on staging server
|
|
124
|
+
docker_container_stats({service: "web", profile: "staging"})
|
|
125
|
+
|
|
126
|
+
// Local Docker (default, no profile needed)
|
|
127
|
+
docker_container_list() // Uses local Docker automatically
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
See [Remote Docker Guide](docs/REMOTE_DOCKER.md) for detailed information about profiles and remote management.
|
|
131
|
+
|
|
112
132
|
### Configuration for Claude Desktop
|
|
113
133
|
|
|
114
134
|
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
|
|
@@ -276,9 +296,21 @@ Keywords that trigger masking: `PASSWORD`, `TOKEN`, `KEY`, `SECRET`, `API_KEY`
|
|
|
276
296
|
- **[Testing System](docs/testing/README.md)** — Complete testing guide (E2E, Unit, Manual)
|
|
277
297
|
- **[Troubleshooting](docs/TROUBLESHOOTING.md)** — Common issues and solutions
|
|
278
298
|
- **[FAQ](docs/FAQ.md)** — Frequently asked questions
|
|
299
|
+
- **[Roadmap](docs/ROADMAP.md)** — Future development plans and upcoming features
|
|
279
300
|
|
|
280
301
|
For developer documentation, see [docs/DEV/README.md](docs/DEV/README.md)
|
|
281
302
|
|
|
303
|
+
### Roadmap Overview
|
|
304
|
+
|
|
305
|
+
The project roadmap outlines planned features and releases. Key upcoming features include:
|
|
306
|
+
|
|
307
|
+
- **v1.4.0 (Q1 2026)**: MySQL and MongoDB adapters
|
|
308
|
+
- **v1.5.0 (Q2 2026)**: Enhanced monitoring and analytics
|
|
309
|
+
- **v2.0.0 (Q3 2026)**: Plugin system and major architecture update
|
|
310
|
+
- **v2.1.0 (Q4 2026)**: Network, volume, and image management
|
|
311
|
+
|
|
312
|
+
See [docs/ROADMAP.md](docs/ROADMAP.md) for detailed information about future plans, priorities, and how to contribute to the roadmap.
|
|
313
|
+
|
|
282
314
|
## 🤝 Contributing
|
|
283
315
|
|
|
284
316
|
We welcome contributions! This is an open-source project built for the community.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Database Adapter Interface
|
|
3
3
|
* Interface for working with different database types
|
|
4
4
|
*/
|
|
5
|
-
import type { ServiceConfig } from '../discovery/types.js';
|
|
5
|
+
import type { ServiceConfig, ProjectConfig } from '../discovery/types.js';
|
|
6
6
|
import type { QueryOptions, BackupOptions, RestoreOptions, DBStatus, ConnectionInfo } from './types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Interface for Database Adapters
|
|
@@ -11,20 +11,24 @@ import type { QueryOptions, BackupOptions, RestoreOptions, DBStatus, ConnectionI
|
|
|
11
11
|
export interface DatabaseAdapter {
|
|
12
12
|
/**
|
|
13
13
|
* Execute query or command
|
|
14
|
+
* @param projectConfig - Optional pre-loaded project (for remote mode)
|
|
14
15
|
*/
|
|
15
|
-
query(service: string, query: string, options?: QueryOptions): Promise<string>;
|
|
16
|
+
query(service: string, query: string, options?: QueryOptions, projectConfig?: ProjectConfig): Promise<string>;
|
|
16
17
|
/**
|
|
17
18
|
* Create backup
|
|
19
|
+
* @param projectConfig - Optional pre-loaded project (for remote mode)
|
|
18
20
|
*/
|
|
19
|
-
backup(service: string, options: BackupOptions): Promise<string>;
|
|
21
|
+
backup(service: string, options: BackupOptions, projectConfig?: ProjectConfig): Promise<string>;
|
|
20
22
|
/**
|
|
21
23
|
* Restore from backup
|
|
24
|
+
* @param projectConfig - Optional pre-loaded project (for remote mode)
|
|
22
25
|
*/
|
|
23
|
-
restore(service: string, backupPath: string, options?: RestoreOptions): Promise<void>;
|
|
26
|
+
restore(service: string, backupPath: string, options?: RestoreOptions, projectConfig?: ProjectConfig): Promise<void>;
|
|
24
27
|
/**
|
|
25
28
|
* Get database status
|
|
29
|
+
* @param projectConfig - Optional pre-loaded project (for remote mode)
|
|
26
30
|
*/
|
|
27
|
-
status(service: string): Promise<DBStatus>;
|
|
31
|
+
status(service: string, projectConfig?: ProjectConfig): Promise<DBStatus>;
|
|
28
32
|
/**
|
|
29
33
|
* Get connection info from environment
|
|
30
34
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/database-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"database-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/database-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,KAAK,CACH,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,EACtB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhG;;;OAGG;IACH,OAAO,CACL,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,EACxB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE1E;;OAEG;IACH,iBAAiB,CACf,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,cAAc,CAAC;CACnB"}
|
|
@@ -4,28 +4,37 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { DatabaseAdapter } from './database-adapter.js';
|
|
6
6
|
import type { QueryOptions, BackupOptions, RestoreOptions, DBStatus, ConnectionInfo } from './types.js';
|
|
7
|
-
import type { ServiceConfig } from '../discovery/types.js';
|
|
7
|
+
import type { ServiceConfig, ProjectConfig } from '../discovery/types.js';
|
|
8
|
+
import { ContainerManager } from '../managers/container-manager.js';
|
|
9
|
+
import { ProjectDiscovery } from '../discovery/project-discovery.js';
|
|
10
|
+
import { EnvManager } from '../managers/env-manager.js';
|
|
8
11
|
export declare class PostgreSQLAdapter implements DatabaseAdapter {
|
|
9
12
|
private containerManager;
|
|
10
13
|
private projectDiscovery;
|
|
11
14
|
private envManager;
|
|
12
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Constructor with Dependency Injection
|
|
17
|
+
* @param containerManager - ContainerManager instance (with or without SSH config)
|
|
18
|
+
* @param projectDiscovery - ProjectDiscovery instance
|
|
19
|
+
* @param envManager - EnvManager instance
|
|
20
|
+
*/
|
|
21
|
+
constructor(containerManager: ContainerManager, projectDiscovery: ProjectDiscovery, envManager: EnvManager);
|
|
13
22
|
/**
|
|
14
23
|
* Execute SQL query
|
|
15
24
|
*/
|
|
16
|
-
query(service: string, query: string, options?: QueryOptions): Promise<string>;
|
|
25
|
+
query(service: string, query: string, options?: QueryOptions, projectConfig?: ProjectConfig): Promise<string>;
|
|
17
26
|
/**
|
|
18
27
|
* Create backup
|
|
19
28
|
*/
|
|
20
|
-
backup(service: string, options: BackupOptions): Promise<string>;
|
|
29
|
+
backup(service: string, options: BackupOptions, projectConfig?: ProjectConfig): Promise<string>;
|
|
21
30
|
/**
|
|
22
31
|
* Restore from backup
|
|
23
32
|
*/
|
|
24
|
-
restore(service: string, backupPath: string, options?: RestoreOptions): Promise<void>;
|
|
33
|
+
restore(service: string, backupPath: string, options?: RestoreOptions, projectConfig?: ProjectConfig): Promise<void>;
|
|
25
34
|
/**
|
|
26
35
|
* Get database status
|
|
27
36
|
*/
|
|
28
|
-
status(service: string): Promise<DBStatus>;
|
|
37
|
+
status(service: string, projectConfig?: ProjectConfig): Promise<DBStatus>;
|
|
29
38
|
/**
|
|
30
39
|
* Get connection info from environment
|
|
31
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../src/adapters/postgresql.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../src/adapters/postgresql.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIxD,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;OAKG;gBAED,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU;IAOxB;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IA+CnH;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAqDrG;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,EACxB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,IAAI,CAAC;IAmDhB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuD/E;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc;IAUtF;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAuBzB"}
|
|
@@ -2,32 +2,39 @@
|
|
|
2
2
|
* PostgreSQL Adapter
|
|
3
3
|
* DatabaseAdapter implementation for PostgreSQL
|
|
4
4
|
*/
|
|
5
|
-
import { ContainerManager } from '../managers/container-manager.js';
|
|
6
|
-
import { ProjectDiscovery } from '../discovery/project-discovery.js';
|
|
7
|
-
import { EnvManager } from '../managers/env-manager.js';
|
|
8
5
|
import { sqlValidator } from '../security/sql-validator.js';
|
|
9
6
|
import { logger } from '../utils/logger.js';
|
|
10
7
|
export class PostgreSQLAdapter {
|
|
11
8
|
containerManager;
|
|
12
9
|
projectDiscovery;
|
|
13
10
|
envManager;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Constructor with Dependency Injection
|
|
13
|
+
* @param containerManager - ContainerManager instance (with or without SSH config)
|
|
14
|
+
* @param projectDiscovery - ProjectDiscovery instance
|
|
15
|
+
* @param envManager - EnvManager instance
|
|
16
|
+
*/
|
|
17
|
+
constructor(containerManager, projectDiscovery, envManager) {
|
|
18
|
+
this.containerManager = containerManager;
|
|
19
|
+
this.projectDiscovery = projectDiscovery;
|
|
20
|
+
this.envManager = envManager;
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
23
|
* Execute SQL query
|
|
21
24
|
*/
|
|
22
|
-
async query(service, query, options) {
|
|
25
|
+
async query(service, query, options, projectConfig) {
|
|
23
26
|
// SQL validation (if enabled)
|
|
24
27
|
sqlValidator.validate(query);
|
|
25
|
-
|
|
28
|
+
// ✅ FIX BUG-007: Use provided project or find local project
|
|
29
|
+
const project = projectConfig || await this.projectDiscovery.findProject();
|
|
26
30
|
const serviceConfig = project.services[service];
|
|
27
31
|
if (!serviceConfig) {
|
|
28
32
|
throw new Error(`Service '${service}' not found in project`);
|
|
29
33
|
}
|
|
30
|
-
|
|
34
|
+
// ✅ FIX: Get env from running container first (more reliable), fallback to compose file
|
|
35
|
+
const containerEnv = await this.containerManager.getContainerEnv(service, project.name, project.composeFile, project.projectDir);
|
|
36
|
+
const composeEnv = this.envManager.loadEnv(project.projectDir, service, serviceConfig);
|
|
37
|
+
const env = containerEnv || composeEnv; // Use container env if available, otherwise compose
|
|
31
38
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
32
39
|
const db = options?.database || conn.database;
|
|
33
40
|
const user = options?.user || conn.user;
|
|
@@ -46,21 +53,26 @@ export class PostgreSQLAdapter {
|
|
|
46
53
|
// Password via PGPASSWORD env var
|
|
47
54
|
const envVars = conn.password ? [`PGPASSWORD=${conn.password}`] : [];
|
|
48
55
|
logger.debug(`Executing PostgreSQL query in ${service}: ${query}`);
|
|
56
|
+
// ✅ FIX BUG-007: Pass composeFile and projectDir for remote mode
|
|
49
57
|
const output = await this.containerManager.exec(service, project.name, cmd, {
|
|
50
58
|
env: envVars,
|
|
51
|
-
});
|
|
59
|
+
}, project.composeFile, project.projectDir);
|
|
52
60
|
return output;
|
|
53
61
|
}
|
|
54
62
|
/**
|
|
55
63
|
* Create backup
|
|
56
64
|
*/
|
|
57
|
-
async backup(service, options) {
|
|
58
|
-
|
|
65
|
+
async backup(service, options, projectConfig) {
|
|
66
|
+
// ✅ FIX: Use provided project or find local project
|
|
67
|
+
const project = projectConfig || await this.projectDiscovery.findProject();
|
|
59
68
|
const serviceConfig = project.services[service];
|
|
60
69
|
if (!serviceConfig) {
|
|
61
70
|
throw new Error(`Service '${service}' not found in project`);
|
|
62
71
|
}
|
|
63
|
-
|
|
72
|
+
// ✅ FIX: Get env from running container first (more reliable), fallback to compose file
|
|
73
|
+
const containerEnv = await this.containerManager.getContainerEnv(service, project.name, project.composeFile, project.projectDir);
|
|
74
|
+
const composeEnv = this.envManager.loadEnv(project.projectDir, service, serviceConfig);
|
|
75
|
+
const env = containerEnv || composeEnv; // Use container env if available, otherwise compose
|
|
64
76
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
65
77
|
const format = options.format || 'custom';
|
|
66
78
|
const output = options.output || `/backups/postgres-backup-${Date.now()}.dump`;
|
|
@@ -88,21 +100,26 @@ export class PostgreSQLAdapter {
|
|
|
88
100
|
// Password via PGPASSWORD
|
|
89
101
|
const envVars = conn.password ? [`PGPASSWORD=${conn.password}`] : [];
|
|
90
102
|
logger.info(`Creating PostgreSQL backup: ${output}`);
|
|
103
|
+
// ✅ FIX BUG-007: Pass composeFile and projectDir for remote mode
|
|
91
104
|
await this.containerManager.exec(service, project.name, cmd, {
|
|
92
105
|
env: envVars,
|
|
93
|
-
});
|
|
106
|
+
}, project.composeFile, project.projectDir);
|
|
94
107
|
return output;
|
|
95
108
|
}
|
|
96
109
|
/**
|
|
97
110
|
* Restore from backup
|
|
98
111
|
*/
|
|
99
|
-
async restore(service, backupPath, options) {
|
|
100
|
-
|
|
112
|
+
async restore(service, backupPath, options, projectConfig) {
|
|
113
|
+
// ✅ FIX: Use provided project or find local project
|
|
114
|
+
const project = projectConfig || await this.projectDiscovery.findProject();
|
|
101
115
|
const serviceConfig = project.services[service];
|
|
102
116
|
if (!serviceConfig) {
|
|
103
117
|
throw new Error(`Service '${service}' not found in project`);
|
|
104
118
|
}
|
|
105
|
-
|
|
119
|
+
// ✅ FIX: Get env from running container first (more reliable), fallback to compose file
|
|
120
|
+
const containerEnv = await this.containerManager.getContainerEnv(service, project.name, project.composeFile, project.projectDir);
|
|
121
|
+
const composeEnv = this.envManager.loadEnv(project.projectDir, service, serviceConfig);
|
|
122
|
+
const env = containerEnv || composeEnv; // Use container env if available, otherwise compose
|
|
106
123
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
107
124
|
const db = options?.database || conn.database;
|
|
108
125
|
// Determine backup format by extension
|
|
@@ -129,32 +146,37 @@ export class PostgreSQLAdapter {
|
|
|
129
146
|
// Password via PGPASSWORD
|
|
130
147
|
const envVars = conn.password ? [`PGPASSWORD=${conn.password}`] : [];
|
|
131
148
|
logger.info(`Restoring PostgreSQL from backup: ${backupPath}`);
|
|
149
|
+
// ✅ FIX BUG-007: Pass composeFile and projectDir for remote mode
|
|
132
150
|
await this.containerManager.exec(service, project.name, cmd, {
|
|
133
151
|
env: envVars,
|
|
134
|
-
});
|
|
152
|
+
}, project.composeFile, project.projectDir);
|
|
135
153
|
}
|
|
136
154
|
/**
|
|
137
155
|
* Get database status
|
|
138
156
|
*/
|
|
139
|
-
async status(service) {
|
|
140
|
-
|
|
157
|
+
async status(service, projectConfig) {
|
|
158
|
+
// ✅ FIX BUG-007: Use provided project or find local project
|
|
159
|
+
const project = projectConfig || await this.projectDiscovery.findProject();
|
|
141
160
|
const serviceConfig = project.services[service];
|
|
142
161
|
if (!serviceConfig) {
|
|
143
162
|
throw new Error(`Service '${service}' not found in project`);
|
|
144
163
|
}
|
|
145
|
-
|
|
164
|
+
// ✅ FIX: Get env from running container first (more reliable), fallback to compose file
|
|
165
|
+
const containerEnv = await this.containerManager.getContainerEnv(service, project.name, project.composeFile, project.projectDir);
|
|
166
|
+
const composeEnv = this.envManager.loadEnv(project.projectDir, service, serviceConfig);
|
|
167
|
+
const env = containerEnv || composeEnv; // Use container env if available, otherwise compose
|
|
146
168
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
147
|
-
// Get version
|
|
148
|
-
const versionOutput = await this.query(service, 'SELECT version();');
|
|
169
|
+
// Get version - pass projectConfig to query
|
|
170
|
+
const versionOutput = await this.query(service, 'SELECT version();', undefined, projectConfig);
|
|
149
171
|
const version = this.parseVersion(versionOutput);
|
|
150
172
|
// Get database size
|
|
151
|
-
const sizeOutput = await this.query(service, "SELECT pg_size_pretty(pg_database_size(current_database())) as size;");
|
|
173
|
+
const sizeOutput = await this.query(service, "SELECT pg_size_pretty(pg_database_size(current_database())) as size;", undefined, projectConfig);
|
|
152
174
|
const size = this.parseSingleValue(sizeOutput);
|
|
153
175
|
// Get connection count
|
|
154
|
-
const connectionsOutput = await this.query(service, "SELECT count(*) as connections FROM pg_stat_activity WHERE datname = current_database();");
|
|
176
|
+
const connectionsOutput = await this.query(service, "SELECT count(*) as connections FROM pg_stat_activity WHERE datname = current_database();", undefined, projectConfig);
|
|
155
177
|
const connections = parseInt(this.parseSingleValue(connectionsOutput) || '0');
|
|
156
178
|
// Get uptime
|
|
157
|
-
const uptimeOutput = await this.query(service, "SELECT date_trunc('second', current_timestamp - pg_postmaster_start_time()) as uptime;");
|
|
179
|
+
const uptimeOutput = await this.query(service, "SELECT date_trunc('second', current_timestamp - pg_postmaster_start_time()) as uptime;", undefined, projectConfig);
|
|
158
180
|
const uptime = this.parseSingleValue(uptimeOutput);
|
|
159
181
|
return {
|
|
160
182
|
type: 'postgresql',
|
|
@@ -188,15 +210,22 @@ export class PostgreSQLAdapter {
|
|
|
188
210
|
* Parse single value from SQL output (first row, first column)
|
|
189
211
|
*/
|
|
190
212
|
parseSingleValue(output) {
|
|
191
|
-
|
|
213
|
+
logger.debug(`Parsing single value from ${output.length} chars output`);
|
|
192
214
|
const lines = output.split('\n').filter((line) => line.trim().length > 0);
|
|
193
215
|
if (lines.length < 2) {
|
|
216
|
+
logger.warn('Not enough lines in SQL output');
|
|
194
217
|
return '';
|
|
195
218
|
}
|
|
196
|
-
//
|
|
197
|
-
|
|
198
|
-
//
|
|
199
|
-
|
|
219
|
+
// psql table format:
|
|
220
|
+
// Line 0: column header (e.g., " size ")
|
|
221
|
+
// Line 1: separator (e.g., "-------")
|
|
222
|
+
// Line 2: actual data (e.g., " 11 MB")
|
|
223
|
+
// Line 3: row count (e.g., "(1 row)")
|
|
224
|
+
// Skip header and separator, take data row
|
|
225
|
+
const dataLine = lines.length >= 3 ? lines[2] : lines[1];
|
|
226
|
+
const value = dataLine.trim();
|
|
227
|
+
logger.debug(`Parsed value: "${value}"`);
|
|
228
|
+
return value;
|
|
200
229
|
}
|
|
201
230
|
}
|
|
202
231
|
//# sourceMappingURL=postgresql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/adapters/postgresql.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/adapters/postgresql.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/redis.d.ts
CHANGED
|
@@ -4,12 +4,21 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { DatabaseAdapter } from './database-adapter.js';
|
|
6
6
|
import type { QueryOptions, BackupOptions, RestoreOptions, DBStatus, ConnectionInfo } from './types.js';
|
|
7
|
-
import type { ServiceConfig } from '../discovery/types.js';
|
|
7
|
+
import type { ServiceConfig, ProjectConfig } from '../discovery/types.js';
|
|
8
|
+
import { ContainerManager } from '../managers/container-manager.js';
|
|
9
|
+
import { ProjectDiscovery } from '../discovery/project-discovery.js';
|
|
10
|
+
import { EnvManager } from '../managers/env-manager.js';
|
|
8
11
|
export declare class RedisAdapter implements DatabaseAdapter {
|
|
9
12
|
private containerManager;
|
|
10
13
|
private projectDiscovery;
|
|
11
14
|
private envManager;
|
|
12
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Constructor with Dependency Injection
|
|
17
|
+
* @param containerManager - ContainerManager instance (with or without SSH config)
|
|
18
|
+
* @param projectDiscovery - ProjectDiscovery instance
|
|
19
|
+
* @param envManager - EnvManager instance
|
|
20
|
+
*/
|
|
21
|
+
constructor(containerManager: ContainerManager, projectDiscovery: ProjectDiscovery, envManager: EnvManager);
|
|
13
22
|
/**
|
|
14
23
|
* Execute Redis command
|
|
15
24
|
*/
|
|
@@ -17,11 +26,11 @@ export declare class RedisAdapter implements DatabaseAdapter {
|
|
|
17
26
|
/**
|
|
18
27
|
* Create backup (RDB snapshot)
|
|
19
28
|
*/
|
|
20
|
-
backup(service: string, options: BackupOptions): Promise<string>;
|
|
29
|
+
backup(service: string, options: BackupOptions, projectConfig?: ProjectConfig): Promise<string>;
|
|
21
30
|
/**
|
|
22
31
|
* Restore from backup
|
|
23
32
|
*/
|
|
24
|
-
restore(service: string, backupPath: string, options?: RestoreOptions): Promise<void>;
|
|
33
|
+
restore(service: string, backupPath: string, options?: RestoreOptions, projectConfig?: ProjectConfig): Promise<void>;
|
|
25
34
|
/**
|
|
26
35
|
* Get database status
|
|
27
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,qBAAa,YAAa,YAAW,eAAe;IAClD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;OAKG;gBAED,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU;IAOxB;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAwCpF;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCrG;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,EACxB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,IAAI,CAAC;IAsBhB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA2BhD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc;IAUtF;;OAEG;YACW,aAAa;IAsC3B;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACH,OAAO,CAAC,YAAY;CAYrB"}
|
package/dist/adapters/redis.js
CHANGED
|
@@ -2,18 +2,21 @@
|
|
|
2
2
|
* Redis Adapter
|
|
3
3
|
* DatabaseAdapter implementation for Redis
|
|
4
4
|
*/
|
|
5
|
-
import { ContainerManager } from '../managers/container-manager.js';
|
|
6
|
-
import { ProjectDiscovery } from '../discovery/project-discovery.js';
|
|
7
|
-
import { EnvManager } from '../managers/env-manager.js';
|
|
8
5
|
import { logger } from '../utils/logger.js';
|
|
9
6
|
export class RedisAdapter {
|
|
10
7
|
containerManager;
|
|
11
8
|
projectDiscovery;
|
|
12
9
|
envManager;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Constructor with Dependency Injection
|
|
12
|
+
* @param containerManager - ContainerManager instance (with or without SSH config)
|
|
13
|
+
* @param projectDiscovery - ProjectDiscovery instance
|
|
14
|
+
* @param envManager - EnvManager instance
|
|
15
|
+
*/
|
|
16
|
+
constructor(containerManager, projectDiscovery, envManager) {
|
|
17
|
+
this.containerManager = containerManager;
|
|
18
|
+
this.projectDiscovery = projectDiscovery;
|
|
19
|
+
this.envManager = envManager;
|
|
17
20
|
}
|
|
18
21
|
/**
|
|
19
22
|
* Execute Redis command
|
|
@@ -54,8 +57,9 @@ export class RedisAdapter {
|
|
|
54
57
|
/**
|
|
55
58
|
* Create backup (RDB snapshot)
|
|
56
59
|
*/
|
|
57
|
-
async backup(service, options) {
|
|
58
|
-
|
|
60
|
+
async backup(service, options, projectConfig) {
|
|
61
|
+
// ✅ FIX: Use provided project or find local project
|
|
62
|
+
const project = projectConfig || await this.projectDiscovery.findProject();
|
|
59
63
|
const serviceConfig = project.services[service];
|
|
60
64
|
if (!serviceConfig) {
|
|
61
65
|
throw new Error(`Service '${service}' not found in project`);
|
|
@@ -82,8 +86,9 @@ export class RedisAdapter {
|
|
|
82
86
|
/**
|
|
83
87
|
* Restore from backup
|
|
84
88
|
*/
|
|
85
|
-
async restore(service, backupPath, options) {
|
|
86
|
-
|
|
89
|
+
async restore(service, backupPath, options, projectConfig) {
|
|
90
|
+
// ✅ FIX: Use provided project or find local project
|
|
91
|
+
const project = projectConfig || await this.projectDiscovery.findProject();
|
|
87
92
|
logger.info(`Restoring Redis from backup: ${backupPath}`);
|
|
88
93
|
// 1. Stop container
|
|
89
94
|
logger.info('Stopping Redis container...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SQLite Adapter
|
|
3
3
|
* DatabaseAdapter implementation for SQLite
|
|
4
|
+
* Note: sqlite.ts not .js for consistency with other adapters
|
|
4
5
|
*/
|
|
5
6
|
import type { DatabaseAdapter } from './database-adapter.js';
|
|
6
7
|
import type { QueryOptions, BackupOptions, RestoreOptions, DBStatus, ConnectionInfo } from './types.js';
|
|
7
|
-
import type { ServiceConfig } from '../discovery/types.js';
|
|
8
|
+
import type { ServiceConfig, ProjectConfig } from '../discovery/types.js';
|
|
9
|
+
import { ContainerManager } from '../managers/container-manager.js';
|
|
10
|
+
import { ProjectDiscovery } from '../discovery/project-discovery.js';
|
|
11
|
+
import { EnvManager } from '../managers/env-manager.js';
|
|
8
12
|
export declare class SQLiteAdapter implements DatabaseAdapter {
|
|
9
13
|
private containerManager;
|
|
10
14
|
private projectDiscovery;
|
|
11
15
|
private envManager;
|
|
12
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Constructor with Dependency Injection
|
|
18
|
+
* @param containerManager - ContainerManager instance (with or without SSH config)
|
|
19
|
+
* @param projectDiscovery - ProjectDiscovery instance
|
|
20
|
+
* @param envManager - EnvManager instance
|
|
21
|
+
*/
|
|
22
|
+
constructor(containerManager: ContainerManager, projectDiscovery: ProjectDiscovery, envManager: EnvManager);
|
|
13
23
|
/**
|
|
14
24
|
* Execute SQL query or meta-command
|
|
15
25
|
*/
|
|
@@ -17,11 +27,11 @@ export declare class SQLiteAdapter implements DatabaseAdapter {
|
|
|
17
27
|
/**
|
|
18
28
|
* Create backup
|
|
19
29
|
*/
|
|
20
|
-
backup(service: string, options: BackupOptions): Promise<string>;
|
|
30
|
+
backup(service: string, options: BackupOptions, projectConfig?: ProjectConfig): Promise<string>;
|
|
21
31
|
/**
|
|
22
32
|
* Restore from backup
|
|
23
33
|
*/
|
|
24
|
-
restore(service: string, backupPath: string, options?: RestoreOptions): Promise<void>;
|
|
34
|
+
restore(service: string, backupPath: string, options?: RestoreOptions, projectConfig?: ProjectConfig): Promise<void>;
|
|
25
35
|
/**
|
|
26
36
|
* Get database status
|
|
27
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIxD,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;OAKG;gBAED,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU;IAOxB;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCpF;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBrG;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,EACxB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,IAAI,CAAC;IAsBhB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiChD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc;CAQvF"}
|
package/dist/adapters/sqlite.js
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SQLite Adapter
|
|
3
3
|
* DatabaseAdapter implementation for SQLite
|
|
4
|
+
* Note: sqlite.ts not .js for consistency with other adapters
|
|
4
5
|
*/
|
|
5
|
-
import { ContainerManager } from '../managers/container-manager.js';
|
|
6
|
-
import { ProjectDiscovery } from '../discovery/project-discovery.js';
|
|
7
|
-
import { EnvManager } from '../managers/env-manager.js';
|
|
8
6
|
import { sqlValidator } from '../security/sql-validator.js';
|
|
9
7
|
import { logger } from '../utils/logger.js';
|
|
10
8
|
export class SQLiteAdapter {
|
|
11
9
|
containerManager;
|
|
12
10
|
projectDiscovery;
|
|
13
11
|
envManager;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Constructor with Dependency Injection
|
|
14
|
+
* @param containerManager - ContainerManager instance (with or without SSH config)
|
|
15
|
+
* @param projectDiscovery - ProjectDiscovery instance
|
|
16
|
+
* @param envManager - EnvManager instance
|
|
17
|
+
*/
|
|
18
|
+
constructor(containerManager, projectDiscovery, envManager) {
|
|
19
|
+
this.containerManager = containerManager;
|
|
20
|
+
this.projectDiscovery = projectDiscovery;
|
|
21
|
+
this.envManager = envManager;
|
|
18
22
|
}
|
|
19
23
|
/**
|
|
20
24
|
* Execute SQL query or meta-command
|
|
@@ -49,8 +53,9 @@ export class SQLiteAdapter {
|
|
|
49
53
|
/**
|
|
50
54
|
* Create backup
|
|
51
55
|
*/
|
|
52
|
-
async backup(service, options) {
|
|
53
|
-
|
|
56
|
+
async backup(service, options, projectConfig) {
|
|
57
|
+
// ✅ FIX: Use provided project or find local project
|
|
58
|
+
const project = projectConfig || await this.projectDiscovery.findProject();
|
|
54
59
|
const serviceConfig = project.services[service];
|
|
55
60
|
if (!serviceConfig) {
|
|
56
61
|
throw new Error(`Service '${service}' not found in project`);
|
|
@@ -68,8 +73,9 @@ export class SQLiteAdapter {
|
|
|
68
73
|
/**
|
|
69
74
|
* Restore from backup
|
|
70
75
|
*/
|
|
71
|
-
async restore(service, backupPath, options) {
|
|
72
|
-
|
|
76
|
+
async restore(service, backupPath, options, projectConfig) {
|
|
77
|
+
// ✅ FIX: Use provided project or find local project
|
|
78
|
+
const project = projectConfig || await this.projectDiscovery.findProject();
|
|
73
79
|
const serviceConfig = project.services[service];
|
|
74
80
|
if (!serviceConfig) {
|
|
75
81
|
throw new Error(`Service '${service}' not found in project`);
|