@dollhousemcp/mcp-server 1.4.0 → 1.4.2
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/README.md +54 -9
- package/dist/config/updateConfig.d.ts +84 -0
- package/dist/config/updateConfig.d.ts.map +1 -0
- package/dist/config/updateConfig.js +148 -0
- package/dist/generated/version.d.ts +9 -0
- package/dist/generated/version.d.ts.map +1 -0
- package/dist/generated/version.js +9 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -6
- package/dist/portfolio/DefaultElementProvider.d.ts +78 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -0
- package/dist/portfolio/DefaultElementProvider.js +398 -0
- package/dist/portfolio/PortfolioManager.d.ts +7 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +44 -3
- package/dist/security/commandValidator.d.ts.map +1 -1
- package/dist/security/commandValidator.js +5 -2
- package/dist/security/securityMonitor.d.ts +2 -1
- package/dist/security/securityMonitor.d.ts.map +1 -1
- package/dist/security/securityMonitor.js +1 -1
- package/dist/server/tools/UpdateTools.d.ts.map +1 -1
- package/dist/server/tools/UpdateTools.js +22 -1
- package/dist/server/types.d.ts +1 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/dist/update/BackupManager.d.ts +17 -0
- package/dist/update/BackupManager.d.ts.map +1 -1
- package/dist/update/BackupManager.js +112 -3
- package/dist/update/UpdateManager.d.ts +19 -0
- package/dist/update/UpdateManager.d.ts.map +1 -1
- package/dist/update/UpdateManager.js +485 -15
- package/dist/update/VersionManager.d.ts +1 -1
- package/dist/update/VersionManager.d.ts.map +1 -1
- package/dist/update/VersionManager.js +62 -15
- package/dist/utils/fileOperations.d.ts +83 -0
- package/dist/utils/fileOperations.d.ts.map +1 -0
- package/dist/utils/fileOperations.js +291 -0
- package/dist/utils/installation.d.ts +30 -0
- package/dist/utils/installation.d.ts.map +1 -0
- package/dist/utils/installation.js +160 -0
- package/package.json +3 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installation detection utilities
|
|
3
|
+
* Determines whether the application is running from npm or git installation
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { logger } from './logger.js';
|
|
9
|
+
import { UpdateConfigManager } from '../config/updateConfig.js';
|
|
10
|
+
export class InstallationDetector {
|
|
11
|
+
static cachedType = null;
|
|
12
|
+
// Maximum directory levels to search upward for .git directory
|
|
13
|
+
static get MAX_SEARCH_DEPTH() {
|
|
14
|
+
return UpdateConfigManager.getInstance().getMaxSearchDepth();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Detect the installation type (npm global, git clone, or unknown)
|
|
18
|
+
*/
|
|
19
|
+
static getInstallationType() {
|
|
20
|
+
// Return cached result if available
|
|
21
|
+
if (this.cachedType !== null) {
|
|
22
|
+
return this.cachedType;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
// Get the directory where this file is located
|
|
26
|
+
const currentFileUrl = import.meta.url;
|
|
27
|
+
const currentFilePath = fileURLToPath(currentFileUrl);
|
|
28
|
+
let currentDir = path.dirname(currentFilePath);
|
|
29
|
+
// Resolve symlinks to get the real path
|
|
30
|
+
try {
|
|
31
|
+
currentDir = fs.realpathSync(currentDir);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
// If realpath fails, continue with original path
|
|
35
|
+
logger.debug('[InstallationDetector] Could not resolve real path, using original');
|
|
36
|
+
}
|
|
37
|
+
// Check if we're in a node_modules directory (npm installation)
|
|
38
|
+
// Use path separator to ensure we match the exact package name
|
|
39
|
+
const npmPattern = path.sep + path.join('node_modules', '@dollhousemcp', 'mcp-server') + path.sep;
|
|
40
|
+
if (currentDir.includes(npmPattern)) {
|
|
41
|
+
logger.debug('[InstallationDetector] Detected npm installation');
|
|
42
|
+
this.cachedType = 'npm';
|
|
43
|
+
return 'npm';
|
|
44
|
+
}
|
|
45
|
+
// Check for .git directory (git installation)
|
|
46
|
+
// Search up from current directory
|
|
47
|
+
let searchDir = currentDir;
|
|
48
|
+
for (let i = 0; i < this.MAX_SEARCH_DEPTH; i++) {
|
|
49
|
+
const gitDir = path.join(searchDir, '.git');
|
|
50
|
+
try {
|
|
51
|
+
if (fs.existsSync(gitDir) && fs.statSync(gitDir).isDirectory()) {
|
|
52
|
+
logger.debug('[InstallationDetector] Detected git installation');
|
|
53
|
+
this.cachedType = 'git';
|
|
54
|
+
return 'git';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
// Ignore errors and continue searching
|
|
59
|
+
}
|
|
60
|
+
const parentDir = path.dirname(searchDir);
|
|
61
|
+
if (parentDir === searchDir) {
|
|
62
|
+
// Reached root directory
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
searchDir = parentDir;
|
|
66
|
+
}
|
|
67
|
+
logger.warn('[InstallationDetector] Could not determine installation type');
|
|
68
|
+
this.cachedType = 'unknown';
|
|
69
|
+
return 'unknown';
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
logger.error('[InstallationDetector] Error detecting installation type:', error);
|
|
73
|
+
this.cachedType = 'unknown';
|
|
74
|
+
return 'unknown';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the npm global installation path if running from npm
|
|
79
|
+
*/
|
|
80
|
+
static getNpmGlobalPath() {
|
|
81
|
+
if (this.getInstallationType() !== 'npm') {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const currentFileUrl = import.meta.url;
|
|
86
|
+
const currentFilePath = fileURLToPath(currentFileUrl);
|
|
87
|
+
let currentDir = path.dirname(currentFilePath);
|
|
88
|
+
// Find the root of the npm package
|
|
89
|
+
while (currentDir.includes('node_modules/@dollhousemcp/mcp-server')) {
|
|
90
|
+
const packageJsonPath = path.join(currentDir, 'package.json');
|
|
91
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
92
|
+
return currentDir;
|
|
93
|
+
}
|
|
94
|
+
const parentDir = path.dirname(currentDir);
|
|
95
|
+
if (parentDir === currentDir)
|
|
96
|
+
break;
|
|
97
|
+
currentDir = parentDir;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
logger.error('[InstallationDetector] Error finding npm global path:', error);
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get the git repository root path if running from git
|
|
107
|
+
*/
|
|
108
|
+
static getGitRepositoryPath() {
|
|
109
|
+
if (this.getInstallationType() !== 'git') {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
const currentFileUrl = import.meta.url;
|
|
114
|
+
const currentFilePath = fileURLToPath(currentFileUrl);
|
|
115
|
+
let currentDir = path.dirname(currentFilePath);
|
|
116
|
+
// Search up for .git directory
|
|
117
|
+
for (let i = 0; i < 10; i++) {
|
|
118
|
+
const gitDir = path.join(currentDir, '.git');
|
|
119
|
+
if (fs.existsSync(gitDir) && fs.statSync(gitDir).isDirectory()) {
|
|
120
|
+
return currentDir;
|
|
121
|
+
}
|
|
122
|
+
const parentDir = path.dirname(currentDir);
|
|
123
|
+
if (parentDir === currentDir)
|
|
124
|
+
break;
|
|
125
|
+
currentDir = parentDir;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
logger.error('[InstallationDetector] Error finding git repository path:', error);
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get a human-readable description of the installation
|
|
135
|
+
*/
|
|
136
|
+
static getInstallationDescription() {
|
|
137
|
+
const type = this.getInstallationType();
|
|
138
|
+
switch (type) {
|
|
139
|
+
case 'npm':
|
|
140
|
+
const npmPath = this.getNpmGlobalPath();
|
|
141
|
+
return npmPath
|
|
142
|
+
? `npm global installation at ${npmPath}`
|
|
143
|
+
: 'npm global installation';
|
|
144
|
+
case 'git':
|
|
145
|
+
const gitPath = this.getGitRepositoryPath();
|
|
146
|
+
return gitPath
|
|
147
|
+
? `git installation at ${gitPath}`
|
|
148
|
+
: 'git installation';
|
|
149
|
+
default:
|
|
150
|
+
return 'unknown installation type';
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Clear the cached installation type (mainly for testing)
|
|
155
|
+
*/
|
|
156
|
+
static clearCache() {
|
|
157
|
+
this.cachedType = null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2luc3RhbGxhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJaEUsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixNQUFNLENBQUMsVUFBVSxHQUE0QixJQUFJLENBQUM7SUFFMUQsK0RBQStEO0lBQ3ZELE1BQU0sS0FBSyxnQkFBZ0I7UUFDakMsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxtQkFBbUI7UUFDeEIsb0NBQW9DO1FBQ3BDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILCtDQUErQztZQUMvQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN2QyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUUvQyx3Q0FBd0M7WUFDeEMsSUFBSSxDQUFDO2dCQUNILFVBQVUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLGlEQUFpRDtnQkFDakQsTUFBTSxDQUFDLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1lBQ3JGLENBQUM7WUFFRCxnRUFBZ0U7WUFDaEUsK0RBQStEO1lBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDbEcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztnQkFDakUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELDhDQUE4QztZQUM5QyxtQ0FBbUM7WUFDbkMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDO1lBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQztvQkFDSCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO3dCQUMvRCxNQUFNLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7d0JBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO3dCQUN4QixPQUFPLEtBQUssQ0FBQztvQkFDZixDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZix1Q0FBdUM7Z0JBQ3pDLENBQUM7Z0JBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzVCLHlCQUF5QjtvQkFDekIsTUFBTTtnQkFDUixDQUFDO2dCQUNELFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDeEIsQ0FBQztZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUM1QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkRBQTJELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDNUIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0I7UUFDckIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN2QyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUUvQyxtQ0FBbUM7WUFDbkMsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLHVDQUF1QyxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQzlELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUNuQyxPQUFPLFVBQVUsQ0FBQztnQkFDcEIsQ0FBQztnQkFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLFNBQVMsS0FBSyxVQUFVO29CQUFFLE1BQU07Z0JBQ3BDLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyx1REFBdUQsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsb0JBQW9CO1FBQ3pCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDdkMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFL0MsK0JBQStCO1lBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzdDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQy9ELE9BQU8sVUFBVSxDQUFDO2dCQUNwQixDQUFDO2dCQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNDLElBQUksU0FBUyxLQUFLLFVBQVU7b0JBQUUsTUFBTTtnQkFDcEMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQywwQkFBMEI7UUFDL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFeEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssS0FBSztnQkFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxPQUFPO29CQUNaLENBQUMsQ0FBQyw4QkFBOEIsT0FBTyxFQUFFO29CQUN6QyxDQUFDLENBQUMseUJBQXlCLENBQUM7WUFFaEMsS0FBSyxLQUFLO2dCQUNSLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLE9BQU87b0JBQ1osQ0FBQyxDQUFDLHVCQUF1QixPQUFPLEVBQUU7b0JBQ2xDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztZQUV6QjtnQkFDRSxPQUFPLDJCQUEyQixDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsVUFBVTtRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluc3RhbGxhdGlvbiBkZXRlY3Rpb24gdXRpbGl0aWVzXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgZnJvbSBucG0gb3IgZ2l0IGluc3RhbGxhdGlvblxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVwZGF0ZUNvbmZpZ01hbmFnZXIgfSBmcm9tICcuLi9jb25maWcvdXBkYXRlQ29uZmlnLmpzJztcblxuZXhwb3J0IHR5cGUgSW5zdGFsbGF0aW9uVHlwZSA9ICducG0nIHwgJ2dpdCcgfCAndW5rbm93bic7XG5cbmV4cG9ydCBjbGFzcyBJbnN0YWxsYXRpb25EZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIGNhY2hlZFR5cGU6IEluc3RhbGxhdGlvblR5cGUgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8vIE1heGltdW0gZGlyZWN0b3J5IGxldmVscyB0byBzZWFyY2ggdXB3YXJkIGZvciAuZ2l0IGRpcmVjdG9yeVxuICBwcml2YXRlIHN0YXRpYyBnZXQgTUFYX1NFQVJDSF9ERVBUSCgpOiBudW1iZXIge1xuICAgIHJldHVybiBVcGRhdGVDb25maWdNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0TWF4U2VhcmNoRGVwdGgoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIERldGVjdCB0aGUgaW5zdGFsbGF0aW9uIHR5cGUgKG5wbSBnbG9iYWwsIGdpdCBjbG9uZSwgb3IgdW5rbm93bilcbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YWxsYXRpb25UeXBlKCk6IEluc3RhbGxhdGlvblR5cGUge1xuICAgIC8vIFJldHVybiBjYWNoZWQgcmVzdWx0IGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmNhY2hlZFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZFR5cGU7XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGlzIGZpbGUgaXMgbG9jYXRlZFxuICAgICAgY29uc3QgY3VycmVudEZpbGVVcmwgPSBpbXBvcnQubWV0YS51cmw7XG4gICAgICBjb25zdCBjdXJyZW50RmlsZVBhdGggPSBmaWxlVVJMVG9QYXRoKGN1cnJlbnRGaWxlVXJsKTtcbiAgICAgIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnRGaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFJlc29sdmUgc3ltbGlua3MgdG8gZ2V0IHRoZSByZWFsIHBhdGhcbiAgICAgIHRyeSB7XG4gICAgICAgIGN1cnJlbnREaXIgPSBmcy5yZWFscGF0aFN5bmMoY3VycmVudERpcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiByZWFscGF0aCBmYWlscywgY29udGludWUgd2l0aCBvcmlnaW5hbCBwYXRoXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0luc3RhbGxhdGlvbkRldGVjdG9yXSBDb3VsZCBub3QgcmVzb2x2ZSByZWFsIHBhdGgsIHVzaW5nIG9yaWdpbmFsJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGluIGEgbm9kZV9tb2R1bGVzIGRpcmVjdG9yeSAobnBtIGluc3RhbGxhdGlvbilcbiAgICAgIC8vIFVzZSBwYXRoIHNlcGFyYXRvciB0byBlbnN1cmUgd2UgbWF0Y2ggdGhlIGV4YWN0IHBhY2thZ2UgbmFtZVxuICAgICAgY29uc3QgbnBtUGF0dGVybiA9IHBhdGguc2VwICsgcGF0aC5qb2luKCdub2RlX21vZHVsZXMnLCAnQGRvbGxob3VzZW1jcCcsICdtY3Atc2VydmVyJykgKyBwYXRoLnNlcDtcbiAgICAgIGlmIChjdXJyZW50RGlyLmluY2x1ZGVzKG5wbVBhdHRlcm4pKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0luc3RhbGxhdGlvbkRldGVjdG9yXSBEZXRlY3RlZCBucG0gaW5zdGFsbGF0aW9uJyk7XG4gICAgICAgIHRoaXMuY2FjaGVkVHlwZSA9ICducG0nO1xuICAgICAgICByZXR1cm4gJ25wbSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGZvciAuZ2l0IGRpcmVjdG9yeSAoZ2l0IGluc3RhbGxhdGlvbilcbiAgICAgIC8vIFNlYXJjaCB1cCBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgICBsZXQgc2VhcmNoRGlyID0gY3VycmVudERpcjtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5NQVhfU0VBUkNIX0RFUFRIOyBpKyspIHtcbiAgICAgICAgY29uc3QgZ2l0RGlyID0gcGF0aC5qb2luKHNlYXJjaERpciwgJy5naXQnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhnaXREaXIpICYmIGZzLnN0YXRTeW5jKGdpdERpcikuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdbSW5zdGFsbGF0aW9uRGV0ZWN0b3JdIERldGVjdGVkIGdpdCBpbnN0YWxsYXRpb24nKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVHlwZSA9ICdnaXQnO1xuICAgICAgICAgICAgcmV0dXJuICdnaXQnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgZXJyb3JzIGFuZCBjb250aW51ZSBzZWFyY2hpbmdcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKHNlYXJjaERpcik7XG4gICAgICAgIGlmIChwYXJlbnREaXIgPT09IHNlYXJjaERpcikge1xuICAgICAgICAgIC8vIFJlYWNoZWQgcm9vdCBkaXJlY3RvcnlcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzZWFyY2hEaXIgPSBwYXJlbnREaXI7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5zdGFsbGF0aW9uRGV0ZWN0b3JdIENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGF0aW9uIHR5cGUnKTtcbiAgICAgIHRoaXMuY2FjaGVkVHlwZSA9ICd1bmtub3duJztcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW0luc3RhbGxhdGlvbkRldGVjdG9yXSBFcnJvciBkZXRlY3RpbmcgaW5zdGFsbGF0aW9uIHR5cGU6JywgZXJyb3IpO1xuICAgICAgdGhpcy5jYWNoZWRUeXBlID0gJ3Vua25vd24nO1xuICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5wbSBnbG9iYWwgaW5zdGFsbGF0aW9uIHBhdGggaWYgcnVubmluZyBmcm9tIG5wbVxuICAgKi9cbiAgc3RhdGljIGdldE5wbUdsb2JhbFBhdGgoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZ2V0SW5zdGFsbGF0aW9uVHlwZSgpICE9PSAnbnBtJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50RmlsZVVybCA9IGltcG9ydC5tZXRhLnVybDtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWxlUGF0aCA9IGZpbGVVUkxUb1BhdGgoY3VycmVudEZpbGVVcmwpO1xuICAgICAgbGV0IGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudEZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgcm9vdCBvZiB0aGUgbnBtIHBhY2thZ2VcbiAgICAgIHdoaWxlIChjdXJyZW50RGlyLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJykpIHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50RGlyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICAgICAgaWYgKHBhcmVudERpciA9PT0gY3VycmVudERpcikgYnJlYWs7XG4gICAgICAgIGN1cnJlbnREaXIgPSBwYXJlbnREaXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW0luc3RhbGxhdGlvbkRldGVjdG9yXSBFcnJvciBmaW5kaW5nIG5wbSBnbG9iYWwgcGF0aDonLCBlcnJvcik7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBnaXQgcmVwb3NpdG9yeSByb290IHBhdGggaWYgcnVubmluZyBmcm9tIGdpdFxuICAgKi9cbiAgc3RhdGljIGdldEdpdFJlcG9zaXRvcnlQYXRoKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmdldEluc3RhbGxhdGlvblR5cGUoKSAhPT0gJ2dpdCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3VycmVudEZpbGVVcmwgPSBpbXBvcnQubWV0YS51cmw7XG4gICAgICBjb25zdCBjdXJyZW50RmlsZVBhdGggPSBmaWxlVVJMVG9QYXRoKGN1cnJlbnRGaWxlVXJsKTtcbiAgICAgIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnRGaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFNlYXJjaCB1cCBmb3IgLmdpdCBkaXJlY3RvcnlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICBjb25zdCBnaXREaXIgPSBwYXRoLmpvaW4oY3VycmVudERpciwgJy5naXQnKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2l0RGlyKSAmJiBmcy5zdGF0U3luYyhnaXREaXIpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgICBpZiAocGFyZW50RGlyID09PSBjdXJyZW50RGlyKSBicmVhaztcbiAgICAgICAgY3VycmVudERpciA9IHBhcmVudERpcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbSW5zdGFsbGF0aW9uRGV0ZWN0b3JdIEVycm9yIGZpbmRpbmcgZ2l0IHJlcG9zaXRvcnkgcGF0aDonLCBlcnJvcik7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGluc3RhbGxhdGlvblxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbGxhdGlvbkRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0SW5zdGFsbGF0aW9uVHlwZSgpO1xuICAgIFxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbnBtJzpcbiAgICAgICAgY29uc3QgbnBtUGF0aCA9IHRoaXMuZ2V0TnBtR2xvYmFsUGF0aCgpO1xuICAgICAgICByZXR1cm4gbnBtUGF0aCBcbiAgICAgICAgICA/IGBucG0gZ2xvYmFsIGluc3RhbGxhdGlvbiBhdCAke25wbVBhdGh9YFxuICAgICAgICAgIDogJ25wbSBnbG9iYWwgaW5zdGFsbGF0aW9uJztcbiAgICAgICAgICBcbiAgICAgIGNhc2UgJ2dpdCc6XG4gICAgICAgIGNvbnN0IGdpdFBhdGggPSB0aGlzLmdldEdpdFJlcG9zaXRvcnlQYXRoKCk7XG4gICAgICAgIHJldHVybiBnaXRQYXRoXG4gICAgICAgICAgPyBgZ2l0IGluc3RhbGxhdGlvbiBhdCAke2dpdFBhdGh9YFxuICAgICAgICAgIDogJ2dpdCBpbnN0YWxsYXRpb24nO1xuICAgICAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duIGluc3RhbGxhdGlvbiB0eXBlJztcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgY2FjaGVkIGluc3RhbGxhdGlvbiB0eXBlIChtYWlubHkgZm9yIHRlc3RpbmcpXG4gICAqL1xuICBzdGF0aWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlZFR5cGUgPSBudWxsO1xuICB9XG59Il19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dollhousemcp/mcp-server",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.2",
|
|
4
4
|
"description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
"mcp-server": "dist/index.js"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
|
+
"prebuild": "node scripts/generate-version.js",
|
|
12
13
|
"build": "tsc",
|
|
13
14
|
"start": "node dist/index.js",
|
|
14
15
|
"dev": "tsx watch src/index.ts",
|
|
15
16
|
"clean": "rm -rf dist",
|
|
16
17
|
"rebuild": "npm run clean && npm run build",
|
|
17
18
|
"setup": "npm install && npm run build",
|
|
19
|
+
"prepublishOnly": "BUILD_TYPE=npm npm run build",
|
|
18
20
|
"update:check": "echo 'Use check_for_updates MCP tool for interactive update checking'",
|
|
19
21
|
"update:pull": "git pull origin main && npm install && npm run build",
|
|
20
22
|
"update:backup": "cp -r . .backup-$(date +%s)",
|