feat(mcp): add REST + CLI + stdio surfaces for loopover_plan_repo_issues - #7884
feat(mcp): add REST + CLI + stdio surfaces for loopover_plan_repo_issues#7884xfodev wants to merge 1 commit into
Conversation
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report❌ Patch coverage is
❌ Your patch status has failed because the patch coverage (48.97%) is below the target coverage (99.00%). You can increase the patch coverage or adjust the target coverage.
Additional details and impacted files@@ Coverage Diff @@
## main #7884 +/- ##
===========================================
- Coverage 91.39% 80.57% -10.83%
===========================================
Files 730 91 -639
Lines 74774 26032 -48742
Branches 22818 5326 -17492
===========================================
- Hits 68343 20976 -47367
+ Misses 5389 4740 -649
+ Partials 1042 316 -726
Flags with carried forward coverage won't be shown. Click here to find out more.
|
|
Caution 🛑 LoopOver review result - reject/close recommendedReview updated: 2026-07-21 16:11:18 UTC
Review summary Blockers
Nits — 8 non-blocking
Why this is blocked
📋 Copy for AI agents — paste into your coding agentDecision drivers
Context & advisory signals — never blocks the verdict
Linked issue satisfactionAddressed Review context
Contributor next steps
Signal definitions
🧪 Chat with LoopOverAsk LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://loopover.ai/docs/loopover-commands 🧪 Experimental — new and may change. Visual preview
Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy · Diff highlights exactly what changed. Scroll preview
A short scroll-through clip (desktop) — click either thumbnail to open the full animation. Evidence for scroll-linked behavior a single screenshot can't show. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.
|
…lan_repo_issues loopover_plan_repo_issues (generateIssuePlanDrafts) shipped only as a remote MCP tool and never got the REST + CLI + local-stdio mirror surfaces its repo-scoped, requireRepoManageAccess-gated siblings all have. Mirrors loopover_generate_contributor_issue_drafts exactly: a POST /v1/repos/:owner/:repo/issue-plan-drafts/generate route (same gate), a maintain plan-issues CLI command calling it, and a loopover_plan_repo_issues stdio tool. generateIssuePlanDrafts and the remote tool are unchanged. Closes JSONbored#7764
67af12b to
6f23f79
Compare
|
This repository reviews pull requests one-shot: the PR must be correct as originally opened. Pushing an additional commit closes it automatically instead of restarting review — open a fresh pull request with every fix included. |



Summary
Adds the missing REST + CLI + local-stdio mirror surfaces for
loopover_plan_repo_issues(which shipped as a remote-only MCP tool via Epic #7424): aPOST /v1/repos/:owner/:repo/issue-plan-drafts/generateroute (gated byrequireAppRole+requireSessionRepoAccess, with theexplicit_create_requires_dry_run_falsecreate-safety guard), aloopover-mcp maintain plan-issues --goal "..."CLI command, and aloopover_plan_repo_issuesstdio tool proxying the route. Dry-run by default; only an explicit{create:true, dryRun:false}reaches the write path.Testing / coverage
packages/loopover-mcp/bin/loopover-mcp.tsgets anisProcessEntrypoint()guard so a unit test can import it and driverunCli/maintainCliin-process (the untestableserver.connectline is/* v8 ignore */d).test/unit/mcp-cli-plan-issues.test.tsdrives the CLI (incl.--help) + stdio tool in-process (both.jsand.ts);test/unit/routes-issue-plan-draft.test.tscovers the REST route. Every changed line in routes.ts / spec.ts / loopover-mcp.ts is covered.test/unit/mcp-tool-rename-aliases.test.ts's tool-count invariant is bumped 79 → 80 for the new tool.packages/loopover-mcp/bin/**is added to thebackendConfigpath filter in.github/workflows/ci.ymlso a change to the ~6.6k-line CLI dispatcher runs the full test suite. Rationale (documented inline): the dispatcher is exercised only via subprocess spawn, so vitest--changedcan't reach it from a test file, and since chore(mcp): migrate packages/loopover-mcp from plain .js to real TypeScript #7291 migrated it to.ts-only (no committed sourcemapped.js) a scoped run leaves it at thin in-process coverage that drags the merged global-threshold check under the bar. This is the same reason the migration PR (chore(mcp): convert bin/loopover-mcp.js to TypeScript (Phase 3 of #7291) #7509) touched config paths.UI Evidence
Data-only change (regenerated
apps/loopover-ui/public/openapi.jsonfor the new route) — no rendered UI change; before/after are identical. Captured at each required viewport (loopover-ui is dark-mode-only):No visual diff — the change only regenerates the OpenAPI data asset; the homepage renders identically before/after.
Closes #7764
(Supersedes #7834/#7846/#7856. Prior closes: base conflict from the
loopover-mcp.jsremoval (now.ts-only), the 79→80 tool-count invariant, and thevalidate-tests-mergeglobal-coverage trap forloopover-mcp.tsunder scoped selection — all addressed here.)