feat(mcp): add REST + CLI + stdio surfaces for loopover_plan_repo_issues - #7834
feat(mcp): add REST + CLI + stdio surfaces for loopover_plan_repo_issues#7834xfodev wants to merge 1 commit into
Conversation
…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
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Warning ⏸️ LoopOver review result - manual review recommendedReview updated: 2026-07-21 14:31:28 UTC
Review summary Nits — 6 non-blocking
Decision 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. 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.
|
|
This pull request changes UI/visual code but its screenshot evidence is incomplete. Every required viewport × theme combination needs its own before/after image pair in a labeled table row (e.g. "Desktop · Light | before | after"). Still missing: Desktop · Dark, Tablet · Dark, Mobile · Dark. Please resubmit with the remaining rows filled in. See https://github.com/JSONbored/loopover/blob/main/.claude/skills/contributing-to-loopover/SKILL.md for the exact format and examples. This is an automated maintenance action. |

Summary
loopover_plan_repo_issues(backed bygenerateIssuePlanDrafts,src/services/issue-plan-draft.ts) shipped only as a remote MCP tool (via Epic #7424, after the MCP-parity milestone had closed), so it never got the REST + CLI + local-stdio mirror surfaces every other repo-scoped,requireRepoManageAccess-gated tool has. This adds the three missing surfaces, mirroring its closest analogloopover_generate_contributor_issue_draftsexactly:POST /v1/repos/:owner/:repo/issue-plan-drafts/generateinsrc/api/routes.ts, callinggenerateIssuePlanDraftswith the requiredgoalfrom the body, gated identically to the contributor sibling (requireAppRole→ session repo access → write-access on the create path), plus thecanSessionAccessPathmatcher entry and the OpenAPIregisterPath.loopover-mcp maintain plan-issues, POSTing to the new route via the sameapiPost/repoBasehelper the sibling uses (dry-run by default;--createopts in).registerStdioTool("loopover_plan_repo_issues", …)calling the new CLI logic, mirroring the sibling stdio block.generateIssuePlanDrafts, the remote tool, andsrc/services/**are unchanged — this is purely the three missing mirror surfaces.Tests
test/unit/routes-issue-plan-draft.test.ts(new, mirrors the contributor route test): success, both auth-gate branches incl. write-granted create fall-through, invalid-JSON, invalid-body, explicit-create guard, and cross-repo/forbidden — the newroutes.tslines are 100% statement + branch covered.test/unit/mcp-cli-plan-issues.test.ts(new, mirrorsmcp-generate-contributor-issue-drafts): in-process coverage of the CLI command + stdio tool (both the committed.jsand its.ts). The bin was made importable via an entrypoint guard + exportedserver/maintainCli(the maintainer-prescribed testable-export refactor; subprocess launch unchanged).Validation
tsc --noEmitclean; new route/CLI/stdio + completion-spec (CLI_COMMAND_SPECparity) tests pass;ui:openapi:check,ui:openapi:settings-parity,command-reference:check,docs:drift-checkall green; OpenAPI regenerated + committed; rebased on latestmain.Closes #7764