@cortexkit/antigravity-auth-core 3.0.18 → 3.0.20

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.
@@ -50,6 +50,12 @@ export interface ClaustrumConsumerOptions<Q = QuotaObservation> {
50
50
  * routine token refresh, which never moves the view.
51
51
  */
52
52
  onRoster?: (roster: VaultRosterFile) => void;
53
+ /**
54
+ * Called once when a coalesced discovery starts, with its completion promise.
55
+ * Covers explicit refresh, poll, watch and send-triggered discovery, even when
56
+ * the view does not change. Observe rejection when attaching async work.
57
+ */
58
+ onDiscovery?: (promise: Promise<VaultRosterFile | undefined>) => void;
53
59
  onError?: (error: unknown) => void;
54
60
  /**
55
61
  * How often `start()` ticks. A tick lists the vault when no vault watch is
@@ -104,6 +110,8 @@ export interface HubMemberPort {
104
110
  keptReceiptState(): KeptReceiptState;
105
111
  /** Apply the union of every member's roster in memory to kept receipts. */
106
112
  retainUnion(): void;
113
+ /** Share a committed preference change with live members using this roster file. */
114
+ publishRoster(roster: VaultRosterFile): void;
107
115
  forget(credentialId: string): void;
108
116
  /** The member closed: the hub stops committing and pushing to it. */
109
117
  detach(): void;
@@ -113,6 +121,8 @@ export interface HubRefreshOutcome {
113
121
  }
114
122
  /** What the hub may do to one member's memory. Package-internal. */
115
123
  export interface HubMemberHooks {
124
+ /** Observe a hub discovery without relying on member refresh overrides. */
125
+ discovery(promise: Promise<HubRefreshOutcome | undefined>): void;
116
126
  /**
117
127
  * Set the roster in memory as a consumer's own refresh does (pending quota
118
128
  * readings included) and notify `onRoster` when its view changed.
@@ -314,8 +314,17 @@ export class ClaustrumConsumer {
314
314
  this.#refreshing = undefined;
315
315
  });
316
316
  this.#track(this.#refreshing);
317
+ this.#notifyDiscovery(this.#refreshing);
317
318
  return this.#refreshing;
318
319
  }
320
+ #notifyDiscovery(promise) {
321
+ try {
322
+ this.#options.onDiscovery?.(promise);
323
+ }
324
+ catch (error) {
325
+ this.#options.onError?.(error);
326
+ }
327
+ }
319
328
  /**
320
329
  * Poll in the background and open the vault and insula watches. Until the
321
330
  * vault watch is accepted, and whenever it is unavailable, every tick lists
@@ -571,6 +580,13 @@ export class ClaustrumConsumer {
571
580
  /** The hub's handle on this member's memory. */
572
581
  #hubHooks() {
573
582
  return {
583
+ discovery: (promise) => {
584
+ const hub = this.#hub;
585
+ if (!hub || !this.#options.onDiscovery || this.#shutdown.signal.aborted)
586
+ return;
587
+ const discovery = this.#track(promise.then((outcome) => this.#hubOutcome(hub, outcome)));
588
+ this.#notifyDiscovery(discovery);
589
+ },
574
590
  install: (roster) => {
575
591
  if (this.#shutdown.signal.aborted)
576
592
  return;
@@ -607,6 +623,9 @@ export class ClaustrumConsumer {
607
623
  */
608
624
  async #hubRefresh(hub) {
609
625
  const outcome = await hub.refresh();
626
+ return this.#hubOutcome(hub, outcome);
627
+ }
628
+ #hubOutcome(hub, outcome) {
610
629
  this.#assertOpen();
611
630
  if (!outcome)
612
631
  return undefined;
@@ -788,6 +807,8 @@ export class ClaustrumConsumer {
788
807
  this.#assertOpen();
789
808
  await declineVaultRoute(this.#options.rosterPath, routeId);
790
809
  this.#roster = pendingVaultQuota(this.#options.rosterPath, await readVaultRoster(this.#options.rosterPath));
810
+ if (this.#roster)
811
+ this.#hub?.publishRoster(this.#roster);
791
812
  // A hub member shares kept receipts with every other member, so they are
792
813
  // retained against all members' rosters, never against this one alone.
793
814
  if (this.#hub)
@@ -799,6 +820,8 @@ export class ClaustrumConsumer {
799
820
  this.#assertOpen();
800
821
  await acceptVaultRoute(this.#options.rosterPath, routeId);
801
822
  this.#roster = pendingVaultQuota(this.#options.rosterPath, await readVaultRoster(this.#options.rosterPath));
823
+ if (this.#roster)
824
+ this.#hub?.publishRoster(this.#roster);
802
825
  }
803
826
  /**
804
827
  * Set the order vault accounts are tried in (`reorderVaultRoster`), then
@@ -809,6 +832,8 @@ export class ClaustrumConsumer {
809
832
  this.#assertOpen();
810
833
  const result = await reorderVaultRoster(this.#options.rosterPath, routeIds);
811
834
  this.#roster = pendingVaultQuota(this.#options.rosterPath, await readVaultRoster(this.#options.rosterPath));
835
+ if (this.#roster)
836
+ this.#hub?.publishRoster(this.#roster);
812
837
  return result;
813
838
  }
814
839
  /**
@@ -25,7 +25,8 @@ export interface ClaustrumFamily {
25
25
  /** Non-secret classification facts, including rows decoded by older clients. */
26
26
  export interface VaultRowFacts {
27
27
  readonly credentialId: string;
28
- readonly credentialType: string;
28
+ /** Internal serving type derived from `authMethod`, not the id's type hint. */
29
+ readonly credentialType: VaultCredentialType;
29
30
  readonly authMethod?: string;
30
31
  readonly refreshAdapter?: string;
31
32
  readonly providerIds?: readonly string[];
@@ -108,7 +109,10 @@ export interface VaultInventory {
108
109
  readonly view: string;
109
110
  readonly credentials: readonly VaultCredential[];
110
111
  readonly skipped: readonly SkippedVaultRecord[];
111
- /** Classifying families only: fixed refusal codes, never classifier errors. */
112
+ /**
113
+ * Classifying families only: declared policy codes or the fixed library codes
114
+ * `unknown-auth-method`, `unmapped` and `unclassified`, never classifier errors.
115
+ */
112
116
  readonly refused?: readonly {
113
117
  credentialId?: string;
114
118
  code: string;
@@ -85,16 +85,28 @@ function credentialTypeOf(row, family) {
85
85
  return notMine;
86
86
  if (!row.categories.includes(family.category))
87
87
  return notMine;
88
- if (row.credentialType !== 'oauth' && row.credentialType !== 'api_key')
89
- return notMine;
90
88
  if ('classify' in family) {
91
- // Older clients omit these facts entirely; do not call a policy that needs them.
89
+ const metadata = rowFactsOf(row);
90
+ let type;
91
+ // The id's type is only a hint; the vault's auth method determines serving.
92
+ switch (metadata.authMethod) {
93
+ case 'apikey':
94
+ type = 'api_key';
95
+ break;
96
+ case 'chatgpt':
97
+ case 'antigravity':
98
+ case 'oauth':
99
+ type = 'oauth';
100
+ break;
101
+ default:
102
+ return { kind: 'refused', code: 'unknown-auth-method' };
103
+ }
92
104
  const facts = {
93
105
  credentialId: row.id,
94
- credentialType: row.credentialType,
106
+ credentialType: type,
95
107
  categories: row.categories,
96
108
  refreshAdapter: row.refreshAdapter,
97
- ...rowFactsOf(row),
109
+ ...metadata,
98
110
  };
99
111
  if (facts.providerIds === undefined)
100
112
  return { kind: 'refused', code: 'unmapped' };
@@ -103,7 +115,7 @@ function credentialTypeOf(row, family) {
103
115
  if (result.kind === 'not-mine')
104
116
  return notMine;
105
117
  if (result.kind === 'mine' && typeof result.member === 'string')
106
- return { kind: 'mine', type: row.credentialType, member: result.member };
118
+ return { kind: 'mine', type, member: result.member };
107
119
  if (result.kind === 'refused' &&
108
120
  typeof result.code === 'string' &&
109
121
  /^[a-z][a-z0-9-]{0,31}$/.test(result.code) &&
@@ -116,6 +128,8 @@ function credentialTypeOf(row, family) {
116
128
  }
117
129
  return { kind: 'refused', code: 'unclassified' };
118
130
  }
131
+ if (row.credentialType !== 'oauth' && row.credentialType !== 'api_key')
132
+ return notMine;
119
133
  if (row.credentialType === 'oauth')
120
134
  return row.refreshAdapter === family.refreshAdapter
121
135
  ? { kind: 'mine', type: 'oauth' }
@@ -1,5 +1,5 @@
1
1
  import type { QuotaObservation } from '../quota/index.js';
2
- import { type ClaustrumConsumer } from './consumer.js';
2
+ import { type ClaustrumConsumer, type ClaustrumConsumerOptions } from './consumer.js';
3
3
  import { type ClassifyingClaustrumFamily, type ClaustrumScopedClient, ClaustrumScopedCustody, type IdentityParser, type KeptReceiptState, type VaultGrantReach } from './custody.js';
4
4
  import { type ClaustrumLogger } from './errors.js';
5
5
  import { type AccountMapper, type VaultRosterFile } from './roster.js';
@@ -100,6 +100,8 @@ export interface ClaustrumHubMemberOptions<_Q = QuotaObservation> {
100
100
  reservedRouteIds?: () => Iterable<string>;
101
101
  /** As `ClaustrumConsumerOptions.onRoster`: once per change of view. */
102
102
  onRoster?: (roster: VaultRosterFile) => void;
103
+ /** Observe every hub discovery's member result, including background work. */
104
+ onDiscovery?: ClaustrumConsumerOptions<_Q>['onDiscovery'];
103
105
  /** This member's own failures, such as a roster commit that failed. */
104
106
  onError?: (error: unknown) => void;
105
107
  logger?: ClaustrumLogger;
@@ -12,7 +12,7 @@
12
12
  // never replaces a view another process committed after this hub listed.
13
13
  import { createHash } from 'node:crypto';
14
14
  import { readdir, stat } from 'node:fs/promises';
15
- import { dirname, join } from 'node:path';
15
+ import { dirname, join, resolve } from 'node:path';
16
16
  import { createLogger } from '../logger/index.js';
17
17
  import { combineAbortSignals } from '../util/any-signal.js';
18
18
  import { ClaustrumUnreachableError } from './availability.js';
@@ -23,6 +23,8 @@ import { ClaustrumConsumerError } from './errors.js';
23
23
  import { DEFAULT_ROUTE_PREFIX, decodedVaultRoster, forgetPendingVaultDiscovery, isVaultRosterLockRefusal, readVaultRoster, refreshVaultRoster, vaultRosterSeed, } from './roster.js';
24
24
  import { drainShutdown, shutdownWarning } from './shutdown.js';
25
25
  import { SAFETY_POLL_MS } from './watch.js';
26
+ /** Published rosters are shared only in memory; file locks still order commits. */
27
+ const sharedRosters = new Map();
26
28
  /** Lowercase ASCII, safe as a file name on every OS. */
27
29
  const FILE_ID = /^[a-z0-9][a-z0-9._-]{0,63}$/;
28
30
  /** Device names Windows reserves in every directory, with any extension. */
@@ -250,9 +252,11 @@ export class ClaustrumDiscoveryHub {
250
252
  watchMode: () => this.watchState(),
251
253
  keptReceiptState: () => this.keptReceiptState(),
252
254
  retainUnion: () => this.#retainUnion(),
255
+ publishRoster: (roster) => this.#publishRoster(entry, roster),
253
256
  forget: (credentialId) => this.#current?.custody?.forget(credentialId),
254
257
  detach: () => {
255
258
  entry.closed = true;
259
+ entry.releaseRoster?.();
256
260
  },
257
261
  };
258
262
  const consumerOptions = {
@@ -265,14 +269,58 @@ export class ClaustrumDiscoveryHub {
265
269
  }),
266
270
  ...(this.#options.mapAccount && { mapAccount: this.#options.mapAccount }),
267
271
  ...(options.onRoster && { onRoster: options.onRoster }),
272
+ ...(options.onDiscovery && { onDiscovery: options.onDiscovery }),
268
273
  ...(options.onError && { onError: options.onError }),
269
274
  logger: options.logger ?? this.#logger,
270
275
  ...(this.#options.now && { now: this.#options.now }),
271
276
  };
272
277
  const { consumer, hooks } = createHubMember(port, consumerOptions);
273
278
  entry.hooks = hooks;
279
+ const path = resolve(entry.path);
280
+ const subscribers = sharedRosters.get(path) ?? new Set();
281
+ const install = (roster) => {
282
+ // A peer cannot reactivate an off or closed member, or install routes
283
+ // that collide with this plugin instance's local pool.
284
+ if (entry.closed ||
285
+ this.#active !== true ||
286
+ !this.#current ||
287
+ !this.#live(this.#current) ||
288
+ !hooks.roster() ||
289
+ this.#collides(hooks, roster))
290
+ return;
291
+ entry.seen = JSON.stringify(decodedVaultRoster(roster));
292
+ hooks.install(roster);
293
+ if (roster.view !== this.#committed?.view)
294
+ entry.pending ??= { failures: 0, wait: 0 };
295
+ this.#retainUnion();
296
+ };
297
+ subscribers.add(install);
298
+ entry.receiveRoster = install;
299
+ sharedRosters.set(path, subscribers);
300
+ let subscribed = true;
301
+ entry.releaseRoster = () => {
302
+ if (!subscribed)
303
+ return;
304
+ subscribed = false;
305
+ subscribers.delete(install);
306
+ if (!subscribers.size)
307
+ sharedRosters.delete(path);
308
+ };
274
309
  return consumer;
275
310
  }
311
+ #publishRoster(entry, roster) {
312
+ const generation = this.#current;
313
+ if (entry.closed || !generation || !this.#live(generation))
314
+ return;
315
+ entry.seen = JSON.stringify(decodedVaultRoster(roster));
316
+ entry.hooks?.install(roster);
317
+ for (const install of sharedRosters.get(resolve(entry.path)) ?? []) {
318
+ if (!this.#live(generation))
319
+ return;
320
+ if (install !== entry.receiveRoster)
321
+ install(roster);
322
+ }
323
+ }
276
324
  // --- leases ---
277
325
  #startGeneration() {
278
326
  const generation = {
@@ -582,6 +630,8 @@ export class ClaustrumDiscoveryHub {
582
630
  }));
583
631
  run.promise = promise;
584
632
  this.#run = run;
633
+ for (const entry of this.#open())
634
+ entry.hooks?.discovery(promise);
585
635
  return promise;
586
636
  }
587
637
  /**
@@ -681,9 +731,7 @@ export class ClaustrumDiscoveryHub {
681
731
  continue;
682
732
  }
683
733
  // The push: memory holds the committed roster before refresh resolves.
684
- entry.seen = JSON.stringify(decodedVaultRoster(roster));
685
- if (!entry.closed)
686
- hooks.install(roster);
734
+ this.#publishRoster(entry, roster);
687
735
  }
688
736
  if (!this.#live(generation))
689
737
  return undefined;
@@ -850,7 +898,7 @@ export class ClaustrumDiscoveryHub {
850
898
  }
851
899
  const before = enabledRows(memory);
852
900
  entry.seen = content;
853
- hooks.install(file);
901
+ this.#publishRoster(entry, file);
854
902
  if (enabledRows(hooks.roster()) !== before)
855
903
  this.#retainUnion();
856
904
  }
@@ -1013,6 +1061,8 @@ export class ClaustrumDiscoveryHub {
1013
1061
  if (this.#shutdown.signal.aborted)
1014
1062
  return;
1015
1063
  this.#shutdown.abort(closed('Claustrum discovery hub is closed'));
1064
+ for (const entry of this.#members.values())
1065
+ entry.releaseRoster?.();
1016
1066
  if (this.#timer)
1017
1067
  (this.#options.clearTimeoutImpl ?? clearTimeout)(this.#timer);
1018
1068
  this.#timer = undefined;
@@ -810,7 +810,7 @@ export async function refreshVaultRoster(options) {
810
810
  throw error;
811
811
  }
812
812
  finally {
813
- await lease.release();
813
+ await lease.release(options.signal);
814
814
  }
815
815
  }
816
816
  /**
@@ -21,7 +21,8 @@ export interface LockLoss {
21
21
  export interface RefreshFileLock {
22
22
  readonly ownerId: string;
23
23
  assertOwned(): Promise<void>;
24
- release(): Promise<void>;
24
+ /** Abort stops release retries; the unrenewed lease is left to expire by TTL. */
25
+ release(signal?: AbortSignal): Promise<void>;
25
26
  /** Resolves once on detected loss; remains pending after an owner's release. */
26
27
  whenLost(): Promise<LockLoss>;
27
28
  hasLost(): boolean;
@@ -836,7 +836,7 @@ export async function acquireRefreshFileLockWithClock(options) {
836
836
  : {}),
837
837
  });
838
838
  },
839
- release: async () => {
839
+ release: async (signal) => {
840
840
  if (windowsPrivateFiles && releaseConfirmed)
841
841
  return;
842
842
  released = true;
@@ -882,6 +882,8 @@ export async function acquireRefreshFileLockWithClock(options) {
882
882
  releaseConfirmed = removalConfirmed;
883
883
  return;
884
884
  }
885
+ if (signal?.aborted)
886
+ return;
885
887
  await recoverStaleEvictionMarker();
886
888
  }
887
889
  catch (error) {
@@ -38,7 +38,7 @@ export async function withLock(target, options, fn) {
38
38
  return await fn(lock);
39
39
  }
40
40
  finally {
41
- await lock.release();
41
+ await lock.release(options.signal);
42
42
  }
43
43
  }
44
44
  const remaining = options.timeoutMs - (performance.now() - started);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema": 1,
3
3
  "package": "@cortexkit/common-auth",
4
- "version": "0.29.0",
4
+ "version": "0.31.0",
5
5
  "artifactStatus": "published",
6
6
  "publicRoots": {
7
7
  "./store": {
@@ -37,15 +37,15 @@
37
37
  "import": "./dist/pi-slot/index.js"
38
38
  }
39
39
  },
40
- "input": "tools/common-auth-build/inputs/cortexkit-common-auth-0.29.0.tgz",
41
- "tarballSha256": "6d8795d0672353ab897f938cad86c63556ceab7704bd60498a8c8e1a62dbc207",
42
- "sri": "sha512-XnNFY5ppNQRDP09lUTDDONGHwiJ8Z93w8/NP16pmWpC6lzBPkC7XJcHhld+B6iLATaNvbcenfhecitB8fS9nbQ==",
40
+ "input": "tools/common-auth-build/inputs/cortexkit-common-auth-0.31.0.tgz",
41
+ "tarballSha256": "7fd3ca6766e40af0f79edc65f282f251f3d57bd614254a5df11921635cd1d548",
42
+ "sri": "sha512-An0i6ywuMISocrZKZvYkVhExhg0/v0uUR7PU3QpDqko0+mTq4GA9zCJY2q74TK6fwF0w2Xw0mqxTNIUW8+4Apw==",
43
43
  "canonicalFiles": 147,
44
- "canonicalBytes": 994153,
44
+ "canonicalBytes": 998822,
45
45
  "generator": {
46
46
  "path": "packages/opencode/scripts/embed-common-auth.ts",
47
47
  "version": 3,
48
- "sha256": "ece06fd4117208e4b276fee17386d3a0f93e641cee49c0d30d985c169c551ad2"
48
+ "sha256": "87413753f873de0e5cad4701d142da0ffcfd4969cb52712cf99a19af689eb2a5"
49
49
  },
50
50
  "files": [
51
51
  {
@@ -227,33 +227,33 @@
227
227
  {
228
228
  "source": "package/dist/claustrum/consumer.d.ts",
229
229
  "output": "claustrum/consumer.d.ts",
230
- "bytes": 13309,
231
- "sourceSha256": "a33f8fb2750424f1dd1e80ee6e0f260d4d5b6bdf6be3b00b2ae503bfbadb4d17",
232
- "outputSha256": "a33f8fb2750424f1dd1e80ee6e0f260d4d5b6bdf6be3b00b2ae503bfbadb4d17",
230
+ "bytes": 13934,
231
+ "sourceSha256": "97e5fb096153912483b45f75831e4652db19457d94ad76ba8363b1fd232e6fd7",
232
+ "outputSha256": "97e5fb096153912483b45f75831e4652db19457d94ad76ba8363b1fd232e6fd7",
233
233
  "transform": "verbatim"
234
234
  },
235
235
  {
236
236
  "source": "package/dist/claustrum/consumer.js",
237
237
  "output": "claustrum/consumer.js",
238
- "bytes": 38516,
239
- "sourceSha256": "46a8be88c8e5270d06bda0042235d7081dea06eaf1ae15f9a5fdf2ed93e478fd",
240
- "outputSha256": "46a8be88c8e5270d06bda0042235d7081dea06eaf1ae15f9a5fdf2ed93e478fd",
238
+ "bytes": 39439,
239
+ "sourceSha256": "3b4cf06be8732f3183ac97721dfffb8fc489d4be1044260742a72a9995324391",
240
+ "outputSha256": "3b4cf06be8732f3183ac97721dfffb8fc489d4be1044260742a72a9995324391",
241
241
  "transform": "verbatim"
242
242
  },
243
243
  {
244
244
  "source": "package/dist/claustrum/custody.d.ts",
245
245
  "output": "claustrum/custody.d.ts",
246
- "bytes": 16192,
247
- "sourceSha256": "ac8a3f2a47ec04ba0b6b5f69425db6672aa7660cd9249853f05fb2b4669698c2",
248
- "outputSha256": "ac8a3f2a47ec04ba0b6b5f69425db6672aa7660cd9249853f05fb2b4669698c2",
246
+ "bytes": 16390,
247
+ "sourceSha256": "3bbbfc2d700cf6c25356339c64d3bef5cee5e00336d141de18bb7522c8a5ceaa",
248
+ "outputSha256": "3bbbfc2d700cf6c25356339c64d3bef5cee5e00336d141de18bb7522c8a5ceaa",
249
249
  "transform": "verbatim"
250
250
  },
251
251
  {
252
252
  "source": "package/dist/claustrum/custody.js",
253
253
  "output": "claustrum/custody.js",
254
- "bytes": 30242,
255
- "sourceSha256": "cfa9c256d59ac4740f5b88fc1662a3bbb29078973cbeaf6225448c305fa580a2",
256
- "outputSha256": "cfa9c256d59ac4740f5b88fc1662a3bbb29078973cbeaf6225448c305fa580a2",
254
+ "bytes": 30624,
255
+ "sourceSha256": "23c666b3d65b26b8f9aac6926c535f67d0ba7db4de1cf3591e95306aa0f8c5dd",
256
+ "outputSha256": "23c666b3d65b26b8f9aac6926c535f67d0ba7db4de1cf3591e95306aa0f8c5dd",
257
257
  "transform": "verbatim"
258
258
  },
259
259
  {
@@ -307,17 +307,17 @@
307
307
  {
308
308
  "source": "package/dist/claustrum/hub.d.ts",
309
309
  "output": "claustrum/hub.d.ts",
310
- "bytes": 9169,
311
- "sourceSha256": "07a5c385738649ec5c03b6afb7a916011e565c9f9d5463b280b9896024d8f0c0",
312
- "outputSha256": "07a5c385738649ec5c03b6afb7a916011e565c9f9d5463b280b9896024d8f0c0",
310
+ "bytes": 9346,
311
+ "sourceSha256": "4c2cbd91b3cc9691ee765f766b7c80d27cf28b38494a0a53ce9410c184e7ca1d",
312
+ "outputSha256": "4c2cbd91b3cc9691ee765f766b7c80d27cf28b38494a0a53ce9410c184e7ca1d",
313
313
  "transform": "verbatim"
314
314
  },
315
315
  {
316
316
  "source": "package/dist/claustrum/hub.js",
317
317
  "output": "claustrum/hub.js",
318
- "bytes": 43086,
319
- "sourceSha256": "f156151cba0a628828a9c28cdeea757a4c959e4398a79c423001b2b2857c2ec7",
320
- "outputSha256": "f156151cba0a628828a9c28cdeea757a4c959e4398a79c423001b2b2857c2ec7",
318
+ "bytes": 45237,
319
+ "sourceSha256": "48f0889818545735a6e6315bfa2517a84544abb9237ec9f698581ba6628c1ae5",
320
+ "outputSha256": "48f0889818545735a6e6315bfa2517a84544abb9237ec9f698581ba6628c1ae5",
321
321
  "transform": "verbatim"
322
322
  },
323
323
  {
@@ -395,9 +395,9 @@
395
395
  {
396
396
  "source": "package/dist/claustrum/roster.js",
397
397
  "output": "claustrum/roster.js",
398
- "bytes": 39326,
399
- "sourceSha256": "f46fc75edcf4e418f02a5699c7395f1f44abd2e28b77067b89f7622af5890214",
400
- "outputSha256": "f46fc75edcf4e418f02a5699c7395f1f44abd2e28b77067b89f7622af5890214",
398
+ "bytes": 39340,
399
+ "sourceSha256": "6919aa948f9022f76ce2b7aac83733bd7a11a8c21b8511191cf7fbf6bc1a2b30",
400
+ "outputSha256": "6919aa948f9022f76ce2b7aac83733bd7a11a8c21b8511191cf7fbf6bc1a2b30",
401
401
  "transform": "verbatim"
402
402
  },
403
403
  {
@@ -595,17 +595,17 @@
595
595
  {
596
596
  "source": "package/dist/fs/refresh-file-lock.d.ts",
597
597
  "output": "fs/refresh-file-lock.d.ts",
598
- "bytes": 2946,
599
- "sourceSha256": "b649e67813eb4086ca5642c99d318f90ccccae9702b23ad8fb0616f8d62f5a06",
600
- "outputSha256": "b649e67813eb4086ca5642c99d318f90ccccae9702b23ad8fb0616f8d62f5a06",
598
+ "bytes": 3052,
599
+ "sourceSha256": "31c23ba9135ddc57ea0196ad56280bd12eab2c9524d33bd43d78112da27214d2",
600
+ "outputSha256": "31c23ba9135ddc57ea0196ad56280bd12eab2c9524d33bd43d78112da27214d2",
601
601
  "transform": "verbatim"
602
602
  },
603
603
  {
604
604
  "source": "package/dist/fs/refresh-file-lock.js",
605
605
  "output": "fs/refresh-file-lock.js",
606
- "bytes": 37753,
607
- "sourceSha256": "38bc20ae71a195818f9cf7e42954e8305f92a55ff15dd855da33ccdec6b34fa1",
608
- "outputSha256": "38bc20ae71a195818f9cf7e42954e8305f92a55ff15dd855da33ccdec6b34fa1",
606
+ "bytes": 37832,
607
+ "sourceSha256": "07b261b409c5c6cc9b35cb732df44486d372413ce6ae078be4b211b9b5a5c1c7",
608
+ "outputSha256": "07b261b409c5c6cc9b35cb732df44486d372413ce6ae078be4b211b9b5a5c1c7",
609
609
  "transform": "verbatim"
610
610
  },
611
611
  {
@@ -619,9 +619,9 @@
619
619
  {
620
620
  "source": "package/dist/fs/with-lock.js",
621
621
  "output": "fs/with-lock.js",
622
- "bytes": 1789,
623
- "sourceSha256": "94fa839ec83d730280048f7e586453daadc590c4fbcf5601fd96f4a2d4193d6b",
624
- "outputSha256": "94fa839ec83d730280048f7e586453daadc590c4fbcf5601fd96f4a2d4193d6b",
622
+ "bytes": 1803,
623
+ "sourceSha256": "f31ff1935e18563e465ab235202de3932255d3b1fc72b5d0baf6d3502931fc8e",
624
+ "outputSha256": "f31ff1935e18563e465ab235202de3932255d3b1fc72b5d0baf6d3502931fc8e",
625
625
  "transform": "verbatim"
626
626
  },
627
627
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/antigravity-auth-core",
3
- "version": "3.0.18",
3
+ "version": "3.0.20",
4
4
  "description": "Harness-agnostic core for Google Antigravity OAuth: transport, fingerprint, request transforms, accounts, quota",
5
5
  "type": "module",
6
6
  "license": "MIT",