youmd 0.6.19 → 0.6.26

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 (222) hide show
  1. package/dist/commands/build.d.ts.map +1 -1
  2. package/dist/commands/build.js +0 -1
  3. package/dist/commands/build.js.map +1 -1
  4. package/dist/commands/chat.d.ts.map +1 -1
  5. package/dist/commands/chat.js +604 -199
  6. package/dist/commands/chat.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +21 -1
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/keys.d.ts.map +1 -1
  11. package/dist/commands/keys.js +3 -3
  12. package/dist/commands/keys.js.map +1 -1
  13. package/dist/commands/link.d.ts.map +1 -1
  14. package/dist/commands/link.js +3 -3
  15. package/dist/commands/link.js.map +1 -1
  16. package/dist/commands/login.d.ts +29 -0
  17. package/dist/commands/login.d.ts.map +1 -1
  18. package/dist/commands/login.js +257 -128
  19. package/dist/commands/login.js.map +1 -1
  20. package/dist/commands/logs.js +0 -1
  21. package/dist/commands/logs.js.map +1 -1
  22. package/dist/commands/mcp.d.ts +14 -0
  23. package/dist/commands/mcp.d.ts.map +1 -1
  24. package/dist/commands/mcp.js +284 -28
  25. package/dist/commands/mcp.js.map +1 -1
  26. package/dist/commands/private.d.ts.map +1 -1
  27. package/dist/commands/private.js +6 -5
  28. package/dist/commands/private.js.map +1 -1
  29. package/dist/commands/project.d.ts.map +1 -1
  30. package/dist/commands/project.js +9 -5
  31. package/dist/commands/project.js.map +1 -1
  32. package/dist/commands/publish.d.ts.map +1 -1
  33. package/dist/commands/publish.js +0 -1
  34. package/dist/commands/publish.js.map +1 -1
  35. package/dist/commands/pull.d.ts +24 -1
  36. package/dist/commands/pull.d.ts.map +1 -1
  37. package/dist/commands/pull.js +114 -14
  38. package/dist/commands/pull.js.map +1 -1
  39. package/dist/commands/push.d.ts +1 -0
  40. package/dist/commands/push.d.ts.map +1 -1
  41. package/dist/commands/push.js +33 -13
  42. package/dist/commands/push.js.map +1 -1
  43. package/dist/commands/register.d.ts +6 -0
  44. package/dist/commands/register.d.ts.map +1 -1
  45. package/dist/commands/register.js +179 -79
  46. package/dist/commands/register.js.map +1 -1
  47. package/dist/commands/skill.d.ts.map +1 -1
  48. package/dist/commands/skill.js +123 -52
  49. package/dist/commands/skill.js.map +1 -1
  50. package/dist/commands/stack.d.ts +16 -0
  51. package/dist/commands/stack.d.ts.map +1 -0
  52. package/dist/commands/stack.js +670 -0
  53. package/dist/commands/stack.js.map +1 -0
  54. package/dist/commands/status.d.ts.map +1 -1
  55. package/dist/commands/status.js +25 -5
  56. package/dist/commands/status.js.map +1 -1
  57. package/dist/commands/sync.d.ts +23 -0
  58. package/dist/commands/sync.d.ts.map +1 -1
  59. package/dist/commands/sync.js +193 -12
  60. package/dist/commands/sync.js.map +1 -1
  61. package/dist/commands/whoami.d.ts.map +1 -1
  62. package/dist/commands/whoami.js +21 -16
  63. package/dist/commands/whoami.js.map +1 -1
  64. package/dist/create.js +0 -0
  65. package/dist/index.js +128 -7
  66. package/dist/index.js.map +1 -1
  67. package/dist/lib/api.d.ts +94 -5
  68. package/dist/lib/api.d.ts.map +1 -1
  69. package/dist/lib/api.js +122 -5
  70. package/dist/lib/api.js.map +1 -1
  71. package/dist/lib/ascii.d.ts +5 -0
  72. package/dist/lib/ascii.d.ts.map +1 -1
  73. package/dist/lib/ascii.js +21 -30
  74. package/dist/lib/ascii.js.map +1 -1
  75. package/dist/lib/canonical-json.d.ts +8 -0
  76. package/dist/lib/canonical-json.d.ts.map +1 -0
  77. package/dist/lib/canonical-json.js +29 -0
  78. package/dist/lib/canonical-json.js.map +1 -0
  79. package/dist/lib/capability-router.d.ts +58 -0
  80. package/dist/lib/capability-router.d.ts.map +1 -0
  81. package/dist/lib/capability-router.js +54 -0
  82. package/dist/lib/capability-router.js.map +1 -0
  83. package/dist/lib/compiler.d.ts +32 -0
  84. package/dist/lib/compiler.d.ts.map +1 -1
  85. package/dist/lib/compiler.js +150 -0
  86. package/dist/lib/compiler.js.map +1 -1
  87. package/dist/lib/config.d.ts +71 -35
  88. package/dist/lib/config.d.ts.map +1 -1
  89. package/dist/lib/config.js +334 -124
  90. package/dist/lib/config.js.map +1 -1
  91. package/dist/lib/decompile.d.ts +6 -1
  92. package/dist/lib/decompile.d.ts.map +1 -1
  93. package/dist/lib/decompile.js +120 -11
  94. package/dist/lib/decompile.js.map +1 -1
  95. package/dist/lib/first-run.d.ts +14 -0
  96. package/dist/lib/first-run.d.ts.map +1 -0
  97. package/dist/lib/first-run.js +97 -0
  98. package/dist/lib/first-run.js.map +1 -0
  99. package/dist/lib/hash.d.ts.map +1 -1
  100. package/dist/lib/hash.js +2 -19
  101. package/dist/lib/hash.js.map +1 -1
  102. package/dist/lib/heartbeat.d.ts +38 -0
  103. package/dist/lib/heartbeat.d.ts.map +1 -0
  104. package/dist/lib/heartbeat.js +70 -0
  105. package/dist/lib/heartbeat.js.map +1 -0
  106. package/dist/lib/host-link.d.ts +123 -0
  107. package/dist/lib/host-link.d.ts.map +1 -0
  108. package/dist/lib/host-link.js +350 -0
  109. package/dist/lib/host-link.js.map +1 -0
  110. package/dist/lib/merge.d.ts +50 -0
  111. package/dist/lib/merge.d.ts.map +1 -0
  112. package/dist/lib/merge.js +167 -0
  113. package/dist/lib/merge.js.map +1 -0
  114. package/dist/lib/onboarding.d.ts +17 -0
  115. package/dist/lib/onboarding.d.ts.map +1 -1
  116. package/dist/lib/onboarding.js +225 -208
  117. package/dist/lib/onboarding.js.map +1 -1
  118. package/dist/lib/project.d.ts +5 -0
  119. package/dist/lib/project.d.ts.map +1 -1
  120. package/dist/lib/project.js +8 -0
  121. package/dist/lib/project.js.map +1 -1
  122. package/dist/lib/projectContext.d.ts +201 -0
  123. package/dist/lib/projectContext.d.ts.map +1 -0
  124. package/dist/lib/projectContext.js +597 -0
  125. package/dist/lib/projectContext.js.map +1 -0
  126. package/dist/lib/render.d.ts +38 -1
  127. package/dist/lib/render.d.ts.map +1 -1
  128. package/dist/lib/render.js +83 -18
  129. package/dist/lib/render.js.map +1 -1
  130. package/dist/lib/skill-catalog.d.ts.map +1 -1
  131. package/dist/lib/skill-catalog.js +22 -2
  132. package/dist/lib/skill-catalog.js.map +1 -1
  133. package/dist/lib/skills.d.ts +20 -5
  134. package/dist/lib/skills.d.ts.map +1 -1
  135. package/dist/lib/skills.js +116 -58
  136. package/dist/lib/skills.js.map +1 -1
  137. package/dist/lib/stackEval.d.ts +87 -0
  138. package/dist/lib/stackEval.d.ts.map +1 -0
  139. package/dist/lib/stackEval.js +233 -0
  140. package/dist/lib/stackEval.js.map +1 -0
  141. package/dist/lib/stackImprove.d.ts +49 -0
  142. package/dist/lib/stackImprove.d.ts.map +1 -0
  143. package/dist/lib/stackImprove.js +313 -0
  144. package/dist/lib/stackImprove.js.map +1 -0
  145. package/dist/lib/stackInstall.d.ts +59 -0
  146. package/dist/lib/stackInstall.d.ts.map +1 -0
  147. package/dist/lib/stackInstall.js +162 -0
  148. package/dist/lib/stackInstall.js.map +1 -0
  149. package/dist/lib/stackSafety.d.ts +126 -0
  150. package/dist/lib/stackSafety.d.ts.map +1 -0
  151. package/dist/lib/stackSafety.js +486 -0
  152. package/dist/lib/stackSafety.js.map +1 -0
  153. package/dist/lib/stackUpdate.d.ts +44 -0
  154. package/dist/lib/stackUpdate.d.ts.map +1 -0
  155. package/dist/lib/stackUpdate.js +256 -0
  156. package/dist/lib/stackUpdate.js.map +1 -0
  157. package/dist/lib/stream.d.ts +116 -0
  158. package/dist/lib/stream.d.ts.map +1 -0
  159. package/dist/lib/stream.js +368 -0
  160. package/dist/lib/stream.js.map +1 -0
  161. package/dist/lib/youstack.d.ts +219 -0
  162. package/dist/lib/youstack.d.ts.map +1 -0
  163. package/dist/lib/youstack.js +1049 -0
  164. package/dist/lib/youstack.js.map +1 -0
  165. package/dist/mcp/registry.d.ts +133 -0
  166. package/dist/mcp/registry.d.ts.map +1 -0
  167. package/dist/mcp/registry.js +833 -0
  168. package/dist/mcp/registry.js.map +1 -0
  169. package/dist/mcp/server.d.ts +106 -5
  170. package/dist/mcp/server.d.ts.map +1 -1
  171. package/dist/mcp/server.js +851 -498
  172. package/dist/mcp/server.js.map +1 -1
  173. package/dist/postinstall.js +11 -2
  174. package/dist/postinstall.js.map +1 -1
  175. package/dist/you.d.ts +1 -0
  176. package/dist/you.js +41 -5
  177. package/dist/you.js.map +1 -1
  178. package/examples/youstack-bamfstack-public/docs/quickstart.md +34 -0
  179. package/examples/youstack-bamfstack-public/prompts/creator-draft-starter.md +15 -0
  180. package/examples/youstack-bamfstack-public/skills/bamfstack-start/SKILL.md +36 -0
  181. package/examples/youstack-bamfstack-public/tests/smoke.md +19 -0
  182. package/examples/youstack-bamfstack-public/workflows/creator-growth-workflow.md +22 -0
  183. package/examples/youstack-bamfstack-public/youstack.json +172 -0
  184. package/examples/youstack-personal/docs/quickstart.md +10 -0
  185. package/examples/youstack-personal/skills/youstack-start/SKILL.md +9 -0
  186. package/examples/youstack-personal/tests/smoke.md +9 -0
  187. package/examples/youstack-personal/workflows/startup.md +7 -0
  188. package/examples/youstack-personal/youstack.json +123 -0
  189. package/package.json +3 -3
  190. package/skills/claude-md-generator.md +1 -1
  191. package/skills/meta-improve.md +8 -3
  192. package/skills/proactive-context-fill.md +1 -1
  193. package/skills/youstack-maintainer.md +128 -0
  194. package/skills/youstack-start.md +78 -0
  195. package/dist/__tests__/api.test.d.ts +0 -2
  196. package/dist/__tests__/api.test.d.ts.map +0 -1
  197. package/dist/__tests__/api.test.js +0 -87
  198. package/dist/__tests__/api.test.js.map +0 -1
  199. package/dist/__tests__/compiler.test.d.ts +0 -2
  200. package/dist/__tests__/compiler.test.d.ts.map +0 -1
  201. package/dist/__tests__/compiler.test.js +0 -127
  202. package/dist/__tests__/compiler.test.js.map +0 -1
  203. package/dist/__tests__/config.test.d.ts +0 -2
  204. package/dist/__tests__/config.test.d.ts.map +0 -1
  205. package/dist/__tests__/config.test.js +0 -79
  206. package/dist/__tests__/config.test.js.map +0 -1
  207. package/dist/__tests__/decompile.test.d.ts +0 -2
  208. package/dist/__tests__/decompile.test.d.ts.map +0 -1
  209. package/dist/__tests__/decompile.test.js +0 -102
  210. package/dist/__tests__/decompile.test.js.map +0 -1
  211. package/dist/__tests__/hash.test.d.ts +0 -2
  212. package/dist/__tests__/hash.test.d.ts.map +0 -1
  213. package/dist/__tests__/hash.test.js +0 -44
  214. package/dist/__tests__/hash.test.js.map +0 -1
  215. package/dist/__tests__/integration.test.d.ts +0 -2
  216. package/dist/__tests__/integration.test.d.ts.map +0 -1
  217. package/dist/__tests__/integration.test.js +0 -284
  218. package/dist/__tests__/integration.test.js.map +0 -1
  219. package/dist/__tests__/skill-renderer.test.d.ts +0 -2
  220. package/dist/__tests__/skill-renderer.test.d.ts.map +0 -1
  221. package/dist/__tests__/skill-renderer.test.js +0 -68
  222. package/dist/__tests__/skill-renderer.test.js.map +0 -1
