@dxos/cli-util 0.8.4-main.d05673bc65 → 0.8.4-main.fcc0d83b33

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.
@@ -24,4 +24,4 @@ export {
24
24
  __export,
25
25
  CommandConfig
26
26
  };
27
- //# sourceMappingURL=chunk-6TKUDRM6.mjs.map
27
+ //# sourceMappingURL=chunk-N5LOOWPE.mjs.map
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  CommandConfig,
4
4
  __export
5
- } from "./chunk-6TKUDRM6.mjs";
5
+ } from "./chunk-N5LOOWPE.mjs";
6
6
 
7
7
  // src/util/form-builder.ts
8
8
  var form_builder_exports = {};
@@ -16,8 +16,8 @@ __export(form_builder_exports, {
16
16
  set: () => set,
17
17
  when: () => when
18
18
  });
19
- import * as Doc from "@effect/printer/Doc";
20
19
  import * as Ansi from "@effect/printer-ansi/Ansi";
20
+ import * as Doc from "@effect/printer/Doc";
21
21
  import * as Option from "effect/Option";
22
22
  import * as Pipeable from "effect/Pipeable";
23
23
  var FormBuilderImpl = class {
@@ -44,16 +44,16 @@ var calculateDimensions = (entries, prefix) => {
44
44
  var buildKeyLine = (prefix, key, targetWidth) => {
45
45
  return Doc.annotate(Doc.fill(targetWidth)(Doc.text(prefix + key + ": ")), Ansi.blackBright);
46
46
  };
47
- var setImpl = (builder, key, value2, color) => {
48
- if (value2 !== void 0) {
47
+ var setImpl = (builder, key, value, color) => {
48
+ if (value !== void 0) {
49
49
  let valueDoc;
50
- if (typeof value2 === "object" && value2 !== null) {
51
- valueDoc = value2;
50
+ if (typeof value === "object" && value !== null) {
51
+ valueDoc = value;
52
52
  } else {
53
- valueDoc = Doc.text(String(value2));
53
+ valueDoc = Doc.text(String(value));
54
54
  }
55
55
  if (color) {
56
- const ansi = typeof color === "function" ? color(value2) : color;
56
+ const ansi = typeof color === "function" ? color(value) : color;
57
57
  valueDoc = Doc.annotate(valueDoc, ansi);
58
58
  }
59
59
  builder.entries.push({
@@ -68,13 +68,13 @@ function set(builderOrKey, keyOrValue, valueOrColor, color) {
68
68
  if (builderOrKey instanceof FormBuilderImpl) {
69
69
  const builder = builderOrKey;
70
70
  const key = keyOrValue;
71
- const value2 = valueOrColor;
72
- return setImpl(builder, key, value2, color);
71
+ const value = valueOrColor;
72
+ return setImpl(builder, key, value, color);
73
73
  } else {
74
74
  const key = builderOrKey;
75
- const value2 = keyOrValue;
75
+ const value = keyOrValue;
76
76
  const color2 = valueOrColor;
77
- return (builder) => setImpl(builder, key, value2, color2);
77
+ return (builder) => setImpl(builder, key, value, color2);
78
78
  }
79
79
  }
80
80
  var nestImpl = (parent, key, builder) => {
@@ -103,9 +103,9 @@ function nest(parentOrKey, keyOrBuilder, builder) {
103
103
  return (parent) => nestImpl(parent, key, builder2);
104
104
  }
105
105
  }
106
- var optionImpl = (builder, key, value2, color) => {
107
- if (Option.isSome(value2)) {
108
- return setImpl(builder, key, value2.value, color);
106
+ var optionImpl = (builder, key, value, color) => {
107
+ if (Option.isSome(value)) {
108
+ return setImpl(builder, key, value.value, color);
109
109
  }
110
110
  return builder;
111
111
  };
@@ -113,30 +113,30 @@ function option(builderOrKey, keyOrValue, valueOrColor, color) {
113
113
  if (builderOrKey instanceof FormBuilderImpl) {
114
114
  const builder = builderOrKey;
115
115
  const key = keyOrValue;
116
- const value2 = valueOrColor;
117
- return optionImpl(builder, key, value2, color);
116
+ const value = valueOrColor;
117
+ return optionImpl(builder, key, value, color);
118
118
  } else {
119
119
  const key = builderOrKey;
120
- const value2 = keyOrValue;
120
+ const value = keyOrValue;
121
121
  const color2 = valueOrColor;
122
- return (builder) => optionImpl(builder, key, value2, color2);
122
+ return (builder) => optionImpl(builder, key, value, color2);
123
123
  }
124
124
  }
125
- var nestedOptionImpl = (builder, key, value2) => {
126
- if (Option.isSome(value2)) {
127
- return nestImpl(builder, key, value2.value);
125
+ var nestedOptionImpl = (builder, key, value) => {
126
+ if (Option.isSome(value)) {
127
+ return nestImpl(builder, key, value.value);
128
128
  }
129
129
  return builder;
130
130
  };
131
- function nestedOption(builderOrKey, keyOrValue, value2) {
131
+ function nestedOption(builderOrKey, keyOrValue, value) {
132
132
  if (builderOrKey instanceof FormBuilderImpl) {
133
133
  const builder = builderOrKey;
134
134
  const key = keyOrValue;
135
- return nestedOptionImpl(builder, key, value2);
135
+ return nestedOptionImpl(builder, key, value);
136
136
  } else {
137
137
  const key = builderOrKey;
138
- const value3 = keyOrValue;
139
- return (builder) => nestedOptionImpl(builder, key, value3);
138
+ const value2 = keyOrValue;
139
+ return (builder) => nestedOptionImpl(builder, key, value2);
140
140
  }
141
141
  }
142
142
  var whenImpl = (builder, condition, ...ops) => {
@@ -179,18 +179,18 @@ function each(builderOrItems, itemsOrFn, fn3) {
179
179
  var build = (builder) => {
180
180
  const { targetWidth } = calculateDimensions(builder.entries, builder.prefix);
181
181
  const entryLines = [];
182
- builder.entries.forEach(({ key, value: value2, isNested }) => {
182
+ builder.entries.forEach(({ key, value, isNested }) => {
183
183
  const keyLine = buildKeyLine(builder.prefix, key, targetWidth);
184
184
  if (isNested) {
185
185
  entryLines.push(Doc.hcat([
186
186
  keyLine,
187
187
  Doc.hardLine,
188
- value2
188
+ value
189
189
  ]));
190
190
  } else {
191
191
  entryLines.push(Doc.hcat([
192
192
  keyLine,
193
- value2
193
+ value
194
194
  ]));
195
195
  }
196
196
  });
@@ -213,8 +213,8 @@ var Common = {
213
213
  };
214
214
 
215
215
  // src/util/platform.ts
216
- import { spawn } from "node:child_process";
217
216
  import * as Effect from "effect/Effect";
217
+ import { spawn } from "node:child_process";
218
218
  var copyToClipboard = (text3) => Effect.tryPromise({
219
219
  try: () => {
220
220
  return new Promise((resolve, reject) => {
@@ -303,8 +303,8 @@ var openBrowser = (url) => Effect.tryPromise({
303
303
  });
304
304
 
305
305
  // src/util/printer.ts
306
- import * as Doc2 from "@effect/printer/Doc";
307
306
  import * as AnsiDoc from "@effect/printer-ansi/AnsiDoc";
307
+ import * as Doc2 from "@effect/printer/Doc";
308
308
  var print = (doc) => AnsiDoc.render(doc, {
309
309
  style: "pretty"
310
310
  });
@@ -324,12 +324,12 @@ var withTypes = (...types) => Effect2.gen(function* () {
324
324
  import * as Console from "effect/Console";
325
325
  import * as Effect3 from "effect/Effect";
326
326
  import * as Layer from "effect/Layer";
327
- import * as Match from "effect/Match";
328
327
  import * as Option2 from "effect/Option";
328
+ import { getPersonalSpace } from "@dxos/app-toolkit";
329
329
  import { ClientService as ClientService2 } from "@dxos/client";
330
+ import { QueueService } from "@dxos/compute";
330
331
  import { Database } from "@dxos/echo";
331
332
  import { BaseError } from "@dxos/errors";
332
- import { QueueService } from "@dxos/functions";
333
333
  import { log as log2 } from "@dxos/log";
334
334
  import { EdgeReplicationSetting } from "@dxos/protocols/proto/dxos/echo/metadata";
335
335
  import { isBun } from "@dxos/util";
@@ -340,33 +340,43 @@ var getSpace = (spaceId) => Effect3.gen(function* () {
340
340
  }).pipe(Effect3.catchTag("NoSuchElementException", () => Effect3.fail(new SpaceNotFoundError(spaceId))));
341
341
  var spaceIdWithDefault = (spaceId) => Effect3.gen(function* () {
342
342
  const client = yield* ClientService2;
343
- yield* Effect3.promise(() => client.spaces.waitUntilReady());
344
- return Option2.getOrElse(spaceId, () => client.spaces.default.id);
343
+ return Option2.getOrElse(spaceId, () => {
344
+ const personal = getPersonalSpace(client);
345
+ if (!personal) {
346
+ throw new Error("No space ID provided and no personal space found.");
347
+ }
348
+ return personal.id;
349
+ });
345
350
  });
346
- var spaceLayer = (spaceId$, fallbackToDefaultSpace = false) => {
351
+ var spaceLayer = (spaceId$, fallbackToPersonalSpace = false) => {
347
352
  const getSpace2 = Effect3.fn(function* () {
348
353
  const client = yield* ClientService2;
349
- yield* Effect3.promise(() => client.spaces.waitUntilReady());
350
- const spaceId = Match.value(fallbackToDefaultSpace).pipe(Match.when(true, () => spaceId$.pipe(Option2.getOrElse(() => client.spaces.default.id), Option2.some)), Match.when(false, () => spaceId$), Match.exhaustive);
351
- const space = spaceId.pipe(Option2.flatMap((id) => Option2.fromNullable(client.spaces.get(id))), Option2.getOrUndefined);
354
+ const resolveSpace = () => {
355
+ if (!fallbackToPersonalSpace) {
356
+ return spaceId$.pipe(Option2.flatMap((id) => Option2.fromNullable(client.spaces.get(id))));
357
+ }
358
+ return spaceId$.pipe(Option2.flatMap((id) => Option2.fromNullable(client.spaces.get(id))), Option2.orElse(() => Option2.fromNullable(getPersonalSpace(client))), Option2.orElse(() => Option2.fromNullable(client.spaces.get()[0])));
359
+ };
360
+ const space = resolveSpace().pipe(Option2.getOrUndefined);
352
361
  if (space) {
353
362
  yield* Effect3.promise(() => space.waitUntilReady());
354
363
  }
355
364
  return space;
356
365
  });
366
+ const NO_DB_STUB = {
367
+ get db() {
368
+ throw new Error("Space not found");
369
+ }
370
+ };
357
371
  const db = Layer.scoped(Database.Service, Effect3.acquireRelease(Effect3.gen(function* () {
358
372
  const space = yield* getSpace2();
359
373
  if (!space) {
360
- return {
361
- get db() {
362
- throw new Error("Space not found");
363
- }
364
- };
374
+ return NO_DB_STUB;
365
375
  }
366
376
  return {
367
377
  db: space.db
368
378
  };
369
- }), ({ db: db2 }) => Effect3.promise(() => db2.flush())));
379
+ }), (holder) => holder === NO_DB_STUB ? Effect3.void : Effect3.promise(() => holder.db.flush())));
370
380
  const queue = Layer.effect(QueueService, Effect3.gen(function* () {
371
381
  const space = yield* getSpace2();
372
382
  if (!space) {
@@ -400,12 +410,7 @@ var waitForSync = Effect3.fn(function* (space) {
400
410
  yield* Effect3.promise(() => space.internal.syncToEdge({
401
411
  onProgress: (state) => log2.info("syncing", {
402
412
  state: state ?? "no connection to edge"
403
- }, {
404
- F: __dxlog_file,
405
- L: 125,
406
- S: this,
407
- C: (f, a) => f(...a)
408
- })
413
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 107, S: this })
409
414
  }));
410
415
  yield* Console.log("Sync complete");
411
416
  });
@@ -427,28 +432,61 @@ var SpaceNotFoundError = class extends BaseError.extend("SpaceNotFoundError", "S
427
432
  };
428
433
 
429
434
  // src/util/space-format.ts
435
+ import * as Duration from "effect/Duration";
430
436
  import * as Effect4 from "effect/Effect";
431
437
  import { SpaceState } from "@dxos/client/echo";
432
- var formatSpace = Effect4.fn(function* (space, options = {
438
+ var DEFAULT_OPTIONS = {
433
439
  verbose: false,
434
- truncateKeys: false
435
- }) {
436
- yield* Effect4.tryPromise(() => space.waitUntilReady());
437
- const { open, ready } = space.internal.data.metrics ?? {};
438
- const startup = open && ready && ready.getTime() - open.getTime();
439
- const pipeline = space.internal.data.pipeline;
440
+ truncateKeys: false,
441
+ waitSeconds: 0
442
+ };
443
+ var READ_TIMEOUT_SECONDS = 2;
444
+ var tryWithFallback = (label, run, fallback) => Effect4.tryPromise(run).pipe(Effect4.timeoutFail({
445
+ duration: Duration.seconds(READ_TIMEOUT_SECONDS),
446
+ onTimeout: () => new Error(`${label} timed out`)
447
+ }), Effect4.catchAll(() => Effect4.succeed(fallback)));
448
+ var tryWithFallbackSync = (read, fallback) => {
449
+ try {
450
+ return read();
451
+ } catch {
452
+ return fallback;
453
+ }
454
+ };
455
+ var formatSpace = Effect4.fn(function* (space, options = {}) {
456
+ const { waitSeconds } = {
457
+ ...DEFAULT_OPTIONS,
458
+ ...options
459
+ };
460
+ if (waitSeconds > 0) {
461
+ yield* Effect4.tryPromise(() => space.waitUntilReady()).pipe(Effect4.timeoutFail({
462
+ duration: Duration.seconds(waitSeconds),
463
+ onTimeout: () => new Error("waitUntilReady timed out")
464
+ }), Effect4.catchAll(() => Effect4.void));
465
+ }
466
+ const state = tryWithFallbackSync(() => space.state.get(), SpaceState.SPACE_INITIALIZING);
467
+ const ready = state === SpaceState.SPACE_READY;
468
+ const metrics = tryWithFallbackSync(() => space.internal.data.metrics, void 0);
469
+ const startup = metrics?.open && metrics?.ready ? metrics.ready.getTime() - metrics.open.getTime() : void 0;
470
+ const pipeline = tryWithFallbackSync(() => space.internal.data.pipeline, void 0);
440
471
  const epoch = pipeline?.currentEpoch?.subject.assertion.number;
441
- const syncState = aggregateSyncState(yield* Effect4.tryPromise(() => space.internal.db.coreDatabase.getSyncState()));
472
+ const syncStateRaw = yield* tryWithFallback("getSyncState", () => space.internal.db.coreDatabase.getSyncState(), {
473
+ peers: {}
474
+ });
475
+ const syncState = aggregateSyncState(syncStateRaw);
476
+ const name = ready ? tryWithFallbackSync(() => space.properties.name, void 0) : "loading...";
477
+ const members = tryWithFallbackSync(() => space.members.get().length, 0);
478
+ const objects = tryWithFallbackSync(() => space.internal.db.coreDatabase.getAllObjectIds().length, 0);
479
+ const key = options.truncateKeys ? tryWithFallbackSync(() => space.key.truncate(), "") : tryWithFallbackSync(() => space.key.toHex(), "");
442
480
  return {
443
481
  id: space.id,
444
- state: SpaceState[space.state.get()],
445
- name: space.state.get() === SpaceState.SPACE_READY ? space.properties.name : "loading...",
446
- members: space.members.get().length,
447
- objects: space.internal.db.coreDatabase.getAllObjectIds().length,
448
- key: options.truncateKeys ? space.key.truncate() : space.key.toHex(),
482
+ state: SpaceState[state],
483
+ name,
484
+ members,
485
+ objects,
486
+ key,
449
487
  epoch,
450
488
  startup,
451
- automergeRoot: space.internal.data.pipeline?.spaceRootUrl,
489
+ automergeRoot: pipeline?.spaceRootUrl,
452
490
  // appliedEpoch,
453
491
  syncState: `${syncState.count} ${getSyncIndicator(syncState.up, syncState.down)} (${syncState.peers} peers)`
454
492
  };
@@ -486,12 +524,12 @@ var printSpace = (spaceData) => make({
486
524
 
487
525
  // src/util/timeout.ts
488
526
  import * as Config from "effect/Config";
489
- import * as Duration from "effect/Duration";
527
+ import * as Duration2 from "effect/Duration";
490
528
  import * as Effect5 from "effect/Effect";
491
529
  import * as Option3 from "effect/Option";
492
530
  var withTimeout = Effect5.fnUntraced(function* (effect2) {
493
531
  const timeout2 = yield* Config.integer("TIMEOUT").pipe(Config.option);
494
- const duration = timeout2.pipe(Option3.map(Duration.millis), Option3.getOrElse(() => Duration.infinity));
532
+ const duration = timeout2.pipe(Option3.map(Duration2.millis), Option3.getOrElse(() => Duration2.infinity));
495
533
  return yield* effect2.pipe(Effect5.timeout(duration));
496
534
  });
497
535
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/util/form-builder.ts", "../../../src/util/options.ts", "../../../src/util/platform.ts", "../../../src/util/printer.ts", "../../../src/util/runtime.ts", "../../../src/util/space.ts", "../../../src/util/space-format.ts", "../../../src/util/timeout.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Doc from '@effect/printer/Doc';\nimport * as Ansi from '@effect/printer-ansi/Ansi';\nimport * as Option from 'effect/Option';\nimport * as Pipeable from 'effect/Pipeable';\n\nexport type FormBuilderOptions = {\n title?: string;\n prefix?: string;\n};\n\nexport interface FormBuilder extends Pipeable.Pipeable {\n readonly entries: ReadonlyArray<{ key: string; value: Doc.Doc<any>; isNested?: boolean }>;\n readonly title?: string;\n readonly prefix: string;\n}\n\nclass FormBuilderImpl implements FormBuilder {\n readonly entries: Array<{ key: string; value: Doc.Doc<any>; isNested?: boolean }> = [];\n readonly title?: string;\n readonly prefix: string;\n\n constructor(options: FormBuilderOptions = {}) {\n this.title = options.title;\n this.prefix = options.prefix ?? '- ';\n }\n\n pipe() {\n // eslint-disable-next-line prefer-rest-params\n return Pipeable.pipeArguments(this, arguments);\n }\n}\n\n/**\n * Creates a new FormBuilder instance.\n */\nexport const make = (props?: FormBuilderOptions): FormBuilder => new FormBuilderImpl(props);\n\n// Helper to calculate dimensions for formatting\nconst calculateDimensions = (entries: ReadonlyArray<{ key: string }>, prefix: string) => {\n const maxKeyLen = Math.max(0, ...entries.map((entry) => entry.key.length));\n const targetWidth = prefix.length + maxKeyLen + 2;\n return { maxKeyLen, targetWidth };\n};\n\n// Helper to build a formatted key line\nconst buildKeyLine = (prefix: string, key: string, targetWidth: number) => {\n // Use fill to pad the key to targetWidth.\n // Note: We don't add indentation here; indentation is handled by the parent container or nestImpl.\n return Doc.annotate(Doc.fill(targetWidth)(Doc.text(prefix + key + ': ')), Ansi.blackBright);\n};\n\n// Implementation helper\nconst setImpl = <T>(\n builder: FormBuilder,\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder => {\n if (value !== undefined) {\n let valueDoc: Doc.Doc<any>;\n if (typeof value === 'object' && value !== null) {\n // Assume it's a Doc.Doc\n valueDoc = value as unknown as Doc.Doc<any>;\n } else {\n valueDoc = Doc.text(String(value));\n }\n\n if (color) {\n const ansi = typeof color === 'function' ? color(value as T) : color;\n valueDoc = Doc.annotate(valueDoc, ansi);\n }\n\n (builder as FormBuilderImpl).entries.push({\n key,\n value: valueDoc,\n isNested: false,\n });\n }\n return builder;\n};\n\n/**\n * Adds a key-value pair to the form.\n */\nexport function set<T>(\n builder: FormBuilder,\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder;\nexport function set<T>(\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): (builder: FormBuilder) => FormBuilder;\nexport function set<T>(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | T,\n valueOrColor?: T | Ansi.Ansi | ((value: T) => Ansi.Ansi),\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: set(builder, key, value, color?)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n const value = valueOrColor as T;\n return setImpl(builder, key, value, color);\n } else {\n // Curried: set(key, value, color?)\n const key = builderOrKey as string;\n const value = keyOrValue as T;\n const color = valueOrColor as Ansi.Ansi | ((value: T) => Ansi.Ansi) | undefined;\n return (builder: FormBuilder) => setImpl(builder, key, value, color);\n }\n}\n\n// Implementation helper\nconst nestImpl = (parent: FormBuilder, key: string, builder: FormBuilder): FormBuilder => {\n // Build nested entries without title, directly under the parent field name\n\n // Create a temporary builder without title to ignore it.\n const nestedBuilder: FormBuilder = {\n ...builder,\n title: undefined,\n entries: builder.entries,\n };\n\n // Build content.\n let valueDoc = build(nestedBuilder);\n\n // Indent the content by 2 spaces.\n // This ensures that when this doc is embedded in the parent, it is visually nested.\n valueDoc = Doc.indent(valueDoc, 2);\n\n (parent.entries as Array<{ key: string; value: Doc.Doc<any>; isNested?: boolean }>).push({\n key,\n value: valueDoc,\n isNested: true,\n });\n return parent;\n};\n\n/**\n * Nests another form builder under a key.\n */\nexport function nest(parent: FormBuilder, key: string, builder: FormBuilder): FormBuilder;\nexport function nest(key: string, builder: FormBuilder): (parent: FormBuilder) => FormBuilder;\nexport function nest(\n parentOrKey: FormBuilder | string,\n keyOrBuilder?: string | FormBuilder,\n builder?: FormBuilder,\n): FormBuilder | ((parent: FormBuilder) => FormBuilder) {\n if (parentOrKey instanceof FormBuilderImpl) {\n // Direct: nest(parent, key, builder)\n const parent = parentOrKey;\n const key = keyOrBuilder as string;\n return nestImpl(parent, key, builder!);\n } else {\n // Curried: nest(key, builder)\n const key = parentOrKey as string;\n const builder = keyOrBuilder as FormBuilder;\n return (parent: FormBuilder) => nestImpl(parent, key, builder);\n }\n}\n\n// Implementation helper\nconst optionImpl = <T>(\n builder: FormBuilder,\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder => {\n if (Option.isSome(value)) {\n return setImpl(builder, key, value.value, color);\n }\n return builder;\n};\n\n/**\n * Adds an optional value if it exists.\n */\nexport function option<T>(\n builder: FormBuilder,\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder;\nexport function option<T>(\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): (builder: FormBuilder) => FormBuilder;\nexport function option<T>(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | Option.Option<T>,\n valueOrColor?: Option.Option<T> | Ansi.Ansi | ((value: T) => Ansi.Ansi),\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: option(builder, key, value, color?)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n const value = valueOrColor as Option.Option<T>;\n return optionImpl(builder, key, value, color);\n } else {\n // Curried: option(key, value, color?)\n const key = builderOrKey as string;\n const value = keyOrValue as Option.Option<T>;\n const color = valueOrColor as Ansi.Ansi | ((value: T) => Ansi.Ansi) | undefined;\n return (builder: FormBuilder) => optionImpl(builder, key, value, color);\n }\n}\n\n// Implementation helper\nconst nestedOptionImpl = (builder: FormBuilder, key: string, value: Option.Option<FormBuilder>): FormBuilder => {\n if (Option.isSome(value)) {\n return nestImpl(builder, key, value.value);\n }\n return builder;\n};\n\n/**\n * Nests an optional form builder if it exists.\n */\nexport function nestedOption(builder: FormBuilder, key: string, value: Option.Option<FormBuilder>): FormBuilder;\nexport function nestedOption(key: string, value: Option.Option<FormBuilder>): (builder: FormBuilder) => FormBuilder;\nexport function nestedOption(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | Option.Option<FormBuilder>,\n value?: Option.Option<FormBuilder>,\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: nestedOption(builder, key, value)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n return nestedOptionImpl(builder, key, value!);\n } else {\n // Curried: nestedOption(key, value)\n const key = builderOrKey as string;\n const value = keyOrValue as Option.Option<FormBuilder>;\n return (builder: FormBuilder) => nestedOptionImpl(builder, key, value);\n }\n}\n\n// Implementation helper\nconst whenImpl = (builder: FormBuilder, condition: any, ...ops: ((b: FormBuilder) => FormBuilder)[]): FormBuilder => {\n if (condition) {\n for (const op of ops) {\n op(builder);\n }\n }\n return builder;\n};\n\n/**\n * Conditionally executes operations.\n */\nexport function when(builder: FormBuilder, condition: any, ...ops: ((b: FormBuilder) => FormBuilder)[]): FormBuilder;\nexport function when(\n condition: any,\n ...ops: ((b: FormBuilder) => FormBuilder)[]\n): (builder: FormBuilder) => FormBuilder;\nexport function when(\n builderOrCondition: FormBuilder | any,\n conditionOrOp?: any | ((b: FormBuilder) => FormBuilder),\n ...ops: ((b: FormBuilder) => FormBuilder)[]\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrCondition instanceof FormBuilderImpl) {\n // Direct: when(builder, condition, ...ops)\n const builder = builderOrCondition;\n const condition = conditionOrOp;\n return whenImpl(builder, condition, ...ops);\n } else {\n // Curried: when(condition, ...ops)\n const condition = builderOrCondition;\n const allOps = [conditionOrOp, ...ops].filter(\n (op): op is (b: FormBuilder) => FormBuilder => typeof op === 'function',\n );\n return (builder: FormBuilder) => whenImpl(builder, condition, ...allOps);\n }\n}\n\n// Implementation helper\nconst eachImpl = <T>(\n builder: FormBuilder,\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder => {\n items.forEach((item) => fn(item)(builder));\n return builder;\n};\n\n/**\n * Iterates over an array of items.\n */\nexport function each<T>(\n builder: FormBuilder,\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder;\nexport function each<T>(\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): (builder: FormBuilder) => FormBuilder;\nexport function each<T>(\n builderOrItems: FormBuilder | T[],\n itemsOrFn?: T[] | ((item: T) => (b: FormBuilder) => FormBuilder),\n fn?: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrItems instanceof FormBuilderImpl) {\n // Direct: each(builder, items, fn)\n const builder = builderOrItems;\n const items = itemsOrFn as T[];\n return eachImpl(builder, items, fn!);\n } else {\n // Curried: each(items, fn)\n const items = builderOrItems as T[];\n const fn = itemsOrFn as (item: T) => (b: FormBuilder) => FormBuilder;\n return (builder: FormBuilder) => eachImpl(builder, items, fn);\n }\n}\n\n/**\n * Builds the final document.\n */\nexport const build = (builder: FormBuilder): Doc.Doc<any> => {\n const { targetWidth } = calculateDimensions(builder.entries, builder.prefix);\n const entryLines: Doc.Doc<any>[] = [];\n\n builder.entries.forEach(({ key, value, isNested }) => {\n const keyLine = buildKeyLine(builder.prefix, key, targetWidth);\n if (isNested) {\n // Nested content should start on a new line.\n // value is already indented by nestImpl, so we just cat with hardLine.\n entryLines.push(Doc.hcat([keyLine, Doc.hardLine, value]));\n } else {\n // Single-line value, combine key and value.\n // If the value itself is multiline (e.g. from Doc.string with newlines, though Doc handles that specifically),\n // we might want layout flexibility.\n // For now, standard behavior:\n entryLines.push(Doc.hcat([keyLine, value]));\n }\n });\n\n const entriesDoc = Doc.vsep(entryLines);\n\n if (builder.title) {\n const titleDoc = Doc.hcat([Doc.annotate(Doc.text(builder.title), Ansi.combine(Ansi.bold, Ansi.cyan))]);\n // Join title and entries with a single line break, no extra spacing\n return Doc.cat(titleDoc, Doc.cat(Doc.line, entriesDoc));\n }\n\n return entriesDoc;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Options from '@effect/cli/Options';\n\nimport { Key } from '@dxos/echo';\n\n//\n// Common options.\n// NOTE: Sub-commands should Function.pipe(Options.optional) if required.\n//\n\nexport const Common = {\n functionId: Options.text('function-id').pipe(Options.withDescription('EDGE Function ID.')),\n spaceId: Options.text('space-id').pipe(Options.withSchema(Key.SpaceId), Options.withDescription('Space ID.')),\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { spawn } from 'node:child_process';\n\nimport * as Effect from 'effect/Effect';\n\n/**\n * Copy text to the system clipboard.\n * Supports macOS (pbcopy), Windows (clip), and Linux (xclip/xsel).\n */\nexport const copyToClipboard = (text: string): Effect.Effect<void, Error> =>\n Effect.tryPromise({\n try: () => {\n return new Promise<void>((resolve, reject) => {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'pbcopy';\n args = [];\n } else if (platform === 'win32') {\n command = 'clip';\n args = [];\n } else {\n // Linux - try xclip or xsel\n command = 'xclip';\n args = ['-selection', 'clipboard'];\n }\n\n const proc = spawn(command, args);\n proc.stdin?.write(text);\n proc.stdin?.end();\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n // Try xsel as fallback on Linux\n if (platform === 'linux') {\n const proc2 = spawn('xsel', ['--clipboard', '--input']);\n proc2.stdin?.write(text);\n proc2.stdin?.end();\n proc2.on('close', (code2) => {\n if (code2 === 0) {\n resolve();\n } else {\n reject(new Error('Failed to copy to clipboard'));\n }\n });\n proc2.on('error', reject);\n } else {\n reject(new Error('Failed to copy to clipboard'));\n }\n }\n });\n\n proc.on('error', reject);\n });\n },\n catch: (error) => new Error(`Failed to copy to clipboard: ${error}`),\n });\n\n/**\n * Open a URL in the system's default browser.\n * Supports macOS (open), Windows (start), and Linux (xdg-open).\n */\nexport const openBrowser = (url: string): Effect.Effect<void, Error> =>\n Effect.tryPromise({\n try: () => {\n return new Promise<void>((resolve, reject) => {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'open';\n args = [url];\n } else if (platform === 'win32') {\n command = 'start';\n args = [url];\n } else {\n command = 'xdg-open';\n args = [url];\n }\n\n const proc = spawn(command, args);\n proc.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error('Failed to open browser'));\n }\n });\n proc.on('error', reject);\n });\n },\n catch: (error) => new Error(`Failed to open browser: ${error}`),\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Doc from '@effect/printer/Doc';\nimport * as AnsiDoc from '@effect/printer-ansi/AnsiDoc';\n\n/**\n * Pretty print document.\n */\nexport const print = (doc: Doc.Doc<any>) => AnsiDoc.render(doc, { style: 'pretty' });\n\n/**\n * Pretty prints a list of documents with ANSI colors.\n */\nexport const printList = (items: Array<Doc.Doc<any>>) =>\n AnsiDoc.render(Doc.vsep(items.map((item) => Doc.cat(item, Doc.hardLine))), { style: 'pretty' });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { ClientService } from '@dxos/client';\nimport { type Type } from '@dxos/echo';\n\n/** @deprecated Migrate to providing types via plugin capabilities. */\nexport const withTypes: (...types: Type.AnyEntity[]) => Effect.Effect<void, never, ClientService> = (...types) =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.addTypes(types));\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\n\nimport { ClientService } from '@dxos/client';\nimport { type Space } from '@dxos/client/echo';\nimport { Database, type Key } from '@dxos/echo';\nimport { BaseError, type BaseErrorOptions } from '@dxos/errors';\nimport { QueueService } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { isBun } from '@dxos/util';\n\nexport const getSpace = (spaceId: Key.SpaceId): Effect.Effect<Space, SpaceNotFoundError, ClientService> =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n return yield* Option.fromNullable(client.spaces.get(spaceId));\n }).pipe(Effect.catchTag('NoSuchElementException', () => Effect.fail(new SpaceNotFoundError(spaceId))));\n\nexport const spaceIdWithDefault = (spaceId: Option.Option<Key.SpaceId>) =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.spaces.waitUntilReady());\n return Option.getOrElse(spaceId, () => client.spaces.default.id);\n });\n\n// TODO(wittjosiah): Factor out.\nexport const spaceLayer = (\n spaceId$: Option.Option<Key.SpaceId>,\n fallbackToDefaultSpace = false,\n): Layer.Layer<Database.Service | QueueService, never, ClientService> => {\n const getSpace = Effect.fn(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.spaces.waitUntilReady());\n\n const spaceId = Match.value(fallbackToDefaultSpace).pipe(\n Match.when(true, () =>\n spaceId$.pipe(\n Option.getOrElse(() => client.spaces.default.id),\n Option.some,\n ),\n ),\n Match.when(false, () => spaceId$),\n Match.exhaustive,\n );\n\n const space = spaceId.pipe(\n Option.flatMap((id) => Option.fromNullable(client.spaces.get(id))),\n Option.getOrUndefined,\n );\n\n if (space) {\n yield* Effect.promise(() => space.waitUntilReady());\n }\n return space;\n });\n\n const db = Layer.scoped(\n Database.Service,\n Effect.acquireRelease(\n Effect.gen(function* () {\n const space = yield* getSpace();\n if (!space) {\n return {\n get db(): Database.Database {\n throw new Error('Space not found');\n },\n };\n }\n return { db: space.db };\n }),\n ({ db }) => Effect.promise(() => db.flush()),\n ),\n );\n\n const queue = Layer.effect(\n QueueService,\n Effect.gen(function* () {\n const space = yield* getSpace();\n if (!space) {\n return {\n queues: {\n get: (_dxn) => {\n throw new Error('Queues not available');\n },\n create: () => {\n throw new Error('Queues not available');\n },\n },\n queue: undefined,\n };\n }\n return {\n queues: space.queues,\n queue: undefined,\n };\n }),\n );\n\n return Layer.merge(db, queue);\n};\n\n// TODO(dmaretskyi): There a race condition with edge connection not showing up.\nexport const waitForSync = Effect.fn(function* (space: Space) {\n // TODO(wittjosiah): Find a better way to do this.\n if (!isBun()) {\n // Skipping sync to edge when not in bun env as this indicates running a test.\n return;\n }\n\n // TODO(wittjosiah): This should probably be prompted for.\n if (space.internal.data.edgeReplication !== EdgeReplicationSetting.ENABLED) {\n yield* Console.log('Edge replication is disabled, enabling...');\n yield* Effect.promise(() => space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED));\n }\n\n yield* Effect.promise(() =>\n space.internal.syncToEdge({\n onProgress: (state) => log.info('syncing', { state: state ?? 'no connection to edge' }),\n }),\n );\n yield* Console.log('Sync complete');\n});\n\nexport const flushAndSync = Effect.fn(function* (opts?: Database.FlushOptions) {\n yield* Database.flush(opts);\n const spaceId = yield* Database.spaceId;\n const space = yield* getSpace(spaceId);\n yield* waitForSync(space);\n});\n\n// TODO(burdon): Reconcile with @dxos/protocols\nexport class SpaceNotFoundError extends BaseError.extend('SpaceNotFoundError', 'Space not found') {\n constructor(spaceId: string, options?: Omit<BaseErrorOptions, 'context'>) {\n super({ context: { spaceId }, ...options });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { type Space, SpaceState, type SpaceSyncState } from '@dxos/client/echo';\n\nimport * as FormBuilder from './form-builder';\n\n// TODO(wittjosiah): Use @effect/printer.\nexport const formatSpace = Effect.fn(function* (space: Space, options = { verbose: false, truncateKeys: false }) {\n yield* Effect.tryPromise(() => space.waitUntilReady());\n\n // TODO(burdon): Factor out.\n // TODO(burdon): Agent needs to restart before `ready` is available.\n const { open, ready } = space.internal.data.metrics ?? {};\n const startup = open && ready && ready.getTime() - open.getTime();\n\n // TODO(burdon): Get feeds from client-services if verbose (factor out from devtools/diagnostics).\n // const host = client.services.services.DevtoolsHost!;\n const pipeline = space.internal.data.pipeline;\n const epoch = pipeline?.currentEpoch?.subject.assertion.number;\n\n const syncState = aggregateSyncState(yield* Effect.tryPromise(() => space.internal.db.coreDatabase.getSyncState()));\n\n return {\n id: space.id,\n state: SpaceState[space.state.get()],\n name: space.state.get() === SpaceState.SPACE_READY ? space.properties.name : 'loading...',\n\n members: space.members.get().length,\n objects: space.internal.db.coreDatabase.getAllObjectIds().length,\n\n key: options.truncateKeys ? space.key.truncate() : space.key.toHex(),\n epoch,\n startup,\n automergeRoot: space.internal.data.pipeline?.spaceRootUrl,\n // appliedEpoch,\n syncState: `${syncState.count} ${getSyncIndicator(syncState.up, syncState.down)} (${syncState.peers} peers)`,\n };\n});\n\nconst aggregateSyncState = (syncState: SpaceSyncState) => {\n const peers = Object.keys(syncState.peers ?? {}).length;\n const missingOnLocal = Math.max(...Object.values(syncState.peers ?? {}).map((peer) => peer.missingOnLocal), 0);\n const missingOnRemote = Math.max(...Object.values(syncState.peers ?? {}).map((peer) => peer.missingOnRemote), 0);\n const differentDocuments = Math.max(\n ...Object.values(syncState.peers ?? {}).map((peer) => peer.differentDocuments),\n 0,\n );\n\n return {\n count: missingOnLocal + missingOnRemote + differentDocuments,\n peers,\n up: missingOnRemote > 0 || differentDocuments > 0,\n down: missingOnLocal > 0 || differentDocuments > 0,\n };\n};\n\nconst getSyncIndicator = (up: boolean, down: boolean) => {\n if (up) {\n if (down) {\n return '⇅';\n } else {\n return '↑';\n }\n } else {\n if (down) {\n return '↓';\n } else {\n return '✓';\n }\n }\n};\n\nexport type FormattedSpace = {\n id: string;\n state: string;\n name: string | undefined;\n members: number;\n objects: number;\n key: string;\n epoch: any;\n startup: number | undefined;\n automergeRoot: string | undefined;\n syncState: string;\n};\n\n/**\n * Pretty prints a space with ANSI colors.\n */\nexport const printSpace = (spaceData: FormattedSpace) =>\n FormBuilder.make({ title: spaceData.name ?? spaceData.id }).pipe(\n FormBuilder.set('id', spaceData.id),\n FormBuilder.set('state', spaceData.state),\n FormBuilder.set('key', spaceData.key),\n FormBuilder.set('members', spaceData.members),\n FormBuilder.set('objects', spaceData.objects),\n FormBuilder.set('epoch', spaceData.epoch ?? '<none>'),\n FormBuilder.set('startup', spaceData.startup ? `${spaceData.startup}ms` : '<none>'),\n FormBuilder.set('syncState', spaceData.syncState),\n FormBuilder.set('automergeRoot', spaceData.automergeRoot ?? '<none>'),\n FormBuilder.build,\n );\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Cause from 'effect/Cause';\nimport * as Config from 'effect/Config';\nimport type * as ConfigError from 'effect/ConfigError';\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nexport const withTimeout: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n) => Effect.Effect<A, Cause.TimeoutException | ConfigError.ConfigError | E, R> = Effect.fnUntraced(function* (effect) {\n const timeout = yield* Config.integer('TIMEOUT').pipe(Config.option);\n const duration = timeout.pipe(\n Option.map(Duration.millis),\n Option.getOrElse(() => Duration.infinity),\n );\n return yield* effect.pipe(Effect.timeout(duration));\n});\n"],
5
- "mappings": "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",
6
- "names": ["Doc", "Ansi", "Option", "Pipeable", "FormBuilderImpl", "entries", "title", "prefix", "options", "pipe", "pipeArguments", "arguments", "make", "props", "calculateDimensions", "maxKeyLen", "Math", "max", "map", "entry", "key", "length", "targetWidth", "buildKeyLine", "annotate", "fill", "text", "blackBright", "setImpl", "builder", "value", "color", "undefined", "valueDoc", "String", "ansi", "push", "isNested", "set", "builderOrKey", "keyOrValue", "valueOrColor", "nestImpl", "parent", "nestedBuilder", "build", "indent", "nest", "parentOrKey", "keyOrBuilder", "optionImpl", "isSome", "option", "nestedOptionImpl", "nestedOption", "whenImpl", "condition", "ops", "op", "when", "builderOrCondition", "conditionOrOp", "allOps", "filter", "eachImpl", "items", "fn", "forEach", "item", "each", "builderOrItems", "itemsOrFn", "entryLines", "keyLine", "hcat", "hardLine", "entriesDoc", "vsep", "titleDoc", "combine", "bold", "cyan", "cat", "line", "Options", "Key", "Common", "functionId", "text", "pipe", "withDescription", "spaceId", "withSchema", "Key", "SpaceId", "spawn", "Effect", "copyToClipboard", "text", "tryPromise", "try", "Promise", "resolve", "reject", "platform", "process", "command", "args", "proc", "spawn", "stdin", "write", "end", "on", "code", "proc2", "code2", "Error", "catch", "error", "openBrowser", "url", "Doc", "AnsiDoc", "print", "doc", "render", "style", "printList", "items", "vsep", "map", "item", "cat", "hardLine", "Effect", "ClientService", "withTypes", "types", "gen", "client", "ClientService", "promise", "addTypes", "Console", "Effect", "Layer", "Match", "Option", "ClientService", "Database", "BaseError", "QueueService", "log", "EdgeReplicationSetting", "isBun", "getSpace", "spaceId", "gen", "client", "fromNullable", "spaces", "get", "pipe", "catchTag", "fail", "SpaceNotFoundError", "spaceIdWithDefault", "promise", "waitUntilReady", "getOrElse", "default", "id", "spaceLayer", "spaceId$", "fallbackToDefaultSpace", "fn", "value", "when", "some", "exhaustive", "space", "flatMap", "getOrUndefined", "db", "scoped", "Service", "acquireRelease", "Error", "flush", "queue", "effect", "queues", "_dxn", "create", "undefined", "merge", "waitForSync", "internal", "data", "edgeReplication", "ENABLED", "setEdgeReplicationPreference", "syncToEdge", "onProgress", "state", "info", "flushAndSync", "opts", "extend", "options", "context", "Effect", "SpaceState", "formatSpace", "fn", "space", "options", "verbose", "truncateKeys", "tryPromise", "waitUntilReady", "open", "ready", "internal", "data", "metrics", "startup", "getTime", "pipeline", "epoch", "currentEpoch", "subject", "assertion", "number", "syncState", "aggregateSyncState", "db", "coreDatabase", "getSyncState", "id", "state", "SpaceState", "get", "name", "SPACE_READY", "properties", "members", "length", "objects", "getAllObjectIds", "key", "truncate", "toHex", "automergeRoot", "spaceRootUrl", "count", "getSyncIndicator", "up", "down", "peers", "Object", "keys", "missingOnLocal", "Math", "max", "values", "map", "peer", "missingOnRemote", "differentDocuments", "printSpace", "spaceData", "make", "title", "pipe", "set", "build", "Config", "Duration", "Effect", "Option", "withTimeout", "fnUntraced", "effect", "timeout", "integer", "pipe", "option", "duration", "map", "millis", "getOrElse", "infinity"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Ansi from '@effect/printer-ansi/Ansi';\nimport * as Doc from '@effect/printer/Doc';\nimport * as Option from 'effect/Option';\nimport * as Pipeable from 'effect/Pipeable';\n\nexport type FormBuilderOptions = {\n title?: string;\n prefix?: string;\n};\n\nexport interface FormBuilder extends Pipeable.Pipeable {\n readonly entries: ReadonlyArray<{ key: string; value: Doc.Doc<any>; isNested?: boolean }>;\n readonly title?: string;\n readonly prefix: string;\n}\n\nclass FormBuilderImpl implements FormBuilder {\n readonly entries: Array<{ key: string; value: Doc.Doc<any>; isNested?: boolean }> = [];\n readonly title?: string;\n readonly prefix: string;\n\n constructor(options: FormBuilderOptions = {}) {\n this.title = options.title;\n this.prefix = options.prefix ?? '- ';\n }\n\n pipe() {\n // eslint-disable-next-line prefer-rest-params\n return Pipeable.pipeArguments(this, arguments);\n }\n}\n\n/**\n * Creates a new FormBuilder instance.\n */\nexport const make = (props?: FormBuilderOptions): FormBuilder => new FormBuilderImpl(props);\n\n// Helper to calculate dimensions for formatting\nconst calculateDimensions = (entries: ReadonlyArray<{ key: string }>, prefix: string) => {\n const maxKeyLen = Math.max(0, ...entries.map((entry) => entry.key.length));\n const targetWidth = prefix.length + maxKeyLen + 2;\n return { maxKeyLen, targetWidth };\n};\n\n// Helper to build a formatted key line\nconst buildKeyLine = (prefix: string, key: string, targetWidth: number) => {\n // Use fill to pad the key to targetWidth.\n // Note: We don't add indentation here; indentation is handled by the parent container or nestImpl.\n return Doc.annotate(Doc.fill(targetWidth)(Doc.text(prefix + key + ': ')), Ansi.blackBright);\n};\n\n// Implementation helper\nconst setImpl = <T>(\n builder: FormBuilder,\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder => {\n if (value !== undefined) {\n let valueDoc: Doc.Doc<any>;\n if (typeof value === 'object' && value !== null) {\n // Assume it's a Doc.Doc\n valueDoc = value as unknown as Doc.Doc<any>;\n } else {\n valueDoc = Doc.text(String(value));\n }\n\n if (color) {\n const ansi = typeof color === 'function' ? color(value as T) : color;\n valueDoc = Doc.annotate(valueDoc, ansi);\n }\n\n (builder as FormBuilderImpl).entries.push({\n key,\n value: valueDoc,\n isNested: false,\n });\n }\n return builder;\n};\n\n/**\n * Adds a key-value pair to the form.\n */\nexport function set<T>(\n builder: FormBuilder,\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder;\nexport function set<T>(\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): (builder: FormBuilder) => FormBuilder;\nexport function set<T>(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | T,\n valueOrColor?: T | Ansi.Ansi | ((value: T) => Ansi.Ansi),\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: set(builder, key, value, color?)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n const value = valueOrColor as T;\n return setImpl(builder, key, value, color);\n } else {\n // Curried: set(key, value, color?)\n const key = builderOrKey as string;\n const value = keyOrValue as T;\n const color = valueOrColor as Ansi.Ansi | ((value: T) => Ansi.Ansi) | undefined;\n return (builder: FormBuilder) => setImpl(builder, key, value, color);\n }\n}\n\n// Implementation helper\nconst nestImpl = (parent: FormBuilder, key: string, builder: FormBuilder): FormBuilder => {\n // Build nested entries without title, directly under the parent field name\n\n // Create a temporary builder without title to ignore it.\n const nestedBuilder: FormBuilder = {\n ...builder,\n title: undefined,\n entries: builder.entries,\n };\n\n // Build content.\n let valueDoc = build(nestedBuilder);\n\n // Indent the content by 2 spaces.\n // This ensures that when this doc is embedded in the parent, it is visually nested.\n valueDoc = Doc.indent(valueDoc, 2);\n\n (parent.entries as Array<{ key: string; value: Doc.Doc<any>; isNested?: boolean }>).push({\n key,\n value: valueDoc,\n isNested: true,\n });\n return parent;\n};\n\n/**\n * Nests another form builder under a key.\n */\nexport function nest(parent: FormBuilder, key: string, builder: FormBuilder): FormBuilder;\nexport function nest(key: string, builder: FormBuilder): (parent: FormBuilder) => FormBuilder;\nexport function nest(\n parentOrKey: FormBuilder | string,\n keyOrBuilder?: string | FormBuilder,\n builder?: FormBuilder,\n): FormBuilder | ((parent: FormBuilder) => FormBuilder) {\n if (parentOrKey instanceof FormBuilderImpl) {\n // Direct: nest(parent, key, builder)\n const parent = parentOrKey;\n const key = keyOrBuilder as string;\n return nestImpl(parent, key, builder!);\n } else {\n // Curried: nest(key, builder)\n const key = parentOrKey as string;\n const builder = keyOrBuilder as FormBuilder;\n return (parent: FormBuilder) => nestImpl(parent, key, builder);\n }\n}\n\n// Implementation helper\nconst optionImpl = <T>(\n builder: FormBuilder,\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder => {\n if (Option.isSome(value)) {\n return setImpl(builder, key, value.value, color);\n }\n return builder;\n};\n\n/**\n * Adds an optional value if it exists.\n */\nexport function option<T>(\n builder: FormBuilder,\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder;\nexport function option<T>(\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): (builder: FormBuilder) => FormBuilder;\nexport function option<T>(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | Option.Option<T>,\n valueOrColor?: Option.Option<T> | Ansi.Ansi | ((value: T) => Ansi.Ansi),\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: option(builder, key, value, color?)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n const value = valueOrColor as Option.Option<T>;\n return optionImpl(builder, key, value, color);\n } else {\n // Curried: option(key, value, color?)\n const key = builderOrKey as string;\n const value = keyOrValue as Option.Option<T>;\n const color = valueOrColor as Ansi.Ansi | ((value: T) => Ansi.Ansi) | undefined;\n return (builder: FormBuilder) => optionImpl(builder, key, value, color);\n }\n}\n\n// Implementation helper\nconst nestedOptionImpl = (builder: FormBuilder, key: string, value: Option.Option<FormBuilder>): FormBuilder => {\n if (Option.isSome(value)) {\n return nestImpl(builder, key, value.value);\n }\n return builder;\n};\n\n/**\n * Nests an optional form builder if it exists.\n */\nexport function nestedOption(builder: FormBuilder, key: string, value: Option.Option<FormBuilder>): FormBuilder;\nexport function nestedOption(key: string, value: Option.Option<FormBuilder>): (builder: FormBuilder) => FormBuilder;\nexport function nestedOption(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | Option.Option<FormBuilder>,\n value?: Option.Option<FormBuilder>,\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: nestedOption(builder, key, value)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n return nestedOptionImpl(builder, key, value!);\n } else {\n // Curried: nestedOption(key, value)\n const key = builderOrKey as string;\n const value = keyOrValue as Option.Option<FormBuilder>;\n return (builder: FormBuilder) => nestedOptionImpl(builder, key, value);\n }\n}\n\n// Implementation helper\nconst whenImpl = (builder: FormBuilder, condition: any, ...ops: ((b: FormBuilder) => FormBuilder)[]): FormBuilder => {\n if (condition) {\n for (const op of ops) {\n op(builder);\n }\n }\n return builder;\n};\n\n/**\n * Conditionally executes operations.\n */\nexport function when(builder: FormBuilder, condition: any, ...ops: ((b: FormBuilder) => FormBuilder)[]): FormBuilder;\nexport function when(\n condition: any,\n ...ops: ((b: FormBuilder) => FormBuilder)[]\n): (builder: FormBuilder) => FormBuilder;\nexport function when(\n builderOrCondition: FormBuilder | any,\n conditionOrOp?: any | ((b: FormBuilder) => FormBuilder),\n ...ops: ((b: FormBuilder) => FormBuilder)[]\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrCondition instanceof FormBuilderImpl) {\n // Direct: when(builder, condition, ...ops)\n const builder = builderOrCondition;\n const condition = conditionOrOp;\n return whenImpl(builder, condition, ...ops);\n } else {\n // Curried: when(condition, ...ops)\n const condition = builderOrCondition;\n const allOps = [conditionOrOp, ...ops].filter(\n (op): op is (b: FormBuilder) => FormBuilder => typeof op === 'function',\n );\n return (builder: FormBuilder) => whenImpl(builder, condition, ...allOps);\n }\n}\n\n// Implementation helper\nconst eachImpl = <T>(\n builder: FormBuilder,\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder => {\n items.forEach((item) => fn(item)(builder));\n return builder;\n};\n\n/**\n * Iterates over an array of items.\n */\nexport function each<T>(\n builder: FormBuilder,\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder;\nexport function each<T>(\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): (builder: FormBuilder) => FormBuilder;\nexport function each<T>(\n builderOrItems: FormBuilder | T[],\n itemsOrFn?: T[] | ((item: T) => (b: FormBuilder) => FormBuilder),\n fn?: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrItems instanceof FormBuilderImpl) {\n // Direct: each(builder, items, fn)\n const builder = builderOrItems;\n const items = itemsOrFn as T[];\n return eachImpl(builder, items, fn!);\n } else {\n // Curried: each(items, fn)\n const items = builderOrItems as T[];\n const fn = itemsOrFn as (item: T) => (b: FormBuilder) => FormBuilder;\n return (builder: FormBuilder) => eachImpl(builder, items, fn);\n }\n}\n\n/**\n * Builds the final document.\n */\nexport const build = (builder: FormBuilder): Doc.Doc<any> => {\n const { targetWidth } = calculateDimensions(builder.entries, builder.prefix);\n const entryLines: Doc.Doc<any>[] = [];\n\n builder.entries.forEach(({ key, value, isNested }) => {\n const keyLine = buildKeyLine(builder.prefix, key, targetWidth);\n if (isNested) {\n // Nested content should start on a new line.\n // value is already indented by nestImpl, so we just cat with hardLine.\n entryLines.push(Doc.hcat([keyLine, Doc.hardLine, value]));\n } else {\n // Single-line value, combine key and value.\n // If the value itself is multiline (e.g. from Doc.string with newlines, though Doc handles that specifically),\n // we might want layout flexibility.\n // For now, standard behavior:\n entryLines.push(Doc.hcat([keyLine, value]));\n }\n });\n\n const entriesDoc = Doc.vsep(entryLines);\n\n if (builder.title) {\n const titleDoc = Doc.hcat([Doc.annotate(Doc.text(builder.title), Ansi.combine(Ansi.bold, Ansi.cyan))]);\n // Join title and entries with a single line break, no extra spacing\n return Doc.cat(titleDoc, Doc.cat(Doc.line, entriesDoc));\n }\n\n return entriesDoc;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Options from '@effect/cli/Options';\n\nimport { Key } from '@dxos/echo';\n\n//\n// Common options.\n// NOTE: Sub-commands should Function.pipe(Options.optional) if required.\n//\n\nexport const Common = {\n functionId: Options.text('function-id').pipe(Options.withDescription('EDGE Function ID.')),\n spaceId: Options.text('space-id').pipe(Options.withSchema(Key.SpaceId), Options.withDescription('Space ID.')),\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport { spawn } from 'node:child_process';\n\n/**\n * Copy text to the system clipboard.\n * Supports macOS (pbcopy), Windows (clip), and Linux (xclip/xsel).\n */\nexport const copyToClipboard = (text: string): Effect.Effect<void, Error> =>\n Effect.tryPromise({\n try: () => {\n return new Promise<void>((resolve, reject) => {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'pbcopy';\n args = [];\n } else if (platform === 'win32') {\n command = 'clip';\n args = [];\n } else {\n // Linux - try xclip or xsel\n command = 'xclip';\n args = ['-selection', 'clipboard'];\n }\n\n const proc = spawn(command, args);\n proc.stdin?.write(text);\n proc.stdin?.end();\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n // Try xsel as fallback on Linux\n if (platform === 'linux') {\n const proc2 = spawn('xsel', ['--clipboard', '--input']);\n proc2.stdin?.write(text);\n proc2.stdin?.end();\n proc2.on('close', (code2) => {\n if (code2 === 0) {\n resolve();\n } else {\n reject(new Error('Failed to copy to clipboard'));\n }\n });\n proc2.on('error', reject);\n } else {\n reject(new Error('Failed to copy to clipboard'));\n }\n }\n });\n\n proc.on('error', reject);\n });\n },\n catch: (error) => new Error(`Failed to copy to clipboard: ${error}`),\n });\n\n/**\n * Open a URL in the system's default browser.\n * Supports macOS (open), Windows (start), and Linux (xdg-open).\n */\nexport const openBrowser = (url: string): Effect.Effect<void, Error> =>\n Effect.tryPromise({\n try: () => {\n return new Promise<void>((resolve, reject) => {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'open';\n args = [url];\n } else if (platform === 'win32') {\n command = 'start';\n args = [url];\n } else {\n command = 'xdg-open';\n args = [url];\n }\n\n const proc = spawn(command, args);\n proc.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error('Failed to open browser'));\n }\n });\n proc.on('error', reject);\n });\n },\n catch: (error) => new Error(`Failed to open browser: ${error}`),\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as AnsiDoc from '@effect/printer-ansi/AnsiDoc';\nimport * as Doc from '@effect/printer/Doc';\n\n/**\n * Pretty print document.\n */\nexport const print = (doc: Doc.Doc<any>) => AnsiDoc.render(doc, { style: 'pretty' });\n\n/**\n * Pretty prints a list of documents with ANSI colors.\n */\nexport const printList = (items: Array<Doc.Doc<any>>) =>\n AnsiDoc.render(Doc.vsep(items.map((item) => Doc.cat(item, Doc.hardLine))), { style: 'pretty' });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { ClientService } from '@dxos/client';\nimport { type Type } from '@dxos/echo';\n\n/** @deprecated Migrate to providing types via plugin capabilities. */\nexport const withTypes: (...types: Type.AnyEntity[]) => Effect.Effect<void, never, ClientService> = (...types) =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.addTypes(types));\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Option from 'effect/Option';\n\nimport { getPersonalSpace } from '@dxos/app-toolkit';\nimport { ClientService } from '@dxos/client';\nimport { type Space } from '@dxos/client/echo';\nimport { QueueService } from '@dxos/compute';\nimport { Database, type Key } from '@dxos/echo';\nimport { BaseError, type BaseErrorOptions } from '@dxos/errors';\nimport { log } from '@dxos/log';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { isBun } from '@dxos/util';\n\nexport const getSpace = (spaceId: Key.SpaceId): Effect.Effect<Space, SpaceNotFoundError, ClientService> =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n return yield* Option.fromNullable(client.spaces.get(spaceId));\n }).pipe(Effect.catchTag('NoSuchElementException', () => Effect.fail(new SpaceNotFoundError(spaceId))));\n\nexport const spaceIdWithDefault = (spaceId: Option.Option<Key.SpaceId>) =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n return Option.getOrElse(spaceId, () => {\n const personal = getPersonalSpace(client);\n if (!personal) {\n throw new Error('No space ID provided and no personal space found.');\n }\n return personal.id;\n });\n });\n\n// TODO(wittjosiah): Factor out.\nexport const spaceLayer = (\n spaceId$: Option.Option<Key.SpaceId>,\n fallbackToPersonalSpace = false,\n): Layer.Layer<Database.Service | QueueService, never, ClientService> => {\n const getSpace = Effect.fn(function* () {\n const client = yield* ClientService;\n\n // Resolution order when fallbackToPersonalSpace is true:\n // 1. the explicit spaceId arg (if provided);\n // 2. the space tagged `org.dxos.space.personal`;\n // 3. the first available space.\n // This keeps profiles created outside composer-app (which is what creates\n // the personal-space tag on identity creation) usable — the alternative\n // is a \"Space not found\" throw deep inside CredentialsService.\n const resolveSpace = () => {\n if (!fallbackToPersonalSpace) {\n return spaceId$.pipe(Option.flatMap((id) => Option.fromNullable(client.spaces.get(id))));\n }\n return spaceId$.pipe(\n Option.flatMap((id) => Option.fromNullable(client.spaces.get(id))),\n Option.orElse(() => Option.fromNullable(getPersonalSpace(client))),\n Option.orElse(() => Option.fromNullable(client.spaces.get()[0])),\n );\n };\n\n const space = resolveSpace().pipe(Option.getOrUndefined);\n\n if (space) {\n yield* Effect.promise(() => space.waitUntilReady());\n }\n return space;\n });\n\n // When no space can be resolved we install a stub whose `db` getter throws\n // on access — preserves the existing semantics for commands that *do* need\n // a db — but the release callback must NOT touch `db` or it will throw\n // during teardown (e.g. after a command emits a friendly error and\n // returns early). A shared sentinel object short-circuits the release.\n const NO_DB_STUB = {\n get db(): Database.Database {\n throw new Error('Space not found');\n },\n };\n const db = Layer.scoped(\n Database.Service,\n Effect.acquireRelease(\n Effect.gen(function* () {\n const space = yield* getSpace();\n if (!space) {\n return NO_DB_STUB;\n }\n return { db: space.db };\n }),\n (holder) => (holder === NO_DB_STUB ? Effect.void : Effect.promise(() => holder.db.flush())),\n ),\n );\n\n const queue = Layer.effect(\n QueueService,\n Effect.gen(function* () {\n const space = yield* getSpace();\n if (!space) {\n return {\n queues: {\n get: (_dxn) => {\n throw new Error('Queues not available');\n },\n create: () => {\n throw new Error('Queues not available');\n },\n },\n queue: undefined,\n };\n }\n return {\n queues: space.queues,\n queue: undefined,\n };\n }),\n );\n\n return Layer.merge(db, queue);\n};\n\n// TODO(dmaretskyi): There a race condition with edge connection not showing up.\nexport const waitForSync = Effect.fn(function* (space: Space) {\n // TODO(wittjosiah): Find a better way to do this.\n if (!isBun()) {\n // Skipping sync to edge when not in bun env as this indicates running a test.\n return;\n }\n\n // TODO(wittjosiah): This should probably be prompted for.\n if (space.internal.data.edgeReplication !== EdgeReplicationSetting.ENABLED) {\n yield* Console.log('Edge replication is disabled, enabling...');\n yield* Effect.promise(() => space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED));\n }\n\n yield* Effect.promise(() =>\n space.internal.syncToEdge({\n onProgress: (state) => log.info('syncing', { state: state ?? 'no connection to edge' }),\n }),\n );\n yield* Console.log('Sync complete');\n});\n\nexport const flushAndSync = Effect.fn(function* (opts?: Database.FlushOptions) {\n yield* Database.flush(opts);\n const spaceId = yield* Database.spaceId;\n const space = yield* getSpace(spaceId);\n yield* waitForSync(space);\n});\n\n// TODO(burdon): Reconcile with @dxos/protocols\nexport class SpaceNotFoundError extends BaseError.extend('SpaceNotFoundError', 'Space not found') {\n constructor(spaceId: string, options?: Omit<BaseErrorOptions, 'context'>) {\n super({ context: { spaceId }, ...options });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\n\nimport { type Space, SpaceState, type SpaceSyncState } from '@dxos/client/echo';\n\nimport * as FormBuilder from './form-builder';\n\nexport type FormatSpaceOptions = {\n verbose?: boolean;\n truncateKeys?: boolean;\n /**\n * If set, wait up to this many seconds for the space to reach\n * `SPACE_READY` before reading its fields. If unset, read whatever state\n * is available right now — much safer for `space list` etc., where a\n * single stuck space would otherwise hang the entire command.\n */\n waitSeconds?: number;\n};\n\nconst DEFAULT_OPTIONS: Required<FormatSpaceOptions> = {\n verbose: false,\n truncateKeys: false,\n waitSeconds: 0,\n};\n\n/**\n * Per-async-read internal timeout. Some `space.internal.*` getters do\n * filesystem / network IO and can themselves hang on a partially-loaded\n * space; cap each one so the command can never be held hostage by SDK\n * internals.\n */\nconst READ_TIMEOUT_SECONDS = 2;\n\nconst tryWithFallback = <T>(label: string, run: () => Promise<T>, fallback: T) =>\n Effect.tryPromise(run).pipe(\n Effect.timeoutFail({\n duration: Duration.seconds(READ_TIMEOUT_SECONDS),\n onTimeout: () => new Error(`${label} timed out`),\n }),\n Effect.catchAll(() => Effect.succeed(fallback)),\n );\n\nconst tryWithFallbackSync = <T>(read: () => T, fallback: T): T => {\n try {\n return read();\n } catch {\n return fallback;\n }\n};\n\n// TODO(wittjosiah): Use @effect/printer.\nexport const formatSpace = Effect.fn(function* (space: Space, options: FormatSpaceOptions = {}) {\n const { waitSeconds } = { ...DEFAULT_OPTIONS, ...options };\n\n // Opt-in wait. Defaults to NO wait so a single stuck space can't hang\n // an enumeration command (e.g. `dx space list`).\n if (waitSeconds > 0) {\n yield* Effect.tryPromise(() => space.waitUntilReady()).pipe(\n Effect.timeoutFail({\n duration: Duration.seconds(waitSeconds),\n onTimeout: () => new Error('waitUntilReady timed out'),\n }),\n Effect.catchAll(() => Effect.void),\n );\n }\n\n const state = tryWithFallbackSync(() => space.state.get(), SpaceState.SPACE_INITIALIZING);\n const ready = state === SpaceState.SPACE_READY;\n\n // TODO(burdon): Factor out.\n // TODO(burdon): Agent needs to restart before `ready` is available.\n const metrics = tryWithFallbackSync(\n () => space.internal.data.metrics,\n undefined as { open?: Date; ready?: Date } | undefined,\n );\n const startup = metrics?.open && metrics?.ready ? metrics.ready.getTime() - metrics.open.getTime() : undefined;\n\n // TODO(burdon): Get feeds from client-services if verbose (factor out from devtools/diagnostics).\n // const host = client.services.services.DevtoolsHost!;\n const pipeline = tryWithFallbackSync(() => space.internal.data.pipeline, undefined);\n const epoch = pipeline?.currentEpoch?.subject.assertion.number;\n\n // The sync-state read does IO; cap it so a stuck space can't hang the\n // command. Falls back to a \"no peers\" placeholder.\n const syncStateRaw = yield* tryWithFallback('getSyncState', () => space.internal.db.coreDatabase.getSyncState(), {\n peers: {},\n } as SpaceSyncState);\n const syncState = aggregateSyncState(syncStateRaw);\n\n const name = ready ? tryWithFallbackSync(() => space.properties.name, undefined) : 'loading...';\n const members = tryWithFallbackSync(() => space.members.get().length, 0);\n const objects = tryWithFallbackSync(() => space.internal.db.coreDatabase.getAllObjectIds().length, 0);\n const key = options.truncateKeys\n ? tryWithFallbackSync(() => space.key.truncate(), '')\n : tryWithFallbackSync(() => space.key.toHex(), '');\n\n return {\n id: space.id,\n state: SpaceState[state],\n name,\n\n members,\n objects,\n\n key,\n epoch,\n startup,\n automergeRoot: pipeline?.spaceRootUrl,\n // appliedEpoch,\n syncState: `${syncState.count} ${getSyncIndicator(syncState.up, syncState.down)} (${syncState.peers} peers)`,\n };\n});\n\nconst aggregateSyncState = (syncState: SpaceSyncState) => {\n const peers = Object.keys(syncState.peers ?? {}).length;\n const missingOnLocal = Math.max(...Object.values(syncState.peers ?? {}).map((peer) => peer.missingOnLocal), 0);\n const missingOnRemote = Math.max(...Object.values(syncState.peers ?? {}).map((peer) => peer.missingOnRemote), 0);\n const differentDocuments = Math.max(\n ...Object.values(syncState.peers ?? {}).map((peer) => peer.differentDocuments),\n 0,\n );\n\n return {\n count: missingOnLocal + missingOnRemote + differentDocuments,\n peers,\n up: missingOnRemote > 0 || differentDocuments > 0,\n down: missingOnLocal > 0 || differentDocuments > 0,\n };\n};\n\nconst getSyncIndicator = (up: boolean, down: boolean) => {\n if (up) {\n if (down) {\n return '⇅';\n } else {\n return '↑';\n }\n } else {\n if (down) {\n return '↓';\n } else {\n return '✓';\n }\n }\n};\n\nexport type FormattedSpace = {\n id: string;\n state: string;\n name: string | undefined;\n members: number;\n objects: number;\n key: string;\n epoch: any;\n startup: number | undefined;\n automergeRoot: string | undefined;\n syncState: string;\n};\n\n/**\n * Pretty prints a space with ANSI colors.\n */\nexport const printSpace = (spaceData: FormattedSpace) =>\n FormBuilder.make({ title: spaceData.name ?? spaceData.id }).pipe(\n FormBuilder.set('id', spaceData.id),\n FormBuilder.set('state', spaceData.state),\n FormBuilder.set('key', spaceData.key),\n FormBuilder.set('members', spaceData.members),\n FormBuilder.set('objects', spaceData.objects),\n FormBuilder.set('epoch', spaceData.epoch ?? '<none>'),\n FormBuilder.set('startup', spaceData.startup ? `${spaceData.startup}ms` : '<none>'),\n FormBuilder.set('syncState', spaceData.syncState),\n FormBuilder.set('automergeRoot', spaceData.automergeRoot ?? '<none>'),\n FormBuilder.build,\n );\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Cause from 'effect/Cause';\nimport * as Config from 'effect/Config';\nimport type * as ConfigError from 'effect/ConfigError';\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nexport const withTimeout: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n) => Effect.Effect<A, Cause.TimeoutException | ConfigError.ConfigError | E, R> = Effect.fnUntraced(function* (effect) {\n const timeout = yield* Config.integer('TIMEOUT').pipe(Config.option);\n const duration = timeout.pipe(\n Option.map(Duration.millis),\n Option.getOrElse(() => Duration.infinity),\n );\n return yield* effect.pipe(Effect.timeout(duration));\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Ansi", "Doc", "Option", "Pipeable", "FormBuilderImpl", "entries", "title", "prefix", "options", "pipe", "pipeArguments", "arguments", "make", "props", "calculateDimensions", "maxKeyLen", "Math", "max", "map", "entry", "key", "length", "targetWidth", "buildKeyLine", "annotate", "fill", "text", "blackBright", "setImpl", "builder", "value", "color", "undefined", "valueDoc", "String", "ansi", "push", "isNested", "set", "builderOrKey", "keyOrValue", "valueOrColor", "nestImpl", "parent", "nestedBuilder", "build", "indent", "nest", "parentOrKey", "keyOrBuilder", "optionImpl", "isSome", "option", "nestedOptionImpl", "nestedOption", "whenImpl", "condition", "ops", "op", "when", "builderOrCondition", "conditionOrOp", "allOps", "filter", "eachImpl", "items", "fn", "forEach", "item", "each", "builderOrItems", "itemsOrFn", "entryLines", "keyLine", "hcat", "hardLine", "entriesDoc", "vsep", "titleDoc", "combine", "bold", "cyan", "cat", "line", "Options", "Key", "Common", "functionId", "text", "pipe", "withDescription", "spaceId", "withSchema", "SpaceId", "Effect", "spawn", "copyToClipboard", "text", "tryPromise", "try", "Promise", "resolve", "reject", "platform", "process", "command", "args", "proc", "stdin", "write", "end", "on", "code", "proc2", "code2", "Error", "catch", "error", "openBrowser", "url", "AnsiDoc", "Doc", "print", "doc", "render", "style", "printList", "items", "vsep", "map", "item", "cat", "hardLine", "Effect", "ClientService", "withTypes", "types", "gen", "client", "promise", "addTypes", "Console", "Effect", "Layer", "Option", "getPersonalSpace", "ClientService", "QueueService", "Database", "BaseError", "log", "EdgeReplicationSetting", "isBun", "getSpace", "client", "get", "pipe", "catchTag", "spaceIdWithDefault", "spaceId", "personal", "Error", "spaceId$", "flatMap", "id", "fromNullable", "spaces", "space", "resolveSpace", "getOrUndefined", "waitUntilReady", "NO_DB_STUB", "holder", "queues", "create", "queue", "promise", "setEdgeReplicationPreference", "internal", "syncToEdge", "state", "flushAndSync", "waitForSync", "context", "options", "Duration", "Effect", "SpaceState", "DEFAULT_OPTIONS", "verbose", "truncateKeys", "waitSeconds", "READ_TIMEOUT_SECONDS", "tryWithFallback", "label", "run", "fallback", "tryPromise", "pipe", "timeoutFail", "duration", "seconds", "onTimeout", "Error", "catchAll", "succeed", "tryWithFallbackSync", "read", "formatSpace", "fn", "space", "options", "waitUntilReady", "void", "state", "get", "SpaceState", "SPACE_INITIALIZING", "ready", "SPACE_READY", "metrics", "internal", "data", "undefined", "startup", "open", "getTime", "pipeline", "epoch", "currentEpoch", "subject", "assertion", "number", "syncStateRaw", "db", "coreDatabase", "getSyncState", "peers", "syncState", "aggregateSyncState", "name", "properties", "members", "length", "objects", "getAllObjectIds", "key", "truncate", "toHex", "id", "automergeRoot", "spaceRootUrl", "count", "getSyncIndicator", "up", "down", "Object", "keys", "missingOnLocal", "Math", "max", "values", "map", "peer", "missingOnRemote", "differentDocuments", "printSpace", "spaceData", "make", "title", "set", "build", "Config", "Duration", "Effect", "Option", "withTimeout", "fnUntraced", "effect", "timeout", "integer", "pipe", "option", "duration", "map", "millis", "getOrElse", "infinity"]
7
7
  }