crewx 0.8.7-rc.2 → 0.8.7-rc.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/MarketPage-aY16UW1_.js +51 -0
- package/dist/assets/{PromptTab-DPxKgALd.js → PromptTab-C3aTJS6u.js} +7 -7
- package/dist/assets/_baseUniq-DxEFlwNt.js +1 -0
- package/dist/assets/{arc-Wd7DG8CX.js → arc-BCQAokB1.js} +1 -1
- package/dist/assets/architectureDiagram-UYN6MBPD-Bc87ujv2.js +36 -0
- package/dist/assets/blockDiagram-ZHA2E4KO-wC9uH8Lb.js +121 -0
- package/dist/assets/{c4Diagram-6F5ED5ID-CcfPHYky.js → c4Diagram-6F5ED5ID-CqB7lqni.js} +1 -1
- package/dist/assets/channel-DNLHkiNp.js +1 -0
- package/dist/assets/{chunk-5HRBRIJM-TGnRph8o.js → chunk-5HRBRIJM-Cc1L17Eh.js} +1 -1
- package/dist/assets/{chunk-7U56Z5CX-D24Jb5U0.js → chunk-7U56Z5CX-Df3nu_7G.js} +1 -1
- package/dist/assets/{chunk-ASOPGD6M-zBk7x36Z.js → chunk-ASOPGD6M-DIXslLG-.js} +1 -1
- package/dist/assets/{chunk-KFBOBJHC-U1tpWuJd.js → chunk-KFBOBJHC-FytVljyP.js} +1 -1
- package/dist/assets/{chunk-T2TOU4HS-P78s0i18.js → chunk-T2TOU4HS-CU5z-cXq.js} +1 -1
- package/dist/assets/{chunk-TMUBEWPD-_9HBqU-T.js → chunk-TMUBEWPD-CWo1AFyn.js} +1 -1
- package/dist/assets/classDiagram-LNE6IOMH-B430Onym.js +1 -0
- package/dist/assets/classDiagram-v2-MQ7JQ4JX-B430Onym.js +1 -0
- package/dist/assets/clone-B9O3E3P1.js +1 -0
- package/dist/assets/dagre-4EVJKHTY-CgZW5tg4.js +4 -0
- package/dist/assets/diagram-QW4FP2JN-CJAng8RC.js +24 -0
- package/dist/assets/{erDiagram-6RL3IURR-CR3kiDSu.js → erDiagram-6RL3IURR-C1uHztHX.js} +2 -2
- package/dist/assets/{flowDiagram-7ASYPVHJ-B0gVEfBk.js → flowDiagram-7ASYPVHJ-Yiu2odO-.js} +1 -1
- package/dist/assets/{ganttDiagram-NTVNEXSI-CIEk1X3_.js → ganttDiagram-NTVNEXSI-tutc0dJP.js} +3 -3
- package/dist/assets/gitGraph-YCYPL57B-C3jM6T4G.js +133 -0
- package/dist/assets/gitGraphDiagram-NRZ2UAAF-0aqHEKzz.js +65 -0
- package/dist/assets/graph-DC224ILV.js +1 -0
- package/dist/assets/infoDiagram-A4XQUW5V-Do7Mpzkx.js +2 -0
- package/dist/assets/{journeyDiagram-G5WM74LC-U9w5k3my.js → journeyDiagram-G5WM74LC-DAruEJc7.js} +1 -1
- package/dist/assets/{kanban-definition-QRCXZQQD-CO8Lwd1_.js → kanban-definition-QRCXZQQD-DB63vLR0.js} +1 -1
- package/dist/assets/layout-BiYH5x6Q.js +1 -0
- package/dist/assets/{linear-CHGWcXFV.js → linear-CLyGW2s0.js} +1 -1
- package/dist/assets/main-CEKkUqZb.js +1094 -0
- package/dist/assets/main-D3YeRndF.css +10 -0
- package/dist/assets/min-ChJMFU2N.js +1 -0
- package/dist/assets/{mindmap-definition-GWI6TPTV-FRHfidFi.js → mindmap-definition-GWI6TPTV-CtADqQgd.js} +1 -1
- package/dist/assets/pieDiagram-YF2LJOPJ-BSOfzo3O.js +30 -0
- package/dist/assets/{quadrantDiagram-OS5C2QUG-N0MJL1hU.js → quadrantDiagram-OS5C2QUG-BLBQNFVb.js} +1 -1
- package/dist/assets/{requirementDiagram-MIRIMTAZ-n0yYIEdg.js → requirementDiagram-MIRIMTAZ-DqorvuS6.js} +2 -2
- package/dist/assets/{sankeyDiagram-Y46BX6SQ-DzRt1UUn.js → sankeyDiagram-Y46BX6SQ-4NDcrLkB.js} +1 -1
- package/dist/assets/{sequenceDiagram-G6AWOVSC-Bw73EL9L.js → sequenceDiagram-G6AWOVSC-yha6BxK2.js} +1 -1
- package/dist/assets/stateDiagram-MAYHULR4-XJ_I41ez.js +1 -0
- package/dist/assets/stateDiagram-v2-4JROLMXI-CxcyPJO2.js +1 -0
- package/dist/assets/{timeline-definition-U7ZMHBDA-BEgtmEeC.js → timeline-definition-U7ZMHBDA-DCNrmvE7.js} +1 -1
- package/dist/assets/{xychartDiagram-6QU3TZC5-bWuCFYmh.js → xychartDiagram-6QU3TZC5-9N-Ohhdp.js} +2 -2
- package/dist/index.html +2 -2
- package/dist-server/app.module.js +6 -0
- package/dist-server/common/analytics.client.js +180 -0
- package/dist-server/common/analytics.module.js +21 -0
- package/dist-server/common/device-id.js +33 -0
- package/dist-server/domain/cli/cli.service.js +66 -4
- package/dist-server/domain/document/document.service.js +6 -3
- package/dist-server/domain/goal/dto/goal.dto.js +49 -0
- package/dist-server/domain/goal/goal.controller.js +86 -0
- package/dist-server/domain/goal/goal.module.js +22 -0
- package/dist-server/domain/goal/goal.service.js +197 -0
- package/dist-server/domain/goal/parser/goal-md-parser.js +166 -0
- package/dist-server/domain/goal/parser/goal-md-serializer.js +110 -0
- package/dist-server/domain/market/market.controller.js +25 -1
- package/dist-server/domain/market/market.service.js +414 -18
- package/dist-server/domain/planner/dto/planner.dto.js +7 -44
- package/dist-server/domain/planner/planner.controller.js +2 -2
- package/dist-server/domain/planner/planner.service.js +24 -0
- package/dist-server/domain/settings/settings.controller.js +52 -0
- package/dist-server/domain/settings/settings.module.js +22 -0
- package/dist-server/domain/settings/settings.service.js +105 -0
- package/dist-server/domain/task/task.service.js +20 -0
- package/dist-server/domain/thread/thread.controller.js +28 -0
- package/dist-server/domain/thread/thread.service.js +20 -0
- package/dist-server/main.js +1 -0
- package/dist-server/repository/task.repository.js +4 -0
- package/dist-server/repository/thread.repository.js +22 -0
- package/package.json +13 -8
- package/packages/cli/dist/builtin.js +1 -0
- package/packages/cli/dist/commands/init.js +251 -8
- package/packages/cli/package.json +2 -1
- package/server.js +6 -3
- package/dist/assets/MarketPage-CjJYSssq.js +0 -56
- package/dist/assets/architectureDiagram-UYN6MBPD-CMavUkL9.js +0 -36
- package/dist/assets/blockDiagram-ZHA2E4KO-D1rNF19s.js +0 -121
- package/dist/assets/channel-CyMi7jVG.js +0 -1
- package/dist/assets/classDiagram-LNE6IOMH-DVWuJ-Df.js +0 -1
- package/dist/assets/classDiagram-v2-MQ7JQ4JX-DVWuJ-Df.js +0 -1
- package/dist/assets/dagre-4EVJKHTY-CcSwRLTq.js +0 -4
- package/dist/assets/diagram-QW4FP2JN-N887K_Ef.js +0 -24
- package/dist/assets/gitGraph-YCYPL57B-Zl60oDrh.js +0 -133
- package/dist/assets/gitGraphDiagram-NRZ2UAAF-CmIpkGbx.js +0 -65
- package/dist/assets/graph-BlwPajkw.js +0 -1
- package/dist/assets/infoDiagram-A4XQUW5V-D3UxyUCV.js +0 -2
- package/dist/assets/layout-Bvwu4dCi.js +0 -1
- package/dist/assets/main-Dnmo7KzM.js +0 -1064
- package/dist/assets/main-Fz5tpoGZ.css +0 -10
- package/dist/assets/pieDiagram-YF2LJOPJ-Eo_N9Dkd.js +0 -30
- package/dist/assets/stateDiagram-MAYHULR4-hqIdsHFt.js +0 -1
- package/dist/assets/stateDiagram-v2-4JROLMXI-BoqygJ0s.js +0 -1
- /package/dist/assets/{gemini-logo.svg → google-logo.svg} +0 -0
|
@@ -9,46 +9,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.UpdatePlannerDto =
|
|
12
|
+
exports.UpdatePlannerDto = void 0;
|
|
13
13
|
const class_validator_1 = require("class-validator");
|
|
14
|
-
const class_transformer_1 = require("class-transformer");
|
|
15
|
-
class Top3ItemDto {
|
|
16
|
-
rank;
|
|
17
|
-
text;
|
|
18
|
-
agents;
|
|
19
|
-
}
|
|
20
|
-
exports.Top3ItemDto = Top3ItemDto;
|
|
21
|
-
__decorate([
|
|
22
|
-
(0, class_validator_1.IsString)(),
|
|
23
|
-
__metadata("design:type", Number)
|
|
24
|
-
], Top3ItemDto.prototype, "rank", void 0);
|
|
25
|
-
__decorate([
|
|
26
|
-
(0, class_validator_1.IsString)(),
|
|
27
|
-
__metadata("design:type", String)
|
|
28
|
-
], Top3ItemDto.prototype, "text", void 0);
|
|
29
|
-
__decorate([
|
|
30
|
-
(0, class_validator_1.IsArray)(),
|
|
31
|
-
(0, class_validator_1.IsString)({ each: true }),
|
|
32
|
-
__metadata("design:type", Array)
|
|
33
|
-
], Top3ItemDto.prototype, "agents", void 0);
|
|
34
|
-
class ScheduleItemDto {
|
|
35
|
-
time;
|
|
36
|
-
task;
|
|
37
|
-
status;
|
|
38
|
-
}
|
|
39
|
-
exports.ScheduleItemDto = ScheduleItemDto;
|
|
40
|
-
__decorate([
|
|
41
|
-
(0, class_validator_1.IsString)(),
|
|
42
|
-
__metadata("design:type", String)
|
|
43
|
-
], ScheduleItemDto.prototype, "time", void 0);
|
|
44
|
-
__decorate([
|
|
45
|
-
(0, class_validator_1.IsString)(),
|
|
46
|
-
__metadata("design:type", String)
|
|
47
|
-
], ScheduleItemDto.prototype, "task", void 0);
|
|
48
|
-
__decorate([
|
|
49
|
-
(0, class_validator_1.IsString)(),
|
|
50
|
-
__metadata("design:type", String)
|
|
51
|
-
], ScheduleItemDto.prototype, "status", void 0);
|
|
52
14
|
class UpdatePlannerDto {
|
|
53
15
|
weekday;
|
|
54
16
|
top3;
|
|
@@ -56,6 +18,7 @@ class UpdatePlannerDto {
|
|
|
56
18
|
schedule;
|
|
57
19
|
notes;
|
|
58
20
|
reflection;
|
|
21
|
+
goals;
|
|
59
22
|
}
|
|
60
23
|
exports.UpdatePlannerDto = UpdatePlannerDto;
|
|
61
24
|
__decorate([
|
|
@@ -66,21 +29,16 @@ __decorate([
|
|
|
66
29
|
__decorate([
|
|
67
30
|
(0, class_validator_1.IsOptional)(),
|
|
68
31
|
(0, class_validator_1.IsArray)(),
|
|
69
|
-
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
70
|
-
(0, class_transformer_1.Type)(() => Top3ItemDto),
|
|
71
32
|
__metadata("design:type", Array)
|
|
72
33
|
], UpdatePlannerDto.prototype, "top3", void 0);
|
|
73
34
|
__decorate([
|
|
74
35
|
(0, class_validator_1.IsOptional)(),
|
|
75
36
|
(0, class_validator_1.IsArray)(),
|
|
76
|
-
(0, class_validator_1.IsString)({ each: true }),
|
|
77
37
|
__metadata("design:type", Array)
|
|
78
38
|
], UpdatePlannerDto.prototype, "braindump", void 0);
|
|
79
39
|
__decorate([
|
|
80
40
|
(0, class_validator_1.IsOptional)(),
|
|
81
41
|
(0, class_validator_1.IsArray)(),
|
|
82
|
-
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
83
|
-
(0, class_transformer_1.Type)(() => ScheduleItemDto),
|
|
84
42
|
__metadata("design:type", Array)
|
|
85
43
|
], UpdatePlannerDto.prototype, "schedule", void 0);
|
|
86
44
|
__decorate([
|
|
@@ -93,3 +51,8 @@ __decorate([
|
|
|
93
51
|
(0, class_validator_1.IsString)(),
|
|
94
52
|
__metadata("design:type", String)
|
|
95
53
|
], UpdatePlannerDto.prototype, "reflection", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, class_validator_1.IsOptional)(),
|
|
56
|
+
(0, class_validator_1.IsArray)(),
|
|
57
|
+
__metadata("design:type", Array)
|
|
58
|
+
], UpdatePlannerDto.prototype, "goals", void 0);
|
|
@@ -68,7 +68,7 @@ __decorate([
|
|
|
68
68
|
__metadata("design:returntype", void 0)
|
|
69
69
|
], PlannerController.prototype, "updatePlanner", null);
|
|
70
70
|
exports.PlannerController = PlannerController = __decorate([
|
|
71
|
-
(0, swagger_1.ApiTags)('planner'),
|
|
72
|
-
(0, common_1.Controller)('ws/:slug/planner'),
|
|
71
|
+
(0, swagger_1.ApiTags)('daily-planner'),
|
|
72
|
+
(0, common_1.Controller)('ws/:slug/daily-planner'),
|
|
73
73
|
__metadata("design:paramtypes", [planner_service_js_1.PlannerService])
|
|
74
74
|
], PlannerController);
|
|
@@ -60,6 +60,7 @@ let PlannerService = class PlannerService {
|
|
|
60
60
|
schedule: dto.schedule ?? existing.schedule,
|
|
61
61
|
notes: dto.notes ?? existing.notes,
|
|
62
62
|
reflection: dto.reflection ?? existing.reflection,
|
|
63
|
+
goals: dto.goals !== undefined ? dto.goals : existing.goals,
|
|
63
64
|
};
|
|
64
65
|
const dir = this.dailyDir(workspacePath);
|
|
65
66
|
if (!(0, fs_1.existsSync)(dir)) {
|
|
@@ -90,6 +91,9 @@ let PlannerService = class PlannerService {
|
|
|
90
91
|
else if (h === 'schedule') {
|
|
91
92
|
result.schedule = this.parseSchedule(body);
|
|
92
93
|
}
|
|
94
|
+
else if (h === 'goal') {
|
|
95
|
+
result.goals = this.parseGoalLinks(body);
|
|
96
|
+
}
|
|
93
97
|
else if (h === 'notes') {
|
|
94
98
|
result.notes = body.trim();
|
|
95
99
|
}
|
|
@@ -154,6 +158,17 @@ let PlannerService = class PlannerService {
|
|
|
154
158
|
.map((l) => l.replace(/^-\s+/, '').trim())
|
|
155
159
|
.filter(Boolean);
|
|
156
160
|
}
|
|
161
|
+
parseGoalLinks(body) {
|
|
162
|
+
const items = [];
|
|
163
|
+
const lines = body.split('\n');
|
|
164
|
+
for (const line of lines) {
|
|
165
|
+
const m = line.match(/^-\s+\[([^\]]+)\]\(\.\.\/goal\/([^)]+)\.md\)/);
|
|
166
|
+
if (!m)
|
|
167
|
+
continue;
|
|
168
|
+
items.push({ goalId: m[2], title: m[1] });
|
|
169
|
+
}
|
|
170
|
+
return items;
|
|
171
|
+
}
|
|
157
172
|
parseSchedule(body) {
|
|
158
173
|
const items = [];
|
|
159
174
|
const lines = body.split('\n');
|
|
@@ -203,6 +218,14 @@ let PlannerService = class PlannerService {
|
|
|
203
218
|
lines.push(`- [${marker}] ${item.time} ${item.task}`);
|
|
204
219
|
}
|
|
205
220
|
lines.push('');
|
|
221
|
+
// Goal
|
|
222
|
+
if (planner.goals.length > 0) {
|
|
223
|
+
lines.push('## Goal');
|
|
224
|
+
for (const g of planner.goals) {
|
|
225
|
+
lines.push(`- [${g.title}](../goal/${g.goalId}.md)`);
|
|
226
|
+
}
|
|
227
|
+
lines.push('');
|
|
228
|
+
}
|
|
206
229
|
// Notes
|
|
207
230
|
lines.push('## Notes');
|
|
208
231
|
if (planner.notes) {
|
|
@@ -227,6 +250,7 @@ let PlannerService = class PlannerService {
|
|
|
227
250
|
schedule: [],
|
|
228
251
|
notes: '',
|
|
229
252
|
reflection: '',
|
|
253
|
+
goals: [],
|
|
230
254
|
};
|
|
231
255
|
}
|
|
232
256
|
getWeekday(date) {
|
|
@@ -0,0 +1,52 @@
|
|
|
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.SettingsController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
18
|
+
const settings_service_js_1 = require("./settings.service.js");
|
|
19
|
+
let SettingsController = class SettingsController {
|
|
20
|
+
settingsService;
|
|
21
|
+
constructor(settingsService) {
|
|
22
|
+
this.settingsService = settingsService;
|
|
23
|
+
}
|
|
24
|
+
getSettings() {
|
|
25
|
+
return { success: true, data: this.settingsService.getSettings() };
|
|
26
|
+
}
|
|
27
|
+
updateSettings(body) {
|
|
28
|
+
const updated = this.settingsService.updateSettings(body);
|
|
29
|
+
return { success: true, data: updated };
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
exports.SettingsController = SettingsController;
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, swagger_1.ApiOperation)({ operationId: 'STG.GET', summary: 'Get settings' }),
|
|
35
|
+
(0, common_1.Get)(),
|
|
36
|
+
__metadata("design:type", Function),
|
|
37
|
+
__metadata("design:paramtypes", []),
|
|
38
|
+
__metadata("design:returntype", void 0)
|
|
39
|
+
], SettingsController.prototype, "getSettings", null);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, swagger_1.ApiOperation)({ operationId: 'STG.UPDATE', summary: 'Update settings' }),
|
|
42
|
+
(0, common_1.Put)(),
|
|
43
|
+
__param(0, (0, common_1.Body)()),
|
|
44
|
+
__metadata("design:type", Function),
|
|
45
|
+
__metadata("design:paramtypes", [Object]),
|
|
46
|
+
__metadata("design:returntype", void 0)
|
|
47
|
+
], SettingsController.prototype, "updateSettings", null);
|
|
48
|
+
exports.SettingsController = SettingsController = __decorate([
|
|
49
|
+
(0, swagger_1.ApiTags)('settings'),
|
|
50
|
+
(0, common_1.Controller)('settings'),
|
|
51
|
+
__metadata("design:paramtypes", [settings_service_js_1.SettingsService])
|
|
52
|
+
], SettingsController);
|
|
@@ -0,0 +1,22 @@
|
|
|
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.SettingsModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const settings_controller_js_1 = require("./settings.controller.js");
|
|
12
|
+
const settings_service_js_1 = require("./settings.service.js");
|
|
13
|
+
let SettingsModule = class SettingsModule {
|
|
14
|
+
};
|
|
15
|
+
exports.SettingsModule = SettingsModule;
|
|
16
|
+
exports.SettingsModule = SettingsModule = __decorate([
|
|
17
|
+
(0, common_1.Module)({
|
|
18
|
+
controllers: [settings_controller_js_1.SettingsController],
|
|
19
|
+
providers: [settings_service_js_1.SettingsService],
|
|
20
|
+
exports: [settings_service_js_1.SettingsService],
|
|
21
|
+
})
|
|
22
|
+
], SettingsModule);
|
|
@@ -0,0 +1,105 @@
|
|
|
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.SettingsService = void 0;
|
|
46
|
+
const fs_1 = require("fs");
|
|
47
|
+
const common_1 = require("@nestjs/common");
|
|
48
|
+
const yaml = __importStar(require("js-yaml"));
|
|
49
|
+
const analytics_client_js_1 = require("../../common/analytics.client.js");
|
|
50
|
+
let SettingsService = class SettingsService {
|
|
51
|
+
analyticsService;
|
|
52
|
+
constructor(analyticsService) {
|
|
53
|
+
this.analyticsService = analyticsService;
|
|
54
|
+
}
|
|
55
|
+
get configPath() {
|
|
56
|
+
return process.env.CREWX_CONFIG || 'crewx.yaml';
|
|
57
|
+
}
|
|
58
|
+
getSettings() {
|
|
59
|
+
const config = this.loadConfig();
|
|
60
|
+
const settings = (config.settings ?? {});
|
|
61
|
+
return {
|
|
62
|
+
analytics: settings.analytics !== false,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
updateSettings(patch) {
|
|
66
|
+
const config = this.loadConfig();
|
|
67
|
+
if (!config.settings || typeof config.settings !== 'object') {
|
|
68
|
+
config.settings = {};
|
|
69
|
+
}
|
|
70
|
+
const settings = config.settings;
|
|
71
|
+
if (patch.analytics !== undefined) {
|
|
72
|
+
if (patch.analytics) {
|
|
73
|
+
delete settings.analytics;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
settings.analytics = false;
|
|
77
|
+
}
|
|
78
|
+
this.saveConfig(config);
|
|
79
|
+
this.analyticsService.setEnabled(patch.analytics);
|
|
80
|
+
}
|
|
81
|
+
return this.getSettings();
|
|
82
|
+
}
|
|
83
|
+
loadConfig() {
|
|
84
|
+
if (!(0, fs_1.existsSync)(this.configPath))
|
|
85
|
+
return {};
|
|
86
|
+
try {
|
|
87
|
+
const content = (0, fs_1.readFileSync)(this.configPath, 'utf-8');
|
|
88
|
+
const parsed = yaml.load(content);
|
|
89
|
+
return typeof parsed === 'object' && parsed !== null
|
|
90
|
+
? parsed
|
|
91
|
+
: {};
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return {};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
saveConfig(config) {
|
|
98
|
+
(0, fs_1.writeFileSync)(this.configPath, yaml.dump(config, { lineWidth: -1 }), 'utf-8');
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
exports.SettingsService = SettingsService;
|
|
102
|
+
exports.SettingsService = SettingsService = __decorate([
|
|
103
|
+
(0, common_1.Injectable)(),
|
|
104
|
+
__metadata("design:paramtypes", [analytics_client_js_1.AnalyticsService])
|
|
105
|
+
], SettingsService);
|
|
@@ -32,11 +32,31 @@ let TaskService = TaskService_1 = class TaskService {
|
|
|
32
32
|
crewxPool;
|
|
33
33
|
projectRepo;
|
|
34
34
|
logger = new common_1.Logger(TaskService_1.name);
|
|
35
|
+
reaperInterval;
|
|
35
36
|
constructor(taskRepo, crewxPool, projectRepo) {
|
|
36
37
|
this.taskRepo = taskRepo;
|
|
37
38
|
this.crewxPool = crewxPool;
|
|
38
39
|
this.projectRepo = projectRepo;
|
|
39
40
|
}
|
|
41
|
+
onModuleInit() {
|
|
42
|
+
const reaped = this.taskRepo.reapOrphanedTasks();
|
|
43
|
+
if (reaped > 0) {
|
|
44
|
+
this.logger.warn(`Reaped ${reaped} orphaned task(s) on startup`);
|
|
45
|
+
}
|
|
46
|
+
this.reaperInterval = setInterval(() => {
|
|
47
|
+
try {
|
|
48
|
+
const n = this.taskRepo.reapOrphanedTasks();
|
|
49
|
+
if (n > 0)
|
|
50
|
+
this.logger.warn(`Reaped ${n} orphaned task(s)`);
|
|
51
|
+
}
|
|
52
|
+
catch { /* non-fatal */ }
|
|
53
|
+
}, 5 * 60 * 1000);
|
|
54
|
+
}
|
|
55
|
+
onModuleDestroy() {
|
|
56
|
+
if (this.reaperInterval !== undefined) {
|
|
57
|
+
clearInterval(this.reaperInterval);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
40
60
|
// TSK.ALL: All tasks from crewx.db with filtering, search, and pagination
|
|
41
61
|
getAllTasks(params, workspaceId) {
|
|
42
62
|
const agents = params.agent?.split(',').map(s => s.trim()).filter(Boolean);
|
|
@@ -33,6 +33,16 @@ let ThreadController = class ThreadController {
|
|
|
33
33
|
const data = this.threadService.listThreads(query, ws.id);
|
|
34
34
|
return { success: true, data };
|
|
35
35
|
}
|
|
36
|
+
// THD.PIN: Toggle thread pinned
|
|
37
|
+
togglePin(threadId, ws) {
|
|
38
|
+
const data = this.threadService.togglePin(ws.id, threadId);
|
|
39
|
+
return { success: true, data };
|
|
40
|
+
}
|
|
41
|
+
// THD.STAR: Toggle thread starred
|
|
42
|
+
toggleStar(threadId, ws) {
|
|
43
|
+
const data = this.threadService.toggleStar(ws.id, threadId);
|
|
44
|
+
return { success: true, data };
|
|
45
|
+
}
|
|
36
46
|
// THD.UPDATE: Update thread title
|
|
37
47
|
updateThread(threadId, dto, ws) {
|
|
38
48
|
const data = this.threadService.updateThread(threadId, ws.id, { title: dto.title });
|
|
@@ -74,6 +84,24 @@ __decorate([
|
|
|
74
84
|
__metadata("design:paramtypes", [list_threads_dto_js_1.ListThreadsDto, Object]),
|
|
75
85
|
__metadata("design:returntype", void 0)
|
|
76
86
|
], ThreadController.prototype, "listThreads", null);
|
|
87
|
+
__decorate([
|
|
88
|
+
(0, swagger_1.ApiOperation)({ operationId: 'THD.PIN', summary: 'Toggle thread pinned' }),
|
|
89
|
+
(0, common_1.Patch)(':threadId/pin'),
|
|
90
|
+
__param(0, (0, common_1.Param)('threadId')),
|
|
91
|
+
__param(1, (0, workspace_decorator_js_1.Workspace)()),
|
|
92
|
+
__metadata("design:type", Function),
|
|
93
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
94
|
+
__metadata("design:returntype", void 0)
|
|
95
|
+
], ThreadController.prototype, "togglePin", null);
|
|
96
|
+
__decorate([
|
|
97
|
+
(0, swagger_1.ApiOperation)({ operationId: 'THD.STAR', summary: 'Toggle thread starred' }),
|
|
98
|
+
(0, common_1.Patch)(':threadId/star'),
|
|
99
|
+
__param(0, (0, common_1.Param)('threadId')),
|
|
100
|
+
__param(1, (0, workspace_decorator_js_1.Workspace)()),
|
|
101
|
+
__metadata("design:type", Function),
|
|
102
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
103
|
+
__metadata("design:returntype", void 0)
|
|
104
|
+
], ThreadController.prototype, "toggleStar", null);
|
|
77
105
|
__decorate([
|
|
78
106
|
(0, swagger_1.ApiOperation)({ operationId: 'THD.UPDATE', summary: 'Update thread title' }),
|
|
79
107
|
(0, common_1.Patch)(':threadId'),
|
|
@@ -93,6 +93,8 @@ let ThreadService = class ThreadService {
|
|
|
93
93
|
agents: stats.agents,
|
|
94
94
|
createdAt: threadRow.created_at,
|
|
95
95
|
updatedAt: threadRow.updated_at,
|
|
96
|
+
pinned: !!(threadRow.pinned ?? 0),
|
|
97
|
+
starred: !!(threadRow.starred ?? 0),
|
|
96
98
|
totals: {
|
|
97
99
|
taskCount: stats.taskCount,
|
|
98
100
|
inputTokens: stats.inputTokens,
|
|
@@ -101,6 +103,22 @@ let ThreadService = class ThreadService {
|
|
|
101
103
|
},
|
|
102
104
|
};
|
|
103
105
|
}
|
|
106
|
+
// THD.PIN: Toggle pinned 0↔1
|
|
107
|
+
togglePin(workspaceId, threadId) {
|
|
108
|
+
this.validateId(threadId);
|
|
109
|
+
const result = this.threadRepo.togglePin(threadId, workspaceId);
|
|
110
|
+
if (!result)
|
|
111
|
+
throw new common_1.NotFoundException(`Thread not found: ${threadId}`);
|
|
112
|
+
return { threadId, pinned: result.pinned };
|
|
113
|
+
}
|
|
114
|
+
// THD.STAR: Toggle starred 0↔1
|
|
115
|
+
toggleStar(workspaceId, threadId) {
|
|
116
|
+
this.validateId(threadId);
|
|
117
|
+
const result = this.threadRepo.toggleStar(threadId, workspaceId);
|
|
118
|
+
if (!result)
|
|
119
|
+
throw new common_1.NotFoundException(`Thread not found: ${threadId}`);
|
|
120
|
+
return { threadId, starred: result.starred };
|
|
121
|
+
}
|
|
104
122
|
// THD.UPDATE: Update thread title (locks against auto-overwrite)
|
|
105
123
|
updateThread(threadId, workspaceId, patch) {
|
|
106
124
|
this.validateId(threadId);
|
|
@@ -297,6 +315,8 @@ let ThreadService = class ThreadService {
|
|
|
297
315
|
messageCount: row.message_count ?? 0,
|
|
298
316
|
createdAt: row.created_at,
|
|
299
317
|
updatedAt: row.updated_at,
|
|
318
|
+
pinned: !!(row.pinned ?? 0),
|
|
319
|
+
starred: !!(row.starred ?? 0),
|
|
300
320
|
});
|
|
301
321
|
validateId(id) {
|
|
302
322
|
if (!/^[\w\p{L}\p{N}._-]+$/u.test(id)) {
|
package/dist-server/main.js
CHANGED
|
@@ -163,6 +163,7 @@ async function bootstrap() {
|
|
|
163
163
|
catch (e) {
|
|
164
164
|
console.warn('CWD auto-register failed (non-fatal):', e);
|
|
165
165
|
}
|
|
166
|
+
app.enableShutdownHooks();
|
|
166
167
|
const port = process.env.PORT || 8150;
|
|
167
168
|
await app.listen(port);
|
|
168
169
|
// Get actual port (important when PORT=0 for random port)
|
|
@@ -94,6 +94,10 @@ let TaskRepository = class TaskRepository extends base_sqlite_repository_js_1.Ba
|
|
|
94
94
|
findTasksByPromptHint(hint, workspaceId) {
|
|
95
95
|
return this.sdk.findTasksByPromptHint(hint, workspaceId);
|
|
96
96
|
}
|
|
97
|
+
/** Transition orphaned running tasks (no live process) to failed. */
|
|
98
|
+
reapOrphanedTasks() {
|
|
99
|
+
return this.sdk.reapOrphanedTasks();
|
|
100
|
+
}
|
|
97
101
|
};
|
|
98
102
|
exports.TaskRepository = TaskRepository;
|
|
99
103
|
exports.TaskRepository = TaskRepository = __decorate([
|
|
@@ -127,6 +127,28 @@ let ThreadRepository = class ThreadRepository extends base_sqlite_repository_js_
|
|
|
127
127
|
throw e;
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
+
/** Toggle pinned 0↔1 for a thread. Returns new state or null if not found. */
|
|
131
|
+
togglePin(threadId, workspaceId) {
|
|
132
|
+
try {
|
|
133
|
+
return this.sdkThread.togglePin(threadId, workspaceId);
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
if (e instanceof repository_1.RepositoryError)
|
|
137
|
+
return null;
|
|
138
|
+
throw e;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Toggle starred 0↔1 for a thread. Returns new state or null if not found. */
|
|
142
|
+
toggleStar(threadId, workspaceId) {
|
|
143
|
+
try {
|
|
144
|
+
return this.sdkThread.toggleStar(threadId, workspaceId);
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
if (e instanceof repository_1.RepositoryError)
|
|
148
|
+
return null;
|
|
149
|
+
throw e;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
130
152
|
/** UPSERT thread (used by MSG.SEND).
|
|
131
153
|
* workspace_id is required on INSERT to prevent NULL workspace rows. */
|
|
132
154
|
upsertThread(threadId, opts) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crewx",
|
|
3
|
-
"version": "0.8.7-rc.
|
|
3
|
+
"version": "0.8.7-rc.21",
|
|
4
4
|
"description": "CrewX — AI agent team dashboard with Electron UI and CLI (Web + Electron + Global CLI)",
|
|
5
5
|
"main": "server.js",
|
|
6
6
|
"bin": {
|
|
@@ -25,6 +25,9 @@
|
|
|
25
25
|
},
|
|
26
26
|
"license": "UNLICENSED",
|
|
27
27
|
"dependencies": {
|
|
28
|
+
"@dnd-kit/core": "^6.3.1",
|
|
29
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
30
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
28
31
|
"@modelcontextprotocol/sdk": "1.27.0",
|
|
29
32
|
"@nestjs/common": "11.1.21",
|
|
30
33
|
"@nestjs/config": "4.0.3",
|
|
@@ -45,6 +48,7 @@
|
|
|
45
48
|
"class-transformer": "0.5.1",
|
|
46
49
|
"class-validator": "0.15.1",
|
|
47
50
|
"cookie-parser": "1.4.7",
|
|
51
|
+
"date-fns": "^4.3.0",
|
|
48
52
|
"dotenv": "17.2.3",
|
|
49
53
|
"execa": "8.0.1",
|
|
50
54
|
"express": "4.21.2",
|
|
@@ -58,6 +62,7 @@
|
|
|
58
62
|
"md-to-slack": "1.0.0",
|
|
59
63
|
"node-forge": "1.4.0",
|
|
60
64
|
"open": "11.0.0",
|
|
65
|
+
"react-day-picker": "^10.0.1",
|
|
61
66
|
"reflect-metadata": "0.2.2",
|
|
62
67
|
"remark-parse": "11.0.0",
|
|
63
68
|
"remark-stringify": "11.0.0",
|
|
@@ -69,17 +74,17 @@
|
|
|
69
74
|
"wink-nlp-utils": "2.1.0",
|
|
70
75
|
"yargs": "17.7.0",
|
|
71
76
|
"zod": "3.25.76",
|
|
72
|
-
"@crewx/cli": "0.8.7-rc.
|
|
77
|
+
"@crewx/cli": "0.8.7-rc.21",
|
|
73
78
|
"@crewx/doc": "0.1.8",
|
|
74
79
|
"@crewx/cron": "0.1.8",
|
|
75
|
-
"@crewx/
|
|
76
|
-
"@crewx/
|
|
77
|
-
"@crewx/sdk": "0.8.7-rc.2",
|
|
78
|
-
"@crewx/skill": "0.1.10",
|
|
80
|
+
"@crewx/memory": "0.1.19",
|
|
81
|
+
"@crewx/knowledge-core": "0.1.14",
|
|
79
82
|
"@crewx/search": "0.1.9",
|
|
83
|
+
"@crewx/shared": "0.0.5",
|
|
84
|
+
"@crewx/sdk": "0.8.7-rc.21",
|
|
80
85
|
"@crewx/wbs": "0.1.9",
|
|
81
86
|
"@crewx/workflow": "0.3.18",
|
|
82
|
-
"@crewx/
|
|
87
|
+
"@crewx/skill": "0.1.17"
|
|
83
88
|
},
|
|
84
89
|
"devDependencies": {
|
|
85
90
|
"@ccusage/codex": "0.0.1",
|
|
@@ -200,7 +205,7 @@
|
|
|
200
205
|
"build:built-in": "pnpm -r --filter './packages/built-in/*' run build",
|
|
201
206
|
"build": "pnpm run build:sdk && pnpm run build:built-in && pnpm run build:cli && pnpm run build:server && pnpm run build:ui",
|
|
202
207
|
"build:cli": "cd packages/cli && npm run build",
|
|
203
|
-
"build:server": "tsc -p tsconfig.server.json && node scripts/emit-dist-server-package-json.mjs",
|
|
208
|
+
"build:server": "tsc -p tsconfig.server.json && cp src/server/domain/market/default-marketplace.json dist-server/domain/market/ && node scripts/emit-dist-server-package-json.mjs",
|
|
204
209
|
"build:ui": "vite build",
|
|
205
210
|
"build:chrome-x": "pnpm -F @crewx/chrome-x run build",
|
|
206
211
|
"build:web": "npm run build",
|
|
@@ -52,6 +52,7 @@ const BUILTIN_MAP = {
|
|
|
52
52
|
cron: () => Promise.resolve().then(() => __importStar(require('@crewx/cron/cli'))),
|
|
53
53
|
workflow: () => Promise.resolve().then(() => __importStar(require('@crewx/workflow/cli'))),
|
|
54
54
|
skill: () => Promise.resolve().then(() => __importStar(require('@crewx/skill/cli'))),
|
|
55
|
+
wi: () => Promise.resolve().then(() => __importStar(require('@crewx/wi/cli'))),
|
|
55
56
|
};
|
|
56
57
|
exports.BUILTIN_COMMANDS = new Set(Object.keys(BUILTIN_MAP));
|
|
57
58
|
// Load skill-tracer for observability (graceful degradation if unavailable)
|