@mastra/github-signals 0.2.5 → 0.3.0-alpha.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.
package/dist/index.d.ts CHANGED
@@ -8,10 +8,12 @@ export declare const GITHUB_UNSUBSCRIBE_PR_TAG = "github-unsubscribe-pr";
8
8
  export declare const GITHUB_SYNC_STATUS_TAG = "github-sync-status";
9
9
  export declare const GITHUB_SIGNALS_METADATA_KEY = "githubSignals";
10
10
  export type GithubPermission = 'admin' | 'maintain' | 'write' | 'triage' | 'read' | 'none';
11
+ export type GithubSubscriptionMode = 'working' | 'review';
11
12
  export type GithubPRSubscription = {
12
13
  owner: string;
13
14
  repo: string;
14
15
  number: number;
16
+ mode: GithubSubscriptionMode;
15
17
  subscribedAt: string;
16
18
  updatedAt: string;
17
19
  lastSubscribeSignalId: string;
@@ -45,7 +47,12 @@ export type GithubPRSignalInput = number | {
45
47
  repo?: string;
46
48
  number: number;
47
49
  };
48
- export type GithubSubscribePRSignalInput = GithubPRSignalInput;
50
+ export type GithubSubscribePRSignalInput = number | {
51
+ owner?: string;
52
+ repo?: string;
53
+ number: number;
54
+ mode?: GithubSubscriptionMode;
55
+ };
49
56
  export type GithubUnsubscribePRSignalInput = GithubPRSignalInput;
50
57
  export type GithubSignalsSyncInput = {
51
58
  owner: string;
@@ -184,6 +191,8 @@ type GithubOperationResult = {
184
191
  owner: string;
185
192
  repo: string;
186
193
  number: number;
194
+ mode?: GithubSubscriptionMode;
195
+ terminalState?: 'closed' | 'merged';
187
196
  subscription?: GithubPRSubscription;
188
197
  syncResult?: GithubSignalsSyncResult;
189
198
  removed?: boolean;
@@ -262,6 +271,7 @@ export declare class GithubSignals extends SignalProvider<'github-signals'> {
262
271
  syncThreadNow(input: GithubPollingThread): Promise<number>;
263
272
  subscribeThreadToPR(input: GithubPollingThread & {
264
273
  pr: GithubPRSignalInput;
274
+ mode?: GithubSubscriptionMode;
265
275
  }): Promise<GithubOperationResult>;
266
276
  unsubscribeThreadFromPR(input: GithubPollingThread & {
267
277
  pr: GithubPRSignalInput;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -23,8 +23,8 @@ const DEFAULT_AUTHORIZED_PERMISSIONS = [
23
23
  ];
24
24
  const DEFAULT_AUTHORIZED_BOTS = ["coderabbitai[bot]", "devin-ai-integration[bot]"];
25
25
  const PERMISSION_CACHE_TTL_MS = 300 * 1e3;
26
- /** Notification kinds driven by comment/review activity that should be gated by author permission. */
27
- const AUTHOR_GATED_NOTIFICATION_KINDS = /* @__PURE__ */ new Set(["pull-request-activity", "pull-request-review-activity"]);
26
+ /** Notification kinds that include comment content and should be gated by author permission. */
27
+ const AUTHOR_GATED_NOTIFICATION_KINDS = /* @__PURE__ */ new Set(["pull-request-activity"]);
28
28
  const createGithubTool = createTool;
29
29
  function isPlainObject(value) {
30
30
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -36,6 +36,12 @@ function readNumber(value) {
36
36
  if (typeof value === "number" && Number.isInteger(value) && value > 0) return value;
37
37
  if (typeof value === "string" && /^\d+$/.test(value)) return Number(value);
38
38
  }
39
+ function normalizeGithubSubscriptionMode(value) {
40
+ return value === "review" ? "review" : "working";
41
+ }
42
+ function getGithubTerminalState(snapshot) {
43
+ return snapshot?.state === "closed" || snapshot?.state === "merged" ? snapshot.state : void 0;
44
+ }
39
45
  function stableJson(value) {
40
46
  if (Array.isArray(value)) return `[${value.map(stableJson).join(",")}]`;
41
47
  if (isPlainObject(value)) return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`).join(",")}}`;
@@ -96,6 +102,7 @@ function getGithubMetadata(threadMetadata) {
96
102
  owner,
97
103
  repo,
98
104
  number,
105
+ mode: normalizeGithubSubscriptionMode(rawSubscription.mode),
99
106
  subscribedAt,
100
107
  updatedAt,
101
108
  lastSubscribeSignalId,
@@ -150,8 +157,11 @@ function getPrLabel(subscription, snapshot) {
150
157
  const pr = `${subscription.owner}/${subscription.repo}#${subscription.number}`;
151
158
  return snapshot?.title ? `${pr}: ${snapshot.title}` : pr;
152
159
  }
160
+ function getTerminalNotificationSummary(label, terminalState) {
161
+ return `${label} was ${terminalState}. This thread has been automatically unsubscribed from this PR. Resubscribe if you still need updates.`;
162
+ }
153
163
  function getMergedNotificationSummary(label) {
154
- return `${label} was merged. This thread has been automatically unsubscribed from this PR. Resubscribe if you still need updates.`;
164
+ return getTerminalNotificationSummary(label, "merged");
155
165
  }
156
166
  /**
157
167
  * Removes a hidden block (its delimiters *and* its content) starting at every `open` marker.
@@ -249,7 +259,10 @@ const githubActivityNotificationPriority = {
249
259
  medium: 1
250
260
  };
251
261
  function getGithubActivityNotificationRank(notification) {
252
- return notification.kind === "pull-request-activity" ? 0 : 1;
262
+ if (notification.kind === "pull-request-activity") return 0;
263
+ if (notification.kind === "pull-request-code-activity") return 1;
264
+ if (notification.kind === "pull-request-review-activity") return 2;
265
+ return 3;
253
266
  }
254
267
  function compareGithubActivityNotifications(a, b) {
255
268
  if (!a && !b) return 0;
@@ -269,6 +282,28 @@ function classifyGithubCommentActivityNotification(input) {
269
282
  summary
270
283
  };
271
284
  }
285
+ function classifyGithubTerminalActivityNotification(input) {
286
+ return {
287
+ kind: input.terminalState === "merged" ? "pull-request-merged" : "pull-request-closed",
288
+ priority: "high",
289
+ summary: getTerminalNotificationSummary(getPrLabel(input.subscription, input.snapshot), input.terminalState)
290
+ };
291
+ }
292
+ function classifyGithubHeadActivityNotification(input) {
293
+ return {
294
+ kind: "pull-request-code-activity",
295
+ priority: "medium",
296
+ summary: `New head revision for ${getPrLabel(input.subscription, input.snapshot)}.`
297
+ };
298
+ }
299
+ function classifyGithubReviewStateActivityNotification(input) {
300
+ const count = input.snapshot.unresolvedReviewThreads ?? 0;
301
+ return {
302
+ kind: "pull-request-review-activity",
303
+ priority: "medium",
304
+ summary: count === 0 ? `All review threads are resolved for ${getPrLabel(input.subscription, input.snapshot)}.` : `${getPrLabel(input.subscription, input.snapshot)} has ${count} unresolved review ${count === 1 ? "thread" : "threads"}.`
305
+ };
306
+ }
272
307
  function getCheckUpdatedTime(check) {
273
308
  const value = check.updatedAt ? Date.parse(check.updatedAt) : NaN;
274
309
  return Number.isFinite(value) ? value : 0;
@@ -679,6 +714,7 @@ var GithubSignals = class extends SignalProvider {
679
714
  static signals = {
680
715
  subscribeToPR(input) {
681
716
  const normalized = typeof input === "number" ? { number: input } : input;
717
+ const mode = normalizeGithubSubscriptionMode(normalized.mode);
682
718
  return {
683
719
  type: "reactive",
684
720
  tagName: GITHUB_SUBSCRIBE_PR_TAG,
@@ -686,11 +722,13 @@ var GithubSignals = class extends SignalProvider {
686
722
  attributes: {
687
723
  ...normalized.owner ? { owner: normalized.owner } : {},
688
724
  ...normalized.repo ? { repo: normalized.repo } : {},
689
- number: normalized.number
725
+ number: normalized.number,
726
+ mode
690
727
  },
691
728
  metadata: { github: {
692
729
  action: "subscribeToPR",
693
- ...normalized
730
+ ...normalized,
731
+ mode
694
732
  } }
695
733
  };
696
734
  },
@@ -770,6 +808,7 @@ var GithubSignals = class extends SignalProvider {
770
808
  return this.#subscribe({
771
809
  id: `github-command-subscribe-${randomUUID()}`,
772
810
  ...pr,
811
+ mode: normalizeGithubSubscriptionMode(input.mode),
773
812
  threadId: input.threadId,
774
813
  resourceId: input.resourceId
775
814
  });
@@ -874,10 +913,11 @@ var GithubSignals = class extends SignalProvider {
874
913
  abortSignal: args.abortSignal
875
914
  });
876
915
  if (result.alreadyProcessed) return { tools };
916
+ const terminalMessage = result.terminalState ? `Not subscribed to ${result.owner}/${result.repo}#${result.number} in review mode because it is already ${result.terminalState}.` : void 0;
877
917
  await this.#sendStatus(args, result, {
878
- status: result.syncResult?.ok === false ? "sync_error" : "subscribed",
918
+ status: result.terminalState ? "not_subscribed_terminal" : result.syncResult?.ok === false ? "sync_error" : "subscribed",
879
919
  action: "subscribeToPR",
880
- message: result.syncResult?.ok === false ? `Subscribed to ${result.owner}/${result.repo}#${result.number}, but gitcrawl sync failed: ${result.syncResult.error}` : `Subscribed to ${result.owner}/${result.repo}#${result.number}.`
920
+ message: terminalMessage ?? (result.syncResult?.ok === false ? `Subscribed to ${result.owner}/${result.repo}#${result.number} in ${result.mode} mode, but gitcrawl sync failed: ${result.syncResult.error}` : `Subscribed to ${result.owner}/${result.repo}#${result.number} in ${result.mode} mode.`)
881
921
  });
882
922
  return { tools };
883
923
  }
@@ -917,8 +957,12 @@ var GithubSignals = class extends SignalProvider {
917
957
  await args.sendSignal?.({
918
958
  type: "reactive",
919
959
  tagName: "system-reminder",
920
- contents: `Looks like you're working with ${repository.owner}/${repository.repo}#${evidence.number}. Use /github subscribe ${evidence.number} or the github_subscribe_pr tool to follow updates.`,
921
- attributes: { type: "github-subscription-hint" },
960
+ contents: `Choose whether to follow ${repository.owner}/${repository.repo}#${evidence.number}: use /github subscribe ${evidence.number} --mode review for new commits, authorized latest PR comments, review-thread-state changes including all threads resolved, and PR close or merge updates; use --mode working for all actionable PR activity. Do not subscribe for a one-off inspection.`,
961
+ attributes: {
962
+ type: "github-subscription-hint",
963
+ availableModes: "review,working",
964
+ defaultMode: null
965
+ },
922
966
  metadata: { github: {
923
967
  action: "subscriptionHint",
924
968
  owner: repository.owner,
@@ -949,11 +993,12 @@ var GithubSignals = class extends SignalProvider {
949
993
  ...args.tools,
950
994
  github_subscribe_pr: createGithubTool({
951
995
  id: "github_subscribe_pr",
952
- description: "Subscribe this thread to a GitHub pull request. Syncs only the requested PR with gitcrawl and stores the subscription on the thread.",
996
+ description: "Subscribe this thread to a GitHub pull request. Use review mode for new commits, authorized latest PR comments, review-thread-state changes including all threads resolved, and PR close or merge updates. Use working mode for all actionable PR activity. Omitted mode defaults to working. Do not subscribe for a one-off inspection.",
953
997
  inputSchema: z.object({
954
998
  number: z.number().int().positive(),
955
999
  owner: z.string().optional(),
956
- repo: z.string().optional()
1000
+ repo: z.string().optional(),
1001
+ mode: z.enum(["working", "review"]).optional()
957
1002
  }),
958
1003
  execute: async (input, context) => {
959
1004
  const executionThreadContext = getExecutionThreadContext(context);
@@ -962,16 +1007,28 @@ var GithubSignals = class extends SignalProvider {
962
1007
  owner: input.owner,
963
1008
  repo: input.repo,
964
1009
  number: input.number,
1010
+ mode: normalizeGithubSubscriptionMode(input.mode),
965
1011
  threadId: executionThreadContext.threadId,
966
1012
  resourceId: executionThreadContext.resourceId
967
1013
  });
1014
+ if (result.terminalState) return {
1015
+ subscribed: false,
1016
+ mode: result.mode,
1017
+ terminalState: result.terminalState,
1018
+ reason: "terminal",
1019
+ owner: result.owner,
1020
+ repo: result.repo,
1021
+ number: result.number,
1022
+ message: `Not subscribed to ${result.owner}/${result.repo}#${result.number} in review mode because it is already ${result.terminalState}.`
1023
+ };
968
1024
  return {
969
1025
  subscribed: true,
1026
+ mode: result.mode,
970
1027
  owner: result.owner,
971
1028
  repo: result.repo,
972
1029
  number: result.number,
973
1030
  syncStatus: result.syncResult?.ok === false ? "error" : result.syncResult ? "success" : void 0,
974
- message: result.syncResult?.ok === false ? `Subscribed to ${result.owner}/${result.repo}#${result.number}, but gitcrawl sync failed: ${result.syncResult.error}` : `Subscribed to ${result.owner}/${result.repo}#${result.number}.`
1031
+ message: result.syncResult?.ok === false ? `Subscribed to ${result.owner}/${result.repo}#${result.number} in ${result.mode} mode, but gitcrawl sync failed: ${result.syncResult.error}` : `Subscribed to ${result.owner}/${result.repo}#${result.number} in ${result.mode} mode.`
975
1032
  };
976
1033
  }
977
1034
  }),
@@ -1111,15 +1168,19 @@ var GithubSignals = class extends SignalProvider {
1111
1168
  const previousContentHash = subscription.lastObservedContentHash;
1112
1169
  const previousThreadContentHash = subscription.lastObservedThreadContentHash;
1113
1170
  const previousHeadSha = subscription.lastObservedHeadSha;
1171
+ const previousReviewStateHash = subscription.lastObservedReviewStateHash;
1114
1172
  const latestCommentTimestampChanged = !!previousGithubUpdatedAt && !!snapshot?.latestCommentUpdatedAt && Date.parse(snapshot.latestCommentUpdatedAt) > Date.parse(previousGithubUpdatedAt);
1115
1173
  const existingBotCommentEdited = latestCommentTimestampChanged && !!snapshot && isExistingBotCommentEdit(subscription, snapshot);
1116
1174
  const latestCommentChanged = latestCommentTimestampChanged && !existingBotCommentEdited;
1175
+ const headChanged = !!previousHeadSha && !!snapshot?.headSha && previousHeadSha !== snapshot.headSha;
1176
+ const reviewStateChanged = !!previousReviewStateHash && !!snapshot?.reviewStateHash && previousReviewStateHash !== snapshot.reviewStateHash;
1117
1177
  if (snapshot) applySnapshotCursor(nextSubscription, snapshot);
1118
1178
  const isFirstObservation = syncResult.ok && snapshot && !previousGithubUpdatedAt && !previousContentHash;
1119
1179
  const legacyAggregateChanged = previousContentHash && snapshot?.contentHash && previousContentHash !== snapshot.contentHash && !previousThreadContentHash && !previousHeadSha;
1120
- const changed = isFirstObservation || syncResult.ok && snapshot && (legacyAggregateChanged || latestCommentChanged || previousThreadContentHash && snapshot.threadContentHash && previousThreadContentHash !== snapshot.threadContentHash && !existingBotCommentEdited || previousHeadSha && snapshot.headSha && previousHeadSha !== snapshot.headSha || subscription.lastObservedState && snapshot.state && subscription.lastObservedState !== snapshot.state || hasMeaningfulMergeableStateChange(subscription.lastObservedMergeableState, snapshot.mergeableState) || subscription.lastObservedCiState && snapshot.ciState && subscription.lastObservedCiState !== snapshot.ciState || subscription.lastObservedReviewStateHash && snapshot.reviewStateHash && subscription.lastObservedReviewStateHash !== snapshot.reviewStateHash);
1121
- let shouldKeepSubscription = true;
1122
- if (changed && snapshot && isCurrentGeneration()) {
1180
+ const changed = isFirstObservation || syncResult.ok && snapshot && (legacyAggregateChanged || latestCommentChanged || previousThreadContentHash && snapshot.threadContentHash && previousThreadContentHash !== snapshot.threadContentHash && !existingBotCommentEdited || headChanged || subscription.lastObservedState && snapshot.state && subscription.lastObservedState !== snapshot.state || hasMeaningfulMergeableStateChange(subscription.lastObservedMergeableState, snapshot.mergeableState) || subscription.lastObservedCiState && snapshot.ciState && subscription.lastObservedCiState !== snapshot.ciState || reviewStateChanged);
1181
+ const terminalState = subscription.mode === "review" ? getGithubTerminalState(snapshot) : void 0;
1182
+ let shouldKeepSubscription = !terminalState;
1183
+ if ((changed || terminalState) && snapshot && !(subscription.mode === "review" && isFirstObservation && !terminalState) && isCurrentGeneration()) {
1123
1184
  const notifications = await this.#sendActivityNotifications({
1124
1185
  polling: input,
1125
1186
  subscription,
@@ -1127,6 +1188,9 @@ var GithubSignals = class extends SignalProvider {
1127
1188
  previousGithubUpdatedAt,
1128
1189
  previousContentHash,
1129
1190
  latestCommentChanged,
1191
+ headChanged,
1192
+ reviewStateChanged,
1193
+ terminalState,
1130
1194
  isCurrentGeneration
1131
1195
  });
1132
1196
  if (!isCurrentGeneration()) return 0;
@@ -1136,7 +1200,7 @@ var GithubSignals = class extends SignalProvider {
1136
1200
  nextSubscription.lastNotificationKind = primaryNotification.kind;
1137
1201
  nextSubscription.lastNotificationPriority = primaryNotification.priority;
1138
1202
  nextSubscription.lastNotificationSummary = primaryNotification.summary;
1139
- shouldKeepSubscription = notifications.every((notification) => notification.kind !== "pull-request-merged");
1203
+ if (!terminalState) shouldKeepSubscription = notifications.every((notification) => notification.kind !== "pull-request-merged");
1140
1204
  }
1141
1205
  }
1142
1206
  if (shouldKeepSubscription) subscriptions.push(nextSubscription);
@@ -1186,6 +1250,7 @@ var GithubSignals = class extends SignalProvider {
1186
1250
  owner: input.subscription.owner,
1187
1251
  repo: input.subscription.repo,
1188
1252
  number: input.subscription.number,
1253
+ mode: input.subscription.mode,
1189
1254
  ...input.snapshot.title ? { title: input.snapshot.title } : {},
1190
1255
  ...input.snapshot.state ? { state: input.snapshot.state } : {},
1191
1256
  ...input.snapshot.htmlUrl ? { url: input.snapshot.htmlUrl } : {},
@@ -1205,6 +1270,7 @@ var GithubSignals = class extends SignalProvider {
1205
1270
  owner: input.subscription.owner,
1206
1271
  repo: input.subscription.repo,
1207
1272
  number: input.subscription.number,
1273
+ mode: input.subscription.mode,
1208
1274
  title: input.snapshot.title,
1209
1275
  state: input.snapshot.state,
1210
1276
  htmlUrl: input.snapshot.htmlUrl,
@@ -1347,14 +1413,36 @@ var GithubSignals = class extends SignalProvider {
1347
1413
  async #sendActivityNotifications(input) {
1348
1414
  const agent = this.#getNotificationAgent(input.polling);
1349
1415
  if (!agent?.sendNotificationSignal) return [];
1350
- const notifications = [classifyGithubActivityNotification({
1351
- subscription: input.subscription,
1352
- snapshot: input.snapshot
1353
- })];
1354
- if (input.latestCommentChanged && notifications[0]?.kind !== "pull-request-activity") notifications.push(classifyGithubCommentActivityNotification({
1416
+ const notifications = [];
1417
+ if (input.subscription.mode === "review") if (input.terminalState) notifications.push(classifyGithubTerminalActivityNotification({
1355
1418
  subscription: input.subscription,
1356
- snapshot: input.snapshot
1419
+ snapshot: input.snapshot,
1420
+ terminalState: input.terminalState
1357
1421
  }));
1422
+ else {
1423
+ if (input.latestCommentChanged) notifications.push(classifyGithubCommentActivityNotification({
1424
+ subscription: input.subscription,
1425
+ snapshot: input.snapshot
1426
+ }));
1427
+ if (input.headChanged) notifications.push(classifyGithubHeadActivityNotification({
1428
+ subscription: input.subscription,
1429
+ snapshot: input.snapshot
1430
+ }));
1431
+ if (input.reviewStateChanged) notifications.push(classifyGithubReviewStateActivityNotification({
1432
+ subscription: input.subscription,
1433
+ snapshot: input.snapshot
1434
+ }));
1435
+ }
1436
+ else {
1437
+ notifications.push(classifyGithubActivityNotification({
1438
+ subscription: input.subscription,
1439
+ snapshot: input.snapshot
1440
+ }));
1441
+ if (input.latestCommentChanged && notifications[0]?.kind !== "pull-request-activity") notifications.push(classifyGithubCommentActivityNotification({
1442
+ subscription: input.subscription,
1443
+ snapshot: input.snapshot
1444
+ }));
1445
+ }
1358
1446
  const sent = [];
1359
1447
  const notificationInputs = [];
1360
1448
  for (const notification of notifications.sort(compareGithubActivityNotifications)) {
@@ -1394,6 +1482,7 @@ var GithubSignals = class extends SignalProvider {
1394
1482
  return sent;
1395
1483
  }
1396
1484
  async #subscribe(input) {
1485
+ const mode = normalizeGithubSubscriptionMode(input.mode);
1397
1486
  const { owner, repo } = await this.#resolveRepository(input);
1398
1487
  const { threadStore, loadedThread } = await this.#loadThread(input);
1399
1488
  const githubMetadata = getGithubMetadata(loadedThread.metadata);
@@ -1403,6 +1492,7 @@ var GithubSignals = class extends SignalProvider {
1403
1492
  owner,
1404
1493
  repo,
1405
1494
  number: input.number,
1495
+ mode: existing.mode,
1406
1496
  subscription: existing,
1407
1497
  alreadyProcessed: true
1408
1498
  };
@@ -1411,6 +1501,7 @@ var GithubSignals = class extends SignalProvider {
1411
1501
  owner,
1412
1502
  repo,
1413
1503
  number: input.number,
1504
+ mode,
1414
1505
  subscribedAt: existing?.subscribedAt ?? now,
1415
1506
  updatedAt: now,
1416
1507
  lastSubscribeSignalId: input.id,
@@ -1454,6 +1545,35 @@ var GithubSignals = class extends SignalProvider {
1454
1545
  baselineSnapshot = snapshot;
1455
1546
  if (snapshot) applySnapshotCursor(subscription, snapshot);
1456
1547
  } else subscription.lastSyncStatus = "skipped";
1548
+ const terminalState = mode === "review" ? getGithubTerminalState(baselineSnapshot) : void 0;
1549
+ if (terminalState) {
1550
+ const subscriptions = githubMetadata.subscriptions.filter((candidate) => !(candidate.owner === owner && candidate.repo === repo && candidate.number === input.number));
1551
+ await threadStore.saveThread({ thread: {
1552
+ ...loadedThread,
1553
+ id: input.threadId,
1554
+ resourceId: input.resourceId,
1555
+ createdAt: loadedThread.createdAt ?? /* @__PURE__ */ new Date(),
1556
+ updatedAt: /* @__PURE__ */ new Date(),
1557
+ metadata: setGithubMetadata(loadedThread.metadata, { subscriptions })
1558
+ } });
1559
+ this.#notifySubscriptionsChanged({
1560
+ threadId: input.threadId,
1561
+ resourceId: input.resourceId,
1562
+ subscriptions
1563
+ });
1564
+ if (subscriptions.length === 0) this.stopPollingForThread({
1565
+ threadId: input.threadId,
1566
+ resourceId: input.resourceId
1567
+ });
1568
+ return {
1569
+ owner,
1570
+ repo,
1571
+ number: input.number,
1572
+ mode,
1573
+ terminalState,
1574
+ syncResult
1575
+ };
1576
+ }
1457
1577
  const subscriptions = [subscription];
1458
1578
  await threadStore.saveThread({ thread: {
1459
1579
  ...loadedThread,
@@ -1468,7 +1588,7 @@ var GithubSignals = class extends SignalProvider {
1468
1588
  resourceId: input.resourceId,
1469
1589
  subscriptions
1470
1590
  });
1471
- if (baselineSnapshot) await this.#sendBaselineNotification({
1591
+ if (baselineSnapshot && mode === "working") await this.#sendBaselineNotification({
1472
1592
  threadId: input.threadId,
1473
1593
  resourceId: input.resourceId,
1474
1594
  subscription,
@@ -1482,6 +1602,7 @@ var GithubSignals = class extends SignalProvider {
1482
1602
  owner,
1483
1603
  repo,
1484
1604
  number: input.number,
1605
+ mode,
1485
1606
  subscription,
1486
1607
  syncResult
1487
1608
  };
@@ -1534,7 +1655,8 @@ var GithubSignals = class extends SignalProvider {
1534
1655
  id: readString(signal.id) ?? message.id,
1535
1656
  owner: readString(attributes.owner) ?? readString(github.owner),
1536
1657
  repo: readString(attributes.repo) ?? readString(github.repo),
1537
- number
1658
+ number,
1659
+ ...signal.tagName === "github-subscribe-pr" ? { mode: normalizeGithubSubscriptionMode(attributes.mode ?? github.mode) } : {}
1538
1660
  };
1539
1661
  }
1540
1662
  async #sendStatus(args, signal, status) {
@@ -1546,14 +1668,18 @@ var GithubSignals = class extends SignalProvider {
1546
1668
  status: status.status,
1547
1669
  owner: signal.owner,
1548
1670
  repo: signal.repo,
1549
- number: signal.number
1671
+ number: signal.number,
1672
+ ...signal.mode ? { mode: signal.mode } : {},
1673
+ ...signal.terminalState ? { terminalState: signal.terminalState } : {}
1550
1674
  },
1551
1675
  metadata: { github: {
1552
1676
  action: status.action,
1553
1677
  status: status.status,
1554
1678
  owner: signal.owner,
1555
1679
  repo: signal.repo,
1556
- number: signal.number
1680
+ number: signal.number,
1681
+ ...signal.mode ? { mode: signal.mode } : {},
1682
+ ...signal.terminalState ? { terminalState: signal.terminalState } : {}
1557
1683
  } }
1558
1684
  });
1559
1685
  }