youmd 0.6.21 → 0.6.27

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 (218) 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 +283 -184
  6. package/dist/commands/chat.js.map +1 -1
  7. package/dist/commands/export.d.ts +1 -0
  8. package/dist/commands/export.d.ts.map +1 -1
  9. package/dist/commands/export.js +5 -0
  10. package/dist/commands/export.js.map +1 -1
  11. package/dist/commands/init.d.ts.map +1 -1
  12. package/dist/commands/init.js +21 -1
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/keys.d.ts.map +1 -1
  15. package/dist/commands/keys.js +3 -3
  16. package/dist/commands/keys.js.map +1 -1
  17. package/dist/commands/link.d.ts.map +1 -1
  18. package/dist/commands/link.js +3 -3
  19. package/dist/commands/link.js.map +1 -1
  20. package/dist/commands/login.d.ts +29 -0
  21. package/dist/commands/login.d.ts.map +1 -1
  22. package/dist/commands/login.js +256 -127
  23. package/dist/commands/login.js.map +1 -1
  24. package/dist/commands/logs.js +0 -1
  25. package/dist/commands/logs.js.map +1 -1
  26. package/dist/commands/mcp.d.ts +14 -0
  27. package/dist/commands/mcp.d.ts.map +1 -1
  28. package/dist/commands/mcp.js +284 -28
  29. package/dist/commands/mcp.js.map +1 -1
  30. package/dist/commands/okf.d.ts +12 -0
  31. package/dist/commands/okf.d.ts.map +1 -0
  32. package/dist/commands/okf.js +411 -0
  33. package/dist/commands/okf.js.map +1 -0
  34. package/dist/commands/private.d.ts.map +1 -1
  35. package/dist/commands/private.js +6 -5
  36. package/dist/commands/private.js.map +1 -1
  37. package/dist/commands/project.d.ts.map +1 -1
  38. package/dist/commands/project.js +9 -5
  39. package/dist/commands/project.js.map +1 -1
  40. package/dist/commands/publish.d.ts.map +1 -1
  41. package/dist/commands/publish.js +0 -1
  42. package/dist/commands/publish.js.map +1 -1
  43. package/dist/commands/pull.d.ts +24 -1
  44. package/dist/commands/pull.d.ts.map +1 -1
  45. package/dist/commands/pull.js +114 -14
  46. package/dist/commands/pull.js.map +1 -1
  47. package/dist/commands/push.d.ts +1 -0
  48. package/dist/commands/push.d.ts.map +1 -1
  49. package/dist/commands/push.js +33 -13
  50. package/dist/commands/push.js.map +1 -1
  51. package/dist/commands/register.d.ts +6 -0
  52. package/dist/commands/register.d.ts.map +1 -1
  53. package/dist/commands/register.js +179 -79
  54. package/dist/commands/register.js.map +1 -1
  55. package/dist/commands/skill.d.ts.map +1 -1
  56. package/dist/commands/skill.js +121 -50
  57. package/dist/commands/skill.js.map +1 -1
  58. package/dist/commands/stack.d.ts +16 -0
  59. package/dist/commands/stack.d.ts.map +1 -0
  60. package/dist/commands/stack.js +863 -0
  61. package/dist/commands/stack.js.map +1 -0
  62. package/dist/commands/status.d.ts.map +1 -1
  63. package/dist/commands/status.js +25 -5
  64. package/dist/commands/status.js.map +1 -1
  65. package/dist/commands/sync.d.ts +23 -0
  66. package/dist/commands/sync.d.ts.map +1 -1
  67. package/dist/commands/sync.js +193 -12
  68. package/dist/commands/sync.js.map +1 -1
  69. package/dist/commands/whoami.d.ts.map +1 -1
  70. package/dist/commands/whoami.js +21 -16
  71. package/dist/commands/whoami.js.map +1 -1
  72. package/dist/create.js +0 -0
  73. package/dist/index.js +64 -7
  74. package/dist/index.js.map +1 -1
  75. package/dist/lib/api.d.ts +127 -5
  76. package/dist/lib/api.d.ts.map +1 -1
  77. package/dist/lib/api.js +142 -5
  78. package/dist/lib/api.js.map +1 -1
  79. package/dist/lib/ascii.d.ts +1 -0
  80. package/dist/lib/ascii.d.ts.map +1 -1
  81. package/dist/lib/ascii.js +9 -26
  82. package/dist/lib/ascii.js.map +1 -1
  83. package/dist/lib/canonical-json.d.ts +8 -0
  84. package/dist/lib/canonical-json.d.ts.map +1 -0
  85. package/dist/lib/canonical-json.js +29 -0
  86. package/dist/lib/canonical-json.js.map +1 -0
  87. package/dist/lib/capability-router.d.ts +58 -0
  88. package/dist/lib/capability-router.d.ts.map +1 -0
  89. package/dist/lib/capability-router.js +54 -0
  90. package/dist/lib/capability-router.js.map +1 -0
  91. package/dist/lib/compiler.d.ts +32 -0
  92. package/dist/lib/compiler.d.ts.map +1 -1
  93. package/dist/lib/compiler.js +150 -0
  94. package/dist/lib/compiler.js.map +1 -1
  95. package/dist/lib/config.d.ts +71 -35
  96. package/dist/lib/config.d.ts.map +1 -1
  97. package/dist/lib/config.js +334 -124
  98. package/dist/lib/config.js.map +1 -1
  99. package/dist/lib/decompile.d.ts +6 -1
  100. package/dist/lib/decompile.d.ts.map +1 -1
  101. package/dist/lib/decompile.js +120 -11
  102. package/dist/lib/decompile.js.map +1 -1
  103. package/dist/lib/hash.d.ts.map +1 -1
  104. package/dist/lib/hash.js +2 -19
  105. package/dist/lib/hash.js.map +1 -1
  106. package/dist/lib/heartbeat.d.ts +38 -0
  107. package/dist/lib/heartbeat.d.ts.map +1 -0
  108. package/dist/lib/heartbeat.js +70 -0
  109. package/dist/lib/heartbeat.js.map +1 -0
  110. package/dist/lib/host-link.d.ts +123 -0
  111. package/dist/lib/host-link.d.ts.map +1 -0
  112. package/dist/lib/host-link.js +350 -0
  113. package/dist/lib/host-link.js.map +1 -0
  114. package/dist/lib/merge.d.ts +50 -0
  115. package/dist/lib/merge.d.ts.map +1 -0
  116. package/dist/lib/merge.js +167 -0
  117. package/dist/lib/merge.js.map +1 -0
  118. package/dist/lib/okf-bundle.d.ts +104 -0
  119. package/dist/lib/okf-bundle.d.ts.map +1 -0
  120. package/dist/lib/okf-bundle.js +473 -0
  121. package/dist/lib/okf-bundle.js.map +1 -0
  122. package/dist/lib/okf-health.d.ts +40 -0
  123. package/dist/lib/okf-health.d.ts.map +1 -0
  124. package/dist/lib/okf-health.js +152 -0
  125. package/dist/lib/okf-health.js.map +1 -0
  126. package/dist/lib/okf-stack.d.ts +47 -0
  127. package/dist/lib/okf-stack.d.ts.map +1 -0
  128. package/dist/lib/okf-stack.js +331 -0
  129. package/dist/lib/okf-stack.js.map +1 -0
  130. package/dist/lib/okf-view.d.ts +49 -0
  131. package/dist/lib/okf-view.d.ts.map +1 -0
  132. package/dist/lib/okf-view.js +197 -0
  133. package/dist/lib/okf-view.js.map +1 -0
  134. package/dist/lib/okf.d.ts +130 -0
  135. package/dist/lib/okf.d.ts.map +1 -0
  136. package/dist/lib/okf.js +263 -0
  137. package/dist/lib/okf.js.map +1 -0
  138. package/dist/lib/onboarding.d.ts +17 -0
  139. package/dist/lib/onboarding.d.ts.map +1 -1
  140. package/dist/lib/onboarding.js +224 -207
  141. package/dist/lib/onboarding.js.map +1 -1
  142. package/dist/lib/project.d.ts +5 -0
  143. package/dist/lib/project.d.ts.map +1 -1
  144. package/dist/lib/project.js +8 -0
  145. package/dist/lib/project.js.map +1 -1
  146. package/dist/lib/projectContext.d.ts +201 -0
  147. package/dist/lib/projectContext.d.ts.map +1 -0
  148. package/dist/lib/projectContext.js +597 -0
  149. package/dist/lib/projectContext.js.map +1 -0
  150. package/dist/lib/render.d.ts +38 -1
  151. package/dist/lib/render.d.ts.map +1 -1
  152. package/dist/lib/render.js +83 -18
  153. package/dist/lib/render.js.map +1 -1
  154. package/dist/lib/skill-catalog.d.ts.map +1 -1
  155. package/dist/lib/skill-catalog.js +22 -2
  156. package/dist/lib/skill-catalog.js.map +1 -1
  157. package/dist/lib/skills.d.ts +20 -5
  158. package/dist/lib/skills.d.ts.map +1 -1
  159. package/dist/lib/skills.js +116 -58
  160. package/dist/lib/skills.js.map +1 -1
  161. package/dist/lib/stackEval.d.ts +87 -0
  162. package/dist/lib/stackEval.d.ts.map +1 -0
  163. package/dist/lib/stackEval.js +233 -0
  164. package/dist/lib/stackEval.js.map +1 -0
  165. package/dist/lib/stackImprove.d.ts +49 -0
  166. package/dist/lib/stackImprove.d.ts.map +1 -0
  167. package/dist/lib/stackImprove.js +313 -0
  168. package/dist/lib/stackImprove.js.map +1 -0
  169. package/dist/lib/stackInstall.d.ts +59 -0
  170. package/dist/lib/stackInstall.d.ts.map +1 -0
  171. package/dist/lib/stackInstall.js +162 -0
  172. package/dist/lib/stackInstall.js.map +1 -0
  173. package/dist/lib/stackSafety.d.ts +126 -0
  174. package/dist/lib/stackSafety.d.ts.map +1 -0
  175. package/dist/lib/stackSafety.js +486 -0
  176. package/dist/lib/stackSafety.js.map +1 -0
  177. package/dist/lib/stackUpdate.d.ts +44 -0
  178. package/dist/lib/stackUpdate.d.ts.map +1 -0
  179. package/dist/lib/stackUpdate.js +256 -0
  180. package/dist/lib/stackUpdate.js.map +1 -0
  181. package/dist/lib/stream.d.ts +116 -0
  182. package/dist/lib/stream.d.ts.map +1 -0
  183. package/dist/lib/stream.js +368 -0
  184. package/dist/lib/stream.js.map +1 -0
  185. package/dist/lib/youstack.d.ts +219 -0
  186. package/dist/lib/youstack.d.ts.map +1 -0
  187. package/dist/lib/youstack.js +1049 -0
  188. package/dist/lib/youstack.js.map +1 -0
  189. package/dist/mcp/registry.d.ts +133 -0
  190. package/dist/mcp/registry.d.ts.map +1 -0
  191. package/dist/mcp/registry.js +833 -0
  192. package/dist/mcp/registry.js.map +1 -0
  193. package/dist/mcp/server.d.ts +106 -5
  194. package/dist/mcp/server.d.ts.map +1 -1
  195. package/dist/mcp/server.js +851 -498
  196. package/dist/mcp/server.js.map +1 -1
  197. package/dist/postinstall.js +11 -2
  198. package/dist/postinstall.js.map +1 -1
  199. package/dist/you.d.ts +1 -0
  200. package/dist/you.js +40 -4
  201. package/dist/you.js.map +1 -1
  202. package/examples/youstack-bamfstack-public/docs/quickstart.md +34 -0
  203. package/examples/youstack-bamfstack-public/prompts/creator-draft-starter.md +15 -0
  204. package/examples/youstack-bamfstack-public/skills/bamfstack-start/SKILL.md +36 -0
  205. package/examples/youstack-bamfstack-public/tests/smoke.md +19 -0
  206. package/examples/youstack-bamfstack-public/workflows/creator-growth-workflow.md +22 -0
  207. package/examples/youstack-bamfstack-public/youstack.json +172 -0
  208. package/examples/youstack-personal/docs/quickstart.md +10 -0
  209. package/examples/youstack-personal/skills/youstack-start/SKILL.md +9 -0
  210. package/examples/youstack-personal/tests/smoke.md +9 -0
  211. package/examples/youstack-personal/workflows/startup.md +7 -0
  212. package/examples/youstack-personal/youstack.json +123 -0
  213. package/package.json +3 -3
  214. package/skills/claude-md-generator.md +1 -1
  215. package/skills/meta-improve.md +8 -3
  216. package/skills/proactive-context-fill.md +1 -1
  217. package/skills/youstack-maintainer.md +128 -0
  218. package/skills/youstack-start.md +78 -0
