claudeship 0.2.19 → 0.2.21

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 (91) hide show
  1. package/apps/server/dist/chat/chat.controller.d.ts +1 -1
  2. package/apps/server/dist/chat/chat.service.d.ts +1 -1
  3. package/apps/server/dist/database/database.module.js +15 -4
  4. package/apps/server/dist/database/database.module.js.map +1 -1
  5. package/apps/server/dist/database/infra/database-infra.controller.d.ts +14 -0
  6. package/apps/server/dist/database/infra/database-infra.controller.js +121 -0
  7. package/apps/server/dist/database/infra/database-infra.controller.js.map +1 -0
  8. package/apps/server/dist/database/infra/database-infra.service.d.ts +34 -0
  9. package/apps/server/dist/database/infra/database-infra.service.js +130 -0
  10. package/apps/server/dist/database/infra/database-infra.service.js.map +1 -0
  11. package/apps/server/dist/database/infra/docker.service.d.ts +34 -0
  12. package/apps/server/dist/database/infra/docker.service.js +186 -0
  13. package/apps/server/dist/database/infra/docker.service.js.map +1 -0
  14. package/apps/server/dist/database/infra/index.d.ts +4 -0
  15. package/apps/server/dist/database/infra/index.js +21 -0
  16. package/apps/server/dist/database/infra/index.js.map +1 -0
  17. package/apps/server/dist/database/infra/postgres-container.service.d.ts +31 -0
  18. package/apps/server/dist/database/infra/postgres-container.service.js +163 -0
  19. package/apps/server/dist/database/infra/postgres-container.service.js.map +1 -0
  20. package/apps/server/dist/database/infra/sqlite-infra.service.d.ts +14 -0
  21. package/apps/server/dist/database/infra/sqlite-infra.service.js +121 -0
  22. package/apps/server/dist/database/infra/sqlite-infra.service.js.map +1 -0
  23. package/apps/server/dist/project/project.controller.d.ts +7 -0
  24. package/apps/server/dist/project/project.module.js +2 -1
  25. package/apps/server/dist/project/project.module.js.map +1 -1
  26. package/apps/server/dist/project/project.service.d.ts +10 -1
  27. package/apps/server/dist/project/project.service.js +35 -3
  28. package/apps/server/dist/project/project.service.js.map +1 -1
  29. package/apps/server/dist/tsconfig.tsbuildinfo +1 -1
  30. package/apps/server/package.json +1 -1
  31. package/apps/server/prisma/dev.db +0 -0
  32. package/apps/server/prisma/migrations/20260109053359_add_database_provider/migration.sql +11 -0
  33. package/apps/server/prisma/schema.prisma +16 -5
  34. package/apps/web/.next/BUILD_ID +1 -1
  35. package/apps/web/.next/app-build-manifest.json +8 -8
  36. package/apps/web/.next/build-manifest.json +2 -2
  37. package/apps/web/.next/cache/.previewinfo +1 -1
  38. package/apps/web/.next/cache/.rscinfo +1 -1
  39. package/apps/web/.next/cache/.tsbuildinfo +1 -1
  40. package/apps/web/.next/cache/config.json +3 -3
  41. package/apps/web/.next/cache/eslint/.cache_j3uhuz +1 -1
  42. package/apps/web/.next/cache/webpack/client-production/0.pack +0 -0
  43. package/apps/web/.next/cache/webpack/client-production/index.pack +0 -0
  44. package/apps/web/.next/cache/webpack/edge-server-production/index.pack +0 -0
  45. package/apps/web/.next/cache/webpack/server-production/0.pack +0 -0
  46. package/apps/web/.next/cache/webpack/server-production/index.pack +0 -0
  47. package/apps/web/.next/prerender-manifest.json +13 -13
  48. package/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  49. package/apps/web/.next/server/app/_not-found.html +1 -1
  50. package/apps/web/.next/server/app/_not-found.rsc +2 -2
  51. package/apps/web/.next/server/app/index.html +1 -1
  52. package/apps/web/.next/server/app/index.rsc +3 -3
  53. package/apps/web/.next/server/app/page.js +1 -1
  54. package/apps/web/.next/server/app/page.js.nft.json +1 -1
  55. package/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  56. package/apps/web/.next/server/app/project/[id]/page.js +2 -2
  57. package/apps/web/.next/server/app/project/[id]/page.js.nft.json +1 -1
  58. package/apps/web/.next/server/app/project/[id]/page_client-reference-manifest.js +1 -1
  59. package/apps/web/.next/server/app/settings/page.js +2 -2
  60. package/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
  61. package/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  62. package/apps/web/.next/server/app/settings.html +1 -1
  63. package/apps/web/.next/server/app/settings.rsc +3 -3
  64. package/apps/web/.next/server/chunks/{811.js → 526.js} +1 -1
  65. package/apps/web/.next/server/pages/404.html +1 -1
  66. package/apps/web/.next/server/pages/500.html +1 -1
  67. package/apps/web/.next/server/server-reference-manifest.json +1 -1
  68. package/apps/web/.next/static/chunks/193-9e44b5a1ad3e0586.js +1 -0
  69. package/apps/web/.next/static/chunks/700-75e1212e819e279c.js +1 -0
  70. package/apps/web/.next/static/chunks/app/page-6f2bfb6c9202164b.js +1 -0
  71. package/apps/web/.next/static/chunks/app/project/[id]/page-388d14835cae411b.js +1 -0
  72. package/apps/web/.next/static/chunks/app/settings/page-34c4ce9b8e645903.js +1 -0
  73. package/apps/web/.next/static/css/70f2a13cf3d254d8.css +3 -0
  74. package/apps/web/.next/trace +18 -18
  75. package/apps/web/package.json +1 -1
  76. package/apps/web/src/app/settings/page.tsx +138 -2
  77. package/apps/web/src/components/chat/MessageInput.tsx +5 -8
  78. package/apps/web/src/components/chat/QueuePreview.tsx +98 -0
  79. package/apps/web/src/components/chat/StreamingMessage.tsx +126 -20
  80. package/apps/web/src/components/project/ProjectCard.tsx +12 -2
  81. package/apps/web/src/stores/useChatStore.ts +26 -6
  82. package/package.json +1 -1
  83. package/packages/shared/src/types/project.ts +6 -0
  84. package/apps/web/.next/static/chunks/574-1fe2bcd6cfb41646.js +0 -1
  85. package/apps/web/.next/static/chunks/992-806bad722ba16222.js +0 -1
  86. package/apps/web/.next/static/chunks/app/page-8310956d8eae9762.js +0 -1
  87. package/apps/web/.next/static/chunks/app/project/[id]/page-c28098a9b8a94336.js +0 -1
  88. package/apps/web/.next/static/chunks/app/settings/page-3532fad509d55b77.js +0 -1
  89. package/apps/web/.next/static/css/0a24552d9794f8c8.css +0 -3
  90. /package/apps/web/.next/static/{oNlRdQOvyo3lMU4vZQSEf → UHB0ELmeUrSRXrnycF8qv}/_buildManifest.js +0 -0
  91. /package/apps/web/.next/static/{oNlRdQOvyo3lMU4vZQSEf → UHB0ELmeUrSRXrnycF8qv}/_ssgManifest.js +0 -0
