@enrichlayer/el-linear 1.32.0 → 1.32.1

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.
@@ -188,8 +188,10 @@ export declare class GraphQLIssuesService {
188
188
  /**
189
189
  * Batch-fetches N issues in a single GraphQL round-trip (DEV-4477).
190
190
  *
191
- * Replaces `Promise.all(refs.map(getIssueById))` — that pattern issues N
192
- * concurrent queries; this one issues exactly one. Useful for
191
+ * Replaces `Promise.all(refs.map(getIssueById))` as the primary path. The
192
+ * batch response is still order-restored locally; if Linear omits an input
193
+ * ref from that response, the missing ref falls back to the single-issue
194
+ * lookup path so valid issues are not misreported as missing. Useful for
193
195
  * `el-linear issues read <id...>`, the only caller today.
194
196
  *
195
197
  * Identifier shapes accepted (mirrors `getIssueById`):
@@ -66,8 +66,10 @@ export class GraphQLIssuesService {
66
66
  /**
67
67
  * Batch-fetches N issues in a single GraphQL round-trip (DEV-4477).
68
68
  *
69
- * Replaces `Promise.all(refs.map(getIssueById))` — that pattern issues N
70
- * concurrent queries; this one issues exactly one. Useful for
69
+ * Replaces `Promise.all(refs.map(getIssueById))` as the primary path. The
70
+ * batch response is still order-restored locally; if Linear omits an input
71
+ * ref from that response, the missing ref falls back to the single-issue
72
+ * lookup path so valid issues are not misreported as missing. Useful for
71
73
  * `el-linear issues read <id...>`, the only caller today.
72
74
  *
73
75
  * Identifier shapes accepted (mirrors `getIssueById`):
@@ -146,11 +148,12 @@ export class GraphQLIssuesService {
146
148
  for (const ref of refs) {
147
149
  const node = isUuid(ref) ? byUuid.get(ref) : byIdentifier.get(ref);
148
150
  if (!node) {
149
- throw notFoundError("Issue", ref);
151
+ ordered.push(await this.getIssueById(ref));
152
+ continue;
150
153
  }
151
- ordered.push(node);
154
+ ordered.push(this.transformIssueData(node));
152
155
  }
153
- return ordered.map((issue) => this.transformIssueData(issue));
156
+ return ordered;
154
157
  }
155
158
  async getFirstStartedStatus(team) {
156
159
  const statuses = await this.graphQLService.rawRequest(TEAM_STARTED_STATUSES_QUERY, { teamId: team.id });
@@ -5,7 +5,7 @@ import { isUuid } from "./uuid.js";
5
5
  // Unicode-aware mention regex: ASCII-only `\w` would silently fail to
6
6
  // match Cyrillic / accented Latin / CJK names (`@Юрий`, `@Niño`).
7
7
  // `\p{L}` covers all Unicode letters; `\p{N}` covers all numerics.
8
- const MENTION_NAME_CHARS = "\\p{L}\\p{N}_";
8
+ const MENTION_NAME_CHARS = "\\p{L}\\p{N}_\\-";
9
9
  const EXPLICIT_MENTION_REGEX = new RegExp(`(?<![${MENTION_NAME_CHARS}])@([${MENTION_NAME_CHARS}]+)(?![${MENTION_NAME_CHARS}/])`, "gu");
10
10
  const WHITESPACE_SPLIT_REGEX = /\s+/;
11
11
  const FENCED_CODE_REGEX = /```[\s\S]*?```/g;
@@ -32,7 +32,10 @@ export async function resolveMentions(body, linearService, options = {}) {
32
32
  // 1. Resolve explicit @name mentions (existing behavior).
33
33
  const explicit = new Map();
34
34
  const unresolvedExplicit = [];
35
- const explicitNames = [...body.matchAll(EXPLICIT_MENTION_REGEX)].map((m) => m[1]);
35
+ const explicitScanBody = stripCodeAndLinks(body);
36
+ const explicitNames = [
37
+ ...explicitScanBody.matchAll(EXPLICIT_MENTION_REGEX),
38
+ ].map((m) => m[1]);
36
39
  for (const name of new Set(explicitNames)) {
37
40
  const userId = await resolveUserByName(name, linearService);
38
41
  if (userId) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enrichlayer/el-linear",
3
- "version": "1.32.0",
3
+ "version": "1.32.1",
4
4
  "description": "A pragmatic CLI for Linear.app — deterministic team/label/member resolution, structured issue validation, configurable term enforcement, and a GraphQL escape hatch.",
5
5
  "main": "dist/main.js",
6
6
  "types": "dist/main.d.ts",