@cortexkit/antigravity-auth-core 3.0.6 → 3.0.8

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.
Files changed (59) hide show
  1. package/dist/account-migration.d.ts +1 -1
  2. package/dist/account-migration.d.ts.map +1 -1
  3. package/dist/account-migration.js +228 -53
  4. package/dist/account-migration.js.map +1 -1
  5. package/dist/agy-transport.d.ts.map +1 -1
  6. package/dist/agy-transport.js +2 -0
  7. package/dist/agy-transport.js.map +1 -1
  8. package/dist/common-auth-embedded/claustrum/availability.d.ts +89 -0
  9. package/dist/common-auth-embedded/claustrum/availability.js +106 -0
  10. package/dist/common-auth-embedded/claustrum/consumer.d.ts +41 -1
  11. package/dist/common-auth-embedded/claustrum/consumer.js +152 -6
  12. package/dist/common-auth-embedded/claustrum/custody.d.ts +135 -14
  13. package/dist/common-auth-embedded/claustrum/custody.js +311 -16
  14. package/dist/common-auth-embedded/claustrum/errors.d.ts +1 -0
  15. package/dist/common-auth-embedded/claustrum/index.d.ts +5 -3
  16. package/dist/common-auth-embedded/claustrum/index.js +4 -1
  17. package/dist/common-auth-embedded/claustrum/insula.d.ts +48 -0
  18. package/dist/common-auth-embedded/claustrum/insula.js +286 -21
  19. package/dist/common-auth-embedded/claustrum/watch.d.ts +141 -0
  20. package/dist/common-auth-embedded/claustrum/watch.js +254 -0
  21. package/dist/common-auth-embedded/fs/private-files.js +10 -2
  22. package/dist/common-auth-embedded/fs/refresh-file-lock.d.ts +8 -2
  23. package/dist/common-auth-embedded/fs/refresh-file-lock.js +6 -1
  24. package/dist/common-auth-embedded/pi-slot/lock.js +7 -3
  25. package/dist/common-auth-embedded/quota/format.d.ts +17 -3
  26. package/dist/common-auth-embedded/quota/format.js +203 -18
  27. package/dist/common-auth-embedded/quota/index.d.ts +2 -2
  28. package/dist/common-auth-embedded/quota/index.js +1 -1
  29. package/dist/common-auth-embedded/quota/projection.d.ts +16 -0
  30. package/dist/common-auth-embedded/source-output.json +105 -73
  31. package/dist/common-auth-embedded/store/pool.d.ts +1 -1
  32. package/dist/common-auth-embedded/store/pool.js +0 -1
  33. package/dist/common-auth-embedded/store/refresh-lock.d.ts +0 -1
  34. package/dist/common-auth-embedded/store/refresh-lock.js +0 -1
  35. package/dist/credential-redaction.d.ts +8 -4
  36. package/dist/credential-redaction.d.ts.map +1 -1
  37. package/dist/credential-redaction.js +55 -28
  38. package/dist/credential-redaction.js.map +1 -1
  39. package/dist/index.d.ts +3 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +3 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/pre-response-deadline.d.ts +41 -0
  44. package/dist/pre-response-deadline.d.ts.map +1 -0
  45. package/dist/pre-response-deadline.js +150 -0
  46. package/dist/pre-response-deadline.js.map +1 -0
  47. package/dist/quota-presentation.d.ts.map +1 -1
  48. package/dist/quota-presentation.js +9 -1
  49. package/dist/quota-presentation.js.map +1 -1
  50. package/dist/vault-account-source.d.ts +27 -2
  51. package/dist/vault-account-source.d.ts.map +1 -1
  52. package/dist/vault-account-source.js +12 -1
  53. package/dist/vault-account-source.js.map +1 -1
  54. package/dist/vault-folder-refusal.js +3 -3
  55. package/dist/vault-grant-reach.d.ts +23 -0
  56. package/dist/vault-grant-reach.d.ts.map +1 -0
  57. package/dist/vault-grant-reach.js +15 -0
  58. package/dist/vault-grant-reach.js.map +1 -0
  59. package/package.json +3 -3
