Skip to content

Add the issue-reports plugin: Ideas & issues, logged on GitHub - #11

Merged
cliftonc merged 1 commit into
rocketflare-dev:mainfrom
benfrostmosaic:feat/issue-reports
Oct 22, 2026
Merged

cliftonc merged 1 commit into
rocketflare-dev:mainfrom
benfrostmosaic:feat/issue-reports

Conversation

@benfrostmosaic

Copy link
Copy Markdown
Contributor

Closes #10.

Adds plugins/issue-reports, called Ideas & issues in the UI. Anyone on the team describes a bug or an idea in their own words. An agent asks one question at a time until it is clear, checks the configured repository for an existing issue, and logs it on GitHub only once the person approves the draft. A confirmed duplicate becomes a comment on the existing issue.

What's in it

  • No table, no migration. Each conversation is one run of the non-exclusive issue-reports agent. Questions are input interrupts and drafts are choice interrupts, so the run parks between turns and the run row is the record. The page lists and answers runs through the kit's /api/agents/runs…; the plugin adds only GET /api/issue-reports/status.
  • Replay-safe loop. A parked run re-enters run() from the top, so each round is ctx.once('turn:<n>') and each ask ctx.interrupt({ key: 'ask:<n>' }), keyed by round number rather than model text. Filing is ctx.once('github:file'), so a retried step never opens the issue twice.
  • GitHub over plain fetch (four REST calls, no Octokit). The token is read from config at call time and never appears in an error, log line, response or prompt.
  • Prompt issue-reports is a registry entry, so it can be overridden per organisation and pointed at another model.
  • Model calls are recorded in the usage ledger as agent:issue-reports.

Notes for review

  • minKit is 0.21.0. The plugin was built in a copy on kit 0.20.0 that carried a local patch to the agent runtime. 0.21.0 ships the same capabilities upstream (plugin AgentCtx.interrupt and chatModel, non-exclusive runs), so this needs no kit change.
  • Both config keys are declared secret: true, including the non-sensitive ISSUE_REPORTS_GITHUB_REPO. Plugin CI never writes [vars] into the cloned kit's tomls, and wrangler-parity requires every non-secret plugin var in both. m365 already does the same with M365_CLIENT_ID. The README says a host may still put the repo under [vars].
  • Depends on react-markdown and remark-gfm in apps/web, both already kit dependencies, at the same ranges.
  • A kit-side observation, not caused by this plugin: after a local pnpm build, tests/config/ui-bundle.test.ts › "keeps the heavy dependencies out of the eager entry chunk" fails. The test finds the entry chunk as "the only index-*.js". Once a second lazy page imports react-markdown, Rollup splits it into a shared lazy chunk named after react-markdown/index.js, giving two index-*.js files. The real entry chunk carries no recharts, drizzle-cube or react-markdown. CI is unaffected because the gate runs test before build, so the test skips. Happy to open a kit issue for it.

Verification

Run against a clean rocketflare-dev/rocketflare@0.21.0 with pnpm plugin add <this checkout> --subdir plugins/issue-reports --local --apply, everything staged as plugin CI does:

  • pnpm plugin check: issue-reports checks out
  • pnpm lint, pnpm typecheck, pnpm build: pass
  • vitest api (628), plus api-isolated, ui, config and kit-only (1 058 config + kit-only, no failures with no dist/): pass, including the plugin's 12 tests (tests/config/agent.test.ts, issue-body.test.ts, tests/api/status.test.ts)
  • node scripts/release-check.mjs --unreleased --base origin/main: ok
  • Not run locally: the driver project under the Neon proxy. The plugin has no database code of its own.

🤖 Generated with Claude Code

…tflare-dev#10)

Anyone on the team describes a bug or an idea; a non-exclusive agent asks
one question at a time until it is clear, searches the configured
repository for an existing issue, and shows a draft. Nothing is filed until
the person approves it; other text at the review is a change it redrafts
from, and a confirmed duplicate becomes a comment. The issue carries the
summary, reporter, page and the whole conversation under <details>.

Each conversation is one agent run parked on interrupts, so there is no
table and no migration. Config: ISSUE_REPORTS_GITHUB_REPO and
ISSUE_REPORTS_GITHUB_TOKEN, both declared as secrets so plugin CI needs no
toml edit. minKit 0.21.0: the first kit with plugin AgentCtx.interrupt,
chatModel and non-exclusive runs.

Added to plugin_subdirs in ci.yml and to the README table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cliftonc
cliftonc merged commit 7b91368 into rocketflare-dev:main Oct 22, 2026
1 check passed
cliftonc added a commit that referenced this pull request Oct 22, 2026
First release of issue-reports (Ideas & issues), contributed by Mosaic Data
(https://mosaicdata.ai/) in #11. The other four plugins are version stamps only.
README install commands name the 3.5.0 tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

New plugin: issue-reports — talk a bug or idea through with an agent, then log it on GitHub

2 participants