ralph-hero-mcp-server 2.5.16 → 2.5.17

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.
@@ -47,6 +47,7 @@ export const RepoDefaultsSchema = z.object({
47
47
  * Example YAML:
48
48
  * mcp-server:
49
49
  * owner: cdubiel08
50
+ * localDir: ~/projects/mcp-server
50
51
  * domain: platform
51
52
  * tech: [typescript, node]
52
53
  * defaults:
@@ -58,6 +59,10 @@ export const RepoEntrySchema = z.object({
58
59
  .string()
59
60
  .optional()
60
61
  .describe("GitHub owner (user or org); falls back to RALPH_GH_OWNER if omitted"),
62
+ localDir: z
63
+ .string()
64
+ .optional()
65
+ .describe("On-disk checkout location (e.g., '~/projects/ralph-hero'); used by agents for cross-repo Read/Grep/Glob"),
61
66
  domain: z
62
67
  .string()
63
68
  .describe("Functional domain this repo belongs to (e.g., 'platform', 'frontend')"),
@@ -57,7 +57,8 @@ export function detectWorkStreams(issues) {
57
57
  const issueKey = `issue:${issue.number}`;
58
58
  // File-overlap edges: union issue with each of its files
59
59
  for (const file of issue.files) {
60
- uf.union(`file:${file}`, issueKey);
60
+ const fileKey = issue.repo ? `file:${issue.repo}:${file}` : `file:${file}`;
61
+ uf.union(fileKey, issueKey);
61
62
  }
62
63
  // Dependency edges: union with blockedBy issues (only if in input set)
63
64
  for (const dep of issue.blockedBy) {
@@ -75,10 +76,10 @@ export function detectWorkStreams(issues) {
75
76
  }
76
77
  components.get(root).push(issue.number);
77
78
  }
78
- // Build file ownership lookup: issue number -> files
79
- const issueFiles = new Map();
79
+ // Build qualified file keys for shared-files reporting
80
+ const qualifiedFiles = new Map();
80
81
  for (const issue of issues) {
81
- issueFiles.set(issue.number, issue.files);
82
+ qualifiedFiles.set(issue.number, issue.files.map((f) => (issue.repo ? `${issue.repo}:${f}` : f)));
82
83
  }
83
84
  // Build blockedBy lookup for rationale
84
85
  const issueBlockedBy = new Map();
@@ -90,7 +91,7 @@ export function detectWorkStreams(issues) {
90
91
  for (const issueNumbers of components.values()) {
91
92
  const sorted = [...issueNumbers].sort((a, b) => a - b);
92
93
  const id = `stream-${sorted.join("-")}`;
93
- const sharedFiles = computeSharedFiles(sorted, issueFiles);
94
+ const sharedFiles = computeSharedFiles(sorted, qualifiedFiles);
94
95
  const primaryIssue = sorted[0];
95
96
  streams.push({ id, issues: sorted, sharedFiles, primaryIssue });
96
97
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ralph-hero-mcp-server",
3
- "version": "2.5.16",
3
+ "version": "2.5.17",
4
4
  "description": "MCP server for GitHub Projects V2 - Ralph workflow automation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",