ralph-hero-mcp-server 2.5.117 → 2.5.118

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.
@@ -512,7 +512,7 @@ export function buildDashboard(items, config = DEFAULT_HEALTH_CONFIG, now = Date
512
512
  const iterationSection = buildIterationSection(items);
513
513
  return {
514
514
  generatedAt: new Date(now).toISOString(),
515
- totalIssues: items.length,
515
+ boardItems: items.length,
516
516
  phases,
517
517
  health: {
518
518
  ok: warnings.length === 0,
@@ -536,7 +536,7 @@ export function formatMarkdown(data, issuesPerPhase = 10) {
536
536
  lines.push(`# Pipeline Status`);
537
537
  lines.push(`_Generated: ${data.generatedAt}_`);
538
538
  lines.push("");
539
- lines.push(`**Total issues**: ${data.totalIssues}`);
539
+ lines.push(`**Board items**: ${data.boardItems}`);
540
540
  lines.push("");
541
541
  // Phase table
542
542
  lines.push("| Phase | Count | Points | Issues |");
@@ -262,7 +262,7 @@ export function buildHygieneReport(items, config = DEFAULT_HYGIENE_CONFIG, now =
262
262
  }
263
263
  return {
264
264
  generatedAt: new Date(now).toISOString(),
265
- totalItems: items.length,
265
+ boardItems: items.length,
266
266
  archiveCandidates,
267
267
  staleItems,
268
268
  orphanedItems,
@@ -294,7 +294,7 @@ export function formatHygieneMarkdown(report) {
294
294
  lines.push("# Project Hygiene Report");
295
295
  lines.push(`_Generated: ${report.generatedAt}_`);
296
296
  lines.push("");
297
- lines.push(`**Total items**: ${report.totalItems}`);
297
+ lines.push(`**Board items**: ${report.boardItems}`);
298
298
  lines.push("");
299
299
  // Summary
300
300
  lines.push("## Summary");
@@ -20,7 +20,7 @@ export { DASHBOARD_ITEMS_QUERY, toDashboardItems };
20
20
  // Register dashboard tools
21
21
  // ---------------------------------------------------------------------------
22
22
  export function registerDashboardTools(server, client, fieldCache) {
23
- server.tool("ralph_hero__pipeline_dashboard", "Generate pipeline status dashboard with issue counts per workflow phase, health indicators, and formatted output. Returns structured data with optional markdown or ASCII rendering.", {
23
+ server.tool("ralph_hero__pipeline_dashboard", "Generate pipeline status dashboard with issue counts per workflow phase, health indicators, and formatted output. Returns structured data with optional markdown or ASCII rendering. Top-level `boardItems` is the raw count of all project items including PRs (uniform across discovery tools — next_actions, pipeline_dashboard, project_hygiene). Per-phase `count` values reflect that phase's bucket; for `Done` and `Canceled`, the count is bounded by `doneWindowDays` (default 7) and may be smaller than the actual phase membership. Per-iteration `totalIssues` is a distinct concept (iteration-scoped count).", {
24
24
  owner: z
25
25
  .string()
26
26
  .optional()
@@ -20,7 +20,7 @@
20
20
  * 5. Build a `RankConfig` from the args + defaults (with injected `now`).
21
21
  * 6. Compute each PR's `ageHours` at the boundary and call
22
22
  * `rankDirections(allItems, enrichedPRs, config)`.
23
- * 7. Return `{ directions, fetchedAt, totalCandidates }`.
23
+ * 7. Return `{ directions, fetchedAt, boardItems }`.
24
24
  *
25
25
  * Determinism: `fetchedAt` is the only time-varying field. Two consecutive
26
26
  * calls on the same board state produce byte-identical `directions[]`
@@ -295,7 +295,11 @@ export function makeRunDirections(client, fieldCache) {
295
295
  return toolSuccess({
296
296
  directions,
297
297
  fetchedAt: now.toISOString(),
298
- totalCandidates: allItems.length,
298
+ // `boardItems` is the raw count of items on the project board pre-filter
299
+ // (sum across all configured project numbers). Uniform across discovery
300
+ // tools (next_actions, pipeline_dashboard, project_hygiene). The number
301
+ // of returned `directions` is bounded by `limit` and may be much smaller.
302
+ boardItems: allItems.length,
299
303
  });
300
304
  }
301
305
  catch (error) {
@@ -309,7 +313,7 @@ export function makeRunDirections(client, fieldCache) {
309
313
  // ---------------------------------------------------------------------------
310
314
  export function registerDirectionsTools(server, client, fieldCache) {
311
315
  const runDirections = makeRunDirections(client, fieldCache);
312
- server.tool("ralph_hero__hello_directions", "[DEPRECATED — use ralph_hero__next_actions instead. Removed in 2.7.0.] Compute up to N deterministic 'directions' for the hello skill's session briefing. Open PRs are fetched internally via the configured GitHub token's `repo` scope (one `is:pr is:open repo:owner/name` GraphQL search per unique repo represented in the project items). Each direction includes a structured signals object (staleDays, staleThresholdDays, tiedAtScore, estimateWeight, parentChainNote) for skills to synthesize prose. The legacy 'reason' string is @deprecated and removed in 2.7.0.", {
316
+ server.tool("ralph_hero__hello_directions", "[DEPRECATED — use ralph_hero__next_actions instead. Removed in 2.7.0.] Compute up to N deterministic 'directions' for the hello skill's session briefing. Open PRs are fetched internally via the configured GitHub token's `repo` scope (one `is:pr is:open repo:owner/name` GraphQL search per unique repo represented in the project items). Each direction includes a structured signals object (staleDays, staleThresholdDays, tiedAtScore, estimateWeight, parentChainNote) for skills to synthesize prose. The legacy 'reason' string is @deprecated and removed in 2.7.0. Returns `{ directions, fetchedAt, boardItems }` where `boardItems` is the raw count of items on the project board pre-filter (uniform across discovery tools); the returned `directions` array is bounded by `limit`.", {
313
317
  owner: z
314
318
  .string()
315
319
  .optional()
@@ -352,7 +356,7 @@ export function registerDirectionsTools(server, client, fieldCache) {
352
356
  }, async (args) => {
353
357
  return await runDirections({ ...args, audience: "human" });
354
358
  });
355
- server.tool("ralph_hero__next_actions", "Compute up to N deterministic 'directions' (next actions) with one flagged `recommended: true`. Used by the /hello skill picker (interactive) and by headless orchestrators (auto-select recommended). Open PRs are fetched internally via the configured GitHub token's `repo` scope (one `is:pr is:open repo:owner/name` GraphQL search per unique repo represented in the project items) — callers no longer pass an `openPRs` argument. Each direction includes a structured signals object (staleDays, staleThresholdDays, tiedAtScore, estimateWeight, parentChainNote) for skills to synthesize prose. The legacy 'reason' string is @deprecated and removed in 2.7.0. When `audience='agent'` and no items are in actionable phases (Plan in Review, In Review, Ready for Plan, Research Needed) or otherwise surfacing (lock-stale, unblock-requested), the picker falls back to Backlog and null-state items so autopilot can drive triage. Fallback items receive a fixed score penalty so they never outrank actionable items when those exist; the fallback never fires for `audience='human'`.", {
359
+ server.tool("ralph_hero__next_actions", "Compute up to N deterministic 'directions' (next actions) with one flagged `recommended: true`. Used by the /hello skill picker (interactive) and by headless orchestrators (auto-select recommended). Open PRs are fetched internally via the configured GitHub token's `repo` scope (one `is:pr is:open repo:owner/name` GraphQL search per unique repo represented in the project items) — callers no longer pass an `openPRs` argument. Each direction includes a structured signals object (staleDays, staleThresholdDays, tiedAtScore, estimateWeight, parentChainNote) for skills to synthesize prose. The legacy 'reason' string is @deprecated and removed in 2.7.0. When `audience='agent'` and no items are in actionable phases (Plan in Review, In Review, Ready for Plan, Research Needed) or otherwise surfacing (lock-stale, unblock-requested), the picker falls back to Backlog and null-state items so autopilot can drive triage. Fallback items receive a fixed score penalty so they never outrank actionable items when those exist; the fallback never fires for `audience='human'`. Returns `{ directions, fetchedAt, boardItems }` where `boardItems` is the raw count of items on the project board pre-filter (uniform across discovery tools); the returned `directions` array is bounded by `limit`.", {
356
360
  owner: z
357
361
  .string()
358
362
  .optional()
@@ -14,7 +14,7 @@ import { toolSuccess, toolError, resolveProjectOwner, resolveProjectNumbers, } f
14
14
  // Register hygiene tools
15
15
  // ---------------------------------------------------------------------------
16
16
  export function registerHygieneTools(server, client, fieldCache) {
17
- server.tool("ralph_hero__project_hygiene", "Generate a project board hygiene report. Identifies archive candidates, stale items, orphaned backlog entries, missing fields, WIP violations, and duplicate candidates. Returns: report with 7 sections + summary stats.", {
17
+ server.tool("ralph_hero__project_hygiene", "Generate a project board hygiene report. Identifies archive candidates, stale items, orphaned backlog entries, missing fields, WIP violations, and duplicate candidates. Returns: report with 7 sections + summary stats. Top-level `boardItems` is the raw count of items on the project board pre-filter (uniform across discovery tools — next_actions, pipeline_dashboard, project_hygiene). Per-category counts in `summary` (archiveCandidateCount, staleCount, orphanCount, fieldCoveragePercent, wipViolationCount, duplicateCandidateCount) are post-filter and represent distinct buckets.", {
18
18
  owner: z
19
19
  .string()
20
20
  .optional()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ralph-hero-mcp-server",
3
- "version": "2.5.117",
3
+ "version": "2.5.118",
4
4
  "description": "MCP server for GitHub Projects V2 - Ralph workflow automation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",