youmd 0.5.0 → 0.6.1

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 (165) hide show
  1. package/dist/__tests__/api.test.d.ts +2 -0
  2. package/dist/__tests__/api.test.d.ts.map +1 -0
  3. package/dist/__tests__/api.test.js +84 -0
  4. package/dist/__tests__/api.test.js.map +1 -0
  5. package/dist/__tests__/compiler.test.d.ts +2 -0
  6. package/dist/__tests__/compiler.test.d.ts.map +1 -0
  7. package/dist/__tests__/compiler.test.js +127 -0
  8. package/dist/__tests__/compiler.test.js.map +1 -0
  9. package/dist/__tests__/config.test.d.ts +2 -0
  10. package/dist/__tests__/config.test.d.ts.map +1 -0
  11. package/dist/__tests__/config.test.js +79 -0
  12. package/dist/__tests__/config.test.js.map +1 -0
  13. package/dist/__tests__/decompile.test.d.ts +2 -0
  14. package/dist/__tests__/decompile.test.d.ts.map +1 -0
  15. package/dist/__tests__/decompile.test.js +102 -0
  16. package/dist/__tests__/decompile.test.js.map +1 -0
  17. package/dist/__tests__/hash.test.d.ts +2 -0
  18. package/dist/__tests__/hash.test.d.ts.map +1 -0
  19. package/dist/__tests__/hash.test.js +44 -0
  20. package/dist/__tests__/hash.test.js.map +1 -0
  21. package/dist/__tests__/integration.test.d.ts +2 -0
  22. package/dist/__tests__/integration.test.d.ts.map +1 -0
  23. package/dist/__tests__/integration.test.js +277 -0
  24. package/dist/__tests__/integration.test.js.map +1 -0
  25. package/dist/__tests__/skill-renderer.test.d.ts +2 -0
  26. package/dist/__tests__/skill-renderer.test.d.ts.map +1 -0
  27. package/dist/__tests__/skill-renderer.test.js +68 -0
  28. package/dist/__tests__/skill-renderer.test.js.map +1 -0
  29. package/dist/commands/add.d.ts.map +1 -1
  30. package/dist/commands/add.js +6 -3
  31. package/dist/commands/add.js.map +1 -1
  32. package/dist/commands/agents.d.ts +2 -0
  33. package/dist/commands/agents.d.ts.map +1 -0
  34. package/dist/commands/agents.js +93 -0
  35. package/dist/commands/agents.js.map +1 -0
  36. package/dist/commands/build.d.ts.map +1 -1
  37. package/dist/commands/build.js +73 -20
  38. package/dist/commands/build.js.map +1 -1
  39. package/dist/commands/chat.d.ts.map +1 -1
  40. package/dist/commands/chat.js +63 -4
  41. package/dist/commands/chat.js.map +1 -1
  42. package/dist/commands/diff.d.ts +1 -1
  43. package/dist/commands/diff.d.ts.map +1 -1
  44. package/dist/commands/diff.js +402 -16
  45. package/dist/commands/diff.js.map +1 -1
  46. package/dist/commands/export.js +1 -1
  47. package/dist/commands/export.js.map +1 -1
  48. package/dist/commands/init.d.ts +1 -0
  49. package/dist/commands/init.d.ts.map +1 -1
  50. package/dist/commands/init.js +131 -23
  51. package/dist/commands/init.js.map +1 -1
  52. package/dist/commands/link.d.ts +1 -0
  53. package/dist/commands/link.d.ts.map +1 -1
  54. package/dist/commands/link.js +76 -12
  55. package/dist/commands/link.js.map +1 -1
  56. package/dist/commands/login.d.ts.map +1 -1
  57. package/dist/commands/login.js +76 -59
  58. package/dist/commands/login.js.map +1 -1
  59. package/dist/commands/logs.d.ts +7 -0
  60. package/dist/commands/logs.d.ts.map +1 -0
  61. package/dist/commands/logs.js +115 -0
  62. package/dist/commands/logs.js.map +1 -0
  63. package/dist/commands/mcp.d.ts +6 -0
  64. package/dist/commands/mcp.d.ts.map +1 -0
  65. package/dist/commands/mcp.js +258 -0
  66. package/dist/commands/mcp.js.map +1 -0
  67. package/dist/commands/preview.d.ts.map +1 -1
  68. package/dist/commands/preview.js +191 -7
  69. package/dist/commands/preview.js.map +1 -1
  70. package/dist/commands/private.d.ts.map +1 -1
  71. package/dist/commands/private.js +248 -0
  72. package/dist/commands/private.js.map +1 -1
  73. package/dist/commands/prompts.d.ts +12 -0
  74. package/dist/commands/prompts.d.ts.map +1 -0
  75. package/dist/commands/prompts.js +245 -0
  76. package/dist/commands/prompts.js.map +1 -0
  77. package/dist/commands/publish.d.ts.map +1 -1
  78. package/dist/commands/publish.js +3 -2
  79. package/dist/commands/publish.js.map +1 -1
  80. package/dist/commands/pull.d.ts.map +1 -1
  81. package/dist/commands/pull.js +42 -133
  82. package/dist/commands/pull.js.map +1 -1
  83. package/dist/commands/push.d.ts.map +1 -1
  84. package/dist/commands/push.js +146 -38
  85. package/dist/commands/push.js.map +1 -1
  86. package/dist/commands/register.d.ts.map +1 -1
  87. package/dist/commands/register.js +39 -83
  88. package/dist/commands/register.js.map +1 -1
  89. package/dist/commands/skill.d.ts.map +1 -1
  90. package/dist/commands/skill.js +95 -19
  91. package/dist/commands/skill.js.map +1 -1
  92. package/dist/commands/status.d.ts.map +1 -1
  93. package/dist/commands/status.js +132 -96
  94. package/dist/commands/status.js.map +1 -1
  95. package/dist/commands/whoami.d.ts.map +1 -1
  96. package/dist/commands/whoami.js +53 -29
  97. package/dist/commands/whoami.js.map +1 -1
  98. package/dist/index.js +177 -5
  99. package/dist/index.js.map +1 -1
  100. package/dist/lib/api.d.ts +93 -7
  101. package/dist/lib/api.d.ts.map +1 -1
  102. package/dist/lib/api.js +143 -38
  103. package/dist/lib/api.js.map +1 -1
  104. package/dist/lib/compiler.d.ts +16 -33
  105. package/dist/lib/compiler.d.ts.map +1 -1
  106. package/dist/lib/compiler.js +499 -84
  107. package/dist/lib/compiler.js.map +1 -1
  108. package/dist/lib/config.d.ts +3 -0
  109. package/dist/lib/config.d.ts.map +1 -1
  110. package/dist/lib/config.js +10 -0
  111. package/dist/lib/config.js.map +1 -1
  112. package/dist/lib/decompile.d.ts +21 -0
  113. package/dist/lib/decompile.d.ts.map +1 -0
  114. package/dist/lib/decompile.js +304 -0
  115. package/dist/lib/decompile.js.map +1 -0
  116. package/dist/lib/onboarding.d.ts +4 -4
  117. package/dist/lib/onboarding.d.ts.map +1 -1
  118. package/dist/lib/onboarding.js +116 -25
  119. package/dist/lib/onboarding.js.map +1 -1
  120. package/dist/lib/skill-catalog.d.ts.map +1 -1
  121. package/dist/lib/skill-catalog.js +57 -8
  122. package/dist/lib/skill-catalog.js.map +1 -1
  123. package/dist/lib/skill-renderer.d.ts.map +1 -1
  124. package/dist/lib/skill-renderer.js +18 -0
  125. package/dist/lib/skill-renderer.js.map +1 -1
  126. package/dist/lib/skills.d.ts +8 -3
  127. package/dist/lib/skills.d.ts.map +1 -1
  128. package/dist/lib/skills.js +281 -82
  129. package/dist/lib/skills.js.map +1 -1
  130. package/dist/lib/vault.d.ts +40 -0
  131. package/dist/lib/vault.d.ts.map +1 -0
  132. package/dist/lib/vault.js +187 -0
  133. package/dist/lib/vault.js.map +1 -0
  134. package/dist/mcp/server.d.ts +21 -0
  135. package/dist/mcp/server.d.ts.map +1 -0
  136. package/dist/mcp/server.js +1283 -0
  137. package/dist/mcp/server.js.map +1 -0
  138. package/examples/houston/directives/agent.md +13 -0
  139. package/examples/houston/preferences/agent.md +14 -0
  140. package/examples/houston/profile/about.md +15 -0
  141. package/examples/houston/profile/links.md +10 -0
  142. package/examples/houston/profile/projects.md +37 -0
  143. package/examples/houston/profile/values.md +9 -0
  144. package/examples/houston/voice/voice.md +13 -0
  145. package/examples/jordan/directives/agent.md +13 -0
  146. package/examples/jordan/preferences/agent.md +16 -0
  147. package/examples/jordan/profile/about.md +15 -0
  148. package/examples/jordan/profile/links.md +10 -0
  149. package/examples/jordan/profile/projects.md +29 -0
  150. package/examples/jordan/profile/values.md +9 -0
  151. package/examples/jordan/voice/voice.md +12 -0
  152. package/examples/priya/directives/agent.md +13 -0
  153. package/examples/priya/preferences/agent.md +15 -0
  154. package/examples/priya/profile/about.md +15 -0
  155. package/examples/priya/profile/links.md +9 -0
  156. package/examples/priya/profile/projects.md +28 -0
  157. package/examples/priya/profile/values.md +9 -0
  158. package/examples/priya/voice/voice.md +12 -0
  159. package/package.json +11 -5
  160. package/skills/claude-md-generator.md +25 -0
  161. package/skills/meta-improve.md +27 -0
  162. package/skills/proactive-context-fill.md +52 -0
  163. package/skills/project-context-init.md +26 -0
  164. package/skills/voice-sync.md +48 -0
  165. package/skills/you-logs.md +71 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/api.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const api_1 = require("../lib/api");
