feat: tickets I follow, and more news for followers
"Que sigo" on the home page lists the open tickets I follow, whoever works on them; `watching` filters my issues (REST, GraphQL, MCP) and a project's search (none without a session). Followers now also hear when a ticket's priority or due date changes, and when it enters or leaves a sprint. Smaller edits (title, labels…) still do not notify. Docs (with the REPLIED row the replies change missed), Word and PDF updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2018,6 +2018,15 @@
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "watching",
|
||||
"required": false,
|
||||
"in": "query",
|
||||
"description": "Only the tickets I follow (with assignedToMe=false, whoever they are assigned to)",
|
||||
"schema": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "status",
|
||||
"required": false,
|
||||
@@ -2278,6 +2287,15 @@
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "watching",
|
||||
"required": false,
|
||||
"in": "query",
|
||||
"description": "Only the tickets I follow (none without a token)",
|
||||
"schema": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "dueFrom",
|
||||
"required": false,
|
||||
|
||||
@@ -508,6 +508,9 @@ input IssueFilterInput {
|
||||
statuses: [String!]
|
||||
types: [String!]
|
||||
unassigned: Boolean
|
||||
|
||||
"""Only the tickets I follow (none when anonymous)"""
|
||||
watching: Boolean
|
||||
}
|
||||
|
||||
type IssueLink {
|
||||
@@ -960,6 +963,9 @@ type Query {
|
||||
"""Matches key, title or description (global search)"""
|
||||
search: String
|
||||
statuses: [String!]
|
||||
|
||||
"""Only the tickets I follow"""
|
||||
watching: Boolean! = false
|
||||
): IssuePage!
|
||||
|
||||
"""My notifications, newest first, and how many are unread"""
|
||||
|
||||
@@ -3933,6 +3933,8 @@ export interface operations {
|
||||
offset?: number;
|
||||
/** @description true: tickets assigned to me. false: any ticket of my projects (e.g. ?assignedToMe=false&category=QA) */
|
||||
assignedToMe?: boolean;
|
||||
/** @description Only the tickets I follow (with assignedToMe=false, whoever they are assigned to) */
|
||||
watching?: boolean;
|
||||
/** @description Status ids. Repeat the parameter or separate with commas */
|
||||
status?: string[];
|
||||
/** @description Whatever each project calls its statuses */
|
||||
@@ -4017,6 +4019,8 @@ export interface operations {
|
||||
sprintId?: string;
|
||||
/** @description Only tickets in no sprint */
|
||||
noSprint?: boolean;
|
||||
/** @description Only the tickets I follow (none without a token) */
|
||||
watching?: boolean;
|
||||
/** @description Due on or after this day */
|
||||
dueFrom?: string;
|
||||
/** @description Due on or before this day */
|
||||
|
||||
@@ -67,9 +67,15 @@ export class IssuesResolver {
|
||||
@Tool({
|
||||
name: 'my_issues',
|
||||
description:
|
||||
"Tickets across all the user's projects: assigned to them (default) or anyone's, filtered by status category (e.g. QA to see what waits for testing).",
|
||||
"Tickets across all the user's projects: assigned to them (default) or anyone's, filtered by status category (e.g. QA to see what waits for testing); watching: only the ones they follow.",
|
||||
paramsSchema: z.object({
|
||||
assignedToMe: z.boolean().default(true),
|
||||
watching: z
|
||||
.boolean()
|
||||
.default(false)
|
||||
.describe(
|
||||
'Only the tickets the user follows (use with assignedToMe false)',
|
||||
),
|
||||
categories: z
|
||||
.array(CATEGORY)
|
||||
.optional()
|
||||
@@ -81,6 +87,7 @@ export class IssuesResolver {
|
||||
mine(
|
||||
params: {
|
||||
assignedToMe: boolean;
|
||||
watching: boolean;
|
||||
categories?: z.infer<typeof CATEGORY>[];
|
||||
limit: number;
|
||||
},
|
||||
@@ -92,6 +99,7 @@ export class IssuesResolver {
|
||||
params: {
|
||||
query: {
|
||||
assignedToMe: params.assignedToMe,
|
||||
watching: params.watching,
|
||||
category: params.categories ?? ['TODO', 'IN_PROGRESS', 'QA'],
|
||||
limit: params.limit,
|
||||
},
|
||||
@@ -127,6 +135,10 @@ export class IssuesResolver {
|
||||
.boolean()
|
||||
.optional()
|
||||
.describe('Only tickets in no sprint (the backlog)'),
|
||||
watching: z
|
||||
.boolean()
|
||||
.optional()
|
||||
.describe('Only the tickets the user follows'),
|
||||
dueFrom: z.string().optional().describe('Due on or after (ISO date)'),
|
||||
dueTo: z.string().optional().describe('Due on or before (ISO date)'),
|
||||
sort: z
|
||||
@@ -154,6 +166,7 @@ export class IssuesResolver {
|
||||
parent?: string;
|
||||
sprintId?: string;
|
||||
noSprint?: boolean;
|
||||
watching?: boolean;
|
||||
dueFrom?: string;
|
||||
dueTo?: string;
|
||||
sort: 'RECENT' | 'RANK';
|
||||
@@ -181,6 +194,7 @@ export class IssuesResolver {
|
||||
parent: params.parent,
|
||||
sprintId: params.sprintId,
|
||||
noSprint: params.noSprint,
|
||||
watching: params.watching,
|
||||
dueFrom: params.dueFrom,
|
||||
dueTo: params.dueTo,
|
||||
sort: params.sort,
|
||||
|
||||
Reference in New Issue
Block a user