@cat-factory/integrations 0.103.3 → 0.105.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/modules/documents/GitHubDocsProvider.d.ts +2 -6
  6. package/dist/modules/documents/GitHubDocsProvider.d.ts.map +1 -1
  7. package/dist/modules/documents/GitHubDocsProvider.js +2 -2
  8. package/dist/modules/documents/GitHubDocsProvider.js.map +1 -1
  9. package/dist/modules/environments/EnvironmentHandlerSeeder.d.ts +3 -7
  10. package/dist/modules/environments/EnvironmentHandlerSeeder.d.ts.map +1 -1
  11. package/dist/modules/environments/EnvironmentHandlerSeeder.js +0 -0
  12. package/dist/modules/environments/EnvironmentHandlerSeeder.js.map +1 -1
  13. package/dist/modules/environments/EnvironmentUserHandlerService.d.ts +2 -4
  14. package/dist/modules/environments/EnvironmentUserHandlerService.d.ts.map +1 -1
  15. package/dist/modules/environments/EnvironmentUserHandlerService.js +1 -1
  16. package/dist/modules/environments/EnvironmentUserHandlerService.js.map +1 -1
  17. package/dist/modules/kubernetes/KubernetesRunnerTransport.d.ts.map +1 -1
  18. package/dist/modules/kubernetes/KubernetesRunnerTransport.js +4 -3
  19. package/dist/modules/kubernetes/KubernetesRunnerTransport.js.map +1 -1
  20. package/dist/modules/runners/HttpRunnerPoolProvider.d.ts.map +1 -1
  21. package/dist/modules/runners/HttpRunnerPoolProvider.js +40 -4
  22. package/dist/modules/runners/HttpRunnerPoolProvider.js.map +1 -1
  23. package/dist/modules/runners/RunnerPoolConnectionService.d.ts +13 -2
  24. package/dist/modules/runners/RunnerPoolConnectionService.d.ts.map +1 -1
  25. package/dist/modules/runners/RunnerPoolConnectionService.js +31 -4
  26. package/dist/modules/runners/RunnerPoolConnectionService.js.map +1 -1
  27. package/dist/modules/runners/runner-backends.d.ts +9 -1
  28. package/dist/modules/runners/runner-backends.d.ts.map +1 -1
  29. package/dist/modules/runners/runner-backends.js +2 -1
  30. package/dist/modules/runners/runner-backends.js.map +1 -1
  31. package/dist/modules/runners/runners.logic.d.ts +36 -7
  32. package/dist/modules/runners/runners.logic.d.ts.map +1 -1
  33. package/dist/modules/runners/runners.logic.js +123 -15
  34. package/dist/modules/runners/runners.logic.js.map +1 -1
  35. package/dist/modules/tasks/BugHuntService.d.ts +73 -0
  36. package/dist/modules/tasks/BugHuntService.d.ts.map +1 -0
  37. package/dist/modules/tasks/BugHuntService.js +175 -0
  38. package/dist/modules/tasks/BugHuntService.js.map +1 -0
  39. package/dist/modules/tasks/GitHubIssuesProvider.d.ts +27 -1
  40. package/dist/modules/tasks/GitHubIssuesProvider.d.ts.map +1 -1
  41. package/dist/modules/tasks/GitHubIssuesProvider.js +51 -12
  42. package/dist/modules/tasks/GitHubIssuesProvider.js.map +1 -1
  43. package/dist/modules/tasks/JiraProvider.d.ts +18 -1
  44. package/dist/modules/tasks/JiraProvider.d.ts.map +1 -1
  45. package/dist/modules/tasks/JiraProvider.js +47 -0
  46. package/dist/modules/tasks/JiraProvider.js.map +1 -1
  47. package/dist/modules/tasks/LinearTaskProvider.d.ts +16 -1
  48. package/dist/modules/tasks/LinearTaskProvider.d.ts.map +1 -1
  49. package/dist/modules/tasks/LinearTaskProvider.js +41 -1
  50. package/dist/modules/tasks/LinearTaskProvider.js.map +1 -1
  51. package/dist/modules/tasks/TaskLinkService.d.ts +10 -2
  52. package/dist/modules/tasks/TaskLinkService.d.ts.map +1 -1
  53. package/dist/modules/tasks/TaskLinkService.js +8 -1
  54. package/dist/modules/tasks/TaskLinkService.js.map +1 -1
  55. package/dist/modules/tasks/TrackerWebhookService.d.ts +3 -3
  56. package/dist/modules/tasks/TrackerWebhookService.d.ts.map +1 -1
  57. package/dist/modules/tasks/TrackerWebhookService.js +1 -2
  58. package/dist/modules/tasks/TrackerWebhookService.js.map +1 -1
  59. package/dist/modules/tasks/github-issues.logic.d.ts +25 -1
  60. package/dist/modules/tasks/github-issues.logic.d.ts.map +1 -1
  61. package/dist/modules/tasks/github-issues.logic.js +73 -1
  62. package/dist/modules/tasks/github-issues.logic.js.map +1 -1
  63. package/dist/modules/tasks/jira.logic.d.ts +25 -1
  64. package/dist/modules/tasks/jira.logic.d.ts.map +1 -1
  65. package/dist/modules/tasks/jira.logic.js +62 -0
  66. package/dist/modules/tasks/jira.logic.js.map +1 -1
  67. package/dist/modules/tasks/linear.logic.d.ts +53 -1
  68. package/dist/modules/tasks/linear.logic.d.ts.map +1 -1
  69. package/dist/modules/tasks/linear.logic.js +62 -0
  70. package/dist/modules/tasks/linear.logic.js.map +1 -1
  71. package/package.json +4 -4
