feat: show issue labels in issue view and add its --fields flag
`issue view` rendered state but never labels, and offered no way to add them — so reading one issue's labels forced a detour through `issue list --fields labels` and hunting the matching row. The benchmark transcripts showed agents paying this round-trip on every labels/state read. Show labels by default in the detail view (a detail view should be complete), and add a `--fields` flag mirroring `issue list` / `search` to append assignees, closedAt, milestone, updatedAt, url on request. Also strengthen SKILL.md against the two command-discovery round-trips the transcripts exposed: name the required `search issues` / `search prs` subcommand form (a bare `search "<query>"` is invalid), and point agents straight at `issue view <n>` for a single issue's fields. Verified live: read-issue-labels-and-state dropped from 10 turns to 4 (cache-read ~3.3x lower), the transcript reduced to three clean commands with the search-help and issue-list round-trips gone.
This commit is contained in:
@@ -47,6 +47,46 @@ describe("issue view", () => {
|
||||
expect(stdout).toContain("comment_count: 3 — use --comments to see full comments");
|
||||
});
|
||||
|
||||
it("renders the issue's labels comma-joined by default, with no flag", async () => {
|
||||
server = await startFixtureServer([
|
||||
{
|
||||
method: "GET",
|
||||
path: ISSUE_PATH,
|
||||
body: issueBody({ labels: [{ name: "bug" }, { name: "regression" }] }),
|
||||
},
|
||||
]);
|
||||
const { stdout, exitCode } = await runCliTest(["issue", "view", "42"], {
|
||||
env: testModeEnv(server.url),
|
||||
});
|
||||
|
||||
expect(exitCode).toBe(0);
|
||||
// TOON-quoted because the joined value contains a comma.
|
||||
expect(stdout).toContain('labels: "bug, regression"');
|
||||
});
|
||||
|
||||
it("appends named extra fields with --fields on top of the default fields", async () => {
|
||||
server = await startFixtureServer([
|
||||
{
|
||||
method: "GET",
|
||||
path: ISSUE_PATH,
|
||||
body: issueBody({
|
||||
assignees: [{ login: "alexion" }],
|
||||
milestone: { title: "v2.0" },
|
||||
}),
|
||||
},
|
||||
]);
|
||||
const { stdout, exitCode } = await runCliTest(
|
||||
["issue", "view", "42", "--fields", "assignees,milestone"],
|
||||
{ env: testModeEnv(server.url) },
|
||||
);
|
||||
|
||||
expect(exitCode).toBe(0);
|
||||
// Default fields are still present; the extra fields are appended.
|
||||
expect(stdout).toContain("state: open");
|
||||
expect(stdout).toContain("assignees: alexion");
|
||||
expect(stdout).toContain("milestone: v2.0");
|
||||
});
|
||||
|
||||
it("renders comment_count: 0 when there are no comments", async () => {
|
||||
server = await startFixtureServer([
|
||||
{ method: "GET", path: ISSUE_PATH, body: issueBody({ comments: 0 }) },
|
||||
|
||||
Reference in New Issue
Block a user