youmd 0.7.1 → 0.8.2

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 (125) hide show
  1. package/dist/commands/chat.d.ts.map +1 -1
  2. package/dist/commands/chat.js +3 -2
  3. package/dist/commands/chat.js.map +1 -1
  4. package/dist/commands/env.d.ts +2 -0
  5. package/dist/commands/env.d.ts.map +1 -1
  6. package/dist/commands/env.js +7 -3
  7. package/dist/commands/env.js.map +1 -1
  8. package/dist/commands/login.d.ts +1 -0
  9. package/dist/commands/login.d.ts.map +1 -1
  10. package/dist/commands/login.js +20 -4
  11. package/dist/commands/login.js.map +1 -1
  12. package/dist/commands/machine.d.ts +31 -0
  13. package/dist/commands/machine.d.ts.map +1 -1
  14. package/dist/commands/machine.js +610 -14
  15. package/dist/commands/machine.js.map +1 -1
  16. package/dist/commands/project-log.d.ts +13 -0
  17. package/dist/commands/project-log.d.ts.map +1 -0
  18. package/dist/commands/project-log.js +241 -0
  19. package/dist/commands/project-log.js.map +1 -0
  20. package/dist/commands/project.d.ts.map +1 -1
  21. package/dist/commands/project.js +872 -15
  22. package/dist/commands/project.js.map +1 -1
  23. package/dist/commands/prompts.d.ts +19 -0
  24. package/dist/commands/prompts.d.ts.map +1 -1
  25. package/dist/commands/prompts.js +304 -1
  26. package/dist/commands/prompts.js.map +1 -1
  27. package/dist/commands/pull.d.ts.map +1 -1
  28. package/dist/commands/pull.js +28 -8
  29. package/dist/commands/pull.js.map +1 -1
  30. package/dist/commands/push.d.ts +3 -1
  31. package/dist/commands/push.d.ts.map +1 -1
  32. package/dist/commands/push.js +26 -12
  33. package/dist/commands/push.js.map +1 -1
  34. package/dist/commands/skill.d.ts.map +1 -1
  35. package/dist/commands/skill.js +19 -15
  36. package/dist/commands/skill.js.map +1 -1
  37. package/dist/commands/stack.d.ts.map +1 -1
  38. package/dist/commands/stack.js +37 -17
  39. package/dist/commands/stack.js.map +1 -1
  40. package/dist/commands/status.d.ts.map +1 -1
  41. package/dist/commands/status.js +31 -0
  42. package/dist/commands/status.js.map +1 -1
  43. package/dist/commands/sync.d.ts +1 -0
  44. package/dist/commands/sync.d.ts.map +1 -1
  45. package/dist/commands/sync.js +51 -2
  46. package/dist/commands/sync.js.map +1 -1
  47. package/dist/index.js +125 -36
  48. package/dist/index.js.map +1 -1
  49. package/dist/lib/api.d.ts +324 -0
  50. package/dist/lib/api.d.ts.map +1 -1
  51. package/dist/lib/api.js +68 -0
  52. package/dist/lib/api.js.map +1 -1
  53. package/dist/lib/compiler.d.ts.map +1 -1
  54. package/dist/lib/compiler.js +10 -0
  55. package/dist/lib/compiler.js.map +1 -1
  56. package/dist/lib/daemon.d.ts +23 -0
  57. package/dist/lib/daemon.d.ts.map +1 -0
  58. package/dist/lib/daemon.js +166 -0
  59. package/dist/lib/daemon.js.map +1 -0
  60. package/dist/lib/first-run.d.ts +1 -1
  61. package/dist/lib/first-run.d.ts.map +1 -1
  62. package/dist/lib/first-run.js +8 -0
  63. package/dist/lib/first-run.js.map +1 -1
  64. package/dist/lib/machine-bootstrap-prompt.d.ts +17 -0
  65. package/dist/lib/machine-bootstrap-prompt.d.ts.map +1 -0
  66. package/dist/lib/machine-bootstrap-prompt.js +305 -0
  67. package/dist/lib/machine-bootstrap-prompt.js.map +1 -0
  68. package/dist/lib/machine-projects.d.ts +71 -0
  69. package/dist/lib/machine-projects.d.ts.map +1 -0
  70. package/dist/lib/machine-projects.js +510 -0
  71. package/dist/lib/machine-projects.js.map +1 -0
  72. package/dist/lib/machine-verify.d.ts +175 -0
  73. package/dist/lib/machine-verify.d.ts.map +1 -0
  74. package/dist/lib/machine-verify.js +684 -0
  75. package/dist/lib/machine-verify.js.map +1 -0
  76. package/dist/lib/portfolio-audit.d.ts +34 -0
  77. package/dist/lib/portfolio-audit.d.ts.map +1 -0
  78. package/dist/lib/portfolio-audit.js +254 -0
  79. package/dist/lib/portfolio-audit.js.map +1 -0
  80. package/dist/lib/portfolio-graph.d.ts +104 -0
  81. package/dist/lib/portfolio-graph.d.ts.map +1 -0
  82. package/dist/lib/portfolio-graph.js +281 -0
  83. package/dist/lib/portfolio-graph.js.map +1 -0
  84. package/dist/lib/project-strategy.d.ts +45 -0
  85. package/dist/lib/project-strategy.d.ts.map +1 -0
  86. package/dist/lib/project-strategy.js +234 -0
  87. package/dist/lib/project-strategy.js.map +1 -0
  88. package/dist/lib/reusable-patterns.d.ts +30 -0
  89. package/dist/lib/reusable-patterns.d.ts.map +1 -0
  90. package/dist/lib/reusable-patterns.js +375 -0
  91. package/dist/lib/reusable-patterns.js.map +1 -0
  92. package/dist/lib/skill-catalog.d.ts.map +1 -1
  93. package/dist/lib/skill-catalog.js +20 -0
  94. package/dist/lib/skill-catalog.js.map +1 -1
  95. package/dist/lib/skills.d.ts +1 -0
  96. package/dist/lib/skills.d.ts.map +1 -1
  97. package/dist/lib/skills.js +43 -13
  98. package/dist/lib/skills.js.map +1 -1
  99. package/dist/lib/version.d.ts +2 -0
  100. package/dist/lib/version.d.ts.map +1 -0
  101. package/dist/lib/version.js +63 -0
  102. package/dist/lib/version.js.map +1 -0
  103. package/dist/mcp/registry.d.ts +5 -1
  104. package/dist/mcp/registry.d.ts.map +1 -1
  105. package/dist/mcp/registry.js +426 -2
  106. package/dist/mcp/registry.js.map +1 -1
  107. package/dist/mcp/server.d.ts +2 -0
  108. package/dist/mcp/server.d.ts.map +1 -1
  109. package/dist/mcp/server.js +50 -5
  110. package/dist/mcp/server.js.map +1 -1
  111. package/package.json +1 -1
  112. package/scripts/env-vault/README.md +37 -10
  113. package/scripts/env-vault/backup.sh +70 -4
  114. package/scripts/env-vault/restore.sh +117 -9
  115. package/scripts/skillstack-sync/README.md +13 -6
  116. package/scripts/skillstack-sync/bootstrap-new-mac.sh +19 -5
  117. package/scripts/skillstack-sync/capture-agent-config.sh +110 -0
  118. package/scripts/skillstack-sync/com.youmd.context-sync.plist +38 -0
  119. package/scripts/skillstack-sync/com.youmd.identity-sync.plist +3 -1
  120. package/scripts/skillstack-sync/com.youmd.skillstack-sync.plist +1 -1
  121. package/scripts/skillstack-sync/context-sync.sh +412 -0
  122. package/scripts/skillstack-sync/install-daemons.sh +7 -3
  123. package/scripts/skillstack-sync/restore-agent-config.sh +152 -0
  124. package/scripts/skillstack-sync/sync.sh +20 -6
  125. package/skills/machine-bootstrap.md +243 -0
