@dollhousemcp/mcp-server 1.5.2 → 1.6.0
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/CHANGELOG.md +56 -0
- package/README.md +494 -111
- package/data/agents/code-reviewer.md +8 -1
- package/data/agents/research-assistant.md +8 -1
- package/data/agents/task-manager.md +8 -1
- package/data/ensembles/business-advisor.md +8 -1
- package/data/ensembles/creative-studio.md +8 -1
- package/data/ensembles/development-team.md +8 -1
- package/data/ensembles/security-analysis-team.md +8 -1
- package/data/memories/conversation-history.md +8 -1
- package/data/memories/learning-progress.md +8 -1
- package/data/memories/project-context.md +8 -1
- package/data/personas/business-consultant.md +8 -1
- package/data/personas/creative-writer.md +8 -1
- package/data/personas/debug-detective.md +8 -1
- package/data/personas/eli5-explainer.md +8 -1
- package/data/personas/security-analyst.md +8 -1
- package/data/personas/technical-analyst.md +8 -1
- package/data/skills/code-review.md +8 -1
- package/data/skills/creative-writing.md +8 -1
- package/data/skills/data-analysis.md +8 -1
- package/data/skills/penetration-testing.md +8 -1
- package/data/skills/research.md +8 -1
- package/data/skills/threat-modeling.md +8 -1
- package/data/skills/translation.md +8 -1
- package/data/templates/code-documentation.md +8 -1
- package/data/templates/email-professional.md +8 -1
- package/data/templates/meeting-notes.md +8 -1
- package/data/templates/penetration-test-report.md +8 -1
- package/data/templates/project-brief.md +8 -1
- package/data/templates/report-executive.md +8 -1
- package/data/templates/security-vulnerability-report.md +8 -1
- package/data/templates/threat-assessment-report.md +8 -1
- package/dist/auth/GitHubAuthManager.d.ts +6 -1
- package/dist/auth/GitHubAuthManager.d.ts.map +1 -1
- package/dist/auth/GitHubAuthManager.js +45 -18
- package/dist/benchmarks/IndexPerformanceBenchmark.d.ts +98 -0
- package/dist/benchmarks/IndexPerformanceBenchmark.d.ts.map +1 -0
- package/dist/benchmarks/IndexPerformanceBenchmark.js +531 -0
- package/dist/cache/CollectionCache.d.ts.map +1 -1
- package/dist/cache/CollectionCache.js +13 -3
- package/dist/cache/CollectionIndexCache.d.ts +77 -0
- package/dist/cache/CollectionIndexCache.d.ts.map +1 -0
- package/dist/cache/CollectionIndexCache.js +349 -0
- package/dist/cache/LRUCache.d.ts +93 -0
- package/dist/cache/LRUCache.d.ts.map +1 -0
- package/dist/cache/LRUCache.js +299 -0
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +2 -1
- package/dist/collection/CollectionBrowser.d.ts +21 -1
- package/dist/collection/CollectionBrowser.d.ts.map +1 -1
- package/dist/collection/CollectionBrowser.js +130 -10
- package/dist/collection/CollectionIndexManager.d.ts +151 -0
- package/dist/collection/CollectionIndexManager.d.ts.map +1 -0
- package/dist/collection/CollectionIndexManager.js +499 -0
- package/dist/collection/CollectionSearch.d.ts +55 -0
- package/dist/collection/CollectionSearch.d.ts.map +1 -1
- package/dist/collection/CollectionSearch.js +338 -13
- package/dist/collection/CollectionSeeder.d.ts.map +1 -1
- package/dist/collection/CollectionSeeder.js +38 -1
- package/dist/collection/ElementInstaller.d.ts +31 -0
- package/dist/collection/ElementInstaller.d.ts.map +1 -1
- package/dist/collection/ElementInstaller.js +77 -15
- package/dist/collection/PersonaSubmitter.d.ts +1 -1
- package/dist/collection/PersonaSubmitter.d.ts.map +1 -1
- package/dist/collection/PersonaSubmitter.js +2 -2
- package/dist/collection/index.d.ts +1 -0
- package/dist/collection/index.d.ts.map +1 -1
- package/dist/collection/index.js +2 -1
- package/dist/config/ConfigManager.d.ts +78 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +216 -0
- package/dist/config/element-types.d.ts +135 -0
- package/dist/config/element-types.d.ts.map +1 -0
- package/dist/config/element-types.js +108 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -1
- package/dist/config/portfolio-constants.d.ts +83 -0
- package/dist/config/portfolio-constants.d.ts.map +1 -0
- package/dist/config/portfolio-constants.js +99 -0
- package/dist/elements/BaseElement.d.ts +14 -2
- package/dist/elements/BaseElement.d.ts.map +1 -1
- package/dist/elements/BaseElement.js +88 -6
- package/dist/elements/agents/Agent.d.ts +10 -1
- package/dist/elements/agents/Agent.d.ts.map +1 -1
- package/dist/elements/agents/Agent.js +66 -19
- package/dist/elements/agents/AgentManager.d.ts +2 -0
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +12 -10
- package/dist/elements/skills/Skill.d.ts +10 -1
- package/dist/elements/skills/Skill.d.ts.map +1 -1
- package/dist/elements/skills/Skill.js +40 -3
- package/dist/elements/skills/SkillManager.d.ts +1 -0
- package/dist/elements/skills/SkillManager.d.ts.map +1 -1
- package/dist/elements/skills/SkillManager.js +10 -4
- package/dist/elements/templates/Template.d.ts +10 -1
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +35 -18
- package/dist/elements/templates/TemplateManager.d.ts +1 -1
- package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
- package/dist/elements/templates/TemplateManager.js +6 -5
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/index.barrel.d.ts +1 -2
- package/dist/index.barrel.d.ts.map +1 -1
- package/dist/index.barrel.js +2 -4
- package/dist/index.d.ts +143 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1883 -310
- package/dist/persona/PersonaElement.d.ts +10 -0
- package/dist/persona/PersonaElement.d.ts.map +1 -1
- package/dist/persona/PersonaElement.js +55 -32
- package/dist/persona/PersonaElementManager.d.ts.map +1 -1
- package/dist/persona/PersonaElementManager.js +13 -11
- package/dist/persona/PersonaLoader.d.ts.map +1 -1
- package/dist/persona/PersonaLoader.js +8 -2
- package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -1
- package/dist/persona/export-import/PersonaImporter.js +24 -5
- package/dist/persona/export-import/PersonaSharer.d.ts +21 -0
- package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -1
- package/dist/persona/export-import/PersonaSharer.js +198 -22
- package/dist/portfolio/DefaultElementProvider.d.ts +90 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +499 -7
- package/dist/portfolio/GitHubPortfolioIndexer.d.ts +129 -0
- package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -0
- package/dist/portfolio/GitHubPortfolioIndexer.js +475 -0
- package/dist/portfolio/MigrationManager.d.ts.map +1 -1
- package/dist/portfolio/MigrationManager.js +136 -3
- package/dist/portfolio/PortfolioIndexManager.d.ts +130 -0
- package/dist/portfolio/PortfolioIndexManager.d.ts.map +1 -0
- package/dist/portfolio/PortfolioIndexManager.js +478 -0
- package/dist/portfolio/PortfolioManager.d.ts +5 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +61 -20
- package/dist/portfolio/PortfolioRepoManager.d.ts +75 -0
- package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -0
- package/dist/portfolio/PortfolioRepoManager.js +337 -0
- package/dist/portfolio/UnifiedIndexManager.d.ts +388 -0
- package/dist/portfolio/UnifiedIndexManager.d.ts.map +1 -0
- package/dist/portfolio/UnifiedIndexManager.js +1434 -0
- package/dist/portfolio/index.d.ts +15 -0
- package/dist/portfolio/index.d.ts.map +1 -0
- package/dist/portfolio/index.js +15 -0
- package/dist/portfolio/types.d.ts +7 -0
- package/dist/portfolio/types.d.ts.map +1 -1
- package/dist/portfolio/types.js +6 -1
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +50 -48
- package/dist/security/audit/SecurityAuditor.d.ts.map +1 -1
- package/dist/security/audit/SecurityAuditor.js +17 -9
- package/dist/security/audit/config/suppressions.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +19 -3
- package/dist/security/contentValidator.d.ts +2 -0
- package/dist/security/contentValidator.d.ts.map +1 -1
- package/dist/security/contentValidator.js +115 -4
- package/dist/security/secureYamlParser.d.ts +1 -0
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +29 -7
- package/dist/security/securityMonitor.d.ts +1 -1
- package/dist/security/securityMonitor.d.ts.map +1 -1
- package/dist/security/securityMonitor.js +1 -1
- package/dist/security/tokenManager.d.ts +1 -1
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +30 -10
- package/dist/server/ServerSetup.d.ts +22 -2
- package/dist/server/ServerSetup.d.ts.map +1 -1
- package/dist/server/ServerSetup.js +77 -12
- package/dist/server/tools/AuthTools.d.ts.map +1 -1
- package/dist/server/tools/AuthTools.js +33 -1
- package/dist/server/tools/BuildInfoTools.d.ts +25 -0
- package/dist/server/tools/BuildInfoTools.d.ts.map +1 -0
- package/dist/server/tools/BuildInfoTools.js +36 -0
- package/dist/server/tools/CollectionTools.d.ts.map +1 -1
- package/dist/server/tools/CollectionTools.js +55 -46
- package/dist/server/tools/ConfigTools.d.ts.map +1 -1
- package/dist/server/tools/ConfigTools.js +29 -1
- package/dist/server/tools/PersonaTools.d.ts +4 -2
- package/dist/server/tools/PersonaTools.d.ts.map +1 -1
- package/dist/server/tools/PersonaTools.js +5 -152
- package/dist/server/tools/PortfolioTools.d.ts +12 -0
- package/dist/server/tools/PortfolioTools.d.ts.map +1 -0
- package/dist/server/tools/PortfolioTools.js +221 -0
- package/dist/server/tools/index.d.ts +3 -1
- package/dist/server/tools/index.d.ts.map +1 -1
- package/dist/server/tools/index.js +4 -2
- package/dist/server/types.d.ts +40 -5
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/dist/services/BuildInfoService.d.ts +84 -0
- package/dist/services/BuildInfoService.d.ts.map +1 -0
- package/dist/services/BuildInfoService.js +271 -0
- package/dist/tools/portfolio/PortfolioElementAdapter.d.ts +54 -0
- package/dist/tools/portfolio/PortfolioElementAdapter.d.ts.map +1 -0
- package/dist/tools/portfolio/PortfolioElementAdapter.js +229 -0
- package/dist/tools/portfolio/submitToPortfolioTool.d.ts +164 -0
- package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -0
- package/dist/tools/portfolio/submitToPortfolioTool.js +1523 -0
- package/dist/tools/portfolio/types.d.ts +41 -0
- package/dist/tools/portfolio/types.d.ts.map +1 -0
- package/dist/tools/portfolio/types.js +15 -0
- package/dist/types/collection.d.ts +51 -0
- package/dist/types/collection.d.ts.map +1 -1
- package/dist/types/collection.js +1 -1
- package/dist/utils/EarlyTerminationSearch.d.ts +41 -0
- package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -0
- package/dist/utils/EarlyTerminationSearch.js +164 -0
- package/dist/utils/ErrorHandler.d.ts +86 -0
- package/dist/utils/ErrorHandler.d.ts.map +1 -0
- package/dist/utils/ErrorHandler.js +201 -0
- package/dist/utils/FileDiscoveryUtil.d.ts +53 -0
- package/dist/utils/FileDiscoveryUtil.d.ts.map +1 -0
- package/dist/utils/FileDiscoveryUtil.js +169 -0
- package/dist/utils/GitHubRateLimiter.d.ts +88 -0
- package/dist/utils/GitHubRateLimiter.d.ts.map +1 -0
- package/dist/utils/GitHubRateLimiter.js +315 -0
- package/dist/utils/PerformanceMonitor.d.ts +134 -0
- package/dist/utils/PerformanceMonitor.d.ts.map +1 -0
- package/dist/utils/PerformanceMonitor.js +347 -0
- package/dist/utils/RateLimiter.d.ts.map +1 -0
- package/dist/utils/RateLimiter.js +172 -0
- package/dist/utils/SecureDownloader.d.ts +241 -0
- package/dist/utils/SecureDownloader.d.ts.map +1 -0
- package/dist/utils/SecureDownloader.js +759 -0
- package/dist/utils/ToolCache.d.ts +82 -0
- package/dist/utils/ToolCache.d.ts.map +1 -0
- package/dist/utils/ToolCache.js +196 -0
- package/dist/utils/errorCodes.d.ts +136 -0
- package/dist/utils/errorCodes.d.ts.map +1 -0
- package/dist/utils/errorCodes.js +87 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/installation.d.ts +1 -1
- package/dist/utils/installation.d.ts.map +1 -1
- package/dist/utils/installation.js +9 -8
- package/dist/utils/searchUtils.d.ts +31 -0
- package/dist/utils/searchUtils.d.ts.map +1 -1
- package/dist/utils/searchUtils.js +62 -1
- package/package.json +17 -7
- package/dist/config/updateConfig.d.ts +0 -84
- package/dist/config/updateConfig.d.ts.map +0 -1
- package/dist/config/updateConfig.js +0 -148
- package/dist/server/tools/UpdateTools.d.ts +0 -10
- package/dist/server/tools/UpdateTools.d.ts.map +0 -1
- package/dist/server/tools/UpdateTools.js +0 -85
- package/dist/update/BackupManager.d.ts +0 -63
- package/dist/update/BackupManager.d.ts.map +0 -1
- package/dist/update/BackupManager.js +0 -370
- package/dist/update/DependencyChecker.d.ts +0 -41
- package/dist/update/DependencyChecker.d.ts.map +0 -1
- package/dist/update/DependencyChecker.js +0 -132
- package/dist/update/RateLimiter.d.ts.map +0 -1
- package/dist/update/RateLimiter.js +0 -172
- package/dist/update/SignatureVerifier.d.ts +0 -71
- package/dist/update/SignatureVerifier.d.ts.map +0 -1
- package/dist/update/SignatureVerifier.js +0 -214
- package/dist/update/UpdateChecker.d.ts +0 -132
- package/dist/update/UpdateChecker.d.ts.map +0 -1
- package/dist/update/UpdateChecker.js +0 -506
- package/dist/update/UpdateManager.d.ts +0 -60
- package/dist/update/UpdateManager.d.ts.map +0 -1
- package/dist/update/UpdateManager.js +0 -730
- package/dist/update/VersionManager.d.ts +0 -31
- package/dist/update/VersionManager.d.ts.map +0 -1
- package/dist/update/VersionManager.js +0 -181
- package/dist/update/index.d.ts +0 -9
- package/dist/update/index.d.ts.map +0 -1
- package/dist/update/index.js +0 -9
- /package/dist/{update → utils}/RateLimiter.d.ts +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConfigManager - Thread-safe singleton for persistent configuration
|
|
3
|
+
*
|
|
4
|
+
* Handles OAuth client ID storage for Claude Desktop integration.
|
|
5
|
+
* Stores config in ~/.dollhouse/config.json with proper permissions.
|
|
6
|
+
* Prefers environment variables over config file values.
|
|
7
|
+
*/
|
|
8
|
+
interface ConfigData {
|
|
9
|
+
version: string;
|
|
10
|
+
oauth?: {
|
|
11
|
+
githubClientId?: string;
|
|
12
|
+
};
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
}
|
|
15
|
+
export declare class ConfigManager {
|
|
16
|
+
private static instance;
|
|
17
|
+
private static instanceLock;
|
|
18
|
+
private configDir;
|
|
19
|
+
private configPath;
|
|
20
|
+
private config;
|
|
21
|
+
private constructor();
|
|
22
|
+
/**
|
|
23
|
+
* Thread-safe singleton instance getter
|
|
24
|
+
*/
|
|
25
|
+
static getInstance(): ConfigManager;
|
|
26
|
+
/**
|
|
27
|
+
* Attempt to repair file permissions if they're incorrect
|
|
28
|
+
* This helps with error recovery in permission-related issues
|
|
29
|
+
*/
|
|
30
|
+
private repairPermissions;
|
|
31
|
+
/**
|
|
32
|
+
* Load configuration from file system
|
|
33
|
+
*/
|
|
34
|
+
loadConfig(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Get GitHub OAuth client ID
|
|
37
|
+
* Environment variable takes precedence over config file
|
|
38
|
+
*/
|
|
39
|
+
getGitHubClientId(): string | null;
|
|
40
|
+
/**
|
|
41
|
+
* Set GitHub OAuth client ID in config file
|
|
42
|
+
*/
|
|
43
|
+
setGitHubClientId(clientId: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Get a copy of the current configuration
|
|
46
|
+
* @returns A defensive copy of the configuration object
|
|
47
|
+
*/
|
|
48
|
+
getConfig(): ConfigData;
|
|
49
|
+
/**
|
|
50
|
+
* Update the entire configuration
|
|
51
|
+
* @param newConfig The new configuration to set
|
|
52
|
+
*/
|
|
53
|
+
updateConfig(newConfig: ConfigData): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Validate GitHub OAuth client ID format
|
|
56
|
+
* Client IDs start with "Ov23li" followed by at least 14 alphanumeric characters
|
|
57
|
+
*
|
|
58
|
+
* @param clientId - The client ID to validate
|
|
59
|
+
* @returns true if valid, false otherwise
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ConfigManager.validateClientId("Ov23liABCDEFGHIJKLMN123456") // true
|
|
63
|
+
* ConfigManager.validateClientId("invalid") // false
|
|
64
|
+
* ConfigManager.validateClientId("Ov23li") // false (too short)
|
|
65
|
+
* ConfigManager.validateClientId("Xv23liABCDEFGHIJKLMN") // false (wrong prefix)
|
|
66
|
+
*/
|
|
67
|
+
static validateClientId(clientId: any): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Ensure config directory exists with proper permissions
|
|
70
|
+
*/
|
|
71
|
+
private ensureConfigDirectory;
|
|
72
|
+
/**
|
|
73
|
+
* Save config using atomic file writes
|
|
74
|
+
*/
|
|
75
|
+
private saveConfig;
|
|
76
|
+
}
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=ConfigManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA8B;IACrD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAkB;IAE7C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO;IAWP;;OAEG;WACW,WAAW,IAAI,aAAa;IAyB1C;;;OAGG;YACW,iBAAiB;IAkB/B;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCxC;;;OAGG;IACI,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAWzC;;OAEG;IACU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/D;;;OAGG;IACI,SAAS,IAAI,UAAU;IAI9B;;;OAGG;IACU,YAAY,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D;;;;;;;;;;;;OAYG;WACW,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO;IAUtD;;OAEG;YACW,qBAAqB;IAWnC;;OAEG;YACW,UAAU;CAuBzB"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConfigManager - Thread-safe singleton for persistent configuration
|
|
3
|
+
*
|
|
4
|
+
* Handles OAuth client ID storage for Claude Desktop integration.
|
|
5
|
+
* Stores config in ~/.dollhouse/config.json with proper permissions.
|
|
6
|
+
* Prefers environment variables over config file values.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs/promises';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import * as os from 'os';
|
|
11
|
+
export class ConfigManager {
|
|
12
|
+
static instance = null;
|
|
13
|
+
static instanceLock = false;
|
|
14
|
+
configDir;
|
|
15
|
+
configPath;
|
|
16
|
+
config;
|
|
17
|
+
constructor() {
|
|
18
|
+
// Initialize paths
|
|
19
|
+
this.configDir = path.join(os.homedir(), '.dollhouse');
|
|
20
|
+
this.configPath = path.join(this.configDir, 'config.json');
|
|
21
|
+
// Initialize with default config
|
|
22
|
+
this.config = {
|
|
23
|
+
version: '1.0.0'
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Thread-safe singleton instance getter
|
|
28
|
+
*/
|
|
29
|
+
static getInstance() {
|
|
30
|
+
if (ConfigManager.instance) {
|
|
31
|
+
return ConfigManager.instance;
|
|
32
|
+
}
|
|
33
|
+
// Simple locking mechanism to prevent race conditions
|
|
34
|
+
if (ConfigManager.instanceLock) {
|
|
35
|
+
// Wait for lock to be released, then return the instance
|
|
36
|
+
while (ConfigManager.instanceLock && !ConfigManager.instance) {
|
|
37
|
+
// In a real scenario with async operations, this would be more sophisticated
|
|
38
|
+
// But for the test cases, this simple approach works
|
|
39
|
+
}
|
|
40
|
+
return ConfigManager.instance;
|
|
41
|
+
}
|
|
42
|
+
ConfigManager.instanceLock = true;
|
|
43
|
+
if (!ConfigManager.instance) {
|
|
44
|
+
ConfigManager.instance = new ConfigManager();
|
|
45
|
+
}
|
|
46
|
+
ConfigManager.instanceLock = false;
|
|
47
|
+
return ConfigManager.instance;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Attempt to repair file permissions if they're incorrect
|
|
51
|
+
* This helps with error recovery in permission-related issues
|
|
52
|
+
*/
|
|
53
|
+
async repairPermissions() {
|
|
54
|
+
try {
|
|
55
|
+
// Try to fix directory permissions
|
|
56
|
+
await fs.chmod(this.configDir, 0o700);
|
|
57
|
+
// Try to fix file permissions if it exists
|
|
58
|
+
try {
|
|
59
|
+
await fs.access(this.configPath);
|
|
60
|
+
await fs.chmod(this.configPath, 0o600);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// File doesn't exist, that's OK
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
// Log but don't fail - this is best-effort recovery
|
|
68
|
+
// We don't have a logger here, so we'll silently continue
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Load configuration from file system
|
|
73
|
+
*/
|
|
74
|
+
async loadConfig() {
|
|
75
|
+
try {
|
|
76
|
+
// Try to read existing config file
|
|
77
|
+
const configContent = await fs.readFile(this.configPath, 'utf-8');
|
|
78
|
+
try {
|
|
79
|
+
this.config = JSON.parse(configContent);
|
|
80
|
+
}
|
|
81
|
+
catch (parseError) {
|
|
82
|
+
// Handle corrupted JSON - create new config
|
|
83
|
+
console.warn('Config file corrupted, creating new config');
|
|
84
|
+
this.config = { version: '1.0.0' };
|
|
85
|
+
await this.saveConfig();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (error.code === 'ENOENT') {
|
|
90
|
+
// Config file doesn't exist, create directory and file
|
|
91
|
+
await this.ensureConfigDirectory();
|
|
92
|
+
await this.saveConfig();
|
|
93
|
+
}
|
|
94
|
+
else if (error.code === 'EACCES' || error.code === 'EPERM') {
|
|
95
|
+
// Permission denied - attempt repair
|
|
96
|
+
await this.repairPermissions();
|
|
97
|
+
// Try once more after repair attempt
|
|
98
|
+
try {
|
|
99
|
+
const configContent = await fs.readFile(this.configPath, 'utf-8');
|
|
100
|
+
this.config = JSON.parse(configContent);
|
|
101
|
+
}
|
|
102
|
+
catch (retryError) {
|
|
103
|
+
// Still failing, throw original error with helpful message
|
|
104
|
+
throw new Error(`Permission denied accessing config at ${this.configPath}. ` +
|
|
105
|
+
`Please check file permissions or run with appropriate privileges.`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get GitHub OAuth client ID
|
|
115
|
+
* Environment variable takes precedence over config file
|
|
116
|
+
*/
|
|
117
|
+
getGitHubClientId() {
|
|
118
|
+
// Check environment variable first
|
|
119
|
+
const envClientId = process.env.DOLLHOUSE_GITHUB_CLIENT_ID;
|
|
120
|
+
if (envClientId) {
|
|
121
|
+
return envClientId;
|
|
122
|
+
}
|
|
123
|
+
// Fall back to config file
|
|
124
|
+
return this.config.oauth?.githubClientId || null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Set GitHub OAuth client ID in config file
|
|
128
|
+
*/
|
|
129
|
+
async setGitHubClientId(clientId) {
|
|
130
|
+
if (!ConfigManager.validateClientId(clientId)) {
|
|
131
|
+
throw new Error(`Invalid GitHub client ID format. Expected format: Ov23li followed by at least 14 alphanumeric characters (e.g., Ov23liABCDEFGHIJKLMN)`);
|
|
132
|
+
}
|
|
133
|
+
// Ensure oauth object exists
|
|
134
|
+
if (!this.config.oauth) {
|
|
135
|
+
this.config.oauth = {};
|
|
136
|
+
}
|
|
137
|
+
this.config.oauth.githubClientId = clientId;
|
|
138
|
+
await this.saveConfig();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get a copy of the current configuration
|
|
142
|
+
* @returns A defensive copy of the configuration object
|
|
143
|
+
*/
|
|
144
|
+
getConfig() {
|
|
145
|
+
return { ...this.config };
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Update the entire configuration
|
|
149
|
+
* @param newConfig The new configuration to set
|
|
150
|
+
*/
|
|
151
|
+
async updateConfig(newConfig) {
|
|
152
|
+
this.config = { ...newConfig };
|
|
153
|
+
await this.saveConfig();
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Validate GitHub OAuth client ID format
|
|
157
|
+
* Client IDs start with "Ov23li" followed by at least 14 alphanumeric characters
|
|
158
|
+
*
|
|
159
|
+
* @param clientId - The client ID to validate
|
|
160
|
+
* @returns true if valid, false otherwise
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ConfigManager.validateClientId("Ov23liABCDEFGHIJKLMN123456") // true
|
|
164
|
+
* ConfigManager.validateClientId("invalid") // false
|
|
165
|
+
* ConfigManager.validateClientId("Ov23li") // false (too short)
|
|
166
|
+
* ConfigManager.validateClientId("Xv23liABCDEFGHIJKLMN") // false (wrong prefix)
|
|
167
|
+
*/
|
|
168
|
+
static validateClientId(clientId) {
|
|
169
|
+
if (typeof clientId !== 'string' || !clientId) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
// GitHub OAuth client IDs follow the pattern: Ov23li[A-Za-z0-9]{14,}
|
|
173
|
+
const clientIdPattern = /^Ov23li[A-Za-z0-9]{14,}$/;
|
|
174
|
+
return clientIdPattern.test(clientId);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Ensure config directory exists with proper permissions
|
|
178
|
+
*/
|
|
179
|
+
async ensureConfigDirectory() {
|
|
180
|
+
try {
|
|
181
|
+
await fs.mkdir(this.configDir, { recursive: true, mode: 0o700 });
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
if (error.code === 'EACCES') {
|
|
185
|
+
throw new Error(`Permission denied creating config directory: ${this.configDir}`);
|
|
186
|
+
}
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Save config using atomic file writes
|
|
192
|
+
*/
|
|
193
|
+
async saveConfig() {
|
|
194
|
+
await this.ensureConfigDirectory();
|
|
195
|
+
// Use atomic write: write to temp file, then rename
|
|
196
|
+
const tempPath = this.configPath + '.tmp';
|
|
197
|
+
const configContent = JSON.stringify(this.config, null, 2);
|
|
198
|
+
try {
|
|
199
|
+
// Write to temp file first
|
|
200
|
+
await fs.writeFile(tempPath, configContent, { mode: 0o600 });
|
|
201
|
+
// Atomic rename
|
|
202
|
+
await fs.rename(tempPath, this.configPath);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
// Clean up temp file if it exists
|
|
206
|
+
try {
|
|
207
|
+
await fs.unlink(tempPath);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// Ignore cleanup errors
|
|
211
|
+
}
|
|
212
|
+
throw error;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvQ29uZmlnTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQVV6QixNQUFNLE9BQU8sYUFBYTtJQUNoQixNQUFNLENBQUMsUUFBUSxHQUF5QixJQUFJLENBQUM7SUFDN0MsTUFBTSxDQUFDLFlBQVksR0FBWSxLQUFLLENBQUM7SUFFckMsU0FBUyxDQUFTO0lBQ2xCLFVBQVUsQ0FBUztJQUNuQixNQUFNLENBQWE7SUFFM0I7UUFDRSxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUUzRCxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVztRQUN2QixJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsQ0FBQztRQUVELHNEQUFzRDtRQUN0RCxJQUFJLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMvQix5REFBeUQ7WUFDekQsT0FBTyxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3RCw2RUFBNkU7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LFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixrQ0FBa0M7WUFDbEMsSUFBSSxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHdCQUF3QjtZQUMxQixDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlnTWFuYWdlciAtIFRocmVhZC1zYWZlIHNpbmdsZXRvbiBmb3IgcGVyc2lzdGVudCBjb25maWd1cmF0aW9uXG4gKiBcbiAqIEhhbmRsZXMgT0F1dGggY2xpZW50IElEIHN0b3JhZ2UgZm9yIENsYXVkZSBEZXNrdG9wIGludGVncmF0aW9uLlxuICogU3RvcmVzIGNvbmZpZyBpbiB+Ly5kb2xsaG91c2UvY29uZmlnLmpzb24gd2l0aCBwcm9wZXIgcGVybWlzc2lvbnMuXG4gKiBQcmVmZXJzIGVudmlyb25tZW50IHZhcmlhYmxlcyBvdmVyIGNvbmZpZyBmaWxlIHZhbHVlcy5cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuXG5pbnRlcmZhY2UgQ29uZmlnRGF0YSB7XG4gIHZlcnNpb246IHN0cmluZztcbiAgb2F1dGg/OiB7XG4gICAgZ2l0aHViQ2xpZW50SWQ/OiBzdHJpbmc7XG4gIH07XG4gIFtrZXk6IHN0cmluZ106IGFueTsgLy8gQWxsb3cgdW5rbm93biBmaWVsZHMgdG8gYmUgcHJlc2VydmVkXG59XG5cbmV4cG9ydCBjbGFzcyBDb25maWdNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IENvbmZpZ01hbmFnZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VMb2NrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25maWdEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBjb25maWdQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgY29uZmlnOiBDb25maWdEYXRhO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBwYXRoc1xuICAgIHRoaXMuY29uZmlnRGlyID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5kb2xsaG91c2UnKTtcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSBwYXRoLmpvaW4odGhpcy5jb25maWdEaXIsICdjb25maWcuanNvbicpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgd2l0aCBkZWZhdWx0IGNvbmZpZ1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgdmVyc2lvbjogJzEuMC4wJ1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhyZWFkLXNhZmUgc2luZ2xldG9uIGluc3RhbmNlIGdldHRlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBDb25maWdNYW5hZ2VyIHtcbiAgICBpZiAoQ29uZmlnTWFuYWdlci5pbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIENvbmZpZ01hbmFnZXIuaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIGxvY2tpbmcgbWVjaGFuaXNtIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgaWYgKENvbmZpZ01hbmFnZXIuaW5zdGFuY2VMb2NrKSB7XG4gICAgICAvLyBXYWl0IGZvciBsb2NrIHRvIGJlIHJlbGVhc2VkLCB0aGVuIHJldHVybiB0aGUgaW5zdGFuY2VcbiAgICAgIHdoaWxlIChDb25maWdNYW5hZ2VyLmluc3RhbmNlTG9jayAmJiAhQ29uZmlnTWFuYWdlci5pbnN0YW5jZSkge1xuICAgICAgICAvLyBJbiBhIHJlYWwgc2NlbmFyaW8gd2l0aCBhc3luYyBvcGVyYXRpb25zLCB0aGlzIHdvdWxkIGJlIG1vcmUgc29waGlzdGljYXRlZFxuICAgICAgICAvLyBCdXQgZm9yIHRoZSB0ZXN0IGNhc2VzLCB0aGlzIHNpbXBsZSBhcHByb2FjaCB3b3Jrc1xuICAgICAgfVxuICAgICAgcmV0dXJuIENvbmZpZ01hbmFnZXIuaW5zdGFuY2UhO1xuICAgIH1cblxuICAgIENvbmZpZ01hbmFnZXIuaW5zdGFuY2VMb2NrID0gdHJ1ZTtcbiAgICBcbiAgICBpZiAoIUNvbmZpZ01hbmFnZXIuaW5zdGFuY2UpIHtcbiAgICAgIENvbmZpZ01hbmFnZXIuaW5zdGFuY2UgPSBuZXcgQ29uZmlnTWFuYWdlcigpO1xuICAgIH1cbiAgICBcbiAgICBDb25maWdNYW5hZ2VyLmluc3RhbmNlTG9jayA9IGZhbHNlO1xuICAgIHJldHVybiBDb25maWdNYW5hZ2VyLmluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gcmVwYWlyIGZpbGUgcGVybWlzc2lvbnMgaWYgdGhleSdyZSBpbmNvcnJlY3RcbiAgICogVGhpcyBoZWxwcyB3aXRoIGVycm9yIHJlY292ZXJ5IGluIHBlcm1pc3Npb24tcmVsYXRlZCBpc3N1ZXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVwYWlyUGVybWlzc2lvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBmaXggZGlyZWN0b3J5IHBlcm1pc3Npb25zXG4gICAgICBhd2FpdCBmcy5jaG1vZCh0aGlzLmNvbmZpZ0RpciwgMG83MDApO1xuICAgICAgXG4gICAgICAvLyBUcnkgdG8gZml4IGZpbGUgcGVybWlzc2lvbnMgaWYgaXQgZXhpc3RzXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModGhpcy5jb25maWdQYXRoKTtcbiAgICAgICAgYXdhaXQgZnMuY2htb2QodGhpcy5jb25maWdQYXRoLCAwbzYwMCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0LCB0aGF0J3MgT0tcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gTG9nIGJ1dCBkb24ndCBmYWlsIC0gdGhpcyBpcyBiZXN0LWVmZm9ydCByZWNvdmVyeVxuICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGxvZ2dlciBoZXJlLCBzbyB3ZSdsbCBzaWxlbnRseSBjb250aW51ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSBmaWxlIHN5c3RlbVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byByZWFkIGV4aXN0aW5nIGNvbmZpZyBmaWxlXG4gICAgICBjb25zdCBjb25maWdDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5jb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBKU09OLnBhcnNlKGNvbmZpZ0NvbnRlbnQpO1xuICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAvLyBIYW5kbGUgY29ycnVwdGVkIEpTT04gLSBjcmVhdGUgbmV3IGNvbmZpZ1xuICAgICAgICBjb25zb2xlLndhcm4oJ0NvbmZpZyBmaWxlIGNvcnJ1cHRlZCwgY3JlYXRpbmcgbmV3IGNvbmZpZycpO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHsgdmVyc2lvbjogJzEuMC4wJyB9O1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVDb25maWcoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgLy8gQ29uZmlnIGZpbGUgZG9lc24ndCBleGlzdCwgY3JlYXRlIGRpcmVjdG9yeSBhbmQgZmlsZVxuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUNvbmZpZ0RpcmVjdG9yeSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVDb25maWcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3IuY29kZSA9PT0gJ0VBQ0NFUycgfHwgZXJyb3IuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAvLyBQZXJtaXNzaW9uIGRlbmllZCAtIGF0dGVtcHQgcmVwYWlyXG4gICAgICAgIGF3YWl0IHRoaXMucmVwYWlyUGVybWlzc2lvbnMoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFRyeSBvbmNlIG1vcmUgYWZ0ZXIgcmVwYWlyIGF0dGVtcHRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb25maWdDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5jb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICB0aGlzLmNvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnQ29udGVudCk7XG4gICAgICAgIH0gY2F0Y2ggKHJldHJ5RXJyb3I6IGFueSkge1xuICAgICAgICAgIC8vIFN0aWxsIGZhaWxpbmcsIHRocm93IG9yaWdpbmFsIGVycm9yIHdpdGggaGVscGZ1bCBtZXNzYWdlXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFBlcm1pc3Npb24gZGVuaWVkIGFjY2Vzc2luZyBjb25maWcgYXQgJHt0aGlzLmNvbmZpZ1BhdGh9LiBgICtcbiAgICAgICAgICAgIGBQbGVhc2UgY2hlY2sgZmlsZSBwZXJtaXNzaW9ucyBvciBydW4gd2l0aCBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IEdpdEh1YiBPQXV0aCBjbGllbnQgSURcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGUgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGNvbmZpZyBmaWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0R2l0SHViQ2xpZW50SWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGUgZmlyc3RcbiAgICBjb25zdCBlbnZDbGllbnRJZCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9HSVRIVUJfQ0xJRU5UX0lEO1xuICAgIGlmIChlbnZDbGllbnRJZCkge1xuICAgICAgcmV0dXJuIGVudkNsaWVudElkO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byBjb25maWcgZmlsZVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5vYXV0aD8uZ2l0aHViQ2xpZW50SWQgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgR2l0SHViIE9BdXRoIGNsaWVudCBJRCBpbiBjb25maWcgZmlsZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldEdpdEh1YkNsaWVudElkKGNsaWVudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIUNvbmZpZ01hbmFnZXIudmFsaWRhdGVDbGllbnRJZChjbGllbnRJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgR2l0SHViIGNsaWVudCBJRCBmb3JtYXQuIEV4cGVjdGVkIGZvcm1hdDogT3YyM2xpIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IDE0IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIChlLmcuLCBPdjIzbGlBQkNERUZHSElKS0xNTilgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBvYXV0aCBvYmplY3QgZXhpc3RzXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5vYXV0aCkge1xuICAgICAgdGhpcy5jb25maWcub2F1dGggPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZy5vYXV0aC5naXRodWJDbGllbnRJZCA9IGNsaWVudElkO1xuICAgIGF3YWl0IHRoaXMuc2F2ZUNvbmZpZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBBIGRlZmVuc2l2ZSBjb3B5IG9mIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKi9cbiAgcHVibGljIGdldENvbmZpZygpOiBDb25maWdEYXRhIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmNvbmZpZyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZW50aXJlIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIG5ld0NvbmZpZyBUaGUgbmV3IGNvbmZpZ3VyYXRpb24gdG8gc2V0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlQ29uZmlnKG5ld0NvbmZpZzogQ29uZmlnRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5uZXdDb25maWcgfTtcbiAgICBhd2FpdCB0aGlzLnNhdmVDb25maWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBHaXRIdWIgT0F1dGggY2xpZW50IElEIGZvcm1hdFxuICAgKiBDbGllbnQgSURzIHN0YXJ0IHdpdGggXCJPdjIzbGlcIiBmb2xsb3dlZCBieSBhdCBsZWFzdCAxNCBhbHBoYW51bWVyaWMgY2hhcmFjdGVyc1xuICAgKiBcbiAgICogQHBhcmFtIGNsaWVudElkIC0gVGhlIGNsaWVudCBJRCB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIENvbmZpZ01hbmFnZXIudmFsaWRhdGVDbGllbnRJZChcIk92MjNsaUFCQ0RFRkdISUpLTE1OMTIzNDU2XCIpIC8vIHRydWVcbiAgICogQ29uZmlnTWFuYWdlci52YWxpZGF0ZUNsaWVudElkKFwiaW52YWxpZFwiKSAvLyBmYWxzZVxuICAgKiBDb25maWdNYW5hZ2VyLnZhbGlkYXRlQ2xpZW50SWQoXCJPdjIzbGlcIikgLy8gZmFsc2UgKHRvbyBzaG9ydClcbiAgICogQ29uZmlnTWFuYWdlci52YWxpZGF0ZUNsaWVudElkKFwiWHYyM2xpQUJDREVGR0hJSktMTU5cIikgLy8gZmFsc2UgKHdyb25nIHByZWZpeClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVDbGllbnRJZChjbGllbnRJZDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBjbGllbnRJZCAhPT0gJ3N0cmluZycgfHwgIWNsaWVudElkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gR2l0SHViIE9BdXRoIGNsaWVudCBJRHMgZm9sbG93IHRoZSBwYXR0ZXJuOiBPdjIzbGlbQS1aYS16MC05XXsxNCx9XG4gICAgY29uc3QgY2xpZW50SWRQYXR0ZXJuID0gL15PdjIzbGlbQS1aYS16MC05XXsxNCx9JC87XG4gICAgcmV0dXJuIGNsaWVudElkUGF0dGVybi50ZXN0KGNsaWVudElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgY29uZmlnIGRpcmVjdG9yeSBleGlzdHMgd2l0aCBwcm9wZXIgcGVybWlzc2lvbnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlQ29uZmlnRGlyZWN0b3J5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ta2Rpcih0aGlzLmNvbmZpZ0RpciwgeyByZWN1cnNpdmU6IHRydWUsIG1vZGU6IDBvNzAwIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRUFDQ0VTJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBlcm1pc3Npb24gZGVuaWVkIGNyZWF0aW5nIGNvbmZpZyBkaXJlY3Rvcnk6ICR7dGhpcy5jb25maWdEaXJ9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjb25maWcgdXNpbmcgYXRvbWljIGZpbGUgd3JpdGVzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNhdmVDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVDb25maWdEaXJlY3RvcnkoKTtcbiAgICBcbiAgICAvLyBVc2UgYXRvbWljIHdyaXRlOiB3cml0ZSB0byB0ZW1wIGZpbGUsIHRoZW4gcmVuYW1lXG4gICAgY29uc3QgdGVtcFBhdGggPSB0aGlzLmNvbmZpZ1BhdGggKyAnLnRtcCc7XG4gICAgY29uc3QgY29uZmlnQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnLCBudWxsLCAyKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gV3JpdGUgdG8gdGVtcCBmaWxlIGZpcnN0XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcFBhdGgsIGNvbmZpZ0NvbnRlbnQsIHsgbW9kZTogMG82MDAgfSk7XG4gICAgICBcbiAgICAgIC8vIEF0b21pYyByZW5hbWVcbiAgICAgIGF3YWl0IGZzLnJlbmFtZSh0ZW1wUGF0aCwgdGhpcy5jb25maWdQYXRoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlIGlmIGl0IGV4aXN0c1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKHRlbXBQYXRoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnNcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufSJdfQ==
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central configuration for all element types
|
|
3
|
+
*
|
|
4
|
+
* This file serves as the single source of truth for element type configurations.
|
|
5
|
+
* When adding new element types, update this config and use the derived arrays
|
|
6
|
+
* to ensure consistency across the codebase.
|
|
7
|
+
*/
|
|
8
|
+
import { ElementType } from '../portfolio/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Complete configuration for each element type
|
|
11
|
+
*/
|
|
12
|
+
export declare const ELEMENT_TYPE_CONFIG: {
|
|
13
|
+
readonly personas: {
|
|
14
|
+
readonly plural: "personas";
|
|
15
|
+
readonly directory: "personas";
|
|
16
|
+
readonly mcpSupported: true;
|
|
17
|
+
readonly hasManager: true;
|
|
18
|
+
readonly icon: "👤";
|
|
19
|
+
readonly description: "Behavioral profiles that define AI personality and interaction style";
|
|
20
|
+
};
|
|
21
|
+
readonly skills: {
|
|
22
|
+
readonly plural: "skills";
|
|
23
|
+
readonly directory: "skills";
|
|
24
|
+
readonly mcpSupported: true;
|
|
25
|
+
readonly hasManager: true;
|
|
26
|
+
readonly icon: "🛠️";
|
|
27
|
+
readonly description: "Discrete capabilities for specific tasks";
|
|
28
|
+
};
|
|
29
|
+
readonly templates: {
|
|
30
|
+
readonly plural: "templates";
|
|
31
|
+
readonly directory: "templates";
|
|
32
|
+
readonly mcpSupported: true;
|
|
33
|
+
readonly hasManager: true;
|
|
34
|
+
readonly icon: "📄";
|
|
35
|
+
readonly description: "Reusable content structures with variable substitution";
|
|
36
|
+
};
|
|
37
|
+
readonly agents: {
|
|
38
|
+
readonly plural: "agents";
|
|
39
|
+
readonly directory: "agents";
|
|
40
|
+
readonly mcpSupported: true;
|
|
41
|
+
readonly hasManager: true;
|
|
42
|
+
readonly icon: "🤖";
|
|
43
|
+
readonly description: "Autonomous goal-oriented actors with decision-making capabilities";
|
|
44
|
+
};
|
|
45
|
+
readonly memories: {
|
|
46
|
+
readonly plural: "memories";
|
|
47
|
+
readonly directory: "memories";
|
|
48
|
+
readonly mcpSupported: false;
|
|
49
|
+
readonly hasManager: false;
|
|
50
|
+
readonly icon: "🧠";
|
|
51
|
+
readonly description: "Persistent context storage for continuity and learning";
|
|
52
|
+
};
|
|
53
|
+
readonly ensembles: {
|
|
54
|
+
readonly plural: "ensembles";
|
|
55
|
+
readonly directory: "ensembles";
|
|
56
|
+
readonly mcpSupported: false;
|
|
57
|
+
readonly hasManager: false;
|
|
58
|
+
readonly icon: "🎭";
|
|
59
|
+
readonly description: "Groups of elements working together as a cohesive unit";
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Derived arrays for validation and filtering
|
|
64
|
+
* These are automatically generated from the config above
|
|
65
|
+
*/
|
|
66
|
+
export declare const MCP_SUPPORTED_TYPES: ElementType[];
|
|
67
|
+
export declare const VALID_TYPES_ARRAY: ("personas" | "skills" | "templates" | "agents" | "memories" | "ensembles")[];
|
|
68
|
+
export declare const PLURAL_TO_ELEMENT_TYPE_MAP: {
|
|
69
|
+
[k: string]: ElementType;
|
|
70
|
+
};
|
|
71
|
+
export declare const SINGULAR_TO_DIRECTORY_MAP: {
|
|
72
|
+
[k: string]: "personas" | "skills" | "templates" | "agents" | "memories" | "ensembles";
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Utility functions
|
|
76
|
+
*/
|
|
77
|
+
export declare function isElementTypeSupported(type: ElementType): boolean;
|
|
78
|
+
export declare function getElementTypeConfig(type: ElementType): {
|
|
79
|
+
readonly plural: "personas";
|
|
80
|
+
readonly directory: "personas";
|
|
81
|
+
readonly mcpSupported: true;
|
|
82
|
+
readonly hasManager: true;
|
|
83
|
+
readonly icon: "👤";
|
|
84
|
+
readonly description: "Behavioral profiles that define AI personality and interaction style";
|
|
85
|
+
} | {
|
|
86
|
+
readonly plural: "skills";
|
|
87
|
+
readonly directory: "skills";
|
|
88
|
+
readonly mcpSupported: true;
|
|
89
|
+
readonly hasManager: true;
|
|
90
|
+
readonly icon: "🛠️";
|
|
91
|
+
readonly description: "Discrete capabilities for specific tasks";
|
|
92
|
+
} | {
|
|
93
|
+
readonly plural: "templates";
|
|
94
|
+
readonly directory: "templates";
|
|
95
|
+
readonly mcpSupported: true;
|
|
96
|
+
readonly hasManager: true;
|
|
97
|
+
readonly icon: "📄";
|
|
98
|
+
readonly description: "Reusable content structures with variable substitution";
|
|
99
|
+
} | {
|
|
100
|
+
readonly plural: "agents";
|
|
101
|
+
readonly directory: "agents";
|
|
102
|
+
readonly mcpSupported: true;
|
|
103
|
+
readonly hasManager: true;
|
|
104
|
+
readonly icon: "🤖";
|
|
105
|
+
readonly description: "Autonomous goal-oriented actors with decision-making capabilities";
|
|
106
|
+
} | {
|
|
107
|
+
readonly plural: "memories";
|
|
108
|
+
readonly directory: "memories";
|
|
109
|
+
readonly mcpSupported: false;
|
|
110
|
+
readonly hasManager: false;
|
|
111
|
+
readonly icon: "🧠";
|
|
112
|
+
readonly description: "Persistent context storage for continuity and learning";
|
|
113
|
+
} | {
|
|
114
|
+
readonly plural: "ensembles";
|
|
115
|
+
readonly directory: "ensembles";
|
|
116
|
+
readonly mcpSupported: false;
|
|
117
|
+
readonly hasManager: false;
|
|
118
|
+
readonly icon: "🎭";
|
|
119
|
+
readonly description: "Groups of elements working together as a cohesive unit";
|
|
120
|
+
};
|
|
121
|
+
export declare function getAllSupportedTypes(): ElementType[];
|
|
122
|
+
export declare function getValidTypesForMCP(): string[];
|
|
123
|
+
/**
|
|
124
|
+
* Migration note: To use this centralized config:
|
|
125
|
+
*
|
|
126
|
+
* 1. Replace hardcoded arrays with imports from this file:
|
|
127
|
+
* - Replace validTypes in src/index.ts with VALID_TYPES_ARRAY
|
|
128
|
+
* - Replace MCP_SUPPORTED_TYPES in CollectionBrowser.ts with import
|
|
129
|
+
* - Replace mapping objects with imports from this file
|
|
130
|
+
*
|
|
131
|
+
* 2. Update components to use utility functions instead of hardcoded checks
|
|
132
|
+
*
|
|
133
|
+
* 3. When adding new types, only update ELEMENT_TYPE_CONFIG above
|
|
134
|
+
*/
|
|
135
|
+
//# sourceMappingURL=element-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-types.d.ts","sourceRoot":"","sources":["../../src/config/element-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDtB,CAAC;AAEX;;;GAGG;AAGH,eAAO,MAAM,mBAAmB,eAEO,CAAC;AAGxC,eAAO,MAAM,iBAAiB,+EAE7B,CAAC;AAGF,eAAO,MAAM,0BAA0B;;CAItC,CAAC;AAGF,eAAO,MAAM,yBAAyB;;CAKrC,CAAC;AAEF;;GAEG;AAEH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEjE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAErD;AAED,wBAAgB,oBAAoB,IAAI,WAAW,EAAE,CAEpD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central configuration for all element types
|
|
3
|
+
*
|
|
4
|
+
* This file serves as the single source of truth for element type configurations.
|
|
5
|
+
* When adding new element types, update this config and use the derived arrays
|
|
6
|
+
* to ensure consistency across the codebase.
|
|
7
|
+
*/
|
|
8
|
+
import { ElementType } from '../portfolio/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Complete configuration for each element type
|
|
11
|
+
*/
|
|
12
|
+
export const ELEMENT_TYPE_CONFIG = {
|
|
13
|
+
[ElementType.PERSONA]: {
|
|
14
|
+
plural: 'personas',
|
|
15
|
+
directory: 'personas',
|
|
16
|
+
mcpSupported: true,
|
|
17
|
+
hasManager: true,
|
|
18
|
+
icon: '👤',
|
|
19
|
+
description: 'Behavioral profiles that define AI personality and interaction style'
|
|
20
|
+
},
|
|
21
|
+
[ElementType.SKILL]: {
|
|
22
|
+
plural: 'skills',
|
|
23
|
+
directory: 'skills',
|
|
24
|
+
mcpSupported: true,
|
|
25
|
+
hasManager: true,
|
|
26
|
+
icon: '🛠️',
|
|
27
|
+
description: 'Discrete capabilities for specific tasks'
|
|
28
|
+
},
|
|
29
|
+
[ElementType.TEMPLATE]: {
|
|
30
|
+
plural: 'templates',
|
|
31
|
+
directory: 'templates',
|
|
32
|
+
mcpSupported: true,
|
|
33
|
+
hasManager: true,
|
|
34
|
+
icon: '📄',
|
|
35
|
+
description: 'Reusable content structures with variable substitution'
|
|
36
|
+
},
|
|
37
|
+
[ElementType.AGENT]: {
|
|
38
|
+
plural: 'agents',
|
|
39
|
+
directory: 'agents',
|
|
40
|
+
mcpSupported: true,
|
|
41
|
+
hasManager: true,
|
|
42
|
+
icon: '🤖',
|
|
43
|
+
description: 'Autonomous goal-oriented actors with decision-making capabilities'
|
|
44
|
+
},
|
|
45
|
+
[ElementType.MEMORY]: {
|
|
46
|
+
plural: 'memories',
|
|
47
|
+
directory: 'memories',
|
|
48
|
+
mcpSupported: false, // Hidden from MCP per Issue #144
|
|
49
|
+
hasManager: false, // Not yet implemented
|
|
50
|
+
icon: '🧠',
|
|
51
|
+
description: 'Persistent context storage for continuity and learning'
|
|
52
|
+
},
|
|
53
|
+
[ElementType.ENSEMBLE]: {
|
|
54
|
+
plural: 'ensembles',
|
|
55
|
+
directory: 'ensembles',
|
|
56
|
+
mcpSupported: false, // Hidden from MCP per Issue #144
|
|
57
|
+
hasManager: false, // Not yet implemented
|
|
58
|
+
icon: '🎭',
|
|
59
|
+
description: 'Groups of elements working together as a cohesive unit'
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Derived arrays for validation and filtering
|
|
64
|
+
* These are automatically generated from the config above
|
|
65
|
+
*/
|
|
66
|
+
// Element types that are exposed via MCP tools
|
|
67
|
+
export const MCP_SUPPORTED_TYPES = Object.entries(ELEMENT_TYPE_CONFIG)
|
|
68
|
+
.filter(([, config]) => config.mcpSupported)
|
|
69
|
+
.map(([type]) => type);
|
|
70
|
+
// Plural forms for MCP validation (used in browseCollection validTypes array)
|
|
71
|
+
export const VALID_TYPES_ARRAY = MCP_SUPPORTED_TYPES.map(type => ELEMENT_TYPE_CONFIG[type].plural);
|
|
72
|
+
// Mapping from plural forms to ElementType values
|
|
73
|
+
export const PLURAL_TO_ELEMENT_TYPE_MAP = Object.fromEntries(Object.entries(ELEMENT_TYPE_CONFIG).map(([type, config]) => [
|
|
74
|
+
config.plural, type
|
|
75
|
+
]));
|
|
76
|
+
// Mapping from singular forms to directory names
|
|
77
|
+
export const SINGULAR_TO_DIRECTORY_MAP = Object.fromEntries(Object.entries(ELEMENT_TYPE_CONFIG).map(([type, config]) => [
|
|
78
|
+
type.toLowerCase().replace('s', ''), // Convert 'personas' -> 'persona'
|
|
79
|
+
config.directory
|
|
80
|
+
]));
|
|
81
|
+
/**
|
|
82
|
+
* Utility functions
|
|
83
|
+
*/
|
|
84
|
+
export function isElementTypeSupported(type) {
|
|
85
|
+
return ELEMENT_TYPE_CONFIG[type]?.mcpSupported ?? false;
|
|
86
|
+
}
|
|
87
|
+
export function getElementTypeConfig(type) {
|
|
88
|
+
return ELEMENT_TYPE_CONFIG[type];
|
|
89
|
+
}
|
|
90
|
+
export function getAllSupportedTypes() {
|
|
91
|
+
return MCP_SUPPORTED_TYPES;
|
|
92
|
+
}
|
|
93
|
+
export function getValidTypesForMCP() {
|
|
94
|
+
return VALID_TYPES_ARRAY;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Migration note: To use this centralized config:
|
|
98
|
+
*
|
|
99
|
+
* 1. Replace hardcoded arrays with imports from this file:
|
|
100
|
+
* - Replace validTypes in src/index.ts with VALID_TYPES_ARRAY
|
|
101
|
+
* - Replace MCP_SUPPORTED_TYPES in CollectionBrowser.ts with import
|
|
102
|
+
* - Replace mapping objects with imports from this file
|
|
103
|
+
*
|
|
104
|
+
* 2. Update components to use utility functions instead of hardcoded checks
|
|
105
|
+
*
|
|
106
|
+
* 3. When adding new types, only update ELEMENT_TYPE_CONFIG above
|
|
107
|
+
*/
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvZWxlbWVudC10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyQixNQUFNLEVBQUUsVUFBVTtRQUNsQixTQUFTLEVBQUUsVUFBVTtRQUNyQixZQUFZLEVBQUUsSUFBSTtRQUNsQixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsSUFBSTtRQUNWLFdBQVcsRUFBRSxzRUFBc0U7S0FDcEY7SUFDRCxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNuQixNQUFNLEVBQUUsUUFBUTtRQUNoQixTQUFTLEVBQUUsUUFBUTtRQUNuQixZQUFZLEVBQUUsSUFBSTtRQUNsQixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsS0FBSztRQUNYLFdBQVcsRUFBRSwwQ0FBMEM7S0FDeEQ7SUFDRCxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN0QixNQUFNLEVBQUUsV0FBVztRQUNuQixTQUFTLEVBQUUsV0FBVztRQUN0QixZQUFZLEVBQUUsSUFBSTtRQUNsQixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsSUFBSTtRQUNWLFdBQVcsRUFBRSx3REFBd0Q7S0FDdEU7SUFDRCxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNuQixNQUFNLEVBQUUsUUFBUTtRQUNoQixTQUFTLEVBQUUsUUFBUTtRQUNuQixZQUFZLEVBQUUsSUFBSTtRQUNsQixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsSUFBSTtRQUNWLFdBQVcsRUFBRSxtRUFBbUU7S0FDakY7SUFDRCxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNwQixNQUFNLEVBQUUsVUFBVTtRQUNsQixTQUFTLEVBQUUsVUFBVTtRQUNyQixZQUFZLEVBQUUsS0FBSyxFQUFFLGlDQUFpQztRQUN0RCxVQUFVLEVBQUUsS0FBSyxFQUFJLHNCQUFzQjtRQUMzQyxJQUFJLEVBQUUsSUFBSTtRQUNWLFdBQVcsRUFBRSx3REFBd0Q7S0FDdEU7SUFDRCxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN0QixNQUFNLEVBQUUsV0FBVztRQUNuQixTQUFTLEVBQUUsV0FBVztRQUN0QixZQUFZLEVBQUUsS0FBSyxFQUFFLGlDQUFpQztRQUN0RCxVQUFVLEVBQUUsS0FBSyxFQUFJLHNCQUFzQjtRQUMzQyxJQUFJLEVBQUUsSUFBSTtRQUNWLFdBQVcsRUFBRSx3REFBd0Q7S0FDdEU7Q0FDTyxDQUFDO0FBRVg7OztHQUdHO0FBRUgsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7S0FDbkUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO0tBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQW1CLENBQUMsQ0FBQztBQUV4Qyw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUN0RCxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FDekMsQ0FBQztBQUVGLGtEQUFrRDtBQUNsRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUMxRCxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzFELE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBbUI7Q0FDbkMsQ0FBQyxDQUNILENBQUM7QUFFRixtREFBbUQ7QUFDbkQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDekQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxtQ0FBbUM7SUFDeEUsTUFBTSxDQUFDLFNBQVM7Q0FDakIsQ0FBQyxDQUNILENBQUM7QUFFRjs7R0FFRztBQUVILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxJQUFpQjtJQUN0RCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksSUFBSSxLQUFLLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUFpQjtJQUNwRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENlbnRyYWwgY29uZmlndXJhdGlvbiBmb3IgYWxsIGVsZW1lbnQgdHlwZXNcbiAqIFxuICogVGhpcyBmaWxlIHNlcnZlcyBhcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgZWxlbWVudCB0eXBlIGNvbmZpZ3VyYXRpb25zLlxuICogV2hlbiBhZGRpbmcgbmV3IGVsZW1lbnQgdHlwZXMsIHVwZGF0ZSB0aGlzIGNvbmZpZyBhbmQgdXNlIHRoZSBkZXJpdmVkIGFycmF5c1xuICogdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgY29kZWJhc2UuXG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuXG4vKipcbiAqIENvbXBsZXRlIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggZWxlbWVudCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBFTEVNRU5UX1RZUEVfQ09ORklHID0ge1xuICBbRWxlbWVudFR5cGUuUEVSU09OQV06IHtcbiAgICBwbHVyYWw6ICdwZXJzb25hcycsXG4gICAgZGlyZWN0b3J5OiAncGVyc29uYXMnLFxuICAgIG1jcFN1cHBvcnRlZDogdHJ1ZSxcbiAgICBoYXNNYW5hZ2VyOiB0cnVlLFxuICAgIGljb246ICfwn5GkJyxcbiAgICBkZXNjcmlwdGlvbjogJ0JlaGF2aW9yYWwgcHJvZmlsZXMgdGhhdCBkZWZpbmUgQUkgcGVyc29uYWxpdHkgYW5kIGludGVyYWN0aW9uIHN0eWxlJ1xuICB9LFxuICBbRWxlbWVudFR5cGUuU0tJTExdOiB7XG4gICAgcGx1cmFsOiAnc2tpbGxzJyxcbiAgICBkaXJlY3Rvcnk6ICdza2lsbHMnLCBcbiAgICBtY3BTdXBwb3J0ZWQ6IHRydWUsXG4gICAgaGFzTWFuYWdlcjogdHJ1ZSxcbiAgICBpY29uOiAn8J+boO+4jycsXG4gICAgZGVzY3JpcHRpb246ICdEaXNjcmV0ZSBjYXBhYmlsaXRpZXMgZm9yIHNwZWNpZmljIHRhc2tzJ1xuICB9LFxuICBbRWxlbWVudFR5cGUuVEVNUExBVEVdOiB7XG4gICAgcGx1cmFsOiAndGVtcGxhdGVzJyxcbiAgICBkaXJlY3Rvcnk6ICd0ZW1wbGF0ZXMnLFxuICAgIG1jcFN1cHBvcnRlZDogdHJ1ZSxcbiAgICBoYXNNYW5hZ2VyOiB0cnVlLFxuICAgIGljb246ICfwn5OEJyxcbiAgICBkZXNjcmlwdGlvbjogJ1JldXNhYmxlIGNvbnRlbnQgc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlIHN1YnN0aXR1dGlvbidcbiAgfSxcbiAgW0VsZW1lbnRUeXBlLkFHRU5UXToge1xuICAgIHBsdXJhbDogJ2FnZW50cycsXG4gICAgZGlyZWN0b3J5OiAnYWdlbnRzJyxcbiAgICBtY3BTdXBwb3J0ZWQ6IHRydWUsXG4gICAgaGFzTWFuYWdlcjogdHJ1ZSxcbiAgICBpY29uOiAn8J+klicsXG4gICAgZGVzY3JpcHRpb246ICdBdXRvbm9tb3VzIGdvYWwtb3JpZW50ZWQgYWN0b3JzIHdpdGggZGVjaXNpb24tbWFraW5nIGNhcGFiaWxpdGllcydcbiAgfSxcbiAgW0VsZW1lbnRUeXBlLk1FTU9SWV06IHtcbiAgICBwbHVyYWw6ICdtZW1vcmllcycsXG4gICAgZGlyZWN0b3J5OiAnbWVtb3JpZXMnLFxuICAgIG1jcFN1cHBvcnRlZDogZmFsc2UsIC8vIEhpZGRlbiBmcm9tIE1DUCBwZXIgSXNzdWUgIzE0NFxuICAgIGhhc01hbmFnZXI6IGZhbHNlLCAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWRcbiAgICBpY29uOiAn8J+noCcsXG4gICAgZGVzY3JpcHRpb246ICdQZXJzaXN0ZW50IGNvbnRleHQgc3RvcmFnZSBmb3IgY29udGludWl0eSBhbmQgbGVhcm5pbmcnXG4gIH0sXG4gIFtFbGVtZW50VHlwZS5FTlNFTUJMRV06IHtcbiAgICBwbHVyYWw6ICdlbnNlbWJsZXMnLFxuICAgIGRpcmVjdG9yeTogJ2Vuc2VtYmxlcycsXG4gICAgbWNwU3VwcG9ydGVkOiBmYWxzZSwgLy8gSGlkZGVuIGZyb20gTUNQIHBlciBJc3N1ZSAjMTQ0XG4gICAgaGFzTWFuYWdlcjogZmFsc2UsICAgLy8gTm90IHlldCBpbXBsZW1lbnRlZFxuICAgIGljb246ICfwn46tJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dyb3VwcyBvZiBlbGVtZW50cyB3b3JraW5nIHRvZ2V0aGVyIGFzIGEgY29oZXNpdmUgdW5pdCdcbiAgfVxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBEZXJpdmVkIGFycmF5cyBmb3IgdmFsaWRhdGlvbiBhbmQgZmlsdGVyaW5nXG4gKiBUaGVzZSBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgY29uZmlnIGFib3ZlXG4gKi9cblxuLy8gRWxlbWVudCB0eXBlcyB0aGF0IGFyZSBleHBvc2VkIHZpYSBNQ1AgdG9vbHNcbmV4cG9ydCBjb25zdCBNQ1BfU1VQUE9SVEVEX1RZUEVTID0gT2JqZWN0LmVudHJpZXMoRUxFTUVOVF9UWVBFX0NPTkZJRylcbiAgLmZpbHRlcigoWywgY29uZmlnXSkgPT4gY29uZmlnLm1jcFN1cHBvcnRlZClcbiAgLm1hcCgoW3R5cGVdKSA9PiB0eXBlIGFzIEVsZW1lbnRUeXBlKTtcblxuLy8gUGx1cmFsIGZvcm1zIGZvciBNQ1AgdmFsaWRhdGlvbiAodXNlZCBpbiBicm93c2VDb2xsZWN0aW9uIHZhbGlkVHlwZXMgYXJyYXkpXG5leHBvcnQgY29uc3QgVkFMSURfVFlQRVNfQVJSQVkgPSBNQ1BfU1VQUE9SVEVEX1RZUEVTLm1hcChcbiAgdHlwZSA9PiBFTEVNRU5UX1RZUEVfQ09ORklHW3R5cGVdLnBsdXJhbFxuKTtcblxuLy8gTWFwcGluZyBmcm9tIHBsdXJhbCBmb3JtcyB0byBFbGVtZW50VHlwZSB2YWx1ZXNcbmV4cG9ydCBjb25zdCBQTFVSQUxfVE9fRUxFTUVOVF9UWVBFX01BUCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgT2JqZWN0LmVudHJpZXMoRUxFTUVOVF9UWVBFX0NPTkZJRykubWFwKChbdHlwZSwgY29uZmlnXSkgPT4gW1xuICAgIGNvbmZpZy5wbHVyYWwsIHR5cGUgYXMgRWxlbWVudFR5cGVcbiAgXSlcbik7XG5cbi8vIE1hcHBpbmcgZnJvbSBzaW5ndWxhciBmb3JtcyB0byBkaXJlY3RvcnkgbmFtZXMgIFxuZXhwb3J0IGNvbnN0IFNJTkdVTEFSX1RPX0RJUkVDVE9SWV9NQVAgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gIE9iamVjdC5lbnRyaWVzKEVMRU1FTlRfVFlQRV9DT05GSUcpLm1hcCgoW3R5cGUsIGNvbmZpZ10pID0+IFtcbiAgICB0eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgncycsICcnKSwgLy8gQ29udmVydCAncGVyc29uYXMnIC0+ICdwZXJzb25hJyBcbiAgICBjb25maWcuZGlyZWN0b3J5XG4gIF0pXG4pO1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudFR5cGVTdXBwb3J0ZWQodHlwZTogRWxlbWVudFR5cGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIEVMRU1FTlRfVFlQRV9DT05GSUdbdHlwZV0/Lm1jcFN1cHBvcnRlZCA/PyBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRUeXBlQ29uZmlnKHR5cGU6IEVsZW1lbnRUeXBlKSB7XG4gIHJldHVybiBFTEVNRU5UX1RZUEVfQ09ORklHW3R5cGVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsU3VwcG9ydGVkVHlwZXMoKTogRWxlbWVudFR5cGVbXSB7XG4gIHJldHVybiBNQ1BfU1VQUE9SVEVEX1RZUEVTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRUeXBlc0Zvck1DUCgpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBWQUxJRF9UWVBFU19BUlJBWTtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb24gbm90ZTogVG8gdXNlIHRoaXMgY2VudHJhbGl6ZWQgY29uZmlnOlxuICogXG4gKiAxLiBSZXBsYWNlIGhhcmRjb2RlZCBhcnJheXMgd2l0aCBpbXBvcnRzIGZyb20gdGhpcyBmaWxlOlxuICogICAgLSBSZXBsYWNlIHZhbGlkVHlwZXMgaW4gc3JjL2luZGV4LnRzIHdpdGggVkFMSURfVFlQRVNfQVJSQVlcbiAqICAgIC0gUmVwbGFjZSBNQ1BfU1VQUE9SVEVEX1RZUEVTIGluIENvbGxlY3Rpb25Ccm93c2VyLnRzIHdpdGggaW1wb3J0XG4gKiAgICAtIFJlcGxhY2UgbWFwcGluZyBvYmplY3RzIHdpdGggaW1wb3J0cyBmcm9tIHRoaXMgZmlsZVxuICogXG4gKiAyLiBVcGRhdGUgY29tcG9uZW50cyB0byB1c2UgdXRpbGl0eSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY2hlY2tzXG4gKiBcbiAqIDMuIFdoZW4gYWRkaW5nIG5ldyB0eXBlcywgb25seSB1cGRhdGUgRUxFTUVOVF9UWVBFX0NPTkZJRyBhYm92ZVxuICovIl19
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -3,4 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export * from './constants.js';
|
|
5
5
|
export * from './indicator-config.js';
|
|
6
|
-
|
|
6
|
+
export * from './element-types.js';
|
|
7
|
+
export * from './portfolio-constants.js';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2VudHJhbCBleHBvcnQgcG9pbnQgZm9yIGNvbmZpZ3VyYXRpb25cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2luZGljYXRvci1jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbGVtZW50LXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcG9ydGZvbGlvLWNvbnN0YW50cy5qcyc7Il19
|