@@ -40,32 +40,37 @@ exports.getLocalBundleDir = getLocalBundleDir;
40
40
  exports.getBundleConfigPath = getBundleConfigPath;
41
41
  exports.bundleLooksInitialized = bundleLooksInitialized;
42
42
  exports.resolveActiveBundleDir = resolveActiveBundleDir;
43
+ exports.getLocalBundleMarkerPath = getLocalBundleMarkerPath;
44
+ exports.hasLocalBundleMarker = hasLocalBundleMarker;
45
+ exports.isHomeBundleDir = isHomeBundleDir;
46
+ exports.markLocalBundle = markLocalBundle;
47
+ exports.resolveSyncBundleDir = resolveSyncBundleDir;
48
+ exports.bundleResolutionNotice = bundleResolutionNotice;
49
+ exports.findGitRoot = findGitRoot;
50
+ exports.ensureYoumdGitignored = ensureYoumdGitignored;
51
+ exports.getEnvApiKey = getEnvApiKey;
52
+ exports.getEnvApiUrl = getEnvApiUrl;
53
+ exports.getAuthToken = getAuthToken;
43
54
  exports.getConvexSiteUrl = getConvexSiteUrl;
44
55
  exports.getAppUrl = getAppUrl;
45
56
  exports.getDefaultConvexSiteUrl = getDefaultConvexSiteUrl;
