youmd 0.4.9 → 0.6.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 (179) 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 +96 -21
  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 +110 -11
  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 +138 -0
  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 +77 -13
  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 +48 -27
  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 +69 -6
  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 +110 -137
  82. package/dist/commands/pull.js.map +1 -1
  83. package/dist/commands/push.d.ts +1 -0
  84. package/dist/commands/push.d.ts.map +1 -1
  85. package/dist/commands/push.js +236 -38
  86. package/dist/commands/push.js.map +1 -1
  87. package/dist/commands/register.d.ts.map +1 -1
  88. package/dist/commands/register.js +40 -84
  89. package/dist/commands/register.js.map +1 -1
  90. package/dist/commands/skill.d.ts +8 -0
  91. package/dist/commands/skill.d.ts.map +1 -0
  92. package/dist/commands/skill.js +1226 -0
  93. package/dist/commands/skill.js.map +1 -0
  94. package/dist/commands/status.d.ts.map +1 -1
  95. package/dist/commands/status.js +221 -69
  96. package/dist/commands/status.js.map +1 -1
  97. package/dist/commands/sync.d.ts.map +1 -1
  98. package/dist/commands/sync.js +12 -0
  99. package/dist/commands/sync.js.map +1 -1
  100. package/dist/commands/whoami.d.ts.map +1 -1
  101. package/dist/commands/whoami.js +62 -33
  102. package/dist/commands/whoami.js.map +1 -1
  103. package/dist/index.js +187 -6
  104. package/dist/index.js.map +1 -1
  105. package/dist/lib/api.d.ts +169 -12
  106. package/dist/lib/api.d.ts.map +1 -1
  107. package/dist/lib/api.js +183 -33
  108. package/dist/lib/api.js.map +1 -1
  109. package/dist/lib/ascii.d.ts.map +1 -1
  110. package/dist/lib/ascii.js +20 -48
  111. package/dist/lib/ascii.js.map +1 -1
  112. package/dist/lib/compiler.d.ts +16 -33
  113. package/dist/lib/compiler.d.ts.map +1 -1
  114. package/dist/lib/compiler.js +499 -84
  115. package/dist/lib/compiler.js.map +1 -1
  116. package/dist/lib/config.d.ts +27 -0
  117. package/dist/lib/config.d.ts.map +1 -1
  118. package/dist/lib/config.js +50 -0
  119. package/dist/lib/config.js.map +1 -1
  120. package/dist/lib/decompile.d.ts +21 -0
  121. package/dist/lib/decompile.d.ts.map +1 -0
  122. package/dist/lib/decompile.js +304 -0
  123. package/dist/lib/decompile.js.map +1 -0
  124. package/dist/lib/hash.d.ts +3 -0
  125. package/dist/lib/hash.d.ts.map +1 -0
  126. package/dist/lib/hash.js +31 -0
  127. package/dist/lib/hash.js.map +1 -0
  128. package/dist/lib/onboarding.d.ts +4 -4
  129. package/dist/lib/onboarding.d.ts.map +1 -1
  130. package/dist/lib/onboarding.js +228 -81
  131. package/dist/lib/onboarding.js.map +1 -1
  132. package/dist/lib/skill-catalog.d.ts +57 -0
  133. package/dist/lib/skill-catalog.d.ts.map +1 -0
  134. package/dist/lib/skill-catalog.js +245 -0
  135. package/dist/lib/skill-catalog.js.map +1 -0
  136. package/dist/lib/skill-renderer.d.ts +55 -0
  137. package/dist/lib/skill-renderer.d.ts.map +1 -0
  138. package/dist/lib/skill-renderer.js +382 -0
  139. package/dist/lib/skill-renderer.js.map +1 -0
  140. package/dist/lib/skills.d.ts +130 -0
  141. package/dist/lib/skills.d.ts.map +1 -0
  142. package/dist/lib/skills.js +876 -0
  143. package/dist/lib/skills.js.map +1 -0
  144. package/dist/lib/vault.d.ts +40 -0
  145. package/dist/lib/vault.d.ts.map +1 -0
  146. package/dist/lib/vault.js +187 -0
  147. package/dist/lib/vault.js.map +1 -0
  148. package/dist/mcp/server.d.ts +21 -0
  149. package/dist/mcp/server.d.ts.map +1 -0
  150. package/dist/mcp/server.js +1283 -0
  151. package/dist/mcp/server.js.map +1 -0
  152. package/examples/houston/directives/agent.md +13 -0
  153. package/examples/houston/preferences/agent.md +14 -0
  154. package/examples/houston/profile/about.md +15 -0
  155. package/examples/houston/profile/links.md +10 -0
  156. package/examples/houston/profile/projects.md +37 -0
  157. package/examples/houston/profile/values.md +9 -0
  158. package/examples/houston/voice/voice.md +13 -0
  159. package/examples/jordan/directives/agent.md +13 -0
  160. package/examples/jordan/preferences/agent.md +16 -0
  161. package/examples/jordan/profile/about.md +15 -0
  162. package/examples/jordan/profile/links.md +10 -0
  163. package/examples/jordan/profile/projects.md +29 -0
  164. package/examples/jordan/profile/values.md +9 -0
  165. package/examples/jordan/voice/voice.md +12 -0
  166. package/examples/priya/directives/agent.md +13 -0
  167. package/examples/priya/preferences/agent.md +15 -0
  168. package/examples/priya/profile/about.md +15 -0
  169. package/examples/priya/profile/links.md +9 -0
  170. package/examples/priya/profile/projects.md +28 -0
  171. package/examples/priya/profile/values.md +9 -0
  172. package/examples/priya/voice/voice.md +12 -0
  173. package/package.json +15 -6
  174. package/skills/claude-md-generator.md +91 -0
  175. package/skills/meta-improve.md +84 -0
  176. package/skills/proactive-context-fill.md +52 -0
  177. package/skills/project-context-init.md +77 -0
  178. package/skills/voice-sync.md +89 -0
  179. package/skills/you-logs.md +71 -0
