youmd 0.6.13 → 0.6.21

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 (55) hide show
  1. package/dist/commands/chat.d.ts.map +1 -1
  2. package/dist/commands/chat.js +595 -96
  3. package/dist/commands/chat.js.map +1 -1
  4. package/dist/commands/login.js +1 -1
  5. package/dist/commands/login.js.map +1 -1
  6. package/dist/commands/skill.js +2 -2
  7. package/dist/commands/skill.js.map +1 -1
  8. package/dist/index.js +79 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/ascii.d.ts +5 -0
  11. package/dist/lib/ascii.d.ts.map +1 -1
  12. package/dist/lib/ascii.js +34 -2
  13. package/dist/lib/ascii.js.map +1 -1
  14. package/dist/lib/first-run.d.ts +14 -0
  15. package/dist/lib/first-run.d.ts.map +1 -0
  16. package/dist/lib/first-run.js +97 -0
  17. package/dist/lib/first-run.js.map +1 -0
  18. package/dist/lib/onboarding.js +1 -1
  19. package/dist/lib/onboarding.js.map +1 -1
  20. package/dist/lib/project.d.ts +2 -0
  21. package/dist/lib/project.d.ts.map +1 -1
  22. package/dist/lib/project.js +173 -22
  23. package/dist/lib/project.js.map +1 -1
  24. package/dist/mcp/server.js +1 -1
  25. package/dist/you.js +1 -1
  26. package/dist/you.js.map +1 -1
  27. package/package.json +1 -1
  28. package/dist/__tests__/api.test.d.ts +0 -2
  29. package/dist/__tests__/api.test.d.ts.map +0 -1
  30. package/dist/__tests__/api.test.js +0 -84
  31. package/dist/__tests__/api.test.js.map +0 -1
  32. package/dist/__tests__/compiler.test.d.ts +0 -2
  33. package/dist/__tests__/compiler.test.d.ts.map +0 -1
  34. package/dist/__tests__/compiler.test.js +0 -127
  35. package/dist/__tests__/compiler.test.js.map +0 -1
  36. package/dist/__tests__/config.test.d.ts +0 -2
  37. package/dist/__tests__/config.test.d.ts.map +0 -1
  38. package/dist/__tests__/config.test.js +0 -79
  39. package/dist/__tests__/config.test.js.map +0 -1
  40. package/dist/__tests__/decompile.test.d.ts +0 -2
  41. package/dist/__tests__/decompile.test.d.ts.map +0 -1
  42. package/dist/__tests__/decompile.test.js +0 -102
  43. package/dist/__tests__/decompile.test.js.map +0 -1
  44. package/dist/__tests__/hash.test.d.ts +0 -2
  45. package/dist/__tests__/hash.test.d.ts.map +0 -1
  46. package/dist/__tests__/hash.test.js +0 -44
  47. package/dist/__tests__/hash.test.js.map +0 -1
  48. package/dist/__tests__/integration.test.d.ts +0 -2
  49. package/dist/__tests__/integration.test.d.ts.map +0 -1
  50. package/dist/__tests__/integration.test.js +0 -277
  51. package/dist/__tests__/integration.test.js.map +0 -1
  52. package/dist/__tests__/skill-renderer.test.d.ts +0 -2
  53. package/dist/__tests__/skill-renderer.test.d.ts.map +0 -1
  54. package/dist/__tests__/skill-renderer.test.js +0 -68
  55. package/dist/__tests__/skill-renderer.test.js.map +0 -1
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const hash_1 = require("../lib/hash");
5
- (0, vitest_1.describe)("hash", () => {
6
- (0, vitest_1.describe)("computeContentHash", () => {
7
- (0, vitest_1.it)("returns a 64-char hex string (SHA-256)", () => {
8
- const hash = (0, hash_1.computeContentHash)({ test: true }, "# test");
9
- (0, vitest_1.expect)(hash).toMatch(/^[0-9a-f]{64}$/);
10
- });
11
- (0, vitest_1.it)("is deterministic — same input produces same hash", () => {
12
- const a = (0, hash_1.computeContentHash)({ x: 1, y: "hello" }, "markdown");
13
- const b = (0, hash_1.computeContentHash)({ x: 1, y: "hello" }, "markdown");
14
- (0, vitest_1.expect)(a).toBe(b);
15
- });
16
- (0, vitest_1.it)("is order-independent for object keys", () => {
17
- const a = (0, hash_1.computeContentHash)({ z: 1, a: 2 }, "md");
18
- const b = (0, hash_1.computeContentHash)({ a: 2, z: 1 }, "md");
19
- (0, vitest_1.expect)(a).toBe(b);
20
- });
21
- (0, vitest_1.it)("is sensitive to JSON changes", () => {
22
- const a = (0, hash_1.computeContentHash)({ x: 1 }, "same");
23
- const b = (0, hash_1.computeContentHash)({ x: 2 }, "same");
24
- (0, vitest_1.expect)(a).not.toBe(b);
25
- });
26
- (0, vitest_1.it)("is sensitive to markdown changes", () => {
27
- const a = (0, hash_1.computeContentHash)({ x: 1 }, "hello");
28
- const b = (0, hash_1.computeContentHash)({ x: 1 }, "hello world");
29
- (0, vitest_1.expect)(a).not.toBe(b);
30
- });
31
- (0, vitest_1.it)("handles empty objects", () => {
32
- const hash = (0, hash_1.computeContentHash)({}, "");
33
- (0, vitest_1.expect)(hash).toMatch(/^[0-9a-f]{64}$/);
34
- });
35
- });
36
- (0, vitest_1.describe)("shortHash", () => {
37
- (0, vitest_1.it)("returns first 12 characters", () => {
38
- const hash = "abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890";
39
- (0, vitest_1.expect)((0, hash_1.shortHash)(hash)).toBe("abcdef123456");
40
- (0, vitest_1.expect)((0, hash_1.shortHash)(hash)).toHaveLength(12);
41
- });
42
- });
43
- });
44
- //# sourceMappingURL=hash.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hash.test.js","sourceRoot":"","sources":["../../src/__tests__/hash.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":""}
@@ -1,277 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- const vitest_1 = require("vitest");
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- const os = __importStar(require("os"));
40
- const compiler_1 = require("../lib/compiler");
41
- const hash_1 = require("../lib/hash");
42
- (0, vitest_1.describe)("integration: bundle round-trip", () => {
43
- let tmpDir;
44
- (0, vitest_1.beforeEach)(() => {
45
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "youmd-integration-"));
46
- // Create a realistic bundle structure
47
- for (const dir of ["profile", "preferences", "voice", "directives"]) {
48
- fs.mkdirSync(path.join(tmpDir, dir), { recursive: true });
49
- }
50
- });
51
- (0, vitest_1.afterEach)(() => {
52
- fs.rmSync(tmpDir, { recursive: true, force: true });
53
- });
54
- (0, vitest_1.it)("full compile → write → re-read produces consistent hash", () => {
55
- // Write realistic profile data
56
- fs.writeFileSync(path.join(tmpDir, "profile", "about.md"), `---
57
- title: About
58
- ---
59
- # Test User
60
-
61
- **Tagline:** Building something cool
62
-
63
- **Location:** Austin, TX
64
-
65
- Serial entrepreneur and developer. Building dev tools.`);
66
- fs.writeFileSync(path.join(tmpDir, "profile", "projects.md"), `---
67
- title: Projects
68
- ---
69
- ## Project Alpha
70
- - **Role:** Founder
71
- - **Status:** building
72
- - **Description:** An amazing project.
73
- - **URL:** https://alpha.dev
74
-
75
- ## Project Beta
76
- - **Role:** Contributor
77
- - **Status:** active
78
- - **Description:** Open source contribution.`);
79
- fs.writeFileSync(path.join(tmpDir, "profile", "values.md"), `---
80
- title: Values
81
- ---
82
- - Ship fast
83
- - Build in public
84
- - Help others grow`);
85
- fs.writeFileSync(path.join(tmpDir, "preferences", "agent.md"), `---
86
- title: Agent Preferences
87
- ---
88
- **Tone:** direct, no fluff
89
- **Formality:** casual-professional
90
- **Avoid:** corporate speak, emoji, verbose explanations`);
91
- fs.writeFileSync(path.join(tmpDir, "voice", "voice.md"), `---
92
- title: Voice
93
- ---
94
- Direct, builder energy. Short sentences. Technical but approachable.`);
95
- // Compile
96
- const result = (0, compiler_1.compileBundle)(tmpDir);
97
- // Verify structure
98
- (0, vitest_1.expect)(result.youJson.schema).toBe("you-md/v1");
99
- (0, vitest_1.expect)(result.youJson.identity).toBeDefined();
100
- (0, vitest_1.expect)(result.youJson.identity.name).toBe("Test User");
101
- (0, vitest_1.expect)(result.youJson.projects).toBeDefined();
102
- (0, vitest_1.expect)(result.youJson.projects.length).toBe(2);
103
- (0, vitest_1.expect)(result.youJson.values).toBeDefined();
104
- (0, vitest_1.expect)(result.youJson.preferences).toBeDefined();
105
- // Verify markdown output
106
- (0, vitest_1.expect)(result.markdown).toContain("Test User");
107
- (0, vitest_1.expect)(result.markdown).toContain("you-md/v1");
108
- // Write to disk
109
- (0, compiler_1.writeBundle)(tmpDir, result);
110
- // Verify files exist
111
- (0, vitest_1.expect)(fs.existsSync(path.join(tmpDir, "you.json"))).toBe(true);
112
- (0, vitest_1.expect)(fs.existsSync(path.join(tmpDir, "you.md"))).toBe(true);
113
- (0, vitest_1.expect)(fs.existsSync(path.join(tmpDir, "manifest.json"))).toBe(true);
114
- // Re-read and verify JSON round-trip
115
- const reReadJson = JSON.parse(fs.readFileSync(path.join(tmpDir, "you.json"), "utf-8"));
116
- (0, vitest_1.expect)(reReadJson.schema).toBe("you-md/v1");
117
- (0, vitest_1.expect)(reReadJson.identity.name).toBe("Test User");
118
- // Verify hash is deterministic
119
- const hash1 = (0, hash_1.computeContentHash)(result.youJson, result.markdown);
120
- const hash2 = (0, hash_1.computeContentHash)(reReadJson, fs.readFileSync(path.join(tmpDir, "you.md"), "utf-8"));
121
- (0, vitest_1.expect)(hash1).toBe(hash2);
122
- });
123
- (0, vitest_1.it)("compile → decompile → recompile produces equivalent bundle", async () => {
124
- // Write a profile
125
- fs.writeFileSync(path.join(tmpDir, "profile", "about.md"), `---
126
- title: About
127
- ---
128
- # Round Trip Test
129
-
130
- **Tagline:** Testing round trips
131
-
132
- **Location:** Nowhere
133
-
134
- A test bio.`);
135
- fs.writeFileSync(path.join(tmpDir, "profile", "values.md"), `- Value One\n- Value Two`);
136
- // Compile first
137
- const first = (0, compiler_1.compileBundle)(tmpDir);
138
- (0, compiler_1.writeBundle)(tmpDir, first);
139
- // Decompile (simulated: read you.json, write back to files)
140
- const { decompileToFilesystem } = await Promise.resolve().then(() => __importStar(require("../lib/decompile")));
141
- const youJson = JSON.parse(fs.readFileSync(path.join(tmpDir, "you.json"), "utf-8"));
142
- // Create a fresh dir for decompilation
143
- const decompDir = fs.mkdtempSync(path.join(os.tmpdir(), "youmd-decomp-"));
144
- for (const dir of ["profile", "preferences", "voice", "directives"]) {
145
- fs.mkdirSync(path.join(decompDir, dir), { recursive: true });
146
- }
147
- decompileToFilesystem(decompDir, youJson);
148
- // Verify decompiled files exist
149
- (0, vitest_1.expect)(fs.existsSync(path.join(decompDir, "profile", "about.md"))).toBe(true);
150
- // Recompile from decompiled
151
- const second = (0, compiler_1.compileBundle)(decompDir);
152
- // Core identity should survive round-trip
153
- const id1 = first.youJson.identity;
154
- const id2 = second.youJson.identity;
155
- (0, vitest_1.expect)(id2.name).toBe(id1.name);
156
- // Clean up
157
- fs.rmSync(decompDir, { recursive: true, force: true });
158
- });
159
- });
160
- (0, vitest_1.describe)("integration: vault encryption round-trip", () => {
161
- (0, vitest_1.it)("encrypt → decrypt produces original data", async () => {
162
- const { generateVaultKey, encryptData, decryptData } = await Promise.resolve().then(() => __importStar(require("../lib/vault")));
163
- const vaultKey = generateVaultKey();
164
- const original = "this is my private vault data with sensitive info";
165
- const { ciphertext, iv } = encryptData(original, vaultKey);
166
- const decrypted = decryptData(ciphertext, iv, vaultKey);
167
- (0, vitest_1.expect)(decrypted).toBe(original);
168
- });
169
- (0, vitest_1.it)("vault key wrap → unwrap produces original key", async () => {
170
- const { generateVaultKey, encryptVaultKey, decryptVaultKey } = await Promise.resolve().then(() => __importStar(require("../lib/vault")));
171
- const vaultKey = generateVaultKey();
172
- const passphrase = "my-secret-passphrase-123";
173
- const wrapped = encryptVaultKey(vaultKey, passphrase);
174
- const unwrapped = decryptVaultKey(wrapped.encrypted, passphrase, wrapped.salt, wrapped.iv);
175
- (0, vitest_1.expect)(Buffer.from(unwrapped).equals(Buffer.from(vaultKey))).toBe(true);
176
- });
177
- (0, vitest_1.it)("wrong passphrase fails to decrypt", async () => {
178
- const { generateVaultKey, encryptVaultKey, decryptVaultKey } = await Promise.resolve().then(() => __importStar(require("../lib/vault")));
179
- const vaultKey = generateVaultKey();
180
- const wrapped = encryptVaultKey(vaultKey, "correct-password");
181
- (0, vitest_1.expect)(() => {
182
- decryptVaultKey(wrapped.encrypted, "wrong-password", wrapped.salt, wrapped.iv);
183
- }).toThrow();
184
- });
185
- (0, vitest_1.it)("handles unicode and long text", async () => {
186
- const { generateVaultKey, encryptData, decryptData } = await Promise.resolve().then(() => __importStar(require("../lib/vault")));
187
- const vaultKey = generateVaultKey();
188
- const original = "Unicode test: Hello World\n" + "A".repeat(10000);
189
- const { ciphertext, iv } = encryptData(original, vaultKey);
190
- const decrypted = decryptData(ciphertext, iv, vaultKey);
191
- (0, vitest_1.expect)(decrypted).toBe(original);
192
- });
193
- });
194
- (0, vitest_1.describe)("integration: API endpoint contract", () => {
195
- async function getLivePublicUsernames(limit = 3) {
196
- const res = await fetch("https://kindly-cassowary-600.convex.site/api/v1/profiles", { signal: AbortSignal.timeout(10000) });
197
- (0, vitest_1.expect)(res.ok).toBe(true);
198
- const data = await res.json();
199
- const candidates = data
200
- .map((entry) => entry.username)
201
- .filter((username) => Boolean(username))
202
- .slice(0, 20);
203
- const confirmed = [];
204
- for (const username of candidates) {
205
- const profileRes = await fetch(`https://kindly-cassowary-600.convex.site/api/v1/profiles?username=${username}`, { signal: AbortSignal.timeout(10000) });
206
- if (profileRes.ok) {
207
- confirmed.push(username);
208
- }
209
- if (confirmed.length >= limit) {
210
- break;
211
- }
212
- }
213
- return confirmed;
214
- }
215
- (0, vitest_1.it)("profile endpoint returns you-md/v1 schema", async () => {
216
- const res = await fetch("https://kindly-cassowary-600.convex.site/api/v1/profiles?username=houstongolden", { signal: AbortSignal.timeout(10000) });
217
- (0, vitest_1.expect)(res.ok).toBe(true);
218
- const data = await res.json();
219
- (0, vitest_1.expect)(data.schema).toBe("you-md/v1");
220
- (0, vitest_1.expect)(data.identity).toBeDefined();
221
- (0, vitest_1.expect)(data.preferences).toBeDefined();
222
- });
223
- (0, vitest_1.it)("profile text endpoint returns non-empty plain text for a known public profile", async () => {
224
- const res = await fetch("https://kindly-cassowary-600.convex.site/api/v1/profiles?username=houstongolden", {
225
- headers: { Accept: "text/plain" },
226
- signal: AbortSignal.timeout(10000),
227
- });
228
- (0, vitest_1.expect)(res.ok).toBe(true);
229
- const text = await res.text();
230
- // Should contain identity data in some format (markdown frontmatter or JSON)
231
- (0, vitest_1.expect)(text.trim().length).toBeGreaterThan(20);
232
- });
233
- (0, vitest_1.it)("profile list returns array of profiles", async () => {
234
- const res = await fetch("https://kindly-cassowary-600.convex.site/api/v1/profiles", { signal: AbortSignal.timeout(10000) });
235
- (0, vitest_1.expect)(res.ok).toBe(true);
236
- const data = await res.json();
237
- (0, vitest_1.expect)(Array.isArray(data)).toBe(true);
238
- (0, vitest_1.expect)(data.length).toBeGreaterThan(0);
239
- });
240
- (0, vitest_1.it)("auth endpoints properly gate without token", async () => {
241
- const res = await fetch("https://kindly-cassowary-600.convex.site/api/v1/me", { signal: AbortSignal.timeout(10000) });
242
- (0, vitest_1.expect)(res.status).toBe(401);
243
- });
244
- (0, vitest_1.it)("skills registry returns published skills", async () => {
245
- const res = await fetch("https://kindly-cassowary-600.convex.site/api/v1/skills", { signal: AbortSignal.timeout(10000) });
246
- (0, vitest_1.expect)(res.ok).toBe(true);
247
- const data = await res.json();
248
- const skills = data.skills;
249
- (0, vitest_1.expect)(skills.length).toBeGreaterThanOrEqual(4);
250
- });
251
- (0, vitest_1.it)("CORS headers present on OPTIONS", async () => {
252
- const res = await fetch("https://kindly-cassowary-600.convex.site/api/v1/profiles", {
253
- method: "OPTIONS",
254
- signal: AbortSignal.timeout(10000),
255
- });
256
- (0, vitest_1.expect)(res.headers.get("access-control-allow-origin")).toBe("*");
257
- });
258
- (0, vitest_1.it)("public profiles expose usable identity data", async () => {
259
- const usernames = await getLivePublicUsernames(3);
260
- (0, vitest_1.expect)(usernames.length).toBeGreaterThan(0);
261
- for (const username of usernames) {
262
- const res = await fetch(`https://kindly-cassowary-600.convex.site/api/v1/profiles?username=${username}`, { signal: AbortSignal.timeout(10000) });
263
- (0, vitest_1.expect)(res.ok).toBe(true);
264
- const data = await res.json();
265
- const identity = data.identity;
266
- (0, vitest_1.expect)(identity).toBeDefined();
267
- const bio = identity.bio;
268
- (0, vitest_1.expect)(Boolean(identity.name) ||
269
- Boolean(identity.tagline) ||
270
- Boolean(bio?.short) ||
271
- Boolean(bio?.medium)).toBe(true);
272
- const projects = data.projects;
273
- (0, vitest_1.expect)(Array.isArray(projects)).toBe(true);
274
- }
275
- });
276
- });
277
- //# sourceMappingURL=integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=skill-renderer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-renderer.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/skill-renderer.test.ts"],"names":[],"mappings":""}
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const skill_renderer_1 = require("../lib/skill-renderer");
5
- (0, vitest_1.describe)("skill-renderer", () => {
6
- const mockIdentity = {
7
- profile: {
8
- about: "Houston Golden. Founder of You.md.",
9
- projects: "You.md, BAMF Media",
10
- now: "Building identity protocol",
11
- values: "Ship fast, build in public",
12
- links: "https://you.md",
13
- },
14
- preferences: {
15
- agent: "Direct, no fluff, terminal-native",
16
- writing: "Short paragraphs, punchy sentences",
17
- },
18
- voice: {
19
- overall: "Direct, high-energy, founder-coded",
20
- writing: "Concise and opinionated",
21
- },
22
- directives: {
23
- agent: "No emoji. No forms. No corporate speak.",
24
- },
25
- project_name: "youmd",
26
- username: "houstongolden",
27
- };
28
- (0, vitest_1.describe)("renderSkillTemplate", () => {
29
- (0, vitest_1.it)("interpolates {{var}} placeholders", () => {
30
- const template = "Hello {{username}}, your voice is: {{voice.overall}}";
31
- const result = (0, skill_renderer_1.renderSkillTemplate)(template, mockIdentity);
32
- (0, vitest_1.expect)(result).toContain("houstongolden");
33
- (0, vitest_1.expect)(result).toContain("Direct, high-energy");
34
- });
35
- (0, vitest_1.it)("preserves text without placeholders", () => {
36
- const template = "No variables here, just text.";
37
- const result = (0, skill_renderer_1.renderSkillTemplate)(template, mockIdentity);
38
- (0, vitest_1.expect)(result).toBe("No variables here, just text.");
39
- });
40
- (0, vitest_1.it)("handles missing variables gracefully", () => {
41
- const template = "Name: {{profile.about}}, Missing: {{nonexistent.field}}";
42
- const result = (0, skill_renderer_1.renderSkillTemplate)(template, mockIdentity);
43
- (0, vitest_1.expect)(result).toContain("Houston Golden");
44
- // Missing vars should remain as placeholder or empty
45
- (0, vitest_1.expect)(result).toBeDefined();
46
- });
47
- (0, vitest_1.it)("handles nested dot notation", () => {
48
- const template = "Prefs: {{preferences.agent}}";
49
- const result = (0, skill_renderer_1.renderSkillTemplate)(template, mockIdentity);
50
- (0, vitest_1.expect)(result).toContain("Direct, no fluff");
51
- });
52
- });
53
- (0, vitest_1.describe)("checkTemplateReadiness", () => {
54
- (0, vitest_1.it)("reports all filled when identity is complete", () => {
55
- const template = "{{profile.about}} {{voice.overall}} {{username}}";
56
- const readiness = (0, skill_renderer_1.checkTemplateReadiness)(template, mockIdentity);
57
- (0, vitest_1.expect)(readiness.total).toBe(3);
58
- (0, vitest_1.expect)(readiness.filled).toBe(3);
59
- (0, vitest_1.expect)(readiness.missing).toHaveLength(0);
60
- });
61
- (0, vitest_1.it)("reports missing fields", () => {
62
- const template = "{{profile.about}} {{nonexistent.thing}}";
63
- const readiness = (0, skill_renderer_1.checkTemplateReadiness)(template, mockIdentity);
64
- (0, vitest_1.expect)(readiness.missing.length).toBeGreaterThan(0);
65
- });
66
- });
67
- });
68
- //# sourceMappingURL=skill-renderer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-renderer.test.js","sourceRoot":"","sources":["../../src/__tests__/skill-renderer.test.ts"],"names":[],"mappings":"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"}