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
package/dist-server/main.js
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
require("reflect-metadata");
|
|
40
|
-
const core_1 = require("@nestjs/core");
|
|
41
|
-
const common_1 = require("@nestjs/common");
|
|
42
|
-
const swagger_1 = require("@nestjs/swagger");
|
|
43
|
-
const express_1 = __importDefault(require("express"));
|
|
44
|
-
const cookie_parser_1 = __importDefault(require("cookie-parser"));
|
|
45
|
-
const fs_1 = __importDefault(require("fs"));
|
|
46
|
-
const path_1 = require("path");
|
|
47
|
-
const sdk_1 = require("@crewx/sdk");
|
|
48
|
-
const app_module_js_1 = require("./app.module.js");
|
|
49
|
-
const tls_js_1 = require("./bootstrap/tls.js");
|
|
50
|
-
const cors_js_1 = require("./common/cors.js");
|
|
51
|
-
const mcp_constants_js_1 = require("./domain/mcp/mcp.constants.js");
|
|
52
|
-
const auth_constants_js_1 = require("./domain/auth/auth.constants.js");
|
|
53
|
-
const ip_utils_js_1 = require("./domain/auth/utils/ip.utils.js");
|
|
54
|
-
const project_repository_js_1 = require("./repository/project.repository.js");
|
|
55
|
-
async function bootstrap() {
|
|
56
|
-
const httpsOptions = await (0, tls_js_1.resolveHttpsOptions)();
|
|
57
|
-
// RT-6: bodyParser disabled to preserve raw body for adapter webhook signature verification.
|
|
58
|
-
// Adapter routes (/adapters/*) need raw Buffer body for signature verification.
|
|
59
|
-
const app = await core_1.NestFactory.create(app_module_js_1.AppModule, {
|
|
60
|
-
bodyParser: false,
|
|
61
|
-
...(httpsOptions ? { httpsOptions } : {}),
|
|
62
|
-
});
|
|
63
|
-
// trust proxy — set before other middleware so req.ip is correct behind nginx/Caddy
|
|
64
|
-
if (process.env.TRUST_PROXY) {
|
|
65
|
-
app.set('trust proxy', process.env.TRUST_PROXY);
|
|
66
|
-
}
|
|
67
|
-
// Cookie parser must come before Guards that read req.cookies
|
|
68
|
-
app.use((0, cookie_parser_1.default)());
|
|
69
|
-
// Conditional JSON body parser: skip for /adapters/* (raw body needed for webhook signatures),
|
|
70
|
-
// apply express.json() for all other routes so DTOs receive parsed bodies.
|
|
71
|
-
app.use((req, res, next) => {
|
|
72
|
-
if (req.url.startsWith('/adapters/')) {
|
|
73
|
-
return next();
|
|
74
|
-
}
|
|
75
|
-
return express_1.default.json({ limit: '5mb' })(req, res, next);
|
|
76
|
-
});
|
|
77
|
-
// CORS: dev origin + chrome-extension://
|
|
78
|
-
const allowedExtensionIds = (process.env.CHROME_EXTENSION_IDS ?? '').split(',').filter(Boolean);
|
|
79
|
-
// TODO: make CHROME_EXTENSION_IDS required in production (reject wildcard chrome-extension:// origins)
|
|
80
|
-
if (allowedExtensionIds.length === 0 && process.env.NODE_ENV === 'production') {
|
|
81
|
-
console.warn('⚠️ CHROME_EXTENSION_IDS is not set — all chrome-extension:// origins are allowed. ' +
|
|
82
|
-
'Set CHROME_EXTENSION_IDS to restrict CORS in production.');
|
|
83
|
-
}
|
|
84
|
-
app.enableCors({
|
|
85
|
-
origin: (origin, callback) => {
|
|
86
|
-
callback(null, (0, cors_js_1.isAllowedOrigin)(origin, allowedExtensionIds));
|
|
87
|
-
},
|
|
88
|
-
credentials: true,
|
|
89
|
-
allowedHeaders: ['Content-Type', 'Authorization', 'Mcp-Session-Id', 'Accept'],
|
|
90
|
-
exposedHeaders: ['Mcp-Session-Id'],
|
|
91
|
-
});
|
|
92
|
-
// Enable class-validator DTO validation
|
|
93
|
-
app.useGlobalPipes(new common_1.ValidationPipe({ whitelist: true, transform: true }));
|
|
94
|
-
// Global prefix for API routes (exclude MCP and auth login/logout — they live at /mcp, /auth/*)
|
|
95
|
-
app.setGlobalPrefix('api/v1', {
|
|
96
|
-
exclude: ['mcp', 'mcp/health', 'auth/login', 'auth/logout'],
|
|
97
|
-
});
|
|
98
|
-
// Swagger documentation setup
|
|
99
|
-
const swaggerConfig = new swagger_1.DocumentBuilder()
|
|
100
|
-
.setTitle('CrewX UI API')
|
|
101
|
-
.setDescription('CrewX UI backend REST API')
|
|
102
|
-
.setVersion('1.0')
|
|
103
|
-
.build();
|
|
104
|
-
const document = swagger_1.SwaggerModule.createDocument(app, swaggerConfig);
|
|
105
|
-
swagger_1.SwaggerModule.setup('api/docs', app, document);
|
|
106
|
-
// Serve static files in production mode (Electron or npm package)
|
|
107
|
-
// In web dev mode, Vite serves the UI directly
|
|
108
|
-
const serveStatic = process.env.ELECTRON_MODE === 'true' || process.env.SERVE_STATIC === 'true';
|
|
109
|
-
if (serveStatic) {
|
|
110
|
-
const staticCandidates = [
|
|
111
|
-
(0, path_1.join)(__dirname, '..', '..', '..', 'dist'), // npm global: dist-server/src/server/ → root/dist
|
|
112
|
-
(0, path_1.join)(__dirname, '..', 'dist'), // legacy flat build
|
|
113
|
-
(0, path_1.join)(process.cwd(), 'dist'), // cwd fallback (dev)
|
|
114
|
-
];
|
|
115
|
-
const staticPath = staticCandidates.find((candidate) => fs_1.default.existsSync(candidate)) ?? staticCandidates[0];
|
|
116
|
-
app.useStaticAssets(staticPath);
|
|
117
|
-
app.setBaseViewsDir(staticPath);
|
|
118
|
-
// Fallback to index.html for SPA routing.
|
|
119
|
-
// Skip API routes, MCP, auth, and any path that looks like a static asset
|
|
120
|
-
// (has a file extension) to avoid sending HTML with wrong MIME type for
|
|
121
|
-
// JS/CSS/image requests that the static middleware couldn't resolve.
|
|
122
|
-
app.use((req, res, next) => {
|
|
123
|
-
const isApiRoute = req.path.startsWith('/api/') ||
|
|
124
|
-
req.path.startsWith('/mcp') ||
|
|
125
|
-
req.path.startsWith('/auth');
|
|
126
|
-
const hasFileExtension = /\.[^/]+$/.test(req.path);
|
|
127
|
-
if (!isApiRoute && !hasFileExtension) {
|
|
128
|
-
res.sendFile('index.html', { root: staticPath });
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
next();
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
// Orphan workspace cleanup: soft-delete workspaces whose path no longer contains crewx.yaml
|
|
136
|
-
const projectRepo = app.get(project_repository_js_1.ProjectRepository);
|
|
137
|
-
try {
|
|
138
|
-
const cleanupStart = Date.now();
|
|
139
|
-
const cleanupResult = projectRepo.cleanupOrphanWorkspaces();
|
|
140
|
-
console.log(`Orphan workspace cleanup: checked ${cleanupResult.checked}, softDeleted ${cleanupResult.softDeleted} (${Date.now() - cleanupStart}ms)`);
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
// Non-fatal: DB may not exist yet on first run
|
|
144
|
-
}
|
|
145
|
-
// CWD auto-register: if crewx.yaml/yml exists in CWD, ensure workspace is in DB
|
|
146
|
-
try {
|
|
147
|
-
const cwd = process.env.CREWX_WORKSPACE || process.cwd();
|
|
148
|
-
const hasYaml = fs_1.default.existsSync((0, path_1.join)(cwd, 'crewx.yaml')) ||
|
|
149
|
-
fs_1.default.existsSync((0, path_1.join)(cwd, 'crewx.yml'));
|
|
150
|
-
if (hasYaml) {
|
|
151
|
-
projectRepo.registerWorkspace(cwd);
|
|
152
|
-
const wsId = (0, sdk_1.hashWorkspaceId)(cwd);
|
|
153
|
-
const row = projectRepo.findById(wsId);
|
|
154
|
-
if (row && row.is_active === 0) {
|
|
155
|
-
projectRepo.update(wsId, ['is_active = ?', 'updated_at = ?'], [1, new Date().toISOString()]);
|
|
156
|
-
console.log(`CWD workspace re-activated: ${cwd}`);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
console.log(`CWD workspace auto-registered: ${cwd}`);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
catch (e) {
|
|
164
|
-
console.warn('CWD auto-register failed (non-fatal):', e);
|
|
165
|
-
}
|
|
166
|
-
app.enableShutdownHooks();
|
|
167
|
-
const port = process.env.PORT || 8150;
|
|
168
|
-
await app.listen(port);
|
|
169
|
-
// Get actual port (important when PORT=0 for random port)
|
|
170
|
-
const server = app.getHttpServer();
|
|
171
|
-
const address = server.address();
|
|
172
|
-
const actualPort = typeof address === 'object' ? address?.port : port;
|
|
173
|
-
const protocol = httpsOptions ? 'https' : 'http';
|
|
174
|
-
console.log(`🚀 CrewX UI Server running on ${protocol}://localhost:${actualPort}`);
|
|
175
|
-
console.log(`📖 Swagger UI: ${protocol}://localhost:${actualPort}/api/docs`);
|
|
176
|
-
// Print MCP token info and clickable URLs
|
|
177
|
-
const tokenInfo = app.get(mcp_constants_js_1.MCP_TOKEN);
|
|
178
|
-
const tokenSource = tokenInfo.source === 'env' ? 'MCP_BEARER_TOKEN env' : 'auto-generated';
|
|
179
|
-
console.log(`🔑 MCP Bearer Token (${tokenSource}): ${tokenInfo.token}`);
|
|
180
|
-
// Print web UI auth credentials (mask password, never expose env-set passwords)
|
|
181
|
-
const authCreds = app.get(auth_constants_js_1.AUTH_CREDENTIALS);
|
|
182
|
-
if (authCreds.source === 'env') {
|
|
183
|
-
console.log(`🔐 Web UI auth: ${authCreds.username} / [set by AUTH_PASSWORD env] (source: env)`);
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
const masked = (0, ip_utils_js_1.maskPassword)(authCreds.password);
|
|
187
|
-
console.log(`🔐 Web UI auth: ${authCreds.username} / ${masked} (source: ${authCreds.source})`);
|
|
188
|
-
console.log(` Set AUTH_USERNAME / AUTH_PASSWORD in .env to customize.`);
|
|
189
|
-
}
|
|
190
|
-
console.log(`🏥 MCP Health: ${protocol}://localhost:${actualPort}/mcp/health?token=${tokenInfo.token}`);
|
|
191
|
-
console.log(`📡 MCP Endpoint: POST ${protocol}://localhost:${actualPort}/mcp`);
|
|
192
|
-
// Auto-open browser when CREWX_OPEN_BROWSER=1 (set by bin/crewx.js for web-default route)
|
|
193
|
-
if (process.env.CREWX_OPEN_BROWSER === '1') {
|
|
194
|
-
try {
|
|
195
|
-
const open = (await Promise.resolve().then(() => __importStar(require('open')))).default;
|
|
196
|
-
await open(`${protocol}://localhost:${actualPort}`);
|
|
197
|
-
console.log(`🌐 Browser opened: ${protocol}://localhost:${actualPort}`);
|
|
198
|
-
}
|
|
199
|
-
catch {
|
|
200
|
-
console.warn('⚠️ Could not open browser automatically. Please open manually.');
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
bootstrap();
|
|
@@ -1,75 +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.CrewxPoolService = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const path_1 = require("path");
|
|
12
|
-
const fs_1 = require("fs");
|
|
13
|
-
const crewx_server_js_1 = require("../bootstrap/crewx-server.js");
|
|
14
|
-
const workspace_context_store_js_1 = require("../common/workspace-context.store.js");
|
|
15
|
-
/**
|
|
16
|
-
* CrewxPoolService — per-workspace Crewx instance pool.
|
|
17
|
-
*
|
|
18
|
-
* Resolution order for each request:
|
|
19
|
-
* 1. current request workspace path → crewx.yaml / crewx.yml candidate
|
|
20
|
-
* 2. CREWX_CONFIG env var (fallback when no workspace yaml found)
|
|
21
|
-
*
|
|
22
|
-
* Same workspace path → same Crewx instance (Map cache).
|
|
23
|
-
* All instances are closed on application shutdown.
|
|
24
|
-
*
|
|
25
|
-
* Lifecycle: NestJS calls onApplicationShutdown() automatically.
|
|
26
|
-
* Services must NEVER call crewx.close() themselves.
|
|
27
|
-
*/
|
|
28
|
-
let CrewxPoolService = class CrewxPoolService {
|
|
29
|
-
pool = new Map();
|
|
30
|
-
/**
|
|
31
|
-
* Return the Crewx instance for the current request's workspace.
|
|
32
|
-
* Uses AsyncLocalStorage-backed getWorkspacePath().
|
|
33
|
-
*/
|
|
34
|
-
getForCurrentRequest() {
|
|
35
|
-
const configPath = process.env.CREWX_CONFIG;
|
|
36
|
-
if (configPath) {
|
|
37
|
-
return this.getOrCreate('__crewx_config__', configPath);
|
|
38
|
-
}
|
|
39
|
-
return this.getForPath((0, workspace_context_store_js_1.getWorkspacePath)());
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Return the Crewx instance for an explicit workspace path.
|
|
43
|
-
* Workspace yaml takes precedence; CREWX_CONFIG is used as fallback only.
|
|
44
|
-
*/
|
|
45
|
-
getForPath(workspacePath) {
|
|
46
|
-
const candidates = [
|
|
47
|
-
(0, path_1.join)(workspacePath, 'crewx.yaml'),
|
|
48
|
-
(0, path_1.join)(workspacePath, 'crewx.yml'),
|
|
49
|
-
];
|
|
50
|
-
const yamlPath = candidates.find((p) => (0, fs_1.existsSync)(p))
|
|
51
|
-
?? process.env.CREWX_CONFIG;
|
|
52
|
-
return this.getOrCreate(workspacePath, yamlPath);
|
|
53
|
-
}
|
|
54
|
-
invalidate(workspacePath) {
|
|
55
|
-
const key = workspacePath;
|
|
56
|
-
const existing = this.pool.get(key);
|
|
57
|
-
if (existing) {
|
|
58
|
-
existing.then(c => c.close()).catch(() => { });
|
|
59
|
-
this.pool.delete(key);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
getOrCreate(key, configPath) {
|
|
63
|
-
if (!this.pool.has(key)) {
|
|
64
|
-
this.pool.set(key, (0, crewx_server_js_1.createServerCrewx)(configPath));
|
|
65
|
-
}
|
|
66
|
-
return this.pool.get(key);
|
|
67
|
-
}
|
|
68
|
-
async onApplicationShutdown() {
|
|
69
|
-
await Promise.all([...this.pool.values()].map((p) => p.then((c) => c.close()).catch(() => { })));
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
exports.CrewxPoolService = CrewxPoolService;
|
|
73
|
-
exports.CrewxPoolService = CrewxPoolService = __decorate([
|
|
74
|
-
(0, common_1.Injectable)()
|
|
75
|
-
], CrewxPoolService);
|
|
@@ -1,47 +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.CrewxModule = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const sdk_1 = require("@crewx/sdk");
|
|
12
|
-
const crewx_pool_service_js_1 = require("./crewx-pool.service.js");
|
|
13
|
-
/**
|
|
14
|
-
* CrewxModule — NestJS DI providers for the Crewx facade.
|
|
15
|
-
*
|
|
16
|
-
* Provides:
|
|
17
|
-
* - CrewxPoolService: per-workspace Crewx instance pool (MSG/TSK/MCP use this)
|
|
18
|
-
* - Crewx token: boot-time default workspace instance for legacy consumers
|
|
19
|
-
*
|
|
20
|
-
* Resolution order (delegated to CrewxPoolService):
|
|
21
|
-
* 1. CREWX_CONFIG env var (full file path) → single shared instance
|
|
22
|
-
* 2. CREWX_WORKSPACE env var + crewx.yaml
|
|
23
|
-
* 3. process.cwd() + crewx.yaml
|
|
24
|
-
* 4. process.cwd() + crewx.yml
|
|
25
|
-
*
|
|
26
|
-
* Lifecycle: CrewxPoolService implements OnApplicationShutdown and closes
|
|
27
|
-
* all pooled instances automatically. Do NOT call crewx.close() from call sites.
|
|
28
|
-
*/
|
|
29
|
-
let CrewxModule = class CrewxModule {
|
|
30
|
-
};
|
|
31
|
-
exports.CrewxModule = CrewxModule;
|
|
32
|
-
exports.CrewxModule = CrewxModule = __decorate([
|
|
33
|
-
(0, common_1.Module)({
|
|
34
|
-
providers: [
|
|
35
|
-
crewx_pool_service_js_1.CrewxPoolService,
|
|
36
|
-
{
|
|
37
|
-
provide: sdk_1.Crewx,
|
|
38
|
-
useFactory: (pool) => {
|
|
39
|
-
const base = process.env.CREWX_WORKSPACE || process.cwd();
|
|
40
|
-
return pool.getForPath(base);
|
|
41
|
-
},
|
|
42
|
-
inject: [crewx_pool_service_js_1.CrewxPoolService],
|
|
43
|
-
},
|
|
44
|
-
],
|
|
45
|
-
exports: [sdk_1.Crewx, crewx_pool_service_js_1.CrewxPoolService],
|
|
46
|
-
})
|
|
47
|
-
], CrewxModule);
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BaseSqliteRepository = exports.runMigrations = exports.openDrizzleDb = exports.WorkspaceRepository = exports.RepositoryError = void 0;
|
|
4
|
-
const repository_1 = require("@crewx/sdk/repository");
|
|
5
|
-
var repository_2 = require("@crewx/sdk/repository");
|
|
6
|
-
Object.defineProperty(exports, "RepositoryError", { enumerable: true, get: function () { return repository_2.RepositoryError; } });
|
|
7
|
-
Object.defineProperty(exports, "WorkspaceRepository", { enumerable: true, get: function () { return repository_2.WorkspaceRepository; } });
|
|
8
|
-
Object.defineProperty(exports, "openDrizzleDb", { enumerable: true, get: function () { return repository_2.openDrizzleDb; } });
|
|
9
|
-
Object.defineProperty(exports, "runMigrations", { enumerable: true, get: function () { return repository_2.runMigrations; } });
|
|
10
|
-
/** @deprecated WI #6에서 제거 예정. 신규 코드는 @crewx/sdk/repository 직접 import */
|
|
11
|
-
class BaseSqliteRepository extends repository_1.BaseSqliteRepository {
|
|
12
|
-
/** @deprecated The db argument is kept only for legacy callback signatures. */
|
|
13
|
-
withDb(fn, options) {
|
|
14
|
-
void options;
|
|
15
|
-
return fn({});
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
exports.BaseSqliteRepository = BaseSqliteRepository;
|
|
@@ -1,99 +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.BoxRepository = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const repository_1 = require("@crewx/sdk/repository");
|
|
12
|
-
const repository_2 = require("@crewx/sdk/repository");
|
|
13
|
-
const repository_3 = require("@crewx/sdk/repository");
|
|
14
|
-
const base_sqlite_repository_js_1 = require("./base-sqlite.repository.js");
|
|
15
|
-
let BoxRepository = class BoxRepository extends base_sqlite_repository_js_1.BaseSqliteRepository {
|
|
16
|
-
sdkBox = new repository_1.ThreadBoxRepository();
|
|
17
|
-
sdkTask = new repository_2.TaskRepository();
|
|
18
|
-
/** List all boxes for a thread, ordered by seq ASC. */
|
|
19
|
-
findBoxesByThread(threadId, _project) {
|
|
20
|
-
try {
|
|
21
|
-
return this.sdkBox.findByThreadId(threadId);
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
if (error instanceof repository_3.RepositoryError && error.code === 'NOT_FOUND') {
|
|
25
|
-
throw new common_1.NotFoundException(`Thread not found: ${threadId}`);
|
|
26
|
-
}
|
|
27
|
-
throw error;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/** Get a single box by id and threadId. */
|
|
31
|
-
findBoxById(threadId, boxId, _project) {
|
|
32
|
-
try {
|
|
33
|
-
const row = this.sdkBox.findById(threadId, boxId);
|
|
34
|
-
if (!row) {
|
|
35
|
-
throw new common_1.NotFoundException(`Box not found: ${boxId} in thread: ${threadId}`);
|
|
36
|
-
}
|
|
37
|
-
return row;
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
if (error instanceof common_1.NotFoundException)
|
|
41
|
-
throw error;
|
|
42
|
-
if (error instanceof repository_3.RepositoryError && error.code === 'NOT_FOUND') {
|
|
43
|
-
throw new common_1.NotFoundException(`Box not found: ${boxId} in thread: ${threadId}`);
|
|
44
|
-
}
|
|
45
|
-
throw error;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/** Insert a new box and return the inserted row. */
|
|
49
|
-
insertBox(threadId, data, _project) {
|
|
50
|
-
try {
|
|
51
|
-
return this.sdkBox.insert({
|
|
52
|
-
id: data.id,
|
|
53
|
-
threadId,
|
|
54
|
-
thread_id: threadId,
|
|
55
|
-
seq: data.seq,
|
|
56
|
-
first_task_id: data.firstTaskId,
|
|
57
|
-
mid_task_id: data.midTaskId,
|
|
58
|
-
last_task_id: data.lastTaskId,
|
|
59
|
-
task_count: data.taskCount,
|
|
60
|
-
summary: data.summary,
|
|
61
|
-
source_tokens: data.sourceTokens,
|
|
62
|
-
summary_tokens: data.summaryTokens,
|
|
63
|
-
created_at: data.createdAt,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
if (error instanceof common_1.NotFoundException || error instanceof common_1.ConflictException)
|
|
68
|
-
throw error;
|
|
69
|
-
if (error instanceof repository_3.RepositoryError) {
|
|
70
|
-
if (error.code === 'NOT_FOUND') {
|
|
71
|
-
throw new common_1.NotFoundException(`Thread not found: ${threadId}`);
|
|
72
|
-
}
|
|
73
|
-
if (error.code === 'CONFLICT') {
|
|
74
|
-
throw new common_1.ConflictException(`Duplicate seq ${data.seq} for thread ${threadId}`);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
throw error;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/** Get task prompt preview (truncated). When workspaceId is provided, restricts to that workspace. */
|
|
81
|
-
getTaskPromptPreview(dbPath, taskId, maxLen, workspaceId) {
|
|
82
|
-
void dbPath; // SDK manages its own DB path
|
|
83
|
-
try {
|
|
84
|
-
const row = this.sdkTask.findTaskStatus(taskId, workspaceId);
|
|
85
|
-
if (!row || !row.prompt)
|
|
86
|
-
return '';
|
|
87
|
-
return row.prompt.length <= maxLen
|
|
88
|
-
? row.prompt
|
|
89
|
-
: row.prompt.slice(0, maxLen) + '...';
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
return '';
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
exports.BoxRepository = BoxRepository;
|
|
97
|
-
exports.BoxRepository = BoxRepository = __decorate([
|
|
98
|
-
(0, common_1.Injectable)()
|
|
99
|
-
], BoxRepository);
|
|
@@ -1,22 +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.MessageRepository = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const base_sqlite_repository_js_1 = require("./base-sqlite.repository.js");
|
|
12
|
-
/**
|
|
13
|
-
* MessageRepository — placeholder for future message-specific queries.
|
|
14
|
-
* Currently MessageService delegates to ThreadRepository for DB access.
|
|
15
|
-
* The UPSERT thread logic is in ThreadRepository.upsertThread().
|
|
16
|
-
*/
|
|
17
|
-
let MessageRepository = class MessageRepository extends base_sqlite_repository_js_1.BaseSqliteRepository {
|
|
18
|
-
};
|
|
19
|
-
exports.MessageRepository = MessageRepository;
|
|
20
|
-
exports.MessageRepository = MessageRepository = __decorate([
|
|
21
|
-
(0, common_1.Injectable)()
|
|
22
|
-
], MessageRepository);
|
|
@@ -1,51 +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.ProjectRepository = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const repository_1 = require("@crewx/sdk/repository");
|
|
12
|
-
let ProjectRepository = class ProjectRepository {
|
|
13
|
-
sdk = new repository_1.WorkspaceRepository();
|
|
14
|
-
listProjects(params) {
|
|
15
|
-
return this.sdk.listProjects(params);
|
|
16
|
-
}
|
|
17
|
-
findById(id) {
|
|
18
|
-
return this.sdk.findById(id);
|
|
19
|
-
}
|
|
20
|
-
findAgentsByProject(id) {
|
|
21
|
-
return this.sdk.findAgentsByProject(id);
|
|
22
|
-
}
|
|
23
|
-
findThreadsByProject(id, params) {
|
|
24
|
-
return this.sdk.findThreadsByProject(id, params);
|
|
25
|
-
}
|
|
26
|
-
findBySlug(slug) {
|
|
27
|
-
return this.sdk.findBySlug(slug);
|
|
28
|
-
}
|
|
29
|
-
slugExists(slug, excludeId) {
|
|
30
|
-
return this.sdk.slugExists(slug, excludeId);
|
|
31
|
-
}
|
|
32
|
-
insert(id, slug, name, repoPath) {
|
|
33
|
-
return this.sdk.insert(id, slug, name, repoPath);
|
|
34
|
-
}
|
|
35
|
-
update(id, updates, args) {
|
|
36
|
-
return this.sdk.update(id, updates, args);
|
|
37
|
-
}
|
|
38
|
-
registerWorkspace(workspacePath) {
|
|
39
|
-
return this.sdk.registerWorkspace(workspacePath);
|
|
40
|
-
}
|
|
41
|
-
cleanupOrphanWorkspaces() {
|
|
42
|
-
return this.sdk.cleanupOrphanWorkspaces();
|
|
43
|
-
}
|
|
44
|
-
delete(id) {
|
|
45
|
-
return this.sdk.delete(id);
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
exports.ProjectRepository = ProjectRepository;
|
|
49
|
-
exports.ProjectRepository = ProjectRepository = __decorate([
|
|
50
|
-
(0, common_1.Injectable)()
|
|
51
|
-
], ProjectRepository);
|
|
@@ -1,34 +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.RepositoryModule = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const thread_repository_js_1 = require("./thread.repository.js");
|
|
12
|
-
const task_repository_js_1 = require("./task.repository.js");
|
|
13
|
-
const message_repository_js_1 = require("./message.repository.js");
|
|
14
|
-
const box_repository_js_1 = require("./box.repository.js");
|
|
15
|
-
const project_repository_js_1 = require("./project.repository.js");
|
|
16
|
-
const request_log_repository_js_1 = require("./request-log.repository.js");
|
|
17
|
-
const repositories = [
|
|
18
|
-
thread_repository_js_1.ThreadRepository,
|
|
19
|
-
task_repository_js_1.TaskRepository,
|
|
20
|
-
message_repository_js_1.MessageRepository,
|
|
21
|
-
box_repository_js_1.BoxRepository,
|
|
22
|
-
project_repository_js_1.ProjectRepository,
|
|
23
|
-
request_log_repository_js_1.RequestLogRepository,
|
|
24
|
-
];
|
|
25
|
-
let RepositoryModule = class RepositoryModule {
|
|
26
|
-
};
|
|
27
|
-
exports.RepositoryModule = RepositoryModule;
|
|
28
|
-
exports.RepositoryModule = RepositoryModule = __decorate([
|
|
29
|
-
(0, common_1.Global)(),
|
|
30
|
-
(0, common_1.Module)({
|
|
31
|
-
providers: repositories,
|
|
32
|
-
exports: repositories,
|
|
33
|
-
})
|
|
34
|
-
], RepositoryModule);
|
|
@@ -1,96 +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 RequestLogRepository_1;
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.RequestLogRepository = void 0;
|
|
11
|
-
const common_1 = require("@nestjs/common");
|
|
12
|
-
const repository_1 = require("@crewx/sdk/repository");
|
|
13
|
-
const base_sqlite_repository_js_1 = require("./base-sqlite.repository.js");
|
|
14
|
-
const INSERT_SQL = `
|
|
15
|
-
INSERT INTO request_logs (
|
|
16
|
-
id, path, method, status_code, duration_ms,
|
|
17
|
-
ip, request_headers, response_headers, request_body, response_body,
|
|
18
|
-
query, user_id, project_id, partition_key, timestamp, metadata
|
|
19
|
-
) VALUES (
|
|
20
|
-
?, ?, ?, ?, ?,
|
|
21
|
-
?, ?, ?, ?, ?,
|
|
22
|
-
?, ?, ?, ?, ?, ?
|
|
23
|
-
)
|
|
24
|
-
`;
|
|
25
|
-
let RequestLogRepository = RequestLogRepository_1 = class RequestLogRepository extends base_sqlite_repository_js_1.BaseSqliteRepository {
|
|
26
|
-
sdk = new repository_1.RequestLogRepository();
|
|
27
|
-
logger = new common_1.Logger(RequestLogRepository_1.name);
|
|
28
|
-
/**
|
|
29
|
-
* Injected only by tests: when set, bypasses SDK and writes directly.
|
|
30
|
-
* @internal
|
|
31
|
-
*/
|
|
32
|
-
db = null;
|
|
33
|
-
/**
|
|
34
|
-
* Bulk insert request log entries.
|
|
35
|
-
* In production delegates to SDK; in tests uses the injected database.
|
|
36
|
-
*/
|
|
37
|
-
bulkInsert(entries) {
|
|
38
|
-
if (entries.length === 0)
|
|
39
|
-
return;
|
|
40
|
-
// Test path: use directly injected database
|
|
41
|
-
if (this.db !== null) {
|
|
42
|
-
try {
|
|
43
|
-
this.db.exec('BEGIN');
|
|
44
|
-
try {
|
|
45
|
-
for (const r of entries) {
|
|
46
|
-
this.db.run(INSERT_SQL, [
|
|
47
|
-
r.id, r.path, r.method, r.status_code, r.duration_ms,
|
|
48
|
-
r.ip ?? null, r.request_headers ?? null, r.response_headers ?? null,
|
|
49
|
-
r.request_body ?? null, r.response_body ?? null,
|
|
50
|
-
r.query ?? null, r.user_id ?? null, r.project_id ?? null,
|
|
51
|
-
r.partition_key, r.timestamp, r.metadata ?? null,
|
|
52
|
-
]);
|
|
53
|
-
}
|
|
54
|
-
this.db.exec('COMMIT');
|
|
55
|
-
}
|
|
56
|
-
catch (innerError) {
|
|
57
|
-
this.db.exec('ROLLBACK');
|
|
58
|
-
throw innerError;
|
|
59
|
-
}
|
|
60
|
-
this.logger.debug(`Inserted ${entries.length} request log(s)`);
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
this.logger.warn(`Failed to bulk insert request logs: ${error instanceof Error ? error.message : String(error)}`);
|
|
64
|
-
}
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
// Production path: delegate to SDK
|
|
68
|
-
try {
|
|
69
|
-
const sdkEntries = entries.map((e) => ({
|
|
70
|
-
path: e.path,
|
|
71
|
-
method: e.method,
|
|
72
|
-
statusCode: e.status_code,
|
|
73
|
-
durationMs: e.duration_ms,
|
|
74
|
-
ip: e.ip,
|
|
75
|
-
requestHeaders: e.request_headers,
|
|
76
|
-
responseHeaders: e.response_headers,
|
|
77
|
-
requestBody: e.request_body,
|
|
78
|
-
responseBody: e.response_body,
|
|
79
|
-
query: e.query,
|
|
80
|
-
userId: e.user_id,
|
|
81
|
-
projectId: e.project_id,
|
|
82
|
-
partitionKey: e.partition_key,
|
|
83
|
-
metadata: e.metadata,
|
|
84
|
-
}));
|
|
85
|
-
this.sdk.bulkInsert(sdkEntries);
|
|
86
|
-
this.logger.debug(`Inserted ${entries.length} request log(s)`);
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
this.logger.warn(`Failed to bulk insert request logs: ${error instanceof Error ? error.message : String(error)}`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
exports.RequestLogRepository = RequestLogRepository;
|
|
94
|
-
exports.RequestLogRepository = RequestLogRepository = RequestLogRepository_1 = __decorate([
|
|
95
|
-
(0, common_1.Injectable)()
|
|
96
|
-
], RequestLogRepository);
|