46
57
  exports.getDefaultAppUrl = getDefaultAppUrl;
58
+ exports.writeJsonAtomic = writeJsonAtomic;
47
59
  exports.readGlobalConfig = readGlobalConfig;
48
60
  exports.writeGlobalConfig = writeGlobalConfig;
49
61
  exports.clearGlobalAuth = clearGlobalAuth;
50
62
  exports.readLocalConfig = readLocalConfig;
51
63
  exports.readBundleConfig = readBundleConfig;
52
64
  exports.writeLocalConfig = writeLocalConfig;
65
+ exports.writeBundleConfig = writeBundleConfig;
53
66
  exports.localBundleExists = localBundleExists;
54
67
  exports.isAuthenticated = isAuthenticated;
55
68
  exports.detectProjectContext = detectProjectContext;
56
- exports.getProjectBundleDir = getProjectBundleDir;
57
- exports.getProjectPrivateDir = getProjectPrivateDir;
58
- exports.ensureProjectDirs = ensureProjectDirs;
59
- exports.readProjectPrivateNotes = readProjectPrivateNotes;
60
- exports.writeProjectPrivateNotes = writeProjectPrivateNotes;
61
- exports.readProjectContext = readProjectContext;
62
- exports.writeProjectContext = writeProjectContext;
63
69
  exports.getSkillsDir = getSkillsDir;
