@dollhousemcp/mcp-server 1.7.3 → 1.7.4

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.
Files changed (51) hide show
  1. package/dist/config/ConfigWizard.d.ts +78 -0
  2. package/dist/config/ConfigWizard.d.ts.map +1 -0
  3. package/dist/config/ConfigWizard.js +370 -0
  4. package/dist/config/ConfigWizardCheck.d.ts +47 -0
  5. package/dist/config/ConfigWizardCheck.d.ts.map +1 -0
  6. package/dist/config/ConfigWizardCheck.js +208 -0
  7. package/dist/config/ConfigWizardDisplay.d.ts +64 -0
  8. package/dist/config/ConfigWizardDisplay.d.ts.map +1 -0
  9. package/dist/config/ConfigWizardDisplay.js +150 -0
  10. package/dist/config/WizardFirstResponse.d.ts +25 -0
  11. package/dist/config/WizardFirstResponse.d.ts.map +1 -0
  12. package/dist/config/WizardFirstResponse.js +118 -0
  13. package/dist/config/portfolioConfig.d.ts +40 -0
  14. package/dist/config/portfolioConfig.d.ts.map +1 -0
  15. package/dist/config/portfolioConfig.js +58 -0
  16. package/dist/config/wizardTemplates.d.ts +84 -0
  17. package/dist/config/wizardTemplates.d.ts.map +1 -0
  18. package/dist/config/wizardTemplates.js +195 -0
  19. package/dist/elements/BaseElement.d.ts +15 -0
  20. package/dist/elements/BaseElement.d.ts.map +1 -1
  21. package/dist/elements/BaseElement.js +38 -5
  22. package/dist/generated/version.d.ts +2 -2
  23. package/dist/generated/version.js +3 -3
  24. package/dist/handlers/PortfolioPullHandler.d.ts +69 -0
  25. package/dist/handlers/PortfolioPullHandler.d.ts.map +1 -0
  26. package/dist/handlers/PortfolioPullHandler.js +340 -0
  27. package/dist/scripts/scripts/run-config-wizard.js +57 -0
  28. package/dist/scripts/src/config/ConfigManager.js +799 -0
  29. package/dist/scripts/src/config/ConfigWizard.js +368 -0
  30. package/dist/scripts/src/errors/SecurityError.js +47 -0
  31. package/dist/scripts/src/security/constants.js +28 -0
  32. package/dist/scripts/src/security/contentValidator.js +415 -0
  33. package/dist/scripts/src/security/errors.js +32 -0
  34. package/dist/scripts/src/security/regexValidator.js +217 -0
  35. package/dist/scripts/src/security/secureYamlParser.js +272 -0
  36. package/dist/scripts/src/security/securityMonitor.js +111 -0
  37. package/dist/scripts/src/security/validators/unicodeValidator.js +315 -0
  38. package/dist/scripts/src/utils/logger.js +288 -0
  39. package/dist/sync/PortfolioDownloader.d.ts +27 -0
  40. package/dist/sync/PortfolioDownloader.d.ts.map +1 -0
  41. package/dist/sync/PortfolioDownloader.js +120 -0
  42. package/dist/sync/PortfolioSyncComparer.d.ts +50 -0
  43. package/dist/sync/PortfolioSyncComparer.d.ts.map +1 -0
  44. package/dist/sync/PortfolioSyncComparer.js +158 -0
  45. package/dist/tools/getWelcomeMessage.d.ts +41 -0
  46. package/dist/tools/getWelcomeMessage.d.ts.map +1 -0
  47. package/dist/tools/getWelcomeMessage.js +109 -0
  48. package/dist/utils/TemplateRenderer.d.ts +63 -0
  49. package/dist/utils/TemplateRenderer.d.ts.map +1 -0
  50. package/dist/utils/TemplateRenderer.js +154 -0
  51. package/package.json +1 -1
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Portfolio configuration utilities
3
+ * Handles repository name configuration for portfolio sync
4
+ */
5
+ /**
6
+ * Get the configured portfolio repository name
7
+ * Priority order:
8
+ * 1. TEST_GITHUB_REPO environment variable (for testing)
9
+ * 2. Configured repository name (future: from config file)
10
+ * 3. Default: 'dollhouse-portfolio'
11
+ *
12
+ * @example
13
+ * // Default usage
14
+ * const repo = getPortfolioRepositoryName(); // 'dollhouse-portfolio'
15
+ *
16
+ * @example
17
+ * // With TEST_GITHUB_REPO set
18
+ * process.env.TEST_GITHUB_REPO = 'test-portfolio';
19
+ * const repo = getPortfolioRepositoryName(); // 'test-portfolio'
20
+ *
21
+ * @returns {string} The configured portfolio repository name
22
+ */
23
+ export declare function getPortfolioRepositoryName(): string;
24
+ /**
25
+ * Check if we're in a test environment
26
+ *
27
+ * @example
28
+ * // When TEST_GITHUB_REPO is set
29
+ * process.env.TEST_GITHUB_REPO = 'test-repo';
30
+ * const isTest = isTestEnvironment(); // true
31
+ *
32
+ * @example
33
+ * // In production environment
34
+ * delete process.env.TEST_GITHUB_REPO;
35
+ * const isTest = isTestEnvironment(); // false
36
+ *
37
+ * @returns {boolean} True if running in a test environment
38
+ */
39
+ export declare function isTestEnvironment(): boolean;
40
+ //# sourceMappingURL=portfolioConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolioConfig.d.ts","sourceRoot":"","sources":["../../src/config/portfolioConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAgBnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Portfolio configuration utilities
3
+ * Handles repository name configuration for portfolio sync
4
+ */
5
+ /**
6
+ * Get the configured portfolio repository name
7
+ * Priority order:
8
+ * 1. TEST_GITHUB_REPO environment variable (for testing)
9
+ * 2. Configured repository name (future: from config file)
10
+ * 3. Default: 'dollhouse-portfolio'
11
+ *
12
+ * @example
13
+ * // Default usage
14
+ * const repo = getPortfolioRepositoryName(); // 'dollhouse-portfolio'
15
+ *
16
+ * @example
17
+ * // With TEST_GITHUB_REPO set
18
+ * process.env.TEST_GITHUB_REPO = 'test-portfolio';
19
+ * const repo = getPortfolioRepositoryName(); // 'test-portfolio'
20
+ *
21
+ * @returns {string} The configured portfolio repository name
22
+ */
23
+ export function getPortfolioRepositoryName() {
24
+ // For testing environments, use TEST_GITHUB_REPO if set
25
+ // Trim whitespace to handle edge cases
26
+ const testRepo = process.env.TEST_GITHUB_REPO?.trim();
27
+ if (testRepo) {
28
+ return testRepo;
29
+ }
30
+ // TODO: Add support for reading from config file
31
+ // const config = ConfigManager.getInstance();
32
+ // if (config.github?.portfolio?.repository_name) {
33
+ // return config.github.portfolio.repository_name;
34
+ // }
35
+ // Default repository name
36
+ return 'dollhouse-portfolio';
37
+ }
38
+ /**
39
+ * Check if we're in a test environment
40
+ *
41
+ * @example
42
+ * // When TEST_GITHUB_REPO is set
43
+ * process.env.TEST_GITHUB_REPO = 'test-repo';
44
+ * const isTest = isTestEnvironment(); // true
45
+ *
46
+ * @example
47
+ * // In production environment
48
+ * delete process.env.TEST_GITHUB_REPO;
49
+ * const isTest = isTestEnvironment(); // false
50
+ *
51
+ * @returns {boolean} True if running in a test environment
52
+ */
53
+ export function isTestEnvironment() {
54
+ return process.env.TEST_MODE === 'true' ||
55
+ process.env.NODE_ENV === 'test' ||
56
+ !!process.env.TEST_GITHUB_REPO?.trim();
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGZvbGlvQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9wb3J0Zm9saW9Db25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQjtJQUN4Qyx3REFBd0Q7SUFDeEQsdUNBQXVDO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDdEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxpREFBaUQ7SUFDakQsOENBQThDO0lBQzlDLG1EQUFtRDtJQUNuRCxvREFBb0Q7SUFDcEQsSUFBSTtJQUVKLDBCQUEwQjtJQUMxQixPQUFPLHFCQUFxQixDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxNQUFNO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU07UUFDL0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUG9ydGZvbGlvIGNvbmZpZ3VyYXRpb24gdXRpbGl0aWVzXG4gKiBIYW5kbGVzIHJlcG9zaXRvcnkgbmFtZSBjb25maWd1cmF0aW9uIGZvciBwb3J0Zm9saW8gc3luY1xuICovXG5cbi8qKlxuICogR2V0IHRoZSBjb25maWd1cmVkIHBvcnRmb2xpbyByZXBvc2l0b3J5IG5hbWVcbiAqIFByaW9yaXR5IG9yZGVyOlxuICogMS4gVEVTVF9HSVRIVUJfUkVQTyBlbnZpcm9ubWVudCB2YXJpYWJsZSAoZm9yIHRlc3RpbmcpXG4gKiAyLiBDb25maWd1cmVkIHJlcG9zaXRvcnkgbmFtZSAoZnV0dXJlOiBmcm9tIGNvbmZpZyBmaWxlKVxuICogMy4gRGVmYXVsdDogJ2RvbGxob3VzZS1wb3J0Zm9saW8nXG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBEZWZhdWx0IHVzYWdlXG4gKiBjb25zdCByZXBvID0gZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUoKTsgLy8gJ2RvbGxob3VzZS1wb3J0Zm9saW8nXG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBXaXRoIFRFU1RfR0lUSFVCX1JFUE8gc2V0XG4gKiBwcm9jZXNzLmVudi5URVNUX0dJVEhVQl9SRVBPID0gJ3Rlc3QtcG9ydGZvbGlvJztcbiAqIGNvbnN0IHJlcG8gPSBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpOyAvLyAndGVzdC1wb3J0Zm9saW8nXG4gKiBcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb25maWd1cmVkIHBvcnRmb2xpbyByZXBvc2l0b3J5IG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lKCk6IHN0cmluZyB7XG4gIC8vIEZvciB0ZXN0aW5nIGVudmlyb25tZW50cywgdXNlIFRFU1RfR0lUSFVCX1JFUE8gaWYgc2V0XG4gIC8vIFRyaW0gd2hpdGVzcGFjZSB0byBoYW5kbGUgZWRnZSBjYXNlc1xuICBjb25zdCB0ZXN0UmVwbyA9IHByb2Nlc3MuZW52LlRFU1RfR0lUSFVCX1JFUE8/LnRyaW0oKTtcbiAgaWYgKHRlc3RSZXBvKSB7XG4gICAgcmV0dXJuIHRlc3RSZXBvO1xuICB9XG4gIFxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBmcm9tIGNvbmZpZyBmaWxlXG4gIC8vIGNvbnN0IGNvbmZpZyA9IENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgLy8gaWYgKGNvbmZpZy5naXRodWI/LnBvcnRmb2xpbz8ucmVwb3NpdG9yeV9uYW1lKSB7XG4gIC8vICAgcmV0dXJuIGNvbmZpZy5naXRodWIucG9ydGZvbGlvLnJlcG9zaXRvcnlfbmFtZTtcbiAgLy8gfVxuICBcbiAgLy8gRGVmYXVsdCByZXBvc2l0b3J5IG5hbWVcbiAgcmV0dXJuICdkb2xsaG91c2UtcG9ydGZvbGlvJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB3ZSdyZSBpbiBhIHRlc3QgZW52aXJvbm1lbnRcbiAqIFxuICogQGV4YW1wbGVcbiAqIC8vIFdoZW4gVEVTVF9HSVRIVUJfUkVQTyBpcyBzZXRcbiAqIHByb2Nlc3MuZW52LlRFU1RfR0lUSFVCX1JFUE8gPSAndGVzdC1yZXBvJztcbiAqIGNvbnN0IGlzVGVzdCA9IGlzVGVzdEVudmlyb25tZW50KCk7IC8vIHRydWVcbiAqIFxuICogQGV4YW1wbGVcbiAqIC8vIEluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcbiAqIGRlbGV0ZSBwcm9jZXNzLmVudi5URVNUX0dJVEhVQl9SRVBPO1xuICogY29uc3QgaXNUZXN0ID0gaXNUZXN0RW52aXJvbm1lbnQoKTsgLy8gZmFsc2VcbiAqIFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgcnVubmluZyBpbiBhIHRlc3QgZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGVzdEVudmlyb25tZW50KCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuVEVTVF9NT0RFID09PSAndHJ1ZScgfHwgXG4gICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnIHx8XG4gICAgICAgICAhIXByb2Nlc3MuZW52LlRFU1RfR0lUSFVCX1JFUE8/LnRyaW0oKTtcbn0iXX0=
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Wizard Text Templates
3
+ *
4
+ * Centralized configuration for all wizard text to support:
5
+ * - Internationalization (i18n) in the future
6
+ * - Consistent messaging across the application
7
+ * - Easy updates without modifying business logic
8
+ * - Template reusability
9
+ */
10
+ export interface WizardTemplates {
11
+ title: string;
12
+ currentConfigHeader: string;
13
+ steps: {
14
+ userIdentity: WizardStep;
15
+ githubIntegration: WizardStep;
16
+ portfolioSync: WizardStep;
17
+ displayPreferences: WizardStep;
18
+ };
19
+ instructions: {
20
+ quick: string;
21
+ detailed: string;
22
+ skip: string;
23
+ };
24
+ footer: string;
25
+ }
26
+ export interface WizardStep {
27
+ title: string;
28
+ description: string;
29
+ instructions: string[];
30
+ currentValue: (value: any) => string;
31
+ }
32
+ /**
33
+ * Default English templates
34
+ */
35
+ export declare const defaultWizardTemplates: WizardTemplates;
36
+ /**
37
+ * Friendly value replacements for null/undefined config values
38
+ */
39
+ export declare const friendlyNullValues: Record<string, string>;
40
+ /**
41
+ * Helper function to get wizard text in specified language
42
+ * @param language - Language code (e.g., 'en', 'es', 'fr')
43
+ * @returns Wizard templates for the specified language
44
+ */
45
+ export declare function getWizardTemplates(language?: string): WizardTemplates;
46
+ /**
47
+ * Helper function to get friendly null value
48
+ * @param path - Dot-notation path to the config field
49
+ * @returns Friendly message for null value
50
+ */
51
+ export declare function getFriendlyNullValue(path: string): string;
52
+ /**
53
+ * Template builder for wizard steps
54
+ * Allows for dynamic construction of wizard content
55
+ */
56
+ export declare class WizardTemplateBuilder {
57
+ private templates;
58
+ constructor(language?: string);
59
+ /**
60
+ * Build the complete wizard text
61
+ */
62
+ buildWizardText(currentConfig: any): string;
63
+ /**
64
+ * Build current configuration section
65
+ */
66
+ private buildCurrentConfig;
67
+ /**
68
+ * Build all wizard steps
69
+ */
70
+ private buildSteps;
71
+ /**
72
+ * Format a single wizard step
73
+ */
74
+ private formatStep;
75
+ /**
76
+ * Build instruction options
77
+ */
78
+ private buildInstructions;
79
+ /**
80
+ * Format config as YAML (stub - would use actual yaml library)
81
+ */
82
+ private formatConfigAsYaml;
83
+ }
84
+ //# sourceMappingURL=wizardTemplates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizardTemplates.d.ts","sourceRoot":"","sources":["../../src/config/wizardTemplates.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE;QACL,YAAY,EAAE,UAAU,CAAC;QACzB,iBAAiB,EAAE,UAAU,CAAC;QAC9B,aAAa,EAAE,UAAU,CAAC;QAC1B,kBAAkB,EAAE,UAAU,CAAC;KAChC,CAAC;IACF,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC;CACtC;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,eAqDpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0BrD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,GAAE,MAAa,GAAG,eAAe,CAQ3E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,SAAS,CAAkB;gBAEvB,QAAQ,GAAE,MAAa;IAInC;;OAEG;IACH,eAAe,CAAC,aAAa,EAAE,GAAG,GAAG,MAAM;IAgB3C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAK3B"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Wizard Text Templates
3
+ *
4
+ * Centralized configuration for all wizard text to support:
5
+ * - Internationalization (i18n) in the future
6
+ * - Consistent messaging across the application
7
+ * - Easy updates without modifying business logic
8
+ * - Template reusability
9
+ */
10
+ /**
11
+ * Default English templates
12
+ */
13
+ export const defaultWizardTemplates = {
14
+ title: '🧙 Configuration Wizard',
15
+ currentConfigHeader: '📊 Current Configuration:',
16
+ steps: {
17
+ userIdentity: {
18
+ title: '🎯 Step 1: User Identity',
19
+ description: 'This tags your creations so you can find them later. Everything is saved locally on your computer.',
20
+ instructions: [
21
+ 'To set a username: Say "Set my username to [your-name]"',
22
+ 'To stay anonymous: Say "I\'ll stay anonymous"',
23
+ ],
24
+ currentValue: (value) => value || '(not set - anonymous mode)',
25
+ },
26
+ githubIntegration: {
27
+ title: '🔐 Step 2: GitHub Integration (Optional)',
28
+ description: 'Connect to GitHub to share your creations and browse community content.',
29
+ instructions: [
30
+ 'To connect GitHub: Say "Connect my GitHub account"',
31
+ 'To skip: Say "Skip GitHub for now"',
32
+ ],
33
+ currentValue: (value) => value ? 'Connected' : '(not connected)',
34
+ },
35
+ portfolioSync: {
36
+ title: '🔄 Step 3: Portfolio Sync (Optional)',
37
+ description: 'Automatically backup your creations to GitHub.',
38
+ instructions: [
39
+ 'To enable: Say "Enable auto-sync"',
40
+ 'To keep manual: Say "I\'ll sync manually"',
41
+ ],
42
+ currentValue: (value) => value ? 'Enabled' : 'Manual',
43
+ },
44
+ displayPreferences: {
45
+ title: '🎨 Step 4: Display Preferences',
46
+ description: 'Customize how DollhouseMCP shows information.',
47
+ instructions: [
48
+ 'To show active persona: Say "Show persona indicators"',
49
+ 'To keep minimal: Say "Use minimal display"',
50
+ ],
51
+ currentValue: (value) => value ? 'Enabled' : 'Minimal',
52
+ },
53
+ },
54
+ instructions: {
55
+ quick: '💡 **Quick Setup**: Say "Configure the basics" to set just username and GitHub',
56
+ detailed: '📝 **Detailed Setup**: Say "Configure everything" to go through all options',
57
+ skip: '⏭️ **Skip for Now**: Say "Skip wizard" to use anonymous mode',
58
+ },
59
+ footer: '✨ You can always change these settings later by saying "Open configuration wizard"',
60
+ };
61
+ /**
62
+ * Friendly value replacements for null/undefined config values
63
+ */
64
+ export const friendlyNullValues = {
65
+ // User fields
66
+ 'user.username': '(not set - anonymous mode active)',
67
+ 'user.email': '(optional - not set)',
68
+ 'user.display_name': '(not set - will use username)',
69
+ // GitHub fields
70
+ 'github.auth_token': '(not configured - GitHub features disabled)',
71
+ 'github.oauth_token': '(not authenticated)',
72
+ 'github.default_repository': '(not set - will use default)',
73
+ 'github.username': '(not connected)',
74
+ // Portfolio sync fields
75
+ 'portfolio.sync_status.last_sync': '(never synced)',
76
+ 'portfolio.sync_status.last_push': '(never pushed)',
77
+ 'portfolio.sync_status.last_pull': '(never pulled)',
78
+ 'portfolio.repository_name': `(using default: ${process.env.TEST_GITHUB_REPO || 'dollhouse-portfolio'})`,
79
+ // Collection submission
80
+ 'collection_submission.auto_submit': '(disabled)',
81
+ // Indicator settings
82
+ 'indicator.custom_format': '(using default format)',
83
+ // Default for any other null
84
+ 'default': '(not set)',
85
+ };
86
+ /**
87
+ * Helper function to get wizard text in specified language
88
+ * @param language - Language code (e.g., 'en', 'es', 'fr')
89
+ * @returns Wizard templates for the specified language
90
+ */
91
+ export function getWizardTemplates(language = 'en') {
92
+ // For now, only English is supported
93
+ // Future: Load from language-specific files
94
+ switch (language) {
95
+ case 'en':
96
+ default:
97
+ return defaultWizardTemplates;
98
+ }
99
+ }
100
+ /**
101
+ * Helper function to get friendly null value
102
+ * @param path - Dot-notation path to the config field
103
+ * @returns Friendly message for null value
104
+ */
105
+ export function getFriendlyNullValue(path) {
106
+ return friendlyNullValues[path] || friendlyNullValues['default'];
107
+ }
108
+ /**
109
+ * Template builder for wizard steps
110
+ * Allows for dynamic construction of wizard content
111
+ */
112
+ export class WizardTemplateBuilder {
113
+ templates;
114
+ constructor(language = 'en') {
115
+ this.templates = getWizardTemplates(language);
116
+ }
117
+ /**
118
+ * Build the complete wizard text
119
+ */
120
+ buildWizardText(currentConfig) {
121
+ const parts = [
122
+ this.templates.title,
123
+ '',
124
+ this.buildCurrentConfig(currentConfig),
125
+ '',
126
+ this.buildSteps(currentConfig),
127
+ '',
128
+ this.buildInstructions(),
129
+ '',
130
+ this.templates.footer,
131
+ ];
132
+ return parts.join('\n');
133
+ }
134
+ /**
135
+ * Build current configuration section
136
+ */
137
+ buildCurrentConfig(config) {
138
+ return `${this.templates.currentConfigHeader}
139
+ \`\`\`yaml
140
+ ${this.formatConfigAsYaml(config)}
141
+ \`\`\``;
142
+ }
143
+ /**
144
+ * Build all wizard steps
145
+ */
146
+ buildSteps(config) {
147
+ const steps = [];
148
+ // User Identity
149
+ const userStep = this.templates.steps.userIdentity;
150
+ steps.push(this.formatStep(userStep, config.user?.username));
151
+ // GitHub Integration
152
+ const githubStep = this.templates.steps.githubIntegration;
153
+ steps.push(this.formatStep(githubStep, config.github?.auth_token));
154
+ // Portfolio Sync
155
+ const portfolioStep = this.templates.steps.portfolioSync;
156
+ steps.push(this.formatStep(portfolioStep, config.portfolio?.auto_sync));
157
+ // Display Preferences
158
+ const displayStep = this.templates.steps.displayPreferences;
159
+ steps.push(this.formatStep(displayStep, config.indicator?.enabled));
160
+ return steps.join('\n\n');
161
+ }
162
+ /**
163
+ * Format a single wizard step
164
+ */
165
+ formatStep(step, currentValue) {
166
+ const lines = [
167
+ step.title,
168
+ step.description,
169
+ ];
170
+ for (const instruction of step.instructions) {
171
+ lines.push(`- ${instruction}`);
172
+ }
173
+ lines.push(`- Current: ${step.currentValue(currentValue)}`);
174
+ return lines.join('\n');
175
+ }
176
+ /**
177
+ * Build instruction options
178
+ */
179
+ buildInstructions() {
180
+ return [
181
+ this.templates.instructions.quick,
182
+ this.templates.instructions.detailed,
183
+ this.templates.instructions.skip,
184
+ ].join('\n');
185
+ }
186
+ /**
187
+ * Format config as YAML (stub - would use actual yaml library)
188
+ */
189
+ formatConfigAsYaml(config) {
190
+ // This would use the actual yaml.dump with friendly values
191
+ // For now, return a placeholder
192
+ return 'user:\n username: (not set)\n email: (optional)';
193
+ }
194
+ }
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkVGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy93aXphcmRUZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUEwQkg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBb0I7SUFDckQsS0FBSyxFQUFFLHlCQUF5QjtJQUNoQyxtQkFBbUIsRUFBRSwyQkFBMkI7SUFFaEQsS0FBSyxFQUFFO1FBQ0wsWUFBWSxFQUFFO1lBQ1osS0FBSyxFQUFFLDBCQUEwQjtZQUNqQyxXQUFXLEVBQUUsb0dBQW9HO1lBQ2pILFlBQVksRUFBRTtnQkFDWix5REFBeUQ7Z0JBQ3pELCtDQUErQzthQUNoRDtZQUNELFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLDRCQUE0QjtTQUMvRDtRQUVELGlCQUFpQixFQUFFO1lBQ2pCLEtBQUssRUFBRSwwQ0FBMEM7WUFDakQsV0FBVyxFQUFFLHlFQUF5RTtZQUN0RixZQUFZLEVBQUU7Z0JBQ1osb0RBQW9EO2dCQUNwRCxvQ0FBb0M7YUFDckM7WUFDRCxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7U0FDakU7UUFFRCxhQUFhLEVBQUU7WUFDYixLQUFLLEVBQUUsc0NBQXNDO1lBQzdDLFdBQVcsRUFBRSxnREFBZ0Q7WUFDN0QsWUFBWSxFQUFFO2dCQUNaLG1DQUFtQztnQkFDbkMsMkNBQTJDO2FBQzVDO1lBQ0QsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUN0RDtRQUVELGtCQUFrQixFQUFFO1lBQ2xCLEtBQUssRUFBRSxnQ0FBZ0M7WUFDdkMsV0FBVyxFQUFFLCtDQUErQztZQUM1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RCxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFNUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixPQUFPO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSztZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUk7U0FDakMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0IsQ0FBQyxNQUFXO1FBQ3BDLDJEQUEyRDtRQUMzRCxnQ0FBZ0M7UUFDaEMsT0FBTyxtREFBbUQsQ0FBQztJQUM3RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpemFyZCBUZXh0IFRlbXBsYXRlc1xuICogXG4gKiBDZW50cmFsaXplZCBjb25maWd1cmF0aW9uIGZvciBhbGwgd2l6YXJkIHRleHQgdG8gc3VwcG9ydDpcbiAqIC0gSW50ZXJuYXRpb25hbGl6YXRpb24gKGkxOG4pIGluIHRoZSBmdXR1cmVcbiAqIC0gQ29uc2lzdGVudCBtZXNzYWdpbmcgYWNyb3NzIHRoZSBhcHBsaWNhdGlvblxuICogLSBFYXN5IHVwZGF0ZXMgd2l0aG91dCBtb2RpZnlpbmcgYnVzaW5lc3MgbG9naWNcbiAqIC0gVGVtcGxhdGUgcmV1c2FiaWxpdHlcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpemFyZFRlbXBsYXRlcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGN1cnJlbnRDb25maWdIZWFkZXI6IHN0cmluZztcbiAgc3RlcHM6IHtcbiAgICB1c2VySWRlbnRpdHk6IFdpemFyZFN0ZXA7XG4gICAgZ2l0aHViSW50ZWdyYXRpb246IFdpemFyZFN0ZXA7XG4gICAgcG9ydGZvbGlvU3luYzogV2l6YXJkU3RlcDtcbiAgICBkaXNwbGF5UHJlZmVyZW5jZXM6IFdpemFyZFN0ZXA7XG4gIH07XG4gIGluc3RydWN0aW9uczoge1xuICAgIHF1aWNrOiBzdHJpbmc7XG4gICAgZGV0YWlsZWQ6IHN0cmluZztcbiAgICBza2lwOiBzdHJpbmc7XG4gIH07XG4gIGZvb3Rlcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpemFyZFN0ZXAge1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBpbnN0cnVjdGlvbnM6IHN0cmluZ1tdO1xuICBjdXJyZW50VmFsdWU6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmYXVsdCBFbmdsaXNoIHRlbXBsYXRlc1xuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFdpemFyZFRlbXBsYXRlczogV2l6YXJkVGVtcGxhdGVzID0ge1xuICB0aXRsZTogJ/Cfp5kgQ29uZmlndXJhdGlvbiBXaXphcmQnLFxuICBjdXJyZW50Q29uZmlnSGVhZGVyOiAn8J+TiiBDdXJyZW50IENvbmZpZ3VyYXRpb246JyxcbiAgXG4gIHN0ZXBzOiB7XG4gICAgdXNlcklkZW50aXR5OiB7XG4gICAgICB0aXRsZTogJ/Cfjq8gU3RlcCAxOiBVc2VyIElkZW50aXR5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyB0YWdzIHlvdXIgY3JlYXRpb25zIHNvIHlvdSBjYW4gZmluZCB0aGVtIGxhdGVyLiBFdmVyeXRoaW5nIGlzIHNhdmVkIGxvY2FsbHkgb24geW91ciBjb21wdXRlci4nLFxuICAgICAgaW5zdHJ1Y3Rpb25zOiBbXG4gICAgICAgICdUbyBzZXQgYSB1c2VybmFtZTogU2F5IFwiU2V0IG15IHVzZXJuYW1lIHRvIFt5b3VyLW5hbWVdXCInLFxuICAgICAgICAnVG8gc3RheSBhbm9ueW1vdXM6IFNheSBcIklcXCdsbCBzdGF5IGFub255bW91c1wiJyxcbiAgICAgIF0sXG4gICAgICBjdXJyZW50VmFsdWU6ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJyhub3Qgc2V0IC0gYW5vbnltb3VzIG1vZGUpJyxcbiAgICB9LFxuICAgIFxuICAgIGdpdGh1YkludGVncmF0aW9uOiB7XG4gICAgICB0aXRsZTogJ/CflJAgU3RlcCAyOiBHaXRIdWIgSW50ZWdyYXRpb24gKE9wdGlvbmFsKScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Nvbm5lY3QgdG8gR2l0SHViIHRvIHNoYXJlIHlvdXIgY3JlYXRpb25zIGFuZCBicm93c2UgY29tbXVuaXR5IGNvbnRlbnQuJyxcbiAgICAgIGluc3RydWN0aW9uczogW1xuICAgICAgICAnVG8gY29ubmVjdCBHaXRIdWI6IFNheSBcIkNvbm5lY3QgbXkgR2l0SHViIGFjY291bnRcIicsXG4gICAgICAgICdUbyBza2lwOiBTYXkgXCJTa2lwIEdpdEh1YiBmb3Igbm93XCInLFxuICAgICAgXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogKHZhbHVlKSA9PiB2YWx1ZSA/ICdDb25uZWN0ZWQnIDogJyhub3QgY29ubmVjdGVkKScsXG4gICAgfSxcbiAgICBcbiAgICBwb3J0Zm9saW9TeW5jOiB7XG4gICAgICB0aXRsZTogJ/CflIQgU3RlcCAzOiBQb3J0Zm9saW8gU3luYyAoT3B0aW9uYWwpJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQXV0b21hdGljYWxseSBiYWNrdXAgeW91ciBjcmVhdGlvbnMgdG8gR2l0SHViLicsXG4gICAgICBpbnN0cnVjdGlvbnM6IFtcbiAgICAgICAgJ1RvIGVuYWJsZTogU2F5IFwiRW5hYmxlIGF1dG8tc3luY1wiJyxcbiAgICAgICAgJ1RvIGtlZXAgbWFudWFsOiBTYXkgXCJJXFwnbGwgc3luYyBtYW51YWxseVwiJyxcbiAgICAgIF0sXG4gICAgICBjdXJyZW50VmFsdWU6ICh2YWx1ZSkgPT4gdmFsdWUgPyAnRW5hYmxlZCcgOiAnTWFudWFsJyxcbiAgICB9LFxuICAgIFxuICAgIGRpc3BsYXlQcmVmZXJlbmNlczoge1xuICAgICAgdGl0bGU6ICfwn46oIFN0ZXAgNDogRGlzcGxheSBQcmVmZXJlbmNlcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0N1c3RvbWl6ZSBob3cgRG9sbGhvdXNlTUNQIHNob3dzIGluZm9ybWF0aW9uLicsXG4gICAgICBpbnN0cnVjdGlvbnM6IFtcbiAgICAgICAgJ1RvIHNob3cgYWN0aXZlIHBlcnNvbmE6IFNheSBcIlNob3cgcGVyc29uYSBpbmRpY2F0b3JzXCInLFxuICAgICAgICAnVG8ga2VlcCBtaW5pbWFsOiBTYXkgXCJVc2UgbWluaW1hbCBkaXNwbGF5XCInLFxuICAgICAgXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogKHZhbHVlKSA9PiB2YWx1ZSA/ICdFbmFibGVkJyA6ICdNaW5pbWFsJyxcbiAgICB9LFxuICB9LFxuICBcbiAgaW5zdHJ1Y3Rpb25zOiB7XG4gICAgcXVpY2s6ICfwn5KhICoqUXVpY2sgU2V0dXAqKjogU2F5IFwiQ29uZmlndXJlIHRoZSBiYXNpY3NcIiB0byBzZXQganVzdCB1c2VybmFtZSBhbmQgR2l0SHViJyxcbiAgICBkZXRhaWxlZDogJ/Cfk50gKipEZXRhaWxlZCBTZXR1cCoqOiBTYXkgXCJDb25maWd1cmUgZXZlcnl0aGluZ1wiIHRvIGdvIHRocm91Z2ggYWxsIG9wdGlvbnMnLFxuICAgIHNraXA6ICfij63vuI8gKipTa2lwIGZvciBOb3cqKjogU2F5IFwiU2tpcCB3aXphcmRcIiB0byB1c2UgYW5vbnltb3VzIG1vZGUnLFxuICB9LFxuICBcbiAgZm9vdGVyOiAn4pyoIFlvdSBjYW4gYWx3YXlzIGNoYW5nZSB0aGVzZSBzZXR0aW5ncyBsYXRlciBieSBzYXlpbmcgXCJPcGVuIGNvbmZpZ3VyYXRpb24gd2l6YXJkXCInLFxufTtcblxuLyoqXG4gKiBGcmllbmRseSB2YWx1ZSByZXBsYWNlbWVudHMgZm9yIG51bGwvdW5kZWZpbmVkIGNvbmZpZyB2YWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGZyaWVuZGx5TnVsbFZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgLy8gVXNlciBmaWVsZHNcbiAgJ3VzZXIudXNlcm5hbWUnOiAnKG5vdCBzZXQgLSBhbm9ueW1vdXMgbW9kZSBhY3RpdmUpJyxcbiAgJ3VzZXIuZW1haWwnOiAnKG9wdGlvbmFsIC0gbm90IHNldCknLFxuICAndXNlci5kaXNwbGF5X25hbWUnOiAnKG5vdCBzZXQgLSB3aWxsIHVzZSB1c2VybmFtZSknLFxuICBcbiAgLy8gR2l0SHViIGZpZWxkc1xuICAnZ2l0aHViLmF1dGhfdG9rZW4nOiAnKG5vdCBjb25maWd1cmVkIC0gR2l0SHViIGZlYXR1cmVzIGRpc2FibGVkKScsXG4gICdnaXRodWIub2F1dGhfdG9rZW4nOiAnKG5vdCBhdXRoZW50aWNhdGVkKScsXG4gICdnaXRodWIuZGVmYXVsdF9yZXBvc2l0b3J5JzogJyhub3Qgc2V0IC0gd2lsbCB1c2UgZGVmYXVsdCknLFxuICAnZ2l0aHViLnVzZXJuYW1lJzogJyhub3QgY29ubmVjdGVkKScsXG4gIFxuICAvLyBQb3J0Zm9saW8gc3luYyBmaWVsZHNcbiAgJ3BvcnRmb2xpby5zeW5jX3N0YXR1cy5sYXN0X3N5bmMnOiAnKG5ldmVyIHN5bmNlZCknLFxuICAncG9ydGZvbGlvLnN5bmNfc3RhdHVzLmxhc3RfcHVzaCc6ICcobmV2ZXIgcHVzaGVkKScsXG4gICdwb3J0Zm9saW8uc3luY19zdGF0dXMubGFzdF9wdWxsJzogJyhuZXZlciBwdWxsZWQpJyxcbiAgJ3BvcnRmb2xpby5yZXBvc2l0b3J5X25hbWUnOiBgKHVzaW5nIGRlZmF1bHQ6ICR7cHJvY2Vzcy5lbnYuVEVTVF9HSVRIVUJfUkVQTyB8fCAnZG9sbGhvdXNlLXBvcnRmb2xpbyd9KWAsXG4gIFxuICAvLyBDb2xsZWN0aW9uIHN1Ym1pc3Npb25cbiAgJ2NvbGxlY3Rpb25fc3VibWlzc2lvbi5hdXRvX3N1Ym1pdCc6ICcoZGlzYWJsZWQpJyxcbiAgXG4gIC8vIEluZGljYXRvciBzZXR0aW5nc1xuICAnaW5kaWNhdG9yLmN1c3RvbV9mb3JtYXQnOiAnKHVzaW5nIGRlZmF1bHQgZm9ybWF0KScsXG4gIFxuICAvLyBEZWZhdWx0IGZvciBhbnkgb3RoZXIgbnVsbFxuICAnZGVmYXVsdCc6ICcobm90IHNldCknLFxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHdpemFyZCB0ZXh0IGluIHNwZWNpZmllZCBsYW5ndWFnZVxuICogQHBhcmFtIGxhbmd1YWdlIC0gTGFuZ3VhZ2UgY29kZSAoZS5nLiwgJ2VuJywgJ2VzJywgJ2ZyJylcbiAqIEByZXR1cm5zIFdpemFyZCB0ZW1wbGF0ZXMgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdpemFyZFRlbXBsYXRlcyhsYW5ndWFnZTogc3RyaW5nID0gJ2VuJyk6IFdpemFyZFRlbXBsYXRlcyB7XG4gIC8vIEZvciBub3csIG9ubHkgRW5nbGlzaCBpcyBzdXBwb3J0ZWRcbiAgLy8gRnV0dXJlOiBMb2FkIGZyb20gbGFuZ3VhZ2Utc3BlY2lmaWMgZmlsZXNcbiAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgIGNhc2UgJ2VuJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRXaXphcmRUZW1wbGF0ZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGZyaWVuZGx5IG51bGwgdmFsdWVcbiAqIEBwYXJhbSBwYXRoIC0gRG90LW5vdGF0aW9uIHBhdGggdG8gdGhlIGNvbmZpZyBmaWVsZFxuICogQHJldHVybnMgRnJpZW5kbHkgbWVzc2FnZSBmb3IgbnVsbCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnJpZW5kbHlOdWxsVmFsdWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZyaWVuZGx5TnVsbFZhbHVlc1twYXRoXSB8fCBmcmllbmRseU51bGxWYWx1ZXNbJ2RlZmF1bHQnXTtcbn1cblxuLyoqXG4gKiBUZW1wbGF0ZSBidWlsZGVyIGZvciB3aXphcmQgc3RlcHNcbiAqIEFsbG93cyBmb3IgZHluYW1pYyBjb25zdHJ1Y3Rpb24gb2Ygd2l6YXJkIGNvbnRlbnRcbiAqL1xuZXhwb3J0IGNsYXNzIFdpemFyZFRlbXBsYXRlQnVpbGRlciB7XG4gIHByaXZhdGUgdGVtcGxhdGVzOiBXaXphcmRUZW1wbGF0ZXM7XG4gIFxuICBjb25zdHJ1Y3RvcihsYW5ndWFnZTogc3RyaW5nID0gJ2VuJykge1xuICAgIHRoaXMudGVtcGxhdGVzID0gZ2V0V2l6YXJkVGVtcGxhdGVzKGxhbmd1YWdlKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBjb21wbGV0ZSB3aXphcmQgdGV4dFxuICAgKi9cbiAgYnVpbGRXaXphcmRUZXh0KGN1cnJlbnRDb25maWc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW1xuICAgICAgdGhpcy50ZW1wbGF0ZXMudGl0bGUsXG4gICAgICAnJyxcbiAgICAgIHRoaXMuYnVpbGRDdXJyZW50Q29uZmlnKGN1cnJlbnRDb25maWcpLFxuICAgICAgJycsXG4gICAgICB0aGlzLmJ1aWxkU3RlcHMoY3VycmVudENvbmZpZyksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuYnVpbGRJbnN0cnVjdGlvbnMoKSxcbiAgICAgICcnLFxuICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9vdGVyLFxuICAgIF07XG4gICAgXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJ1xcbicpO1xuICB9XG4gIFxuICAvKipcbiAgICogQnVpbGQgY3VycmVudCBjb25maWd1cmF0aW9uIHNlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYnVpbGRDdXJyZW50Q29uZmlnKGNvbmZpZzogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy50ZW1wbGF0ZXMuY3VycmVudENvbmZpZ0hlYWRlcn1cblxcYFxcYFxcYHlhbWxcbiR7dGhpcy5mb3JtYXRDb25maWdBc1lhbWwoY29uZmlnKX1cblxcYFxcYFxcYGA7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBCdWlsZCBhbGwgd2l6YXJkIHN0ZXBzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkU3RlcHMoY29uZmlnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0ZXBzID0gW107XG4gICAgXG4gICAgLy8gVXNlciBJZGVudGl0eVxuICAgIGNvbnN0IHVzZXJTdGVwID0gdGhpcy50ZW1wbGF0ZXMuc3RlcHMudXNlcklkZW50aXR5O1xuICAgIHN0ZXBzLnB1c2godGhpcy5mb3JtYXRTdGVwKHVzZXJTdGVwLCBjb25maWcudXNlcj8udXNlcm5hbWUpKTtcbiAgICBcbiAgICAvLyBHaXRIdWIgSW50ZWdyYXRpb25cbiAgICBjb25zdCBnaXRodWJTdGVwID0gdGhpcy50ZW1wbGF0ZXMuc3RlcHMuZ2l0aHViSW50ZWdyYXRpb247XG4gICAgc3RlcHMucHVzaCh0aGlzLmZvcm1hdFN0ZXAoZ2l0aHViU3RlcCwgY29uZmlnLmdpdGh1Yj8uYXV0aF90b2tlbikpO1xuICAgIFxuICAgIC8vIFBvcnRmb2xpbyBTeW5jXG4gICAgY29uc3QgcG9ydGZvbGlvU3RlcCA9IHRoaXMudGVtcGxhdGVzLnN0ZXBzLnBvcnRmb2xpb1N5bmM7XG4gICAgc3RlcHMucHVzaCh0aGlzLmZvcm1hdFN0ZXAocG9ydGZvbGlvU3RlcCwgY29uZmlnLnBvcnRmb2xpbz8uYXV0b19zeW5jKSk7XG4gICAgXG4gICAgLy8gRGlzcGxheSBQcmVmZXJlbmNlc1xuICAgIGNvbnN0IGRpc3BsYXlTdGVwID0gdGhpcy50ZW1wbGF0ZXMuc3RlcHMuZGlzcGxheVByZWZlcmVuY2VzO1xuICAgIHN0ZXBzLnB1c2godGhpcy5mb3JtYXRTdGVwKGRpc3BsYXlTdGVwLCBjb25maWcuaW5kaWNhdG9yPy5lbmFibGVkKSk7XG4gICAgXG4gICAgcmV0dXJuIHN0ZXBzLmpvaW4oJ1xcblxcbicpO1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IGEgc2luZ2xlIHdpemFyZCBzdGVwXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFN0ZXAoc3RlcDogV2l6YXJkU3RlcCwgY3VycmVudFZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgc3RlcC50aXRsZSxcbiAgICAgIHN0ZXAuZGVzY3JpcHRpb24sXG4gICAgXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIHN0ZXAuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICR7aW5zdHJ1Y3Rpb259YCk7XG4gICAgfVxuICAgIFxuICAgIGxpbmVzLnB1c2goYC0gQ3VycmVudDogJHtzdGVwLmN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpfWApO1xuICAgIFxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEJ1aWxkIGluc3RydWN0aW9uIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRJbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy50ZW1wbGF0ZXMuaW5zdHJ1Y3Rpb25zLnF1aWNrLFxuICAgICAgdGhpcy50ZW1wbGF0ZXMuaW5zdHJ1Y3Rpb25zLmRldGFpbGVkLFxuICAgICAgdGhpcy50ZW1wbGF0ZXMuaW5zdHJ1Y3Rpb25zLnNraXAsXG4gICAgXS5qb2luKCdcXG4nKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcm1hdCBjb25maWcgYXMgWUFNTCAoc3R1YiAtIHdvdWxkIHVzZSBhY3R1YWwgeWFtbCBsaWJyYXJ5KVxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRDb25maWdBc1lhbWwoY29uZmlnOiBhbnkpOiBzdHJpbmcge1xuICAgIC8vIFRoaXMgd291bGQgdXNlIHRoZSBhY3R1YWwgeWFtbC5kdW1wIHdpdGggZnJpZW5kbHkgdmFsdWVzXG4gICAgLy8gRm9yIG5vdywgcmV0dXJuIGEgcGxhY2Vob2xkZXJcbiAgICByZXR1cm4gJ3VzZXI6XFxuICB1c2VybmFtZTogKG5vdCBzZXQpXFxuICBlbWFpbDogKG9wdGlvbmFsKSc7XG4gIH1cbn0iXX0=
@@ -4,6 +4,21 @@
4
4
  */
5
5
  import { IElement, IElementMetadata, ElementStatus, ElementRatings, Reference, ElementValidationResult, FeedbackContext } from '../types/elements/index.js';
6
6
  import { ElementType } from '../portfolio/types.js';
7
+ /**
8
+ * Normalizes version strings to full semver format (X.Y.Z)
9
+ * This helps maintain consistency while accepting flexible input formats
10
+ *
11
+ * @param version - The version string to normalize
12
+ * @returns Normalized version string in X.Y.Z format with leading zeros removed
13
+ *
14
+ * @example
15
+ * normalizeVersion("1") // "1.0.0"
16
+ * normalizeVersion("1.2") // "1.2.0"
17
+ * normalizeVersion("1.2.3") // "1.2.3"
18
+ * normalizeVersion("1.0-beta") // "1.0.0-beta"
19
+ * normalizeVersion("01.02.03") // "1.2.3" (strips leading zeros)
20
+ */
21
+ export declare function normalizeVersion(version: string): string;
7
22
  export declare abstract class BaseElement implements IElement {
8
23
  id: string;
9
24
  type: ElementType;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseElement.d.ts","sourceRoot":"","sources":["../../src/elements/BaseElement.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,SAAS,EACT,uBAAuB,EAGvB,eAAe,EAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQpD,8BAAsB,WAAY,YAAW,QAAQ;IAE5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAGhB,QAAQ,EAAE,gBAAgB,CAAC;IAG3B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,cAAc,CAAC;IAGhC,SAAS,CAAC,OAAO,EAAE,aAAa,CAA0B;IAC1D,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAS;IAGpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;gBAEhC,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAgCvE;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAW1C;;;OAGG;IACI,QAAQ,IAAI,uBAAuB;IA8F1C;;;OAGG;IACI,eAAe,IAAI,MAAM;IAchC;;;;;OAKG;IACI,SAAS,IAAI,MAAM;IAoE1B;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,MAAM;IAE/B;;;OAGG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA0CtC;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IA6DzE;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS;IAcjF;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAyB3D;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA+BnD;;OAEG;IACI,SAAS,IAAI,aAAa;IAIjC;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxC;;OAEG;IACH,SAAS,CAAC,SAAS,IAAI,IAAI;IAK3B;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;OAEG;IACI,SAAS,IAAI,IAAI;CAGzB"}
1
+ {"version":3,"file":"BaseElement.d.ts","sourceRoot":"","sources":["../../src/elements/BaseElement.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,SAAS,EACT,uBAAuB,EAGvB,eAAe,EAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQpD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAiBxD;AAED,8BAAsB,WAAY,YAAW,QAAQ;IAE5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAGhB,QAAQ,EAAE,gBAAgB,CAAC;IAG3B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,cAAc,CAAC;IAGhC,SAAS,CAAC,OAAO,EAAE,aAAa,CAA0B;IAC1D,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAS;IAGpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;gBAEhC,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAgCvE;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAW1C;;;OAGG;IACI,QAAQ,IAAI,uBAAuB;IAmG1C;;;OAGG;IACI,eAAe,IAAI,MAAM;IAchC;;;;;OAKG;IACI,SAAS,IAAI,MAAM;IAoE1B;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,MAAM;IAE/B;;;OAGG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA0CtC;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IA6DzE;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS;IAcjF;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAyB3D;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA+BnD;;OAEG;IACI,SAAS,IAAI,aAAa;IAIjC;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxC;;OAEG;IACH,SAAS,CAAC,SAAS,IAAI,IAAI;IAK3B;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;OAEG;IACI,SAAS,IAAI,IAAI;CAGzB"}