youmd 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/__tests__/api.test.d.ts +2 -0
  2. package/dist/__tests__/api.test.d.ts.map +1 -0
  3. package/dist/__tests__/api.test.js +84 -0
  4. package/dist/__tests__/api.test.js.map +1 -0
  5. package/dist/__tests__/compiler.test.d.ts +2 -0
  6. package/dist/__tests__/compiler.test.d.ts.map +1 -0
  7. package/dist/__tests__/compiler.test.js +127 -0
  8. package/dist/__tests__/compiler.test.js.map +1 -0
  9. package/dist/__tests__/config.test.d.ts +2 -0
  10. package/dist/__tests__/config.test.d.ts.map +1 -0
  11. package/dist/__tests__/config.test.js +79 -0
  12. package/dist/__tests__/config.test.js.map +1 -0
  13. package/dist/__tests__/decompile.test.d.ts +2 -0
  14. package/dist/__tests__/decompile.test.d.ts.map +1 -0
  15. package/dist/__tests__/decompile.test.js +102 -0
  16. package/dist/__tests__/decompile.test.js.map +1 -0
  17. package/dist/__tests__/hash.test.d.ts +2 -0
  18. package/dist/__tests__/hash.test.d.ts.map +1 -0
  19. package/dist/__tests__/hash.test.js +44 -0
  20. package/dist/__tests__/hash.test.js.map +1 -0
  21. package/dist/__tests__/integration.test.d.ts +2 -0
  22. package/dist/__tests__/integration.test.d.ts.map +1 -0
  23. package/dist/__tests__/integration.test.js +277 -0
  24. package/dist/__tests__/integration.test.js.map +1 -0
  25. package/dist/__tests__/skill-renderer.test.d.ts +2 -0
  26. package/dist/__tests__/skill-renderer.test.d.ts.map +1 -0
  27. package/dist/__tests__/skill-renderer.test.js +68 -0
  28. package/dist/__tests__/skill-renderer.test.js.map +1 -0
  29. package/dist/commands/add.d.ts.map +1 -1
  30. package/dist/commands/add.js +6 -3
  31. package/dist/commands/add.js.map +1 -1
  32. package/dist/commands/agents.d.ts +2 -0
  33. package/dist/commands/agents.d.ts.map +1 -0
  34. package/dist/commands/agents.js +93 -0
  35. package/dist/commands/agents.js.map +1 -0
  36. package/dist/commands/build.d.ts.map +1 -1
  37. package/dist/commands/build.js +73 -20
  38. package/dist/commands/build.js.map +1 -1
  39. package/dist/commands/chat.d.ts.map +1 -1
  40. package/dist/commands/chat.js +63 -4
  41. package/dist/commands/chat.js.map +1 -1
  42. package/dist/commands/diff.d.ts +1 -1
  43. package/dist/commands/diff.d.ts.map +1 -1
  44. package/dist/commands/diff.js +402 -16
  45. package/dist/commands/diff.js.map +1 -1
  46. package/dist/commands/export.js +1 -1
  47. package/dist/commands/export.js.map +1 -1
  48. package/dist/commands/init.d.ts +1 -0
  49. package/dist/commands/init.d.ts.map +1 -1
  50. package/dist/commands/init.js +131 -23
  51. package/dist/commands/init.js.map +1 -1
  52. package/dist/commands/link.d.ts +1 -0
  53. package/dist/commands/link.d.ts.map +1 -1
  54. package/dist/commands/link.js +76 -12
  55. package/dist/commands/link.js.map +1 -1
  56. package/dist/commands/login.d.ts.map +1 -1
  57. package/dist/commands/login.js +76 -59
  58. package/dist/commands/login.js.map +1 -1
  59. package/dist/commands/logs.d.ts +7 -0
  60. package/dist/commands/logs.d.ts.map +1 -0
  61. package/dist/commands/logs.js +115 -0
  62. package/dist/commands/logs.js.map +1 -0
  63. package/dist/commands/mcp.d.ts +6 -0
  64. package/dist/commands/mcp.d.ts.map +1 -0
  65. package/dist/commands/mcp.js +258 -0
  66. package/dist/commands/mcp.js.map +1 -0
  67. package/dist/commands/preview.d.ts.map +1 -1
  68. package/dist/commands/preview.js +191 -7
  69. package/dist/commands/preview.js.map +1 -1
  70. package/dist/commands/private.d.ts.map +1 -1
  71. package/dist/commands/private.js +248 -0
  72. package/dist/commands/private.js.map +1 -1
  73. package/dist/commands/prompts.d.ts +12 -0
  74. package/dist/commands/prompts.d.ts.map +1 -0
  75. package/dist/commands/prompts.js +245 -0
  76. package/dist/commands/prompts.js.map +1 -0
  77. package/dist/commands/publish.d.ts.map +1 -1
  78. package/dist/commands/publish.js +3 -2
  79. package/dist/commands/publish.js.map +1 -1
  80. package/dist/commands/pull.d.ts.map +1 -1
  81. package/dist/commands/pull.js +42 -133
  82. package/dist/commands/pull.js.map +1 -1
  83. package/dist/commands/push.d.ts.map +1 -1
  84. package/dist/commands/push.js +146 -38
  85. package/dist/commands/push.js.map +1 -1
  86. package/dist/commands/register.d.ts.map +1 -1
  87. package/dist/commands/register.js +39 -83
  88. package/dist/commands/register.js.map +1 -1
  89. package/dist/commands/skill.d.ts.map +1 -1
  90. package/dist/commands/skill.js +95 -19
  91. package/dist/commands/skill.js.map +1 -1
  92. package/dist/commands/status.d.ts.map +1 -1
  93. package/dist/commands/status.js +132 -96
  94. package/dist/commands/status.js.map +1 -1
  95. package/dist/commands/whoami.d.ts.map +1 -1
  96. package/dist/commands/whoami.js +53 -29
  97. package/dist/commands/whoami.js.map +1 -1
  98. package/dist/index.js +177 -5
  99. package/dist/index.js.map +1 -1
  100. package/dist/lib/api.d.ts +93 -7
  101. package/dist/lib/api.d.ts.map +1 -1
  102. package/dist/lib/api.js +143 -38
  103. package/dist/lib/api.js.map +1 -1
  104. package/dist/lib/compiler.d.ts +16 -33
  105. package/dist/lib/compiler.d.ts.map +1 -1
  106. package/dist/lib/compiler.js +499 -84
  107. package/dist/lib/compiler.js.map +1 -1
  108. package/dist/lib/config.d.ts +3 -0
  109. package/dist/lib/config.d.ts.map +1 -1
  110. package/dist/lib/config.js +10 -0
  111. package/dist/lib/config.js.map +1 -1
  112. package/dist/lib/decompile.d.ts +21 -0
  113. package/dist/lib/decompile.d.ts.map +1 -0
  114. package/dist/lib/decompile.js +304 -0
  115. package/dist/lib/decompile.js.map +1 -0
  116. package/dist/lib/onboarding.d.ts +4 -4
  117. package/dist/lib/onboarding.d.ts.map +1 -1
  118. package/dist/lib/onboarding.js +116 -25
  119. package/dist/lib/onboarding.js.map +1 -1
  120. package/dist/lib/skill-catalog.d.ts.map +1 -1
  121. package/dist/lib/skill-catalog.js +57 -8
  122. package/dist/lib/skill-catalog.js.map +1 -1
  123. package/dist/lib/skill-renderer.d.ts.map +1 -1
  124. package/dist/lib/skill-renderer.js +18 -0
  125. package/dist/lib/skill-renderer.js.map +1 -1
  126. package/dist/lib/skills.d.ts +8 -3
  127. package/dist/lib/skills.d.ts.map +1 -1
  128. package/dist/lib/skills.js +281 -82
  129. package/dist/lib/skills.js.map +1 -1
  130. package/dist/lib/vault.d.ts +40 -0
  131. package/dist/lib/vault.d.ts.map +1 -0
  132. package/dist/lib/vault.js +187 -0
  133. package/dist/lib/vault.js.map +1 -0
  134. package/dist/mcp/server.d.ts +21 -0
  135. package/dist/mcp/server.d.ts.map +1 -0
  136. package/dist/mcp/server.js +1283 -0
  137. package/dist/mcp/server.js.map +1 -0
  138. package/examples/houston/directives/agent.md +13 -0
  139. package/examples/houston/preferences/agent.md +14 -0
  140. package/examples/houston/profile/about.md +15 -0
  141. package/examples/houston/profile/links.md +10 -0
  142. package/examples/houston/profile/projects.md +37 -0
  143. package/examples/houston/profile/values.md +9 -0
  144. package/examples/houston/voice/voice.md +13 -0
  145. package/examples/jordan/directives/agent.md +13 -0
  146. package/examples/jordan/preferences/agent.md +16 -0
  147. package/examples/jordan/profile/about.md +15 -0
  148. package/examples/jordan/profile/links.md +10 -0
  149. package/examples/jordan/profile/projects.md +29 -0
  150. package/examples/jordan/profile/values.md +9 -0
  151. package/examples/jordan/voice/voice.md +12 -0
  152. package/examples/priya/directives/agent.md +13 -0
  153. package/examples/priya/preferences/agent.md +15 -0
  154. package/examples/priya/profile/about.md +15 -0
  155. package/examples/priya/profile/links.md +9 -0
  156. package/examples/priya/profile/projects.md +28 -0
  157. package/examples/priya/profile/values.md +9 -0
  158. package/examples/priya/voice/voice.md +12 -0
  159. package/package.json +11 -5
  160. package/skills/claude-md-generator.md +25 -0
  161. package/skills/meta-improve.md +27 -0
  162. package/skills/proactive-context-fill.md +52 -0
  163. package/skills/project-context-init.md +26 -0
  164. package/skills/voice-sync.md +48 -0
  165. package/skills/you-logs.md +71 -0