5
+ (0, vitest_1.describe)("getMeUser", () => {
6
+ (0, vitest_1.it)("prefers nested user fields from the live /me response shape", () => {
7
+ const me = {
8
+ user: {
9
+ username: "nested-user",
10
+ email: "nested@example.com",
11
+ displayName: "Nested User",
12
+ plan: "pro",
13
+ createdAt: 123,
14
+ },
15
+ latestBundle: null,
16
+ publishedBundle: null,
17
+ bundleCount: 0,
18
+ };
19
+ (0, vitest_1.expect)((0, api_1.getMeUser)(me)).toEqual({
20
+ username: "nested-user",
21
+ email: "nested@example.com",
22
+ displayName: "Nested User",
23
+ plan: "pro",
24
+ createdAt: 123,
25
+ });
26
+ });
27
+ (0, vitest_1.it)("falls back to legacy flat fields for backward compatibility", () => {
28
+ const me = {
29
+ username: "flat-user",
30
+ email: "flat@example.com",
31
+ displayName: "Flat User",
32
+ plan: "free",
33
+ createdAt: 456,
34
+ latestBundle: null,
35
+ publishedBundle: null,
36
+ bundleCount: 0,
37
+ };
38
+ (0, vitest_1.expect)((0, api_1.getMeUser)(me)).toEqual({
39
+ username: "flat-user",
40
+ email: "flat@example.com",
41
+ displayName: "Flat User",
42
+ plan: "free",
43
+ createdAt: 456,
44
+ });
45
+ });
46
+ });
47
+ (0, vitest_1.describe)("getPublicProfile", () => {
48
+ (0, vitest_1.afterEach)(() => {
49
+ vitest_1.vi.restoreAllMocks();
50
+ });
51
+ (0, vitest_1.it)("parses vendor +json profile responses and wraps flat payloads", async () => {
52
+ const payload = {
53
+ schema: "you-md/v1",
54
+ username: "vendor-user",
55
+ identity: {
56
+ name: "Vendor User",
57
+ },
58
+ _profile: {
59
+ displayName: "Vendor User",
60
+ },
61
+ youMd: "# Vendor User",
62
+ };
63
+ vitest_1.vi.stubGlobal("fetch", vitest_1.vi.fn(async () => new Response(JSON.stringify(payload), {
64
+ status: 200,
65
+ headers: {
66
+ "Content-Type": "application/vnd.you-md.v1+json",
67
+ },
68
+ })));
69
+ await (0, vitest_1.expect)((0, api_1.getPublicProfile)("vendor-user")).resolves.toEqual({
70
+ youJson: {
71
+ schema: "you-md/v1",
72
+ username: "vendor-user",
73
+ identity: {
74
+ name: "Vendor User",
75
+ },
76
+ youMd: "# Vendor User",
77
+ },
78
+ youMd: "# Vendor User",
79
+ username: "vendor-user",
80
+ displayName: "Vendor User",
81
+ });
82
+ });
83
+ });
84
+ //# sourceMappingURL=api.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.test.js","sourceRoot":"","sources":["../../src/__tests__/api.test.ts"],"names":[],"mappings":";;AAAA,mCAA6D;AAC7D,oCAA0E;AAE1E,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAA,WAAE,EAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,GAAe;YACrB,IAAI,EAAE;gBACJ,QAAQ,EAAE,aAAa;gBACvB,KAAK,EAAE,oBAAoB;gBAC3B,WAAW,EAAE,aAAa;gBAC1B,IAAI,EAAE,KAAK;gBACX,SAAS,EAAE,GAAG;aACf;YACD,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,CAAC;SACf,CAAC;QAEF,IAAA,eAAM,EAAC,IAAA,eAAS,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5B,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE,oBAAoB;YAC3B,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,GAAe;YACrB,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,CAAC;SACf,CAAC;QAEF,IAAA,eAAM,EAAC,IAAA,eAAS,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5B,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,WAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE;gBACR,IAAI,EAAE,aAAa;aACpB;YACD,QAAQ,EAAE;gBACR,WAAW,EAAE,aAAa;aAC3B;YACD,KAAK,EAAE,eAAe;SACvB,CAAC;QAEF,WAAE,CAAC,UAAU,CACX,OAAO,EACP,WAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CACf,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;YACpC,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,cAAc,EAAE,gCAAgC;aACjD;SACF,CAAC,CACH,CACF,CAAC;QAEF,MAAM,IAAA,eAAM,EAAC,IAAA,sBAAgB,EAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7D,OAAO,EAAE;gBACP,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,aAAa;gBACvB,QAAQ,EAAE;oBACR,IAAI,EAAE,aAAa;iBACpB;gBACD,KAAK,EAAE,eAAe;aACvB;YACD,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,aAAa;YACvB,WAAW,EAAE,aAAa;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=compiler.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/compiler.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,127 @@
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
+ (0, vitest_1.describe)("compiler", () => {
42
+ let tmpDir;
43
+ (0, vitest_1.beforeEach)(() => {
44
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "youmd-test-"));
45
+ // Create minimal bundle structure
46
+ fs.mkdirSync(path.join(tmpDir, "profile"), { recursive: true });
47
+ fs.mkdirSync(path.join(tmpDir, "preferences"), { recursive: true });
48
+ });
49
+ (0, vitest_1.afterEach)(() => {
50
+ fs.rmSync(tmpDir, { recursive: true, force: true });
51
+ });
52
+ (0, vitest_1.it)("compiles an empty bundle without error", () => {
53
+ const result = (0, compiler_1.compileBundle)(tmpDir);
54
+ (0, vitest_1.expect)(result).toBeDefined();
55
+ (0, vitest_1.expect)(result.youJson).toBeDefined();
56
+ (0, vitest_1.expect)(result.markdown).toBeDefined();
57
+ (0, vitest_1.expect)(result.manifest).toBeDefined();
58
+ (0, vitest_1.expect)(result.stats).toBeDefined();
59
+ });
60
+ (0, vitest_1.it)("compiles about.md into identity fields", () => {
61
+ fs.writeFileSync(path.join(tmpDir, "profile", "about.md"), `---
62
+ title: About
63
+ ---
64
+ # Houston Golden
65
+
66
+ **Tagline:** Building the identity protocol
67
+
68
+ **Location:** Miami, FL
69
+
70
+ Founded BAMF Media. Building You.md.`);
71
+ const result = (0, compiler_1.compileBundle)(tmpDir);
72
+ const identity = result.youJson.identity;
73
+ (0, vitest_1.expect)(identity).toBeDefined();
74
+ (0, vitest_1.expect)(identity.name).toBe("Houston Golden");
75
+ });
76
+ (0, vitest_1.it)("compiles projects.md into projects array", () => {
77
+ fs.writeFileSync(path.join(tmpDir, "profile", "projects.md"), `---
78
+ title: Projects
79
+ ---
80
+ ## You.md
81
+ - **Role:** Founder
82
+ - **Status:** building
83
+ - **Description:** Identity context protocol.
84
+ - **URL:** https://you.md
85
+
86
+ ## BAMF Media
87
+ - **Role:** CEO
88
+ - **Status:** active
89
+ - **Description:** Growth marketing agency.`);
90
+ const result = (0, compiler_1.compileBundle)(tmpDir);
91
+ const projects = result.youJson.projects;
92
+ (0, vitest_1.expect)(projects).toBeDefined();
93
+ (0, vitest_1.expect)(projects.length).toBeGreaterThanOrEqual(2);
94
+ (0, vitest_1.expect)(projects[0].name).toBe("You.md");
95
+ });
96
+ (0, vitest_1.it)("compiles preferences into agent prefs", () => {
97
+ fs.writeFileSync(path.join(tmpDir, "preferences", "agent.md"), `---
98
+ title: Agent Preferences
99
+ ---
100
+ **Tone:** direct, no fluff
101
+ **Formality:** casual-professional
102
+ **Avoid:** corporate speak, emoji`);
103
+ const result = (0, compiler_1.compileBundle)(tmpDir);
104
+ const prefs = result.youJson.preferences;
105
+ (0, vitest_1.expect)(prefs).toBeDefined();
106
+ const agent = prefs.agent;
107
+ (0, vitest_1.expect)(agent.tone).toContain("direct");
108
+ });
109
+ (0, vitest_1.it)("writes bundle files to disk", () => {
110
+ const result = (0, compiler_1.compileBundle)(tmpDir);
111
+ (0, compiler_1.writeBundle)(tmpDir, result);
112
+ (0, vitest_1.expect)(fs.existsSync(path.join(tmpDir, "you.json"))).toBe(true);
113
+ (0, vitest_1.expect)(fs.existsSync(path.join(tmpDir, "you.md"))).toBe(true);
114
+ (0, vitest_1.expect)(fs.existsSync(path.join(tmpDir, "manifest.json"))).toBe(true);
115
+ // you.json should be valid JSON
116
+ const parsed = JSON.parse(fs.readFileSync(path.join(tmpDir, "you.json"), "utf-8"));
117
+ (0, vitest_1.expect)(parsed.schema).toBe("you-md/v1");
118
+ });
119
+ (0, vitest_1.it)("tracks stats correctly", () => {
120
+ fs.writeFileSync(path.join(tmpDir, "profile", "about.md"), "# Test\nHello");
121
+ fs.writeFileSync(path.join(tmpDir, "profile", "values.md"), "- Integrity\n- Speed");
122
+ const result = (0, compiler_1.compileBundle)(tmpDir);
123
+ (0, vitest_1.expect)(result.stats.totalSections).toBeGreaterThan(0);
124
+ (0, vitest_1.expect)(result.filesRead.length).toBeGreaterThan(0);
125
+ });
126
+ });
127
+ //# sourceMappingURL=compiler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.test.js","sourceRoot":"","sources":["../../src/__tests__/compiler.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
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
+ (0, vitest_1.describe)("config", () => {
41
+ let originalHome;
42
+ let tmpHome;
43
+ (0, vitest_1.beforeEach)(() => {
44
+ tmpHome = fs.mkdtempSync(path.join(os.tmpdir(), "youmd-config-test-"));
45
+ originalHome = process.env.HOME;
46
+ process.env.HOME = tmpHome;
47
+ });
48
+ (0, vitest_1.afterEach)(() => {
49
+ process.env.HOME = originalHome;
50
+ fs.rmSync(tmpHome, { recursive: true, force: true });
51
+ });
52
+ (0, vitest_1.it)("getConvexSiteUrl returns default when no config", async () => {
53
+ // Re-import to pick up new HOME
54
+ const { getConvexSiteUrl } = await Promise.resolve().then(() => __importStar(require("../lib/config")));
55
+ const url = getConvexSiteUrl();
56
+ (0, vitest_1.expect)(url).toContain("convex.site");
57
+ });
58
+ (0, vitest_1.it)("getConvexSiteUrl returns apiUrl from config when set", async () => {
59
+ const configDir = path.join(tmpHome, ".youmd");
60
+ fs.mkdirSync(configDir, { recursive: true });
61
+ fs.writeFileSync(path.join(configDir, "config.json"), JSON.stringify({ apiUrl: "https://custom.convex.site" }));
62
+ // Need fresh import
63
+ vitest_1.vi.resetModules();
64
+ const { getConvexSiteUrl } = await Promise.resolve().then(() => __importStar(require("../lib/config")));
65
+ const url = getConvexSiteUrl();
66
+ // May or may not pick up the custom URL depending on module caching
67
+ (0, vitest_1.expect)(url).toContain("convex.site");
68
+ });
69
+ (0, vitest_1.it)("isAuthenticated returns false when no token", async () => {
70
+ const { isAuthenticated } = await Promise.resolve().then(() => __importStar(require("../lib/config")));
71
+ (0, vitest_1.expect)(isAuthenticated()).toBe(false);
72
+ });
73
+ (0, vitest_1.it)("localBundleExists returns false when no .youmd dir", async () => {
74
+ const { localBundleExists } = await Promise.resolve().then(() => __importStar(require("../lib/config")));
75
+ // We're in a temp dir with no .youmd
76
+ (0, vitest_1.expect)(localBundleExists()).toBe(false);
77
+ });
78
+ });
79
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAyE;AACzE,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,IAAA,iBAAQ,EAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAI,YAAgC,CAAC;IACrC,IAAI,OAAe,CAAC;IAEpB,IAAA,mBAAU,EAAC,GAAG,EAAE;QACd,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACvE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;QAChC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,gCAAgC;QAChC,MAAM,EAAE,gBAAgB,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC/C,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EACnC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC,CACzD,CAAC;QAEF,oBAAoB;QACpB,WAAE,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,EAAE,gBAAgB,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,oEAAoE;QACpE,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,eAAe,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QAC1D,IAAA,eAAM,EAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,EAAE,iBAAiB,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QAC5D,qCAAqC;QACrC,IAAA,eAAM,EAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decompile.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompile.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/decompile.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,102 @@
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 fs = __importStar(require("fs"));
37
+ const os = __importStar(require("os"));
38
+ const path = __importStar(require("path"));
39
+ const vitest_1 = require("vitest");
40
+ const compiler_1 = require("../lib/compiler");
41
+ const decompile_1 = require("../lib/decompile");
42
+ const tempDirs = [];
43
+ function makeTempDir() {
44
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "youmd-decompile-"));
45
+ tempDirs.push(dir);
46
+ return dir;
47
+ }
48
+ (0, vitest_1.describe)("decompileToFilesystem", () => {
49
+ (0, vitest_1.afterEach)(() => {
50
+ for (const dir of tempDirs.splice(0)) {
51
+ fs.rmSync(dir, { recursive: true, force: true });
52
+ }
53
+ });
54
+ (0, vitest_1.it)("does not scaffold empty/default-only sections from nested bundles", () => {
55
+ const bundleDir = makeTempDir();
56
+ (0, decompile_1.decompileToFilesystem)(bundleDir, {
57
+ schema: "you-md/v1",
58
+ username: "tester",
59
+ identity: {
60
+ name: "Test User",
61
+ bio: {
62
+ short: "Short bio.",
63
+ medium: "Short bio.",
64
+ long: "Short bio.",
65
+ },
66
+ },
67
+ now: {
68
+ focus: [],
69
+ },
70
+ preferences: {
71
+ writing: {
72
+ style: "",
73
+ format: "markdown preferred",
74
+ },
75
+ },
76
+ projects: [],
77
+ values: [],
78
+ links: {},
79
+ voice: {},
80
+ agent_directives: {},
81
+ });
82
+ (0, vitest_1.expect)(fs.existsSync(path.join(bundleDir, "profile", "about.md"))).toBe(true);
83
+ (0, vitest_1.expect)(fs.existsSync(path.join(bundleDir, "profile", "now.md"))).toBe(false);
84
+ (0, vitest_1.expect)(fs.existsSync(path.join(bundleDir, "preferences", "writing.md"))).toBe(false);
85
+ (0, vitest_1.expect)(fs.existsSync(path.join(bundleDir, "profile", "projects.md"))).toBe(false);
86
+ (0, vitest_1.expect)(fs.existsSync(path.join(bundleDir, "profile", "values.md"))).toBe(false);
87
+ (0, vitest_1.expect)(fs.existsSync(path.join(bundleDir, "profile", "links.md"))).toBe(false);
88
+ });
89
+ (0, vitest_1.it)("does not synthesize writing defaults when no writing section exists", () => {
90
+ const bundleDir = makeTempDir();
91
+ for (const dir of ["profile", "preferences", "voice", "directives"]) {
92
+ fs.mkdirSync(path.join(bundleDir, dir), { recursive: true });
93
+ }
94
+ fs.writeFileSync(path.join(bundleDir, "profile", "about.md"), '---\ntitle: "About"\n---\n\n# Test User\n\nA real bio.\n');
95
+ const compiled = (0, compiler_1.compileBundle)(bundleDir);
96
+ const writing = (compiled.youJson.preferences?.writing ??
97
+ {});
98
+ (0, vitest_1.expect)(writing.style).toBe("");
99
+ (0, vitest_1.expect)(writing.format).toBe("");
100
+ });
101
+ });
102
+ //# sourceMappingURL=decompile.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompile.test.js","sourceRoot":"","sources":["../../src/__tests__/decompile.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hash.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/hash.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.test.js","sourceRoot":"","sources":["../../src/__tests__/hash.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,sCAA4D;AAE5D,IAAA,iBAAQ,EAAC,MAAM,EAAE,GAAG,EAAE;IACpB,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,IAAI,GAAG,IAAA,yBAAkB,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC1D,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,GAAG,IAAA,yBAAkB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,IAAA,yBAAkB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;YAC/D,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAA,yBAAkB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,IAAA,yBAAkB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnD,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,GAAG,IAAA,yBAAkB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,CAAC,GAAG,IAAA,yBAAkB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,GAAG,IAAA,yBAAkB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,IAAA,yBAAkB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;YACtD,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAA,yBAAkB,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;QACzB,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,IAAI,GAAG,kEAAkE,CAAC;YAChF,IAAA,eAAM,EAAC,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAA,eAAM,EAAC,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":""}