@remixhq/core 0.1.16 → 0.1.18

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/api.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { CoreConfig } from './config.js';
2
2
  import { T as TokenProvider } from './tokenProvider-BWTusyj4.js';
3
- import { T as TurnUsage } from './contracts-CHmD-fMj.js';
3
+ import { T as TurnUsage } from './contracts-DnNP-K3V.js';
4
4
  import 'zod';
5
5
 
6
6
  type HistoryImportProvider = "claude_code" | "cursor";
@@ -109,6 +109,8 @@ type MergeRequestReview = {
109
109
  commitId: string | null;
110
110
  baseCommitHash: string | null;
111
111
  headCommitHash: string | null;
112
+ baseRevisionId: string | null;
113
+ resultRevisionId: string | null;
112
114
  changedFilesCount: number | null;
113
115
  insertions: number | null;
114
116
  deletions: number | null;
@@ -507,6 +509,8 @@ type ApiClient = {
507
509
  getAppDelta(appId: string, payload: {
508
510
  baseHeadHash: string;
509
511
  targetHeadHash?: string;
512
+ baseRevisionId?: string | null;
513
+ targetRevisionId?: string | null;
510
514
  localSnapshotHash?: string;
511
515
  repoFingerprint?: string;
512
516
  remoteUrl?: string;
@@ -525,6 +529,7 @@ type ApiClient = {
525
529
  diff: string;
526
530
  baseCommitHash?: string | null;
527
531
  headCommitHash?: string | null;
532
+ baseRevisionId?: string | null;
528
533
  changedFilesCount?: number;
529
534
  insertions?: number;
530
535
  deletions?: number;
@@ -543,6 +548,8 @@ type ApiClient = {
543
548
  diff: string;
544
549
  baseCommitHash: string;
545
550
  targetHeadCommitHash: string;
551
+ baseRevisionId?: string | null;
552
+ targetRevisionId?: string | null;
546
553
  expectedPaths: string[];
547
554
  actor?: {
548
555
  type?: string;
@@ -684,6 +691,9 @@ type ApiClient = {
684
691
  syncUpstreamApp(appId: string): Promise<Json>;
685
692
  preflightAppReconcile(appId: string, payload: {
686
693
  localHeadCommitHash: string;
694
+ baseRevisionId?: string | null;
695
+ localRevisionId?: string | null;
696
+ targetRevisionId?: string | null;
687
697
  repoFingerprint?: string;
688
698
  remoteUrl?: string;
689
699
  defaultBranch?: string;
@@ -691,6 +701,9 @@ type ApiClient = {
691
701
  startAppReconcile(appId: string, payload: {
692
702
  uploadId: string;
693
703
  localHeadCommitHash: string;
704
+ baseRevisionId?: string | null;
705
+ localRevisionId?: string | null;
706
+ targetRevisionId?: string | null;
694
707
  repoFingerprint?: string;
695
708
  remoteUrl?: string;
696
709
  defaultBranch?: string;
@@ -704,6 +717,7 @@ type ApiClient = {
704
717
  }>;
705
718
  syncLocalApp(appId: string, payload: {
706
719
  baseCommitHash: string;
720
+ baseRevisionId?: string | null;
707
721
  repoFingerprint?: string;
708
722
  remoteUrl?: string;
709
723
  defaultBranch?: string;
@@ -739,6 +753,20 @@ type ApiClient = {
739
753
  declare function createApiClient(config: CoreConfig, opts?: {
740
754
  apiKey?: string | null;
741
755
  tokenProvider?: TokenProvider;
756
+ /**
757
+ * Per-request wall-clock budget applied to every call this client makes.
758
+ * When the deadline elapses the underlying fetch is aborted via
759
+ * `AbortSignal.timeout`, which surfaces as an `AbortError`/`TimeoutError`
760
+ * in the caller's catch block.
761
+ *
762
+ * Default: undefined (no timeout — same behavior as before this option
763
+ * existed). Long-tail callers like bundle uploads/downloads or history
764
+ * imports legitimately take longer than any reasonable hook budget, so
765
+ * we only opt-in for short-lived flows that have explicit recovery
766
+ * paths (e.g. plugin Stop hooks, where exceeding the budget triggers
767
+ * a deferred-turn defer + drainer retry).
768
+ */
769
+ defaultRequestTimeoutMs?: number;
742
770
  }): ApiClient;
743
771
 
744
772
  export { type AgentMemoryItem, type AgentMemoryKind, type AgentMemorySearchItem, type AgentMemorySearchResponse, type AgentMemorySummary, type AgentMemoryTimelineResponse, type ApiClient, type AppContext, type AppContextAccessPath, type AppReconcileResponse, type Bundle, type BundlePlatform, type BundleStatus, type ChangeStepDiffResponse, type HistoricalTurnRecord, type HistoryImportCaptureSource, type HistoryImportProvider, type HistoryImportRecordMetadata, type HistoryImportWorkspaceMetadata, type ImportHistoryRecordOutcome, type ImportHistoryRequest, type ImportHistoryResponse, type InitiateBundleRequest, type InvitationRecord, type MergeRequest, type MergeRequestReview, type MergeRequestStatus, type ReconcilePreflightResponse, type SyncLocalResponse, type SyncUpstreamResponse, createApiClient };
package/dist/api.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-US5SM7ZC.js";
4
- import "./chunk-YZ34ICNN.js";
3
+ } from "./chunk-RCNOSZP6.js";
4
+ import "./chunk-7XJGOKEO.js";
5
5
  export {
6
6
  createApiClient
7
7
  };
package/dist/auth.js CHANGED
@@ -4,8 +4,8 @@ import {
4
4
  createSupabaseAuthHelpers,
5
5
  shouldRefreshSoon,
6
6
  storedSessionSchema
7
- } from "./chunk-P6JHXOV4.js";
8
- import "./chunk-YZ34ICNN.js";
7
+ } from "./chunk-XETDXVGM.js";
8
+ import "./chunk-7XJGOKEO.js";
9
9
  export {
10
10
  createLocalSessionStore,
11
11
  createStoredSessionTokenProvider,
package/dist/binding.js CHANGED
@@ -3,10 +3,10 @@ import {
3
3
  readCollabBinding,
4
4
  readCollabBindingState,
5
5
  writeCollabBinding
6
- } from "./chunk-YCFLOHJV.js";
7
- import "./chunk-WT6VRLXU.js";
6
+ } from "./chunk-DBVN42RF.js";
7
+ import "./chunk-S4ECO35X.js";
8
8
  import "./chunk-GC2MOT3U.js";
9
- import "./chunk-YZ34ICNN.js";
9
+ import "./chunk-7XJGOKEO.js";
10
10
  export {
11
11
  getCollabBindingPath,
12
12
  readCollabBinding,
@@ -0,0 +1,23 @@
1
+ // src/errors/cliError.ts
2
+ var RemixError = class extends Error {
3
+ code;
4
+ exitCode;
5
+ hint;
6
+ // HTTP status code when this error originates from an API response.
7
+ // null for non-HTTP errors (validation, local IO, programming bugs).
8
+ // Callers use this to distinguish transient (5xx) from permanent (4xx)
9
+ // API failures without resorting to error-message string matching.
10
+ statusCode;
11
+ constructor(message, opts) {
12
+ super(message);
13
+ this.name = "RemixError";
14
+ this.code = opts?.code ?? null;
15
+ this.exitCode = opts?.exitCode ?? 1;
16
+ this.hint = opts?.hint ?? null;
17
+ this.statusCode = opts?.statusCode ?? null;
18
+ }
19
+ };
20
+
21
+ export {
22
+ RemixError
23
+ };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  getCurrentBranch
3
- } from "./chunk-WT6VRLXU.js";
3
+ } from "./chunk-S4ECO35X.js";
4
4
  import {
5
5
  RemixError
6
- } from "./chunk-YZ34ICNN.js";
6
+ } from "./chunk-7XJGOKEO.js";
7
7
 
8
8
  // src/infrastructure/binding/collabBindingStore.ts
9
9
  import fs2 from "fs/promises";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RemixError
3
- } from "./chunk-YZ34ICNN.js";
3
+ } from "./chunk-7XJGOKEO.js";
4
4
 
5
5
  // src/api/client.ts
6
6
  async function readJsonSafe(res) {
@@ -15,8 +15,13 @@ async function readJsonSafe(res) {
15
15
  function createApiClient(config, opts) {
16
16
  const apiKey = (opts?.apiKey ?? "").trim();
17
17
  const tokenProvider = opts?.tokenProvider;
18
+ const defaultTimeoutMs = typeof opts?.defaultRequestTimeoutMs === "number" && opts.defaultRequestTimeoutMs > 0 ? opts.defaultRequestTimeoutMs : null;
18
19
  const CLIENT_KEY_HEADER = "x-comerge-api-key";
19
- async function request(path, init) {
20
+ function makeTimeoutSignal(timeoutMs) {
21
+ const ms = typeof timeoutMs === "number" && timeoutMs > 0 ? timeoutMs : defaultTimeoutMs;
22
+ return ms != null ? AbortSignal.timeout(ms) : void 0;
23
+ }
24
+ async function request(path, init, opts2) {
20
25
  if (!tokenProvider) {
21
26
  throw new RemixError("API client is missing a token provider.", {
22
27
  exitCode: 1,
@@ -27,6 +32,7 @@ function createApiClient(config, opts) {
27
32
  const url = new URL(path, config.apiUrl).toString();
28
33
  const doFetch = async (bearer) => fetch(url, {
29
34
  ...init,
35
+ signal: makeTimeoutSignal(opts2?.timeoutMs),
30
36
  headers: {
31
37
  Accept: "application/json",
32
38
  "Content-Type": "application/json",
@@ -43,12 +49,16 @@ function createApiClient(config, opts) {
43
49
  if (!res.ok) {
44
50
  const body = await readJsonSafe(res);
45
51
  const msg = (body && typeof body === "object" && body && "message" in body && typeof body.message === "string" ? body.message : null) ?? `Request failed (status ${res.status})`;
46
- throw new RemixError(msg, { exitCode: 1, hint: body ? JSON.stringify(body, null, 2) : null });
52
+ throw new RemixError(msg, {
53
+ exitCode: 1,
54
+ hint: body ? JSON.stringify(body, null, 2) : null,
55
+ statusCode: res.status
56
+ });
47
57
  }
48
58
  const json = await readJsonSafe(res);
49
59
  return json ?? null;
50
60
  }
51
- async function requestBinary(path, init) {
61
+ async function requestBinary(path, init, opts2) {
52
62
  if (!tokenProvider) {
53
63
  throw new RemixError("API client is missing a token provider.", {
54
64
  exitCode: 1,
@@ -59,6 +69,7 @@ function createApiClient(config, opts) {
59
69
  const url = new URL(path, config.apiUrl).toString();
60
70
  const doFetch = async (bearer) => fetch(url, {
61
71
  ...init,
72
+ signal: makeTimeoutSignal(opts2?.timeoutMs),
62
73
  headers: {
63
74
  Accept: "*/*",
64
75
  ...init?.headers ?? {},
@@ -74,7 +85,11 @@ function createApiClient(config, opts) {
74
85
  if (!res.ok) {
75
86
  const body = await readJsonSafe(res);
76
87
  const msg = (body && typeof body === "object" && body && "message" in body && typeof body.message === "string" ? body.message : null) ?? `Request failed (status ${res.status})`;
77
- throw new RemixError(msg, { exitCode: 1, hint: body ? JSON.stringify(body, null, 2) : null });
88
+ throw new RemixError(msg, {
89
+ exitCode: 1,
90
+ hint: body ? JSON.stringify(body, null, 2) : null,
91
+ statusCode: res.status
92
+ });
78
93
  }
79
94
  const contentDisposition = res.headers.get("content-disposition") ?? "";
80
95
  const fileNameMatch = contentDisposition.match(/filename=\"([^\"]+)\"/i);
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-GC2MOT3U.js";
4
4
  import {
5
5
  RemixError
6
- } from "./chunk-YZ34ICNN.js";
6
+ } from "./chunk-7XJGOKEO.js";
7
7
 
8
8
  // src/infrastructure/repo/gitRepo.ts
9
9
  import fs from "fs/promises";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RemixError
3
- } from "./chunk-YZ34ICNN.js";
3
+ } from "./chunk-7XJGOKEO.js";
4
4
 
5
5
  // src/config/model.ts
6
6
  import { z } from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RemixError
3
- } from "./chunk-YZ34ICNN.js";
3
+ } from "./chunk-7XJGOKEO.js";
4
4
 
5
5
  // src/auth/session.ts
6
6
  import { z } from "zod";
package/dist/collab.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { C as CollabApiClient, a as TurnUsagePayload, b as CollabFinalizeTurnResult, c as CollabRecordingPreflight, d as CollabApproveMode, e as CollabApproveResult, M as MergeRequestQueue, f as MergeRequest, I as InvitationScopeType, g as CollabMember, J as JsonObject, A as AppDeltaResponse, h as CollabStatus, i as MergeRequestReview } from './contracts-CHmD-fMj.js';
2
- export { j as AppHeadResponse, k as AppMember, l as AppMemberRole, m as AppReconcileResponse, n as CollabFinalizeTurnAutoSync, o as CollabFinalizeTurnMode, p as CollabPendingFinalizeState, q as CollabPendingFinalizeSummary, r as CollabRecordingPreflightStatus, s as CollabRepoStateKind, t as CollabStatusBlockedReason, u as CollabStatusRecommendedAction, v as CollabTurn, w as MembershipScopeType, x as MergeRequestStatus, y as ModelCall, O as OrganizationMember, z as OrganizationMemberRole, P as ProjectMember, B as ProjectMemberRole, R as ReconcilePreflightResponse, S as ServerToolUsage, D as SyncLocalResponse, E as SyncUpstreamResponse, T as TurnUsage, F as TurnUsageCaptureSource, G as TurnUsageConfidence, H as TurnUsagePreviousPatch } from './contracts-CHmD-fMj.js';
1
+ import { C as CollabApiClient, a as TurnUsagePayload, b as CollabFinalizeTurnResult, c as CollabRecordingPreflight, d as CollabApproveMode, e as CollabApproveResult, M as MergeRequestQueue, f as MergeRequest, I as InvitationScopeType, g as CollabMember, J as JsonObject, A as AppDeltaResponse, h as CollabStatus, i as MergeRequestReview } from './contracts-DnNP-K3V.js';
2
+ export { j as AppHeadResponse, k as AppMember, l as AppMemberRole, m as AppReconcileResponse, n as CollabFinalizeTurnAutoSync, o as CollabFinalizeTurnMode, p as CollabPendingFinalizeState, q as CollabPendingFinalizeSummary, r as CollabRecordingPreflightStatus, s as CollabRepoStateKind, t as CollabStatusBlockedReason, u as CollabStatusRecommendedAction, v as CollabTurn, w as MembershipScopeType, x as MergeRequestStatus, y as ModelCall, O as OrganizationMember, z as OrganizationMemberRole, P as ProjectMember, B as ProjectMemberRole, R as ReconcilePreflightResponse, S as ServerToolUsage, D as SyncLocalResponse, E as SyncUpstreamResponse, T as TurnUsage, F as TurnUsageCaptureSource, G as TurnUsageConfidence, H as TurnUsagePreviousPatch } from './contracts-DnNP-K3V.js';
3
3
  import { B as BranchBindingMode } from './binding-WiIRI2fl.js';
4
4
 
5
5
  declare function collabFinalizeTurn(params: {
@@ -45,7 +45,7 @@ declare function collabFinalizeTurn(params: {
45
45
  awaitingUsageDeadlineMs?: number | null;
46
46
  }): Promise<CollabFinalizeTurnResult>;
47
47
 
48
- declare const FINALIZE_PREFLIGHT_FAILURE_CODES: readonly ["not_bound", "branch_binding_missing", "family_ambiguous", "metadata_conflict", "branch_mismatch", "missing_head", "remote_error", "pull_required", "re_anchor_required"];
48
+ declare const FINALIZE_PREFLIGHT_FAILURE_CODES: readonly ["not_bound", "branch_binding_missing", "family_ambiguous", "metadata_conflict", "branch_mismatch", "missing_head", "remote_error", "pull_required", "reconcile_required", "baseline_missing"];
49
49
  type FinalizePreflightFailureCode = (typeof FINALIZE_PREFLIGHT_FAILURE_CODES)[number];
50
50
  declare function isFinalizePreflightFailureCode(value: unknown): value is FinalizePreflightFailureCode;
51
51
 
@@ -129,7 +129,7 @@ declare function collabUpdateMemberRole(params: {
129
129
  member: CollabMember;
130
130
  }>;
131
131
 
132
- type InitBaselineStatus = "seeded" | "existing" | "requires_re_anchor" | "requires_sync";
132
+ type InitBaselineStatus = "seeded" | "existing" | "baseline_missing" | "requires_sync";
133
133
  type CollabInitQueuedResult = {
134
134
  queued: true;
135
135
  jobId: string;
@@ -271,90 +271,6 @@ declare function collabList(params: {
271
271
  };
272
272
  }>;
273
273
 
274
- declare function collabReAnchor(params: {
275
- api: CollabApiClient;
276
- cwd: string;
277
- dryRun?: boolean;
278
- allowBranchMismatch?: boolean;
279
- asyncSubmit?: boolean;
280
- }): Promise<{
281
- status: string;
282
- repoRoot: string;
283
- branch: string;
284
- currentAppId: string;
285
- localHeadCommitHash: string;
286
- targetHeadCommitHash: string;
287
- targetHeadCommitId: string;
288
- warnings: string[];
289
- applied: boolean;
290
- dryRun: boolean;
291
- } | {
292
- status: "queued";
293
- queued: true;
294
- jobId: string;
295
- repoRoot: string;
296
- branch: string;
297
- currentAppId: string;
298
- dryRun: boolean;
299
- applied: boolean;
300
- localHeadCommitHash?: undefined;
301
- targetHeadCommitHash?: undefined;
302
- warnings?: undefined;
303
- } | {
304
- status: "queued";
305
- queued: true;
306
- jobId: string;
307
- repoRoot: string;
308
- branch: string;
309
- currentAppId: string;
310
- localHeadCommitHash: string;
311
- targetHeadCommitHash: string;
312
- warnings: string[];
313
- dryRun: boolean;
314
- applied: boolean;
315
- }>;
316
- declare function collabReAnchorSubmit(params: {
317
- api: CollabApiClient;
318
- cwd: string;
319
- dryRun?: boolean;
320
- allowBranchMismatch?: boolean;
321
- }): Promise<{
322
- status: string;
323
- repoRoot: string;
324
- branch: string;
325
- currentAppId: string;
326
- localHeadCommitHash: string;
327
- targetHeadCommitHash: string;
328
- targetHeadCommitId: string;
329
- warnings: string[];
330
- applied: boolean;
331
- dryRun: boolean;
332
- } | {
333
- status: "queued";
334
- queued: true;
335
- jobId: string;
336
- repoRoot: string;
337
- branch: string;
338
- currentAppId: string;
339
- dryRun: boolean;
340
- applied: boolean;
341
- localHeadCommitHash?: undefined;
342
- targetHeadCommitHash?: undefined;
343
- warnings?: undefined;
344
- } | {
345
- status: "queued";
346
- queued: true;
347
- jobId: string;
348
- repoRoot: string;
349
- branch: string;
350
- currentAppId: string;
351
- localHeadCommitHash: string;
352
- targetHeadCommitHash: string;
353
- warnings: string[];
354
- dryRun: boolean;
355
- applied: boolean;
356
- }>;
357
-
358
274
  declare function collabReconcile(params: {
359
275
  api: CollabApiClient;
360
276
  cwd: string;
@@ -372,41 +288,6 @@ declare function collabReconcile(params: {
372
288
  applied: boolean;
373
289
  dryRun: boolean;
374
290
  warnings?: string[];
375
- } | {
376
- status: string;
377
- repoRoot: string;
378
- branch: string;
379
- currentAppId: string;
380
- localHeadCommitHash: string;
381
- targetHeadCommitHash: string;
382
- targetHeadCommitId: string;
383
- warnings: string[];
384
- applied: boolean;
385
- dryRun: boolean;
386
- } | {
387
- status: "queued";
388
- queued: true;
389
- jobId: string;
390
- repoRoot: string;
391
- branch: string;
392
- currentAppId: string;
393
- dryRun: boolean;
394
- applied: boolean;
395
- localHeadCommitHash?: undefined;
396
- targetHeadCommitHash?: undefined;
397
- warnings?: undefined;
398
- } | {
399
- status: "queued";
400
- queued: true;
401
- jobId: string;
402
- repoRoot: string;
403
- branch: string;
404
- currentAppId: string;
405
- localHeadCommitHash: string;
406
- targetHeadCommitHash: string;
407
- warnings: string[];
408
- dryRun: boolean;
409
- applied: boolean;
410
291
  } | {
411
292
  status: string;
412
293
  repoRoot: string;
@@ -528,6 +409,7 @@ type PendingFinalizeJob = {
528
409
  prompt: string;
529
410
  assistantResponse: string;
530
411
  baselineSnapshotId: string | null;
412
+ baselineServerRevisionId: string | null;
531
413
  baselineServerHeadHash: string | null;
532
414
  currentSnapshotId: string;
533
415
  capturedAt: string;
@@ -584,9 +466,6 @@ type ProcessOutcome = {
584
466
  declare function collabInitProcess(jobId: string, opts: {
585
467
  api: CollabApiClient;
586
468
  }): Promise<ProcessOutcome>;
587
- declare function collabReAnchorProcess(jobId: string, opts: {
588
- api: CollabApiClient;
589
- }): Promise<ProcessOutcome>;
590
469
  declare function drainAsyncJobs(opts: {
591
470
  api: CollabApiClient;
592
471
  respectPidLock?: boolean;
@@ -697,4 +576,4 @@ declare function drainerLogPath(): string;
697
576
  declare function getDrainerLogPath(): string;
698
577
  declare function getDrainerPidPath(): string;
699
578
 
700
- export { AppDeltaResponse, type AsyncJob, type AsyncJobBase, type AsyncJobKind, type AsyncJobStatus, type AsyncJobSummary, type AwaitAsyncJobResult, CollabApiClient, CollabApproveMode, CollabApproveResult, CollabFinalizeTurnResult, type CollabInitQueuedResult, CollabMember, CollabRecordingPreflight, CollabStatus, type DrainerLogEvent, FINALIZE_JOB_LOCK_STALE_MS, FINALIZE_PREFLIGHT_FAILURE_CODES, type FinalizePreflightFailureCode, type InitJobPayload, InvitationScopeType, JsonObject, MergeRequest, MergeRequestQueue, MergeRequestReview, type PendingFinalizeJob, type ReAnchorJobPayload, TurnUsagePayload, awaitAsyncJob, cleanStaleFinalizeJobLocks, collabApprove, collabCheckout, collabFinalizeTurn, collabInit, collabInitProcess, collabInitSubmit, collabInvite, collabList, collabListMembers, collabListMergeRequests, collabReAnchor, collabReAnchorProcess, collabReAnchorSubmit, collabReconcile, collabRecordingPreflight, collabReject, collabRemix, collabRequestMerge, collabStatus, collabSync, collabSyncUpstream, collabUpdateMemberRole, collabView, deleteAsyncJob, drainAsyncJobs, drainPendingFinalizeQueue, drainerLogPath, findFailedAsyncJob, findPendingAsyncJob, forgetPendingFinalizeJob, getDrainerLogPath, getDrainerPidPath, getMemberRolesForScope, isFinalizePreflightFailureCode, listAsyncJobs, listAsyncJobsForRepo, listPendingFinalizeJobs, processPendingFinalizeJob, pruneTerminalAsyncJobs, readAsyncJob, readPendingFinalizeJob, requeuePendingFinalizeJob, summarizeAsyncJobs, updatePendingFinalizeJob, validateMemberRole };
579
+ export { AppDeltaResponse, type AsyncJob, type AsyncJobBase, type AsyncJobKind, type AsyncJobStatus, type AsyncJobSummary, type AwaitAsyncJobResult, CollabApiClient, CollabApproveMode, CollabApproveResult, CollabFinalizeTurnResult, type CollabInitQueuedResult, CollabMember, CollabRecordingPreflight, CollabStatus, type DrainerLogEvent, FINALIZE_JOB_LOCK_STALE_MS, FINALIZE_PREFLIGHT_FAILURE_CODES, type FinalizePreflightFailureCode, type InitJobPayload, InvitationScopeType, JsonObject, MergeRequest, MergeRequestQueue, MergeRequestReview, type PendingFinalizeJob, type ReAnchorJobPayload, TurnUsagePayload, awaitAsyncJob, cleanStaleFinalizeJobLocks, collabApprove, collabCheckout, collabFinalizeTurn, collabInit, collabInitProcess, collabInitSubmit, collabInvite, collabList, collabListMembers, collabListMergeRequests, collabReconcile, collabRecordingPreflight, collabReject, collabRemix, collabRequestMerge, collabStatus, collabSync, collabSyncUpstream, collabUpdateMemberRole, collabView, deleteAsyncJob, drainAsyncJobs, drainPendingFinalizeQueue, drainerLogPath, findFailedAsyncJob, findPendingAsyncJob, forgetPendingFinalizeJob, getDrainerLogPath, getDrainerPidPath, getMemberRolesForScope, isFinalizePreflightFailureCode, listAsyncJobs, listAsyncJobsForRepo, listPendingFinalizeJobs, processPendingFinalizeJob, pruneTerminalAsyncJobs, readAsyncJob, readPendingFinalizeJob, requeuePendingFinalizeJob, summarizeAsyncJobs, updatePendingFinalizeJob, validateMemberRole };