@@ -100,33 +100,18 @@ async function registerCommand() {
100
100
  console.log("");
101
101
  return;
102
102
  }
103
- // 3. Password
104
- const password = await promptPassword(ACCENT(" choose a password: "));
105
- if (!password) {
106
- console.log(chalk_1.default.yellow(" no password provided -- aborting"));
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
- // 5. Register
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.registerWithEmail)(email, password, cleanUsername, cleanUsername);
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
- const { username: registeredUsername, apiKey } = res.data;
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 = "https://kindly-cassowary-600.convex.site";
153
+ config.email = user.email;
154
+ config.apiUrl = (0, config_1.getConvexSiteUrl)();
146
155
  (0, config_1.writeGlobalConfig)(config);
147
- spinner.stop();
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
- console.log(" key: " + apiKey.slice(0, 8) + "..." + apiKey.slice(-4));
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":"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"}
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;AAopCH,wBAAsB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+HxF"}
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"}
@@ -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
- function listSkills() {
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("\u2022");
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
- console.log(` ${status} ${chalk_1.default.cyan(skill.name.padEnd(maxName + 2))}` +
127
- `${DIM(skill.description)}`);
128
- console.log(` ${DIM("v" + skill.version)} ${scope}${fields}`);
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
- for (const line of result.content.split("\n").slice(0, 40)) {
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
- const totalLines = result.content.split("\n").length;
361
- if (totalLines > 40) {
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
- async function initProjectCmd() {
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
- console.log(DIM(" scaffolding identity-aware project structure...\n"));
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(" every agent that touches this repo now knows who you are."));
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.slice(0, 50)}${val.length > 50 ? "..." : ""}`) : DIM(" (empty)");
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.md + project-context/ + link")}`);
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")}`);