youmd 0.4.4 → 0.5.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.
Files changed (85) hide show
  1. package/dist/commands/build.d.ts.map +1 -1
  2. package/dist/commands/build.js +27 -5
  3. package/dist/commands/build.js.map +1 -1
  4. package/dist/commands/chat.d.ts.map +1 -1
  5. package/dist/commands/chat.js +47 -7
  6. package/dist/commands/chat.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +30 -0
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/link.js +1 -1
  11. package/dist/commands/link.js.map +1 -1
  12. package/dist/commands/login.d.ts.map +1 -1
  13. package/dist/commands/login.js +150 -24
  14. package/dist/commands/login.js.map +1 -1
  15. package/dist/commands/preview.js +1 -1
  16. package/dist/commands/preview.js.map +1 -1
  17. package/dist/commands/publish.d.ts.map +1 -1
  18. package/dist/commands/publish.js +66 -4
  19. package/dist/commands/publish.js.map +1 -1
  20. package/dist/commands/pull.d.ts.map +1 -1
  21. package/dist/commands/pull.js +68 -4
  22. package/dist/commands/pull.js.map +1 -1
  23. package/dist/commands/push.d.ts +1 -0
  24. package/dist/commands/push.d.ts.map +1 -1
  25. package/dist/commands/push.js +120 -2
  26. package/dist/commands/push.js.map +1 -1
  27. package/dist/commands/register.d.ts.map +1 -1
  28. package/dist/commands/register.js +174 -39
  29. package/dist/commands/register.js.map +1 -1
  30. package/dist/commands/skill.d.ts +8 -0
  31. package/dist/commands/skill.d.ts.map +1 -0
  32. package/dist/commands/skill.js +1150 -0
  33. package/dist/commands/skill.js.map +1 -0
  34. package/dist/commands/status.d.ts.map +1 -1
  35. package/dist/commands/status.js +118 -2
  36. package/dist/commands/status.js.map +1 -1
  37. package/dist/commands/sync.d.ts.map +1 -1
  38. package/dist/commands/sync.js +12 -0
  39. package/dist/commands/sync.js.map +1 -1
  40. package/dist/commands/whoami.d.ts.map +1 -1
  41. package/dist/commands/whoami.js +16 -11
  42. package/dist/commands/whoami.js.map +1 -1
  43. package/dist/index.js +12 -3
  44. package/dist/index.js.map +1 -1
  45. package/dist/lib/api.d.ts +88 -5
  46. package/dist/lib/api.d.ts.map +1 -1
  47. package/dist/lib/api.js +56 -2
  48. package/dist/lib/api.js.map +1 -1
  49. package/dist/lib/ascii.d.ts +14 -0
  50. package/dist/lib/ascii.d.ts.map +1 -0
  51. package/dist/lib/ascii.js +108 -0
  52. package/dist/lib/ascii.js.map +1 -0
  53. package/dist/lib/config.d.ts +26 -0
  54. package/dist/lib/config.d.ts.map +1 -1
  55. package/dist/lib/config.js +40 -0
  56. package/dist/lib/config.js.map +1 -1
  57. package/dist/lib/hash.d.ts +3 -0
  58. package/dist/lib/hash.d.ts.map +1 -0
  59. package/dist/lib/hash.js +31 -0
  60. package/dist/lib/hash.js.map +1 -0
  61. package/dist/lib/onboarding.d.ts +1 -1
  62. package/dist/lib/onboarding.d.ts.map +1 -1
  63. package/dist/lib/onboarding.js +227 -85
  64. package/dist/lib/onboarding.js.map +1 -1
  65. package/dist/lib/render.d.ts +4 -2
  66. package/dist/lib/render.d.ts.map +1 -1
  67. package/dist/lib/render.js +81 -9
  68. package/dist/lib/render.js.map +1 -1
  69. package/dist/lib/skill-catalog.d.ts +57 -0
  70. package/dist/lib/skill-catalog.d.ts.map +1 -0
  71. package/dist/lib/skill-catalog.js +196 -0
  72. package/dist/lib/skill-catalog.js.map +1 -0
  73. package/dist/lib/skill-renderer.d.ts +55 -0
  74. package/dist/lib/skill-renderer.d.ts.map +1 -0
  75. package/dist/lib/skill-renderer.js +364 -0
  76. package/dist/lib/skill-renderer.js.map +1 -0
  77. package/dist/lib/skills.d.ts +125 -0
  78. package/dist/lib/skills.d.ts.map +1 -0
  79. package/dist/lib/skills.js +677 -0
  80. package/dist/lib/skills.js.map +1 -0
  81. package/package.json +8 -4
  82. package/skills/claude-md-generator.md +66 -0
  83. package/skills/meta-improve.md +57 -0
  84. package/skills/project-context-init.md +51 -0
  85. package/skills/voice-sync.md +41 -0
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ /**
3
+ * Skill catalog — YAML parser/writer for youmd-skills.yaml
4
+ *
5
+ * Manages the catalog of installed/available skills with metadata
6
+ * including identity field requirements and scope.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.readSkillCatalog = readSkillCatalog;
43
+ exports.writeSkillCatalog = writeSkillCatalog;
44
+ exports.findSkill = findSkill;
45
+ exports.addSkillEntry = addSkillEntry;
46
+ exports.removeSkillEntry = removeSkillEntry;
47
+ exports.setSkillInstalled = setSkillInstalled;
48
+ exports.getAffectedSkills = getAffectedSkills;
49
+ exports.searchSkills = searchSkills;
50
+ const fs = __importStar(require("fs"));
51
+ const yaml = __importStar(require("js-yaml"));
52
+ const config_1 = require("./config");
53
+ /**
54
+ * Default bundled skills that ship with youmd.
55
+ */
56
+ function defaultSkills(owner) {
57
+ return [
58
+ {
59
+ name: "claude-md-generator",
60
+ description: "Generate CLAUDE.md from identity + project detection",
61
+ version: "1.0.0",
62
+ source: "bundled:you-agent/skills/claude-md-generator.md",
63
+ scope: "shared",
64
+ identity_fields: ["preferences.agent", "directives.agent", "voice.overall"],
65
+ requires: [],
66
+ installed: false,
67
+ },
68
+ {
69
+ name: "project-context-init",
70
+ description: "Scaffold project-context/ directory with PRD, TODO, features, changelog",
71
+ version: "1.0.0",
72
+ source: "bundled:you-agent/skills/project-context-init.md",
73
+ scope: "project",
74
+ identity_fields: ["preferences.agent", "profile.about"],
75
+ requires: [],
76
+ installed: false,
77
+ },
78
+ {
79
+ name: "voice-sync",
80
+ description: "Sync voice profile across all agent tools",
81
+ version: "1.0.0",
82
+ source: "bundled:you-agent/skills/voice-sync.md",
83
+ scope: "shared",
84
+ identity_fields: ["voice.overall", "voice.writing", "voice.speaking"],
85
+ requires: [],
86
+ installed: false,
87
+ },
88
+ {
89
+ name: "meta-improve",
90
+ description: "Self-improvement protocol — review effectiveness, propose identity updates",
91
+ version: "1.0.0",
92
+ source: "bundled:you-agent/skills/meta-improve.md",
93
+ scope: "shared",
94
+ identity_fields: ["preferences.agent", "directives.agent"],
95
+ requires: [],
96
+ installed: false,
97
+ },
98
+ ];
99
+ }
100
+ /**
101
+ * Read the skill catalog from disk. Creates default if missing.
102
+ */
103
+ function readSkillCatalog() {
104
+ const catalogPath = (0, config_1.getSkillCatalogPath)();
105
+ if (fs.existsSync(catalogPath)) {
106
+ try {
107
+ const raw = fs.readFileSync(catalogPath, "utf-8");
108
+ const parsed = yaml.load(raw);
109
+ if (parsed && parsed.skills) {
110
+ return parsed;
111
+ }
112
+ }
113
+ catch {
114
+ // Fall through to defaults
115
+ }
116
+ }
117
+ // Create default catalog
118
+ const config = (0, config_1.readGlobalConfig)();
119
+ const owner = config.username || "anonymous";
120
+ const catalog = {
121
+ version: 1,
122
+ owner,
123
+ skills: defaultSkills(owner),
124
+ };
125
+ writeSkillCatalog(catalog);
126
+ return catalog;
127
+ }
128
+ /**
129
+ * Write the skill catalog to disk.
130
+ */
131
+ function writeSkillCatalog(catalog) {
132
+ (0, config_1.ensureSkillsDir)();
133
+ const catalogPath = (0, config_1.getSkillCatalogPath)();
134
+ const yamlStr = yaml.dump(catalog, {
135
+ lineWidth: 120,
136
+ noRefs: true,
137
+ quotingType: '"',
138
+ forceQuotes: false,
139
+ });
140
+ fs.writeFileSync(catalogPath, yamlStr);
141
+ }
142
+ /**
143
+ * Find a skill entry by name.
144
+ */
145
+ function findSkill(catalog, name) {
146
+ return catalog.skills.find((s) => s.name === name || s.name.toLowerCase() === name.toLowerCase());
147
+ }
148
+ /**
149
+ * Add a new skill entry to the catalog.
150
+ */
151
+ function addSkillEntry(catalog, entry) {
152
+ const existing = findSkill(catalog, entry.name);
153
+ if (existing) {
154
+ // Update existing
155
+ Object.assign(existing, entry);
156
+ }
157
+ else {
158
+ catalog.skills.push({ installed: false, ...entry });
159
+ }
160
+ writeSkillCatalog(catalog);
161
+ return catalog;
162
+ }
163
+ /**
164
+ * Remove a skill entry from the catalog.
165
+ */
166
+ function removeSkillEntry(catalog, name) {
167
+ catalog.skills = catalog.skills.filter((s) => s.name !== name);
168
+ writeSkillCatalog(catalog);
169
+ return catalog;
170
+ }
171
+ /**
172
+ * Mark a skill as installed/uninstalled.
173
+ */
174
+ function setSkillInstalled(catalog, name, installed) {
175
+ const skill = findSkill(catalog, name);
176
+ if (skill) {
177
+ skill.installed = installed;
178
+ writeSkillCatalog(catalog);
179
+ }
180
+ return catalog;
181
+ }
182
+ /**
183
+ * Get skills whose identity_fields overlap with a set of changed fields.
184
+ */
185
+ function getAffectedSkills(catalog, changedFields) {
186
+ return catalog.skills.filter((s) => s.installed && s.identity_fields.some((f) => changedFields.includes(f)));
187
+ }
188
+ /**
189
+ * Search skills by name or description substring.
190
+ */
191
+ function searchSkills(catalog, query) {
192
+ const q = query.toLowerCase();
193
+ return catalog.skills.filter((s) => s.name.toLowerCase().includes(q) ||
194
+ s.description.toLowerCase().includes(q));
195
+ }
196
+ //# sourceMappingURL=skill-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-catalog.js","sourceRoot":"","sources":["../../src/lib/skill-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Skill renderer — identity-aware template interpolation.
3
+ *
4
+ * Resolves {{var}} template variables in skill markdown against
5
+ * the user's live identity context data.
6
+ *
7
+ * Variable paths use dot notation:
8
+ * {{voice.overall}} → preferences/voice.md or profile section
9
+ * {{preferences.agent}} → preferences/agent.md content
10
+ * {{directives.agent}} → preferences/directives.md or agent section
11
+ * {{profile.about}} → profile/about.md content
12
+ * {{project_name}} → detected project name
13
+ */
14
+ export interface IdentityData {
15
+ profile: Record<string, string>;
16
+ preferences: Record<string, string>;
17
+ voice: Record<string, string>;
18
+ directives: Record<string, string>;
19
+ project_name: string;
20
+ username: string;
21
+ }
22
+ /**
23
+ * Load identity data from the local .youmd/ bundle.
24
+ * Reads profile/ and preferences/ directories, plus you.json if available.
25
+ */
26
+ export declare function loadIdentityData(): IdentityData;
27
+ /**
28
+ * Resolve a dot-path variable against identity data.
29
+ *
30
+ * Examples:
31
+ * "voice.overall" → data.voice.overall
32
+ * "preferences.agent" → data.preferences.agent
33
+ * "profile.about" → data.profile.about
34
+ * "project_name" → data.project_name
35
+ * "username" → data.username
36
+ */
37
+ export declare function resolveVariable(varPath: string, data: IdentityData): string;
38
+ /**
39
+ * Render a skill template by interpolating all {{var}} placeholders.
40
+ */
41
+ export declare function renderSkillTemplate(template: string, data?: IdentityData): string;
42
+ /**
43
+ * Extract all {{var}} references from a skill template.
44
+ */
45
+ export declare function extractTemplateVars(template: string): string[];
46
+ /**
47
+ * Check which identity fields a skill template references
48
+ * and which ones have actual data.
49
+ */
50
+ export declare function checkTemplateReadiness(template: string, data?: IdentityData): {
51
+ total: number;
52
+ filled: number;
53
+ missing: string[];
54
+ };
55
+ //# sourceMappingURL=skill-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-renderer.d.ts","sourceRoot":"","sources":["../../src/lib/skill-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAiG/C;AAoID;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAqB3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAOjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAW9D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAiBA"}
@@ -0,0 +1,364 @@
1
+ "use strict";
2
+ /**
3
+ * Skill renderer — identity-aware template interpolation.
4
+ *
5
+ * Resolves {{var}} template variables in skill markdown against
6
+ * the user's live identity context data.
7
+ *
8
+ * Variable paths use dot notation:
9
+ * {{voice.overall}} → preferences/voice.md or profile section
10
+ * {{preferences.agent}} → preferences/agent.md content
11
+ * {{directives.agent}} → preferences/directives.md or agent section
12
+ * {{profile.about}} → profile/about.md content
13
+ * {{project_name}} → detected project name
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ var __importDefault = (this && this.__importDefault) || function (mod) {
49
+ return (mod && mod.__esModule) ? mod : { "default": mod };
50
+ };
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.loadIdentityData = loadIdentityData;
53
+ exports.resolveVariable = resolveVariable;
54
+ exports.renderSkillTemplate = renderSkillTemplate;
55
+ exports.extractTemplateVars = extractTemplateVars;
56
+ exports.checkTemplateReadiness = checkTemplateReadiness;
57
+ const fs = __importStar(require("fs"));
58
+ const path = __importStar(require("path"));
59
+ const gray_matter_1 = __importDefault(require("gray-matter"));
60
+ const config_1 = require("./config");
61
+ /**
62
+ * Load identity data from the local .youmd/ bundle.
63
+ * Reads profile/ and preferences/ directories, plus you.json if available.
64
+ */
65
+ function loadIdentityData() {
66
+ const data = {
67
+ profile: {},
68
+ preferences: {},
69
+ voice: {},
70
+ directives: {},
71
+ project_name: "",
72
+ username: "",
73
+ };
74
+ // Try to detect project name
75
+ const project = (0, config_1.detectProjectContext)();
76
+ if (project) {
77
+ data.project_name = project.name;
78
+ }
79
+ if (!(0, config_1.localBundleExists)()) {
80
+ return data;
81
+ }
82
+ const bundleDir = (0, config_1.getLocalBundleDir)();
83
+ // Read username from config
84
+ const configPath = path.join(require("os").homedir(), ".youmd", "config.json");
85
+ if (fs.existsSync(configPath)) {
86
+ try {
87
+ const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
88
+ data.username = config.username || "";
89
+ }
90
+ catch {
91
+ // skip
92
+ }
93
+ }
94
+ // Read profile sections
95
+ const profileDir = path.join(bundleDir, "profile");
96
+ if (fs.existsSync(profileDir)) {
97
+ for (const file of fs.readdirSync(profileDir).filter((f) => f.endsWith(".md"))) {
98
+ const slug = path.basename(file, ".md");
99
+ const raw = fs.readFileSync(path.join(profileDir, file), "utf-8");
100
+ const { content } = (0, gray_matter_1.default)(raw);
101
+ data.profile[slug] = content.trim();
102
+ }
103
+ }
104
+ // Read preference sections
105
+ const prefsDir = path.join(bundleDir, "preferences");
106
+ if (fs.existsSync(prefsDir)) {
107
+ for (const file of fs.readdirSync(prefsDir).filter((f) => f.endsWith(".md"))) {
108
+ const slug = path.basename(file, ".md");
109
+ const raw = fs.readFileSync(path.join(prefsDir, file), "utf-8");
110
+ const { content } = (0, gray_matter_1.default)(raw);
111
+ const text = content.trim();
112
+ data.preferences[slug] = text;
113
+ // Also map to voice/directives if the slug matches
114
+ if (slug === "voice" || slug.startsWith("voice-")) {
115
+ const voiceKey = slug === "voice" ? "overall" : slug.replace("voice-", "");
116
+ data.voice[voiceKey] = text;
117
+ }
118
+ if (slug === "directives" || slug.startsWith("directives-")) {
119
+ const dirKey = slug === "directives" ? "agent" : slug.replace("directives-", "");
120
+ data.directives[dirKey] = text;
121
+ }
122
+ }
123
+ }
124
+ // Read voice/ directory (pull creates voice/voice.md, voice/voice.linkedin.md, etc.)
125
+ const voiceDir = path.join(bundleDir, "voice");
126
+ if (fs.existsSync(voiceDir)) {
127
+ for (const file of fs.readdirSync(voiceDir).filter((f) => f.endsWith(".md"))) {
128
+ const raw = fs.readFileSync(path.join(voiceDir, file), "utf-8");
129
+ const { content } = (0, gray_matter_1.default)(raw);
130
+ const text = content.trim();
131
+ if (file === "voice.md") {
132
+ if (!data.voice.overall)
133
+ data.voice.overall = text;
134
+ }
135
+ else {
136
+ // voice.linkedin.md → voice.linkedin, voice.writing.md → voice.writing
137
+ const key = path.basename(file, ".md").replace("voice.", "");
138
+ if (!data.voice[key])
139
+ data.voice[key] = text;
140
+ }
141
+ }
142
+ }
143
+ // Read from you.json — handles both compiled bundle format AND API/pull format
144
+ const youJsonPath = path.join(bundleDir, "you.json");
145
+ if (fs.existsSync(youJsonPath)) {
146
+ try {
147
+ const youJson = JSON.parse(fs.readFileSync(youJsonPath, "utf-8"));
148
+ extractFromYouJson(youJson, data);
149
+ }
150
+ catch {
151
+ // skip
152
+ }
153
+ }
154
+ return data;
155
+ }
156
+ /**
157
+ * Extract identity data from a you.json object.
158
+ * Handles both formats:
159
+ * - Compiled bundle: { profile: [{slug, content}], preferences: [{slug, content}] }
160
+ * - API/pull format: { identity: {bio: {long}}, preferences: {agent: {tone}}, voice: {overall} }
161
+ */
162
+ function extractFromYouJson(youJson, data) {
163
+ // Format 1: Compiled bundle (array-based sections)
164
+ if (Array.isArray(youJson.preferences)) {
165
+ for (const pref of youJson.preferences) {
166
+ if (typeof pref !== "object" || pref === null)
167
+ continue;
168
+ const p = pref;
169
+ if (typeof p.slug === "string" && typeof p.content === "string" && !data.preferences[p.slug]) {
170
+ data.preferences[p.slug] = p.content;
171
+ }
172
+ if (typeof p.slug === "string" && (p.slug === "voice" || p.slug.startsWith("voice"))) {
173
+ const key = p.slug === "voice" ? "overall" : p.slug.replace(/^voice[-_]?/, "");
174
+ if (typeof p.content === "string" && !data.voice[key])
175
+ data.voice[key] = p.content;
176
+ }
177
+ }
178
+ }
179
+ if (Array.isArray(youJson.profile)) {
180
+ for (const section of youJson.profile) {
181
+ if (typeof section !== "object" || section === null)
182
+ continue;
183
+ const s = section;
184
+ if (typeof s.slug === "string" && typeof s.content === "string" && !data.profile[s.slug]) {
185
+ data.profile[s.slug] = s.content;
186
+ }
187
+ }
188
+ }
189
+ // Format 2: API/pull nested structure
190
+ const identity = youJson.identity;
191
+ if (identity) {
192
+ const bio = identity.bio;
193
+ if (bio) {
194
+ const aboutText = bio.long || bio.medium || bio.short || "";
195
+ if (aboutText && !data.profile.about) {
196
+ const name = identity.name || data.username;
197
+ data.profile.about = name ? `# ${name}\n\n${aboutText}` : aboutText;
198
+ }
199
+ }
200
+ if (identity.name && !data.profile.name) {
201
+ data.profile.name = identity.name;
202
+ }
203
+ }
204
+ // API preferences: { agent: { tone, formality, avoid }, writing: { style, format } }
205
+ const apiPrefs = youJson.preferences;
206
+ if (apiPrefs && !Array.isArray(apiPrefs)) {
207
+ if (apiPrefs.agent && typeof apiPrefs.agent === "object" && !data.preferences.agent) {
208
+ const agent = apiPrefs.agent;
209
+ const parts = [];
210
+ if (agent.tone)
211
+ parts.push(`Tone: ${agent.tone}`);
212
+ if (agent.formality)
213
+ parts.push(`Formality: ${agent.formality}`);
214
+ if (Array.isArray(agent.avoid) && agent.avoid.length)
215
+ parts.push(`Avoid: ${agent.avoid.join(", ")}`);
216
+ if (agent.custom_instructions)
217
+ parts.push(`\n${agent.custom_instructions}`);
218
+ if (parts.length)
219
+ data.preferences.agent = parts.join("\n");
220
+ }
221
+ if (apiPrefs.writing && typeof apiPrefs.writing === "object" && !data.preferences.writing) {
222
+ const writing = apiPrefs.writing;
223
+ const parts = [];
224
+ if (writing.style)
225
+ parts.push(`Style: ${writing.style}`);
226
+ if (writing.format)
227
+ parts.push(`Format: ${writing.format}`);
228
+ if (parts.length)
229
+ data.preferences.writing = parts.join("\n");
230
+ }
231
+ }
232
+ // API voice: { overall, platforms: { linkedin, twitter } }
233
+ const apiVoice = youJson.voice;
234
+ if (apiVoice) {
235
+ if (typeof apiVoice.overall === "string" && !data.voice.overall) {
236
+ data.voice.overall = apiVoice.overall;
237
+ }
238
+ if (typeof apiVoice.writing === "string" && !data.voice.writing) {
239
+ data.voice.writing = apiVoice.writing;
240
+ }
241
+ if (typeof apiVoice.speaking === "string" && !data.voice.speaking) {
242
+ data.voice.speaking = apiVoice.speaking;
243
+ }
244
+ const platforms = apiVoice.platforms;
245
+ if (platforms) {
246
+ for (const [platform, content] of Object.entries(platforms)) {
247
+ if (content && !data.voice[platform]) {
248
+ data.voice[platform] = content;
249
+ }
250
+ }
251
+ }
252
+ }
253
+ // API analysis: { voice_summary }
254
+ const analysis = youJson.analysis;
255
+ if (analysis) {
256
+ if (typeof analysis.voice_summary === "string" && !data.voice.overall) {
257
+ data.voice.overall = analysis.voice_summary;
258
+ }
259
+ }
260
+ // API projects
261
+ const projects = youJson.projects;
262
+ if (Array.isArray(projects) && projects.length > 0 && !data.profile.projects) {
263
+ data.profile.projects = projects
264
+ .map((p) => `- **${p.name}**: ${p.description || ""} (${p.status || "active"})`)
265
+ .join("\n");
266
+ }
267
+ // API values
268
+ const values = youJson.values;
269
+ if (Array.isArray(values) && values.length > 0 && !data.profile.values) {
270
+ data.profile.values = values.map((v) => `- ${v}`).join("\n");
271
+ }
272
+ // API now/focus
273
+ const now = youJson.now;
274
+ if (now) {
275
+ const focus = now.focus;
276
+ if (Array.isArray(focus) && focus.length > 0 && !data.profile.now) {
277
+ data.profile.now = focus.map((f) => `- ${f}`).join("\n");
278
+ }
279
+ }
280
+ // API directives (if stored as a top-level field)
281
+ const directives = youJson.directives;
282
+ if (directives) {
283
+ for (const [key, val] of Object.entries(directives)) {
284
+ if (val && !data.directives[key])
285
+ data.directives[key] = val;
286
+ }
287
+ }
288
+ }
289
+ /**
290
+ * Resolve a dot-path variable against identity data.
291
+ *
292
+ * Examples:
293
+ * "voice.overall" → data.voice.overall
294
+ * "preferences.agent" → data.preferences.agent
295
+ * "profile.about" → data.profile.about
296
+ * "project_name" → data.project_name
297
+ * "username" → data.username
298
+ */
299
+ function resolveVariable(varPath, data) {
300
+ const parts = varPath.split(".");
301
+ if (parts.length === 1) {
302
+ // Top-level: project_name, username
303
+ const key = parts[0];
304
+ const val = data[key];
305
+ if (typeof val === "string")
306
+ return val;
307
+ return "";
308
+ }
309
+ if (parts.length === 2) {
310
+ const [namespace, key] = parts;
311
+ const ns = data[namespace];
312
+ if (typeof ns === "object" && ns !== null && !Array.isArray(ns)) {
313
+ return ns[key] || "";
314
+ }
315
+ return "";
316
+ }
317
+ return "";
318
+ }
319
+ /**
320
+ * Render a skill template by interpolating all {{var}} placeholders.
321
+ */
322
+ function renderSkillTemplate(template, data) {
323
+ const identity = data || loadIdentityData();
324
+ return template.replace(/\{\{([^}]+)\}\}/g, (_match, varPath) => {
325
+ const resolved = resolveVariable(varPath.trim(), identity);
326
+ return resolved || `(not set: ${varPath.trim()})`;
327
+ });
328
+ }
329
+ /**
330
+ * Extract all {{var}} references from a skill template.
331
+ */
332
+ function extractTemplateVars(template) {
333
+ const vars = [];
334
+ const regex = /\{\{([^}]+)\}\}/g;
335
+ let match;
336
+ while ((match = regex.exec(template)) !== null) {
337
+ const v = match[1].trim();
338
+ if (!vars.includes(v)) {
339
+ vars.push(v);
340
+ }
341
+ }
342
+ return vars;
343
+ }
344
+ /**
345
+ * Check which identity fields a skill template references
346
+ * and which ones have actual data.
347
+ */
348
+ function checkTemplateReadiness(template, data) {
349
+ const identity = data || loadIdentityData();
350
+ const vars = extractTemplateVars(template);
351
+ const missing = [];
352
+ for (const v of vars) {
353
+ const resolved = resolveVariable(v, identity);
354
+ if (!resolved) {
355
+ missing.push(v);
356
+ }
357
+ }
358
+ return {
359
+ total: vars.length,
360
+ filled: vars.length - missing.length,
361
+ missing,
362
+ };
363
+ }
364
+ //# sourceMappingURL=skill-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-renderer.js","sourceRoot":"","sources":["../../src/lib/skill-renderer.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBH,4CAiGC;AA8ID,0CAqBC;AAKD,kDAOC;AAKD,kDAWC;AAMD,wDAqBC;AA7UD,uCAAyB;AACzB,2CAA6B;AAC7B,8DAAiC;AACjC,qCAAsF;AAWtF;;;GAGG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,IAAI,GAAiB;QACzB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,6BAA6B;IAC7B,MAAM,OAAO,GAAG,IAAA,6BAAoB,GAAE,CAAC;IACvC,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,IAAA,0BAAiB,GAAE,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,0BAAiB,GAAE,CAAC;IAEtC,4BAA4B;IAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC/E,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,qBAAM,EAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,qBAAM,EAAC,GAAG,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAE5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAE9B,mDAAmD;YACnD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC3E,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC5D,MAAM,MAAM,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBACjF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7E,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,qBAAM,EAAC,GAAG,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAE5B,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;oBAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,uEAAuE;gBACvE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,OAAgC,EAAE,IAAkB;IAC9E,mDAAmD;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBAAE,SAAS;YACxD,MAAM,CAAC,GAAG,IAA+B,CAAC;YAC1C,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7F,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YACvC,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBACrF,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBAC/E,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;gBAAE,SAAS;YAC9D,MAAM,CAAC,GAAG,OAAkC,CAAC;YAC7C,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAA+C,CAAC;IACzE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAyC,CAAC;QAC/D,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5D,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAI,QAAQ,CAAC,IAAe,IAAI,IAAI,CAAC,QAAQ,CAAC;gBACxD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAc,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAkD,CAAC;IAC5E,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,IAAI,QAAQ,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACpF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAgC,CAAC;YACxD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACjE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrG,IAAI,KAAK,CAAC,mBAAmB;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAC5E,IAAI,KAAK,CAAC,MAAM;gBAAE,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC1F,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAkC,CAAC;YAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACzD,IAAI,OAAO,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5D,IAAI,KAAK,CAAC,MAAM;gBAAE,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAA4C,CAAC;IACtE,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACxC,CAAC;QACD,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACxC,CAAC;QACD,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC1C,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAA+C,CAAC;QAC3E,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5D,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAA+C,CAAC;IACzE,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,eAAe;IACf,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAqD,CAAC;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ;aAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC;aAC/E,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,aAAa;IACb,MAAM,MAAM,GAAG,OAAO,CAAC,MAA8B,CAAC;IACtD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,gBAAgB;IAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAA0C,CAAC;IAC/D,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,GAAG,CAAC,KAA6B,CAAC;QAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAClE,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAgD,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACpD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAAC,OAAe,EAAE,IAAkB;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,oCAAoC;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAuB,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,SAA+B,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAChE,OAAQ,EAA6B,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACnD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,QAAgB,EAAE,IAAmB;IACvE,MAAM,QAAQ,GAAG,IAAI,IAAI,gBAAgB,EAAE,CAAC;IAE5C,OAAO,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE;QACtE,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3D,OAAO,QAAQ,IAAI,aAAa,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,kBAAkB,CAAC;IACjC,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,QAAgB,EAAE,IAAmB;IAK1E,MAAM,QAAQ,GAAG,IAAI,IAAI,gBAAgB,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,MAAM;QAClB,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;QACpC,OAAO;KACR,CAAC;AACJ,CAAC"}