@@ -7,8 +7,8 @@ export declare class ChatController {
7
7
  getMessages(projectId: string, limit?: string, offset?: string): Promise<{
8
8
  id: string;
9
9
  createdAt: Date;
10
- content: string;
11
10
  projectId: string;
11
+ content: string;
12
12
  role: import("@prisma/client").$Enums.Role;
13
13
  metadata: string | null;
14
14
  }[]>;
@@ -28,8 +28,8 @@ export declare class ChatService {
28
28
  getMessages(projectId: string, limit?: number, offset?: number): Promise<{
29
29
  id: string;
30
30
  createdAt: Date;
31
- content: string;
32
31
  projectId: string;
32
+ content: string;
33
33
  role: import("@prisma/client").$Enums.Role;
34
34
  metadata: string | null;
35
35
  }[]>;
@@ -11,15 +11,26 @@ const common_1 = require("@nestjs/common");
11
11
  const database_controller_1 = require("./database.controller");
12
12
  const database_service_1 = require("./database.service");
13
13
  const project_module_1 = require("../project/project.module");
14
+ const docker_service_1 = require("./infra/docker.service");
15
+ const sqlite_infra_service_1 = require("./infra/sqlite-infra.service");
16
+ const postgres_container_service_1 = require("./infra/postgres-container.service");
17
+ const database_infra_service_1 = require("./infra/database-infra.service");
18
+ const database_infra_controller_1 = require("./infra/database-infra.controller");
14
19
  let DatabaseModule = class DatabaseModule {
15
20
  };
16
21
  exports.DatabaseModule = DatabaseModule;
17
22
  exports.DatabaseModule = DatabaseModule = __decorate([
18
23
  (0, common_1.Module)({
19
- imports: [project_module_1.ProjectModule],
20
- controllers: [database_controller_1.DatabaseController],
21
- providers: [database_service_1.DatabaseService],
22
- exports: [database_service_1.DatabaseService],
24
+ imports: [(0, common_1.forwardRef)(() => project_module_1.ProjectModule)],
25
+ controllers: [database_controller_1.DatabaseController, database_infra_controller_1.DatabaseInfraController],
26
+ providers: [
27
+ database_service_1.DatabaseService,
28
+ docker_service_1.DockerService,
29
+ sqlite_infra_service_1.SqliteInfraService,
30
+ postgres_container_service_1.PostgresContainerService,
31
+ database_infra_service_1.DatabaseInfraService,
32
+ ],
33
+ exports: [database_service_1.DatabaseService, database_infra_service_1.DatabaseInfraService],
23
34
  })
24
35
  ], DatabaseModule);
25
36
  //# sourceMappingURL=database.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.module.js","sourceRoot":"","sources":["../../src/database/database.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+DAA2D;AAC3D,yDAAqD;AACrD,8DAA0D;AAQnD,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAN1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,8BAAa,CAAC;QACxB,WAAW,EAAE,CAAC,wCAAkB,CAAC;QACjC,SAAS,EAAE,CAAC,kCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,kCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAAG"}
1
+ {"version":3,"file":"database.module.js","sourceRoot":"","sources":["../../src/database/database.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAoD;AACpD,+DAA2D;AAC3D,yDAAqD;AACrD,8DAA0D;AAC1D,2DAAuD;AACvD,uEAAkE;AAClE,mFAA8E;AAC9E,2EAAsE;AACtE,iFAA4E;AAcrE,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAZ1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,8BAAa,CAAC,CAAC;QAC1C,WAAW,EAAE,CAAC,wCAAkB,EAAE,mDAAuB,CAAC;QAC1D,SAAS,EAAE;YACT,kCAAe;YACf,8BAAa;YACb,yCAAkB;YAClB,qDAAwB;YACxB,6CAAoB;SACrB;QACD,OAAO,EAAE,CAAC,kCAAe,EAAE,6CAAoB,CAAC;KACjD,CAAC;GACW,cAAc,CAAG"}
@@ -0,0 +1,14 @@
1
+ import { DatabaseInfraService, InfraStatus, ProjectDatabaseStatus, DatabaseProvider } from "./database-infra.service";
2
+ import { ProjectService } from "../../project/project.service";
3
+ export declare class DatabaseInfraController {
4
+ private databaseInfraService;
5
+ private projectService;
6
+ constructor(databaseInfraService: DatabaseInfraService, projectService: ProjectService);
7
+ getInfraStatus(): Promise<InfraStatus>;
8
+ refreshStatus(): Promise<InfraStatus>;
9
+ getProjectDatabaseStatus(projectId: string, provider?: DatabaseProvider): Promise<ProjectDatabaseStatus>;
10
+ createProjectDatabase(projectId: string): Promise<ProjectDatabaseStatus>;
11
+ startProjectDatabase(projectId: string, provider?: DatabaseProvider): Promise<ProjectDatabaseStatus>;
12
+ stopProjectDatabase(projectId: string, provider?: DatabaseProvider): Promise<ProjectDatabaseStatus>;
13
+ deleteProjectDatabase(projectId: string, provider?: DatabaseProvider, removeData?: string): Promise<void>;
14
+ }
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DatabaseInfraController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const database_infra_service_1 = require("./database-infra.service");
18
+ const project_service_1 = require("../../project/project.service");
19
+ let DatabaseInfraController = class DatabaseInfraController {
20
+ constructor(databaseInfraService, projectService) {
21
+ this.databaseInfraService = databaseInfraService;
22
+ this.projectService = projectService;
23
+ }
24
+ async getInfraStatus() {
25
+ return this.databaseInfraService.getInfraStatus();
26
+ }
27
+ async refreshStatus() {
28
+ this.databaseInfraService.clearDockerCache();
29
+ return this.databaseInfraService.getInfraStatus();
30
+ }
31
+ async getProjectDatabaseStatus(projectId, provider) {
32
+ const projectPath = await this.projectService.getProjectPath(projectId);
33
+ return this.databaseInfraService.getDatabaseStatus(projectId, projectPath, provider);
34
+ }
35
+ async createProjectDatabase(projectId) {
36
+ const projectPath = await this.projectService.getProjectPath(projectId);
37
+ const config = await this.databaseInfraService.createDatabase(projectId, projectPath);
38
+ return {
39
+ provider: config.provider,
40
+ status: "running",
41
+ url: config.url,
42
+ };
43
+ }
44
+ async startProjectDatabase(projectId, provider = "postgres_docker") {
45
+ const projectPath = await this.projectService.getProjectPath(projectId);
46
+ await this.databaseInfraService.startDatabase(projectId, provider);
47
+ return this.databaseInfraService.getDatabaseStatus(projectId, projectPath, provider);
48
+ }
49
+ async stopProjectDatabase(projectId, provider = "postgres_docker") {
50
+ const projectPath = await this.projectService.getProjectPath(projectId);
51
+ await this.databaseInfraService.stopDatabase(projectId, provider);
52
+ return this.databaseInfraService.getDatabaseStatus(projectId, projectPath, provider);
53
+ }
54
+ async deleteProjectDatabase(projectId, provider = "postgres_docker", removeData = "false") {
55
+ const projectPath = await this.projectService.getProjectPath(projectId);
56
+ await this.databaseInfraService.deleteDatabase(projectId, projectPath, provider, removeData === "true");
57
+ }
58
+ };
59
+ exports.DatabaseInfraController = DatabaseInfraController;
60
+ __decorate([
61
+ (0, common_1.Get)("status"),
62
+ __metadata("design:type", Function),
63
+ __metadata("design:paramtypes", []),
64
+ __metadata("design:returntype", Promise)
65
+ ], DatabaseInfraController.prototype, "getInfraStatus", null);
66
+ __decorate([
67
+ (0, common_1.Post)("refresh"),
68
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
69
+ __metadata("design:type", Function),
70
+ __metadata("design:paramtypes", []),
71
+ __metadata("design:returntype", Promise)
72
+ ], DatabaseInfraController.prototype, "refreshStatus", null);
73
+ __decorate([
74
+ (0, common_1.Get)("projects/:projectId"),
75
+ __param(0, (0, common_1.Param)("projectId")),
76
+ __param(1, (0, common_1.Query)("provider")),
77
+ __metadata("design:type", Function),
78
+ __metadata("design:paramtypes", [String, String]),
79
+ __metadata("design:returntype", Promise)
80
+ ], DatabaseInfraController.prototype, "getProjectDatabaseStatus", null);
81
+ __decorate([
82
+ (0, common_1.Post)("projects/:projectId"),
83
+ __param(0, (0, common_1.Param)("projectId")),
84
+ __metadata("design:type", Function),
85
+ __metadata("design:paramtypes", [String]),
86
+ __metadata("design:returntype", Promise)
87
+ ], DatabaseInfraController.prototype, "createProjectDatabase", null);
88
+ __decorate([
89
+ (0, common_1.Post)("projects/:projectId/start"),
90
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
91
+ __param(0, (0, common_1.Param)("projectId")),
92
+ __param(1, (0, common_1.Query)("provider")),
93
+ __metadata("design:type", Function),
94
+ __metadata("design:paramtypes", [String, String]),
95
+ __metadata("design:returntype", Promise)
96
+ ], DatabaseInfraController.prototype, "startProjectDatabase", null);
97
+ __decorate([
98
+ (0, common_1.Post)("projects/:projectId/stop"),
99
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
100
+ __param(0, (0, common_1.Param)("projectId")),
101
+ __param(1, (0, common_1.Query)("provider")),
102
+ __metadata("design:type", Function),
103
+ __metadata("design:paramtypes", [String, String]),
104
+ __metadata("design:returntype", Promise)
105
+ ], DatabaseInfraController.prototype, "stopProjectDatabase", null);
106
+ __decorate([
107
+ (0, common_1.Delete)("projects/:projectId"),
108
+ (0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
109
+ __param(0, (0, common_1.Param)("projectId")),
110
+ __param(1, (0, common_1.Query)("provider")),
111
+ __param(2, (0, common_1.Query)("removeData")),
112
+ __metadata("design:type", Function),
113
+ __metadata("design:paramtypes", [String, String, String]),
114
+ __metadata("design:returntype", Promise)
115
+ ], DatabaseInfraController.prototype, "deleteProjectDatabase", null);
116
+ exports.DatabaseInfraController = DatabaseInfraController = __decorate([
117
+ (0, common_1.Controller)("api/database"),
118
+ __metadata("design:paramtypes", [database_infra_service_1.DatabaseInfraService,
119
+ project_service_1.ProjectService])
120
+ ], DatabaseInfraController);
121
+ //# sourceMappingURL=database-infra.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-infra.controller.js","sourceRoot":"","sources":["../../../src/database/infra/database-infra.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { DockerService, DockerStatus } from "./docker.service";
2
+ import { PostgresContainerService, PostgresDatabaseConfig } from "./postgres-container.service";
3
+ import { SqliteInfraService, SqliteDatabaseConfig } from "./sqlite-infra.service";
4
+ export type DatabaseProvider = "postgres_docker" | "sqlite";
5
+ export type DatabaseConfig = PostgresDatabaseConfig | SqliteDatabaseConfig;
6
+ export interface InfraStatus {
7
+ docker: DockerStatus;
8
+ defaultProvider: DatabaseProvider;
9
+ }
10
+ export interface ProjectDatabaseStatus {
11
+ provider: DatabaseProvider;
12
+ status: "running" | "stopped" | "not_created" | "error";
13
+ url?: string;
14
+ error?: string;
15
+ }
16
+ export declare class DatabaseInfraService {
17
+ private dockerService;
18
+ private postgresService;
19
+ private sqliteService;
20
+ private readonly logger;
21
+ private dockerStatusCache;
22
+ private dockerStatusCacheTime;
23
+ private readonly CACHE_TTL_MS;
24
+ constructor(dockerService: DockerService, postgresService: PostgresContainerService, sqliteService: SqliteInfraService);
25
+ getInfraStatus(): Promise<InfraStatus>;
26
+ createDatabase(projectId: string, projectPath: string): Promise<DatabaseConfig>;
27
+ private createSqliteDatabase;
28
+ getDatabaseStatus(projectId: string, projectPath: string, currentProvider?: DatabaseProvider): Promise<ProjectDatabaseStatus>;
29
+ startDatabase(projectId: string, provider: DatabaseProvider): Promise<void>;
30
+ stopDatabase(projectId: string, provider: DatabaseProvider): Promise<void>;
31
+ deleteDatabase(projectId: string, projectPath: string, provider: DatabaseProvider, removeData?: boolean): Promise<void>;
32
+ private getDockerStatus;
33
+ clearDockerCache(): void;
34
+ }
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var DatabaseInfraService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.DatabaseInfraService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const docker_service_1 = require("./docker.service");
16
+ const postgres_container_service_1 = require("./postgres-container.service");
17
+ const sqlite_infra_service_1 = require("./sqlite-infra.service");
18
+ let DatabaseInfraService = DatabaseInfraService_1 = class DatabaseInfraService {
19
+ constructor(dockerService, postgresService, sqliteService) {
20
+ this.dockerService = dockerService;
21
+ this.postgresService = postgresService;
22
+ this.sqliteService = sqliteService;
23
+ this.logger = new common_1.Logger(DatabaseInfraService_1.name);
24
+ this.dockerStatusCache = null;
25
+ this.dockerStatusCacheTime = 0;
26
+ this.CACHE_TTL_MS = 60000;
27
+ }
28
+ async getInfraStatus() {
29
+ const docker = await this.getDockerStatus();
30
+ return {
31
+ docker,
32
+ defaultProvider: docker.available ? "postgres_docker" : "sqlite",
33
+ };
34
+ }
35
+ async createDatabase(projectId, projectPath) {
36
+ const docker = await this.getDockerStatus();
37
+ if (docker.available) {
38
+ this.logger.log(`Docker available, creating PostgreSQL container for project ${projectId}`);
39
+ try {
40
+ const config = await this.postgresService.createForProject(projectId);
41
+ this.logger.log(`PostgreSQL database created for project ${projectId}`);
42
+ return config;
43
+ }
44
+ catch (error) {
45
+ const message = error instanceof Error ? error.message : "Unknown error";
46
+ this.logger.warn(`Failed to create PostgreSQL container, falling back to SQLite: ${message}`);
47
+ return this.createSqliteDatabase(projectId, projectPath);
48
+ }
49
+ }
50
+ this.logger.log(`Docker not available, creating SQLite database for project ${projectId}`);
51
+ return this.createSqliteDatabase(projectId, projectPath);
52
+ }
53
+ async createSqliteDatabase(projectId, projectPath) {
54
+ const config = await this.sqliteService.createForProject(projectId, projectPath);
55
+ this.logger.log(`SQLite database created for project ${projectId}`);
56
+ return config;
57
+ }
58
+ async getDatabaseStatus(projectId, projectPath, currentProvider) {
59
+ if (!currentProvider || currentProvider === "postgres_docker") {
60
+ const postgresStatus = await this.postgresService.getStatus(projectId);
61
+ if (postgresStatus.exists) {
62
+ return {
63
+ provider: "postgres_docker",
64
+ status: postgresStatus.running ? "running" : "stopped",
65
+ url: postgresStatus.config?.url,
66
+ };
67
+ }
68
+ }
69
+ if (!currentProvider || currentProvider === "sqlite") {
70
+ const sqliteConfig = await this.sqliteService.getConfig(projectPath);
71
+ if (sqliteConfig) {
72
+ return {
73
+ provider: "sqlite",
74
+ status: "running",
75
+ url: sqliteConfig.url,
76
+ };
77
+ }
78
+ }
79
+ return {
80
+ provider: currentProvider || "sqlite",
81
+ status: "not_created",
82
+ };
83
+ }
84
+ async startDatabase(projectId, provider) {
85
+ if (provider === "postgres_docker") {
86
+ await this.postgresService.start(projectId);
87
+ this.logger.log(`PostgreSQL database started for project ${projectId}`);
88
+ }
89
+ }
90
+ async stopDatabase(projectId, provider) {
91
+ if (provider === "postgres_docker") {
92
+ await this.postgresService.stop(projectId);
93
+ this.logger.log(`PostgreSQL database stopped for project ${projectId}`);
94
+ }
95
+ }
96
+ async deleteDatabase(projectId, projectPath, provider, removeData = false) {
97
+ if (provider === "postgres_docker") {
98
+ await this.postgresService.remove(projectId, removeData);
99
+ this.logger.log(`PostgreSQL database removed for project ${projectId}`);
100
+ }
101
+ else {
102
+ if (removeData) {
103
+ await this.sqliteService.delete(projectPath);
104
+ this.logger.log(`SQLite database removed for project ${projectId}`);
105
+ }
106
+ }
107
+ }
108
+ async getDockerStatus() {
109
+ const now = Date.now();
110
+ if (this.dockerStatusCache &&
111
+ now - this.dockerStatusCacheTime < this.CACHE_TTL_MS) {
112
+ return this.dockerStatusCache;
113
+ }
114
+ this.dockerStatusCache = await this.dockerService.checkAvailable();
115
+ this.dockerStatusCacheTime = now;
116
+ return this.dockerStatusCache;
117
+ }
118
+ clearDockerCache() {
119
+ this.dockerStatusCache = null;
120
+ this.dockerStatusCacheTime = 0;
121
+ }
122
+ };
123
+ exports.DatabaseInfraService = DatabaseInfraService;
124
+ exports.DatabaseInfraService = DatabaseInfraService = DatabaseInfraService_1 = __decorate([
125
+ (0, common_1.Injectable)(),
126
+ __metadata("design:paramtypes", [docker_service_1.DockerService,
127
+ postgres_container_service_1.PostgresContainerService,
128
+ sqlite_infra_service_1.SqliteInfraService])
129
+ ], DatabaseInfraService);
130
+ //# sourceMappingURL=database-infra.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-infra.service.js","sourceRoot":"","sources":["../../../src/database/infra/database-infra.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export interface DockerStatus {
2
+ available: boolean;
3
+ version?: string;
4
+ error?: string;
5
+ }
6
+ export interface ContainerInfo {
7
+ id: string;
8
+ name: string;
9
+ status: "running" | "exited" | "paused" | "created" | "unknown";
10
+ ports: string[];
11
+ }
12
+ export interface ContainerConfig {
13
+ name: string;
14
+ image: string;
15
+ port: number;
16
+ containerPort: number;
17
+ env: Record<string, string>;
18
+ volumeName?: string;
19
+ }
20
+ export declare class DockerService {
21
+ private readonly logger;
22
+ checkAvailable(): Promise<DockerStatus>;
23
+ runContainer(config: ContainerConfig): Promise<string>;
24
+ getContainerStatus(nameOrId: string): Promise<ContainerInfo | null>;
25
+ startContainer(nameOrId: string): Promise<void>;
26
+ stopContainer(nameOrId: string): Promise<void>;
27
+ removeContainer(nameOrId: string, force?: boolean): Promise<void>;
28
+ listClaudeShipContainers(): Promise<ContainerInfo[]>;
29
+ isPortAvailable(port: number): Promise<boolean>;
30
+ findAvailablePort(start?: number, end?: number): Promise<number>;
31
+ exec(nameOrId: string, command: string): Promise<string>;
32
+ private parseStatus;
33
+ private parseStatusFromPs;
34
+ }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var DockerService_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DockerService = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const child_process_1 = require("child_process");
13
+ const util_1 = require("util");
14
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
15
+ let DockerService = DockerService_1 = class DockerService {
16
+ constructor() {
17
+ this.logger = new common_1.Logger(DockerService_1.name);
18
+ }
19
+ async checkAvailable() {
20
+ try {
21
+ const { stdout } = await execAsync("docker version --format '{{.Server.Version}}'");
22
+ const version = stdout.trim();
23
+ this.logger.log(`Docker available: v${version}`);
24
+ return { available: true, version };
25
+ }
26
+ catch (error) {
27
+ const message = error instanceof Error ? error.message : "Unknown error";
28
+ this.logger.warn(`Docker not available: ${message}`);
29
+ return { available: false, error: message };
30
+ }
31
+ }
32
+ async runContainer(config) {
33
+ const envArgs = Object.entries(config.env)
34
+ .map(([key, value]) => `-e ${key}=${value}`)
35
+ .join(" ");
36
+ const volumeArg = config.volumeName
37
+ ? `-v ${config.volumeName}:/var/lib/postgresql/data`
38
+ : "";
39
+ const command = `docker run -d --name ${config.name} -p ${config.port}:${config.containerPort} ${envArgs} ${volumeArg} ${config.image}`;
40
+ this.logger.log(`Running container: ${config.name}`);
41
+ try {
42
+ const { stdout } = await execAsync(command);
43
+ const containerId = stdout.trim();
44
+ this.logger.log(`Container started: ${containerId.substring(0, 12)}`);
45
+ return containerId;
46
+ }
47
+ catch (error) {
48
+ const message = error instanceof Error ? error.message : "Unknown error";
49
+ this.logger.error(`Failed to run container: ${message}`);
50
+ throw new Error(`Failed to run container: ${message}`);
51
+ }
52
+ }
53
+ async getContainerStatus(nameOrId) {
54
+ try {
55
+ const { stdout } = await execAsync(`docker inspect --format '{{.Id}},{{.Name}},{{.State.Status}}' ${nameOrId}`);
56
+ const [id, name, status] = stdout.trim().split(",");
57
+ return {
58
+ id,
59
+ name: name.replace(/^\//, ""),
60
+ status: this.parseStatus(status),
61
+ ports: [],
62
+ };
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ async startContainer(nameOrId) {
69
+ this.logger.log(`Starting container: ${nameOrId}`);
70
+ try {
71
+ await execAsync(`docker start ${nameOrId}`);
72
+ this.logger.log(`Container started: ${nameOrId}`);
73
+ }
74
+ catch (error) {
75
+ const message = error instanceof Error ? error.message : "Unknown error";
76
+ this.logger.error(`Failed to start container: ${message}`);
77
+ throw new Error(`Failed to start container: ${message}`);
78
+ }
79
+ }
80
+ async stopContainer(nameOrId) {
81
+ this.logger.log(`Stopping container: ${nameOrId}`);
82
+ try {
83
+ await execAsync(`docker stop ${nameOrId}`);
84
+ this.logger.log(`Container stopped: ${nameOrId}`);
85
+ }
86
+ catch (error) {
87
+ const message = error instanceof Error ? error.message : "Unknown error";
88
+ this.logger.error(`Failed to stop container: ${message}`);
89
+ throw new Error(`Failed to stop container: ${message}`);
90
+ }
91
+ }
92
+ async removeContainer(nameOrId, force = false) {
93
+ this.logger.log(`Removing container: ${nameOrId}`);
94
+ try {
95
+ const forceFlag = force ? "-f" : "";
96
+ await execAsync(`docker rm ${forceFlag} ${nameOrId}`);
97
+ this.logger.log(`Container removed: ${nameOrId}`);
98
+ }
99
+ catch (error) {
100
+ const message = error instanceof Error ? error.message : "Unknown error";
101
+ this.logger.error(`Failed to remove container: ${message}`);
102
+ throw new Error(`Failed to remove container: ${message}`);
103
+ }
104
+ }
105
+ async listClaudeShipContainers() {
106
+ try {
107
+ const { stdout } = await execAsync(`docker ps -a --filter "name=claudeship-db-" --format "{{.ID}},{{.Names}},{{.Status}},{{.Ports}}"`);
108
+ if (!stdout.trim()) {
109
+ return [];
110
+ }
111
+ return stdout
112
+ .trim()
113
+ .split("\n")
114
+ .map((line) => {
115
+ const [id, name, status, ports] = line.split(",");
116
+ return {
117
+ id,
118
+ name,
119
+ status: this.parseStatusFromPs(status),
120
+ ports: ports ? ports.split(",").map((p) => p.trim()) : [],
121
+ };
122
+ });
123
+ }
124
+ catch {
125
+ return [];
126
+ }
127
+ }
128
+ async isPortAvailable(port) {
129
+ try {
130
+ await execAsync(`lsof -i:${port}`);
131
+ return false;
132
+ }
133
+ catch {
134
+ return true;
135
+ }
136
+ }
137
+ async findAvailablePort(start = 5432, end = 5500) {
138
+ for (let port = start; port <= end; port++) {
139
+ if (await this.isPortAvailable(port)) {
140
+ return port;
141
+ }
142
+ }
143
+ throw new Error(`No available port found in range ${start}-${end}`);
144
+ }
145
+ async exec(nameOrId, command) {
146
+ try {
147
+ const { stdout } = await execAsync(`docker exec ${nameOrId} ${command}`);
148
+ return stdout.trim();
149
+ }
150
+ catch (error) {
151
+ const message = error instanceof Error ? error.message : "Unknown error";
152
+ throw new Error(`Failed to exec in container: ${message}`);
153
+ }
154
+ }
155
+ parseStatus(status) {
156
+ switch (status.toLowerCase()) {
157
+ case "running":
158
+ return "running";
159
+ case "exited":
160
+ return "exited";
161
+ case "paused":
162
+ return "paused";
163
+ case "created":
164
+ return "created";
165
+ default:
166
+ return "unknown";
167
+ }
168
+ }
169
+ parseStatusFromPs(status) {
170
+ const lower = status.toLowerCase();
171
+ if (lower.includes("up"))
172
+ return "running";
173
+ if (lower.includes("exited"))
174
+ return "exited";
175
+ if (lower.includes("paused"))
176
+ return "paused";
177
+ if (lower.includes("created"))
178
+ return "created";
179
+ return "unknown";
180
+ }
181
+ };
182
+ exports.DockerService = DockerService;
183
+ exports.DockerService = DockerService = DockerService_1 = __decorate([
184
+ (0, common_1.Injectable)()
185
+ ], DockerService);
186
+ //# sourceMappingURL=docker.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.service.js","sourceRoot":"","sources":["../../../src/database/infra/docker.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./docker.service";
2
+ export * from "./sqlite-infra.service";
3
+ export * from "./postgres-container.service";
4
+ export * from "./database-infra.service";
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./docker.service"), exports);
18
+ __exportStar(require("./sqlite-infra.service"), exports);
19
+ __exportStar(require("./postgres-container.service"), exports);
20
+ __exportStar(require("./database-infra.service"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/database/infra/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,yDAAuC;AACvC,+DAA6C;AAC7C,2DAAyC"}