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.
- 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 +73 -20
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +63 -4
- 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 +131 -23
- 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 +76 -12
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +76 -59
- 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 +3 -2
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +42 -133
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +146 -38
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +39 -83
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +95 -19
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +132 -96
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +53 -29
- package/dist/commands/whoami.js.map +1 -1
- package/dist/index.js +177 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +93 -7
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +143 -38
- package/dist/lib/api.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 +3 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +10 -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/onboarding.d.ts +4 -4
- package/dist/lib/onboarding.d.ts.map +1 -1
- package/dist/lib/onboarding.js +116 -25
- package/dist/lib/onboarding.js.map +1 -1
- package/dist/lib/skill-catalog.d.ts.map +1 -1
- package/dist/lib/skill-catalog.js +57 -8
- package/dist/lib/skill-catalog.js.map +1 -1
- package/dist/lib/skill-renderer.d.ts.map +1 -1
- package/dist/lib/skill-renderer.js +18 -0
- package/dist/lib/skill-renderer.js.map +1 -1
- package/dist/lib/skills.d.ts +8 -3
- package/dist/lib/skills.d.ts.map +1 -1
- package/dist/lib/skills.js +281 -82
- package/dist/lib/skills.js.map +1 -1
- 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 +11 -5
- package/skills/claude-md-generator.md +25 -0
- package/skills/meta-improve.md +27 -0
- package/skills/proactive-context-fill.md +52 -0
- package/skills/project-context-init.md +26 -0
- package/skills/voice-sync.md +48 -0
- package/skills/you-logs.md +71 -0
|
@@ -100,33 +100,18 @@ async function registerCommand() {
|
|
|
100
100
|
console.log("");
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
|
-
// 3.
|
|
104
|
-
const
|
|
105
|
-
if (!
|
|
106
|
-
console.log(chalk_1.default.yellow(" no
|
|
107
|
-
console.log("");
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
if (password.length < 8) {
|
|
111
|
-
console.log("");
|
|
112
|
-
console.log(chalk_1.default.yellow(" password must be at least 8 characters"));
|
|
113
|
-
console.log("");
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
// 4. Confirm password
|
|
117
|
-
const confirm = await promptPassword(ACCENT(" confirm password: "));
|
|
118
|
-
if (confirm !== password) {
|
|
119
|
-
console.log("");
|
|
120
|
-
console.log(chalk_1.default.yellow(" passwords do not match -- aborting"));
|
|
103
|
+
// 3. Display name
|
|
104
|
+
const displayName = await promptInput(ACCENT(" what should we call you? "));
|
|
105
|
+
if (!displayName) {
|
|
106
|
+
console.log(chalk_1.default.yellow(" no name provided -- aborting"));
|
|
121
107
|
console.log("");
|
|
122
108
|
return;
|
|
123
109
|
}
|
|
124
110
|
console.log("");
|
|
125
|
-
|
|
126
|
-
const spinner = new render_1.BrailleSpinner("creating account");
|
|
111
|
+
const spinner = new render_1.BrailleSpinner("sending verification code");
|
|
127
112
|
spinner.start();
|
|
128
113
|
try {
|
|
129
|
-
const res = await (0, api_1.
|
|
114
|
+
const res = await (0, api_1.startEmailRegister)(email, cleanUsername, displayName);
|
|
130
115
|
if (!res.ok) {
|
|
131
116
|
spinner.fail();
|
|
132
117
|
const errData = res.data;
|
|
@@ -136,24 +121,50 @@ async function registerCommand() {
|
|
|
136
121
|
console.log("");
|
|
137
122
|
return;
|
|
138
123
|
}
|
|
139
|
-
|
|
124
|
+
spinner.stop();
|
|
125
|
+
console.log("");
|
|
126
|
+
console.log(" verification code sent to " + email);
|
|
127
|
+
if (res.data.devCode) {
|
|
128
|
+
console.log(" " + chalk_1.default.dim("dev code: ") + res.data.devCode);
|
|
129
|
+
}
|
|
130
|
+
console.log("");
|
|
131
|
+
const code = await promptInput(ACCENT(" code: "));
|
|
132
|
+
if (!code) {
|
|
133
|
+
console.log(chalk_1.default.yellow(" no verification code provided -- aborting"));
|
|
134
|
+
console.log("");
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const verifySpinner = new render_1.BrailleSpinner("verifying code");
|
|
138
|
+
verifySpinner.start();
|
|
139
|
+
const verifyRes = await (0, api_1.verifyEmailCode)(email, code);
|
|
140
|
+
if (!verifyRes.ok) {
|
|
141
|
+
verifySpinner.fail();
|
|
142
|
+
const errData = verifyRes.data;
|
|
143
|
+
console.log("");
|
|
144
|
+
console.log(" " + chalk_1.default.yellow(errData?.error || `server returned ${verifyRes.status}`));
|
|
145
|
+
console.log("");
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const { username: registeredUsername, apiKey, user } = verifyRes.data;
|
|
140
149
|
// Save credentials
|
|
141
150
|
const config = (0, config_1.readGlobalConfig)();
|
|
142
|
-
config.token = apiKey;
|
|
151
|
+
config.token = apiKey || undefined;
|
|
143
152
|
config.username = registeredUsername;
|
|
144
|
-
config.email = email;
|
|
145
|
-
config.apiUrl =
|
|
153
|
+
config.email = user.email;
|
|
154
|
+
config.apiUrl = (0, config_1.getConvexSiteUrl)();
|
|
146
155
|
(0, config_1.writeGlobalConfig)(config);
|
|
147
|
-
|
|
156
|
+
verifySpinner.stop();
|
|
148
157
|
console.log("");
|
|
149
158
|
console.log(" " + chalk_1.default.green("account created") +
|
|
150
159
|
" -- you're logged in as " +
|
|
151
160
|
ACCENT("@" + registeredUsername));
|
|
152
161
|
console.log("");
|
|
153
162
|
console.log(" user: " + registeredUsername);
|
|
154
|
-
console.log(" email: " + email);
|
|
163
|
+
console.log(" email: " + user.email);
|
|
155
164
|
console.log(" plan: free");
|
|
156
|
-
|
|
165
|
+
if (apiKey) {
|
|
166
|
+
console.log(" key: " + apiKey.slice(0, 8) + "..." + apiKey.slice(-4));
|
|
167
|
+
}
|
|
157
168
|
console.log("");
|
|
158
169
|
console.log(" run " + ACCENT("youmd init") + " to build your identity context");
|
|
159
170
|
console.log(" or " + ACCENT("youmd chat") + " to talk to the You agent");
|
|
@@ -182,59 +193,4 @@ function promptInput(prompt) {
|
|
|
182
193
|
});
|
|
183
194
|
});
|
|
184
195
|
}
|
|
185
|
-
function promptPassword(prompt) {
|
|
186
|
-
return new Promise((resolve) => {
|
|
187
|
-
// Write the prompt manually
|
|
188
|
-
process.stdout.write(prompt);
|
|
189
|
-
const rl = readline.createInterface({
|
|
190
|
-
input: process.stdin,
|
|
191
|
-
terminal: false,
|
|
192
|
-
});
|
|
193
|
-
// If stdin is a TTY, enable raw mode for character-by-character masking
|
|
194
|
-
if (process.stdin.isTTY) {
|
|
195
|
-
process.stdin.setRawMode(true);
|
|
196
|
-
}
|
|
197
|
-
process.stdin.resume();
|
|
198
|
-
let password = "";
|
|
199
|
-
const onData = (ch) => {
|
|
200
|
-
const char = ch.toString("utf8");
|
|
201
|
-
// Enter
|
|
202
|
-
if (char === "\n" || char === "\r" || char === "\u0004") {
|
|
203
|
-
if (process.stdin.isTTY) {
|
|
204
|
-
process.stdin.setRawMode(false);
|
|
205
|
-
}
|
|
206
|
-
process.stdin.removeListener("data", onData);
|
|
207
|
-
process.stdin.pause();
|
|
208
|
-
rl.close();
|
|
209
|
-
process.stdout.write("\n");
|
|
210
|
-
resolve(password);
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
// Ctrl+C
|
|
214
|
-
if (char === "\u0003") {
|
|
215
|
-
if (process.stdin.isTTY) {
|
|
216
|
-
process.stdin.setRawMode(false);
|
|
217
|
-
}
|
|
218
|
-
process.stdin.removeListener("data", onData);
|
|
219
|
-
process.stdin.pause();
|
|
220
|
-
rl.close();
|
|
221
|
-
process.stdout.write("\n");
|
|
222
|
-
resolve("");
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
// Backspace
|
|
226
|
-
if (char === "\u007F" || char === "\b") {
|
|
227
|
-
if (password.length > 0) {
|
|
228
|
-
password = password.slice(0, -1);
|
|
229
|
-
process.stdout.write("\b \b");
|
|
230
|
-
}
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
// Regular character
|
|
234
|
-
password += char;
|
|
235
|
-
process.stdout.write("*");
|
|
236
|
-
};
|
|
237
|
-
process.stdin.on("data", onData);
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
196
|
//# sourceMappingURL=register.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwuCH,wBAAsB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+HxF"}
|
package/dist/commands/skill.js
CHANGED
|
@@ -98,8 +98,17 @@ function randomSpinner(category) {
|
|
|
98
98
|
const labels = SKILL_SPINNERS[category];
|
|
99
99
|
return labels[Math.floor(Math.random() * labels.length)];
|
|
100
100
|
}
|
|
101
|
+
/** Truncate at word boundary instead of mid-word */
|
|
102
|
+
function truncateAtWord(text, max) {
|
|
103
|
+
if (text.length <= max)
|
|
104
|
+
return text;
|
|
105
|
+
const truncated = text.slice(0, max);
|
|
106
|
+
const lastSpace = truncated.lastIndexOf(" ");
|
|
107
|
+
return (lastSpace > max * 0.5 ? truncated.slice(0, lastSpace) : truncated) + "...";
|
|
108
|
+
}
|
|
101
109
|
// ─── Subcommands ──────────────────────────────────────────────────────
|
|
102
|
-
|
|
110
|
+
const RECOMMENDED_SKILLS = new Set(["claude-md-generator", "voice-sync"]);
|
|
111
|
+
async function listSkills() {
|
|
103
112
|
const catalog = (0, skill_catalog_1.readSkillCatalog)();
|
|
104
113
|
console.log("");
|
|
105
114
|
console.log(" " + chalk_1.default.bold("youmd skills") + DIM(` (${catalog.skills.length} in catalog)`));
|
|
@@ -110,11 +119,27 @@ function listSkills() {
|
|
|
110
119
|
console.log("");
|
|
111
120
|
return;
|
|
112
121
|
}
|
|
122
|
+
// Best-effort: fetch registry metadata for download counts.
|
|
123
|
+
// Network failures are silent — list still works offline.
|
|
124
|
+
const downloads = {};
|
|
125
|
+
try {
|
|
126
|
+
const reg = await (0, api_1.browseSkills)();
|
|
127
|
+
if (reg.ok && reg.data?.skills) {
|
|
128
|
+
for (const s of reg.data.skills) {
|
|
129
|
+
if (typeof s.downloads === "number") {
|
|
130
|
+
downloads[s.name] = s.downloads;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
/* offline is fine */
|
|
137
|
+
}
|
|
113
138
|
const maxName = Math.max(...catalog.skills.map((s) => s.name.length));
|
|
114
139
|
for (const skill of catalog.skills) {
|
|
115
140
|
const status = skill.installed
|
|
116
|
-
? chalk_1.default.green("\u2713")
|
|
117
|
-
: DIM("\
|
|
141
|
+
? chalk_1.default.green("\u2713 installed")
|
|
142
|
+
: DIM("\u25CB available");
|
|
118
143
|
const scope = skill.scope === "shared"
|
|
119
144
|
? DIM("shared")
|
|
120
145
|
: skill.scope === "project"
|
|
@@ -123,13 +148,25 @@ function listSkills() {
|
|
|
123
148
|
const fields = skill.identity_fields.length > 0
|
|
124
149
|
? DIM(` [${skill.identity_fields.join(", ")}]`)
|
|
125
150
|
: "";
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
151
|
+
const recommended = RECOMMENDED_SKILLS.has(skill.name)
|
|
152
|
+
? " " + ACCENT("recommended")
|
|
153
|
+
: "";
|
|
154
|
+
const dl = downloads[skill.name];
|
|
155
|
+
const dlLabel = typeof dl === "number"
|
|
156
|
+
? DIM(` \u2193 ${dl.toLocaleString()}`)
|
|
157
|
+
: "";
|
|
158
|
+
console.log(` ${status} ${chalk_1.default.cyan(skill.name.padEnd(maxName + 2))}` +
|
|
159
|
+
`${DIM(skill.description)}${recommended}`);
|
|
160
|
+
console.log(` ${DIM("v" + skill.version)} ${scope}${dlLabel}${fields}`);
|
|
129
161
|
}
|
|
130
162
|
console.log("");
|
|
131
163
|
const installed = catalog.skills.filter((s) => s.installed).length;
|
|
132
164
|
console.log(DIM(` ${installed}/${catalog.skills.length} installed`));
|
|
165
|
+
if (installed === 0) {
|
|
166
|
+
console.log("");
|
|
167
|
+
console.log(DIM(" get started: ") +
|
|
168
|
+
chalk_1.default.cyan("youmd skill install claude-md-generator"));
|
|
169
|
+
}
|
|
133
170
|
console.log("");
|
|
134
171
|
}
|
|
135
172
|
async function installSkillCmd(args) {
|
|
@@ -350,16 +387,18 @@ async function useSkillCmd(args) {
|
|
|
350
387
|
console.log(DIM(` ${total}/${total} identity fields resolved.`));
|
|
351
388
|
}
|
|
352
389
|
}
|
|
353
|
-
// Show rendered output
|
|
390
|
+
// Show rendered output with rich terminal formatting
|
|
354
391
|
if (result.content) {
|
|
355
392
|
console.log("");
|
|
356
393
|
console.log(DIM(" " + "\u2500".repeat(50)));
|
|
357
|
-
|
|
394
|
+
const rendered = (0, render_1.renderRichResponse)(result.content);
|
|
395
|
+
// Limit output to ~40 visual lines
|
|
396
|
+
const renderedLines = rendered.split("\n");
|
|
397
|
+
for (const line of renderedLines.slice(0, 40)) {
|
|
358
398
|
console.log(` ${line}`);
|
|
359
399
|
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
console.log(DIM(` ... ${totalLines - 40} more lines`));
|
|
400
|
+
if (renderedLines.length > 40) {
|
|
401
|
+
console.log(DIM(` ... ${renderedLines.length - 40} more lines`));
|
|
363
402
|
}
|
|
364
403
|
console.log(DIM(" " + "\u2500".repeat(50)));
|
|
365
404
|
}
|
|
@@ -571,14 +610,51 @@ async function linkSkillsCmd(args) {
|
|
|
571
610
|
}
|
|
572
611
|
console.log("");
|
|
573
612
|
}
|
|
574
|
-
|
|
613
|
+
function parseInitProjectMode(args) {
|
|
614
|
+
const modeFlag = args.find((arg) => arg.startsWith("--mode="));
|
|
615
|
+
const modeIndex = args.indexOf("--mode");
|
|
616
|
+
const explicitMode = modeFlag?.slice("--mode=".length) ||
|
|
617
|
+
(modeIndex >= 0 && modeIndex + 1 < args.length ? args[modeIndex + 1] : undefined);
|
|
618
|
+
const value = (explicitMode || "auto").toLowerCase();
|
|
619
|
+
if (value === "auto" || value === "additive" || value === "zero-touch" || value === "scaffold") {
|
|
620
|
+
return value;
|
|
621
|
+
}
|
|
622
|
+
return "auto";
|
|
623
|
+
}
|
|
624
|
+
async function initProjectCmd(args = []) {
|
|
575
625
|
console.log("");
|
|
576
626
|
console.log(" " + chalk_1.default.bold("youmd skill init-project"));
|
|
577
|
-
|
|
627
|
+
const mode = parseInitProjectMode(args);
|
|
628
|
+
// Detect existing .youmd-project
|
|
629
|
+
const youmdProjectPath = path.join(process.cwd(), ".youmd-project");
|
|
630
|
+
if (fs.existsSync(youmdProjectPath)) {
|
|
631
|
+
console.log(DIM(" .youmd-project already exists -- re-running will update...\n"));
|
|
632
|
+
}
|
|
633
|
+
else {
|
|
634
|
+
console.log(DIM(` scaffolding identity-aware project structure (${mode} mode)...\n`));
|
|
635
|
+
}
|
|
636
|
+
// Auto-install all catalog skills first (not just 2)
|
|
637
|
+
const catalog = (0, skill_catalog_1.readSkillCatalog)();
|
|
638
|
+
const toInstall = catalog.skills.filter((s) => !s.installed);
|
|
639
|
+
if (toInstall.length > 0) {
|
|
640
|
+
const installSpinner = new render_1.BrailleSpinner(randomSpinner("install"));
|
|
641
|
+
installSpinner.start();
|
|
642
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
643
|
+
let installed = 0;
|
|
644
|
+
for (const entry of toInstall) {
|
|
645
|
+
let result = (0, skills_1.installSkill)(entry.name);
|
|
646
|
+
if (!result.ok && (entry.source.startsWith("github:") || entry.source.startsWith("https://"))) {
|
|
647
|
+
result = await (0, skills_1.installSkillAsync)(entry.name);
|
|
648
|
+
}
|
|
649
|
+
if (result.ok)
|
|
650
|
+
installed++;
|
|
651
|
+
}
|
|
652
|
+
installSpinner.stop(`${installed} skills installed`);
|
|
653
|
+
}
|
|
578
654
|
const spinner = new render_1.BrailleSpinner(randomSpinner("init"));
|
|
579
655
|
spinner.start();
|
|
580
656
|
await new Promise((r) => setTimeout(r, 500));
|
|
581
|
-
const result = (0, skills_1.initProject)();
|
|
657
|
+
const result = (0, skills_1.initProject)({ mode });
|
|
582
658
|
spinner.stop();
|
|
583
659
|
console.log("");
|
|
584
660
|
for (const step of result.steps) {
|
|
@@ -589,7 +665,7 @@ async function initProjectCmd() {
|
|
|
589
665
|
console.log("");
|
|
590
666
|
if (result.ok) {
|
|
591
667
|
console.log(" " + chalk_1.default.green("project initialized with your identity."));
|
|
592
|
-
console.log(DIM(
|
|
668
|
+
console.log(DIM(` mode: ${result.mode} -- every agent touching this repo now has the right entrypoints.`));
|
|
593
669
|
}
|
|
594
670
|
else {
|
|
595
671
|
console.log(ACCENT(" some steps failed. check above for details."));
|
|
@@ -956,7 +1032,7 @@ function infoCmd(args) {
|
|
|
956
1032
|
for (const field of entry.identity_fields) {
|
|
957
1033
|
const val = (0, skill_renderer_1.resolveVariable)(field, identity);
|
|
958
1034
|
const status = val ? chalk_1.default.green("\u2713") : chalk_1.default.yellow("\u2022");
|
|
959
|
-
const preview = val ? DIM(` ${val
|
|
1035
|
+
const preview = val ? DIM(` ${truncateAtWord(val, 50)}`) : DIM(" (empty)");
|
|
960
1036
|
console.log(` ${status} ${field}${preview}`);
|
|
961
1037
|
}
|
|
962
1038
|
}
|
|
@@ -1029,7 +1105,7 @@ async function skillCommand(subcommand, ...args) {
|
|
|
1029
1105
|
switch (sub) {
|
|
1030
1106
|
case "list":
|
|
1031
1107
|
case "ls":
|
|
1032
|
-
listSkills();
|
|
1108
|
+
await listSkills();
|
|
1033
1109
|
break;
|
|
1034
1110
|
case "install":
|
|
1035
1111
|
await installSkillCmd(args);
|
|
@@ -1060,7 +1136,7 @@ async function skillCommand(subcommand, ...args) {
|
|
|
1060
1136
|
break;
|
|
1061
1137
|
case "init-project":
|
|
1062
1138
|
case "init":
|
|
1063
|
-
await initProjectCmd();
|
|
1139
|
+
await initProjectCmd(args);
|
|
1064
1140
|
break;
|
|
1065
1141
|
case "improve":
|
|
1066
1142
|
improveCmd();
|
|
@@ -1130,7 +1206,7 @@ async function skillCommand(subcommand, ...args) {
|
|
|
1130
1206
|
console.log(` ${chalk_1.default.cyan("add <name> <source>".padEnd(28))} ${DIM("register a new skill in catalog")}`);
|
|
1131
1207
|
console.log(` ${chalk_1.default.cyan("push <name>".padEnd(28))} ${DIM("push local changes back to source")}`);
|
|
1132
1208
|
console.log(` ${chalk_1.default.cyan("link <agent>".padEnd(28))} ${DIM("link to claude | cursor | codex")}`);
|
|
1133
|
-
console.log(` ${chalk_1.default.cyan("init-project".padEnd(28))} ${DIM("CLAUDE
|
|
1209
|
+
console.log(` ${chalk_1.default.cyan("init-project [--mode auto|additive|zero-touch|scaffold]".padEnd(28))} ${DIM("bootstrap AGENTS/CLAUDE + project-context/ + .you/ + links")}`);
|
|
1134
1210
|
console.log(` ${chalk_1.default.cyan("improve".padEnd(28))} ${DIM("review metrics, find gaps, propose changes")}`);
|
|
1135
1211
|
console.log(` ${chalk_1.default.cyan("metrics".padEnd(28))} ${DIM("usage stats and effectiveness scores")}`);
|
|
1136
1212
|
console.log(` ${chalk_1.default.cyan("search <query>".padEnd(28))} ${DIM("search skills by name or description")}`);
|