@@ -63,8 +63,12 @@ export function quotaWindowName(limit) {
63
63
  function clampPercent(remaining) {
64
64
  return Math.min(100, Math.max(0, remaining));
65
65
  }
66
+ /** A remaining percentage as the whole number every form shows. */
67
+ function wholePercent(remaining) {
68
+ return Math.round(clampPercent(remaining));
69
+ }
66
70
  function percentLeft(remaining) {
67
- return `${Math.round(clampPercent(remaining))}% left`;
71
+ return `${wholePercent(remaining)}% left`;
68
72
  }
69
73
  function resetDetails(resetsAt, checkedAt, now) {
70
74
  const at = resetsAt === undefined ? Number.NaN : Date.parse(resetsAt);
@@ -98,6 +102,16 @@ function displayOrder(left, right) {
98
102
  * and the optional age keep the shared formatter's wording.
99
103
  */
100
104
  export function quotaWindowParts(quota, options) {
105
+ const { windows, age } = scopedWindowParts(quota, options);
106
+ const parts = windows.map(({ part }) => part);
107
+ return age === undefined ? { windows: parts } : { windows: parts, age };
108
+ }
109
+ /**
110
+ * `quotaWindowParts` with each window's scope kept beside it. The narrow form
111
+ * needs the scope to name and pick model-scoped windows; the public parts do
112
+ * not carry it, so their shape stays as it was.
113
+ */
114
+ function scopedWindowParts(quota, options) {
101
115
  if (!quota)
102
116
  return { windows: [] };
103
117
  const { now } = options;
@@ -107,12 +121,18 @@ export function quotaWindowParts(quota, options) {
107
121
  const windows = readings.map((limit) => {
108
122
  const remainingPercent = clampPercent(limit.remainingPercent ?? 0);
109
123
  return {
110
- kind: 'window',
111
- name: quotaWindowName(limit),
112
- figure: percentLeft(limit.remainingPercent ?? 0),
113
- remainingPercent,
114
- checkedAt: limit.checkedAt,
115
- ...resetDetails(limit.resetsAt, limit.checkedAt, now),
124
+ scope: limit.scope,
125
+ ...(limit.windowMinutes === undefined
126
+ ? {}
127
+ : { windowMinutes: limit.windowMinutes }),
128
+ part: {
129
+ kind: 'window',
130
+ name: quotaWindowName(limit),
131
+ figure: percentLeft(limit.remainingPercent ?? 0),
132
+ remainingPercent,
133
+ checkedAt: limit.checkedAt,
134
+ ...resetDetails(limit.resetsAt, limit.checkedAt, now),
135
+ },
116
136
  };
117
137
  });
118
138
  const budget = quota.budget;
@@ -124,32 +144,196 @@ export function quotaWindowParts(quota, options) {
124
144
  ? `credits ${percentLeft(remainingPercent)}`
125
145
  : 'credits available';
126
146
  windows.push({
127
- kind: 'budget',
128
- name: 'credits',
129
- figure,
130
- ...(remainingPercent === undefined
131
- ? {}
132
- : { remainingPercent: clampPercent(remainingPercent) }),
133
- checkedAt: budget.checkedAt,
134
- ...resetDetails(budget.resetsAt, budget.checkedAt, now),
147
+ scope: ALL_SCOPE,
148
+ spent: budget.reached,
149
+ part: {
150
+ kind: 'budget',
151
+ name: 'credits',
152
+ figure,
153
+ ...(remainingPercent === undefined
154
+ ? {}
155
+ : { remainingPercent: clampPercent(remainingPercent) }),
156
+ checkedAt: budget.checkedAt,
157
+ ...resetDetails(budget.resetsAt, budget.checkedAt, now),
158
+ },
135
159
  });
136
160
  }
137
161
  if (windows.length > 0) {
138
- const age = now - Math.min(...windows.map((part) => part.checkedAt));
162
+ const age = now - Math.min(...windows.map(({ part }) => part.checkedAt));
139
163
  if (age > (options.staleAfterMs ?? QUOTA_STALE_AFTER_MS)) {
140
164
  return { windows, age: `checked ${shortSpan(age)} ago` };
141
165
  }
142
166
  }
143
167
  return { windows };
144
168
  }
169
+ /**
170
+ * Whether the reading is stale: true exactly when the compact and full forms
171
+ * would end with `checked … ago`. The narrow form leaves that age out to stay
172
+ * short, so a caller drawing a narrow line uses this to dim it instead.
173
+ */
174
+ export function isQuotaStale(quota, options) {
175
+ return scopedWindowParts(quota, options).age !== undefined;
176
+ }
177
+ /**
178
+ * The model a scope names, as a display name: any namespace before a colon
179
+ * is dropped (`model:claude-opus-4` → `claude-opus-4`) and the first letter is
180
+ * capitalized (`fable` → `Fable`); the rest stays as written.
181
+ */
182
+ function scopeDisplayName(scope) {
183
+ const model = scope.slice(scope.indexOf(':') + 1);
184
+ return model.charAt(0).toUpperCase() + model.slice(1);
185
+ }
186
+ /**
187
+ * Short names for the model scopes in one row: the first two letters of each
188
+ * display name. Names that would read the same for different models are each
189
+ * extended one letter at a time until they differ (`Fable` and `Fabric` read
190
+ * `Fabl` and `Fabr`); a name that runs out of letters stays whole.
191
+ */
192
+ function scopeAbbreviations(scopes) {
193
+ const names = [...new Set(scopes.map(scopeDisplayName))];
194
+ const lengths = new Map(names.map((name) => [name, 2]));
195
+ const short = (name) => name.slice(0, lengths.get(name));
196
+ for (;;) {
197
+ const byShort = new Map();
198
+ for (const name of names) {
199
+ byShort.set(short(name), [...(byShort.get(short(name)) ?? []), name]);
200
+ }
201
+ let extended = false;
202
+ for (const group of byShort.values()) {
203
+ if (group.length < 2)
204
+ continue;
205
+ for (const name of group) {
206
+ const length = lengths.get(name) ?? 2;
207
+ if (length < name.length) {
208
+ lengths.set(name, length + 1);
209
+ extended = true;
210
+ }
211
+ }
212
+ }
213
+ if (!extended)
214
+ break;
215
+ }
216
+ return new Map(scopes.map((scope) => [scope, short(scopeDisplayName(scope))]));
217
+ }
218
+ /** The most groups a grouped narrow line shows. */
219
+ const NARROW_GROUP_LIMIT = 2;
220
+ /**
221
+ * The names the groups read under in the narrow line, one per listed group:
222
+ * each label's short name, derived exactly as a model window's is (`Gemini`
223
+ * → `Ge`, `Other models` → `Ot`, colliding names extended until they
224
+ * differ), computed over every listed group so a group keeps its name
225
+ * whichever groups show. A blank label falls back to the group's scope.
226
+ */
227
+ function groupShortNames(groups) {
228
+ const labels = groups.map((group) => group.label.trim() || group.scope);
229
+ const short = scopeAbbreviations(labels);
230
+ return labels.map((label) => short.get(label) ?? label);
231
+ }
232
+ /**
233
+ * The narrow line of a reading whose windows belong to named groups and that
234
+ * has no account-wide window: for each group, its tightest window as
235
+ * `Ge 7d 62%`, with ` left` once at the end. The tightest window is the
236
+ * one with least left, compared before rounding; on a tie the first in
237
+ * display order (the shorter window) wins. At most two groups show: the two
238
+ * with least left, earlier-listed first on a tie, and always in the order
239
+ * the reading lists them, so the line does not reorder as the figures move.
240
+ * A group with no reported window is skipped. Windows outside the listed
241
+ * groups and the credit budget are left out. Undefined when the rule does
242
+ * not apply, so the caller uses the ordinary narrow rule.
243
+ */
244
+ function groupedNarrowPieces(groups, windows) {
245
+ if (!groups || groups.length === 0)
246
+ return undefined;
247
+ const reported = windows.filter(({ part }) => part.kind === 'window');
248
+ if (reported.some(({ scope }) => scope === ALL_SCOPE))
249
+ return undefined;
250
+ const candidates = groups.flatMap((group, listed) => {
251
+ const inGroup = reported.filter(({ scope }) => scope === group.scope);
252
+ // `windows` is already in display order, and strictly lower wins, so on
253
+ // a tie the shorter window keeps the place.
254
+ const groupTightest = inGroup.reduce((least, window) => least === undefined ||
255
+ (window.part.remainingPercent ?? 0) < (least.part.remainingPercent ?? 0)
256
+ ? window
257
+ : least, undefined);
258
+ return groupTightest ? [{ group, listed, window: groupTightest }] : [];
259
+ });
260
+ if (candidates.length === 0)
261
+ return undefined;
262
+ const names = groupShortNames(groups);
263
+ const left = (candidate) => candidate.window.part.remainingPercent ?? 0;
264
+ const shown = [...candidates]
265
+ .sort((a, b) => left(a) - left(b) || a.listed - b.listed)
266
+ .slice(0, NARROW_GROUP_LIMIT)
267
+ .sort((a, b) => a.listed - b.listed);
268
+ return shown.map((candidate, index) => {
269
+ const { windowMinutes } = candidate.window;
270
+ const piece = [
271
+ names[candidate.listed] ?? candidate.group.scope,
272
+ ...(windowMinutes === undefined ? [] : [lengthName(windowMinutes)]),
273
+ `${wholePercent(left(candidate))}%`,
274
+ ].join(' ');
275
+ return index === shown.length - 1 ? `${piece} left` : piece;
276
+ });
277
+ }
278
+ /**
279
+ * The narrow form's pieces: every account-wide window as `5h 92%`, then at
280
+ * most one more item, with ` left` added once to the last piece. That item is
281
+ * the tightest (least remaining) of the model-scoped windows and the credit
282
+ * budget, so the line stays bounded whatever the account carries: a scoped
283
+ * window reads under its short model name (`Fa 98%`), the budget as `cr 75%`
284
+ * (`cr 0%` when spent). On a tie a scoped window wins over the budget, and
285
+ * among scoped windows the first in display order wins. The choice depends
286
+ * only on the reading, never on a width. A budget without a percentage cannot
287
+ * be chosen; when nothing at all is shown it keeps its compact wording
288
+ * (`credits available`). No age is added; `isQuotaStale` says whether the
289
+ * reading is stale. A window whose reset arrived after the reading keeps its
290
+ * figure, as in the other forms. A reading that lists named groups and has no
291
+ * account-wide window reads one item per group instead (see
292
+ * `groupedNarrowPieces`).
293
+ */
294
+ function narrowTextParts(quota, options) {
295
+ const { windows } = scopedWindowParts(quota, options);
296
+ const grouped = groupedNarrowPieces(quota?.groups, windows);
297
+ if (grouped)
298
+ return grouped;
299
+ const general = windows.filter(({ part, scope }) => part.kind === 'window' && scope === ALL_SCOPE);
300
+ const scoped = windows.filter(({ part, scope }) => part.kind === 'window' && scope !== ALL_SCOPE);
301
+ const abbreviations = scopeAbbreviations(scoped.map(({ scope }) => scope));
302
+ // The items competing for the one slot after the account-wide windows, in
303
+ // tie-break order: scoped windows in display order, then the budget. A
304
+ // spent budget counts as 0% left; one without a percentage cannot compete.
305
+ const budget = windows.find(({ part }) => part.kind === 'budget');
306
+ const budgetLeft = budget?.spent ? 0 : budget?.part.remainingPercent;
307
+ const extras = [
308
+ ...scoped.map(({ scope, part }) => ({
309
+ label: abbreviations.get(scope) ?? scope,
310
+ remaining: part.remainingPercent ?? 0,
311
+ })),
312
+ ...(budgetLeft === undefined
313
+ ? []
314
+ : [{ label: 'cr', remaining: budgetLeft }]),
315
+ ];
316
+ // Strictly lower wins, so on a tie the earlier item keeps the slot.
317
+ const tightest = extras.reduce((best, item) => best === undefined || item.remaining < best.remaining ? item : best, undefined);
318
+ const pieces = general.map(({ part }) => `${part.name} ${wholePercent(part.remainingPercent ?? 0)}%`);
319
+ if (tightest) {
320
+ pieces.push(`${tightest.label} ${wholePercent(tightest.remaining)}%`);
321
+ }
322
+ if (pieces.length === 0)
323
+ return windows.map(({ part }) => part.figure);
324
+ return pieces.map((piece, index) => index === pieces.length - 1 ? `${piece} left` : piece);
325
+ }
145
326
  /**
146
327
  * The pieces of a quota text, in order: one per reported window
147
328
  * (`5h 58% left, resets 2h`), then the credit budget when there is one, then
148
329
  * `checked 3h ago` when the oldest piece shown is stale. Empty when nothing
149
330
  * was reported; `formatQuota` turns that into a sentence. A caller printing
150
- * one line per window (the terminal auth menu) uses these directly.
331
+ * one line per window (the terminal auth menu) uses these directly. In the
332
+ * narrow form the pieces are the narrow line's (`5h 92%`, `7d 66% left`).
151
333
  */
152
334
  export function quotaTextParts(quota, options) {
335
+ if (options.form === 'narrow')
336
+ return narrowTextParts(quota, options);
153
337
  const parts = quotaWindowParts(quota, options);
154
338
  const full = (options.form ?? 'full') === 'full';
155
339
  const text = parts.windows.map((part) => {
@@ -160,7 +344,8 @@ export function quotaTextParts(quota, options) {
160
344
  }
161
345
  /**
162
346
  * A row's quota as one line: `5h 58% left · 7d 90% left` in the compact
163
- * form, with `, resets 2h` after each window in the full form. With nothing
347
+ * form, with `, resets 2h` after each window in the full form, and
348
+ * `5h 58% · 7d 90% left` in the narrow form. With nothing
164
349
  * reported it is `NO_QUOTA_READING`, or `NO_LIMITS_REPORTED` when the
165
350
  * provider answered without a limit for any window.
166
351
  */
@@ -1,10 +1,10 @@
1
1
  export type { QuotaCodec } from './codec.js';
2
2
  export { quotaCodec } from './codec.js';
3
3
  export type { QuotaParts, QuotaTextForm, QuotaTextOptions, QuotaWindowPart, } from './format.js';
4
- export { formatQuota, NO_LIMITS_REPORTED, NO_QUOTA_READING, QUOTA_STALE_AFTER_MS, quotaTextParts, quotaWindowName, quotaWindowParts, } from './format.js';
4
+ export { formatQuota, isQuotaStale, NO_LIMITS_REPORTED, NO_QUOTA_READING, QUOTA_STALE_AFTER_MS, quotaTextParts, quotaWindowName, quotaWindowParts, } from './format.js';
5
5
  export type { CreditBudgetCleared, CreditBudgetEntry, CreditBudgetReading, QuotaAbsentEntry, QuotaCounter, QuotaEntry, QuotaMap, QuotaReadingEntry, QuotaRetiredEntry, } from './map.js';
6
6
  export { ALL_SCOPE, DEFAULT_REQUIRED_LABELS, decodeQuotaMap, emptyQuotaMap, isQuotaMap, } from './map.js';
7
7
  export type { ObservedBudget, ObservedPair, ObservedReading, QuotaObservation, } from './merge.js';
8
8
  export { isQuotaObservation, mergeQuotaObservation, QuotaCodecError, } from './merge.js';
9
- export type { ExhaustionReset, ProjectedBudget, ProjectedLimit, ProjectedQuota, } from './projection.js';
9
+ export type { ExhaustionReset, ProjectedBudget, ProjectedLimit, ProjectedQuota, QuotaGroup, } from './projection.js';
10
10
  export { budgetExhaustedResetAt, futureResetAt, projectQuota, readsExhausted, } from './projection.js';
@@ -1,5 +1,5 @@
1
1
  export { quotaCodec } from './codec.js';
2
- export { formatQuota, NO_LIMITS_REPORTED, NO_QUOTA_READING, QUOTA_STALE_AFTER_MS, quotaTextParts, quotaWindowName, quotaWindowParts, } from './format.js';
2
+ export { formatQuota, isQuotaStale, NO_LIMITS_REPORTED, NO_QUOTA_READING, QUOTA_STALE_AFTER_MS, quotaTextParts, quotaWindowName, quotaWindowParts, } from './format.js';
3
3
  export { ALL_SCOPE, DEFAULT_REQUIRED_LABELS, decodeQuotaMap, emptyQuotaMap, isQuotaMap, } from './map.js';
4
4
  export { isQuotaObservation, mergeQuotaObservation, QuotaCodecError, } from './merge.js';
5
5
  export { budgetExhaustedResetAt, futureResetAt, projectQuota, readsExhausted, } from './projection.js';
@@ -19,6 +19,15 @@ export interface ProjectedBudget {
19
19
  remainingPercent?: number;
20
20
  resetsAt?: string;
21
21
  }
22
+ /**
23
+ * A named group of windows, such as antigravity-auth's `Gemini` and
24
+ * `Other models`: every window stored under `scope` belongs to it, and
25
+ * `label` is the group's display name.
26
+ */
27
+ export interface QuotaGroup {
28
+ scope: string;
29
+ label: string;
30
+ }
22
31
  export interface ProjectedQuota {
23
32
  scope: string;
24
33
  /** One entry per label: longest known window first, unknown lengths last. */
@@ -31,6 +40,13 @@ export interface ProjectedQuota {
31
40
  /** Present only when the stored budget is a reading, not cleared. */
32
41
  budget?: ProjectedBudget;
33
42
  counters?: Record<string, QuotaCounter>;
43
+ /**
44
+ * The named groups the windows belong to, in the order the plugin lists
45
+ * them. Set only by a plugin whose windows all belong to such groups; the
46
+ * narrow form then shows one item per group (see `formatQuota`).
47
+ * `projectQuota` never sets it.
48
+ */
49
+ groups?: readonly QuotaGroup[];
34
50
  }
35
51
  /**
36
52
  * Resolves `map` for a request in `scope` (`all` or a model family). A family
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema": 1,
3
3
  "package": "@cortexkit/common-auth",
4
- "version": "0.17.2",
4
+ "version": "0.21.1",
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.17.2.tgz",
41
- "tarballSha256": "c135db860069ed22694e98e54883992efd2bc3f7fe5cb489e6b22985dd631cca",
42
- "sri": "sha512-hPt8Zoxw5Sc+rE3Iq57QNAlXkTswviwtjOBsc5TrAZHyOBZ3SGixkvFN2oZH59MxB8b6X+eAfcvvQDDpV+JOHA==",
43
- "canonicalFiles": 133,
44
- "canonicalBytes": 754948,
40
+ "input": "tools/common-auth-build/inputs/cortexkit-common-auth-0.21.1.tgz",
41
+ "tarballSha256": "4ff9c514bfa7d539483ce9c25e054267c4dc368a0ce8c7f60c74ddac36613a65",
42
+ "sri": "sha512-DORasuyhF7FOTiw0kiL1DlIw9aPvMmBsdoxzkXJEIrKvNzUuv2lcOvHkflpot9KcoqPLCRJxyZLtMO+LVN61gw==",
43
+ "canonicalFiles": 137,
44
+ "canonicalBytes": 829952,
45
45
  "generator": {
46
46
  "path": "packages/opencode/scripts/embed-common-auth.ts",
47
47
  "version": 3,
48
- "sha256": "9a280484c51050f8f2c8a0d1c6687c9e28a8147c2575fa5f57024d9975802676"
48
+ "sha256": "18d41d6b7a3db681b7873981c03d88bb19691116f96e0a37a11fabc1f63e5977"
49
49
  },
50
50
  "files": [
51
51
  {
@@ -208,36 +208,52 @@
208
208
  "outputSha256": "134d4950e10d5cd67fd28dba7af51f67e801e719d40b2824bf48e8dde55a1b7b",
209
209
  "transform": "verbatim"
210
210
  },
211
+ {
212
+ "source": "package/dist/claustrum/availability.d.ts",
213
+ "output": "claustrum/availability.d.ts",
214
+ "bytes": 3375,
215
+ "sourceSha256": "eba8ff78abed434be6194715d214a53322f4414a28e6a7389fe14f8a52b772ac",
216
+ "outputSha256": "eba8ff78abed434be6194715d214a53322f4414a28e6a7389fe14f8a52b772ac",
217
+ "transform": "verbatim"
218
+ },
219
+ {
220
+ "source": "package/dist/claustrum/availability.js",
221
+ "output": "claustrum/availability.js",
222
+ "bytes": 4107,
223
+ "sourceSha256": "4bfb03de131ed7d036631a6d6455cc6f465ab7a9ea61575a7378d2f447c7cf67",
224
+ "outputSha256": "4bfb03de131ed7d036631a6d6455cc6f465ab7a9ea61575a7378d2f447c7cf67",
225
+ "transform": "verbatim"
226
+ },
211
227
  {
212
228
  "source": "package/dist/claustrum/consumer.d.ts",
213
229
  "output": "claustrum/consumer.d.ts",
214
- "bytes": 6872,
215
- "sourceSha256": "489bd5ab71fc4fdb614c000ff5fcdd1005e09a76454f8cf846db4433d0b6465e",
216
- "outputSha256": "489bd5ab71fc4fdb614c000ff5fcdd1005e09a76454f8cf846db4433d0b6465e",
230
+ "bytes": 9037,
231
+ "sourceSha256": "5d508c6b0e62ada6e60f09f52052fd6ee26fe6dacd626ef4e5e1430bd8535fdb",
232
+ "outputSha256": "5d508c6b0e62ada6e60f09f52052fd6ee26fe6dacd626ef4e5e1430bd8535fdb",
217
233
  "transform": "verbatim"
218
234
  },
219
235
  {
220
236
  "source": "package/dist/claustrum/consumer.js",
221
237
  "output": "claustrum/consumer.js",
222
- "bytes": 16397,
223
- "sourceSha256": "919f56b722f8b26ad691c3ca2b3d381b3e3d06cfbe6059e09db3311edb9c3f3d",
224
- "outputSha256": "919f56b722f8b26ad691c3ca2b3d381b3e3d06cfbe6059e09db3311edb9c3f3d",
238
+ "bytes": 23139,
239
+ "sourceSha256": "7b97c80964eaffa9f4c4fc3334885ce4c2da80ed330288311d08b0c8c7edca31",
240
+ "outputSha256": "7b97c80964eaffa9f4c4fc3334885ce4c2da80ed330288311d08b0c8c7edca31",
225
241
  "transform": "verbatim"
226
242
  },
227
243
  {
228
244
  "source": "package/dist/claustrum/custody.d.ts",
229
245
  "output": "claustrum/custody.d.ts",
230
- "bytes": 8811,
231
- "sourceSha256": "be2dab97c1ff8deb23972498e8ea23ffeaef15b92bdd156e2e1dd4d099376be3",
232
- "outputSha256": "be2dab97c1ff8deb23972498e8ea23ffeaef15b92bdd156e2e1dd4d099376be3",
246
+ "bytes": 14842,
247
+ "sourceSha256": "f776af511c7a02f8e5c4cb0361845d1e740eec96244fee5cfa1289d2212dffd9",
248
+ "outputSha256": "f776af511c7a02f8e5c4cb0361845d1e740eec96244fee5cfa1289d2212dffd9",
233
249
  "transform": "verbatim"
234
250
  },
235
251
  {
236
252
  "source": "package/dist/claustrum/custody.js",
237
253
  "output": "claustrum/custody.js",
238
- "bytes": 15071,
239
- "sourceSha256": "8dae16f4afc9f39855e84a340a224d77d663d42ce53a0b425d2427d0e2f0eff0",
240
- "outputSha256": "8dae16f4afc9f39855e84a340a224d77d663d42ce53a0b425d2427d0e2f0eff0",
254
+ "bytes": 27016,
255
+ "sourceSha256": "5d2ead857d6e6384980dace94d308f1f47afe831c82e2b644ab434ffb0bcf151",
256
+ "outputSha256": "5d2ead857d6e6384980dace94d308f1f47afe831c82e2b644ab434ffb0bcf151",
241
257
  "transform": "verbatim"
242
258
  },
243
259
  {
@@ -259,9 +275,9 @@
259
275
  {
260
276
  "source": "package/dist/claustrum/errors.d.ts",
261
277
  "output": "claustrum/errors.d.ts",
262
- "bytes": 1095,
263
- "sourceSha256": "ba3dbd69b13c521944bd700b063afaaced9a1312bbfbfcebb8ae8b4f3785c52a",
264
- "outputSha256": "ba3dbd69b13c521944bd700b063afaaced9a1312bbfbfcebb8ae8b4f3785c52a",
278
+ "bytes": 1145,
279
+ "sourceSha256": "b7533d4c281807224d6d05f4bb7a596006862a6c05dc4462fae02af388054bce",
280
+ "outputSha256": "b7533d4c281807224d6d05f4bb7a596006862a6c05dc4462fae02af388054bce",
265
281
  "transform": "verbatim"
266
282
  },
267
283
  {
@@ -291,33 +307,33 @@
291
307
  {
292
308
  "source": "package/dist/claustrum/index.d.ts",
293
309
  "output": "claustrum/index.d.ts",
294
- "bytes": 2895,
295
- "sourceSha256": "9cd0b310598af4b35b9b0753d6498154ad4c1f73d3f776543634f0885bc7d0f6",
296
- "outputSha256": "9cd0b310598af4b35b9b0753d6498154ad4c1f73d3f776543634f0885bc7d0f6",
310
+ "bytes": 3613,
311
+ "sourceSha256": "b8f9cb374e5d5545d50a1521d85e4337d28b17d4b0dabdb3548186675b1c2965",
312
+ "outputSha256": "b8f9cb374e5d5545d50a1521d85e4337d28b17d4b0dabdb3548186675b1c2965",
297
313
  "transform": "verbatim"
298
314
  },
299
315
  {
300
316
  "source": "package/dist/claustrum/index.js",
301
317
  "output": "claustrum/index.js",
302
- "bytes": 2141,
303
- "sourceSha256": "33dc58809d432ea7bbe3f3d4425fe575589a018854444b63e0874f917981ab19",
304
- "outputSha256": "33dc58809d432ea7bbe3f3d4425fe575589a018854444b63e0874f917981ab19",
318
+ "bytes": 2456,
319
+ "sourceSha256": "1e2ae0ee6f2754189e846298a1c6ce2dd4a5eb8cb7f9293f6c24f9725b8537be",
320
+ "outputSha256": "1e2ae0ee6f2754189e846298a1c6ce2dd4a5eb8cb7f9293f6c24f9725b8537be",
305
321
  "transform": "verbatim"
306
322
  },
307
323
  {
308
324
  "source": "package/dist/claustrum/insula.d.ts",
309
325
  "output": "claustrum/insula.d.ts",
310
- "bytes": 2489,
311
- "sourceSha256": "21a92525f04810a15a877e1c1ff9d7cf2fc2eb4ffe8a6aa408db22da6337d30f",
312
- "outputSha256": "21a92525f04810a15a877e1c1ff9d7cf2fc2eb4ffe8a6aa408db22da6337d30f",
326
+ "bytes": 4643,
327
+ "sourceSha256": "be11868f8d766b8c3dc105b3891743bbec1388005be8d2688d617c95b0194e2a",
328
+ "outputSha256": "be11868f8d766b8c3dc105b3891743bbec1388005be8d2688d617c95b0194e2a",
313
329
  "transform": "verbatim"
314
330
  },
315
331
  {
316
332
  "source": "package/dist/claustrum/insula.js",
317
333
  "output": "claustrum/insula.js",
318
- "bytes": 6097,
319
- "sourceSha256": "1db6a99b9db96635bbf846e58ab54eaaa1892bf8939801a181741022d47ce428",
320
- "outputSha256": "1db6a99b9db96635bbf846e58ab54eaaa1892bf8939801a181741022d47ce428",
334
+ "bytes": 16715,
335
+ "sourceSha256": "98ac4011e091b142618b83e3258eda3ccfb40ec75ee0c5a2cbeff89aa1f88003",
336
+ "outputSha256": "98ac4011e091b142618b83e3258eda3ccfb40ec75ee0c5a2cbeff89aa1f88003",
321
337
  "transform": "verbatim"
322
338
  },
323
339
  {
@@ -352,6 +368,22 @@
352
368
  "outputSha256": "e6ac8f59dab51db4756ccbaa89fc73acd213a7a4795fdf5a7c7e4f653455fe94",
353
369
  "transform": "verbatim"
354
370
  },
371
+ {
372
+ "source": "package/dist/claustrum/watch.d.ts",
373
+ "output": "claustrum/watch.d.ts",
374
+ "bytes": 5760,
375
+ "sourceSha256": "54f088f0e6c863d75295721700a423e682bfd4a6735e02a03556b2faa379d991",
376
+ "outputSha256": "54f088f0e6c863d75295721700a423e682bfd4a6735e02a03556b2faa379d991",
377
+ "transform": "verbatim"
378
+ },
379
+ {
380
+ "source": "package/dist/claustrum/watch.js",
381
+ "output": "claustrum/watch.js",
382
+ "bytes": 9226,
383
+ "sourceSha256": "6fdd6ed31d349da6cd016ebbd5f283ce595e9fab376a44cc6587cc9a13d8f589",
384
+ "outputSha256": "6fdd6ed31d349da6cd016ebbd5f283ce595e9fab376a44cc6587cc9a13d8f589",
385
+ "transform": "verbatim"
386
+ },
355
387
  {
356
388
  "source": "package/dist/commands/builtins.d.ts",
357
389
  "output": "commands/builtins.d.ts",
@@ -507,25 +539,25 @@
507
539
  {
508
540
  "source": "package/dist/fs/private-files.js",
509
541
  "output": "fs/private-files.js",
510
- "bytes": 12025,
511
- "sourceSha256": "4b46f7b37c11da02f655a6ca841fa51189ceefffaa4476f4fa7a27f953c54ad4",
512
- "outputSha256": "4b46f7b37c11da02f655a6ca841fa51189ceefffaa4476f4fa7a27f953c54ad4",
542
+ "bytes": 12448,
543
+ "sourceSha256": "1c8f34202b535d774d8c1a53bd403255f02701760c7378e020756c02c55a97c4",
544
+ "outputSha256": "1c8f34202b535d774d8c1a53bd403255f02701760c7378e020756c02c55a97c4",
513
545
  "transform": "verbatim"
514
546
  },
515
547
  {
516
548
  "source": "package/dist/fs/refresh-file-lock.d.ts",
517
549
  "output": "fs/refresh-file-lock.d.ts",
518
- "bytes": 1765,
519
- "sourceSha256": "72996a1247d498a34ac157d23c34ef03bcbdb68c79e8751be4874885aed7e843",
520
- "outputSha256": "72996a1247d498a34ac157d23c34ef03bcbdb68c79e8751be4874885aed7e843",
550
+ "bytes": 2125,
551
+ "sourceSha256": "ec643f4e081c108c1b42ceb17a83cf3e7e9997a4c75e1a61ffc33b5b44ccd414",
552
+ "outputSha256": "ec643f4e081c108c1b42ceb17a83cf3e7e9997a4c75e1a61ffc33b5b44ccd414",
521
553
  "transform": "verbatim"
522
554
  },
523
555
  {
524
556
  "source": "package/dist/fs/refresh-file-lock.js",
525
557
  "output": "fs/refresh-file-lock.js",
526
- "bytes": 29402,
527
- "sourceSha256": "d162b8972a23ffec999a9c90ef6b63e28314c235a668bad378b7c8561efd3666",
528
- "outputSha256": "d162b8972a23ffec999a9c90ef6b63e28314c235a668bad378b7c8561efd3666",
558
+ "bytes": 29704,
559
+ "sourceSha256": "5c52aad573e84e8065dcf06259ecf38345e8b5a2c401029a23d942f28c7a8521",
560
+ "outputSha256": "5c52aad573e84e8065dcf06259ecf38345e8b5a2c401029a23d942f28c7a8521",
529
561
  "transform": "verbatim"
530
562
  },
531
563
  {
@@ -627,9 +659,9 @@
627
659
  {
628
660
  "source": "package/dist/pi-slot/lock.js",
629
661
  "output": "pi-slot/lock.js",
630
- "bytes": 7109,
631
- "sourceSha256": "92ad2fbf7792624b8dae99d7239e1e6f0f7d7f6da10be8b1594500700c7c3077",
632
- "outputSha256": "92ad2fbf7792624b8dae99d7239e1e6f0f7d7f6da10be8b1594500700c7c3077",
662
+ "bytes": 7385,
663
+ "sourceSha256": "68b0c7c764b88391e466f3b9fa172df176bf21529399606bf84475f3b920db8b",
664
+ "outputSha256": "68b0c7c764b88391e466f3b9fa172df176bf21529399606bf84475f3b920db8b",
633
665
  "transform": "verbatim"
634
666
  },
635
667
  {
@@ -667,33 +699,33 @@
667
699
  {
668
700
  "source": "package/dist/quota/format.d.ts",
669
701
  "output": "quota/format.d.ts",
670
- "bytes": 3538,
671
- "sourceSha256": "b690da79fd26e936bf7d2867f411cacd5f32a8daf254d15cfef3d95417428a4a",
672
- "outputSha256": "b690da79fd26e936bf7d2867f411cacd5f32a8daf254d15cfef3d95417428a4a",
702
+ "bytes": 4415,
703
+ "sourceSha256": "293073e9f75e7f15790669f4be8340061566e889259593fcfaf17be9fa4f0a01",
704
+ "outputSha256": "293073e9f75e7f15790669f4be8340061566e889259593fcfaf17be9fa4f0a01",
673
705
  "transform": "verbatim"
674
706
  },
675
707
  {
676
708
  "source": "package/dist/quota/format.js",
677
709
  "output": "quota/format.js",
678
- "bytes": 7317,
679
- "sourceSha256": "421d130c910eaaefa10dd190cc7c7b77df9c1291f6560f6e71f19c9b30ddd5ef",
680
- "outputSha256": "421d130c910eaaefa10dd190cc7c7b77df9c1291f6560f6e71f19c9b30ddd5ef",
710
+ "bytes": 16323,
711
+ "sourceSha256": "d4856ea40dc4269f9a6ffa78bee8564ba648170530e8ff71af4cf38ba5f3baaa",
712
+ "outputSha256": "d4856ea40dc4269f9a6ffa78bee8564ba648170530e8ff71af4cf38ba5f3baaa",
681
713
  "transform": "verbatim"
682
714
  },
683
715
  {
684
716
  "source": "package/dist/quota/index.d.ts",
685
717
  "output": "quota/index.d.ts",
686
- "bytes": 1033,
687
- "sourceSha256": "dc5906c78e391126596a6eea6c999f1cb861a6656386e2be53e1bf00b6b63451",
688
- "outputSha256": "dc5906c78e391126596a6eea6c999f1cb861a6656386e2be53e1bf00b6b63451",
718
+ "bytes": 1059,
719
+ "sourceSha256": "fbb7a865108f98da1f3bb44fba20614a2998ccf5c906b271419b49d37a814214",
720
+ "outputSha256": "fbb7a865108f98da1f3bb44fba20614a2998ccf5c906b271419b49d37a814214",
689
721
  "transform": "verbatim"
690
722
  },
691
723
  {
692
724
  "source": "package/dist/quota/index.js",
693
725
  "output": "quota/index.js",
694
- "bytes": 497,
695
- "sourceSha256": "50027508fb08fb11903fc2220b30b141f73118424e4ca0a0ecd231519b28985d",
696
- "outputSha256": "50027508fb08fb11903fc2220b30b141f73118424e4ca0a0ecd231519b28985d",
726
+ "bytes": 511,
727
+ "sourceSha256": "691e7db4bf6025770991f98adda82ca4cb9be45eeefa3709b114fb2decfdf66e",
728
+ "outputSha256": "691e7db4bf6025770991f98adda82ca4cb9be45eeefa3709b114fb2decfdf66e",
697
729
  "transform": "verbatim"
698
730
  },
699
731
  {
@@ -731,9 +763,9 @@
731
763
  {
732
764
  "source": "package/dist/quota/projection.d.ts",
733
765
  "output": "quota/projection.d.ts",
734
- "bytes": 2975,
735
- "sourceSha256": "65a1b13db0a4d21f8b4136af65888494c6d8a7e117e80879c96f75fc0b763ad9",
736
- "outputSha256": "65a1b13db0a4d21f8b4136af65888494c6d8a7e117e80879c96f75fc0b763ad9",
766
+ "bytes": 3549,
767
+ "sourceSha256": "2bbf4942bc034f3521c6c35e30446d73de525a099f7ba49c004d160e4dd917ea",
768
+ "outputSha256": "2bbf4942bc034f3521c6c35e30446d73de525a099f7ba49c004d160e4dd917ea",
737
769
  "transform": "verbatim"
738
770
  },
739
771
  {
@@ -923,17 +955,17 @@
923
955
  {
924
956
  "source": "package/dist/store/pool.d.ts",
925
957
  "output": "store/pool.d.ts",
926
- "bytes": 10754,
927
- "sourceSha256": "901b2881e94f067c6b454002f1e3922b75f248f2a25ef7548c399cafd9611159",
928
- "outputSha256": "901b2881e94f067c6b454002f1e3922b75f248f2a25ef7548c399cafd9611159",
958
+ "bytes": 10785,
959
+ "sourceSha256": "192ea359d2ce746b31693cf06795a281f2e06804c567975f127ea05fa6fb4aef",
960
+ "outputSha256": "192ea359d2ce746b31693cf06795a281f2e06804c567975f127ea05fa6fb4aef",
929
961
  "transform": "verbatim"
930
962
  },
931
963
  {
932
964
  "source": "package/dist/store/pool.js",
933
965
  "output": "store/pool.js",
934
- "bytes": 5713,
935
- "sourceSha256": "678cca0578ac32eb1d9e45408614c6a7b56a6dcb94672a961c8c13bca55171fd",
936
- "outputSha256": "678cca0578ac32eb1d9e45408614c6a7b56a6dcb94672a961c8c13bca55171fd",
966
+ "bytes": 5671,
967
+ "sourceSha256": "8dc0d27b37204c2c3229296e8efbbfac6bcb30538b39d8d95771267487a06292",
968
+ "outputSha256": "8dc0d27b37204c2c3229296e8efbbfac6bcb30538b39d8d95771267487a06292",
937
969
  "transform": "verbatim"
938
970
  },
939
971
  {
@@ -987,17 +1019,17 @@
987
1019
  {
988
1020
  "source": "package/dist/store/refresh-lock.d.ts",
989
1021
  "output": "store/refresh-lock.d.ts",
990
- "bytes": 2442,
991
- "sourceSha256": "5b4230fad8b94abc23d9b4a9c72cf21d7c961ac6359561a4da28e1e807bcb0ca",
992
- "outputSha256": "5b4230fad8b94abc23d9b4a9c72cf21d7c961ac6359561a4da28e1e807bcb0ca",
1022
+ "bytes": 2419,
1023
+ "sourceSha256": "50401b2e9b69b73592e0a4391fc1992a380539360b7cabfe5fce6d35fb29c648",
1024
+ "outputSha256": "50401b2e9b69b73592e0a4391fc1992a380539360b7cabfe5fce6d35fb29c648",
993
1025
  "transform": "verbatim"
994
1026
  },
995
1027
  {
996
1028
  "source": "package/dist/store/refresh-lock.js",
997
1029
  "output": "store/refresh-lock.js",
998
- "bytes": 4681,
999
- "sourceSha256": "035a03e02a0690ec51d92df0b61e2ae6abb7b8d6a141112640f8d649eb583949",
1000
- "outputSha256": "035a03e02a0690ec51d92df0b61e2ae6abb7b8d6a141112640f8d649eb583949",
1030
+ "bytes": 4655,
1031
+ "sourceSha256": "f2a316af681d1a14254873b9dc2d608a76919b7ba930636ee9f266c99195fb67",
1032
+ "outputSha256": "f2a316af681d1a14254873b9dc2d608a76919b7ba930636ee9f266c99195fb67",
1001
1033
  "transform": "verbatim"
1002
1034
  },
1003
1035
  {