@@ -0,0 +1,510 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.githubRepoFromUrl = githubRepoFromUrl;
37
+ exports.inferStackName = inferStackName;
38
+ exports.buildMachineProjectPlan = buildMachineProjectPlan;
39
+ const path = __importStar(require("path"));
40
+ const ACTIVE_STATUS_RE = /\b(active|current|in.?progress|building|maintained|live|ongoing)\b/i;
41
+ const INACTIVE_STATUS_RE = /\b(archived|inactive|paused|dormant|old|deprecated|sunset)\b/i;
42
+ const DEFAULT_API_DOCS_URL = "https://you.md/api/v1/docs/reference";
43
+ const DEFAULT_MCP_DOCS_URL = "https://you.md/.well-known/mcp.json";
44
+ const MACHINE_SETUP_FOCUS_STATUSES = new Set(["top-priority", "focusing"]);
45
+ function asRecord(value) {
46
+ return typeof value === "object" && value !== null && !Array.isArray(value)
47
+ ? value
48
+ : {};
49
+ }
50
+ function stringField(record, keys) {
51
+ for (const key of keys) {
52
+ const value = record[key];
53
+ if (typeof value === "string" && value.trim())
54
+ return value.trim();
55
+ }
56
+ return "";
57
+ }
58
+ function stringArrayField(record, keys) {
59
+ for (const key of keys) {
60
+ const value = record[key];
61
+ if (Array.isArray(value)) {
62
+ return value
63
+ .filter((item) => typeof item === "string")
64
+ .map((item) => item.trim())
65
+ .filter(Boolean);
66
+ }
67
+ }
68
+ return [];
69
+ }
70
+ function optionalNumberField(record, keys) {
71
+ for (const key of keys) {
72
+ const value = record[key];
73
+ if (typeof value === "number" && Number.isFinite(value))
74
+ return value;
75
+ if (typeof value === "string" && value.trim() && Number.isFinite(Number(value))) {
76
+ return Number(value);
77
+ }
78
+ }
79
+ return undefined;
80
+ }
81
+ function stableDirName(input) {
82
+ const cleaned = input
83
+ .trim()
84
+ .replace(/\.git$/i, "")
85
+ .replace(/[^a-zA-Z0-9._-]+/g, "-")
86
+ .replace(/^-+|-+$/g, "");
87
+ return cleaned || "project";
88
+ }
89
+ function githubRepoFromUrl(input) {
90
+ const raw = input.trim();
91
+ if (!raw)
92
+ return null;
93
+ const ssh = raw.match(/^git@github\.com:([^/\s]+)\/([^/\s#?]+?)(?:\.git)?(?:[#?].*)?$/i);
94
+ if (ssh) {
95
+ const owner = ssh[1];
96
+ const repo = ssh[2].replace(/\.git$/i, "");
97
+ return {
98
+ owner,
99
+ repo,
100
+ url: `https://github.com/${owner}/${repo}`,
101
+ cloneSpec: `${owner}/${repo}`,
102
+ };
103
+ }
104
+ const https = raw.match(/^https?:\/\/github\.com\/([^/\s]+)\/([^/\s#?]+?)(?:\.git)?(?:[#?].*)?$/i);
105
+ if (https) {
106
+ const owner = https[1];
107
+ const repo = https[2].replace(/\.git$/i, "");
108
+ return {
109
+ owner,
110
+ repo,
111
+ url: `https://github.com/${owner}/${repo}`,
112
+ cloneSpec: `${owner}/${repo}`,
113
+ };
114
+ }
115
+ const shorthand = raw.match(/^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/);
116
+ if (shorthand) {
117
+ const owner = shorthand[1];
118
+ const repo = shorthand[2].replace(/\.git$/i, "");
119
+ return {
120
+ owner,
121
+ repo,
122
+ url: `https://github.com/${owner}/${repo}`,
123
+ cloneSpec: `${owner}/${repo}`,
124
+ };
125
+ }
126
+ return null;
127
+ }
128
+ function findGithubUrl(record) {
129
+ const direct = stringField(record, [
130
+ "githubUrl",
131
+ "github_url",
132
+ "repoUrl",
133
+ "repo_url",
134
+ "repositoryUrl",
135
+ "repository_url",
136
+ "github",
137
+ "repo",
138
+ "repository",
139
+ "url",
140
+ ]);
141
+ if (direct && githubRepoFromUrl(direct))
142
+ return direct;
143
+ for (const value of Object.values(record)) {
144
+ if (typeof value !== "string")
145
+ continue;
146
+ const match = value.match(/(?:https?:\/\/github\.com\/[^\s),]+|git@github\.com:[^\s),]+)/i);
147
+ if (match && githubRepoFromUrl(match[0]))
148
+ return match[0];
149
+ }
150
+ return "";
151
+ }
152
+ function parseDate(value) {
153
+ if (typeof value === "number" && Number.isFinite(value)) {
154
+ const date = new Date(value);
155
+ return Number.isNaN(date.getTime()) ? null : date;
156
+ }
157
+ if (typeof value !== "string" || !value.trim())
158
+ return null;
159
+ const date = new Date(value);
160
+ return Number.isNaN(date.getTime()) ? null : date;
161
+ }
162
+ function projectUpdatedAt(record) {
163
+ for (const key of [
164
+ "pushedAt",
165
+ "pushed_at",
166
+ "lastActiveAt",
167
+ "last_active_at",
168
+ "lastCommitAt",
169
+ "last_commit_at",
170
+ "updatedAt",
171
+ "updated_at",
172
+ "lastUpdated",
173
+ "last_updated",
174
+ "modifiedAt",
175
+ "modified_at",
176
+ ]) {
177
+ const date = parseDate(record[key]);
178
+ if (date)
179
+ return date;
180
+ }
181
+ return null;
182
+ }
183
+ function recordArray(value) {
184
+ return Array.isArray(value)
185
+ ? value
186
+ .map(asRecord)
187
+ .filter((record) => Object.keys(record).length > 0)
188
+ : [];
189
+ }
190
+ function portfolioGraphSources(root, explicitGraph) {
191
+ const rootPortfolio = asRecord(root.portfolio);
192
+ const candidates = [
193
+ explicitGraph,
194
+ root.portfolioGraph,
195
+ root.portfolio_graph,
196
+ root.portfolioGraphSnapshot,
197
+ root.portfolio_graph_snapshot,
198
+ rootPortfolio.graph,
199
+ rootPortfolio.portfolioGraph,
200
+ rootPortfolio,
201
+ ];
202
+ const seen = new Set();
203
+ const sources = [];
204
+ for (const candidate of candidates) {
205
+ const record = asRecord(candidate);
206
+ if (!Object.keys(record).length || seen.has(record))
207
+ continue;
208
+ if (Array.isArray(record.projects) ||
209
+ Array.isArray(record.portfolioProjects) ||
210
+ Array.isArray(record.recentTrackedProjects)) {
211
+ sources.push(record);
212
+ seen.add(record);
213
+ }
214
+ }
215
+ return sources;
216
+ }
217
+ function graphDate(value) {
218
+ const date = parseDate(value);
219
+ return date ? date.toISOString() : undefined;
220
+ }
221
+ function portfolioGraphProjectRecords(sources) {
222
+ const records = [];
223
+ for (const source of sources) {
224
+ const projects = [
225
+ ...recordArray(source.projects),
226
+ ...recordArray(source.portfolioProjects),
227
+ ];
228
+ for (const project of projects) {
229
+ const name = stringField(project, ["name", "title", "project", "slug"]);
230
+ if (!name)
231
+ continue;
232
+ const repoFullName = stringField(project, ["repoFullName", "fullName", "repo", "repository"]);
233
+ const repoUrl = stringField(project, ["repoUrl", "githubUrl", "github_url", "repositoryUrl", "repository_url"]);
234
+ const productUrl = stringField(project, ["productUrl", "projectUrl", "homepage", "website"]);
235
+ records.push({
236
+ ...project,
237
+ name,
238
+ githubUrl: repoUrl || repoFullName,
239
+ repo: repoFullName || repoUrl,
240
+ website: productUrl,
241
+ stackName: stringField(project, ["stackName", "stack", "stack_name"]),
242
+ updatedAt: graphDate(project.lastActivityAt) || graphDate(project.updatedAt) || project.updatedAt,
243
+ lastActiveAt: graphDate(project.lastActivityAt) || project.lastActivityAt,
244
+ _machineSource: "portfolio-graph",
245
+ });
246
+ }
247
+ }
248
+ return records;
249
+ }
250
+ function isPortfolioGraphRecord(record) {
251
+ return stringField(record, ["_machineSource"]) === "portfolio-graph";
252
+ }
253
+ function portfolioMachineSetupEligibility(record) {
254
+ const status = stringField(record, ["status", "state"]).toLowerCase();
255
+ const focusStatus = stringField(record, ["focusStatus", "focus_status"]).toLowerCase();
256
+ if (status !== "active") {
257
+ return { eligible: false, reason: `not active (${status || "unset"})` };
258
+ }
259
+ if (!MACHINE_SETUP_FOCUS_STATUSES.has(focusStatus)) {
260
+ return { eligible: false, reason: `focus not setup-eligible (${focusStatus || "unset"})` };
261
+ }
262
+ return { eligible: true };
263
+ }
264
+ function portfolioGraphTrackedProjects(sources) {
265
+ const repos = [];
266
+ for (const source of sources) {
267
+ for (const record of recordArray(source.recentTrackedProjects)) {
268
+ const fullName = stringField(record, ["fullName", "repoFullName", "repo", "repository"]);
269
+ const name = stringField(record, ["name", "repoName", "directoryName"]) || fullName.split("/").pop() || "";
270
+ const url = stringField(record, ["url", "repoUrl", "githubUrl"]) || (fullName ? `https://github.com/${fullName}` : "");
271
+ if (!name || !fullName || !githubRepoFromUrl(url || fullName))
272
+ continue;
273
+ repos.push({
274
+ name,
275
+ fullName,
276
+ url,
277
+ pushedAt: graphDate(record.pushedAt),
278
+ updatedAt: graphDate(record.updatedAt),
279
+ description: stringField(record, ["description", "insight", "recentProgress", "highLevelGoal"]) || null,
280
+ homepage: stringField(record, ["projectUrl", "homepage", "productUrl"]) || null,
281
+ isPrivate: record.isPrivate === true,
282
+ });
283
+ }
284
+ }
285
+ return repos;
286
+ }
287
+ function inferStackName(input) {
288
+ const value = input.toLowerCase();
289
+ if (value.includes("youmd") || value.includes("you-md") || value.includes("you.md"))
290
+ return "YouStack";
291
+ if (value.includes("agent-shared"))
292
+ return "Shared Agent Stack";
293
+ if (value.includes("bamfsite") || value.includes("bamfos") || value.includes("bamf agency"))
294
+ return "BAMFOSStack";
295
+ if (value.includes("bamfaiapp") || value.includes("bamf-ai") || value.includes("bamf.ai"))
296
+ return "BAMFStack";
297
+ if (value.includes("badapp") || value.includes("badfit"))
298
+ return "BadStack";
299
+ if (value.includes("folder"))
300
+ return "FolderMDStack";
301
+ if (value.includes("myo"))
302
+ return "MyoStack";
303
+ if (value.includes("scistack"))
304
+ return "SciStack";
305
+ if (value.includes("bigbounce"))
306
+ return "AstroStack";
307
+ if (value.includes("hubify"))
308
+ return "HubStack";
309
+ if (value.includes("hcomputer") || value.includes("h-computer"))
310
+ return "HComputerStack";
311
+ if (value.includes("fantasy"))
312
+ return "FantasyStack";
313
+ if (value.includes("newsletter"))
314
+ return "ContentStack";
315
+ if (value.includes("claws"))
316
+ return "ClawsStack";
317
+ return "Project YouStack";
318
+ }
319
+ function classifyProject(record, now, activeDays) {
320
+ const status = stringField(record, ["status", "state"]);
321
+ const updatedAt = projectUpdatedAt(record);
322
+ if (updatedAt) {
323
+ const ageDays = Math.floor((now.getTime() - updatedAt.getTime()) / 86400000);
324
+ if (ageDays <= activeDays) {
325
+ return {
326
+ recency: "recent",
327
+ reason: `updated ${ageDays}d ago`,
328
+ updatedAt: updatedAt.toISOString(),
329
+ };
330
+ }
331
+ return {
332
+ recency: "older",
333
+ reason: `last update ${ageDays}d ago`,
334
+ updatedAt: updatedAt.toISOString(),
335
+ };
336
+ }
337
+ if (status && INACTIVE_STATUS_RE.test(status)) {
338
+ return { recency: "older", reason: `status: ${status}` };
339
+ }
340
+ if (status && ACTIVE_STATUS_RE.test(status)) {
341
+ return { recency: "active-undated", reason: `status: ${status}` };
342
+ }
343
+ return { recency: "active-undated", reason: "listed in You.md projects" };
344
+ }
345
+ function buildMachineProjectPlan(youJson, options) {
346
+ const rootDir = path.resolve(options.rootDir);
347
+ const activeDays = options.activeDays ?? 90;
348
+ const now = options.now ?? new Date();
349
+ const apiDocsUrl = options.apiDocsUrl ?? DEFAULT_API_DOCS_URL;
350
+ const mcpDocsUrl = options.mcpDocsUrl ?? DEFAULT_MCP_DOCS_URL;
351
+ const root = asRecord(youJson);
352
+ const projects = Array.isArray(root.projects) ? root.projects : [];
353
+ const graphSources = portfolioGraphSources(root, options.portfolioGraph);
354
+ const graphProjectRecords = portfolioGraphProjectRecords(graphSources);
355
+ const graphGithubProjects = portfolioGraphTrackedProjects(graphSources);
356
+ const requireFocusedPortfolioProjects = graphProjectRecords.length > 0 && options.includeInactive !== true;
357
+ const seen = new Set();
358
+ const recent = [];
359
+ const older = [];
360
+ const skipped = [];
361
+ const pushCandidate = (candidate, dedupeKey) => {
362
+ const key = dedupeKey.toLowerCase();
363
+ if (seen.has(key)) {
364
+ skipped.push({ name: candidate.name, reason: "duplicate repo/project target" });
365
+ return;
366
+ }
367
+ seen.add(key);
368
+ if (candidate.recency === "older")
369
+ older.push(candidate);
370
+ else
371
+ recent.push(candidate);
372
+ };
373
+ const bundleRecords = [
374
+ ...graphProjectRecords,
375
+ ...projects.map(asRecord),
376
+ ];
377
+ const githubProjectSources = [
378
+ ...graphGithubProjects,
379
+ ...(options.githubProjects ?? []),
380
+ ];
381
+ for (const repo of githubProjectSources) {
382
+ const github = githubRepoFromUrl(repo.url || repo.fullName);
383
+ if (!github)
384
+ continue;
385
+ const matchingBundle = bundleRecords.find((record) => {
386
+ const githubInput = findGithubUrl(record);
387
+ const bundleGithub = githubInput ? githubRepoFromUrl(githubInput) : null;
388
+ const bundleName = stringField(record, ["name", "title", "project"]).toLowerCase();
389
+ return (bundleGithub?.cloneSpec.toLowerCase() === github.cloneSpec.toLowerCase() ||
390
+ bundleName === repo.name.toLowerCase() ||
391
+ bundleName === repo.fullName.toLowerCase());
392
+ });
393
+ const name = stringField(matchingBundle ?? {}, ["name", "title", "project"]) || repo.name;
394
+ const record = {
395
+ ...(matchingBundle ?? {}),
396
+ pushedAt: repo.pushedAt,
397
+ updatedAt: repo.updatedAt,
398
+ status: stringField(matchingBundle ?? {}, ["status", "state"]) || "active from GitHub",
399
+ };
400
+ const fromPortfolioGraph = isPortfolioGraphRecord(matchingBundle ?? {});
401
+ if (requireFocusedPortfolioProjects) {
402
+ if (!fromPortfolioGraph) {
403
+ skipped.push({ name, reason: "not in focused portfolio graph for machine setup" });
404
+ continue;
405
+ }
406
+ const eligibility = portfolioMachineSetupEligibility(matchingBundle ?? {});
407
+ if (!eligibility.eligible) {
408
+ skipped.push({ name, reason: eligibility.reason ?? "not setup-eligible" });
409
+ continue;
410
+ }
411
+ }
412
+ const classified = classifyProject(record, now, activeDays);
413
+ const targetDirName = stableDirName(github.repo);
414
+ pushCandidate({
415
+ name,
416
+ slug: stringField(matchingBundle ?? {}, ["slug"]),
417
+ repoName: github.repo,
418
+ targetDirName,
419
+ githubUrl: github.url,
420
+ cloneSpec: github.cloneSpec,
421
+ projectUrl: repo.homepage || undefined,
422
+ fullName: repo.fullName,
423
+ status: stringField(record, ["status", "state"]) || undefined,
424
+ statusSource: stringField(record, ["statusSource", "status_source"]) || undefined,
425
+ focusStatus: stringField(record, ["focusStatus", "focus_status"]) || undefined,
426
+ focusRank: optionalNumberField(record, ["focusRank", "focus_rank"]),
427
+ machineSetupEligible: fromPortfolioGraph ? portfolioMachineSetupEligibility(matchingBundle ?? {}).eligible : undefined,
428
+ updatedAt: classified.updatedAt,
429
+ recency: classified.recency,
430
+ reason: classified.reason,
431
+ source: matchingBundle ? (fromPortfolioGraph ? "portfolio-graph+github" : "youmd+github") : "github",
432
+ stackName: stringField(record, ["stackName", "stack", "stack_name"]) || inferStackName(repo.fullName),
433
+ goal: stringField(record, ["goal", "highLevelGoal"]),
434
+ focus: stringField(record, ["focus", "recentProgress", "insight"]),
435
+ docs: stringArrayField(record, ["docs", "docsUrls"]),
436
+ environments: stringArrayField(record, ["environments"]),
437
+ tags: stringArrayField(record, ["tags"]),
438
+ apiDocsUrl,
439
+ mcpDocsUrl,
440
+ }, github.cloneSpec);
441
+ }
442
+ for (const record of bundleRecords) {
443
+ const name = stringField(record, ["name", "title", "project"]) || "untitled-project";
444
+ const githubInput = findGithubUrl(record);
445
+ const github = githubInput ? githubRepoFromUrl(githubInput) : null;
446
+ const repoName = github?.repo || stableDirName(name);
447
+ const targetDirName = stableDirName(repoName);
448
+ const dedupeKey = github?.cloneSpec.toLowerCase() || targetDirName.toLowerCase();
449
+ const classified = classifyProject(record, now, activeDays);
450
+ const fromPortfolioGraph = isPortfolioGraphRecord(record);
451
+ if (requireFocusedPortfolioProjects) {
452
+ if (!fromPortfolioGraph) {
453
+ skipped.push({ name, reason: "superseded by focused portfolio graph selection gate" });
454
+ continue;
455
+ }
456
+ const eligibility = portfolioMachineSetupEligibility(record);
457
+ if (!eligibility.eligible) {
458
+ skipped.push({ name, reason: eligibility.reason ?? "not setup-eligible" });
459
+ continue;
460
+ }
461
+ }
462
+ const candidate = {
463
+ name,
464
+ slug: stringField(record, ["slug"]),
465
+ repoName,
466
+ targetDirName,
467
+ githubUrl: github?.url,
468
+ cloneSpec: github?.cloneSpec,
469
+ projectUrl: stringField(record, ["website", "homepage", "projectUrl", "project_url"]) || undefined,
470
+ fullName: github?.cloneSpec,
471
+ status: stringField(record, ["status", "state"]) || undefined,
472
+ statusSource: stringField(record, ["statusSource", "status_source"]) || undefined,
473
+ focusStatus: stringField(record, ["focusStatus", "focus_status"]) || undefined,
474
+ focusRank: optionalNumberField(record, ["focusRank", "focus_rank"]),
475
+ machineSetupEligible: fromPortfolioGraph ? portfolioMachineSetupEligibility(record).eligible : undefined,
476
+ updatedAt: classified.updatedAt,
477
+ recency: classified.recency,
478
+ reason: classified.reason,
479
+ source: fromPortfolioGraph ? "portfolio-graph" : "youmd",
480
+ stackName: stringField(record, ["stackName", "stack", "stack_name"]) || inferStackName(github?.cloneSpec || name),
481
+ goal: stringField(record, ["goal", "highLevelGoal"]),
482
+ focus: stringField(record, ["focus", "recentProgress", "insight"]),
483
+ docs: stringArrayField(record, ["docs", "docsUrls"]),
484
+ environments: stringArrayField(record, ["environments"]),
485
+ tags: stringArrayField(record, ["tags"]),
486
+ apiDocsUrl,
487
+ mcpDocsUrl,
488
+ };
489
+ if (!github &&
490
+ candidate.stackName !== "Project YouStack" &&
491
+ recent.some((existing) => existing.source !== "youmd" && existing.stackName === candidate.stackName)) {
492
+ skipped.push({ name, reason: `covered by recent ${candidate.stackName} repo` });
493
+ continue;
494
+ }
495
+ pushCandidate(candidate, dedupeKey);
496
+ }
497
+ return {
498
+ rootDir,
499
+ recent,
500
+ older,
501
+ skipped,
502
+ sourceCounts: {
503
+ portfolioGraphProjects: graphProjectRecords.length,
504
+ portfolioGraphTrackedProjects: graphGithubProjects.length,
505
+ githubProjects: options.githubProjects?.length ?? 0,
506
+ bundleProjects: projects.length,
507
+ },
508
+ };
509
+ }
510
+ //# sourceMappingURL=machine-projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-projects.js","sourceRoot":"","sources":["../../src/lib/machine-projects.ts"],"names":[],"mappings":"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"}