@@ -0,0 +1,597 @@
1
+ "use strict";
2
+ /**
3
+ * Single project-context engine (PRODUCT-AUDIT #14 / ROADMAP 3.8).
4
+ *
5
+ * A project's context is resolved as the repo `project-context/` directory
6
+ * (when the cwd is inside a repo that has one) OVERLAID on the global
7
+ * `~/.youmd/projects/<slug>/` directory (global notes for the same project):
8
+ *
9
+ * - readers see the overlay UNION of both sides
10
+ * - the repo copy wins on file conflicts
11
+ * - writers route project files to the repo copy when inside the repo,
12
+ * otherwise to the global `~/.youmd/projects/<slug>/` store
13
+ *
14
+ * This module is the only place that knows both locations. Consumers
15
+ * (chat project reads, `youmd project` commands, the MCP server) route
16
+ * through it instead of carrying their own copies of the path logic.
17
+ *
18
+ * It also owns the documented precedence model (PRODUCT-AUDIT #22 /
19
+ * ROADMAP 3.15): the PRECEDENCE table, shadowing detection, and the
20
+ * "active roots" summary used by `youmd status` and `youmd stack doctor`.
21
+ */
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || (function () {
39
+ var ownKeys = function(o) {
40
+ ownKeys = Object.getOwnPropertyNames || function (o) {
41
+ var ar = [];
42
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
43
+ return ar;
44
+ };
45
+ return ownKeys(o);
46
+ };
47
+ return function (mod) {
48
+ if (mod && mod.__esModule) return mod;
49
+ var result = {};
50
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
51
+ __setModuleDefault(result, mod);
52
+ return result;
53
+ };
54
+ })();
55
+ Object.defineProperty(exports, "__esModule", { value: true });
56
+ exports.PRECEDENCE = void 0;
57
+ exports.projectSlug = projectSlug;
58
+ exports.getGlobalProjectsRoot = getGlobalProjectsRoot;
59
+ exports.getProjectGlobalDir = getProjectGlobalDir;
60
+ exports.getProjectPrivateDir = getProjectPrivateDir;
61
+ exports.ensureProjectDirs = ensureProjectDirs;
62
+ exports.readProjectPrivateNotes = readProjectPrivateNotes;
63
+ exports.writeProjectPrivateNotes = writeProjectPrivateNotes;
64
+ exports.findRepoContextRoot = findRepoContextRoot;
65
+ exports.deriveProjectName = deriveProjectName;
66
+ exports.resolveProjectContext = resolveProjectContext;
67
+ exports.readContextFile = readContextFile;
68
+ exports.writeContextFile = writeContextFile;
69
+ exports.writeProjectUpdate = writeProjectUpdate;
70
+ exports.projectContextReadPaths = projectContextReadPaths;
71
+ exports.readMergedProjectContext = readMergedProjectContext;
72
+ exports.buildMergedProjectContextInjection = buildMergedProjectContextInjection;
73
+ exports.renderPrecedence = renderPrecedence;
74
+ exports.detectShadowing = detectShadowing;
75
+ exports.getActiveRoots = getActiveRoots;
76
+ exports.buildActiveRootsLines = buildActiveRootsLines;
77
+ const fs = __importStar(require("fs"));
78
+ const os = __importStar(require("os"));
79
+ const path = __importStar(require("path"));
80
+ const project_1 = require("./project");
81
+ const config_1 = require("./config");
82
+ const youstack_1 = require("./youstack");
83
+ // ─── Slug + global store paths (single ownership) ─────────────────────
84
+ // These replace the duplicate helpers that used to live in lib/config.ts.
85
+ function projectSlug(name) {
86
+ return name
87
+ .toLowerCase()
88
+ .replace(/[^a-z0-9]+/g, "-")
89
+ .replace(/^-+|-+$/g, "")
90
+ .slice(0, 64);
91
+ }
92
+ /** Global projects root: ~/.youmd/projects */
93
+ function getGlobalProjectsRoot() {
94
+ return path.join(os.homedir(), ".youmd", "projects");
95
+ }
96
+ /** Global per-project dir: ~/.youmd/projects/<slug> */
97
+ function getProjectGlobalDir(projectName) {
98
+ return path.join(getGlobalProjectsRoot(), projectSlug(projectName));
99
+ }
100
+ /** Private context dir for a project: ~/.youmd/projects/<slug>/private */
101
+ function getProjectPrivateDir(projectName) {
102
+ return path.join(getProjectGlobalDir(projectName), "private");
103
+ }
104
+ /** Ensure the global project dir structure exists. Returns the project dir. */
105
+ function ensureProjectDirs(projectName) {
106
+ const projectDir = getProjectGlobalDir(projectName);
107
+ fs.mkdirSync(path.join(projectDir, "private"), { recursive: true });
108
+ return projectDir;
109
+ }
110
+ /** Read project-scoped private notes from the global store. */
111
+ function readProjectPrivateNotes(projectName) {
112
+ const notesPath = path.join(getProjectPrivateDir(projectName), "notes.md");
113
+ if (!fs.existsSync(notesPath))
114
+ return null;
115
+ try {
116
+ return fs.readFileSync(notesPath, "utf-8");
117
+ }
118
+ catch {
119
+ return null;
120
+ }
121
+ }
122
+ /** Write project-scoped private notes to the global store. */
123
+ function writeProjectPrivateNotes(projectName, content) {
124
+ const privateDir = getProjectPrivateDir(projectName);
125
+ fs.mkdirSync(privateDir, { recursive: true });
126
+ fs.writeFileSync(path.join(privateDir, "notes.md"), content);
127
+ }
128
+ // ─── Repo-side detection ──────────────────────────────────────────────
129
+ /**
130
+ * Find the nearest repo project-context root by walking up from startDir.
131
+ * A directory qualifies when it contains a `project-context/` directory or
132
+ * a `.youmd-project` marker file. (Moved here from the MCP server, which
133
+ * carried a private copy of this walk.)
134
+ */
135
+ function findRepoContextRoot(startDir = process.cwd()) {
136
+ let dir = path.resolve(startDir);
137
+ // Walk up at most 8 levels to avoid runaway searches
138
+ for (let i = 0; i < 8; i++) {
139
+ const contextDir = path.join(dir, "project-context");
140
+ const marker = path.join(dir, ".youmd-project");
141
+ try {
142
+ if (fs.existsSync(contextDir) && fs.statSync(contextDir).isDirectory()) {
143
+ return dir;
144
+ }
145
+ if (fs.existsSync(marker)) {
146
+ return dir;
147
+ }
148
+ }
149
+ catch {
150
+ // unreadable dir — keep walking
151
+ }
152
+ const parent = path.dirname(dir);
153
+ if (parent === dir)
154
+ break;
155
+ dir = parent;
156
+ }
157
+ return null;
158
+ }
159
+ /** Derive a project name from a repo root: .youmd-project, package.json, basename. */
160
+ function deriveProjectName(projectRoot) {
161
+ const markerPath = path.join(projectRoot, ".youmd-project");
162
+ if (fs.existsSync(markerPath)) {
163
+ try {
164
+ const marker = JSON.parse(fs.readFileSync(markerPath, "utf-8"));
165
+ if (marker && typeof marker.name === "string" && marker.name.trim()) {
166
+ return marker.name;
167
+ }
168
+ }
169
+ catch {
170
+ // malformed marker — fall through
171
+ }
172
+ }
173
+ const pkgPath = path.join(projectRoot, "package.json");
174
+ if (fs.existsSync(pkgPath)) {
175
+ try {
176
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
177
+ if (pkg && typeof pkg.name === "string" && pkg.name.trim()) {
178
+ return pkg.name;
179
+ }
180
+ }
181
+ catch {
182
+ // malformed package.json — fall through
183
+ }
184
+ }
185
+ return path.basename(projectRoot);
186
+ }
187
+ function listContextDirFiles(dir) {
188
+ if (!dir || !fs.existsSync(dir))
189
+ return [];
190
+ try {
191
+ return fs
192
+ .readdirSync(dir, { withFileTypes: true })
193
+ .filter((entry) => entry.isFile() && !entry.name.startsWith("."))
194
+ .map((entry) => ({
195
+ key: entry.name.toLowerCase(),
196
+ fileName: entry.name,
197
+ path: path.join(dir, entry.name),
198
+ }))
199
+ .sort((a, b) => a.key.localeCompare(b.key));
200
+ }
201
+ catch {
202
+ return [];
203
+ }
204
+ }
205
+ /**
206
+ * Resolve a project's context roots and overlay union.
207
+ *
208
+ * - `projectName` pins the global side to a specific project. The repo
209
+ * side is only overlaid when the repo derives the same project (so a
210
+ * named lookup for project A does not absorb repo B's files).
211
+ * - With no `projectName`, the project is derived from the repo root
212
+ * (or null when no repo context exists from cwd).
213
+ */
214
+ function resolveProjectContext(options = {}) {
215
+ const cwd = options.cwd || process.cwd();
216
+ const detectedRoot = findRepoContextRoot(cwd);
217
+ const repoName = detectedRoot ? deriveProjectName(detectedRoot) : null;
218
+ const projectName = options.projectName || repoName;
219
+ // Named lookups only overlay the repo when it is the same project.
220
+ const repoRoot = detectedRoot &&
221
+ (!options.projectName ||
222
+ (repoName && projectSlug(repoName) === projectSlug(options.projectName)) ||
223
+ projectSlug(path.basename(detectedRoot)) === projectSlug(options.projectName))
224
+ ? detectedRoot
225
+ : null;
226
+ const repoContextDirCandidate = repoRoot ? path.join(repoRoot, "project-context") : null;
227
+ const repoContextDir = repoContextDirCandidate && fs.existsSync(repoContextDirCandidate)
228
+ ? repoContextDirCandidate
229
+ : null;
230
+ // Global side: walk-up .youmd/projects store first, then ~/.youmd/projects.
231
+ let globalDir = null;
232
+ if (projectName) {
233
+ const slugCandidates = [projectSlug(projectName)];
234
+ if (repoRoot) {
235
+ const baseSlug = projectSlug(path.basename(repoRoot));
236
+ if (!slugCandidates.includes(baseSlug))
237
+ slugCandidates.push(baseSlug);
238
+ }
239
+ const projectsRoot = (0, project_1.findProjectsRoot)(cwd);
240
+ const dirCandidates = [];
241
+ for (const slug of slugCandidates) {
242
+ if (projectsRoot)
243
+ dirCandidates.push(path.join(projectsRoot, slug));
244
+ dirCandidates.push(path.join(getGlobalProjectsRoot(), slug));
245
+ }
246
+ globalDir =
247
+ dirCandidates.find((candidate) => fs.existsSync(candidate)) ||
248
+ getProjectGlobalDir(projectName);
249
+ }
250
+ const globalContextDirCandidate = globalDir ? path.join(globalDir, "context") : null;
251
+ const globalContextDir = globalContextDirCandidate && fs.existsSync(globalContextDirCandidate)
252
+ ? globalContextDirCandidate
253
+ : null;
254
+ // Overlay union — repo wins on (case-insensitive) file-name conflicts.
255
+ const entries = new Map();
256
+ for (const file of listContextDirFiles(repoContextDir)) {
257
+ entries.set(file.key, { ...file, source: "repo" });
258
+ }
259
+ for (const file of listContextDirFiles(globalContextDir)) {
260
+ const existing = entries.get(file.key);
261
+ if (existing) {
262
+ existing.shadows = file.path;
263
+ }
264
+ else {
265
+ entries.set(file.key, { ...file, source: "global" });
266
+ }
267
+ }
268
+ return {
269
+ projectName,
270
+ repoRoot,
271
+ repoContextDir,
272
+ globalDir,
273
+ globalContextDir,
274
+ entries: Array.from(entries.values()).sort((a, b) => a.key.localeCompare(b.key)),
275
+ };
276
+ }
277
+ function normalizeContextFileName(name) {
278
+ return name.includes(".") ? name : `${name}.md`;
279
+ }
280
+ /**
281
+ * Read a context file from the overlay union (repo copy wins).
282
+ * `name` may omit the .md extension and is matched case-insensitively.
283
+ */
284
+ function readContextFile(resolved, name) {
285
+ const rel = normalizeContextFileName(name);
286
+ const key = rel.toLowerCase();
287
+ const entry = resolved.entries.find((candidate) => candidate.key === key);
288
+ if (entry) {
289
+ try {
290
+ return {
291
+ content: fs.readFileSync(entry.path, "utf-8"),
292
+ path: entry.path,
293
+ source: entry.source,
294
+ };
295
+ }
296
+ catch {
297
+ return null;
298
+ }
299
+ }
300
+ // Compat: repos with a .youmd-project marker but no project-context/ dir
301
+ // may keep top-level files (legacy MCP read behavior).
302
+ if (resolved.repoRoot) {
303
+ for (const candidate of [
304
+ path.join(resolved.repoRoot, rel),
305
+ path.join(resolved.repoRoot, rel.toUpperCase()),
306
+ ]) {
307
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {
308
+ try {
309
+ return { content: fs.readFileSync(candidate, "utf-8"), path: candidate, source: "repo" };
310
+ }
311
+ catch {
312
+ return null;
313
+ }
314
+ }
315
+ }
316
+ }
317
+ return null;
318
+ }
319
+ /**
320
+ * Write a context file. Routes to the repo project-context/ copy when
321
+ * inside the repo, otherwise to the global store's context/ directory.
322
+ * Prefers an existing same-key file (preserving its on-disk casing).
323
+ */
324
+ function writeContextFile(resolved, name, content) {
325
+ const rel = normalizeContextFileName(name);
326
+ const key = rel.toLowerCase();
327
+ if (resolved.repoRoot) {
328
+ const existing = resolved.entries.find((entry) => entry.key === key && entry.source === "repo");
329
+ const target = existing?.path || path.join(resolved.repoRoot, "project-context", rel);
330
+ fs.mkdirSync(path.dirname(target), { recursive: true });
331
+ fs.writeFileSync(target, content);
332
+ return { path: target, source: "repo" };
333
+ }
334
+ if (!resolved.globalDir) {
335
+ throw new Error("no project resolved — cannot write a project-context file");
336
+ }
337
+ // updateProjectFile keeps project.json updated_at fresh in managed stores.
338
+ (0, project_1.updateProjectFile)(resolved.globalDir, path.join("context", rel), content);
339
+ return { path: path.join(resolved.globalDir, "context", rel), source: "global" };
340
+ }
341
+ /**
342
+ * Route a managed-store-relative update (context/x.md, agent/x, private/x)
343
+ * through the engine. `context/` files go to the repo copy when inside the
344
+ * repo; agent/ and private/ files always live in the global store.
345
+ */
346
+ function writeProjectUpdate(resolved, relFile, content) {
347
+ const normalized = relFile.replace(/\\/g, "/");
348
+ if (normalized.startsWith("context/") && resolved.repoRoot) {
349
+ return writeContextFile(resolved, normalized.slice("context/".length), content);
350
+ }
351
+ if (!resolved.globalDir) {
352
+ throw new Error("no project resolved — cannot write a project file");
353
+ }
354
+ (0, project_1.updateProjectFile)(resolved.globalDir, relFile, content);
355
+ return { path: path.join(resolved.globalDir, relFile), source: "global" };
356
+ }
357
+ /**
358
+ * Ordered candidate paths for a logical context file under a project root:
359
+ * repo project-context/, the generated .you/project-context/ layer, then the
360
+ * global overlay copy. Consumers read whichever exist (repo first = wins).
361
+ */
362
+ function projectContextReadPaths(projectRoot, relNames) {
363
+ const projectName = deriveProjectName(projectRoot);
364
+ const globalContextDir = path.join(getProjectGlobalDir(projectName), "context");
365
+ const paths = [];
366
+ for (const relName of relNames) {
367
+ paths.push({
368
+ label: `project-context/${relName}`,
369
+ path: path.join(projectRoot, "project-context", relName),
370
+ });
371
+ paths.push({
372
+ label: `.you/project-context/${relName}`,
373
+ path: path.join(projectRoot, ".you", "project-context", relName),
374
+ });
375
+ }
376
+ for (const relName of relNames) {
377
+ const overlayFile = path.join(globalContextDir, relName.toLowerCase());
378
+ paths.push({
379
+ label: `~/.youmd/projects/${projectSlug(projectName)}/context/${relName.toLowerCase()}`,
380
+ path: overlayFile,
381
+ });
382
+ }
383
+ return paths;
384
+ }
385
+ // ─── Merged structured context ────────────────────────────────────────
386
+ const MERGED_CONTEXT_FIELDS = [
387
+ { field: "prd", file: "prd.md" },
388
+ { field: "todo", file: "todo.md" },
389
+ { field: "features", file: "features.md" },
390
+ { field: "changelog", file: "changelog.md" },
391
+ { field: "decisions", file: "decisions.md" },
392
+ ];
393
+ /**
394
+ * Read a project's full structured context (the same shape lib/project.ts
395
+ * readProjectContext returns) with the repo project-context/ overlay
396
+ * applied: repo files win for prd/todo/features/changelog/decisions; the
397
+ * global store contributes meta, agent instructions, preferences, memories,
398
+ * and private notes. Returns null when neither side has anything.
399
+ */
400
+ function readMergedProjectContext(options = {}) {
401
+ const resolved = resolveProjectContext(options);
402
+ const managed = resolved.globalDir ? (0, project_1.readProjectContext)(resolved.globalDir) : null;
403
+ if (!managed && !resolved.repoContextDir)
404
+ return null;
405
+ const ctx = managed || {
406
+ meta: {
407
+ name: resolved.projectName || path.basename(resolved.repoRoot || ""),
408
+ description: "",
409
+ created_at: "",
410
+ updated_at: "",
411
+ },
412
+ instructions: "",
413
+ preferences: { tone: "", stack: "", focus: "" },
414
+ prd: "",
415
+ todo: "",
416
+ features: "",
417
+ changelog: "",
418
+ decisions: "",
419
+ memories: [],
420
+ privateNotes: "",
421
+ };
422
+ for (const { field, file } of MERGED_CONTEXT_FIELDS) {
423
+ const read = readContextFile(resolved, file);
424
+ if (read && read.source === "repo") {
425
+ ctx[field] = read.content;
426
+ }
427
+ }
428
+ return ctx;
429
+ }
430
+ /**
431
+ * Build the LLM system-prompt injection from the merged (repo-overlaid)
432
+ * context. Same output format as lib/project.ts buildProjectContextInjection.
433
+ */
434
+ function buildMergedProjectContextInjection(options = {}) {
435
+ const ctx = readMergedProjectContext(options);
436
+ if (!ctx)
437
+ return null;
438
+ return (0, project_1.buildProjectContextInjectionFromContext)(ctx);
439
+ }
440
+ /**
441
+ * The full precedence model the CLI actually implements, in one place.
442
+ * Rendered by help text, docs, and `youmd status` — keep this table in
443
+ * sync with config.ts (env/config), this module (project overlay), and
444
+ * youstack.ts (manifest discovery).
445
+ */
446
+ exports.PRECEDENCE = [
447
+ {
448
+ domain: "config",
449
+ order: [
450
+ "env vars (YOUMD_API_KEY, YOUMD_API_URL)",
451
+ "local project config (./.youmd/config.json)",
452
+ "global config (~/.youmd/config.json)",
453
+ ],
454
+ note: "env always wins; the local bundle config only applies inside an initialized project directory",
455
+ },
456
+ {
457
+ domain: "project context",
458
+ order: [
459
+ "repo project-context/ directory",
460
+ "global overlay (~/.youmd/projects/<name>/)",
461
+ ],
462
+ note: "repo wins on file conflicts; readers see the overlay union of both sides",
463
+ },
464
+ {
465
+ domain: "stack layout",
466
+ order: [
467
+ "canonical stacks/<slug>/youstack.json",
468
+ "legacy youstack.json, .you/youstack.json, youstacks/<slug>/youstack.json",
469
+ ],
470
+ note: "canonical manifests are discovered first; legacy locations still load when no canonical manifest exists",
471
+ },
472
+ ];
473
+ /** Render the precedence table as plain text lines (for help text/docs). */
474
+ function renderPrecedence() {
475
+ return exports.PRECEDENCE.map((rule) => `${rule.domain}: ${rule.order.join(" > ")} — ${rule.note}`);
476
+ }
477
+ function shortenHome(p) {
478
+ const home = os.homedir();
479
+ return p.startsWith(home + path.sep) || p === home ? p.replace(home, "~") : p;
480
+ }
481
+ /**
482
+ * Detect actually-active shadowing that is likely to surprise:
483
+ * - YOUMD_API_KEY/YOUMD_API_URL env overriding a logged-in session/config
484
+ * - repo project-context files shadowing global overlay copies
485
+ * - a canonical stack manifest shadowing legacy manifest locations
486
+ * Returns at most one warning per domain occurrence — callers print each
487
+ * as a single dim line, once per invocation.
488
+ */
489
+ function detectShadowing(input = {}) {
490
+ const cwd = input.cwd || process.cwd();
491
+ const env = input.env || { apiKey: (0, config_1.getEnvApiKey)(), apiUrl: (0, config_1.getEnvApiUrl)() };
492
+ const config = input.globalConfig || (0, config_1.readGlobalConfig)();
493
+ const warnings = [];
494
+ if (env.apiKey && config.token) {
495
+ warnings.push({
496
+ domain: "config",
497
+ shadowed: "logged-in session token (~/.youmd/config.json)",
498
+ shadowedBy: "YOUMD_API_KEY env var",
499
+ message: "YOUMD_API_KEY env var overrides your logged-in session token (~/.youmd/config.json)",
500
+ });
501
+ }
502
+ if (env.apiUrl && config.apiUrl) {
503
+ warnings.push({
504
+ domain: "config",
505
+ shadowed: "apiUrl from ~/.youmd/config.json",
506
+ shadowedBy: "YOUMD_API_URL env var",
507
+ message: "YOUMD_API_URL env var overrides apiUrl from ~/.youmd/config.json",
508
+ });
509
+ }
510
+ // Repo project-context files shadowing global overlay copies — one line.
511
+ const resolved = resolveProjectContext({ cwd });
512
+ const shadowedFiles = resolved.entries.filter((entry) => entry.shadows);
513
+ if (shadowedFiles.length > 0) {
514
+ const names = shadowedFiles.map((entry) => entry.fileName).join(", ");
515
+ warnings.push({
516
+ domain: "project-context",
517
+ shadowed: `global overlay copies (${shortenHome(resolved.globalContextDir || "")})`,
518
+ shadowedBy: `repo project-context/ (${shortenHome(resolved.repoContextDir || "")})`,
519
+ message: `repo project-context/ shadows ${shadowedFiles.length} global overlay file${shadowedFiles.length === 1 ? "" : "s"} (${names}) — repo wins`,
520
+ });
521
+ }
522
+ // Canonical stack layout shadowing legacy manifest locations — one line.
523
+ try {
524
+ const candidates = (0, youstack_1.findYouStackManifestCandidates)(cwd);
525
+ const canonical = candidates.find((candidate) => (0, youstack_1.isCanonicalYouStackManifestPath)(candidate));
526
+ const legacy = candidates.filter((candidate) => !(0, youstack_1.isCanonicalYouStackManifestPath)(candidate));
527
+ if (canonical && legacy.length > 0) {
528
+ warnings.push({
529
+ domain: "stack",
530
+ shadowed: legacy.map((entry) => shortenHome(entry)).join(", "),
531
+ shadowedBy: shortenHome(canonical),
532
+ message: `legacy stack manifest${legacy.length === 1 ? "" : "s"} ${legacy.map((entry) => shortenHome(entry)).join(", ")} shadowed by canonical ${shortenHome(canonical)}`,
533
+ });
534
+ }
535
+ }
536
+ catch {
537
+ // stack discovery is best-effort for shadow warnings
538
+ }
539
+ return warnings;
540
+ }
541
+ function getActiveRoots(cwd = process.cwd()) {
542
+ const envOverrides = [];
543
+ if ((0, config_1.getEnvApiKey)())
544
+ envOverrides.push("YOUMD_API_KEY");
545
+ if ((0, config_1.getEnvApiUrl)())
546
+ envOverrides.push("YOUMD_API_URL");
547
+ const localBundle = path.resolve(cwd, ".youmd");
548
+ const resolved = resolveProjectContext({ cwd });
549
+ let stackManifest = null;
550
+ try {
551
+ stackManifest = (0, youstack_1.findYouStackManifestCandidates)(cwd)[0] || null;
552
+ }
553
+ catch {
554
+ stackManifest = null;
555
+ }
556
+ return {
557
+ configPath: (0, config_1.getGlobalConfigPath)(),
558
+ envOverrides,
559
+ localBundleDir: (0, config_1.bundleLooksInitialized)(localBundle) ? localBundle : null,
560
+ repoContextDir: resolved.repoContextDir,
561
+ globalOverlayDir: resolved.globalDir && fs.existsSync(resolved.globalDir) ? resolved.globalDir : null,
562
+ stackManifest,
563
+ stackLayout: stackManifest
564
+ ? (0, youstack_1.isCanonicalYouStackManifestPath)(stackManifest)
565
+ ? "canonical"
566
+ : "legacy"
567
+ : null,
568
+ };
569
+ }
570
+ /** Render active roots as label/value lines for `youmd status`. */
571
+ function buildActiveRootsLines(roots) {
572
+ const lines = [];
573
+ const configSuffix = roots.envOverrides.length > 0
574
+ ? ` (env: ${roots.envOverrides.join(", ")})`
575
+ : "";
576
+ const configValue = roots.localBundleDir
577
+ ? `${shortenHome(roots.localBundleDir)} (local) + ${shortenHome(roots.configPath)}${configSuffix}`
578
+ : `${shortenHome(roots.configPath)}${configSuffix}`;
579
+ lines.push({ label: "config", value: configValue });
580
+ const projectParts = [];
581
+ if (roots.repoContextDir)
582
+ projectParts.push(`${shortenHome(roots.repoContextDir)} (repo)`);
583
+ if (roots.globalOverlayDir)
584
+ projectParts.push(`${shortenHome(roots.globalOverlayDir)} (overlay)`);
585
+ lines.push({
586
+ label: "project",
587
+ value: projectParts.length > 0 ? projectParts.join(" + ") : "none detected",
588
+ });
589
+ lines.push({
590
+ label: "stack",
591
+ value: roots.stackManifest
592
+ ? `${shortenHome(roots.stackManifest)} (${roots.stackLayout})`
593
+ : "none detected",
594
+ });
595
+ return lines;
596
+ }
597
+ //# sourceMappingURL=projectContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectContext.js","sourceRoot":"","sources":["../../src/lib/projectContext.ts"],"names":[],"mappings":"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"}