devchain-cli 0.5.1 → 0.6.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/dist/drizzle/0022_guests.sql +16 -0
- package/dist/drizzle/0023_add_guest_description.sql +1 -0
- package/dist/drizzle/meta/0022_snapshot.json +3064 -0
- package/dist/drizzle/meta/0023_snapshot.json +3069 -0
- package/dist/drizzle/meta/_journal.json +15 -1
- package/dist/server/app.module.js +2 -0
- package/dist/server/app.module.js.map +1 -1
- package/dist/server/modules/agents/controllers/agents.controller.d.ts +14 -1
- package/dist/server/modules/agents/controllers/agents.controller.js +30 -4
- package/dist/server/modules/agents/controllers/agents.controller.js.map +1 -1
- package/dist/server/modules/events/catalog/guest.registered.d.ts +24 -0
- package/dist/server/modules/events/catalog/guest.registered.js +15 -0
- package/dist/server/modules/events/catalog/guest.registered.js.map +1 -0
- package/dist/server/modules/events/catalog/guest.unregistered.d.ts +24 -0
- package/dist/server/modules/events/catalog/guest.unregistered.js +15 -0
- package/dist/server/modules/events/catalog/guest.unregistered.js.map +1 -0
- package/dist/server/modules/events/catalog/index.d.ts +38 -0
- package/dist/server/modules/events/catalog/index.js +4 -0
- package/dist/server/modules/events/catalog/index.js.map +1 -1
- package/dist/server/modules/guests/constants.d.ts +3 -0
- package/dist/server/modules/guests/constants.js +7 -0
- package/dist/server/modules/guests/constants.js.map +1 -0
- package/dist/server/modules/guests/dtos/guest.dto.d.ts +21 -0
- package/dist/server/modules/guests/dtos/guest.dto.js +3 -0
- package/dist/server/modules/guests/dtos/guest.dto.js.map +1 -0
- package/dist/server/modules/guests/guests.module.d.ts +2 -0
- package/dist/server/modules/guests/guests.module.js +26 -0
- package/dist/server/modules/guests/guests.module.js.map +1 -0
- package/dist/server/modules/guests/services/guest-health.service.d.ts +21 -0
- package/dist/server/modules/guests/services/guest-health.service.js +125 -0
- package/dist/server/modules/guests/services/guest-health.service.js.map +1 -0
- package/dist/server/modules/guests/services/guests.service.d.ts +30 -0
- package/dist/server/modules/guests/services/guests.service.js +178 -0
- package/dist/server/modules/guests/services/guests.service.js.map +1 -0
- package/dist/server/modules/mcp/controllers/mcp-http.controller.js +22 -0
- package/dist/server/modules/mcp/controllers/mcp-http.controller.js.map +1 -1
- package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js +22 -0
- package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js.map +1 -1
- package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +67 -5
- package/dist/server/modules/mcp/dtos/mcp.dto.js +13 -1
- package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
- package/dist/server/modules/mcp/mcp.module.js +2 -0
- package/dist/server/modules/mcp/mcp.module.js.map +1 -1
- package/dist/server/modules/mcp/services/mcp.service.d.ts +9 -1
- package/dist/server/modules/mcp/services/mcp.service.js +357 -71
- package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
- package/dist/server/modules/storage/db/schema.d.ts +159 -0
- package/dist/server/modules/storage/db/schema.js +18 -1
- package/dist/server/modules/storage/db/schema.js.map +1 -1
- package/dist/server/modules/storage/interfaces/storage.interface.d.ts +12 -1
- package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
- package/dist/server/modules/storage/local/local-storage.service.d.ts +12 -1
- package/dist/server/modules/storage/local/local-storage.service.js +194 -1
- package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
- package/dist/server/modules/storage/models/domain.models.d.ts +12 -0
- package/dist/server/modules/terminal/services/tmux.service.d.ts +2 -0
- package/dist/server/modules/terminal/services/tmux.service.js +74 -13
- package/dist/server/modules/terminal/services/tmux.service.js.map +1 -1
- package/dist/server/tsconfig.tsbuildinfo +1 -1
- package/dist/server/ui/assets/{index-Bgulh8ua.js → index-hB0e02VB.js} +165 -165
- package/dist/server/ui/index.html +1 -1
- package/package.json +9 -2
|
@@ -155,6 +155,20 @@
|
|
|
155
155
|
"when": 1767571200000,
|
|
156
156
|
"tag": "0021_agent_profiles_family_slug",
|
|
157
157
|
"breakpoints": true
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"idx": 22,
|
|
161
|
+
"version": "6",
|
|
162
|
+
"when": 1767657600000,
|
|
163
|
+
"tag": "0022_guests",
|
|
164
|
+
"breakpoints": true
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"idx": 23,
|
|
168
|
+
"version": "6",
|
|
169
|
+
"when": 1767783341227,
|
|
170
|
+
"tag": "0023_add_guest_description",
|
|
171
|
+
"breakpoints": true
|
|
158
172
|
}
|
|
159
173
|
]
|
|
160
|
-
}
|
|
174
|
+
}
|
|
@@ -30,6 +30,7 @@ const chat_module_1 = require("./modules/chat/chat.module");
|
|
|
30
30
|
const watchers_module_1 = require("./modules/watchers/watchers.module");
|
|
31
31
|
const subscribers_module_1 = require("./modules/subscribers/subscribers.module");
|
|
32
32
|
const registry_module_1 = require("./modules/registry/registry.module");
|
|
33
|
+
const guests_module_1 = require("./modules/guests/guests.module");
|
|
33
34
|
const request_id_middleware_1 = require("./common/middleware/request-id.middleware");
|
|
34
35
|
const events_module_1 = require("./modules/events/events.module");
|
|
35
36
|
const http_exception_filter_1 = require("./common/filters/http-exception.filter");
|
|
@@ -65,6 +66,7 @@ exports.AppModule = AppModule = __decorate([
|
|
|
65
66
|
watchers_module_1.WatchersModule,
|
|
66
67
|
subscribers_module_1.SubscribersModule,
|
|
67
68
|
registry_module_1.RegistryModule,
|
|
69
|
+
guests_module_1.GuestsModule,
|
|
68
70
|
],
|
|
69
71
|
controllers: [],
|
|
70
72
|
providers: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwE;AACxE,uCAA0C;AAC1C,4DAAwD;AACxD,qEAAiE;AACjE,wEAAoE;AACpE,wEAAoE;AACpE,yDAAqD;AACrD,sDAAkD;AAClD,wEAAoE;AACpE,wEAAoE;AACpE,qEAAiE;AACjE,wEAAoE;AACpE,2EAAuE;AACvE,kEAA8D;AAC9D,wEAAoE;AACpE,+DAA2D;AAC3D,qEAAiE;AACjE,2EAAuE;AACvE,sDAAkD;AAClD,4DAAwD;AACxD,wEAAoE;AACpE,iFAA6E;AAC7E,wEAAoE;AACpE,qFAAgF;AAChF,kEAA8D;AAC9D,kFAA6E;AAC7E,8EAA6E;
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwE;AACxE,uCAA0C;AAC1C,4DAAwD;AACxD,qEAAiE;AACjE,wEAAoE;AACpE,wEAAoE;AACpE,yDAAqD;AACrD,sDAAkD;AAClD,wEAAoE;AACpE,wEAAoE;AACpE,qEAAiE;AACjE,wEAAoE;AACpE,2EAAuE;AACvE,kEAA8D;AAC9D,wEAAoE;AACpE,+DAA2D;AAC3D,qEAAiE;AACjE,2EAAuE;AACvE,sDAAkD;AAClD,4DAAwD;AACxD,wEAAoE;AACpE,iFAA6E;AAC7E,wEAAoE;AACpE,kEAA8D;AAC9D,qFAAgF;AAChF,kEAA8D;AAC9D,kFAA6E;AAC7E,8EAA6E;AAmCtE,IAAM,SAAS,GAAf,MAAM,SAAS;IACpB,SAAS,CAAC,QAA4B;QACpC,QAAQ,CAAC,KAAK,CAAC,2CAAmB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AAJY,8BAAS;oBAAT,SAAS;IAjCrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,4BAAY;YACZ,wBAAU;YACV,8BAAa;YACb,gCAAc;YACd,gCAAc;YACd,sBAAS;YACT,oBAAQ;YACR,gCAAc;YACd,gCAAc;YACd,8BAAa;YACb,gCAAc;YACd,kCAAe;YACf,4BAAY;YACZ,gCAAc;YACd,0BAAW;YACX,8BAAa;YACb,kCAAe;YACf,oBAAQ;YACR,wBAAU;YACV,gCAAc;YACd,sCAAiB;YACjB,gCAAc;YACd,4BAAY;SACb;QACD,WAAW,EAAE,EAAE;QACf,SAAS,EAAE;YAET,EAAE,OAAO,EAAE,iBAAU,EAAE,QAAQ,EAAE,2CAAqB,EAAE;YACxD,EAAE,OAAO,EAAE,iBAAU,EAAE,QAAQ,EAAE,2CAAmB,EAAE;SACvD;KACF,CAAC;GACW,SAAS,CAIrB"}
|
|
@@ -7,6 +7,14 @@ export interface AgentWithProvider extends Agent {
|
|
|
7
7
|
providerName?: string;
|
|
8
8
|
providerId?: string;
|
|
9
9
|
}
|
|
10
|
+
export interface AgentOrGuestItem {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
profileId: string | null;
|
|
14
|
+
description?: string | null;
|
|
15
|
+
type: 'agent' | 'guest';
|
|
16
|
+
tmuxSessionId?: string;
|
|
17
|
+
}
|
|
10
18
|
export interface RestartAgentResponse {
|
|
11
19
|
session: SessionDto;
|
|
12
20
|
terminateStatus: 'success' | 'not_found' | 'error';
|
|
@@ -17,7 +25,12 @@ export declare class AgentsController {
|
|
|
17
25
|
private readonly sessionsService;
|
|
18
26
|
private readonly sessionCoordinator;
|
|
19
27
|
constructor(storage: StorageService, sessionsService: SessionsService, sessionCoordinator: SessionCoordinatorService);
|
|
20
|
-
listAgents(projectId: string): Promise<import("../../storage/interfaces/storage.interface").ListResult<Agent
|
|
28
|
+
listAgents(projectId: string, includeGuests?: string): Promise<import("../../storage/interfaces/storage.interface").ListResult<Agent> | {
|
|
29
|
+
items: AgentOrGuestItem[];
|
|
30
|
+
total: number;
|
|
31
|
+
limit: number;
|
|
32
|
+
offset: number;
|
|
33
|
+
}>;
|
|
21
34
|
getAgent(id: string): Promise<AgentWithProvider>;
|
|
22
35
|
createAgent(body: unknown): Promise<Agent>;
|
|
23
36
|
updateAgent(id: string, body: unknown): Promise<Agent>;
|
|
@@ -40,12 +40,37 @@ let AgentsController = class AgentsController {
|
|
|
40
40
|
this.sessionsService = sessionsService;
|
|
41
41
|
this.sessionCoordinator = sessionCoordinator;
|
|
42
42
|
}
|
|
43
|
-
async listAgents(projectId) {
|
|
44
|
-
logger.info({ projectId }, 'GET /api/agents');
|
|
43
|
+
async listAgents(projectId, includeGuests) {
|
|
44
|
+
logger.info({ projectId, includeGuests }, 'GET /api/agents');
|
|
45
45
|
if (!projectId) {
|
|
46
46
|
throw new common_1.BadRequestException('projectId query parameter required');
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
const agentsResult = await this.storage.listAgents(projectId);
|
|
49
|
+
if (includeGuests !== 'true') {
|
|
50
|
+
return agentsResult;
|
|
51
|
+
}
|
|
52
|
+
const guests = await this.storage.listGuests(projectId);
|
|
53
|
+
const agentItems = agentsResult.items.map((agent) => ({
|
|
54
|
+
id: agent.id,
|
|
55
|
+
name: agent.name,
|
|
56
|
+
profileId: agent.profileId,
|
|
57
|
+
description: agent.description,
|
|
58
|
+
type: 'agent',
|
|
59
|
+
}));
|
|
60
|
+
const guestItems = guests.map((guest) => ({
|
|
61
|
+
id: guest.id,
|
|
62
|
+
name: guest.name,
|
|
63
|
+
profileId: null,
|
|
64
|
+
description: null,
|
|
65
|
+
type: 'guest',
|
|
66
|
+
tmuxSessionId: guest.tmuxSessionId,
|
|
67
|
+
}));
|
|
68
|
+
return {
|
|
69
|
+
items: [...agentItems, ...guestItems],
|
|
70
|
+
total: agentsResult.total + guests.length,
|
|
71
|
+
limit: agentsResult.limit,
|
|
72
|
+
offset: agentsResult.offset,
|
|
73
|
+
};
|
|
49
74
|
}
|
|
50
75
|
async getAgent(id) {
|
|
51
76
|
logger.info({ id }, 'GET /api/agents/:id');
|
|
@@ -138,8 +163,9 @@ exports.AgentsController = AgentsController;
|
|
|
138
163
|
__decorate([
|
|
139
164
|
(0, common_1.Get)(),
|
|
140
165
|
__param(0, (0, common_1.Query)('projectId')),
|
|
166
|
+
__param(1, (0, common_1.Query)('includeGuests')),
|
|
141
167
|
__metadata("design:type", Function),
|
|
142
|
-
__metadata("design:paramtypes", [String]),
|
|
168
|
+
__metadata("design:paramtypes", [String, String]),
|
|
143
169
|
__metadata("design:returntype", Promise)
|
|
144
170
|
], AgentsController.prototype, "listAgents", null);
|
|
145
171
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.controller.js","sourceRoot":"","sources":["../../../../src/modules/agents/controllers/agents.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAawB;AACxB,kFAA6F;AAE7F,+EAA2E;AAC3E,qGAAgG;AAEhG,6BAAwB;AACxB,2DAA8D;AAE9D,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.controller.js","sourceRoot":"","sources":["../../../../src/modules/agents/controllers/agents.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const guestRegisteredEvent: {
|
|
3
|
+
readonly name: "guest.registered";
|
|
4
|
+
readonly schema: z.ZodObject<{
|
|
5
|
+
guestId: z.ZodString;
|
|
6
|
+
projectId: z.ZodString;
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
tmuxSessionId: z.ZodString;
|
|
9
|
+
isSandbox: z.ZodBoolean;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
name: string;
|
|
12
|
+
projectId: string;
|
|
13
|
+
tmuxSessionId: string;
|
|
14
|
+
guestId: string;
|
|
15
|
+
isSandbox: boolean;
|
|
16
|
+
}, {
|
|
17
|
+
name: string;
|
|
18
|
+
projectId: string;
|
|
19
|
+
tmuxSessionId: string;
|
|
20
|
+
guestId: string;
|
|
21
|
+
isSandbox: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
export type GuestRegisteredEventPayload = z.infer<typeof guestRegisteredEvent.schema>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.guestRegisteredEvent = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.guestRegisteredEvent = {
|
|
6
|
+
name: 'guest.registered',
|
|
7
|
+
schema: zod_1.z.object({
|
|
8
|
+
guestId: zod_1.z.string().min(1),
|
|
9
|
+
projectId: zod_1.z.string().min(1),
|
|
10
|
+
name: zod_1.z.string().min(1),
|
|
11
|
+
tmuxSessionId: zod_1.z.string().min(1),
|
|
12
|
+
isSandbox: zod_1.z.boolean(),
|
|
13
|
+
}),
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=guest.registered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest.registered.js","sourceRoot":"","sources":["../../../../src/modules/events/catalog/guest.registered.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,oBAAoB,GAAG;IAClC,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE;KACvB,CAAC;CACM,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const guestUnregisteredEvent: {
|
|
3
|
+
readonly name: "guest.unregistered";
|
|
4
|
+
readonly schema: z.ZodObject<{
|
|
5
|
+
guestId: z.ZodString;
|
|
6
|
+
projectId: z.ZodString;
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
tmuxSessionId: z.ZodString;
|
|
9
|
+
reason: z.ZodEnum<["tmux_session_died", "manual"]>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
name: string;
|
|
12
|
+
projectId: string;
|
|
13
|
+
tmuxSessionId: string;
|
|
14
|
+
guestId: string;
|
|
15
|
+
reason: "tmux_session_died" | "manual";
|
|
16
|
+
}, {
|
|
17
|
+
name: string;
|
|
18
|
+
projectId: string;
|
|
19
|
+
tmuxSessionId: string;
|
|
20
|
+
guestId: string;
|
|
21
|
+
reason: "tmux_session_died" | "manual";
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
export type GuestUnregisteredEventPayload = z.infer<typeof guestUnregisteredEvent.schema>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.guestUnregisteredEvent = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.guestUnregisteredEvent = {
|
|
6
|
+
name: 'guest.unregistered',
|
|
7
|
+
schema: zod_1.z.object({
|
|
8
|
+
guestId: zod_1.z.string().min(1),
|
|
9
|
+
projectId: zod_1.z.string().min(1),
|
|
10
|
+
name: zod_1.z.string().min(1),
|
|
11
|
+
tmuxSessionId: zod_1.z.string().min(1),
|
|
12
|
+
reason: zod_1.z.enum(['tmux_session_died', 'manual']),
|
|
13
|
+
}),
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=guest.unregistered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest.unregistered.js","sourceRoot":"","sources":["../../../../src/modules/events/catalog/guest.unregistered.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,sBAAsB,GAAG;IACpC,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;KAChD,CAAC;CACM,CAAC"}
|
|
@@ -288,6 +288,44 @@ export declare const eventCatalog: {
|
|
|
288
288
|
}, {
|
|
289
289
|
scrollbackLines: number;
|
|
290
290
|
}>;
|
|
291
|
+
readonly "guest.registered": z.ZodObject<{
|
|
292
|
+
guestId: z.ZodString;
|
|
293
|
+
projectId: z.ZodString;
|
|
294
|
+
name: z.ZodString;
|
|
295
|
+
tmuxSessionId: z.ZodString;
|
|
296
|
+
isSandbox: z.ZodBoolean;
|
|
297
|
+
}, "strip", z.ZodTypeAny, {
|
|
298
|
+
name: string;
|
|
299
|
+
projectId: string;
|
|
300
|
+
tmuxSessionId: string;
|
|
301
|
+
guestId: string;
|
|
302
|
+
isSandbox: boolean;
|
|
303
|
+
}, {
|
|
304
|
+
name: string;
|
|
305
|
+
projectId: string;
|
|
306
|
+
tmuxSessionId: string;
|
|
307
|
+
guestId: string;
|
|
308
|
+
isSandbox: boolean;
|
|
309
|
+
}>;
|
|
310
|
+
readonly "guest.unregistered": z.ZodObject<{
|
|
311
|
+
guestId: z.ZodString;
|
|
312
|
+
projectId: z.ZodString;
|
|
313
|
+
name: z.ZodString;
|
|
314
|
+
tmuxSessionId: z.ZodString;
|
|
315
|
+
reason: z.ZodEnum<["tmux_session_died", "manual"]>;
|
|
316
|
+
}, "strip", z.ZodTypeAny, {
|
|
317
|
+
name: string;
|
|
318
|
+
projectId: string;
|
|
319
|
+
tmuxSessionId: string;
|
|
320
|
+
guestId: string;
|
|
321
|
+
reason: "tmux_session_died" | "manual";
|
|
322
|
+
}, {
|
|
323
|
+
name: string;
|
|
324
|
+
projectId: string;
|
|
325
|
+
tmuxSessionId: string;
|
|
326
|
+
guestId: string;
|
|
327
|
+
reason: "tmux_session_died" | "manual";
|
|
328
|
+
}>;
|
|
291
329
|
};
|
|
292
330
|
export type EventName = keyof typeof eventCatalog;
|
|
293
331
|
export type EventSchema<TName extends EventName> = (typeof eventCatalog)[TName];
|
|
@@ -8,6 +8,8 @@ const session_stopped_1 = require("./session.stopped");
|
|
|
8
8
|
const session_crashed_1 = require("./session.crashed");
|
|
9
9
|
const terminal_watcher_triggered_1 = require("./terminal.watcher.triggered");
|
|
10
10
|
const settings_terminal_changed_1 = require("./settings.terminal.changed");
|
|
11
|
+
const guest_registered_1 = require("./guest.registered");
|
|
12
|
+
const guest_unregistered_1 = require("./guest.unregistered");
|
|
11
13
|
var settings_terminal_changed_2 = require("./settings.terminal.changed");
|
|
12
14
|
Object.defineProperty(exports, "settingsTerminalChangedEvent", { enumerable: true, get: function () { return settings_terminal_changed_2.settingsTerminalChangedEvent; } });
|
|
13
15
|
exports.eventCatalog = {
|
|
@@ -18,6 +20,8 @@ exports.eventCatalog = {
|
|
|
18
20
|
[session_crashed_1.sessionCrashedEvent.name]: session_crashed_1.sessionCrashedEvent.schema,
|
|
19
21
|
[terminal_watcher_triggered_1.terminalWatcherTriggeredEvent.name]: terminal_watcher_triggered_1.terminalWatcherTriggeredEvent.schema,
|
|
20
22
|
[settings_terminal_changed_1.settingsTerminalChangedEvent.name]: settings_terminal_changed_1.settingsTerminalChangedEvent.schema,
|
|
23
|
+
[guest_registered_1.guestRegisteredEvent.name]: guest_registered_1.guestRegisteredEvent.schema,
|
|
24
|
+
[guest_unregistered_1.guestUnregisteredEvent.name]: guest_unregistered_1.guestUnregisteredEvent.schema,
|
|
21
25
|
};
|
|
22
26
|
exports.eventNames = Object.keys(exports.eventCatalog);
|
|
23
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/events/catalog/index.ts"],"names":[],"mappings":";;;AACA,iDAAkD;AAClD,iDAAkD;AAClD,uDAAwD;AACxD,uDAAwD;AACxD,uDAAwD;AACxD,6EAA6E;AAC7E,2EAA2E;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/events/catalog/index.ts"],"names":[],"mappings":";;;AACA,iDAAkD;AAClD,iDAAkD;AAClD,uDAAwD;AACxD,uDAAwD;AACxD,uDAAwD;AACxD,6EAA6E;AAC7E,2EAA2E;AAC3E,yDAA0D;AAC1D,6DAA8D;AAG9D,yEAA2E;AAAlE,yIAAA,4BAA4B,OAAA;AAExB,QAAA,YAAY,GAAG;IAC1B,CAAC,+BAAgB,CAAC,IAAI,CAAC,EAAE,+BAAgB,CAAC,MAAM;IAChD,CAAC,+BAAgB,CAAC,IAAI,CAAC,EAAE,+BAAgB,CAAC,MAAM;IAChD,CAAC,qCAAmB,CAAC,IAAI,CAAC,EAAE,qCAAmB,CAAC,MAAM;IACtD,CAAC,qCAAmB,CAAC,IAAI,CAAC,EAAE,qCAAmB,CAAC,MAAM;IACtD,CAAC,qCAAmB,CAAC,IAAI,CAAC,EAAE,qCAAmB,CAAC,MAAM;IACtD,CAAC,0DAA6B,CAAC,IAAI,CAAC,EAAE,0DAA6B,CAAC,MAAM;IAC1E,CAAC,wDAA4B,CAAC,IAAI,CAAC,EAAE,wDAA4B,CAAC,MAAM;IACxE,CAAC,uCAAoB,CAAC,IAAI,CAAC,EAAE,uCAAoB,CAAC,MAAM;IACxD,CAAC,2CAAsB,CAAC,IAAI,CAAC,EAAE,2CAAsB,CAAC,MAAM;CACpD,CAAC;AAKE,QAAA,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAY,CAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GUEST_HEALTH_CHECK_INTERVAL_MS = exports.GUEST_SANDBOX_ROOT_PATH = exports.GUEST_SANDBOX_PROJECT_NAME = void 0;
|
|
4
|
+
exports.GUEST_SANDBOX_PROJECT_NAME = 'Guest Sandbox';
|
|
5
|
+
exports.GUEST_SANDBOX_ROOT_PATH = '/__devchain_guest_sandbox__';
|
|
6
|
+
exports.GUEST_HEALTH_CHECK_INTERVAL_MS = 30_000;
|
|
7
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/modules/guests/constants.ts"],"names":[],"mappings":";;;AAQa,QAAA,0BAA0B,GAAG,eAAe,CAAC;AAM7C,QAAA,uBAAuB,GAAG,6BAA6B,CAAC;AAMxD,QAAA,8BAA8B,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface RegisterGuestDto {
|
|
2
|
+
name: string;
|
|
3
|
+
tmuxSessionId: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface RegisterGuestResultDto {
|
|
7
|
+
guestId: string;
|
|
8
|
+
projectId: string;
|
|
9
|
+
projectName: string;
|
|
10
|
+
isSandbox: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface GuestDto {
|
|
13
|
+
id: string;
|
|
14
|
+
projectId: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string | null;
|
|
17
|
+
tmuxSessionId: string;
|
|
18
|
+
lastSeenAt: string;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
updatedAt: string;
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest.dto.js","sourceRoot":"","sources":["../../../../src/modules/guests/dtos/guest.dto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.GuestsModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const guests_service_1 = require("./services/guests.service");
|
|
12
|
+
const guest_health_service_1 = require("./services/guest-health.service");
|
|
13
|
+
const storage_module_1 = require("../storage/storage.module");
|
|
14
|
+
const terminal_module_1 = require("../terminal/terminal.module");
|
|
15
|
+
const events_module_1 = require("../events/events.module");
|
|
16
|
+
let GuestsModule = class GuestsModule {
|
|
17
|
+
};
|
|
18
|
+
exports.GuestsModule = GuestsModule;
|
|
19
|
+
exports.GuestsModule = GuestsModule = __decorate([
|
|
20
|
+
(0, common_1.Module)({
|
|
21
|
+
imports: [storage_module_1.StorageModule, (0, common_1.forwardRef)(() => terminal_module_1.TerminalModule), (0, common_1.forwardRef)(() => events_module_1.EventsModule)],
|
|
22
|
+
providers: [guests_service_1.GuestsService, guest_health_service_1.GuestHealthService],
|
|
23
|
+
exports: [guests_service_1.GuestsService, guest_health_service_1.GuestHealthService],
|
|
24
|
+
})
|
|
25
|
+
], GuestsModule);
|
|
26
|
+
//# sourceMappingURL=guests.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guests.module.js","sourceRoot":"","sources":["../../../src/modules/guests/guests.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAoD;AACpD,8DAA0D;AAC1D,0EAAqE;AACrE,8DAA0D;AAC1D,iEAA6D;AAC7D,2DAAuD;AAOhD,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,8BAAa,EAAE,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,gCAAc,CAAC,EAAE,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,4BAAY,CAAC,CAAC;QAC1F,SAAS,EAAE,CAAC,8BAAa,EAAE,yCAAkB,CAAC;QAC9C,OAAO,EAAE,CAAC,8BAAa,EAAE,yCAAkB,CAAC;KAC7C,CAAC;GACW,YAAY,CAAG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
|
|
2
|
+
import { StorageService } from '../../storage/interfaces/storage.interface';
|
|
3
|
+
import { TmuxService } from '../../terminal/services/tmux.service';
|
|
4
|
+
import { EventsService } from '../../events/services/events.service';
|
|
5
|
+
import { GuestsService } from './guests.service';
|
|
6
|
+
import { Guest } from '../../storage/models/domain.models';
|
|
7
|
+
export declare class GuestHealthService implements OnModuleInit, OnModuleDestroy {
|
|
8
|
+
private readonly storage;
|
|
9
|
+
private readonly tmuxService;
|
|
10
|
+
private readonly eventsService;
|
|
11
|
+
private readonly guestsService;
|
|
12
|
+
private healthCheckIntervals;
|
|
13
|
+
constructor(storage: StorageService, tmuxService: TmuxService, eventsService: EventsService, guestsService: GuestsService);
|
|
14
|
+
onModuleInit(): Promise<void>;
|
|
15
|
+
onModuleDestroy(): void;
|
|
16
|
+
private resumeMonitoringForExistingGuests;
|
|
17
|
+
startMonitoring(guest: Guest): void;
|
|
18
|
+
stopMonitoring(guestId: string): void;
|
|
19
|
+
private checkGuestHealth;
|
|
20
|
+
private handleGuestDeath;
|
|
21
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
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.GuestHealthService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const logger_1 = require("../../../common/logging/logger");
|
|
18
|
+
const storage_interface_1 = require("../../storage/interfaces/storage.interface");
|
|
19
|
+
const tmux_service_1 = require("../../terminal/services/tmux.service");
|
|
20
|
+
const events_service_1 = require("../../events/services/events.service");
|
|
21
|
+
const guests_service_1 = require("./guests.service");
|
|
22
|
+
const constants_1 = require("../constants");
|
|
23
|
+
const logger = (0, logger_1.createLogger)('GuestHealthService');
|
|
24
|
+
let GuestHealthService = class GuestHealthService {
|
|
25
|
+
constructor(storage, tmuxService, eventsService, guestsService) {
|
|
26
|
+
this.storage = storage;
|
|
27
|
+
this.tmuxService = tmuxService;
|
|
28
|
+
this.eventsService = eventsService;
|
|
29
|
+
this.guestsService = guestsService;
|
|
30
|
+
this.healthCheckIntervals = new Map();
|
|
31
|
+
logger.info('GuestHealthService initialized');
|
|
32
|
+
}
|
|
33
|
+
async onModuleInit() {
|
|
34
|
+
this.guestsService.setHealthServiceRef(this);
|
|
35
|
+
await this.guestsService.initializeAndCleanup();
|
|
36
|
+
await this.resumeMonitoringForExistingGuests();
|
|
37
|
+
}
|
|
38
|
+
onModuleDestroy() {
|
|
39
|
+
logger.info('GuestHealthService.onModuleDestroy: clearing all health check timers');
|
|
40
|
+
for (const [guestId, interval] of this.healthCheckIntervals.entries()) {
|
|
41
|
+
clearInterval(interval);
|
|
42
|
+
logger.debug({ guestId }, 'Cleared health check interval');
|
|
43
|
+
}
|
|
44
|
+
this.healthCheckIntervals.clear();
|
|
45
|
+
}
|
|
46
|
+
async resumeMonitoringForExistingGuests() {
|
|
47
|
+
try {
|
|
48
|
+
const guests = await this.storage.listAllGuests();
|
|
49
|
+
logger.info({ count: guests.length }, 'Resuming health monitoring for existing guests');
|
|
50
|
+
for (const guest of guests) {
|
|
51
|
+
const sessionExists = await this.tmuxService.hasSession(guest.tmuxSessionId);
|
|
52
|
+
if (!sessionExists) {
|
|
53
|
+
logger.info({ guestId: guest.id, tmuxSessionId: guest.tmuxSessionId }, 'Tmux session dead on startup, cleaning up guest');
|
|
54
|
+
await this.handleGuestDeath(guest);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
this.startMonitoring(guest);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
logger.error({ error: String(error) }, 'Failed to resume monitoring for existing guests');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
startMonitoring(guest) {
|
|
66
|
+
this.stopMonitoring(guest.id);
|
|
67
|
+
const interval = setInterval(async () => {
|
|
68
|
+
await this.checkGuestHealth(guest);
|
|
69
|
+
}, constants_1.GUEST_HEALTH_CHECK_INTERVAL_MS);
|
|
70
|
+
this.healthCheckIntervals.set(guest.id, interval);
|
|
71
|
+
logger.info({ guestId: guest.id, intervalMs: constants_1.GUEST_HEALTH_CHECK_INTERVAL_MS }, 'Started health monitoring for guest');
|
|
72
|
+
}
|
|
73
|
+
stopMonitoring(guestId) {
|
|
74
|
+
const interval = this.healthCheckIntervals.get(guestId);
|
|
75
|
+
if (interval) {
|
|
76
|
+
clearInterval(interval);
|
|
77
|
+
this.healthCheckIntervals.delete(guestId);
|
|
78
|
+
logger.debug({ guestId }, 'Stopped health monitoring for guest');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async checkGuestHealth(guest) {
|
|
82
|
+
try {
|
|
83
|
+
const sessionExists = await this.tmuxService.hasSession(guest.tmuxSessionId);
|
|
84
|
+
if (!sessionExists) {
|
|
85
|
+
logger.info({ guestId: guest.id, tmuxSessionId: guest.tmuxSessionId }, 'Tmux session no longer exists, cleaning up guest');
|
|
86
|
+
await this.handleGuestDeath(guest);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
await this.guestsService.updateGuestLastSeen(guest.id);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
logger.error({ guestId: guest.id, error: String(error) }, 'Error checking guest health');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async handleGuestDeath(guest) {
|
|
97
|
+
this.stopMonitoring(guest.id);
|
|
98
|
+
try {
|
|
99
|
+
await this.guestsService.deleteGuest(guest.id);
|
|
100
|
+
await this.eventsService.publish('guest.unregistered', {
|
|
101
|
+
guestId: guest.id,
|
|
102
|
+
projectId: guest.projectId,
|
|
103
|
+
name: guest.name,
|
|
104
|
+
tmuxSessionId: guest.tmuxSessionId,
|
|
105
|
+
reason: 'tmux_session_died',
|
|
106
|
+
});
|
|
107
|
+
logger.info({ guestId: guest.id, tmuxSessionId: guest.tmuxSessionId }, 'Guest cleaned up after tmux session death');
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
logger.error({ guestId: guest.id, error: String(error) }, 'Failed to clean up guest after tmux session death');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
exports.GuestHealthService = GuestHealthService;
|
|
115
|
+
exports.GuestHealthService = GuestHealthService = __decorate([
|
|
116
|
+
(0, common_1.Injectable)(),
|
|
117
|
+
__param(0, (0, common_1.Inject)(storage_interface_1.STORAGE_SERVICE)),
|
|
118
|
+
__param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => tmux_service_1.TmuxService))),
|
|
119
|
+
__param(2, (0, common_1.Inject)((0, common_1.forwardRef)(() => events_service_1.EventsService))),
|
|
120
|
+
__param(3, (0, common_1.Inject)((0, common_1.forwardRef)(() => guests_service_1.GuestsService))),
|
|
121
|
+
__metadata("design:paramtypes", [Object, tmux_service_1.TmuxService,
|
|
122
|
+
events_service_1.EventsService,
|
|
123
|
+
guests_service_1.GuestsService])
|
|
124
|
+
], GuestHealthService);
|
|
125
|
+
//# sourceMappingURL=guest-health.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-health.service.js","sourceRoot":"","sources":["../../../../src/modules/guests/services/guest-health.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { StorageService } from '../../storage/interfaces/storage.interface';
|
|
3
|
+
import { TmuxService } from '../../terminal/services/tmux.service';
|
|
4
|
+
import { EventsService } from '../../events/services/events.service';
|
|
5
|
+
import { RegisterGuestDto, RegisterGuestResultDto } from '../dtos/guest.dto';
|
|
6
|
+
import { Guest } from '../../storage/models/domain.models';
|
|
7
|
+
export declare class GuestsService implements OnModuleInit {
|
|
8
|
+
private readonly storage;
|
|
9
|
+
private readonly tmuxService;
|
|
10
|
+
private readonly eventsService;
|
|
11
|
+
private guestHealthServiceRef?;
|
|
12
|
+
constructor(storage: StorageService, tmuxService: TmuxService, eventsService: EventsService);
|
|
13
|
+
setHealthServiceRef(healthService: {
|
|
14
|
+
startMonitoring: (guest: Guest) => void;
|
|
15
|
+
}): void;
|
|
16
|
+
onModuleInit(): Promise<void>;
|
|
17
|
+
initializeAndCleanup(): Promise<void>;
|
|
18
|
+
cleanupSandbox(): Promise<void>;
|
|
19
|
+
getOrCreateSandboxProject(): Promise<{
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
}>;
|
|
23
|
+
register(dto: RegisterGuestDto): Promise<RegisterGuestResultDto>;
|
|
24
|
+
private validateNameAvailability;
|
|
25
|
+
getGuest(guestId: string): Promise<Guest>;
|
|
26
|
+
listGuests(projectId: string): Promise<Guest[]>;
|
|
27
|
+
listAllGuests(): Promise<Guest[]>;
|
|
28
|
+
deleteGuest(guestId: string): Promise<void>;
|
|
29
|
+
updateGuestLastSeen(guestId: string): Promise<Guest>;
|
|
30
|
+
}
|