64
70
  exports.getSkillCatalogPath = getSkillCatalogPath;
65
71
  exports.getSkillMetricsPath = getSkillMetricsPath;
66
72
  exports.getProjectSkillsDir = getProjectSkillsDir;
67
73
  exports.ensureSkillsDir = ensureSkillsDir;
68
- exports.listProjects = listProjects;
69
74
  const fs = __importStar(require("fs"));
70
75
  const path = __importStar(require("path"));
71
76
  const os = __importStar(require("os"));
@@ -103,7 +108,163 @@ function resolveActiveBundleDir() {
103
108
  return homeDir;
104
109
  return null;
105
110
  }
111
+ // ─── T7: home-first bundle resolution for identity sync ──────────────
112
+ //
113
+ // pull/push/sync are IDENTITY operations — they default to the home brain
114
+ // (~/.youmd/) ALWAYS. Operating on a project-local .youmd/ requires either
115
+ // the explicit --local flag or a deliberate marker file
116
+ // (.youmd/youmd.local.json) written by `youmd init` / a previous --local
117
+ // run. This stops `youmd pull` inside a random repo from scattering
118
+ // identity copies into project-local .youmd/ directories.
119
+ const LOCAL_BUNDLE_MARKER_FILE = "youmd.local.json";
120
+ function getLocalBundleMarkerPath(bundleDir) {
121
+ return path.join(bundleDir, LOCAL_BUNDLE_MARKER_FILE);
122
+ }
123
+ function hasLocalBundleMarker(bundleDir) {
124
+ return fs.existsSync(getLocalBundleMarkerPath(bundleDir));
125
+ }
126
+ /**
127
+ * Canonicalize a path for comparison: resolve symlinks where possible
128
+ * (macOS tmp/home paths often traverse /var → /private/var) and fall back
129
+ * to plain resolution when the path doesn't exist yet.
130
+ */
131
+ function canonicalPath(p) {
132
+ const resolved = path.resolve(p);
133
+ try {
134
+ return fs.realpathSync(resolved);
135
+ }
136
+ catch {
137
+ try {
138
+ return path.join(fs.realpathSync(path.dirname(resolved)), path.basename(resolved));
139
+ }
140
+ catch {
141
+ return resolved;
142
+ }
143
+ }
144
+ }
145
+ function isHomeBundleDir(bundleDir) {
146
+ return canonicalPath(bundleDir) === canonicalPath(getHomeBundleDir());
147
+ }
148
+ /**
149
+ * Mark a project-local .youmd/ as a deliberate local bundle. Idempotent.
150
+ * Never marks the home bundle dir — home needs no marker.
151
+ */
152
+ function markLocalBundle(bundleDir) {
153
+ if (isHomeBundleDir(bundleDir))
154
+ return;
155
+ fs.mkdirSync(bundleDir, { recursive: true });
156
+ const markerPath = getLocalBundleMarkerPath(bundleDir);
157
+ if (!fs.existsSync(markerPath)) {
158
+ writeJsonAtomic(markerPath, { localBundle: true, createdAt: new Date().toISOString() }, 0o644);
159
+ }
160
+ }
161
+ /**
162
+ * Resolve the bundle dir for identity sync operations (pull/push/sync).
163
+ *
164
+ * Home-first: defaults to ~/.youmd/. A project-local .youmd/ is used only
165
+ * when explicitly requested (--local) or deliberately marked
166
+ * (.youmd/youmd.local.json). When cwd IS the home directory, local and home
167
+ * are the same dir.
168
+ */
169
+ function resolveSyncBundleDir(options = {}) {
170
+ const localDir = getLocalBundleDir();
171
+ const homeDir = getHomeBundleDir();
172
+ if (isHomeBundleDir(localDir)) {
173
+ return { dir: homeDir, scope: "home", reason: "home-is-cwd", localBundlePresent: false };
174
+ }
175
+ const localBundlePresent = bundleLooksInitialized(localDir);
176
+ if (options.local) {
177
+ return { dir: localDir, scope: "local", reason: "flag", localBundlePresent };
178
+ }
179
+ if (hasLocalBundleMarker(localDir)) {
180
+ return { dir: localDir, scope: "local", reason: "marker", localBundlePresent };
181
+ }
182
+ return { dir: homeDir, scope: "home", reason: "default", localBundlePresent };
183
+ }
184
+ /**
185
+ * One-line notice explaining which bundle root is in use and how to target
186
+ * the other. Returns null when there is nothing ambiguous to explain.
187
+ * Callers print it dim — this stays plain text so it is unit-testable.
188
+ */
189
+ function bundleResolutionNotice(res) {
190
+ if (res.scope === "home" && res.localBundlePresent) {
191
+ return `using home bundle ${res.dir} (project-local .youmd/ ignored — pass --local to target it)`;
192
+ }
193
+ if (res.scope === "local") {
194
+ const why = res.reason === "flag" ? "--local" : "youmd.local.json marker";
195
+ return `using project-local bundle ${res.dir} (${why}) — omit --local and remove the marker to target ~/.youmd`;
196
+ }
197
+ return null;
198
+ }
199
+ // ─── T7: auto-gitignore project-local .youmd/ ─────────────────────────
200
+ /** Walk up from startDir looking for a .git directory. */
201
+ function findGitRoot(startDir) {
202
+ let dir = path.resolve(startDir);
203
+ const root = path.parse(dir).root;
204
+ for (;;) {
205
+ if (fs.existsSync(path.join(dir, ".git")))
206
+ return dir;
207
+ if (dir === root)
208
+ return null;
209
+ dir = path.dirname(dir);
210
+ }
211
+ }
212
+ const GITIGNORE_YOUMD_PATTERNS = new Set([
213
+ ".youmd",
214
+ ".youmd/",
215
+ "/.youmd",
216
+ "/.youmd/",
217
+ "**/.youmd",
218
+ "**/.youmd/",
219
+ ]);
220
+ const GITIGNORE_YOUMD_BLOCK = "# You.md identity bundle — never commit identity data\n.youmd/\n";
221
+ /**
222
+ * Ensure the repo containing a project-local .youmd/ gitignores it, so
223
+ * identity data is never silently committed. Appends `.youmd/` when a
224
+ * .gitignore exists without coverage; creates one at the git root when the
225
+ * repo has none; no-ops outside a git repo or when already covered.
226
+ */
227
+ function ensureYoumdGitignored(bundleDir) {
228
+ if (isHomeBundleDir(bundleDir))
229
+ return "no-repo";
230
+ const gitRoot = findGitRoot(path.dirname(path.resolve(bundleDir)));
231
+ if (!gitRoot)
232
+ return "no-repo";
233
+ const gitignorePath = path.join(gitRoot, ".gitignore");
234
+ if (!fs.existsSync(gitignorePath)) {
235
+ fs.writeFileSync(gitignorePath, GITIGNORE_YOUMD_BLOCK);
236
+ return "created";
237
+ }
238
+ const content = fs.readFileSync(gitignorePath, "utf-8");
239
+ const covered = content
240
+ .split("\n")
241
+ .some((line) => GITIGNORE_YOUMD_PATTERNS.has(line.trim()));
242
+ if (covered)
243
+ return "covered";
244
+ const sep = content.length === 0 || content.endsWith("\n") ? "" : "\n";
245
+ fs.appendFileSync(gitignorePath, `${sep}\n${GITIGNORE_YOUMD_BLOCK}`);
246
+ return "appended";
247
+ }
248
+ // ─── Headless auth env overrides ─────────────────────────────────────
249
+ // YOUMD_API_KEY / YOUMD_API_URL let agents and CI run authenticated
250
+ // commands with zero filesystem state (no ~/.youmd/config.json needed).
251
+ // Env always wins over the config file.
252
+ function getEnvApiKey() {
253
+ const key = process.env.YOUMD_API_KEY?.trim();
254
+ return key || undefined;
255
+ }
256
+ function getEnvApiUrl() {
257
+ const url = process.env.YOUMD_API_URL?.trim();
258
+ return url || undefined;
259
+ }
260
+ /** Resolve the auth token: YOUMD_API_KEY env var first, then config file. */
261
+ function getAuthToken() {
262
+ return getEnvApiKey() || readGlobalConfig().token || undefined;
263
+ }
106
264
  function getConvexSiteUrl() {
265
+ const envUrl = getEnvApiUrl();
266
+ if (envUrl)
267
+ return envUrl;
107
268
  const config = readGlobalConfig();
108
269
  return config.apiUrl || DEFAULT_API_URL;
109
270
  }
