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.
- package/dist/__tests__/api.test.d.ts +2 -0
- package/dist/__tests__/api.test.d.ts.map +1 -0
- package/dist/__tests__/api.test.js +84 -0
- package/dist/__tests__/api.test.js.map +1 -0
- package/dist/__tests__/compiler.test.d.ts +2 -0
- package/dist/__tests__/compiler.test.d.ts.map +1 -0
- package/dist/__tests__/compiler.test.js +127 -0
- package/dist/__tests__/compiler.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +79 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/decompile.test.d.ts +2 -0
- package/dist/__tests__/decompile.test.d.ts.map +1 -0
- package/dist/__tests__/decompile.test.js +102 -0
- package/dist/__tests__/decompile.test.js.map +1 -0
- package/dist/__tests__/hash.test.d.ts +2 -0
- package/dist/__tests__/hash.test.d.ts.map +1 -0
- package/dist/__tests__/hash.test.js +44 -0
- package/dist/__tests__/hash.test.js.map +1 -0
- package/dist/__tests__/integration.test.d.ts +2 -0
- package/dist/__tests__/integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration.test.js +277 -0
- package/dist/__tests__/integration.test.js.map +1 -0
- package/dist/__tests__/skill-renderer.test.d.ts +2 -0
- package/dist/__tests__/skill-renderer.test.d.ts.map +1 -0
- package/dist/__tests__/skill-renderer.test.js +68 -0
- package/dist/__tests__/skill-renderer.test.js.map +1 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +6 -3
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/agents.d.ts +2 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +93 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +96 -21
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +110 -11
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/diff.d.ts +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +402 -16
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/export.js +1 -1
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +138 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/link.d.ts +1 -0
- package/dist/commands/link.d.ts.map +1 -1
- package/dist/commands/link.js +77 -13
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +48 -27
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logs.d.ts +7 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +115 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/mcp.d.ts +6 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +258 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/preview.d.ts.map +1 -1
- package/dist/commands/preview.js +191 -7
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/private.d.ts.map +1 -1
- package/dist/commands/private.js +248 -0
- package/dist/commands/private.js.map +1 -1
- package/dist/commands/prompts.d.ts +12 -0
- package/dist/commands/prompts.d.ts.map +1 -0
- package/dist/commands/prompts.js +245 -0
- package/dist/commands/prompts.js.map +1 -0
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +69 -6
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +110 -137
- 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 +236 -38
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +40 -84
- 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 +1226 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +221 -69
- 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 +62 -33
- package/dist/commands/whoami.js.map +1 -1
- package/dist/index.js +187 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +169 -12
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +183 -33
- 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/compiler.d.ts +16 -33
- package/dist/lib/compiler.d.ts.map +1 -1
- package/dist/lib/compiler.js +499 -84
- package/dist/lib/compiler.js.map +1 -1
- package/dist/lib/config.d.ts +27 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +50 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/decompile.d.ts +21 -0
- package/dist/lib/decompile.d.ts.map +1 -0
- package/dist/lib/decompile.js +304 -0
- package/dist/lib/decompile.js.map +1 -0
- 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 +4 -4
- package/dist/lib/onboarding.d.ts.map +1 -1
- package/dist/lib/onboarding.js +228 -81
- 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 +245 -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 +382 -0
- package/dist/lib/skill-renderer.js.map +1 -0
- package/dist/lib/skills.d.ts +130 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +876 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/lib/vault.d.ts +40 -0
- package/dist/lib/vault.d.ts.map +1 -0
- package/dist/lib/vault.js +187 -0
- package/dist/lib/vault.js.map +1 -0
- package/dist/mcp/server.d.ts +21 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +1283 -0
- package/dist/mcp/server.js.map +1 -0
- package/examples/houston/directives/agent.md +13 -0
- package/examples/houston/preferences/agent.md +14 -0
- package/examples/houston/profile/about.md +15 -0
- package/examples/houston/profile/links.md +10 -0
- package/examples/houston/profile/projects.md +37 -0
- package/examples/houston/profile/values.md +9 -0
- package/examples/houston/voice/voice.md +13 -0
- package/examples/jordan/directives/agent.md +13 -0
- package/examples/jordan/preferences/agent.md +16 -0
- package/examples/jordan/profile/about.md +15 -0
- package/examples/jordan/profile/links.md +10 -0
- package/examples/jordan/profile/projects.md +29 -0
- package/examples/jordan/profile/values.md +9 -0
- package/examples/jordan/voice/voice.md +12 -0
- package/examples/priya/directives/agent.md +13 -0
- package/examples/priya/preferences/agent.md +15 -0
- package/examples/priya/profile/about.md +15 -0
- package/examples/priya/profile/links.md +9 -0
- package/examples/priya/profile/projects.md +28 -0
- package/examples/priya/profile/values.md +9 -0
- package/examples/priya/voice/voice.md +12 -0
- package/package.json +15 -6
- package/skills/claude-md-generator.md +91 -0
- package/skills/meta-improve.md +84 -0
- package/skills/proactive-context-fill.md +52 -0
- package/skills/project-context-init.md +77 -0
- package/skills/voice-sync.md +89 -0
- package/skills/you-logs.md +71 -0
|
@@ -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 @@
|
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,gCAqBC;AAtCD,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,kDAA0B;AAC1B,0CAAqF;AAErF,MAAM,MAAM,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACpC,MAAM,GAAG,GAAG,eAAK,CAAC,GAAG,CAAC;AACtB,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,cAAc,CAAC;AAE9E,SAAS,oBAAoB;IAC3B,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,CAAC;KAC9C,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,OAA6D;IAC5F,+CAA+C;IAC/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,0EAA0E;IAC1E,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC,IAAA,0BAAiB,GAAE,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,2FAA2F,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,EAAE,cAAc,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;IACzD,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAE7E,6EAA6E;IAC7E,4EAA4E;IAC5E,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,aAAa,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACvF,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC;aAC7B;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,oBAAoB,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,QAA6C;IAE7C,OAAO,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,OAAe;IACvD,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,GAAG,QAAQ,QAAQ,EAAE,EAAE,CAAC;IAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAEzE,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACnD,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAChC,QAAQ,CAAC,UAAiD,CAC3D,CAAC;IACF,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAClD,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAEtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,qBAAqB,GAAG,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAChF,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAErE,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACnD,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAChC,QAAQ,CAAC,UAAiD,CAC3D,CAAC;IACF,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAClD,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAEtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,qBAAqB,GAAG,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAChF,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,IAAc;IACtD,MAAM,MAAM,GAAG,IAAA,yBAAgB,GAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAA,wBAAe,GAAE,CAAC;IAEjC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,iBAAiB,EAAE;gBAAE,OAAO;YAChC,+CAA+C;QACjD,CAAC;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,iBAAiB,EAAE;gBAAE,OAAO;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,sCAAsC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,GAAG,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,eAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,sBAAsB,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CACT,oBAAoB,eAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,eAAK,CAAC,KAAK,CAAC,IAAI,qBAAqB,GAAG,CAAC,KAAK,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CACrH,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;SAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,wBAAwB,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,kCAAkC;QAClC,MAAM,YAAY,GAAG;YACnB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,CAAC;iBAC9C;aACF;SACF,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpE,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/commands/preview.js
CHANGED
|
@@ -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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|