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,281 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PORTFOLIO_GRAPH_BRIEF = void 0;
4
+ exports.portfolioGraphBriefFromSnapshot = portfolioGraphBriefFromSnapshot;
5
+ exports.formatPortfolioGraphBriefMarkdown = formatPortfolioGraphBriefMarkdown;
6
+ exports.getPortfolioGraphProjectSlice = getPortfolioGraphProjectSlice;
7
+ const SURFACE_RISKS = new Set(["low", "medium", "high"]);
8
+ const EDGE_TIERS = new Set(["dependent", "feature", "optional", "dev-only", "admin", "workspace", "user-level"]);
9
+ const INTEGRATION_TYPES = new Set(["admin", "workspace", "user-level", "developer-agent"]);
10
+ const PATTERN_STATUSES = new Set(["canonical", "candidate", "deprecated"]);
11
+ function asString(value, fallback = "") {
12
+ return typeof value === "string" && value.trim() ? value.trim() : fallback;
13
+ }
14
+ function asStringArray(value) {
15
+ if (!Array.isArray(value))
16
+ return [];
17
+ return value.flatMap((item) => {
18
+ if (typeof item !== "string")
19
+ return [];
20
+ const trimmed = item.trim();
21
+ return trimmed ? [trimmed] : [];
22
+ });
23
+ }
24
+ function oneOf(value, allowed, fallback) {
25
+ return typeof value === "string" && allowed.has(value) ? value : fallback;
26
+ }
27
+ exports.PORTFOLIO_GRAPH_BRIEF = {
28
+ generatedFrom: "project-context/PROJECT_PORTFOLIO_GRAPH_AND_REUSE_PRD_2026-06-17.md",
29
+ projects: [
30
+ {
31
+ slug: "youmd",
32
+ stack: "YouStack",
33
+ goal: "Make every authorized agent start with the right human, project, machine, skill, and dependency context.",
34
+ focus: "Portfolio graph, API/env intelligence, reusable pattern catalog, and dashboard surfaces.",
35
+ },
36
+ {
37
+ slug: "bamfaiapp",
38
+ stack: "BAMFStack",
39
+ goal: "Operate the BAMF app agent while exposing only safe API/MCP/skill-stack adapters externally.",
40
+ focus: "Protected harness versus public BAMFStack boundary.",
41
+ },
42
+ {
43
+ slug: "bamfsite",
44
+ stack: "BAMFOSStack",
45
+ goal: "Keep agency/admin automation powerful without duplicating product APIs or leaking internal IP.",
46
+ focus: "Admin-only integrations, browser/session operators, and API ownership hygiene.",
47
+ },
48
+ {
49
+ slug: "hubify",
50
+ stack: "HubStack",
51
+ goal: "Make research operations durable, queryable, and agent-operated.",
52
+ focus: "Science stack discipline, lab status, and research publishing loops.",
53
+ },
54
+ ],
55
+ apiSurfaces: [
56
+ {
57
+ slug: "youmd-api",
58
+ ownerProject: "youmd",
59
+ ownerStack: "YouStack",
60
+ risk: "high",
61
+ writePolicy: "propose",
62
+ features: ["identity", "projects", "memories", "sources", "activity", "stacks"],
63
+ },
64
+ {
65
+ slug: "youmd-mcp",
66
+ ownerProject: "youmd",
67
+ ownerStack: "YouStack",
68
+ risk: "medium",
69
+ writePolicy: "read-only",
70
+ features: ["agent brief", "project context", "stack capabilities", "activity trail"],
71
+ },
72
+ {
73
+ slug: "bamf-ai-api",
74
+ ownerProject: "bamfaiapp",
75
+ ownerStack: "BAMFStack",
76
+ risk: "high",
77
+ writePolicy: "approved-write",
78
+ features: ["creator context", "copy workflows", "media context", "app agent support"],
79
+ },
80
+ {
81
+ slug: "bamfos-admin-api",
82
+ ownerProject: "bamfsite",
83
+ ownerStack: "BAMFOSStack",
84
+ risk: "high",
85
+ writePolicy: "owner-only",
86
+ features: ["admin workflows", "browser/session operators", "agency operations"],
87
+ },
88
+ ],
89
+ dependencyEdges: [
90
+ {
91
+ fromProject: "bamfaiapp",
92
+ toSurface: "bamfos-admin-api",
93
+ tier: "feature",
94
+ integrationType: "admin",
95
+ features: ["agency context", "protected admin actions", "operator handoffs"],
96
+ failureImpact: "BAMF.ai can run core product flows, but admin/agency enhanced context degrades.",
97
+ },
98
+ {
99
+ fromProject: "bamfsite",
100
+ toSurface: "bamf-ai-api",
101
+ tier: "dependent",
102
+ integrationType: "developer-agent",
103
+ features: ["product context reuse", "shared creator account awareness", "cross-project API routing"],
104
+ failureImpact: "Duplicate endpoints and inconsistent ownership become more likely.",
105
+ },
106
+ {
107
+ fromProject: "hubify",
108
+ toSurface: "youmd-api",
109
+ tier: "dev-only",
110
+ integrationType: "developer-agent",
111
+ features: ["agent startup context", "project memory", "research stack routing"],
112
+ failureImpact: "Local agents lose Houston-specific project and stack context.",
113
+ },
114
+ ],
115
+ reusablePatterns: [
116
+ { slug: "api-mcp-skillstack-first", owner: "youmd", status: "canonical" },
117
+ { slug: "passwordless-auth", owner: "youmd", status: "canonical" },
118
+ { slug: "agentic-shell-layout", owner: "youmd", status: "canonical" },
119
+ { slug: "streaming-agent-response", owner: "youmd", status: "candidate" },
120
+ ],
121
+ skillPropagation: [
122
+ {
123
+ skill: "portfolio-graph-auditor",
124
+ owner: "~/.agent-shared/claude-skills",
125
+ projects: [
126
+ { project: "youmd", status: "synced" },
127
+ { project: "bamfaiapp", status: "cataloged" },
128
+ { project: "bamfsite", status: "cataloged" },
129
+ ],
130
+ },
131
+ {
132
+ skill: "machine-sync",
133
+ owner: "~/.agent-shared/claude-skills",
134
+ projects: [
135
+ { project: "youmd", status: "synced" },
136
+ { project: "bamfaiapp", status: "cataloged" },
137
+ { project: "bamfsite", status: "cataloged" },
138
+ ],
139
+ },
140
+ ],
141
+ agentCommands: [
142
+ "youmd skill improve",
143
+ "youmd skill install portfolio-graph-auditor",
144
+ "youmd skill sync",
145
+ "youmd project portfolio-audit --root ~/Desktop/CODE_2025",
146
+ "youmd project env-audit --root ~/Desktop/CODE_2025 --fingerprints",
147
+ ],
148
+ guardrails: [
149
+ "Do not print .env.local values or decrypted secret contents.",
150
+ "Before adding an API/MCP route, check the portfolio graph for an existing owner.",
151
+ "Treat You.md as the additive source-catalog layer; keep canonical source in the owning repo or stack.",
152
+ "Distinguish public/installable skill stacks from protected product-agent harnesses.",
153
+ ],
154
+ };
155
+ function portfolioGraphBriefFromSnapshot(snapshot, fallback = exports.PORTFOLIO_GRAPH_BRIEF) {
156
+ if (!snapshot || !Array.isArray(snapshot.projects) || snapshot.projects.length === 0) {
157
+ return fallback;
158
+ }
159
+ return {
160
+ generatedFrom: `authenticated /api/v1/me/portfolio/graph (${snapshot.projects.length} projects)`,
161
+ projects: snapshot.projects.map((project) => ({
162
+ slug: asString(project.slug, asString(project.name, "unknown-project")),
163
+ stack: asString(project.stackName, asString(project.stackSlug, "Project Stack")),
164
+ goal: asString(project.goal, asString(project.summary, "No goal captured yet.")),
165
+ focus: asString(project.focus, asString(project.summary, "No focus captured yet.")),
166
+ })),
167
+ apiSurfaces: (snapshot.apiSurfaces ?? []).map((surface) => ({
168
+ slug: asString(surface.slug, asString(surface.name, "unknown-surface")),
169
+ ownerProject: asString(surface.ownerProjectSlug, asString(surface.ownerProject, "unknown-project")),
170
+ ownerStack: asString(surface.ownerStack, "Project Stack"),
171
+ risk: oneOf(surface.risk, SURFACE_RISKS, "medium"),
172
+ writePolicy: asString(surface.writePolicy, "review-required"),
173
+ features: asStringArray(surface.features),
174
+ })),
175
+ dependencyEdges: (snapshot.dependencyEdges ?? []).map((edge) => ({
176
+ fromProject: asString(edge.fromProjectSlug, asString(edge.fromProject, "unknown-project")),
177
+ toSurface: asString(edge.toSurfaceSlug, asString(edge.toSurface, asString(edge.toProjectSlug, "unknown-surface"))),
178
+ tier: oneOf(edge.tier, EDGE_TIERS, "optional"),
179
+ integrationType: oneOf(edge.integrationType, INTEGRATION_TYPES, "developer-agent"),
180
+ features: asStringArray(edge.features),
181
+ failureImpact: asString(edge.failureImpact, "Not documented yet."),
182
+ })),
183
+ reusablePatterns: (snapshot.reusablePatterns ?? []).map((pattern) => ({
184
+ slug: asString(pattern.slug, asString(pattern.name, "unknown-pattern")),
185
+ owner: asString(pattern.canonicalOwnerProject, asString(pattern.owner, "youmd")),
186
+ status: oneOf(pattern.status, PATTERN_STATUSES, "candidate"),
187
+ })),
188
+ skillPropagation: fallback.skillPropagation,
189
+ agentCommands: fallback.agentCommands,
190
+ guardrails: fallback.guardrails,
191
+ };
192
+ }
193
+ function formatPortfolioGraphBriefMarkdown(graph = exports.PORTFOLIO_GRAPH_BRIEF) {
194
+ const lines = [];
195
+ lines.push("## Portfolio Graph");
196
+ lines.push(`- source: ${graph.generatedFrom}`);
197
+ lines.push("");
198
+ lines.push("### Active Projects");
199
+ for (const project of graph.projects) {
200
+ lines.push(`- ${project.slug} (${project.stack}): ${project.focus}`);
201
+ }
202
+ lines.push("");
203
+ lines.push("### API/MCP Surfaces");
204
+ for (const surface of graph.apiSurfaces) {
205
+ lines.push(`- ${surface.slug}: owner=${surface.ownerProject}/${surface.ownerStack}, risk=${surface.risk}, write=${surface.writePolicy}, features=${surface.features.join(", ")}`);
206
+ }
207
+ lines.push("");
208
+ lines.push("### Dependency Edges");
209
+ for (const edge of graph.dependencyEdges) {
210
+ lines.push(`- ${edge.fromProject} -> ${edge.toSurface}: ${edge.tier}, ${edge.integrationType}, impact=${edge.failureImpact}`);
211
+ }
212
+ lines.push("");
213
+ lines.push("### Reusable Patterns");
214
+ for (const pattern of graph.reusablePatterns) {
215
+ lines.push(`- ${pattern.slug}: ${pattern.status}, owner=${pattern.owner}`);
216
+ }
217
+ lines.push("");
218
+ lines.push("### Skill Propagation");
219
+ for (const entry of graph.skillPropagation) {
220
+ const projects = entry.projects.map((project) => `${project.project}:${project.status}`).join(", ");
221
+ lines.push(`- ${entry.skill} (${entry.owner}): ${projects}`);
222
+ }
223
+ lines.push("");
224
+ lines.push("### Agent Commands");
225
+ for (const command of graph.agentCommands)
226
+ lines.push(`- \`${command}\``);
227
+ lines.push("");
228
+ lines.push("### Guardrails");
229
+ for (const guardrail of graph.guardrails)
230
+ lines.push(`- ${guardrail}`);
231
+ return lines.join("\n");
232
+ }
233
+ function normalizeProjectKey(value) {
234
+ return value
235
+ .toLowerCase()
236
+ .replace(/[^a-z0-9]+/g, "-")
237
+ .replace(/^-+|-+$/g, "");
238
+ }
239
+ function getPortfolioGraphProjectSlice(projectName, graph = exports.PORTFOLIO_GRAPH_BRIEF) {
240
+ const normalized = projectName ? normalizeProjectKey(projectName) : "";
241
+ const project = graph.projects.find((candidate) => {
242
+ const slug = normalizeProjectKey(candidate.slug);
243
+ const stack = normalizeProjectKey(candidate.stack);
244
+ return slug === normalized || stack === normalized || normalized.includes(slug);
245
+ }) ?? null;
246
+ const projectSlug = project?.slug ?? (normalized || null);
247
+ const ownedSurfaces = graph.apiSurfaces.filter((surface) => surface.ownerProject === projectSlug);
248
+ const dependencyEdges = graph.dependencyEdges.filter((edge) => edge.fromProject === projectSlug);
249
+ const dependencySurfaceSlugs = new Set(dependencyEdges.map((edge) => edge.toSurface));
250
+ const dependentSurfaces = graph.apiSurfaces.filter((surface) => dependencySurfaceSlugs.has(surface.slug));
251
+ const reusablePatterns = graph.reusablePatterns.filter((pattern) => projectSlug ? pattern.owner === projectSlug || pattern.owner === "youmd" : pattern.status === "canonical");
252
+ const skillPropagation = graph.skillPropagation
253
+ .map((entry) => ({
254
+ ...entry,
255
+ projects: projectSlug
256
+ ? entry.projects.filter((item) => item.project === projectSlug)
257
+ : entry.projects,
258
+ }))
259
+ .filter((entry) => entry.projects.length > 0);
260
+ return {
261
+ readiness: project || ownedSurfaces.length || dependencyEdges.length
262
+ ? {
263
+ ready: true,
264
+ reason: `Portfolio graph slice available for ${project?.slug ?? projectName}.`,
265
+ }
266
+ : {
267
+ ready: false,
268
+ reason: `No local portfolio graph slice matched ${projectName ?? "the current project"}.`,
269
+ },
270
+ requestedProject: projectName ?? null,
271
+ matchedProject: project,
272
+ ownedSurfaces,
273
+ dependencyEdges,
274
+ dependentSurfaces,
275
+ reusablePatterns,
276
+ skillPropagation,
277
+ guardrails: graph.guardrails,
278
+ agentCommands: graph.agentCommands,
279
+ };
280
+ }
281
+ //# sourceMappingURL=portfolio-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio-graph.js","sourceRoot":"","sources":["../../src/lib/portfolio-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface ProjectStrategyInput {
2
+ projectName: string;
3
+ stackName?: string;
4
+ docs: {
5
+ readme?: string;
6
+ overview?: string;
7
+ prd?: string;
8
+ currentState?: string;
9
+ todo?: string;
10
+ tasks?: string;
11
+ features?: string;
12
+ design?: string;
13
+ research?: string;
14
+ ideas?: string;
15
+ architecture?: string;
16
+ };
17
+ providers?: string[];
18
+ recentActivityTitles?: string[];
19
+ shippedToday?: number;
20
+ shipped7d?: number;
21
+ shipped30d?: number;
22
+ fallbackSummary?: string;
23
+ }
24
+ export interface ProjectCompetitor {
25
+ name: string;
26
+ url?: string;
27
+ note?: string;
28
+ }
29
+ export interface ProjectStrategyFields {
30
+ detailedDescription?: string;
31
+ goal?: string;
32
+ vision?: string;
33
+ positioning?: string;
34
+ audience?: string;
35
+ painPoints?: string[];
36
+ solution?: string;
37
+ whyThisSolution?: string;
38
+ northStar?: string;
39
+ metrics?: string[];
40
+ constraints?: string[];
41
+ notBuilding?: string[];
42
+ competitors?: ProjectCompetitor[];
43
+ }
44
+ export declare function synthesizeProjectStrategy(input: ProjectStrategyInput): ProjectStrategyFields;
45
+ //# sourceMappingURL=project-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-strategy.d.ts","sourceRoot":"","sources":["../../src/lib/project-strategy.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACnC;AA+LD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CA8D5F"}
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.synthesizeProjectStrategy = synthesizeProjectStrategy;
4
+ const SECRET_ASSIGNMENT_PATTERN = /\b([A-Z][A-Z0-9_]*(?:API[_-]?KEY|TOKEN|SECRET|PASSWORD|PRIVATE[_-]?KEY|ACCESS[_-]?KEY)[A-Z0-9_]*)\s*=\s*[^\s,;]+/gi;
5
+ const SECRET_TOKEN_PATTERNS = [
6
+ /\bsk-(?:proj-)?[A-Za-z0-9_-]{16,}\b/g,
7
+ /\bgh[pousr]_[A-Za-z0-9_]{16,}\b/g,
8
+ /\b(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{12,}\b/g,
9
+ ];
10
+ function redactSecrets(value) {
11
+ let cleaned = value.replace(SECRET_ASSIGNMENT_PATTERN, (_match, keyName) => `${keyName}=[REDACTED_SECRET]`);
12
+ for (const pattern of SECRET_TOKEN_PATTERNS) {
13
+ cleaned = cleaned.replace(pattern, "[REDACTED_SECRET]");
14
+ }
15
+ return cleaned;
16
+ }
17
+ function cleanText(value, limit = 520) {
18
+ const text = redactSecrets(value ?? "")
19
+ .replace(/\r/g, "")
20
+ .replace(/[ \t]+/g, " ")
21
+ .replace(/\n{3,}/g, "\n\n")
22
+ .trim();
23
+ if (!text)
24
+ return undefined;
25
+ return text.length > limit ? `${text.slice(0, Math.max(0, limit - 1)).trim()}...` : text;
26
+ }
27
+ function cleanLine(value) {
28
+ const line = redactSecrets(value)
29
+ .replace(/^\s*[-*+]\s+/, "")
30
+ .replace(/^\s*\d+[.)]\s+/, "")
31
+ .replace(/^\s*>\s?/, "")
32
+ .replace(/\*\*/g, "")
33
+ .replace(/`/g, "")
34
+ .trim();
35
+ if (!line || /^[-:|]+$/.test(line))
36
+ return undefined;
37
+ return cleanText(line, 260);
38
+ }
39
+ function isSetupBoilerplate(value) {
40
+ const text = value.toLowerCase();
41
+ const mentionsEnvSetup = /\b(?:copy|create|configure|add|set|update)\b/.test(text) && /\.env(?:\.example|\.local)?/.test(text);
42
+ const mentionsLocalPreview = /\b(?:localhost|preview\/web|dev server)\b/.test(text) ||
43
+ /\bcursor will expose\b/.test(text);
44
+ const mentionsBuildCommand = /\b(?:compile|build)\b/.test(text) &&
45
+ /\b(?:app|production|bundle|dist)\b/.test(text);
46
+ return (/\b(requires?|install(?:ation)?|getting started|quick start|setup|setup script|dependencies|run|start)\b/.test(text) &&
47
+ /\b(node\.?js|npm|pnpm|yarn|bun|nvm|localhost|\.env|docker|dev server|chmod|script|dependencies)\b/.test(text)) || mentionsEnvSetup || mentionsLocalPreview || mentionsBuildCommand || /^\s*(npm|pnpm|yarn|bun|nvm|docker)\s+/i.test(value);
48
+ }
49
+ function unique(values, limit = 8) {
50
+ const seen = new Set();
51
+ const result = [];
52
+ for (const value of values) {
53
+ const cleaned = cleanText(value, 260);
54
+ if (!cleaned)
55
+ continue;
56
+ const key = cleaned.toLowerCase();
57
+ if (seen.has(key))
58
+ continue;
59
+ seen.add(key);
60
+ result.push(cleaned);
61
+ if (result.length >= limit)
62
+ break;
63
+ }
64
+ return result;
65
+ }
66
+ function stripCodeBlocks(markdown) {
67
+ return markdown.replace(/```[\s\S]*?```/g, "");
68
+ }
69
+ function headingMatches(heading, patterns) {
70
+ const normalized = heading
71
+ .toLowerCase()
72
+ .replace(/[^a-z0-9 ]+/g, " ")
73
+ .replace(/\s+/g, " ")
74
+ .trim()
75
+ .replace(/^\d+\s+/, "");
76
+ return patterns.some((pattern) => pattern.test(normalized));
77
+ }
78
+ function section(markdown, patterns) {
79
+ const text = stripCodeBlocks(markdown ?? "");
80
+ if (!text.trim())
81
+ return undefined;
82
+ const lines = text.split("\n");
83
+ let collecting = false;
84
+ let startLevel = 0;
85
+ const collected = [];
86
+ for (const line of lines) {
87
+ const match = /^(#{1,6})\s+(.+?)\s*$/.exec(line);
88
+ if (match) {
89
+ const level = match[1].length;
90
+ const title = match[2];
91
+ if (collecting && level <= startLevel)
92
+ break;
93
+ if (!collecting && headingMatches(title, patterns)) {
94
+ collecting = true;
95
+ startLevel = level;
96
+ continue;
97
+ }
98
+ }
99
+ if (collecting)
100
+ collected.push(line);
101
+ }
102
+ return cleanText(collected.join("\n"), 1400);
103
+ }
104
+ function firstParagraph(markdown, limit = 420) {
105
+ const text = stripCodeBlocks(markdown ?? "")
106
+ .split("\n")
107
+ .filter((line) => !/^\s*#/.test(line))
108
+ .join("\n")
109
+ .split(/\n\s*\n/)
110
+ .map((block) => block.replace(/\s+/g, " ").trim())
111
+ .find((block) => block.length > 24 && !block.startsWith("|") && !isSetupBoilerplate(block));
112
+ return cleanText(text, limit);
113
+ }
114
+ function listFromSection(markdown, patterns, limit = 6) {
115
+ const sec = section(markdown, patterns);
116
+ if (!sec)
117
+ return [];
118
+ const bulletLines = sec
119
+ .split("\n")
120
+ .filter((line) => /^\s*(?:[-*+]|\d+[.)])\s+/.test(line))
121
+ .map(cleanLine);
122
+ if (bulletLines.length)
123
+ return unique(bulletLines, limit);
124
+ return unique(sec
125
+ .split(/(?<=[.!?])\s+/)
126
+ .map((line) => cleanLine(line))
127
+ .filter((line) => Boolean(line) && !isSetupBoilerplate(line)), limit);
128
+ }
129
+ function firstSectionParagraph(markdowns, patterns, limit = 520) {
130
+ for (const markdown of markdowns) {
131
+ const sec = section(markdown, patterns);
132
+ const paragraph = firstParagraph(sec, limit);
133
+ if (paragraph)
134
+ return paragraph;
135
+ }
136
+ return undefined;
137
+ }
138
+ function parseCompetitors(markdowns) {
139
+ const competitors = [];
140
+ for (const markdown of markdowns) {
141
+ const lines = listFromSection(markdown, [/competitors?/, /alternatives?/, /similar tools?/], 8);
142
+ for (const line of lines) {
143
+ const link = /\[([^\]]+)\]\(([^)]+)\)/.exec(line);
144
+ const rawName = link?.[1] ?? line.split(/\s[-:]\s/)[0] ?? line;
145
+ const note = line.replace(link?.[0] ?? rawName, "").replace(/^\s*[-:]\s*/, "").trim();
146
+ const name = cleanText(rawName, 80);
147
+ if (!name)
148
+ continue;
149
+ competitors.push({
150
+ name,
151
+ url: link?.[2],
152
+ note: cleanText(note, 180),
153
+ });
154
+ }
155
+ }
156
+ const seen = new Set();
157
+ return competitors.filter((competitor) => {
158
+ const key = competitor.name.toLowerCase();
159
+ if (seen.has(key))
160
+ return false;
161
+ seen.add(key);
162
+ return true;
163
+ }).slice(0, 8);
164
+ }
165
+ function sourceDocs(input) {
166
+ return [
167
+ input.docs.prd,
168
+ input.docs.overview,
169
+ input.docs.currentState,
170
+ input.docs.readme,
171
+ input.docs.features,
172
+ input.docs.todo,
173
+ input.docs.tasks,
174
+ input.docs.design,
175
+ input.docs.research,
176
+ input.docs.ideas,
177
+ input.docs.architecture,
178
+ ];
179
+ }
180
+ function listFromDocs(markdowns, patterns, limit = 8) {
181
+ return unique(markdowns.flatMap((markdown) => listFromSection(markdown, patterns, limit)), limit);
182
+ }
183
+ function synthesizeProjectStrategy(input) {
184
+ const docs = sourceDocs(input);
185
+ const summary = firstSectionParagraph(docs, [/what this project is/, /^overview$/, /^summary$/, /^about$/, /product surface/], 520) ??
186
+ firstParagraph(input.docs.readme, 520) ??
187
+ firstParagraph(input.docs.currentState, 520) ??
188
+ firstParagraph(input.docs.prd, 520) ??
189
+ cleanText(input.fallbackSummary, 520);
190
+ const recent = unique(input.recentActivityTitles ?? [], 4);
191
+ const providers = unique(input.providers ?? [], 8);
192
+ const vision = firstSectionParagraph(docs, [/^vision$/, /core vision/, /what this project is/, /^overview$/, /product surface/], 520) ??
193
+ summary;
194
+ const goal = firstSectionParagraph(docs, [/^goal$/, /^goals$/, /objective/, /what done means/, /quality bar/], 420) ??
195
+ vision;
196
+ const solution = firstSectionParagraph(docs, [/^solution$/, /approach/, /how it works/], 460) ??
197
+ summary;
198
+ const metrics = unique([
199
+ ...listFromSection(input.docs.prd, [/success metrics?/, /^metrics$/, /^kpis?$/, /north star/], 8),
200
+ ...listFromSection(input.docs.currentState, [/latest/, /current state/, /verified/, /proof/], 4),
201
+ `Shipping activity tracked: ${input.shippedToday ?? 0} today / ${input.shipped7d ?? 0} in 7d / ${input.shipped30d ?? 0} in 30d.`,
202
+ ], 8);
203
+ const painPoints = listFromDocs(docs, [/pain points?/, /^problem$/, /^problems$/, /^gaps?$/, /known issues?/, /broken/, /blocked/], 8);
204
+ const constraints = unique([
205
+ ...listFromDocs(docs, [/constraints?/, /guardrails?/, /non negotiables?/, /security/, /quality bar/], 8),
206
+ providers.length ? "Never expose raw `.env.local` values, API keys, tokens, or decrypted secret contents." : undefined,
207
+ ], 8);
208
+ const notBuilding = listFromDocs(docs, [/not building/, /non goals?/, /out of scope/, /deferred/], 8);
209
+ const detailedParts = unique([
210
+ summary,
211
+ recent.length ? `Recent activity: ${recent.join("; ")}.` : undefined,
212
+ providers.length ? `Detected providers/services: ${providers.join(", ")}.` : undefined,
213
+ ], 3);
214
+ return {
215
+ detailedDescription: cleanText(detailedParts.join(" "), 900),
216
+ goal,
217
+ vision,
218
+ positioning: firstSectionParagraph(docs, [/positioning/, /target market/, /category/], 420) ??
219
+ cleanText(`${input.projectName} is a ${input.stackName ?? "project"} in Houston's API/MCP/SkillStack-first project ecosystem.`, 420),
220
+ audience: firstSectionParagraph(docs, [/audience/, /target users?/, /who .* for/, /users/], 360) ??
221
+ cleanText("Houston, trusted coding agents, and authenticated local/remote agents working across the project portfolio.", 360),
222
+ painPoints,
223
+ solution,
224
+ whyThisSolution: firstSectionParagraph(docs, [/why this solution/, /why .* works/, /why .* good/, /rationale/], 420) ??
225
+ cleanText("It keeps project context, implementation evidence, reusable patterns, and agent actions in one portable graph instead of scattering them across one-off chats.", 420),
226
+ northStar: firstSectionParagraph(docs, [/north star/, /primary metric/, /success metric/], 260) ??
227
+ metrics[0],
228
+ metrics,
229
+ constraints,
230
+ notBuilding,
231
+ competitors: parseCompetitors(docs),
232
+ };
233
+ }
234
+ //# sourceMappingURL=project-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-strategy.js","sourceRoot":"","sources":["../../src/lib/project-strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface PatternMiningProject {
2
+ name: string;
3
+ path: string;
4
+ providers?: string[];
5
+ }
6
+ export interface MinedReusablePattern {
7
+ slug: string;
8
+ name: string;
9
+ status: "canonical" | "candidate";
10
+ tags: string[];
11
+ techStacks: string[];
12
+ canonicalOwnerProject?: string;
13
+ summary: string;
14
+ sourcePaths: string[];
15
+ usageProjects: string[];
16
+ }
17
+ export interface ReusablePatternMiningResult {
18
+ root: string;
19
+ generatedAt: string;
20
+ projectsScanned: number;
21
+ filesScanned: number;
22
+ patterns: MinedReusablePattern[];
23
+ }
24
+ export declare function mineReusablePatterns(options: {
25
+ root?: string;
26
+ projects: PatternMiningProject[];
27
+ maxProjects?: number;
28
+ maxFilesPerProject?: number;
29
+ }): ReusablePatternMiningResult;
30
+ //# sourceMappingURL=reusable-patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reusable-patterns.d.ts","sourceRoot":"","sources":["../../src/lib/reusable-patterns.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,WAAW,CAAC;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AA6UD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,2BAA2B,CAsC9B"}