@@ -117,23 +278,129 @@ function getDefaultConvexSiteUrl() {
117
278
  function getDefaultAppUrl() {
118
279
  return DEFAULT_APP_URL;
119
280
  }
281
+ // ─── Atomic, locked config writes ─────────────────────────────────────
282
+ /**
283
+ * Write JSON to a file atomically: write to a tmp file in the same
284
+ * directory, then rename over the target (atomic on the same volume).
285
+ * Prevents partial/corrupt files when parallel agents write concurrently.
286
+ */
287
+ function writeJsonAtomic(file, data, mode = 0o600) {
288
+ const tmp = `${file}.${process.pid}.${Date.now()}.tmp`;
289
+ try {
290
+ fs.writeFileSync(tmp, JSON.stringify(data, null, 2) + "\n", { mode });
291
+ fs.renameSync(tmp, file);
292
+ }
293
+ catch (err) {
294
+ try {
295
+ fs.unlinkSync(tmp);
296
+ }
297
+ catch { /* tmp may not exist */ }
298
+ throw err;
299
+ }
300
+ }
301
+ /** Synchronous sleep without busy-looping (Atomics.wait works on the Node main thread). */
302
+ function sleepSync(ms) {
303
+ try {
304
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
305
+ }
306
+ catch {
307
+ // SharedArrayBuffer unavailable — skip the wait
308
+ }
309
+ }
310
+ const LOCK_STALE_MS = 5000;
311
+ /**
312
+ * Acquire a simple O_EXCL lockfile next to `file`. Retries 5x with ~50ms
313
+ * jitter. Returns a release function, or null if the lock could not be
314
+ * acquired (callers proceed anyway — the atomic rename still prevents
315
+ * corruption; the lock just narrows read-modify-write races).
316
+ */
317
+ function acquireFileLock(file) {
318
+ const lockPath = `${file}.lock`;
319
+ for (let attempt = 0; attempt < 5; attempt++) {
320
+ try {
321
+ const fd = fs.openSync(lockPath, "wx"); // O_CREAT | O_EXCL
322
+ fs.writeSync(fd, String(process.pid));
323
+ fs.closeSync(fd);
324
+ return () => {
325
+ try {
326
+ fs.unlinkSync(lockPath);
327
+ }
328
+ catch { /* already gone */ }
329
+ };
330
+ }
331
+ catch {
332
+ // Lock held — clear it if stale (holder crashed), else wait + retry
333
+ try {
334
+ const stat = fs.statSync(lockPath);
335
+ if (Date.now() - stat.mtimeMs > LOCK_STALE_MS) {
336
+ fs.unlinkSync(lockPath);
337
+ continue;
338
+ }
339
+ }
340
+ catch { /* lock vanished between attempts */ }
341
+ sleepSync(40 + Math.floor(Math.random() * 40));
342
+ }
343
+ }
344
+ return null;
345
+ }
346
+ /** Ensure ~/.youmd is 0700 and config.json is 0600 (fix on read if wrong). */
347
+ function enforceGlobalConfigPermissions() {
348
+ if (process.platform === "win32")
349
+ return;
350
+ try {
351
+ const dirMode = fs.statSync(GLOBAL_CONFIG_DIR).mode & 0o777;
352
+ if (dirMode !== 0o700)
353
+ fs.chmodSync(GLOBAL_CONFIG_DIR, 0o700);
354
+ }
355
+ catch { /* dir may not exist yet */ }
356
+ try {
357
+ const fileMode = fs.statSync(GLOBAL_CONFIG_FILE).mode & 0o777;
358
+ if (fileMode !== 0o600)
359
+ fs.chmodSync(GLOBAL_CONFIG_FILE, 0o600);
360
+ }
361
+ catch { /* file may not exist yet */ }
362
+ }
120
363
  function readGlobalConfig() {
121
364
  if (!fs.existsSync(GLOBAL_CONFIG_FILE)) {
122
365
  return {};
123
366
  }
367
+ let raw;
124
368
  try {
125
- const raw = fs.readFileSync(GLOBAL_CONFIG_FILE, "utf-8");
126
- return JSON.parse(raw);
369
+ raw = fs.readFileSync(GLOBAL_CONFIG_FILE, "utf-8");
127
370
  }
128
371
  catch {
129
372
  return {};
130
373
  }
374
+ try {
375
+ const parsed = JSON.parse(raw);
376
+ enforceGlobalConfigPermissions();
377
+ return parsed;
378
+ }
379
+ catch {
380
+ // Preserve evidence instead of silently logging the user out
381
+ try {
382
+ fs.copyFileSync(GLOBAL_CONFIG_FILE, GLOBAL_CONFIG_FILE + ".bak");
383
+ console.error(`warning: ${GLOBAL_CONFIG_FILE} is corrupt — saved a copy to config.json.bak`);
384
+ }
385
+ catch {
386
+ console.error(`warning: ${GLOBAL_CONFIG_FILE} is corrupt and could not be backed up`);
387
+ }
388
+ return {};
389
+ }
131
390
  }
132
391
  function writeGlobalConfig(config) {
133
392
  if (!fs.existsSync(GLOBAL_CONFIG_DIR)) {
134
- fs.mkdirSync(GLOBAL_CONFIG_DIR, { recursive: true });
393
+ fs.mkdirSync(GLOBAL_CONFIG_DIR, { recursive: true, mode: 0o700 });
394
+ }
395
+ const release = acquireFileLock(GLOBAL_CONFIG_FILE);
396
+ try {
397
+ writeJsonAtomic(GLOBAL_CONFIG_FILE, config, 0o600);
398
+ enforceGlobalConfigPermissions();
399
+ }
400
+ finally {
401
+ if (release)
402
+ release();
135
403
  }
136
- fs.writeFileSync(GLOBAL_CONFIG_FILE, JSON.stringify(config, null, 2) + "\n");
137
404
  }
138
405
  function clearGlobalAuth(options = {}) {
139
406
  const config = readGlobalConfig();
@@ -174,15 +441,31 @@ function readBundleConfig(bundleDir) {
174
441
  }
175
442
  }
176
443
  function writeLocalConfig(config) {
177
- const configPath = getBundleConfigPath(getLocalBundleDir());
178
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
444
+ writeBundleConfig(getLocalBundleDir(), config);
445
+ }
446
+ /**
447
+ * Bundle-dir-aware twin of writeLocalConfig (T7). Same lock + atomic-rename
448
+ * write path; at the home bundle dir this file (~/.youmd/config.json) also
449
+ * carries GlobalConfig fields — callers must read-modify-write via
450
+ * readBundleConfig so those fields are preserved.
451
+ */
452
+ function writeBundleConfig(bundleDir, config) {
453
+ fs.mkdirSync(bundleDir, { recursive: true });
454
+ const configPath = getBundleConfigPath(bundleDir);
455
+ const release = acquireFileLock(configPath);
456
+ try {
457
+ writeJsonAtomic(configPath, config);
458
+ }
459
+ finally {
460
+ if (release)
461
+ release();
462
+ }
179
463
  }
180
464
  function localBundleExists() {
181
465
  return fs.existsSync(getLocalBundleDir());
182
466
  }
183
467
  function isAuthenticated() {
184
- const config = readGlobalConfig();
185
- return !!config.token;
468
+ return !!getAuthToken();
186
469
  }
187
470
  const PROJECT_MARKERS = [
188
471
  ".youmd-project",
@@ -195,25 +478,47 @@ const PROJECT_MARKERS = [
195
478
  ];
196
479
  /**
197
480
  * Walk up from cwd looking for project markers.
481
+ *
482
+ * Nearest-marker-wins: the first directory (walking up from cwd) that
483
+ * contains ANY marker is the project root. Marker priority only breaks
484
+ * ties between markers at that same depth. This prevents a stray
485
+ * `.youmd-project` high in the tree (e.g. ~/Desktop) from outranking the
486
+ * nested repo the user is actually working in.
487
+ *
488
+ * The home directory itself is never treated as a project root — dotfiles
489
+ * and stray Makefiles in ~ are not a project.
490
+ *
198
491
  * Returns project context if found, null otherwise.
199
492
  */
200
493
  function detectProjectContext() {
201
494
  let dir = process.cwd();
202
495
  const root = path.parse(dir).root;
496
+ const home = os.homedir();
203
497
  while (dir !== root) {
204
- for (const marker of PROJECT_MARKERS) {
205
- const markerPath = path.join(dir, marker);
206
- const isDir = marker === ".git";
207
- if (isDir) {
208
- if (fs.existsSync(markerPath) && fs.statSync(markerPath).isDirectory()) {
209
- return buildProjectContext(dir, marker);
498
+ if (dir !== home) {
499
+ const found = [];
500
+ for (const marker of PROJECT_MARKERS) {
501
+ const markerPath = path.join(dir, marker);
502
+ const isDir = marker === ".git";
503
+ if (isDir) {
504
+ if (fs.existsSync(markerPath) && fs.statSync(markerPath).isDirectory()) {
505
+ found.push(buildProjectContext(dir, marker));
506
+ }
210
507
  }
211
- }
212
- else {
213
- if (fs.existsSync(markerPath) && fs.statSync(markerPath).isFile()) {
214
- return buildProjectContext(dir, marker);
508
+ else {
509
+ if (fs.existsSync(markerPath) && fs.statSync(markerPath).isFile()) {
510
+ found.push(buildProjectContext(dir, marker));
511
+ }
215
512
  }
216
513
  }
514
+ if (found.length > 0) {
515
+ // Equal-depth tie-break preserves the original marker priorities.
516
+ return (found.find((candidate) => candidate.marker === ".youmd-project") ||
517
+ found.find((candidate) => candidate.marker === ".git") ||
518
+ found.find((candidate) => fs.existsSync(path.join(candidate.root, "AGENTS.md"))) ||
519
+ found.find((candidate) => fs.existsSync(path.join(candidate.root, "project-context"))) ||
520
+ found[0]);
521
+ }
217
522
  }
218
523
  dir = path.dirname(dir);
219
524
  }
@@ -259,81 +564,9 @@ function buildProjectContext(projectRoot, marker) {
259
564
  youmdProject,
260
565
  };
261
566
  }
262
- /**
263
- * Sanitize a project name for use as a directory name.
264
- */
265
- function sanitizeProjectName(name) {
266
- return name
267
- .toLowerCase()
268
- .replace(/[^a-z0-9_-]/g, "-")
269
- .replace(/-+/g, "-")
270
- .replace(/^-|-$/g, "");
271
- }
272
- /**
273
- * Get the global .youmd/projects/{project-name}/ directory for project-specific files.
274
- */
275
- function getProjectBundleDir(projectName) {
276
- return path.join(GLOBAL_CONFIG_DIR, "projects", sanitizeProjectName(projectName));
277
- }
278
- /**
279
- * Get the private context directory for a project.
280
- */
281
- function getProjectPrivateDir(projectName) {
282
- return path.join(getProjectBundleDir(projectName), "private");
283
- }
284
- /**
285
- * Ensure the project bundle directory structure exists.
286
- */
287
- function ensureProjectDirs(projectName) {
288
- const projectDir = getProjectBundleDir(projectName);
289
- const privateDir = path.join(projectDir, "private");
290
- fs.mkdirSync(privateDir, { recursive: true });
291
- return projectDir;
292
- }
293
- /**
294
- * Read project-specific private notes from .youmd/projects/{name}/private/notes.md
295
- */
296
- function readProjectPrivateNotes(projectName) {
297
- const notesPath = path.join(getProjectPrivateDir(projectName), "notes.md");
298
- if (!fs.existsSync(notesPath))
299
- return null;
300
- try {
301
- return fs.readFileSync(notesPath, "utf-8");
302
- }
303
- catch {
304
- return null;
305
- }
306
- }
307
- /**
308
- * Write project-specific private notes.
309
- */
310
- function writeProjectPrivateNotes(projectName, content) {
311
- const privateDir = getProjectPrivateDir(projectName);
312
- fs.mkdirSync(privateDir, { recursive: true });
313
- fs.writeFileSync(path.join(privateDir, "notes.md"), content);
314
- }
315
- /**
316
- * Read project-specific config/context from .youmd/projects/{name}/context.json
317
- */
318
- function readProjectContext(projectName) {
319
- const contextPath = path.join(getProjectBundleDir(projectName), "context.json");
320
- if (!fs.existsSync(contextPath))
321
- return null;
322
- try {
323
- return JSON.parse(fs.readFileSync(contextPath, "utf-8"));
324
- }
325
- catch {
326
- return null;
327
- }
328
- }
329
- /**
330
- * Write project-specific context.
331
- */
332
- function writeProjectContext(projectName, context) {
333
- const projectDir = getProjectBundleDir(projectName);
334
- fs.mkdirSync(projectDir, { recursive: true });
335
- fs.writeFileSync(path.join(projectDir, "context.json"), JSON.stringify(context, null, 2) + "\n");
336
- }
567
+ // Project store path helpers (slug, ~/.youmd/projects/<name>/ dirs, private
568
+ // notes) live in lib/projectContext.ts the single project-context engine.
569
+ // The duplicate copies that used to live here were removed (PRODUCT-AUDIT #14).
337
570
  // ─── Skills Directories ──────────────────────────────────────────────
338
571
  /**
339
572
  * Global skills directory: ~/.youmd/skills/
@@ -369,27 +602,4 @@ function ensureSkillsDir() {
369
602
  }
370
603
  return dir;
371
604
  }
372
- /**
373
- * List all known projects from .youmd/projects/
374
- */
375
- function listProjects() {
376
- const projectsDir = path.join(GLOBAL_CONFIG_DIR, "projects");
377
- if (!fs.existsSync(projectsDir))
378
- return [];
379
- try {
380
- return fs
381
- .readdirSync(projectsDir)
382
- .filter((entry) => {
383
- const entryPath = path.join(projectsDir, entry);
384
- return fs.statSync(entryPath).isDirectory();
385
- })
386
- .map((entry) => ({
387
- name: entry,
388
- dir: path.join(projectsDir, entry),
389
- }));
390
- }
391
- catch {
392
- return [];
393
- }
394
- }
395
605
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,11 @@ export declare function detectFormat(youJson: Record<string, unknown>): BundleFo
16
16
  * Decompile a youJson bundle to the filesystem.
17
17
  * Creates all standard directories and writes markdown files.
18
18
  * Returns the number of files written.
19
+ *
20
+ * If manifest.sha256.json is present in bundleDir, verifies each section hash
21
+ * and emits a dim warning (to stderr) for any mismatch — non-fatal.
19
22
  */
20
- export declare function decompileToFilesystem(bundleDir: string, youJson: Record<string, unknown>): number;
23
+ export declare function decompileToFilesystem(bundleDir: string, youJson: Record<string, unknown>, options?: {
24
+ warnOnHashMismatch?: (msg: string) => void;
25
+ }): number;
21
26
  //# sourceMappingURL=decompile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decompile.d.ts","sourceRoot":"","sources":["../../src/lib/decompile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAW3E;AA+PD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAcR"}
1
+ {"version":3,"file":"decompile.d.ts","sourceRoot":"","sources":["../../src/lib/decompile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAW3E;AAwVD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACvD,MAAM,CA+BR"}