@@ -0,0 +1,175 @@
1
+ import { ValidationError, parseBugHuntVerdicts, rankBugCandidates, redactSecrets, } from '@cat-factory/kernel';
2
+ /**
3
+ * How many candidates one hunt scans. Bounded because the whole set goes into a single
4
+ * ranking prompt: past this the prompt cost grows without making the shortlist better, since
5
+ * a human is only ever going to look at the top handful. A board with more matching bugs
6
+ * reports `truncated`, so the UI can say the scan was partial rather than implying the board
7
+ * was exhausted.
8
+ */
9
+ export const BUG_HUNT_SCAN_LIMIT = 40;
10
+ /** The tracker default when the caller names no issue type — the same one intake uses. */
11
+ const DEFAULT_ISSUE_TYPE = 'bug';
12
+ export class BugHuntService {
13
+ deps;
14
+ constructor(deps) {
15
+ this.deps = deps;
16
+ }
17
+ /**
18
+ * List the boards a hunt can run against. A source whose provider can't enumerate boards
19
+ * throws rather than returning `[]`: an empty picker and "this tracker cannot list boards"
20
+ * look identical to a user, and only the second one tells them to type the board in.
21
+ */
22
+ async listBoards(workspaceId, source) {
23
+ const provider = this.deps.taskSourceRegistry.get(source);
24
+ if (!provider?.listBoards) {
25
+ // `reason` is what the SPA acts on: "this tracker cannot enumerate boards" is the ONE
26
+ // failure whose answer is "type the board in yourself", and it must be distinguishable
27
+ // from an unreachable tracker or an expired token — which would otherwise present as the
28
+ // same free-text field, followed by a hunt that fails for a reason nobody was told.
29
+ throw new ValidationError(`The '${source}' source cannot list boards on this deployment.`, {
30
+ reason: 'boards_unsupported',
31
+ });
32
+ }
33
+ const credentials = await this.credentialsFor(workspaceId, source);
34
+ return provider.listBoards(credentials, workspaceId);
35
+ }
36
+ /**
37
+ * Run a hunt: read the board's open, unassigned bugs (excluding anything already linked to a
38
+ * block), rank them, and return them best-first.
39
+ *
40
+ * The READ throws — an unreachable tracker is a failure the user must see, not an empty
41
+ * board. The RANKING never does: an assessment that fails leaves the real candidates in
42
+ * place under `analysisStatus: 'failed'`, because the list is independently useful and a
43
+ * model outage should not cost the user the scan.
44
+ */
45
+ async hunt(workspaceId, source, input) {
46
+ const provider = this.deps.taskSourceRegistry.get(source);
47
+ if (!provider?.listBugCandidates) {
48
+ throw new ValidationError(`The '${source}' source cannot back a bug hunt on this deployment.`);
49
+ }
50
+ const credentials = await this.credentialsFor(workspaceId, source);
51
+ // Exclusion list: every issue from this source currently imported AND linked to a block is
52
+ // already being worked, so offering it as a fresh candidate would invite two runs on one
53
+ // bug. ONE batched projection read, filtered in memory — never a per-candidate lookup.
54
+ const projected = await this.deps.taskRepository.listByWorkspace(workspaceId);
55
+ const excludeExternalIds = projected
56
+ .filter((t) => t.linkedBlockId && t.source === source)
57
+ .map((t) => t.externalId);
58
+ const query = {
59
+ board: boardScopeFor(source, input.board),
60
+ ...(input.titleFragment ? { titleFragment: input.titleFragment } : {}),
61
+ ...(input.labels?.length ? { labels: input.labels } : {}),
62
+ issueType: input.issueType || DEFAULT_ISSUE_TYPE,
63
+ unassignedOnly: true,
64
+ excludeExternalIds,
65
+ // Ask for ONE past the cap purely to learn whether the board holds more. Comparing the
66
+ // returned count against the cap instead cannot tell "exactly 40 bugs, all of them here"
67
+ // from "40 shown, more behind them", and would tell a user their board holds more than
68
+ // they can see whenever it holds exactly the cap.
69
+ limit: BUG_HUNT_SCAN_LIMIT + 1,
70
+ };
71
+ const found = await provider.listBugCandidates(credentials, query, workspaceId);
72
+ const truncated = found.length > BUG_HUNT_SCAN_LIMIT;
73
+ const candidates = truncated ? found.slice(0, BUG_HUNT_SCAN_LIMIT) : found;
74
+ const { ranked, analysisStatus, model } = await this.rank(workspaceId, candidates);
75
+ return {
76
+ source,
77
+ board: input.board,
78
+ analysisStatus,
79
+ model,
80
+ candidates: ranked,
81
+ scanned: candidates.length,
82
+ truncated,
83
+ };
84
+ }
85
+ /**
86
+ * Adopt a confirmed candidate: import the issue into the projection and materialise it as a
87
+ * `bug` task inside `containerId`, with the issue linked for agent context.
88
+ *
89
+ * Stops there deliberately. Starting the run needs the execution engine (and the initiator's
90
+ * personal-credential gate), which is the HTTP layer's job — this service stays inside the
91
+ * integrations layer, exactly as `BugIntakeService` hands its pickup back to the engine.
92
+ */
93
+ async adopt(workspaceId, source, externalId, containerId, createdBy, pipelineId) {
94
+ await this.deps.importService.import(workspaceId, source, externalId);
95
+ return this.deps.linkService.createTaskFromIssue(workspaceId, containerId, source, externalId, createdBy,
96
+ // A hunted issue is a bug by construction, and the pipeline the human confirmed is the
97
+ // one the task's Run controls should default to — so the created task carries both
98
+ // rather than landing as a generic `feature` the user has to re-classify.
99
+ { taskType: 'bug', pipelineId });
100
+ }
101
+ /**
102
+ * Rank a candidate set, degrading to the unranked list with a stated reason. The model's
103
+ * verdicts are joined onto the provider's rows by `rankBugCandidates`, so a hallucinated
104
+ * issue is dropped and a skipped one surfaces as "not assessed" rather than as a zero.
105
+ */
106
+ async rank(workspaceId, candidates) {
107
+ const unranked = rankBugCandidates(candidates, new Map());
108
+ if (candidates.length === 0) {
109
+ return { ranked: unranked, analysisStatus: 'empty', model: null };
110
+ }
111
+ const assessor = this.deps.assessor;
112
+ if (!assessor?.enabled) {
113
+ return { ranked: unranked, analysisStatus: 'unavailable', model: null };
114
+ }
115
+ try {
116
+ // Checked BEFORE the call, and reported as its OWN status rather than folded into
117
+ // `failed`: an exhausted budget is not a broken model, and the fix (raise the budget, or
118
+ // wait for the window to roll) is not the fix for a revoked key.
119
+ //
120
+ // Inside the try because it reads the spend ledger: a probe that cannot answer must not
121
+ // cost the user the scan they already paid a vendor call for. It then degrades to
122
+ // `failed` — accurate (the rating could not be completed) and fail-CLOSED (no model call
123
+ // is made), which is the only safe direction for a budget guard.
124
+ if (await this.deps.isOverBudget?.(workspaceId)) {
125
+ return { ranked: unranked, analysisStatus: 'over_budget', model: null };
126
+ }
127
+ // Bug bodies are written by anyone who can file a ticket and are about to be sent to a
128
+ // model provider, so they are scrubbed BEFORE they leave the deployment — the same
129
+ // boundary the agent-context snapshots apply, for the same reason.
130
+ const { verdicts, model } = await assessor.assess({
131
+ workspaceId,
132
+ candidates: candidates.map(scrubCandidate),
133
+ });
134
+ return {
135
+ ranked: rankBugCandidates(candidates, parseBugHuntVerdicts(verdicts)),
136
+ analysisStatus: 'ranked',
137
+ model,
138
+ };
139
+ }
140
+ catch {
141
+ // Deliberately swallowed: `analysisStatus: 'failed'` is what the user acts on, and the
142
+ // scan they paid for is still in the response. The assessor logs the underlying cause.
143
+ // A budget probe that threw lands here too — nothing was spent, and the scan survives.
144
+ return { ranked: unranked, analysisStatus: 'failed', model: null };
145
+ }
146
+ }
147
+ /** Resolve a source's stored credentials, or an empty bag for a credentialless one (GitHub). */
148
+ async credentialsFor(workspaceId, source) {
149
+ const connection = await this.deps.taskConnectionRepository.getByWorkspace(workspaceId, source);
150
+ return connection?.credentials ?? {};
151
+ }
152
+ }
153
+ /**
154
+ * Put the caller's board id on the field the target provider reads. The three vendors' board
155
+ * notions are structurally different (a Jira project key, a Linear team UUID, an `owner/repo`
156
+ * slug), which is exactly why the wire carries ONE opaque string and the mapping happens here
157
+ * rather than in the SPA — a picker that had to know which field to fill would have to be
158
+ * forked per provider.
159
+ */
160
+ function boardScopeFor(source, board) {
161
+ if (source === 'jira')
162
+ return { jiraProjectKey: board };
163
+ if (source === 'linear')
164
+ return { linearTeamId: board };
165
+ return { githubRepo: board };
166
+ }
167
+ /** Scrub the free-text fields of a candidate before it is sent to a model provider. */
168
+ function scrubCandidate(candidate) {
169
+ return {
170
+ ...candidate,
171
+ title: redactSecrets(candidate.title) ?? '',
172
+ description: redactSecrets(candidate.description) ?? '',
173
+ };
174
+ }
175
+ //# sourceMappingURL=BugHuntService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BugHuntService.js","sourceRoot":"","sources":["../../../src/modules/tasks/BugHuntService.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type GitHubClient, type GitHubInstallationRepository, type IssueIntakeQuery, type TaskContent, type TaskCredentials, type TaskSearchRepoScope, type TaskSearchResult, type TaskSourceDiagnostic, type TaskSourceProvider, type NormalizedTaskConnection } from '@cat-factory/kernel';
1
+ import { type BugCandidate, type GitHubClient, type GitHubInstallationRepository, type IssueIntakeQuery, type TaskContent, type TaskCredentials, type TaskSearchRepoScope, type TaskSearchResult, type TaskSourceDiagnostic, type TaskSourceProvider, type TrackerBoard, type NormalizedTaskConnection } from '@cat-factory/kernel';
2
2
  export interface GitHubIssuesProviderDependencies {
3
3
  githubClient: GitHubClient;
4
4
  /** Resolves which installation owns a given repo owner (by account login). */
@@ -63,6 +63,32 @@ export declare class GitHubIssuesProvider implements TaskSourceProvider {
63
63
  * the excluded ids from the single response — never a per-candidate lookup.
64
64
  */
65
65
  searchIssues(_credentials: TaskCredentials, query: IssueIntakeQuery, workspaceId: string): Promise<TaskSearchResult[]>;
66
+ /**
67
+ * The oldest-first page walk BOTH intake reads ride, returning the eligible hits so each
68
+ * caller only supplies its own projection ({@link TaskSearchResult} for the recurring
69
+ * intake, {@link BugCandidate} for a hunt).
70
+ *
71
+ * Shared rather than copied because every rule in here is one the two must agree on, and a
72
+ * second copy is how they stop agreeing — the unassigned guard below landed in one of them
73
+ * only. The walk: compile the predicates into one search text, overscan by the exclusion
74
+ * count (the one predicate GitHub search can't express, and the excluded issues ARE the
75
+ * oldest so they cluster at the front), and page through — bounded — so a first page that is
76
+ * entirely excluded can't starve the result while eligible issues exist beyond it.
77
+ */
78
+ private walkIntakeHits;
79
+ /**
80
+ * List the workspace installation's repositories as hunt boards. No installation ⇒ an empty
81
+ * list, matching every other read on this provider (GitHub Issues rides the App, so "not
82
+ * installed" is an absence, not an error).
83
+ */
84
+ listBoards(_credentials: TaskCredentials, workspaceId: string): Promise<TrackerBoard[]>;
85
+ /**
86
+ * Bug-hunt candidate search: the SAME repo-scoped walk as {@link searchIssues} (now also
87
+ * carrying `no:assignee`, from `query.unassignedOnly`), projected onto the richer candidate
88
+ * shape. GitHub's search response already carries the body, labels, age and comment count,
89
+ * so no per-candidate detail fetch is needed — the whole board scan is one request per page.
90
+ */
91
+ listBugCandidates(_credentials: TaskCredentials, query: IssueIntakeQuery, workspaceId: string): Promise<BugCandidate[]>;
66
92
  /**
67
93
  * Fetch one issue by its canonical external id and project it as a lean search hit,
68
94
  * constrained to the SEARCHING workspace's own installation. A pasted issue URL can
@@ -1 +1 @@
1
- {"version":3,"file":"GitHubIssuesProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/GitHubIssuesProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAA;AAmB5B,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,YAAY,CAAA;IAC1B,8EAA8E;IAC9E,aAAa,EAAE,4BAA4B,CAAA;CAC5C;AAMD,qBAAa,oBAAqB,YAAW,kBAAkB;IAUjD,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,yDAA6B;IAC7C,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;MAA2B;IAE9C,YAA6B,IAAI,EAAE,gCAAgC,EAAI;IAEvE;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,wBAAwB,CAErE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAyCvF;IAED;;;;;;;;;;;;;OAaG;IACG,MAAM,CACV,YAAY,EAAE,eAAe,EAC7B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,mBAAmB,GAC1B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqC7B;IAED;;;;;;;;OAQG;IACG,YAAY,CAChB,YAAY,EAAE,eAAe,EAC7B,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsC7B;IAED;;;;;;;;OAQG;YACW,UAAU;IAsBxB;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,KAAK,EAAE;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAA;KACpC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAoDhC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;;;;OAKG;YACW,qBAAqB;CAUpC"}
1
+ {"version":3,"file":"GitHubIssuesProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/GitHubIssuesProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAEjB,KAAK,4BAA4B,EAEjC,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAA;AAmB5B,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,YAAY,CAAA;IAC1B,8EAA8E;IAC9E,aAAa,EAAE,4BAA4B,CAAA;CAC5C;AAMD,qBAAa,oBAAqB,YAAW,kBAAkB;IAUjD,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,yDAA6B;IAC7C,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;MAA2B;IAE9C,YAA6B,IAAI,EAAE,gCAAgC,EAAI;IAEvE;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,wBAAwB,CAErE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAyCvF;IAED;;;;;;;;;;;;;OAaG;IACG,MAAM,CACV,YAAY,EAAE,eAAe,EAC7B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,mBAAmB,GAC1B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqC7B;IAED;;;;;;;;OAQG;IACG,YAAY,CAChB,YAAY,EAAE,eAAe,EAC7B,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAU7B;IAED;;;;;;;;;;;OAWG;YACW,cAAc;IAoC5B;;;;OAIG;IACG,UAAU,CAAC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAK5F;IAED;;;;;OAKG;IACG,iBAAiB,CACrB,YAAY,EAAE,eAAe,EAC7B,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC,CAGzB;IAED;;;;;;;;OAQG;YACW,UAAU;IAsBxB;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,KAAK,EAAE;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAA;KACpC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAoDhC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;;;;OAKG;YACW,qBAAqB;CAUpC"}
@@ -132,6 +132,29 @@ export class GitHubIssuesProvider {
132
132
  * the excluded ids from the single response — never a per-candidate lookup.
133
133
  */
134
134
  async searchIssues(_credentials, query, workspaceId) {
135
+ const hits = await this.walkIntakeHits(query, workspaceId);
136
+ return hits.map((hit) => ({
137
+ source: 'github',
138
+ externalId: githubIssuesLogic.githubIssueExternalId(hit),
139
+ title: hit.title,
140
+ url: hit.url,
141
+ status: hit.state,
142
+ excerpt: '',
143
+ }));
144
+ }
145
+ /**
146
+ * The oldest-first page walk BOTH intake reads ride, returning the eligible hits so each
147
+ * caller only supplies its own projection ({@link TaskSearchResult} for the recurring
148
+ * intake, {@link BugCandidate} for a hunt).
149
+ *
150
+ * Shared rather than copied because every rule in here is one the two must agree on, and a
151
+ * second copy is how they stop agreeing — the unassigned guard below landed in one of them
152
+ * only. The walk: compile the predicates into one search text, overscan by the exclusion
153
+ * count (the one predicate GitHub search can't express, and the excluded issues ARE the
154
+ * oldest so they cluster at the front), and page through — bounded — so a first page that is
155
+ * entirely excluded can't starve the result while eligible issues exist beyond it.
156
+ */
157
+ async walkIntakeHits(query, workspaceId) {
135
158
  const installation = await this.deps.installations.getByWorkspace(workspaceId);
136
159
  if (!installation)
137
160
  return [];
@@ -140,10 +163,6 @@ export class GitHubIssuesProvider {
140
163
  // slips past the filter and is re-picked.
141
164
  const excluded = new Set((query.excludeExternalIds ?? []).map((id) => id.toLowerCase()));
142
165
  const searchText = githubIssuesLogic.buildGitHubIntakeQuery(query);
143
- // Oldest-first, and the already-worked (excluded) issues ARE the oldest, so they
144
- // cluster at the front. The exclusion list is the one predicate GitHub search can't
145
- // express, so overscan by its size — and page through (bounded) so a first page that
146
- // is entirely excluded can't starve the result while eligible issues exist beyond it.
147
166
  const per = Math.min(query.limit + excluded.size, 100);
148
167
  const out = [];
149
168
  for (let page = 1; page <= INTAKE_MAX_PAGES && out.length < query.limit; page++) {
@@ -152,14 +171,12 @@ export class GitHubIssuesProvider {
152
171
  const externalId = githubIssuesLogic.githubIssueExternalId(hit);
153
172
  if (excluded.has(externalId.toLowerCase()))
154
173
  continue;
155
- out.push({
156
- source: 'github',
157
- externalId,
158
- title: hit.title,
159
- url: hit.url,
160
- status: hit.state,
161
- excerpt: '',
162
- });
174
+ // Defence in depth on the unassigned predicate: `no:assignee` is what actually
175
+ // narrows the search, but an adapter that reports an assignee while ignoring the
176
+ // qualifier would otherwise offer up somebody else's in-flight work as free to take.
177
+ if (query.unassignedOnly && hit.assignee)
178
+ continue;
179
+ out.push(hit);
163
180
  if (out.length >= query.limit)
164
181
  break;
165
182
  }
@@ -168,6 +185,28 @@ export class GitHubIssuesProvider {
168
185
  }
169
186
  return out;
170
187
  }
188
+ /**
189
+ * List the workspace installation's repositories as hunt boards. No installation ⇒ an empty
190
+ * list, matching every other read on this provider (GitHub Issues rides the App, so "not
191
+ * installed" is an absence, not an error).
192
+ */
193
+ async listBoards(_credentials, workspaceId) {
194
+ const installation = await this.deps.installations.getByWorkspace(workspaceId);
195
+ if (!installation)
196
+ return [];
197
+ const page = await this.deps.githubClient.listInstallationRepos(installation.installationId);
198
+ return githubIssuesLogic.githubReposToBoards(page.items);
199
+ }
200
+ /**
201
+ * Bug-hunt candidate search: the SAME repo-scoped walk as {@link searchIssues} (now also
202
+ * carrying `no:assignee`, from `query.unassignedOnly`), projected onto the richer candidate
203
+ * shape. GitHub's search response already carries the body, labels, age and comment count,
204
+ * so no per-candidate detail fetch is needed — the whole board scan is one request per page.
205
+ */
206
+ async listBugCandidates(_credentials, query, workspaceId) {
207
+ const hits = await this.walkIntakeHits(query, workspaceId);
208
+ return hits.map(githubIssuesLogic.githubHitToBugCandidate);
209
+ }
171
210
  /**
172
211
  * Fetch one issue by its canonical external id and project it as a lean search hit,
173
212
  * constrained to the SEARCHING workspace's own installation. A pasted issue URL can
@@ -1 +1 @@
1
- {"version":3,"file":"GitHubIssuesProvider.js","sourceRoot":"","sources":["../../../src/modules/tasks/GitHubIssuesProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GitHubIssuesProvider.js","sourceRoot":"","sources":["../../../src/modules/tasks/GitHubIssuesProvider.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type IssueIntakeQuery, type TaskContent, type TaskCredentials, type TaskSearchResult, type TaskSourceDiagnostic, type TaskSourceProvider, type NormalizedTaskConnection } from '@cat-factory/kernel';
1
+ import { type BugCandidate, type IssueIntakeQuery, type TaskContent, type TaskCredentials, type TaskSearchResult, type TaskSourceDiagnostic, type TaskSourceProvider, type TrackerBoard, type NormalizedTaskConnection } from '@cat-factory/kernel';
2
2
  /** Carries the HTTP status so callers can surface a meaningful error. */
3
3
  export declare class JiraApiError extends Error {
4
4
  readonly status: number;
@@ -57,6 +57,23 @@ export declare class JiraProvider implements TaskSourceProvider {
57
57
  * candidates — see {@link jiraLogic.buildJiraIntakeJql}.
58
58
  */
59
59
  searchIssues(credentials: TaskCredentials, query: IssueIntakeQuery): Promise<TaskSearchResult[]>;
60
+ /**
61
+ * List the site's projects as hunt boards. Jira paginates project search at 50/page; one
62
+ * page is the picker's whole appetite, and the SPA filters client-side — a site with more
63
+ * projects than that is served by the free-text board entry the picker also offers.
64
+ */
65
+ listBoards(credentials: TaskCredentials): Promise<TrackerBoard[]>;
66
+ /** The connection's site root, trimmed and re-validated — the one place either is done. */
67
+ private siteBase;
68
+ /**
69
+ * Bug-hunt candidate search: the same predicate JQL the intake builds (plus
70
+ * `assignee IS EMPTY`, from `query.unassignedOnly`), asked for the richer
71
+ * {@link jiraLogic.JIRA_CANDIDATE_FIELDS} selection. ONE request returns every field the
72
+ * ranking reasons over.
73
+ */
74
+ listBugCandidates(credentials: TaskCredentials, query: IssueIntakeQuery): Promise<BugCandidate[]>;
75
+ /** Authenticated GET against the connection's site, re-validating the stored base URL. */
76
+ private getJson;
60
77
  /** Run a JQL search and map the hits (shared by the free-text and intake searches). */
61
78
  private searchByJql;
62
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"JiraProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/JiraProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EAErB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAA;AAsB5B,yEAAyE;AACzE,qBAAa,YAAa,SAAQ,KAAK;IAEnC,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EAIhB;CACF;AAyBD,qBAAa,YAAa,YAAW,kBAAkB;IACrD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAS;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,yDAAqB;IACrC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;MAAkB;IAErC,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,wBAAwB,CAepE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,SAAS,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgEtF;IAED;;;;;OAKG;YACW,cAAc;IA+B5B;;;;;;OAMG;IACG,QAAQ,CAAC,KAAK,EAAE;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAA;KACpC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2EhC;IAEK,MAAM,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAErF;IAED;;;;;OAKG;IACG,YAAY,CAChB,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAE7B;IAED,uFAAuF;YACzE,WAAW;CAkC1B"}
1
+ {"version":3,"file":"JiraProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/JiraProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAErB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAA;AAyB5B,yEAAyE;AACzE,qBAAa,YAAa,SAAQ,KAAK;IAEnC,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EAIhB;CACF;AAyBD,qBAAa,YAAa,YAAW,kBAAkB;IACrD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAS;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,yDAAqB;IACrC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;MAAkB;IAErC,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,wBAAwB,CAepE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,SAAS,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgEtF;IAED;;;;;OAKG;YACW,cAAc;IA+B5B;;;;;;OAMG;IACG,QAAQ,CAAC,KAAK,EAAE;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAA;KACpC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2EhC;IAEK,MAAM,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAErF;IAED;;;;;OAKG;IACG,YAAY,CAChB,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAE7B;IAED;;;;OAIG;IACG,UAAU,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAMtE;IAED,2FAA2F;IAC3F,OAAO,CAAC,QAAQ;IAMhB;;;;;OAKG;IACG,iBAAiB,CACrB,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC,CAQzB;IAED,0FAA0F;YAC5E,OAAO;IAkBrB,uFAAuF;YACzE,WAAW;CAkC1B"}
@@ -16,6 +16,8 @@ import { jiraWebhookAdapter } from './webhook/adapters.js';
16
16
  const USER_AGENT = 'cat-factory';
17
17
  /** Max child-issue pages walked per epic (100/page) — a sanity bound on the import fan-out. */
18
18
  const CHILD_PAGE_CAP = 20;
19
+ /** How many projects the board picker lists in one page (Jira's project-search maximum). */
20
+ const BOARD_PAGE_SIZE = 50;
19
21
  /** Carries the HTTP status so callers can surface a meaningful error. */
20
22
  export class JiraApiError extends Error {
21
23
  status;
@@ -240,6 +242,51 @@ export class JiraProvider {
240
242
  async searchIssues(credentials, query) {
241
243
  return this.searchByJql(credentials, jiraLogic.buildJiraIntakeJql(query), query.limit);
242
244
  }
245
+ /**
246
+ * List the site's projects as hunt boards. Jira paginates project search at 50/page; one
247
+ * page is the picker's whole appetite, and the SPA filters client-side — a site with more
248
+ * projects than that is served by the free-text board entry the picker also offers.
249
+ */
250
+ async listBoards(credentials) {
251
+ const json = await this.getJson(credentials, `/rest/api/3/project/search?maxResults=${BOARD_PAGE_SIZE}&orderBy=name`);
252
+ return jiraLogic.parseJiraBoards(json);
253
+ }
254
+ /** The connection's site root, trimmed and re-validated — the one place either is done. */
255
+ siteBase(credentials) {
256
+ const base = credentials.baseUrl.replace(/\/+$/, '');
257
+ atlassianLogic.assertSafeAtlassianBaseUrl(base);
258
+ return base;
259
+ }
260
+ /**
261
+ * Bug-hunt candidate search: the same predicate JQL the intake builds (plus
262
+ * `assignee IS EMPTY`, from `query.unassignedOnly`), asked for the richer
263
+ * {@link jiraLogic.JIRA_CANDIDATE_FIELDS} selection. ONE request returns every field the
264
+ * ranking reasons over.
265
+ */
266
+ async listBugCandidates(credentials, query) {
267
+ const base = this.siteBase(credentials);
268
+ const jql = encodeURIComponent(jiraLogic.buildJiraIntakeJql(query));
269
+ const json = await this.getJson(credentials, `/rest/api/3/search/jql?jql=${jql}&fields=${jiraLogic.JIRA_CANDIDATE_FIELDS}&maxResults=${query.limit}`);
270
+ return jiraLogic.parseJiraBugCandidates(json, base);
271
+ }
272
+ /** Authenticated GET against the connection's site, re-validating the stored base URL. */
273
+ async getJson(credentials, path) {
274
+ const url = `${this.siteBase(credentials)}${path}`;
275
+ const auth = btoa(`${credentials.accountEmail}:${credentials.apiToken}`);
276
+ const res = await fetch(url, {
277
+ method: 'GET',
278
+ headers: {
279
+ authorization: `Basic ${auth}`,
280
+ accept: 'application/json',
281
+ 'user-agent': USER_AGENT,
282
+ },
283
+ });
284
+ if (!res.ok) {
285
+ const text = await res.text().catch(() => '');
286
+ throw new JiraApiError(res.status, `Jira GET ${url} → ${res.status}: ${text.slice(0, 300)}`);
287
+ }
288
+ return await res.json().catch(() => null);
289
+ }
243
290
  /** Run a JQL search and map the hits (shared by the free-text and intake searches). */
244
291
  async searchByJql(credentials, rawJql, limit) {
245
292
  const base = credentials.baseUrl.replace(/\/+$/, '');
@@ -1 +1 @@
1
- {"version":3,"file":"JiraProvider.js","sourceRoot":"","sources":["../../../src/modules/tasks/JiraProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JiraProvider.js","sourceRoot":"","sources":["../../../src/modules/tasks/JiraProvider.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type IssueIntakeQuery, type TaskContent, type TaskCredentials, type TaskSearchResult, type TaskSourceDiagnostic, type TaskSourceProvider, type NormalizedTaskConnection } from '@cat-factory/kernel';
1
+ import { type BugCandidate, type IssueIntakeQuery, type TaskContent, type TaskCredentials, type TaskSearchResult, type TaskSourceDiagnostic, type TaskSourceProvider, type TrackerBoard, type NormalizedTaskConnection } from '@cat-factory/kernel';
2
2
  import { type LinearTeam } from './linear.logic.js';
3
3
  export declare class LinearTaskProvider implements TaskSourceProvider {
4
4
  readonly kind: 'linear';
@@ -59,6 +59,21 @@ export declare class LinearTaskProvider implements TaskSourceProvider {
59
59
  * class to reach it.
60
60
  */
61
61
  listTeams(credentials: TaskCredentials): Promise<LinearTeam[]>;
62
+ /**
63
+ * A Linear "board" IS a team, and {@link LinearTeam} is already the {@link TrackerBoard}
64
+ * shape (id / name / key), so the generic board listing is the team listing. Kept as its
65
+ * own method rather than aliased, because the two are the same only by coincidence of
66
+ * Linear's model — the ticket-filing picker and the hunt picker are free to diverge.
67
+ */
68
+ listBoards(credentials: TaskCredentials): Promise<TrackerBoard[]>;
69
+ /**
70
+ * Bug-hunt candidate search: the same `IssueFilter` + oldest-first walk as
71
+ * {@link searchIssues} (now also carrying `assignee: { null: true }`, from
72
+ * `query.unassignedOnly`), projecting the fields the ranking reasons over. The exclusion
73
+ * list is the one predicate Linear can't express on the human identifier, so the walk
74
+ * overscans by its size and the mapper filters — exactly as the intake does.
75
+ */
76
+ listBugCandidates(credentials: TaskCredentials, query: IssueIntakeQuery): Promise<BugCandidate[]>;
62
77
  /**
63
78
  * Live setup check: read `viewer` (the cheapest authenticated query) with the
64
79
  * stored key. A 401/403 from Linear's GraphQL surfaces as auth_failed/forbidden;
@@ -1 +1 @@
1
- {"version":3,"file":"LinearTaskProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/LinearTaskProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EAeL,KAAK,UAAU,EAUhB,MAAM,mBAAmB,CAAA;AAc1B,qBAAa,kBAAmB,YAAW,kBAAkB;IAC3D,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,yDAAuB;IACvC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;MAAyB;IAE5C,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,wBAAwB,CAapE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,SAAS,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAOtF;IAEK,MAAM,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA2BrF;IAED;;;;;;;;;;OAUG;IACG,YAAY,CAChB,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAuB7B;IAED,oGAAoG;YACtF,UAAU;IAUxB;;;;;;;OAOG;YACW,QAAQ;IAsDtB;;;;;;OAMG;IACG,SAAS,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAInE;IAED;;;;OAIG;IACG,QAAQ,CAAC,KAAK,EAAE;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAA;KACpC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAqDhC;CACF"}
1
+ {"version":3,"file":"LinearTaskProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/LinearTaskProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EAmBL,KAAK,UAAU,EAWhB,MAAM,mBAAmB,CAAA;AAc1B,qBAAa,kBAAmB,YAAW,kBAAkB;IAC3D,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,yDAAuB;IACvC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;MAAyB;IAE5C,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,wBAAwB,CAapE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,SAAS,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAOtF;IAEK,MAAM,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA2BrF;IAED;;;;;;;;;;OAUG;IACG,YAAY,CAChB,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAuB7B;IAED,oGAAoG;YACtF,UAAU;IAUxB;;;;;;;OAOG;YACW,QAAQ;IAsDtB;;;;;;OAMG;IACG,SAAS,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAInE;IAED;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAEtE;IAED;;;;;;OAMG;IACG,iBAAiB,CACrB,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC,CAwBzB;IAED;;;;OAIG;IACG,QAAQ,CAAC,KAAK,EAAE;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAA;KACpC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAqDhC;CACF"}
@@ -1,6 +1,6 @@
1
1
  import { ValidationError, } from '@cat-factory/kernel';
2
2
  import { LinearApiError, LinearGraphqlClient, linearAuthFromCredentials, } from '../shared/linear.client.js';
3
- import { LINEAR_INTAKE_ISSUES_QUERY, LINEAR_INTAKE_PAGE_CAP, LINEAR_ISSUE_CHILDREN_QUERY, LINEAR_ISSUE_COMMENTS_QUERY, LINEAR_ISSUE_QUERY, LINEAR_PAGE_CAP, LINEAR_SEARCH_ISSUES_QUERY, LINEAR_TASK_DESCRIPTOR, LINEAR_TEAMS_QUERY, LINEAR_VIEWER_QUERY, buildLinearIntakeFilter, linearIssueSearchHit, mapLinearChildIds, mapLinearComments, mapLinearIntakeResults, mapLinearIssue, mapLinearSearchResults, mapLinearTeams, parseLinearRef, } from './linear.logic.js';
3
+ import { LINEAR_CANDIDATE_ISSUES_QUERY, LINEAR_COMMENT_PROBE, LINEAR_INTAKE_ISSUES_QUERY, LINEAR_INTAKE_PAGE_CAP, LINEAR_ISSUE_CHILDREN_QUERY, LINEAR_ISSUE_COMMENTS_QUERY, LINEAR_ISSUE_QUERY, LINEAR_PAGE_CAP, LINEAR_SEARCH_ISSUES_QUERY, LINEAR_TASK_DESCRIPTOR, LINEAR_TEAMS_QUERY, LINEAR_VIEWER_QUERY, buildLinearIntakeFilter, linearIssueSearchHit, mapLinearBugCandidates, mapLinearChildIds, mapLinearComments, mapLinearIntakeResults, mapLinearIssue, mapLinearSearchResults, mapLinearTeams, parseLinearRef, } from './linear.logic.js';
4
4
  import { linearWebhookAdapter } from './webhook/adapters.js';
5
5
  // LinearTaskProvider: the task-source provider for Linear. It authenticates with a
6
6
  // personal API key against Linear's single GraphQL endpoint (via the shared
@@ -172,6 +172,46 @@ export class LinearTaskProvider {
172
172
  const data = await client.query(LINEAR_TEAMS_QUERY);
173
173
  return mapLinearTeams(data);
174
174
  }
175
+ /**
176
+ * A Linear "board" IS a team, and {@link LinearTeam} is already the {@link TrackerBoard}
177
+ * shape (id / name / key), so the generic board listing is the team listing. Kept as its
178
+ * own method rather than aliased, because the two are the same only by coincidence of
179
+ * Linear's model — the ticket-filing picker and the hunt picker are free to diverge.
180
+ */
181
+ async listBoards(credentials) {
182
+ return this.listTeams(credentials);
183
+ }
184
+ /**
185
+ * Bug-hunt candidate search: the same `IssueFilter` + oldest-first walk as
186
+ * {@link searchIssues} (now also carrying `assignee: { null: true }`, from
187
+ * `query.unassignedOnly`), projecting the fields the ranking reasons over. The exclusion
188
+ * list is the one predicate Linear can't express on the human identifier, so the walk
189
+ * overscans by its size and the mapper filters — exactly as the intake does.
190
+ */
191
+ async listBugCandidates(credentials, query) {
192
+ const client = new LinearGraphqlClient(linearAuthFromCredentials(credentials));
193
+ const exclude = query.excludeExternalIds ?? [];
194
+ const excluded = new Set(exclude.map((id) => id.toUpperCase()));
195
+ const filter = buildLinearIntakeFilter(query);
196
+ const first = Math.min(query.limit + exclude.length, 100);
197
+ const nodes = [];
198
+ let after;
199
+ for (let page = 0; page < LINEAR_INTAKE_PAGE_CAP; page++) {
200
+ const data = await client.query(LINEAR_CANDIDATE_ISSUES_QUERY, {
201
+ filter,
202
+ first,
203
+ after,
204
+ comments: LINEAR_COMMENT_PROBE,
205
+ });
206
+ nodes.push(...(data.issues?.nodes ?? []));
207
+ const fresh = nodes.filter((n) => n.identifier && !excluded.has(n.identifier.toUpperCase())).length;
208
+ const pageInfo = data.issues?.pageInfo;
209
+ if (fresh >= query.limit || !pageInfo?.hasNextPage || !pageInfo.endCursor)
210
+ break;
211
+ after = pageInfo.endCursor;
212
+ }
213
+ return mapLinearBugCandidates({ issues: { nodes } }, query.limit, exclude);
214
+ }
175
215
  /**
176
216
  * Live setup check: read `viewer` (the cheapest authenticated query) with the
177
217
  * stored key. A 401/403 from Linear's GraphQL surfaces as auth_failed/forbidden;