feat(mcp): add REST + CLI + stdio surfaces for loopover_plan_repo_issues - #7870
feat(mcp): add REST + CLI + stdio surfaces for loopover_plan_repo_issues#7870xfodev 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. |
❌ 2 Tests Failed:
View the top 2 failed test(s) by shortest run time
To view more test analytics, go to the Test Analytics Dashboard |
|
Caution 🛑 LoopOver review result - fixes requiredReview updated: 2026-07-21 15:48:00 UTC
Review summary Nits — 6 non-blocking
CI checks failing
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 · 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.
|
|
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(generateIssuePlanDrafts,src/services/issue-plan-draft.ts) 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. Mirrorsloopover_generate_contributor_issue_draftsexactly:POST /v1/repos/:owner/:repo/issue-plan-drafts/generateinsrc/api/routes.ts, callinggenerateIssuePlanDrafts(requiredgoalfrom the body), gated identically to the contributor sibling, plus thecanSessionAccessPathmatcher and the OpenAPIregisterPath.loopover-mcp maintain plan-issues, POSTing to the new route (dry-run by default;--createopts in).loopover_plan_repo_issues, calling the new CLI logic.generateIssuePlanDrafts, the remote tool, andsrc/services/**are unchanged. Rebased onto latestmain(incl. #7705, which stopped committing the compiled bin.js— this PR touches only the tracked.ts).Tests
test/unit/routes-issue-plan-draft.test.ts(mirrors the contributor route test): success, both auth-gate branches incl. write-granted create fall-through, invalid-JSON, invalid-body, explicit-create guard, cross-repo/forbidden — the newroutes.tslines are 100% statement + branch covered.test/unit/mcp-cli-plan-issues.test.ts(mirrorsmcp-generate-contributor-issue-drafts): in-process coverage of the CLI command + stdio tool via the.tssource (an entrypoint guard makes the bin importable without hijacking argv; subprocess launch unchanged).UI Evidence
N/A — no UI/frontend changes. The only
apps/loopover-ui/**change is the regeneratedpublic/openapi.jsonAPI-spec artifact (required byui:openapi:checkfor the new backend route); no rendered component, route, or style changes.Validation
tsc --noEmitclean (my files); new route/CLI/stdio +mcp-cli-completion-spec(CLI_COMMAND_SPEC parity) tests pass;ui:openapi:check,command-reference:check,docs:drift-checkgreen; OpenAPI regenerated; rebased on latestmain.Closes #7764