@@ -0,0 +1,7 @@
1
+ export declare function logsCommand(options: {
2
+ limit?: string;
3
+ agent?: string;
4
+ action?: string;
5
+ tail?: boolean;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAyDA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DhB"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logsCommand = logsCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const config_1 = require("../lib/config");
9
+ const DIM = chalk_1.default.dim;
10
+ function formatTime(ts) {
11
+ const d = new Date(ts);
12
+ return d.toTimeString().slice(0, 5);
13
+ }
14
+ function actionColor(action) {
15
+ if (action.includes("read") || action === "skill_use")
16
+ return chalk_1.default.cyan;
17
+ if (action.includes("write") || action === "push" || action === "publish")
18
+ return chalk_1.default.green;
19
+ if (action === "memory_add")
20
+ return chalk_1.default.magenta;
21
+ return chalk_1.default.white;
22
+ }
23
+ async function fetchActivity(opts) {
24
+ const config = (0, config_1.readGlobalConfig)();
25
+ if (!config.token)
26
+ return [];
27
+ const siteUrl = (0, config_1.getConvexSiteUrl)();
28
+ const params = new URLSearchParams();
29
+ if (opts.limit)
30
+ params.set("limit", String(opts.limit));
31
+ if (opts.agent)
32
+ params.set("agent", opts.agent);
33
+ if (opts.action)
34
+ params.set("action", opts.action);
35
+ try {
36
+ const res = await fetch(`${siteUrl}/api/v1/me/activity?${params}`, {
37
+ headers: { Authorization: `Bearer ${config.token}` },
38
+ signal: AbortSignal.timeout(10000),
39
+ });
40
+ if (!res.ok)
41
+ return [];
42
+ const data = (await res.json());
43
+ return data.activity || [];
44
+ }
45
+ catch {
46
+ return [];
47
+ }
48
+ }
49
+ async function logsCommand(options) {
50
+ if (!(0, config_1.isAuthenticated)()) {
51
+ console.log("");
52
+ console.log(chalk_1.default.yellow(" not authenticated"));
53
+ console.log(" run " + chalk_1.default.cyan("youmd login") + " to view activity logs.");
54
+ console.log("");
55
+ return;
56
+ }
57
+ const limit = parseInt(options.limit || "30", 10);
58
+ if (options.tail) {
59
+ console.log("");
60
+ console.log(DIM(" --- youmd activity (live, ctrl-c to stop) ---"));
61
+ console.log("");
62
+ let lastSeen = null;
63
+ // eslint-disable-next-line no-constant-condition
64
+ while (true) {
65
+ const events = await fetchActivity({
66
+ limit: 50,
67
+ agent: options.agent,
68
+ action: options.action,
69
+ });
70
+ const newEvents = lastSeen
71
+ ? events.filter((e) => e.createdAt > lastSeen).reverse()
72
+ : events.slice(0, 10).reverse();
73
+ for (const e of newEvents) {
74
+ printEvent(e);
75
+ }
76
+ if (events.length > 0) {
77
+ lastSeen = Math.max(...events.map((e) => e.createdAt));
78
+ }
79
+ await new Promise((r) => setTimeout(r, 2000));
80
+ }
81
+ }
82
+ else {
83
+ console.log("");
84
+ console.log(DIM(" --- recent activity ---"));
85
+ console.log("");
86
+ const events = await fetchActivity({
87
+ limit,
88
+ agent: options.agent,
89
+ action: options.action,
90
+ });
91
+ if (events.length === 0) {
92
+ console.log(" " + DIM("no activity yet -- agents will appear here when they connect"));
93
+ console.log("");
94
+ return;
95
+ }
96
+ for (const e of events.slice().reverse()) {
97
+ printEvent(e);
98
+ }
99
+ console.log("");
100
+ console.log(DIM(` ${events.length} event${events.length === 1 ? "" : "s"} -- use --tail for live mode`));
101
+ console.log("");
102
+ }
103
+ }
104
+ function printEvent(e) {
105
+ const time = formatTime(e.createdAt);
106
+ const agent = chalk_1.default.bold(e.agentName.padEnd(16));
107
+ const action = actionColor(e.action)(e.action.padEnd(12));
108
+ const resource = e.resource ? DIM(e.resource) : "";
109
+ const scope = e.scope ? DIM(`[${e.scope}]`) : "";
110
+ const versions = e.bundleVersionBefore && e.bundleVersionAfter
111
+ ? DIM(` v${e.bundleVersionBefore}->v${e.bundleVersionAfter}`)
112
+ : "";
113
+ console.log(` ${DIM(time)} ${agent} ${action} ${resource} ${scope}${versions}`);
114
+ }
115
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function mcpCommand(options: {
2
+ json?: boolean;
3
+ install?: string;
4
+ auto?: boolean;
5
+ }): Promise<void>;
6
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAiBA,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7G"}
@@ -0,0 +1,258 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.mcpCommand = mcpCommand;
40
+ const fs = __importStar(require("fs"));
41
+ const os = __importStar(require("os"));
42
+ const path = __importStar(require("path"));
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ const config_1 = require("../lib/config");
45
+ const ACCENT = chalk_1.default.hex("#C46A3A");
46
+ const DIM = chalk_1.default.dim;
47
+ const PUBLISHED_MCP_PACKAGE = process.env.YOUMD_MCP_PACKAGE || "youmd@latest";
48
+ function getPublishedMcpEntry() {
49
+ return {
50
+ command: "npx",
51
+ args: ["--yes", PUBLISHED_MCP_PACKAGE, "mcp"],
52
+ };
53
+ }
54
+ async function mcpCommand(options) {
55
+ // --json: output MCP config for agent settings
56
+ if (options.json) {
57
+ const config = getMcpConfig();
58
+ console.log(JSON.stringify(config, null, 2));
59
+ return;
60
+ }
61
+ // --install: show setup instructions for a specific agent (or auto-write)
62
+ if (options.install) {
63
+ await installMcp(options.install, options.auto);
64
+ return;
65
+ }
66
+ // Default: start the MCP server
67
+ if (!(0, config_1.localBundleExists)()) {
68
+ console.error("youmd mcp: no local .youmd/ bundle -- remote-only mode (run youmd init for full features)");
69
+ }
70
+ const { startMcpServer } = await Promise.resolve().then(() => __importStar(require("../mcp/server")));
71
+ await startMcpServer();
72
+ }
73
+ function getMcpConfig() {
74
+ const binPath = process.argv[1];
75
+ const repoLocalDist = path.resolve(process.cwd(), "cli", "dist", "index.js");
76
+ // When running from the source repo itself, prefer the checked-out local CLI
77
+ // so MCP clients exercise the latest in-repo implementation instead of npm.
78
+ if (binPath && path.resolve(binPath) === repoLocalDist && fs.existsSync(repoLocalDist)) {
79
+ return {
80
+ youmd: {
81
+ command: "node",
82
+ args: [repoLocalDist, "mcp"],
83
+ },
84
+ };
85
+ }
86
+ return {
87
+ youmd: getPublishedMcpEntry(),
88
+ };
89
+ }
90
+ function mergeMcpServers(existing) {
91
+ return { ...(existing || {}), youmd: getPublishedMcpEntry() };
92
+ }
93
+ function backupAndWrite(filePath, content) {
94
+ const ts = new Date().toISOString().replace(/[:.]/g, "-");
95
+ const backupPath = `${filePath}.bak.${ts}`;
96
+ if (fs.existsSync(filePath)) {
97
+ fs.copyFileSync(filePath, backupPath);
98
+ }
99
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
100
+ fs.writeFileSync(filePath, content);
101
+ return backupPath;
102
+ }
103
+ function installClaudeAuto() {
104
+ const settingsPath = path.join(os.homedir(), ".claude", "settings.json");
105
+ let settings = {};
106
+ const existed = fs.existsSync(settingsPath);
107
+ if (existed) {
108
+ try {
109
+ const raw = fs.readFileSync(settingsPath, "utf-8");
110
+ settings = raw.trim().length > 0 ? JSON.parse(raw) : {};
111
+ }
112
+ catch (err) {
113
+ console.log("");
114
+ console.log(chalk_1.default.yellow(" could not parse ~/.claude/settings.json:"));
115
+ console.log(" " + DIM(err instanceof Error ? err.message : String(err)));
116
+ console.log(DIM(" falling back to manual instructions."));
117
+ console.log("");
118
+ return false;
119
+ }
120
+ }
121
+ const mcpServers = mergeMcpServers(settings.mcpServers);
122
+ const next = { ...settings, mcpServers };
123
+ const json = JSON.stringify(next, null, 2) + "\n";
124
+ const backupPath = backupAndWrite(settingsPath, json);
125
+ console.log("");
126
+ console.log(" " + ACCENT("you.md mcp") + DIM(" -- claude code (auto)"));
127
+ console.log("");
128
+ console.log(" " + chalk_1.default.green("\u2713") + " merged youmd into " + chalk_1.default.cyan(settingsPath));
129
+ if (existed) {
130
+ console.log(" " + DIM("backup: " + backupPath));
131
+ }
132
+ console.log("");
133
+ console.log(" " + chalk_1.default.bold("Installed. Restart Claude Code to activate."));
134
+ console.log("");
135
+ return true;
136
+ }
137
+ function installCursorAuto() {
138
+ const settingsPath = path.join(process.cwd(), ".cursor", "mcp.json");
139
+ let settings = {};
140
+ const existed = fs.existsSync(settingsPath);
141
+ if (existed) {
142
+ try {
143
+ const raw = fs.readFileSync(settingsPath, "utf-8");
144
+ settings = raw.trim().length > 0 ? JSON.parse(raw) : {};
145
+ }
146
+ catch (err) {
147
+ console.log("");
148
+ console.log(chalk_1.default.yellow(" could not parse .cursor/mcp.json:"));
149
+ console.log(" " + DIM(err instanceof Error ? err.message : String(err)));
150
+ console.log(DIM(" falling back to manual instructions."));
151
+ console.log("");
152
+ return false;
153
+ }
154
+ }
155
+ const mcpServers = mergeMcpServers(settings.mcpServers);
156
+ const next = { ...settings, mcpServers };
157
+ const json = JSON.stringify(next, null, 2) + "\n";
158
+ const backupPath = backupAndWrite(settingsPath, json);
159
+ console.log("");
160
+ console.log(" " + ACCENT("you.md mcp") + DIM(" -- cursor (auto)"));
161
+ console.log("");
162
+ console.log(" " + chalk_1.default.green("\u2713") + " merged youmd into " + chalk_1.default.cyan(settingsPath));
163
+ if (existed) {
164
+ console.log(" " + DIM("backup: " + backupPath));
165
+ }
166
+ else {
167
+ console.log(" " + DIM("created new .cursor/mcp.json"));
168
+ }
169
+ console.log("");
170
+ console.log(" " + chalk_1.default.bold("Installed. Restart Cursor to activate."));
171
+ console.log("");
172
+ return true;
173
+ }
174
+ async function installMcp(target, auto) {
175
+ const config = (0, config_1.readGlobalConfig)();
176
+ const username = config.username || "user";
177
+ const authed = (0, config_1.isAuthenticated)();
178
+ if (auto) {
179
+ if (target === "claude") {
180
+ if (installClaudeAuto())
181
+ return;
182
+ // fall through to manual instructions on error
183
+ }
184
+ else if (target === "cursor") {
185
+ if (installCursorAuto())
186
+ return;
187
+ }
188
+ else {
189
+ console.log("");
190
+ console.log(chalk_1.default.yellow(` --auto not supported for target: ${target}`));
191
+ console.log(DIM(" supported: claude, cursor"));
192
+ console.log("");
193
+ return;
194
+ }
195
+ }
196
+ if (target === "claude") {
197
+ console.log("");
198
+ console.log(" " + ACCENT("you.md mcp") + DIM(" -- claude code"));
199
+ console.log("");
200
+ console.log(" add to " + chalk_1.default.cyan("~/.claude/settings.json") + ":");
201
+ console.log("");
202
+ console.log(DIM(" {"));
203
+ console.log(DIM(" \"mcpServers\": {"));
204
+ console.log(` ${chalk_1.default.green('"youmd"')}: {`);
205
+ console.log(` "command": ${chalk_1.default.green('"npx"')},`);
206
+ console.log(` "args": [${chalk_1.default.green('"--yes"')}, ${chalk_1.default.green(`"${PUBLISHED_MCP_PACKAGE}"`)}, ${chalk_1.default.green('"mcp"')}]`);
207
+ console.log(" }");
208
+ console.log(DIM(" }"));
209
+ console.log(DIM(" }"));
210
+ console.log("");
211
+ console.log(" then restart claude code.");
212
+ console.log("");
213
+ if (authed) {
214
+ console.log(DIM(` authenticated as @${username}`));
215
+ console.log(DIM(" memories, remote push, and skill sync available"));
216
+ }
217
+ else {
218
+ console.log(chalk_1.default.yellow(" not authenticated -- run youmd login for full features"));
219
+ }
220
+ console.log("");
221
+ }
222
+ else if (target === "cursor") {
223
+ console.log("");
224
+ console.log(" " + ACCENT("you.md mcp") + DIM(" -- cursor"));
225
+ console.log("");
226
+ console.log(" add to " + chalk_1.default.cyan(".cursor/mcp.json") + " in your project root:");
227
+ console.log("");
228
+ // Show clean, copy-pasteable JSON
229
+ const cursorConfig = {
230
+ mcpServers: {
231
+ youmd: {
232
+ command: "npx",
233
+ args: ["--yes", PUBLISHED_MCP_PACKAGE, "mcp"],
234
+ },
235
+ },
236
+ };
237
+ const jsonLines = JSON.stringify(cursorConfig, null, 2).split("\n");
238
+ for (const line of jsonLines) {
239
+ console.log(" " + chalk_1.default.white(line));
240
+ }
241
+ console.log("");
242
+ if (authed) {
243
+ console.log(DIM(` authenticated as @${username}`));
244
+ console.log(DIM(" your identity context will be available to cursor agents."));
245
+ }
246
+ else {
247
+ console.log(chalk_1.default.yellow(" not authenticated -- run youmd login for full features"));
248
+ }
249
+ console.log("");
250
+ }
251
+ else {
252
+ console.log("");
253
+ console.log(chalk_1.default.yellow(` unknown target: ${target}`));
254
+ console.log(" supported: " + chalk_1.default.cyan("claude") + ", " + chalk_1.default.cyan("cursor"));
255
+ console.log("");
256
+ }
257
+ }
258
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAmB/D"}
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AASA,wBAAgB,cAAc,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgH/D"}
@@ -1,13 +1,51 @@
1
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
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.previewCommand = previewCommand;
40
+ const http = __importStar(require("http"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
7
43
  const chalk_1 = __importDefault(require("chalk"));
8
44
  const config_1 = require("../lib/config");
45
+ const compiler_1 = require("../lib/compiler");
46
+ const ACCENT = chalk_1.default.hex("#C46A3A");
9
47
  function previewCommand(options) {
10
- const port = options.port || "3333";
48
+ const port = parseInt(options.port || "3333", 10);
11
49
  console.log("");
12
50
  if (!(0, config_1.localBundleExists)()) {
13
51
  console.log(chalk_1.default.yellow("no .youmd/ directory found"));
@@ -16,11 +54,157 @@ function previewCommand(options) {
16
54
  console.log("");
17
55
  return;
18
56
  }
19
- console.log("you.md -- preview");
20
- console.log("");
21
- console.log(chalk_1.default.yellow("preview server is not yet implemented"));
22
- console.log("");
23
- console.log("This will start a local server at " + chalk_1.default.cyan("http://localhost:" + port) + " to preview your identity bundle.");
24
- console.log("");
57
+ const bundleDir = (0, config_1.getLocalBundleDir)();
58
+ // Compile fresh bundle
59
+ let youJson = {};
60
+ let youMd = "";
61
+ const youJsonPath = path.join(bundleDir, "you.json");
62
+ const youMdPath = path.join(bundleDir, "you.md");
63
+ try {
64
+ const result = (0, compiler_1.compileBundle)(bundleDir);
65
+ youJson = result.youJson;
66
+ youMd = result.markdown;
67
+ }
68
+ catch {
69
+ // Fall back to reading existing files
70
+ if (fs.existsSync(youJsonPath)) {
71
+ youJson = JSON.parse(fs.readFileSync(youJsonPath, "utf-8"));
72
+ }
73
+ if (fs.existsSync(youMdPath)) {
74
+ youMd = fs.readFileSync(youMdPath, "utf-8");
75
+ }
76
+ }
77
+ const identity = (youJson.identity || {});
78
+ const name = identity.name || "you.md";
79
+ const server = http.createServer((req, res) => {
80
+ const url = req.url || "/";
81
+ // CORS headers for agent access
82
+ res.setHeader("Access-Control-Allow-Origin", "*");
83
+ res.setHeader("Access-Control-Allow-Methods", "GET, OPTIONS");
84
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
85
+ if (req.method === "OPTIONS") {
86
+ res.writeHead(204);
87
+ res.end();
88
+ return;
89
+ }
90
+ const accept = req.headers.accept || "";
91
+ if (url === "/you.json" || url === "/identity.json") {
92
+ res.writeHead(200, { "Content-Type": "application/json" });
93
+ res.end(JSON.stringify(youJson, null, 2));
94
+ return;
95
+ }
96
+ if (url === "/you.md" || url === "/you.txt" || url === "/identity.md") {
97
+ res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });
98
+ res.end(youMd);
99
+ return;
100
+ }
101
+ if (url === "/" || url === "/index.html") {
102
+ // Content negotiation — agents get plain text, browsers get HTML
103
+ if (accept.includes("application/json")) {
104
+ res.writeHead(200, { "Content-Type": "application/json" });
105
+ res.end(JSON.stringify(youJson, null, 2));
106
+ return;
107
+ }
108
+ if (accept.includes("text/plain") || accept.includes("text/markdown")) {
109
+ res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });
110
+ res.end(youMd);
111
+ return;
112
+ }
113
+ // HTML preview for browsers
114
+ const html = buildPreviewHtml(youJson, youMd, name, port);
115
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
116
+ res.end(html);
117
+ return;
118
+ }
119
+ res.writeHead(404, { "Content-Type": "text/plain" });
120
+ res.end("not found");
121
+ });
122
+ server.listen(port, () => {
123
+ console.log(ACCENT(" you.md preview"));
124
+ console.log("");
125
+ console.log(` serving ${chalk_1.default.dim(name)} on:`);
126
+ console.log("");
127
+ console.log(` ${chalk_1.default.cyan(`http://localhost:${port}`)} ${chalk_1.default.dim("html preview")}`);
128
+ console.log(` ${chalk_1.default.cyan(`http://localhost:${port}/you.json`)} ${chalk_1.default.dim("machine-readable")}`);
129
+ console.log(` ${chalk_1.default.cyan(`http://localhost:${port}/you.md`)} ${chalk_1.default.dim("agent-readable")}`);
130
+ console.log("");
131
+ console.log(chalk_1.default.dim(" press ctrl+c to stop"));
132
+ console.log("");
133
+ });
134
+ // Graceful shutdown
135
+ process.on("SIGINT", () => {
136
+ server.close();
137
+ console.log("");
138
+ console.log(chalk_1.default.dim(" preview stopped"));
139
+ console.log("");
140
+ process.exit(0);
141
+ });
142
+ }
143
+ function buildPreviewHtml(youJson, youMd, name, port) {
144
+ const identity = (youJson.identity || {});
145
+ const bio = identity.bio || {};
146
+ const tagline = identity.tagline || "";
147
+ const location = identity.location || "";
148
+ const projects = (youJson.projects || []);
149
+ const values = (youJson.values || []);
150
+ const links = (youJson.links || {});
151
+ const preferences = (youJson.preferences || {});
152
+ const agent = (preferences.agent || {});
153
+ const projectsHtml = projects.map((p) => `<div class="project">
154
+ <span class="label">${p.name || "untitled"}</span>
155
+ <span class="dim"> -- ${p.role || ""} (${p.status || ""})</span>
156
+ ${p.description ? `<div class="dim">${p.description}</div>` : ""}
157
+ </div>`).join("");
158
+ const valuesHtml = values.map((v) => `<li>${v}</li>`).join("");
159
+ const linksHtml = Object.entries(links).map(([k, v]) => `<li><span class="label">${k}:</span> <a href="${v}">${v}</a></li>`).join("");
160
+ return `<!DOCTYPE html>
161
+ <html lang="en">
162
+ <head>
163
+ <meta charset="utf-8">
164
+ <meta name="viewport" content="width=device-width, initial-scale=1">
165
+ <title>${name} -- you.md preview</title>
166
+ <style>
167
+ * { margin: 0; padding: 0; box-sizing: border-box; }
168
+ body { background: #0D0D0D; color: #EAE6E1; font-family: 'JetBrains Mono', monospace; padding: 2rem; max-width: 800px; margin: 0 auto; line-height: 1.6; }
169
+ h1 { color: #C46A3A; font-size: 1.5rem; margin-bottom: 0.25rem; }
170
+ h2 { color: #C46A3A; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.1em; margin: 2rem 0 0.5rem; opacity: 0.8; }
171
+ .dim { opacity: 0.6; }
172
+ .label { color: #C46A3A; }
173
+ .tagline { font-size: 1rem; opacity: 0.8; margin-bottom: 0.5rem; }
174
+ .bio { margin: 1rem 0; opacity: 0.9; }
175
+ .project { margin: 0.5rem 0; }
176
+ ul { list-style: none; padding: 0; }
177
+ li { padding: 0.2rem 0; }
178
+ li::before { content: "-- "; opacity: 0.4; }
179
+ a { color: #C46A3A; text-decoration: none; }
180
+ a:hover { text-decoration: underline; }
181
+ .endpoints { margin-top: 2rem; padding: 1rem; border: 1px solid rgba(234,230,225,0.1); border-radius: 2px; }
182
+ .endpoints code { color: #C46A3A; }
183
+ pre { background: rgba(255,255,255,0.03); padding: 0.5rem; border-radius: 2px; overflow-x: auto; font-size: 0.85rem; margin: 0.5rem 0; }
184
+ </style>
185
+ </head>
186
+ <body>
187
+ <h1>${name}</h1>
188
+ <div class="tagline">${tagline}</div>
189
+ ${location ? `<div class="dim">${location}</div>` : ""}
190
+ ${bio.medium ? `<div class="bio">${bio.medium}</div>` : bio.short ? `<div class="bio">${bio.short}</div>` : ""}
191
+
192
+ ${projects.length ? `<h2>── projects ──</h2>${projectsHtml}` : ""}
193
+ ${values.length ? `<h2>── values ──</h2><ul>${valuesHtml}</ul>` : ""}
194
+ ${Object.keys(links).length ? `<h2>── links ──</h2><ul>${linksHtml}</ul>` : ""}
195
+ ${agent.tone ? `<h2>── agent preferences ──</h2><div class="dim">tone: ${agent.tone}</div>` : ""}
196
+
197
+ <div class="endpoints">
198
+ <h2>── endpoints ──</h2>
199
+ <ul>
200
+ <li><code>GET /you.json</code> <span class="dim">machine-readable identity</span></li>
201
+ <li><code>GET /you.md</code> <span class="dim">agent-readable markdown</span></li>
202
+ <li><code>GET /</code> <span class="dim">content-negotiated (Accept header)</span></li>
203
+ </ul>
204
+ <pre>curl http://localhost:${port}/you.json
205
+ curl -H "Accept: text/plain" http://localhost:${port}/</pre>
206
+ </div>
207
+ </body>
208
+ </html>`;
25
209
  }
26
210
  //# sourceMappingURL=preview.js.map