@qwen-code/channel-github 0.26.5 → 0.26.7
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/GithubAdapter.d.ts +218 -1
- package/dist/GithubAdapter.d.ts.map +1 -1
- package/dist/GithubAdapter.js +2256 -60
- package/dist/GithubAdapter.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/GithubAdapter.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ interface GithubConfig extends ChannelConfig {
|
|
|
4
4
|
baseUrl?: string;
|
|
5
5
|
reasonFilter?: unknown;
|
|
6
6
|
useLocalGh?: boolean;
|
|
7
|
+
deliverToBoundSessions?: boolean;
|
|
8
|
+
prWatchEvents?: unknown;
|
|
7
9
|
}
|
|
8
10
|
interface GithubCursor {
|
|
9
11
|
lastProcessedAt: string;
|
|
@@ -18,13 +20,41 @@ interface GithubCursor {
|
|
|
18
20
|
dispatchedBodies?: string[];
|
|
19
21
|
/** Comment node IDs already accepted by the channel. */
|
|
20
22
|
dispatchedComments?: string[];
|
|
23
|
+
/**
|
|
24
|
+
* created_at per dispatched comment key, so eviction can respect the
|
|
25
|
+
* re-list window: a comment whose created_at is newer than the committed
|
|
26
|
+
* cursor can still be re-fetched (mark-read may have failed), so its key
|
|
27
|
+
* must NOT be evicted — otherwise a re-listed aggregate SUPERSET batch
|
|
28
|
+
* re-dispatches already-replied comments under a fresh batch hash that
|
|
29
|
+
* misses the publication-audit backstop. Keys without a recorded time are
|
|
30
|
+
* treated as protected (conservative). Bounded by MAX_COMMENT_TIMES, which
|
|
31
|
+
* retains every ring key's time plus the still-re-listable fetched comments.
|
|
32
|
+
*/
|
|
33
|
+
dispatchedCommentTimes?: Record<string, string>;
|
|
21
34
|
/** Direct-action event node IDs already accepted by the channel. */
|
|
22
35
|
dispatchedEvents?: string[];
|
|
23
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* The prWatchEvents vocabulary, shared by the config validator, the watch
|
|
39
|
+
* emit path, and the management UI's option list (built from this constant
|
|
40
|
+
* in index.ts) so the three cannot drift apart (R2-18). Lowercase: the
|
|
41
|
+
* editor and normalizePrWatchEvents both lowercase before matching.
|
|
42
|
+
*/
|
|
43
|
+
export declare const PR_WATCH_EVENTS: readonly ["ci_failure", "merge_conflict", "head_change", "state_change"];
|
|
44
|
+
interface BoundSessionConfigFields {
|
|
45
|
+
deliverToBoundSessions?: unknown;
|
|
46
|
+
prWatchEvents?: unknown;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Shared validation for the plugin descriptor (returns the message) and
|
|
50
|
+
* connect() (throws it): one source of truth for the event vocabulary and
|
|
51
|
+
* the dependency rule, so the management UI and the adapter cannot drift.
|
|
52
|
+
*/
|
|
53
|
+
export declare function validateBoundSessionConfig(config: BoundSessionConfigFields, channelName: string): string | undefined;
|
|
24
54
|
interface PublicationAuditRecord {
|
|
25
55
|
at: string;
|
|
26
56
|
type: 'github_publication';
|
|
27
|
-
outcome: 'posted' | 'suppressed' | 'failed' | 'posting';
|
|
57
|
+
outcome: 'posted' | 'suppressed' | 'failed' | 'failed_ambiguous' | 'posting';
|
|
28
58
|
channel: string;
|
|
29
59
|
triggerKind?: string;
|
|
30
60
|
repository: string;
|
|
@@ -47,11 +77,64 @@ export declare class GithubChannel extends PollingChannelBase<GithubCursor> {
|
|
|
47
77
|
private webOrigin;
|
|
48
78
|
private readonly activeReactions;
|
|
49
79
|
private readonly reactionsPendingRemoval;
|
|
80
|
+
private readonly ackAnchorByBatch;
|
|
50
81
|
private pendingFinalDeliveryRetry;
|
|
51
82
|
private pendingFinalDeliveryRetryAbort;
|
|
52
83
|
private pendingFinalDeliveryRequestsActive;
|
|
53
84
|
private pendingFinalDeliveryRetryStopRequested;
|
|
54
85
|
private reasonFilter;
|
|
86
|
+
private deliverToBoundSessions;
|
|
87
|
+
private prWatchEvents;
|
|
88
|
+
private githubHost;
|
|
89
|
+
private boundSessionByPr;
|
|
90
|
+
private lastBindings;
|
|
91
|
+
private lastBindingsPartial;
|
|
92
|
+
private boundRefreshFailed;
|
|
93
|
+
/**
|
|
94
|
+
* False until the first COMPLETE binding snapshot succeeds. Re-validation
|
|
95
|
+
* and watch pruning require an authoritative enumeration, so they stay
|
|
96
|
+
* gated on this (a partial answer is not an absence).
|
|
97
|
+
*/
|
|
98
|
+
private boundSnapshotTrusted;
|
|
99
|
+
/**
|
|
100
|
+
* False until ANY binding snapshot succeeds (complete or partial). The
|
|
101
|
+
* cold-start comment-lane gate uses this, not boundSnapshotTrusted: the
|
|
102
|
+
* map is populated from partial snapshots too. Gating on complete-only
|
|
103
|
+
* would stall the lane forever under a permanent partial (multi-page
|
|
104
|
+
* scan / non-active workspace). An EMPTY partial answer is additionally
|
|
105
|
+
* bounded by coldEmptyPartialStreak: success of an incomplete scan does
|
|
106
|
+
* not establish absence, so the first such answers must not open the
|
|
107
|
+
* lane onto an empty map.
|
|
108
|
+
*/
|
|
109
|
+
private boundSnapshotSeen;
|
|
110
|
+
/**
|
|
111
|
+
* Consecutive empty partial snapshots while no complete snapshot has ever
|
|
112
|
+
* succeeded and the map is empty. Drives the bounded cold-start deferral
|
|
113
|
+
* (MAX_COLD_EMPTY_PARTIAL_POLLS); reset by any complete or non-empty
|
|
114
|
+
* answer.
|
|
115
|
+
*/
|
|
116
|
+
private coldEmptyPartialStreak;
|
|
117
|
+
private partialSnapshotStreak;
|
|
118
|
+
/**
|
|
119
|
+
* True while the most recent pending-watch reconciliation FAILED (e.g.
|
|
120
|
+
* the watch file is unreadable). Generic recovery must then leave watch
|
|
121
|
+
* tasks alone: delivering and removing an accepted watch task without
|
|
122
|
+
* reconciling its on-disk pending record would let a later drain claim
|
|
123
|
+
* and deliver the same transition a second time. Unrelated comment
|
|
124
|
+
* recovery keeps running.
|
|
125
|
+
*/
|
|
126
|
+
private watchReconcileBlocked;
|
|
127
|
+
/**
|
|
128
|
+
* Consecutive binding-refresh failures since the last success. While no
|
|
129
|
+
* snapshot has ever succeeded, the cold-start gate defers the comment lane,
|
|
130
|
+
* so a permanent failure (an old daemon lacking the route, rotated
|
|
131
|
+
* credentials) would freeze every notification silently. The streak drives
|
|
132
|
+
* a distinct, throttled, actionable log so the stall is observable; the
|
|
133
|
+
* gate itself stays fail-closed.
|
|
134
|
+
*/
|
|
135
|
+
private boundSnapshotFailureStreak;
|
|
136
|
+
private prWatchState;
|
|
137
|
+
private prWatchStateLoaded;
|
|
55
138
|
private inboundRecoveryPending;
|
|
56
139
|
private recoverableInboundTasks;
|
|
57
140
|
private activeInboundTaskIdsByMessage;
|
|
@@ -60,6 +143,13 @@ export declare class GithubChannel extends PollingChannelBase<GithubCursor> {
|
|
|
60
143
|
private inboundPersistenceBlocked;
|
|
61
144
|
constructor(name: string, config: GithubConfig & Record<string, unknown>, bridge: ChannelAgentBridge, options?: ChannelBaseOptions);
|
|
62
145
|
protected createInitialCursor(): GithubCursor;
|
|
146
|
+
/**
|
|
147
|
+
* GitHub repository paths are case-insensitive, but the notification API
|
|
148
|
+
* reports the canonical `owner/repo` spelling. Match configured groups
|
|
149
|
+
* case-insensitively so an allowlist typed in any case still admits the
|
|
150
|
+
* repository — and still applies that repository's sender policy.
|
|
151
|
+
*/
|
|
152
|
+
protected normalizeGroupId(groupId: string): string;
|
|
63
153
|
protected validateCursor(parsed: unknown): GithubCursor | null;
|
|
64
154
|
connect(): Promise<void>;
|
|
65
155
|
disconnect(): void;
|
|
@@ -98,14 +188,70 @@ export declare class GithubChannel extends PollingChannelBase<GithubCursor> {
|
|
|
98
188
|
private recordDispatchedBody;
|
|
99
189
|
private recordDispatchedComment;
|
|
100
190
|
private recordDispatched;
|
|
191
|
+
/**
|
|
192
|
+
* Window-aware eviction. Once over the soft cap, drop EVERY key whose
|
|
193
|
+
* comment can no longer be re-listed (created_at <= the committed cursor),
|
|
194
|
+
* keeping protected keys regardless of position. A key newer than the
|
|
195
|
+
* cursor — or with no recorded time (legacy migration) — is protected:
|
|
196
|
+
* evicting it would let a re-listed aggregate SUPERSET re-dispatch
|
|
197
|
+
* already-replied comments under a fresh batch hash that misses the
|
|
198
|
+
* publication-audit backstop (duplicate public reply / private injection
|
|
199
|
+
* without any crash). Under a sustained frozen cursor the protected ring
|
|
200
|
+
* grows with the re-list window (bounded by traffic × outage duration);
|
|
201
|
+
* it shrinks again once mark-read recovers and the cursor passes the keys.
|
|
202
|
+
* A protected key is NEVER evicted to make room — there is no hard-cap
|
|
203
|
+
* refusal, because refusing dispatches without freezing the cursor would
|
|
204
|
+
* mark-read the refused events (silent loss), and freezing the cursor
|
|
205
|
+
* would deadlock (the ring can only shrink once the cursor advances).
|
|
206
|
+
*/
|
|
207
|
+
private evictDispatchedComments;
|
|
208
|
+
/**
|
|
209
|
+
* Bound the time map: drop entries that are neither in the ring nor still
|
|
210
|
+
* re-listable. Times for fetched-but-not-yet-dispatched comments survive
|
|
211
|
+
* while their created_at is newer than the cursor (they may be dispatched
|
|
212
|
+
* later this poll), so eviction never loses a key's protection mid-poll.
|
|
213
|
+
*/
|
|
214
|
+
private pruneCommentTimes;
|
|
101
215
|
private dispatchEnvelope;
|
|
102
216
|
private claimInboundTask;
|
|
103
217
|
private runInboundTask;
|
|
104
218
|
private recoverInboundTasks;
|
|
105
219
|
private isRecoverableInboundTask;
|
|
106
220
|
private hasRecoverableInboundTasks;
|
|
221
|
+
/**
|
|
222
|
+
* Recoverable tasks that may hold the shared notification cursor. Pure
|
|
223
|
+
* backpressure is excluded: it has its own durable retry and a bounded
|
|
224
|
+
* deferral horizon, and must not freeze mark-as-read for every unrelated
|
|
225
|
+
* PR the channel follows. This covers both bound deliveries and the
|
|
226
|
+
* targetless deferrals an incomplete binding snapshot produces (no
|
|
227
|
+
* delivery yet, same durable retry). Watch tasks are excluded while
|
|
228
|
+
* reconcile is blocked: recovery skips them and the drain cannot run, so
|
|
229
|
+
* they cannot make progress — and watch events are detected from PR
|
|
230
|
+
* state, not notifications, so holding the cursor for them only stalls
|
|
231
|
+
* unrelated comment traffic until the watch sidecar recovers. Once
|
|
232
|
+
* reconcile succeeds they count again, and their retry budgets guarantee
|
|
233
|
+
* they settle instead of freezing the cursor forever.
|
|
234
|
+
*/
|
|
235
|
+
private hasCursorBlockingTasks;
|
|
236
|
+
/**
|
|
237
|
+
* Terminal outcome for a bound event that can no longer be delivered:
|
|
238
|
+
* append it to the private dead-letter log (the private path's exhaustion
|
|
239
|
+
* surface — it posts no public error comment) and remove the task. The
|
|
240
|
+
* event is surfaced for operator inspection, never silently consumed —
|
|
241
|
+
* including when the dead-letter write itself fails: the task is then
|
|
242
|
+
* kept, not removed.
|
|
243
|
+
*/
|
|
244
|
+
private retireBoundTask;
|
|
107
245
|
private hasPendingFinalDeliveryForTask;
|
|
108
246
|
private inboundTaskSourceKey;
|
|
247
|
+
private publicationAuditKeysCache;
|
|
248
|
+
private publicationAuditBlocked;
|
|
249
|
+
/**
|
|
250
|
+
* Publication audit keys cached for the current poll (reset at pollOnce
|
|
251
|
+
* start). Strict: an unreadable audit fails closed so the caller skips
|
|
252
|
+
* the event this poll instead of risking a duplicate publication.
|
|
253
|
+
*/
|
|
254
|
+
private publicationAuditKeysThisPoll;
|
|
109
255
|
private readPublicationAuditKeys;
|
|
110
256
|
private applyTaskDedupe;
|
|
111
257
|
private transitionInboundTask;
|
|
@@ -124,6 +270,77 @@ export declare class GithubChannel extends PollingChannelBase<GithubCursor> {
|
|
|
124
270
|
private buildRouteMetadata;
|
|
125
271
|
private githubApi;
|
|
126
272
|
private sleepForRetry;
|
|
273
|
+
private prBindingKey;
|
|
274
|
+
/**
|
|
275
|
+
* Parses a binding URL into its repo/number identity. Only GitHub web URLs
|
|
276
|
+
* on this channel's host qualify; Aone and other providers are ignored.
|
|
277
|
+
* Trailing tab segments (/files, /commits, /checks) are tolerated: the
|
|
278
|
+
* binding routes accept any http(s) URL naming the PR.
|
|
279
|
+
*/
|
|
280
|
+
private parsePrBindingUrl;
|
|
281
|
+
private refreshBoundSessions;
|
|
282
|
+
private resolveBoundDelivery;
|
|
283
|
+
/**
|
|
284
|
+
* Pick the most-recent live follower of a PR from the full binding list,
|
|
285
|
+
* excluding sessions already known Gone in this delivery attempt. Unlike
|
|
286
|
+
* resolveBoundDelivery (the single routing-map winner), this scans every
|
|
287
|
+
* listed follower so the gone-fallback can iterate past a Gone winner to
|
|
288
|
+
* the next live session — evicting the winner empties the routing map, and
|
|
289
|
+
* a stale refresh can re-list an already-Gone session as the winner; both
|
|
290
|
+
* would otherwise skip a live follower and fall through to an irreversible
|
|
291
|
+
* public reply while a complete snapshot still lists a follower.
|
|
292
|
+
*/
|
|
293
|
+
private resolveBoundDeliveryExcluding;
|
|
294
|
+
/**
|
|
295
|
+
* Remove a session the daemon reported permanently gone from both binding
|
|
296
|
+
* maps. A later partial snapshot otherwise retains it by recency (an
|
|
297
|
+
* incomplete enumeration is a non-absence, but an authoritative Gone is),
|
|
298
|
+
* shadowing any live follower of the same PR.
|
|
299
|
+
*/
|
|
300
|
+
private evictBoundSession;
|
|
301
|
+
private buildBoundSessionPrompt;
|
|
302
|
+
private deliverToBoundSession;
|
|
303
|
+
private prWatchStatePath;
|
|
304
|
+
private loadPrWatchState;
|
|
305
|
+
/**
|
|
306
|
+
* Whether any persisted watch entry still holds pending events. Keeps
|
|
307
|
+
* recovery blocked while watch subscriptions are disabled: an accepted
|
|
308
|
+
* task whose pending record is unreconciled must not be delivered and
|
|
309
|
+
* removed ahead of a later re-enabled drain. Fail-closed on read errors.
|
|
310
|
+
*/
|
|
311
|
+
private hasUnreconciledWatchPending;
|
|
312
|
+
/**
|
|
313
|
+
* PR keys whose earlier watch transition still has a recoverable inbound
|
|
314
|
+
* task. Undefined when the task store cannot be read: the caller must
|
|
315
|
+
* not prune or evict watch memory it cannot cross-check (fail-closed).
|
|
316
|
+
*/
|
|
317
|
+
private survivingWatchPrKeys;
|
|
318
|
+
private savePrWatchState;
|
|
319
|
+
/**
|
|
320
|
+
* Drain durable pending watch events independently of the live API pass
|
|
321
|
+
* and BEFORE generic recovery. Needs no GitHub calls: a failing or
|
|
322
|
+
* rate-limited watch pass must not starve already-detected events, and
|
|
323
|
+
* recovery must not deliver-and-remove a task that a later drain would
|
|
324
|
+
* re-claim (crash between the claim and the pending->fired save leaves
|
|
325
|
+
* both records on disk).
|
|
326
|
+
*/
|
|
327
|
+
private reconcilePendingWatch;
|
|
328
|
+
/**
|
|
329
|
+
* Edge-triggered state watch over the PRs bound to live sessions. Runs
|
|
330
|
+
* inside the existing poll loop; detection is API-level and costs no model
|
|
331
|
+
* tokens until a real transition fires.
|
|
332
|
+
*/
|
|
333
|
+
private runPrStateWatch;
|
|
334
|
+
private watchOnePr;
|
|
335
|
+
/**
|
|
336
|
+
* Deliver queued watch events. Order per event: claim the inbound task
|
|
337
|
+
* (durable), move the key from pending to fired (durable), then run the
|
|
338
|
+
* task. A crash at any point leaves either a pending event or a claimed
|
|
339
|
+
* task for the next poll / recovery, and the fired ring prevents a second
|
|
340
|
+
* delivery of the same transition.
|
|
341
|
+
*/
|
|
342
|
+
private drainPendingWatch;
|
|
343
|
+
private fetchCiAggregate;
|
|
127
344
|
private markNotificationsAsRead;
|
|
128
345
|
private postErrorComment;
|
|
129
346
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GithubAdapter.d.ts","sourceRoot":"","sources":["../src/GithubAdapter.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,yBAAyB,
|
|
1
|
+
{"version":3,"file":"GithubAdapter.d.ts","sourceRoot":"","sources":["../src/GithubAdapter.ts"],"names":[],"mappings":"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"}
|