youmd 0.4.9 → 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.
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +27 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +47 -7
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +30 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/link.js +1 -1
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/login.js +9 -0
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/preview.js +1 -1
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +66 -4
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +68 -4
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts +1 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +92 -2
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/register.js +1 -1
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/skill.d.ts +8 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +1150 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +118 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +12 -0
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +16 -11
- package/dist/commands/whoami.js.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +76 -5
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +47 -2
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/ascii.d.ts.map +1 -1
- package/dist/lib/ascii.js +20 -48
- package/dist/lib/ascii.js.map +1 -1
- package/dist/lib/config.d.ts +24 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +40 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hash.d.ts +3 -0
- package/dist/lib/hash.d.ts.map +1 -0
- package/dist/lib/hash.js +31 -0
- package/dist/lib/hash.js.map +1 -0
- package/dist/lib/onboarding.d.ts +1 -1
- package/dist/lib/onboarding.d.ts.map +1 -1
- package/dist/lib/onboarding.js +113 -57
- package/dist/lib/onboarding.js.map +1 -1
- package/dist/lib/skill-catalog.d.ts +57 -0
- package/dist/lib/skill-catalog.d.ts.map +1 -0
- package/dist/lib/skill-catalog.js +196 -0
- package/dist/lib/skill-catalog.js.map +1 -0
- package/dist/lib/skill-renderer.d.ts +55 -0
- package/dist/lib/skill-renderer.d.ts.map +1 -0
- package/dist/lib/skill-renderer.js +364 -0
- package/dist/lib/skill-renderer.js.map +1 -0
- package/dist/lib/skills.d.ts +125 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +677 -0
- package/dist/lib/skills.js.map +1 -0
- package/package.json +7 -4
- package/skills/claude-md-generator.md +66 -0
- package/skills/meta-improve.md +57 -0
- package/skills/project-context-init.md +51 -0
- 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":"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"}
|