crewx 0.8.7-rc.14 → 0.8.7-rc.15
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.
|
@@ -384,7 +384,7 @@ let MarketService = MarketService_1 = class MarketService {
|
|
|
384
384
|
const relPath = file.path.slice(skillPrefix.length);
|
|
385
385
|
// Path traversal guard
|
|
386
386
|
const destPath = (0, path_1.resolve)((0, path_1.join)(tempDir, relPath));
|
|
387
|
-
if (!destPath.startsWith(resolvedTempDir +
|
|
387
|
+
if (!destPath.startsWith(resolvedTempDir + path_1.sep) && destPath !== resolvedTempDir) {
|
|
388
388
|
throw new Error(`Path traversal detected: ${relPath}`);
|
|
389
389
|
}
|
|
390
390
|
const destFileDir = (0, path_1.dirname)(destPath);
|
|
@@ -583,12 +583,12 @@ let MarketService = MarketService_1 = class MarketService {
|
|
|
583
583
|
}
|
|
584
584
|
// --- Installed items ---
|
|
585
585
|
resolveItemSource(dir, projectRoot) {
|
|
586
|
-
const nmDir = (0, path_1.join)(projectRoot, 'node_modules') +
|
|
586
|
+
const nmDir = (0, path_1.join)(projectRoot, 'node_modules') + path_1.sep;
|
|
587
587
|
if (!dir.startsWith(nmDir) && dir !== (0, path_1.join)(projectRoot, 'node_modules')) {
|
|
588
588
|
return 'local';
|
|
589
589
|
}
|
|
590
590
|
const relFromNm = dir.slice(nmDir.length);
|
|
591
|
-
return relFromNm.startsWith(
|
|
591
|
+
return relFromNm.startsWith(`@crewx${path_1.sep}`) ? 'builtin' : 'node_modules';
|
|
592
592
|
}
|
|
593
593
|
async listInstalledMarkets() {
|
|
594
594
|
const projectRoot = (0, path_1.dirname)(this.skillsDir);
|
|
@@ -9,7 +9,6 @@ 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
|
var McpService_1;
|
|
12
|
-
var _a;
|
|
13
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
13
|
exports.McpService = void 0;
|
|
15
14
|
const common_1 = require("@nestjs/common");
|
|
@@ -671,7 +670,8 @@ exports.McpService = McpService = McpService_1 = __decorate([
|
|
|
671
670
|
__metadata("design:paramtypes", [crewx_pool_service_js_1.CrewxPoolService,
|
|
672
671
|
project_repository_js_1.ProjectRepository,
|
|
673
672
|
browser_session_store_js_1.BrowserSessionStore,
|
|
674
|
-
tool_router_service_js_1.ToolRouterService,
|
|
673
|
+
tool_router_service_js_1.ToolRouterService,
|
|
674
|
+
repository_1.ToolCallRepository])
|
|
675
675
|
], McpService);
|
|
676
676
|
function normalizeContent(result) {
|
|
677
677
|
if (Array.isArray(result.content) && result.content.length > 0) {
|
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.15",
|
|
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": {
|
|
@@ -74,17 +74,17 @@
|
|
|
74
74
|
"wink-nlp-utils": "2.1.0",
|
|
75
75
|
"yargs": "17.7.0",
|
|
76
76
|
"zod": "3.25.76",
|
|
77
|
-
"@crewx/cli": "0.8.7-rc.
|
|
78
|
-
"@crewx/
|
|
77
|
+
"@crewx/cli": "0.8.7-rc.15",
|
|
78
|
+
"@crewx/knowledge-core": "0.1.8",
|
|
79
79
|
"@crewx/cron": "0.1.8",
|
|
80
|
-
"@crewx/
|
|
81
|
-
"@crewx/
|
|
80
|
+
"@crewx/memory": "0.1.13",
|
|
81
|
+
"@crewx/doc": "0.1.8",
|
|
82
|
+
"@crewx/skill": "0.1.11",
|
|
83
|
+
"@crewx/sdk": "0.8.7-rc.15",
|
|
84
|
+
"@crewx/wbs": "0.1.9",
|
|
82
85
|
"@crewx/search": "0.1.9",
|
|
83
|
-
"@crewx/shared": "0.0.5",
|
|
84
|
-
"@crewx/sdk": "0.8.7-rc.14",
|
|
85
86
|
"@crewx/workflow": "0.3.18",
|
|
86
|
-
"@crewx/
|
|
87
|
-
"@crewx/wbs": "0.1.9"
|
|
87
|
+
"@crewx/shared": "0.0.5"
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
90
|
"@ccusage/codex": "0.0.1",
|
|
@@ -351,26 +351,6 @@ async function handleInit(opts) {
|
|
|
351
351
|
catch (e) {
|
|
352
352
|
throw new Error(`YAML_CREATE_FAILED: ${e.message}`);
|
|
353
353
|
}
|
|
354
|
-
for (const dir of ['.crewx/logs', '.claude/commands', 'docs/goal', 'docs/daily', 'docs/wi']) {
|
|
355
|
-
try {
|
|
356
|
-
(0, fs_1.mkdirSync)((0, path_1.join)(target, dir), { recursive: true });
|
|
357
|
-
}
|
|
358
|
-
catch (e) {
|
|
359
|
-
errors.push(`MKDIR_FAILED:${dir}:${e.message}`);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
const docTemplates = [
|
|
363
|
-
{ dir: 'docs/goal', file: 'GOAL-TEMPLATE.md', content: GOAL_TEMPLATE },
|
|
364
|
-
{ dir: 'docs/daily', file: 'DAILY-TEMPLATE.md', content: DAILY_TEMPLATE },
|
|
365
|
-
{ dir: 'docs/wi', file: 'WI-TEMPLATE.md', content: WI_TEMPLATE },
|
|
366
|
-
];
|
|
367
|
-
for (const t of docTemplates) {
|
|
368
|
-
const fullPath = (0, path_1.join)(target, t.dir, t.file);
|
|
369
|
-
if (!(0, fs_1.existsSync)(fullPath)) {
|
|
370
|
-
(0, fs_1.writeFileSync)(fullPath, t.content, 'utf-8');
|
|
371
|
-
console.log(`✅ ${t.dir}/ created (${t.file})`);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
354
|
if (!skipHook) {
|
|
375
355
|
try {
|
|
376
356
|
await (0, install_1.handleHookInstall)({ projectRoot: target, yes: true });
|
|
@@ -381,6 +361,28 @@ async function handleInit(opts) {
|
|
|
381
361
|
}
|
|
382
362
|
}
|
|
383
363
|
}
|
|
364
|
+
// Always create docs dirs and templates, regardless of whether yaml was skipped
|
|
365
|
+
for (const dir of ['.crewx/logs', '.claude/commands', 'docs/goal', 'docs/daily', 'docs/wi']) {
|
|
366
|
+
try {
|
|
367
|
+
(0, fs_1.mkdirSync)((0, path_1.join)(target, dir), { recursive: true });
|
|
368
|
+
}
|
|
369
|
+
catch (e) {
|
|
370
|
+
errors.push(`MKDIR_FAILED:${dir}:${e.message}`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
const docTemplates = [
|
|
374
|
+
{ dir: 'docs/goal', file: 'GOAL-TEMPLATE.md', content: GOAL_TEMPLATE },
|
|
375
|
+
{ dir: 'docs/daily', file: 'DAILY-TEMPLATE.md', content: DAILY_TEMPLATE },
|
|
376
|
+
{ dir: 'docs/wi', file: 'WI-TEMPLATE.md', content: WI_TEMPLATE },
|
|
377
|
+
];
|
|
378
|
+
for (const t of docTemplates) {
|
|
379
|
+
const fullPath = (0, path_1.join)(target, t.dir, t.file);
|
|
380
|
+
if (force || !(0, fs_1.existsSync)(fullPath)) {
|
|
381
|
+
const action = (0, fs_1.existsSync)(fullPath) ? 'updated' : 'created';
|
|
382
|
+
(0, fs_1.writeFileSync)(fullPath, t.content, 'utf-8');
|
|
383
|
+
console.log(`✅ ${t.dir}/ ${action} (${t.file})`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
384
386
|
// Always register workspace in ~/.crewx/crewx.db (best-effort, idempotent)
|
|
385
387
|
let workspaceId;
|
|
386
388
|
let slug;
|