crewx 0.8.7-rc.21 → 0.8.7-rc.22
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/assets/{MarketPage-aY16UW1_.js → MarketPage-lLBtAENs.js} +10 -15
- package/dist/assets/{PromptTab-C3aTJS6u.js → PromptTab-Daq54dMi.js} +1 -1
- package/dist/assets/_baseUniq-BJDqmZBO.js +1 -0
- package/dist/assets/{arc-BCQAokB1.js → arc-ByjRIa5p.js} +1 -1
- package/dist/assets/{architectureDiagram-UYN6MBPD-Bc87ujv2.js → architectureDiagram-UYN6MBPD-DcKpqSFb.js} +1 -1
- package/dist/assets/{blockDiagram-ZHA2E4KO-wC9uH8Lb.js → blockDiagram-ZHA2E4KO-YvUeULT5.js} +1 -1
- package/dist/assets/{c4Diagram-6F5ED5ID-CqB7lqni.js → c4Diagram-6F5ED5ID-vggzH2N5.js} +1 -1
- package/dist/assets/channel-1Y6YooBb.js +1 -0
- package/dist/assets/{chunk-5HRBRIJM-Cc1L17Eh.js → chunk-5HRBRIJM-BbaQwJkn.js} +1 -1
- package/dist/assets/{chunk-7U56Z5CX-Df3nu_7G.js → chunk-7U56Z5CX-DVYVpFaa.js} +1 -1
- package/dist/assets/{chunk-ASOPGD6M-DIXslLG-.js → chunk-ASOPGD6M-CXEvWb-8.js} +1 -1
- package/dist/assets/{chunk-KFBOBJHC-FytVljyP.js → chunk-KFBOBJHC-CadVXFV3.js} +1 -1
- package/dist/assets/{chunk-T2TOU4HS-CU5z-cXq.js → chunk-T2TOU4HS-lDZr1sVF.js} +1 -1
- package/dist/assets/{chunk-TMUBEWPD-CWo1AFyn.js → chunk-TMUBEWPD-D5A0MrFD.js} +1 -1
- package/dist/assets/classDiagram-LNE6IOMH-CDxkV2JV.js +1 -0
- package/dist/assets/classDiagram-v2-MQ7JQ4JX-CDxkV2JV.js +1 -0
- package/dist/assets/clone-6xznz_9G.js +1 -0
- package/dist/assets/{dagre-4EVJKHTY-CgZW5tg4.js → dagre-4EVJKHTY-Bncx7Ijq.js} +1 -1
- package/dist/assets/{diagram-QW4FP2JN-CJAng8RC.js → diagram-QW4FP2JN-RkxVNs99.js} +1 -1
- package/dist/assets/{erDiagram-6RL3IURR-C1uHztHX.js → erDiagram-6RL3IURR-DIiKqQdx.js} +1 -1
- package/dist/assets/{flowDiagram-7ASYPVHJ-Yiu2odO-.js → flowDiagram-7ASYPVHJ-DQ5PN7v6.js} +1 -1
- package/dist/assets/{ganttDiagram-NTVNEXSI-tutc0dJP.js → ganttDiagram-NTVNEXSI-BeNWGpB6.js} +1 -1
- package/dist/assets/{gitGraph-YCYPL57B-C3jM6T4G.js → gitGraph-YCYPL57B-CdMe059q.js} +1 -1
- package/dist/assets/{gitGraphDiagram-NRZ2UAAF-0aqHEKzz.js → gitGraphDiagram-NRZ2UAAF-BEke5TyK.js} +1 -1
- package/dist/assets/{graph-DC224ILV.js → graph-DyQIwWJd.js} +1 -1
- package/dist/assets/{infoDiagram-A4XQUW5V-Do7Mpzkx.js → infoDiagram-A4XQUW5V-CUcC8I_5.js} +1 -1
- package/dist/assets/{journeyDiagram-G5WM74LC-DAruEJc7.js → journeyDiagram-G5WM74LC-CQ5DqAH5.js} +1 -1
- package/dist/assets/{kanban-definition-QRCXZQQD-DB63vLR0.js → kanban-definition-QRCXZQQD-BBsgOii7.js} +1 -1
- package/dist/assets/{layout-BiYH5x6Q.js → layout-D7vBs_Wy.js} +1 -1
- package/dist/assets/{linear-CLyGW2s0.js → linear-CEOF9oJz.js} +1 -1
- package/dist/assets/{main-CEKkUqZb.js → main-Bx1nZ7_p.js} +278 -273
- package/dist/assets/main-C4ebvOIJ.css +10 -0
- package/dist/assets/{min-ChJMFU2N.js → min-RK9J5Utn.js} +1 -1
- package/dist/assets/{mindmap-definition-GWI6TPTV-CtADqQgd.js → mindmap-definition-GWI6TPTV-BXvEU7qC.js} +1 -1
- package/dist/assets/{pieDiagram-YF2LJOPJ-BSOfzo3O.js → pieDiagram-YF2LJOPJ-TrXqcpni.js} +1 -1
- package/dist/assets/{quadrantDiagram-OS5C2QUG-BLBQNFVb.js → quadrantDiagram-OS5C2QUG-B-chTEU4.js} +1 -1
- package/dist/assets/{requirementDiagram-MIRIMTAZ-DqorvuS6.js → requirementDiagram-MIRIMTAZ-BgJhNLp_.js} +1 -1
- package/dist/assets/{sankeyDiagram-Y46BX6SQ-4NDcrLkB.js → sankeyDiagram-Y46BX6SQ-BVsgYKK7.js} +1 -1
- package/dist/assets/{sequenceDiagram-G6AWOVSC-yha6BxK2.js → sequenceDiagram-G6AWOVSC-ByJOpkq3.js} +1 -1
- package/dist/assets/{stateDiagram-MAYHULR4-XJ_I41ez.js → stateDiagram-MAYHULR4-Dw7lUL1B.js} +1 -1
- package/dist/assets/stateDiagram-v2-4JROLMXI-DYJiM3bF.js +1 -0
- package/dist/assets/{timeline-definition-U7ZMHBDA-DCNrmvE7.js → timeline-definition-U7ZMHBDA-CSoEYs60.js} +1 -1
- package/dist/assets/{xychartDiagram-6QU3TZC5-9N-Ohhdp.js → xychartDiagram-6QU3TZC5-0_rG7p3L.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +8 -8
- package/packages/cli/package.json +1 -1
- package/dist/assets/_baseUniq-DxEFlwNt.js +0 -1
- package/dist/assets/channel-DNLHkiNp.js +0 -1
- package/dist/assets/classDiagram-LNE6IOMH-B430Onym.js +0 -1
- package/dist/assets/classDiagram-v2-MQ7JQ4JX-B430Onym.js +0 -1
- package/dist/assets/clone-B9O3E3P1.js +0 -1
- package/dist/assets/main-D3YeRndF.css +0 -10
- package/dist/assets/stateDiagram-v2-4JROLMXI-CxcyPJO2.js +0 -1
- package/dist-server/adapters/adapter.module.js +0 -35
- package/dist-server/adapters/adapter.service.js +0 -79
- package/dist-server/adapters/http-router.service.js +0 -91
- package/dist-server/app.module.js +0 -111
- package/dist-server/bootstrap/crewx-server.js +0 -80
- package/dist-server/bootstrap/tls.js +0 -138
- package/dist-server/common/analytics.client.js +0 -180
- package/dist-server/common/analytics.module.js +0 -21
- package/dist-server/common/cors.js +0 -15
- package/dist-server/common/decorators/project.decorator.js +0 -21
- package/dist-server/common/decorators/workspace.decorator.js +0 -24
- package/dist-server/common/device-id.js +0 -33
- package/dist-server/common/interceptor/api-id-header.interceptor.js +0 -53
- package/dist-server/common/interceptor/http-logging.interceptor.js +0 -124
- package/dist-server/common/limits/defaults.js +0 -13
- package/dist-server/common/limits/limits-provider.js +0 -6
- package/dist-server/common/limits/limits.controller.js +0 -38
- package/dist-server/common/limits/limits.module.js +0 -24
- package/dist-server/common/limits/local-limits.provider.js +0 -27
- package/dist-server/common/middleware/workspace.middleware.js +0 -210
- package/dist-server/common/repository.exception-filter.js +0 -48
- package/dist-server/common/workspace-context.store.js +0 -25
- package/dist-server/domain/agent/agent.controller.js +0 -96
- package/dist-server/domain/agent/agent.module.js +0 -27
- package/dist-server/domain/agent/agent.service.js +0 -335
- package/dist-server/domain/agent/agent.types.js +0 -3
- package/dist-server/domain/agent/dto/create-agent.dto.js +0 -80
- package/dist-server/domain/agent/dto/preview-prompt.dto.js +0 -77
- package/dist-server/domain/agent/dto/provider-meta.dto.js +0 -2
- package/dist-server/domain/agent/dto/update-agent.dto.js +0 -92
- package/dist-server/domain/agent/provider.controller.js +0 -38
- package/dist-server/domain/agent/template-processor.service.js +0 -71
- package/dist-server/domain/auth/auth.constants.js +0 -4
- package/dist-server/domain/auth/auth.controller.js +0 -123
- package/dist-server/domain/auth/auth.module.js +0 -47
- package/dist-server/domain/auth/decorators/public.decorator.js +0 -7
- package/dist-server/domain/auth/guards/base-auth.guard.js +0 -66
- package/dist-server/domain/auth/session-store.js +0 -26
- package/dist-server/domain/auth/utils/ip.utils.js +0 -31
- package/dist-server/domain/box/box.controller.js +0 -77
- package/dist-server/domain/box/box.module.js +0 -21
- package/dist-server/domain/box/box.service.js +0 -97
- package/dist-server/domain/box/dto/create-box.dto.js +0 -74
- package/dist-server/domain/cli/cli.controller.js +0 -136
- package/dist-server/domain/cli/cli.module.js +0 -21
- package/dist-server/domain/cli/cli.service.js +0 -598
- package/dist-server/domain/cli/dto/login-cli.dto.js +0 -25
- package/dist-server/domain/cli/dto/update-cli.dto.js +0 -31
- package/dist-server/domain/doc/doc.controller.js +0 -95
- package/dist-server/domain/doc/doc.module.js +0 -21
- package/dist-server/domain/doc/doc.service.js +0 -368
- package/dist-server/domain/doc/dto/doc.dto.js +0 -64
- package/dist-server/domain/document/document.controller.js +0 -57
- package/dist-server/domain/document/document.module.js +0 -22
- package/dist-server/domain/document/document.service.js +0 -274
- package/dist-server/domain/document/dto/register-document.dto.js +0 -24
- package/dist-server/domain/fs/dto/mkdir-request.dto.js +0 -47
- package/dist-server/domain/fs/dto/mkdir-response.dto.js +0 -2
- package/dist-server/domain/fs/dto/quick-access.dto.js +0 -2
- package/dist-server/domain/fs/dto/tree-node.dto.js +0 -2
- package/dist-server/domain/fs/dto/tree-query.dto.js +0 -35
- package/dist-server/domain/fs/fs.controller.js +0 -63
- package/dist-server/domain/fs/fs.module.js +0 -22
- package/dist-server/domain/fs/fs.service.js +0 -303
- package/dist-server/domain/git/git.module.js +0 -20
- package/dist-server/domain/git/git.service.js +0 -222
- package/dist-server/domain/goal/dto/goal.dto.js +0 -49
- package/dist-server/domain/goal/goal.controller.js +0 -86
- package/dist-server/domain/goal/goal.module.js +0 -22
- package/dist-server/domain/goal/goal.service.js +0 -197
- package/dist-server/domain/goal/parser/goal-md-parser.js +0 -166
- package/dist-server/domain/goal/parser/goal-md-serializer.js +0 -110
- package/dist-server/domain/health/health.controller.js +0 -57
- package/dist-server/domain/health/health.module.js +0 -19
- package/dist-server/domain/knowledge/dto/graph-knowledge.dto.js +0 -27
- package/dist-server/domain/knowledge/dto/knowledge.dto.js +0 -71
- package/dist-server/domain/knowledge/knowledge.controller.js +0 -122
- package/dist-server/domain/knowledge/knowledge.module.js +0 -21
- package/dist-server/domain/knowledge/knowledge.service.js +0 -538
- package/dist-server/domain/market/dto/add-registry.dto.js +0 -32
- package/dist-server/domain/market/dto/install-market.dto.js +0 -30
- package/dist-server/domain/market/market.controller.js +0 -163
- package/dist-server/domain/market/market.module.js +0 -22
- package/dist-server/domain/market/market.service.js +0 -1447
- package/dist-server/domain/mcp/browser-session.store.js +0 -247
- package/dist-server/domain/mcp/crewx-tool.factory.js +0 -119
- package/dist-server/domain/mcp/mcp-auth.guard.js +0 -61
- package/dist-server/domain/mcp/mcp.constants.js +0 -4
- package/dist-server/domain/mcp/mcp.controller.js +0 -125
- package/dist-server/domain/mcp/mcp.dto.js +0 -12
- package/dist-server/domain/mcp/mcp.module.js +0 -49
- package/dist-server/domain/mcp/mcp.service.js +0 -684
- package/dist-server/domain/mcp/tool-router.service.js +0 -120
- package/dist-server/domain/message/dto/list-messages.dto.js +0 -57
- package/dist-server/domain/message/dto/send-message.dto.js +0 -45
- package/dist-server/domain/message/message.controller.js +0 -73
- package/dist-server/domain/message/message.module.js +0 -25
- package/dist-server/domain/message/message.service.js +0 -160
- package/dist-server/domain/onboarding/onboarding.controller.js +0 -97
- package/dist-server/domain/onboarding/onboarding.module.js +0 -23
- package/dist-server/domain/onboarding/onboarding.service.js +0 -106
- package/dist-server/domain/onboarding/onboarding.types.js +0 -2
- package/dist-server/domain/onboarding/presets/custom.js +0 -10
- package/dist-server/domain/onboarding/presets/dev-team.js +0 -41
- package/dist-server/domain/onboarding/presets/index.js +0 -15
- package/dist-server/domain/onboarding/presets/marketing-team.js +0 -29
- package/dist-server/domain/onboarding/presets/planning-team.js +0 -29
- package/dist-server/domain/onboarding/presets/solo.js +0 -17
- package/dist-server/domain/planner/dto/planner.dto.js +0 -58
- package/dist-server/domain/planner/planner.controller.js +0 -74
- package/dist-server/domain/planner/planner.module.js +0 -22
- package/dist-server/domain/planner/planner.service.js +0 -269
- package/dist-server/domain/project/dto/create-project.dto.js +0 -46
- package/dist-server/domain/project/dto/update-project.dto.js +0 -60
- package/dist-server/domain/project/project.controller.js +0 -129
- package/dist-server/domain/project/project.module.js +0 -22
- package/dist-server/domain/project/project.service.js +0 -173
- package/dist-server/domain/settings/settings.controller.js +0 -52
- package/dist-server/domain/settings/settings.module.js +0 -22
- package/dist-server/domain/settings/settings.service.js +0 -105
- package/dist-server/domain/task/dto/all-tasks.dto.js +0 -55
- package/dist-server/domain/task/dto/list-tasks.dto.js +0 -69
- package/dist-server/domain/task/dto/search-tasks.dto.js +0 -66
- package/dist-server/domain/task/dto/send-message.dto.js +0 -31
- package/dist-server/domain/task/dto/task-status.dto.js +0 -34
- package/dist-server/domain/task/dto/workspace-usage.dto.js +0 -38
- package/dist-server/domain/task/task.constants.js +0 -5
- package/dist-server/domain/task/task.controller.js +0 -169
- package/dist-server/domain/task/task.module.js +0 -23
- package/dist-server/domain/task/task.service.js +0 -775
- package/dist-server/domain/thread/dto/build-context.dto.js +0 -42
- package/dist-server/domain/thread/dto/list-messages.dto.js +0 -49
- package/dist-server/domain/thread/dto/list-threads.dto.js +0 -70
- package/dist-server/domain/thread/dto/search-threads.dto.js +0 -13
- package/dist-server/domain/thread/dto/update-thread.dto.js +0 -23
- package/dist-server/domain/thread/thread.controller.js +0 -160
- package/dist-server/domain/thread/thread.module.js +0 -23
- package/dist-server/domain/thread/thread.service.js +0 -419
- package/dist-server/domain/usage/usage.controller.js +0 -118
- package/dist-server/domain/usage/usage.module.js +0 -21
- package/dist-server/domain/usage/usage.service.js +0 -358
- package/dist-server/domain/usage/usage.types.js +0 -4
- package/dist-server/domain/wbs/wbs.controller.js +0 -51
- package/dist-server/domain/wbs/wbs.module.js +0 -21
- package/dist-server/domain/wbs/wbs.service.js +0 -94
- package/dist-server/domain/workflow/workflow.controller.js +0 -53
- package/dist-server/domain/workflow/workflow.module.js +0 -21
- package/dist-server/domain/workflow/workflow.service.js +0 -209
- package/dist-server/domain/workspace/dto/create-workspace.dto.js +0 -45
- package/dist-server/domain/workspace/dto/switch-workspace.dto.js +0 -32
- package/dist-server/domain/workspace/dto/workspace-info.dto.js +0 -2
- package/dist-server/domain/workspace/workspace.controller.js +0 -98
- package/dist-server/domain/workspace/workspace.module.js +0 -22
- package/dist-server/domain/workspace/workspace.service.js +0 -198
- package/dist-server/main.js +0 -204
- package/dist-server/modules/crewx-pool.service.js +0 -75
- package/dist-server/modules/crewx.module.js +0 -47
- package/dist-server/repository/base-sqlite.repository.js +0 -18
- package/dist-server/repository/box.repository.js +0 -99
- package/dist-server/repository/message.repository.js +0 -22
- package/dist-server/repository/project.repository.js +0 -51
- package/dist-server/repository/repository.module.js +0 -34
- package/dist-server/repository/request-log.repository.js +0 -96
- package/dist-server/repository/task.repository.js +0 -105
- package/dist-server/repository/thread.repository.js +0 -165
- package/dist-server/shared/crewx-home.js +0 -58
- package/dist-server/shared/crewx-state.js +0 -66
- package/dist-server/test-utils/compat-database.js +0 -30
- package/dist-server/utils/tokenizer.js +0 -8
|
@@ -1,247 +0,0 @@
|
|
|
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 BrowserSessionStore_1;
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.BrowserSessionStore = void 0;
|
|
14
|
-
const common_1 = require("@nestjs/common");
|
|
15
|
-
const crypto_1 = require("crypto");
|
|
16
|
-
const SESSION_PREFIX = 'sess_';
|
|
17
|
-
const SESSION_ID_BYTES = 16;
|
|
18
|
-
const DEFAULT_TTL_MS = 30 * 60 * 1000; // 30 minutes
|
|
19
|
-
const SWEEP_INTERVAL_MS = 60 * 1000; // 60 seconds
|
|
20
|
-
const KEEPALIVE_INTERVAL_MS = 15 * 1000; // 15 seconds
|
|
21
|
-
const TOOL_CALL_TIMEOUT_MS = 30 * 1000; // 30 seconds
|
|
22
|
-
let BrowserSessionStore = BrowserSessionStore_1 = class BrowserSessionStore {
|
|
23
|
-
logger = new common_1.Logger(BrowserSessionStore_1.name);
|
|
24
|
-
sessions = new Map();
|
|
25
|
-
sweepTimer;
|
|
26
|
-
constructor() {
|
|
27
|
-
this.sweepTimer = setInterval(() => this.sweep(), SWEEP_INTERVAL_MS);
|
|
28
|
-
this.sweepTimer.unref();
|
|
29
|
-
}
|
|
30
|
-
onModuleDestroy() {
|
|
31
|
-
clearInterval(this.sweepTimer);
|
|
32
|
-
for (const session of this.sessions.values()) {
|
|
33
|
-
this.destroySession(session);
|
|
34
|
-
}
|
|
35
|
-
this.sessions.clear();
|
|
36
|
-
}
|
|
37
|
-
create(clientType) {
|
|
38
|
-
const id = SESSION_PREFIX + (0, crypto_1.randomBytes)(SESSION_ID_BYTES).toString('hex');
|
|
39
|
-
const now = Date.now();
|
|
40
|
-
const session = {
|
|
41
|
-
id,
|
|
42
|
-
clientType,
|
|
43
|
-
sseResponse: null,
|
|
44
|
-
registeredTools: new Map(),
|
|
45
|
-
pendingCalls: new Map(),
|
|
46
|
-
createdAt: now,
|
|
47
|
-
lastActivity: now,
|
|
48
|
-
};
|
|
49
|
-
this.sessions.set(id, session);
|
|
50
|
-
this.logger.debug(`Session created: ${id} (clientType=${clientType ?? 'none'})`);
|
|
51
|
-
return session;
|
|
52
|
-
}
|
|
53
|
-
get(id) {
|
|
54
|
-
return this.sessions.get(id);
|
|
55
|
-
}
|
|
56
|
-
delete(id) {
|
|
57
|
-
const session = this.sessions.get(id);
|
|
58
|
-
if (!session)
|
|
59
|
-
return false;
|
|
60
|
-
this.destroySession(session);
|
|
61
|
-
this.sessions.delete(id);
|
|
62
|
-
this.logger.debug(`Session deleted: ${id}`);
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
get size() {
|
|
66
|
-
return this.sessions.size;
|
|
67
|
-
}
|
|
68
|
-
bindSse(sessionId, res) {
|
|
69
|
-
const session = this.sessions.get(sessionId);
|
|
70
|
-
if (!session)
|
|
71
|
-
return false;
|
|
72
|
-
// Replace existing SSE connection (reconnect scenario)
|
|
73
|
-
if (session.sseResponse) {
|
|
74
|
-
this.logger.debug(`Replacing existing SSE for session: ${sessionId}`);
|
|
75
|
-
this.cleanupSse(session);
|
|
76
|
-
}
|
|
77
|
-
session.sseResponse = res;
|
|
78
|
-
session.lastActivity = Date.now();
|
|
79
|
-
// SSE headers
|
|
80
|
-
res.writeHead(200, {
|
|
81
|
-
'Content-Type': 'text/event-stream',
|
|
82
|
-
'Cache-Control': 'no-cache',
|
|
83
|
-
'Connection': 'keep-alive',
|
|
84
|
-
'X-Accel-Buffering': 'no',
|
|
85
|
-
});
|
|
86
|
-
res.flushHeaders();
|
|
87
|
-
// Keepalive ping
|
|
88
|
-
const timer = setInterval(() => {
|
|
89
|
-
if (session.sseResponse && !session.sseResponse.writableEnded) {
|
|
90
|
-
session.sseResponse.write(':ping\n\n');
|
|
91
|
-
}
|
|
92
|
-
}, KEEPALIVE_INTERVAL_MS);
|
|
93
|
-
timer.unref();
|
|
94
|
-
session.keepaliveTimer = timer;
|
|
95
|
-
// Cleanup on disconnect — guard against stale close from a replaced response
|
|
96
|
-
const boundRes = res;
|
|
97
|
-
res.on('close', () => {
|
|
98
|
-
if (session.sseResponse !== boundRes)
|
|
99
|
-
return;
|
|
100
|
-
this.logger.debug(`SSE disconnected for session: ${sessionId}`);
|
|
101
|
-
this.cleanupSse(session);
|
|
102
|
-
this.rejectAllPending(session, new Error('SSE connection closed'));
|
|
103
|
-
});
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
registerTools(sessionId, tools, mode = 'merge') {
|
|
107
|
-
const session = this.sessions.get(sessionId);
|
|
108
|
-
if (!session)
|
|
109
|
-
return false;
|
|
110
|
-
if (mode === 'replace') {
|
|
111
|
-
session.registeredTools.clear();
|
|
112
|
-
}
|
|
113
|
-
for (const tool of tools) {
|
|
114
|
-
session.registeredTools.set(tool.name, tool);
|
|
115
|
-
}
|
|
116
|
-
session.lastActivity = Date.now();
|
|
117
|
-
this.logger.debug(`Tools registered (${mode}) for session ${sessionId}: ${tools.map((t) => t.name).join(', ')}`);
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
getRegisteredTools(sessionId) {
|
|
121
|
-
const session = this.sessions.get(sessionId);
|
|
122
|
-
if (!session)
|
|
123
|
-
return [];
|
|
124
|
-
return Array.from(session.registeredTools.values());
|
|
125
|
-
}
|
|
126
|
-
hasRegisteredTool(sessionId, toolName) {
|
|
127
|
-
const session = this.sessions.get(sessionId);
|
|
128
|
-
if (!session)
|
|
129
|
-
return false;
|
|
130
|
-
return session.registeredTools.has(toolName);
|
|
131
|
-
}
|
|
132
|
-
dispatchToolCall(sessionId, toolName, args, skipToolCheck = false) {
|
|
133
|
-
const session = this.sessions.get(sessionId);
|
|
134
|
-
if (!session) {
|
|
135
|
-
return Promise.reject(new Error(`Session not found: ${sessionId}`));
|
|
136
|
-
}
|
|
137
|
-
if (!session.sseResponse || session.sseResponse.writableEnded) {
|
|
138
|
-
return Promise.reject(new Error(`No active SSE connection for session: ${sessionId}`));
|
|
139
|
-
}
|
|
140
|
-
if (!skipToolCheck && !session.registeredTools.has(toolName)) {
|
|
141
|
-
return Promise.reject(new Error(`Tool not registered in session: ${toolName}`));
|
|
142
|
-
}
|
|
143
|
-
const callId = `c-${(0, crypto_1.randomBytes)(8).toString('hex')}`;
|
|
144
|
-
return new Promise((resolve, reject) => {
|
|
145
|
-
const pending = {
|
|
146
|
-
callId,
|
|
147
|
-
sessionId,
|
|
148
|
-
toolName,
|
|
149
|
-
createdAt: Date.now(),
|
|
150
|
-
resolve,
|
|
151
|
-
reject,
|
|
152
|
-
};
|
|
153
|
-
session.pendingCalls.set(callId, pending);
|
|
154
|
-
session.lastActivity = Date.now();
|
|
155
|
-
// SSE push: JSON-RPC request to extension
|
|
156
|
-
const event = JSON.stringify({
|
|
157
|
-
jsonrpc: '2.0',
|
|
158
|
-
method: 'tools/call',
|
|
159
|
-
id: callId,
|
|
160
|
-
params: { name: toolName, arguments: args },
|
|
161
|
-
});
|
|
162
|
-
session.sseResponse.write(`data: ${event}\n\n`);
|
|
163
|
-
// Timeout
|
|
164
|
-
const timeout = setTimeout(() => {
|
|
165
|
-
if (session.pendingCalls.has(callId)) {
|
|
166
|
-
session.pendingCalls.delete(callId);
|
|
167
|
-
reject(new Error(`Tool call timeout: ${toolName} (${callId})`));
|
|
168
|
-
}
|
|
169
|
-
}, TOOL_CALL_TIMEOUT_MS);
|
|
170
|
-
timeout.unref();
|
|
171
|
-
// Patch resolve/reject to clear timeout
|
|
172
|
-
const origResolve = pending.resolve;
|
|
173
|
-
const origReject = pending.reject;
|
|
174
|
-
pending.resolve = (result) => {
|
|
175
|
-
clearTimeout(timeout);
|
|
176
|
-
origResolve(result);
|
|
177
|
-
};
|
|
178
|
-
pending.reject = (error) => {
|
|
179
|
-
clearTimeout(timeout);
|
|
180
|
-
origReject(error);
|
|
181
|
-
};
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
resolveToolCall(sessionId, callId, result) {
|
|
185
|
-
const session = this.sessions.get(sessionId);
|
|
186
|
-
if (!session)
|
|
187
|
-
return false;
|
|
188
|
-
const pending = session.pendingCalls.get(callId);
|
|
189
|
-
if (!pending)
|
|
190
|
-
return false;
|
|
191
|
-
session.pendingCalls.delete(callId);
|
|
192
|
-
session.lastActivity = Date.now();
|
|
193
|
-
pending.resolve(result);
|
|
194
|
-
return true;
|
|
195
|
-
}
|
|
196
|
-
rejectToolCall(sessionId, callId, error) {
|
|
197
|
-
const session = this.sessions.get(sessionId);
|
|
198
|
-
if (!session)
|
|
199
|
-
return false;
|
|
200
|
-
const pending = session.pendingCalls.get(callId);
|
|
201
|
-
if (!pending)
|
|
202
|
-
return false;
|
|
203
|
-
session.pendingCalls.delete(callId);
|
|
204
|
-
pending.reject(error);
|
|
205
|
-
return true;
|
|
206
|
-
}
|
|
207
|
-
cleanupSse(session) {
|
|
208
|
-
if (session.keepaliveTimer) {
|
|
209
|
-
clearInterval(session.keepaliveTimer);
|
|
210
|
-
session.keepaliveTimer = undefined;
|
|
211
|
-
}
|
|
212
|
-
if (session.sseResponse && !session.sseResponse.writableEnded) {
|
|
213
|
-
session.sseResponse.end();
|
|
214
|
-
}
|
|
215
|
-
session.sseResponse = null;
|
|
216
|
-
}
|
|
217
|
-
rejectAllPending(session, error) {
|
|
218
|
-
for (const pending of session.pendingCalls.values()) {
|
|
219
|
-
pending.reject(error);
|
|
220
|
-
}
|
|
221
|
-
session.pendingCalls.clear();
|
|
222
|
-
session.registeredTools.clear();
|
|
223
|
-
}
|
|
224
|
-
destroySession(session) {
|
|
225
|
-
this.cleanupSse(session);
|
|
226
|
-
this.rejectAllPending(session, new Error('Session destroyed'));
|
|
227
|
-
}
|
|
228
|
-
sweep() {
|
|
229
|
-
const now = Date.now();
|
|
230
|
-
let swept = 0;
|
|
231
|
-
for (const [id, session] of this.sessions) {
|
|
232
|
-
if (now - session.lastActivity > DEFAULT_TTL_MS) {
|
|
233
|
-
this.destroySession(session);
|
|
234
|
-
this.sessions.delete(id);
|
|
235
|
-
swept++;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
if (swept > 0) {
|
|
239
|
-
this.logger.log(`Swept ${swept} expired session(s)`);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
exports.BrowserSessionStore = BrowserSessionStore;
|
|
244
|
-
exports.BrowserSessionStore = BrowserSessionStore = BrowserSessionStore_1 = __decorate([
|
|
245
|
-
(0, common_1.Injectable)(),
|
|
246
|
-
__metadata("design:paramtypes", [])
|
|
247
|
-
], BrowserSessionStore);
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createCrewxTool = createCrewxTool;
|
|
4
|
-
const common_1 = require("@nestjs/common");
|
|
5
|
-
const workspace_context_store_js_1 = require("../../common/workspace-context.store.js");
|
|
6
|
-
const logger = new common_1.Logger('CrewXToolFactory');
|
|
7
|
-
/**
|
|
8
|
-
* Create ICrewXTool implementation backed by a shared Crewx singleton (NestJS DI).
|
|
9
|
-
*
|
|
10
|
-
* All paths delegate to `crewx.query/execute` — threads row upsert, platform,
|
|
11
|
-
* title, first_message, and message persistence are handled by the SDK's
|
|
12
|
-
* ConversationPlugin chain. The Crewx instance lifecycle is owned by
|
|
13
|
-
* CrewxModule; this factory must NEVER call crewx.close().
|
|
14
|
-
*/
|
|
15
|
-
function createCrewxTool(crewx) {
|
|
16
|
-
// Pre-call helper: ensures threads row exists before fire-and-forget SDK call,
|
|
17
|
-
// closing the race window between task:start emission and REST response.
|
|
18
|
-
const preEnsureThread = async (threadId, platform) => {
|
|
19
|
-
if (!threadId)
|
|
20
|
-
return;
|
|
21
|
-
const conv = crewx.plugins.find((p) => p.name === 'conversation')?.conversationProvider;
|
|
22
|
-
try {
|
|
23
|
-
await conv?.ensureThread(threadId, platform, crewx.workspaceId);
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
logger.warn(`ensureThread skipped [thread=${threadId}]: ${err.message}`);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
return {
|
|
30
|
-
async listAgents() {
|
|
31
|
-
try {
|
|
32
|
-
const availableAgents = Array.from(crewx.agents.values()).map((a) => ({
|
|
33
|
-
id: a.id,
|
|
34
|
-
name: a.name,
|
|
35
|
-
role: a.role,
|
|
36
|
-
team: a.team,
|
|
37
|
-
description: a.description,
|
|
38
|
-
}));
|
|
39
|
-
const text = JSON.stringify(availableAgents, null, 2);
|
|
40
|
-
return {
|
|
41
|
-
content: [{ type: 'text', text }],
|
|
42
|
-
success: true,
|
|
43
|
-
availableAgents,
|
|
44
|
-
totalCount: availableAgents.length,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
logger.error(`listAgents error: ${err.message}`, err.stack);
|
|
49
|
-
return { content: [], success: false, totalCount: 0, error: err.message };
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
async queryAgent(args) {
|
|
53
|
-
try {
|
|
54
|
-
const platform = args.platform ?? 'mcp';
|
|
55
|
-
await preEnsureThread(args.threadId, platform);
|
|
56
|
-
const onTaskId = args.onTaskId;
|
|
57
|
-
let taskStartHandler;
|
|
58
|
-
if (onTaskId) {
|
|
59
|
-
taskStartHandler = (ev) => onTaskId(ev.traceId);
|
|
60
|
-
crewx.once('task:start', taskStartHandler);
|
|
61
|
-
}
|
|
62
|
-
const result = await crewx.query(`@${args.agentId}`, args.query, {
|
|
63
|
-
provider: args.provider,
|
|
64
|
-
model: args.model,
|
|
65
|
-
context: args.context,
|
|
66
|
-
threadId: args.threadId,
|
|
67
|
-
metadata: args.metadata,
|
|
68
|
-
platform,
|
|
69
|
-
cwd: (0, workspace_context_store_js_1.getWorkspacePath)(),
|
|
70
|
-
});
|
|
71
|
-
return {
|
|
72
|
-
content: [{ type: 'text', text: result.data }],
|
|
73
|
-
success: result.ok,
|
|
74
|
-
agent: args.agentId,
|
|
75
|
-
provider: args.provider,
|
|
76
|
-
query: args.query,
|
|
77
|
-
response: result.data,
|
|
78
|
-
taskId: result.meta?.taskId,
|
|
79
|
-
...(result.ok ? {} : { isError: true, error: result.error?.message }),
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
logger.error(`queryAgent error [agent=${args.agentId}]: ${err.message}`, err.stack);
|
|
84
|
-
return { content: [], success: false, isError: true, error: err.message };
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
async executeAgent(args) {
|
|
88
|
-
const { agentId, task, metadata } = args;
|
|
89
|
-
// threadId sibling takes priority; fall back to legacy metadata.thread for backward compat
|
|
90
|
-
const threadId = args.threadId ?? metadata?.['thread'];
|
|
91
|
-
logger.log(`[execute:${agentId}] starting (thread=${threadId ?? 'none'}) via shared Crewx`);
|
|
92
|
-
const platform = args.platform ?? 'mcp';
|
|
93
|
-
await preEnsureThread(threadId, platform);
|
|
94
|
-
const onTaskId = args.onTaskId;
|
|
95
|
-
if (onTaskId) {
|
|
96
|
-
crewx.once('task:start', (ev) => onTaskId(ev.traceId));
|
|
97
|
-
}
|
|
98
|
-
// Fire-and-forget: return immediately, task runs in background.
|
|
99
|
-
// Never close the shared Crewx instance — CrewxModule owns its lifecycle.
|
|
100
|
-
crewx
|
|
101
|
-
.execute(`@${agentId}`, task, {
|
|
102
|
-
provider: args.provider,
|
|
103
|
-
model: args.model,
|
|
104
|
-
context: args.context,
|
|
105
|
-
threadId,
|
|
106
|
-
metadata: args.metadata,
|
|
107
|
-
platform,
|
|
108
|
-
})
|
|
109
|
-
.then((r) => logger.log(`[execute:${agentId}] done (ok=${r.ok})`))
|
|
110
|
-
.catch((e) => logger.error(`[execute:${agentId}] error: ${e.message}`, e.stack));
|
|
111
|
-
return {
|
|
112
|
-
content: [{ type: 'text', text: 'Task started' }],
|
|
113
|
-
success: true,
|
|
114
|
-
agent: agentId,
|
|
115
|
-
taskId: threadId,
|
|
116
|
-
};
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
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.McpAuthGuard = void 0;
|
|
16
|
-
const common_1 = require("@nestjs/common");
|
|
17
|
-
const mcp_constants_js_1 = require("./mcp.constants.js");
|
|
18
|
-
let McpAuthGuard = class McpAuthGuard {
|
|
19
|
-
tokenInfo;
|
|
20
|
-
constructor(tokenInfo) {
|
|
21
|
-
this.tokenInfo = tokenInfo;
|
|
22
|
-
}
|
|
23
|
-
canActivate(context) {
|
|
24
|
-
const request = context.switchToHttp().getRequest();
|
|
25
|
-
// Extract token: Authorization header takes priority over query parameter
|
|
26
|
-
const bearerToken = this.extractTokenFromHeader(request)
|
|
27
|
-
?? this.extractTokenFromQuery(request);
|
|
28
|
-
if (!bearerToken) {
|
|
29
|
-
throw new common_1.UnauthorizedException('Missing authentication token');
|
|
30
|
-
}
|
|
31
|
-
if (bearerToken !== this.tokenInfo.token) {
|
|
32
|
-
throw new common_1.UnauthorizedException('Invalid bearer token');
|
|
33
|
-
}
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
extractTokenFromHeader(request) {
|
|
37
|
-
const authHeader = request.headers['authorization'] || request.headers['Authorization'];
|
|
38
|
-
if (!authHeader || typeof authHeader !== 'string') {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
const prefix = 'Bearer ';
|
|
42
|
-
if (!authHeader.startsWith(prefix)) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
const token = authHeader.slice(prefix.length).trim();
|
|
46
|
-
return token || null;
|
|
47
|
-
}
|
|
48
|
-
extractTokenFromQuery(request) {
|
|
49
|
-
const token = request.query['token'];
|
|
50
|
-
if (typeof token === 'string' && token.length > 0) {
|
|
51
|
-
return token;
|
|
52
|
-
}
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
exports.McpAuthGuard = McpAuthGuard;
|
|
57
|
-
exports.McpAuthGuard = McpAuthGuard = __decorate([
|
|
58
|
-
(0, common_1.Injectable)(),
|
|
59
|
-
__param(0, (0, common_1.Inject)(mcp_constants_js_1.MCP_TOKEN)),
|
|
60
|
-
__metadata("design:paramtypes", [Object])
|
|
61
|
-
], McpAuthGuard);
|
|
@@ -1,125 +0,0 @@
|
|
|
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
|
-
var McpController_1;
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.McpController = void 0;
|
|
17
|
-
const common_1 = require("@nestjs/common");
|
|
18
|
-
const mcp_service_js_1 = require("./mcp.service.js");
|
|
19
|
-
const mcp_auth_guard_js_1 = require("./mcp-auth.guard.js");
|
|
20
|
-
const public_decorator_js_1 = require("../auth/decorators/public.decorator.js");
|
|
21
|
-
const MCP_SESSION_HEADER = 'mcp-session-id';
|
|
22
|
-
let McpController = McpController_1 = class McpController {
|
|
23
|
-
mcpService;
|
|
24
|
-
logger = new common_1.Logger(McpController_1.name);
|
|
25
|
-
constructor(mcpService) {
|
|
26
|
-
this.mcpService = mcpService;
|
|
27
|
-
}
|
|
28
|
-
async handleMcp(body, sessionId, clientType, res) {
|
|
29
|
-
this.logger.debug(`MCP request [session=${sessionId ?? 'none'}]: ${JSON.stringify(body)}`);
|
|
30
|
-
// JSON-RPC response from extension (has result or error, no method)
|
|
31
|
-
// Must be checked BEFORE validateRequest — responses have no method field
|
|
32
|
-
if (!body.method && body.id && ('result' in body || 'error' in body)) {
|
|
33
|
-
if (!sessionId) {
|
|
34
|
-
res.status(400).json({ error: 'Missing Mcp-Session-Id for tool call result' });
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
const handled = this.mcpService.handleToolCallResult(sessionId, body);
|
|
38
|
-
res.status(handled ? 204 : 404).send();
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
// Validate JSON-RPC structure
|
|
42
|
-
const validationError = this.mcpService.validateRequest(body);
|
|
43
|
-
if (validationError) {
|
|
44
|
-
this.logger.warn(`Invalid JSON-RPC request: ${validationError.error?.message}`);
|
|
45
|
-
res.status(200).json(validationError);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const result = await this.mcpService.handleRequest(body, sessionId, clientType);
|
|
49
|
-
// Notifications return null
|
|
50
|
-
if (result === null) {
|
|
51
|
-
this.logger.debug(`Notification processed: ${body.method}`);
|
|
52
|
-
res.status(204).send();
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
// initialize: set Mcp-Session-Id header, strip internal _sessionId
|
|
56
|
-
if (body.method === 'initialize' && result._sessionId) {
|
|
57
|
-
const { _sessionId, ...jsonRpcResult } = result;
|
|
58
|
-
res.setHeader('Mcp-Session-Id', _sessionId);
|
|
59
|
-
this.logger.debug(`MCP initialize → session: ${_sessionId}`);
|
|
60
|
-
res.status(200).json(jsonRpcResult);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
this.logger.debug(`MCP response: ${JSON.stringify(result)}`);
|
|
64
|
-
res.status(200).json(result);
|
|
65
|
-
}
|
|
66
|
-
handleSse(sessionId, accept, res) {
|
|
67
|
-
if (!accept?.includes('text/event-stream')) {
|
|
68
|
-
res.status(400).json({ error: 'Accept header must include text/event-stream' });
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
if (!sessionId) {
|
|
72
|
-
res.status(400).json({ error: 'Missing Mcp-Session-Id header' });
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const store = this.mcpService.getBrowserSessionStore();
|
|
76
|
-
const session = store.get(sessionId);
|
|
77
|
-
if (!session) {
|
|
78
|
-
res.status(404).json({ error: 'Session not found' });
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
this.logger.log(`SSE connection for session: ${sessionId}`);
|
|
82
|
-
store.bindSse(sessionId, res);
|
|
83
|
-
}
|
|
84
|
-
health() {
|
|
85
|
-
return {
|
|
86
|
-
status: 'ok',
|
|
87
|
-
timestamp: new Date().toISOString(),
|
|
88
|
-
server: 'crewx-ui',
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
exports.McpController = McpController;
|
|
93
|
-
__decorate([
|
|
94
|
-
(0, common_1.Post)('mcp'),
|
|
95
|
-
(0, common_1.HttpCode)(200),
|
|
96
|
-
(0, common_1.UseGuards)(mcp_auth_guard_js_1.McpAuthGuard),
|
|
97
|
-
__param(0, (0, common_1.Body)()),
|
|
98
|
-
__param(1, (0, common_1.Headers)(MCP_SESSION_HEADER)),
|
|
99
|
-
__param(2, (0, common_1.Headers)('x-client-type')),
|
|
100
|
-
__param(3, (0, common_1.Res)()),
|
|
101
|
-
__metadata("design:type", Function),
|
|
102
|
-
__metadata("design:paramtypes", [Object, Object, Object, Object]),
|
|
103
|
-
__metadata("design:returntype", Promise)
|
|
104
|
-
], McpController.prototype, "handleMcp", null);
|
|
105
|
-
__decorate([
|
|
106
|
-
(0, common_1.Get)('mcp'),
|
|
107
|
-
(0, common_1.UseGuards)(mcp_auth_guard_js_1.McpAuthGuard),
|
|
108
|
-
__param(0, (0, common_1.Headers)(MCP_SESSION_HEADER)),
|
|
109
|
-
__param(1, (0, common_1.Headers)('accept')),
|
|
110
|
-
__param(2, (0, common_1.Res)()),
|
|
111
|
-
__metadata("design:type", Function),
|
|
112
|
-
__metadata("design:paramtypes", [Object, Object, Object]),
|
|
113
|
-
__metadata("design:returntype", void 0)
|
|
114
|
-
], McpController.prototype, "handleSse", null);
|
|
115
|
-
__decorate([
|
|
116
|
-
(0, common_1.Get)('mcp/health'),
|
|
117
|
-
__metadata("design:type", Function),
|
|
118
|
-
__metadata("design:paramtypes", []),
|
|
119
|
-
__metadata("design:returntype", void 0)
|
|
120
|
-
], McpController.prototype, "health", null);
|
|
121
|
-
exports.McpController = McpController = McpController_1 = __decorate([
|
|
122
|
-
(0, public_decorator_js_1.Public)(),
|
|
123
|
-
(0, common_1.Controller)(),
|
|
124
|
-
__metadata("design:paramtypes", [mcp_service_js_1.McpService])
|
|
125
|
-
], McpController);
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// JSON-RPC 2.0 + MCP protocol types
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.JSON_RPC_ERRORS = void 0;
|
|
5
|
-
// Standard JSON-RPC error codes
|
|
6
|
-
exports.JSON_RPC_ERRORS = {
|
|
7
|
-
PARSE_ERROR: { code: -32700, message: 'Parse error' },
|
|
8
|
-
INVALID_REQUEST: { code: -32600, message: 'Invalid Request' },
|
|
9
|
-
METHOD_NOT_FOUND: { code: -32601, message: 'Method not found' },
|
|
10
|
-
INVALID_PARAMS: { code: -32602, message: 'Invalid params' },
|
|
11
|
-
INTERNAL_ERROR: { code: -32603, message: 'Internal error' },
|
|
12
|
-
};
|
|
@@ -1,49 +0,0 @@
|
|
|
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.McpModule = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const config_1 = require("@nestjs/config");
|
|
12
|
-
const crypto_1 = require("crypto");
|
|
13
|
-
const mcp_controller_js_1 = require("./mcp.controller.js");
|
|
14
|
-
const mcp_service_js_1 = require("./mcp.service.js");
|
|
15
|
-
const browser_session_store_js_1 = require("./browser-session.store.js");
|
|
16
|
-
const tool_router_service_js_1 = require("./tool-router.service.js");
|
|
17
|
-
const mcp_constants_js_1 = require("./mcp.constants.js");
|
|
18
|
-
const crewx_module_js_1 = require("../../modules/crewx.module.js");
|
|
19
|
-
const repository_1 = require("@crewx/sdk/repository");
|
|
20
|
-
let McpModule = class McpModule {
|
|
21
|
-
};
|
|
22
|
-
exports.McpModule = McpModule;
|
|
23
|
-
exports.McpModule = McpModule = __decorate([
|
|
24
|
-
(0, common_1.Module)({
|
|
25
|
-
imports: [crewx_module_js_1.CrewxModule],
|
|
26
|
-
controllers: [mcp_controller_js_1.McpController],
|
|
27
|
-
providers: [
|
|
28
|
-
mcp_service_js_1.McpService,
|
|
29
|
-
browser_session_store_js_1.BrowserSessionStore,
|
|
30
|
-
tool_router_service_js_1.ToolRouterService,
|
|
31
|
-
{
|
|
32
|
-
provide: mcp_constants_js_1.MCP_TOKEN,
|
|
33
|
-
useFactory: (configService) => {
|
|
34
|
-
const envToken = configService.get('MCP_BEARER_TOKEN');
|
|
35
|
-
if (envToken) {
|
|
36
|
-
return { token: envToken, source: 'env' };
|
|
37
|
-
}
|
|
38
|
-
return { token: (0, crypto_1.randomUUID)(), source: 'generated' };
|
|
39
|
-
},
|
|
40
|
-
inject: [config_1.ConfigService],
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
provide: repository_1.ToolCallRepository,
|
|
44
|
-
useFactory: () => new repository_1.ToolCallRepository(),
|
|
45
|
-
},
|
|
46
|
-
],
|
|
47
|
-
exports: [mcp_constants_js_1.MCP_TOKEN, browser_session_store_js_1.BrowserSessionStore],
|
|
48
|
-
})
|
|
49
|
-
], McpModule);
|