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
|
-
|
|
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
|
|
79
|
-
const
|
|
79
|
+
// Build qualified file keys for shared-files reporting
|
|
80
|
+
const qualifiedFiles = new Map();
|
|
80
81
|
for (const issue of issues) {
|
|
81
|
-
|
|
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,
|
|
94
|
+
const sharedFiles = computeSharedFiles(sorted, qualifiedFiles);
|
|
94
95
|
const primaryIssue = sorted[0];
|
|
95
96
|
streams.push({ id, issues: sorted, sharedFiles, primaryIssue });
|
|
96
97
|
}
|