lody 0.106.0 → 0.107.0-nightly.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -54,6 +54,19 @@ the one-time launcher correction and restart are needed for that deployment.
54
54
  Older releases without versioned readiness cannot be verified by the new remote
55
55
  handoff and must be started explicitly if a rollback is required.
56
56
 
57
+ The launcher waits up to three minutes for the new Worker to become ready.
58
+ Releases before this change waited 30 seconds, and the old watchdog applies
59
+ its own limit during the handoff. So on a machine where cold start exceeds
60
+ 30 seconds, remote upgrades from those releases keep falling back to the old
61
+ version. They also fail `daemon start`. Install the fixed release globally,
62
+ then run `daemon stop` and `daemon start` with its launcher (steps 2 and 4
63
+ above). Later remote upgrades use the longer limit.
64
+
65
+ ## Structured Session output
66
+
67
+ Session commands with `--json` or `--jsonl` reserve stdout for structured results.
68
+ Diagnostic logs, including workspace transport cleanup, go to stderr.
69
+
57
70
  ## Workspace discovery
58
71
 
59
72
  The cloud workspace CLI and Lody MCP share resource queries. Lists return 20 entries
@@ -1,4 +1,4 @@
1
- import { s as startProcessLegacy, b as runPromise, c as raceAll, p as promise, d as sleep, t as terminateChildTreeLegacy, e as provide, f as runCommand, g as processLayer } from "./chunks/process-DZ2dHvHL.js";
1
+ import { s as startProcessLegacy, b as runPromise, c as raceAll, p as promise, d as sleep, t as terminateChildTreeLegacy, e as provide, f as runCommand, g as processLayer } from "./chunks/process-Dymi_SYz.js";
2
2
  import { createServer } from "node:net";
3
3
  import { setTimeout as setTimeout$1 } from "node:timers/promises";
4
4
  import { mkdtemp, writeFile, rm } from "node:fs/promises";
@@ -1,4 +1,4 @@
1
- import { h as tracerLogger$1, i as effect, w as withFiber, j as fnUntraced, k as isEffect, C as CurrentLoggers$1, l as loggerMake, m as getAugmentedNamespace, n as commonjsGlobal, o as getDefaultExportFromCjs, q as merge, u as CurrentLogAnnotations, v as succeed, M as MinimumLogLevel, g as processLayer, x as nodeProcessLive, s as startProcessLegacy } from "./process-DZ2dHvHL.js";
1
+ import { h as tracerLogger$1, i as effect, w as withFiber, j as fnUntraced, k as isEffect, C as CurrentLoggers$1, l as loggerMake, m as getAugmentedNamespace, n as commonjsGlobal, o as getDefaultExportFromCjs, q as merge, u as CurrentLogAnnotations, v as succeed, M as MinimumLogLevel, g as processLayer, x as nodeProcessLive, s as startProcessLegacy } from "./process-Dymi_SYz.js";
2
2
  import { EventEmitter } from "node:events";
3
3
  import require$$0$1 from "util";
4
4
  import os__default$1 from "os";
@@ -16176,6 +16176,14 @@ const readStructuredErrorDetail = (error) => {
16176
16176
  const rawMessage = data.message;
16177
16177
  return typeof rawMessage === "string" && rawMessage.length > 0 ? rawMessage : void 0;
16178
16178
  };
16179
+ const describeMessagelessError = (error, seen) => {
16180
+ const tag = error._tag;
16181
+ const label2 = typeof tag === "string" && tag.length > 0 ? tag : error.name || "Error";
16182
+ const cause = error.cause;
16183
+ if (cause === void 0 || cause === null || seen.has(cause)) return label2;
16184
+ const detail = cause instanceof Error ? cause.message ? formatErrorMessage(cause) : describeMessagelessError(cause, /* @__PURE__ */ new Set([...seen, cause])) : typeof cause === "string" ? cause : "";
16185
+ return detail ? `${label2}: ${detail}` : label2;
16186
+ };
16179
16187
  const formatErrorMessage = (error, options = {}) => {
16180
16188
  const syncError = formatLoroSyncError(error);
16181
16189
  if (syncError) return syncError;
@@ -16196,6 +16204,7 @@ const formatErrorMessage = (error, options = {}) => {
16196
16204
  breakLength: 120
16197
16205
  });
16198
16206
  };
16207
+ const formatReportedError = (error) => error instanceof Error && !error.message && !readStructuredErrorDetail(error) ? describeMessagelessError(error, /* @__PURE__ */ new Set([error])) : formatErrorMessage(error);
16199
16208
  const formatErrorWithCausesInternal = (error, seen) => {
16200
16209
  const syncError = formatLoroSyncError(error);
16201
16210
  if (syncError) return syncError;
@@ -17028,10 +17037,11 @@ export {
17028
17037
  resolvePlatformKind as r,
17029
17038
  startCloudflaredNative as s,
17030
17039
  toShared as t,
17031
- routeLoggerToStderr as u,
17032
- createHybridLogger as v,
17040
+ formatReportedError as u,
17041
+ routeLoggerToStderr as v,
17033
17042
  withSpawn as w,
17034
- readLatestLogTail as x,
17035
- createFileLogger as y
17043
+ createHybridLogger as x,
17044
+ readLatestLogTail as y,
17045
+ createFileLogger as z
17036
17046
  };
17037
- //# sourceMappingURL=cloudflared-native-CJVH1-0P.js.map
17047
+ //# sourceMappingURL=cloudflared-native-CDyzjgJ1.js.map
@@ -1,10 +1,10 @@
1
- import { $ as getSessionCommandEnvironment, a0 as getSessionRoomId, a1 as isLoroRepoDocDeleted, a2 as runWithMcpSessionContext, a3 as SessionToolResultSchema, a4 as buildSessionToolServer } from "../index.js";
1
+ import { $ as getDaemonWorkspace, a0 as getSessionCommandEnvironment, a1 as getSessionRoomId, a2 as isLoroRepoDocDeleted, a3 as runWithMcpSessionContext, a4 as SessionToolResultSchema, a5 as buildSessionToolServer } from "../index.js";
2
2
  import "path";
3
3
  import "node:fs";
4
4
  import "node:readline";
5
5
  import "node:async_hooks";
6
- import "./cloudflared-native-CJVH1-0P.js";
7
- import "./process-DZ2dHvHL.js";
6
+ import "./cloudflared-native-CDyzjgJ1.js";
7
+ import "./process-Dymi_SYz.js";
8
8
  import "node:child_process";
9
9
  import "node:path";
10
10
  import "node:url";
@@ -31,7 +31,7 @@ import "./schemas-Bue2bhN8.js";
31
31
  import "node:process";
32
32
  import "./loro_wasm_bg-MVC5eAwd.js";
33
33
  import "./plan-mode-D0D5cnMs.js";
34
- import "./profile-CVWo_jm0.js";
34
+ import "./profile-WAvt7jC4.js";
35
35
  import "./ios-simulator-B6mhaluY.js";
36
36
  import "./subagent-events-DzPEi0iV.js";
37
37
  import "node:diagnostics_channel";
@@ -55,8 +55,8 @@ import "node:crypto";
55
55
  import "fs/promises";
56
56
  import "./workspace-watch-path-policy-BRzhvEkG.js";
57
57
  import "node:string_decoder";
58
- import "./directory-handle-DssOMLsI.js";
59
- import "./diff-line-counts-D6bAVmNB.js";
58
+ import "./directory-handle-DYiJCDuJ.js";
59
+ import "./diff-line-counts-Bt9_c57t.js";
60
60
  import "perf_hooks";
61
61
  import "better-sqlite3";
62
62
  import "module";
@@ -68,7 +68,7 @@ import "dgram";
68
68
  import "timers/promises";
69
69
  import "node:timers/promises";
70
70
  import "@loro-dev/roost-node";
71
- import "./diff-worker-task-rnxgvZHM.js";
71
+ import "./diff-worker-task-C8KSztUV.js";
72
72
  import "node:module";
73
73
  import "node:v8";
74
74
  import "http2";
@@ -81,14 +81,16 @@ const getHandlers = () => {
81
81
  return handlers;
82
82
  };
83
83
  async function executeDaemonSessionTool(context, name, args) {
84
- const environment = getSessionCommandEnvironment();
85
- if (!environment || context.machineId !== environment.auth.machineId || context.workspaceId !== environment.workspace.id)
84
+ const daemon = getDaemonWorkspace();
85
+ if (!daemon || context.machineId !== daemon.machineId || context.workspaceId !== daemon.workspaceId)
86
86
  throw new Error("Session tool scope mismatch");
87
- const invocation = environment.host.readInvocation(context.sessionId);
88
- if (!invocation.active || invocation.requesterUserId !== environment.auth.userId)
89
- throw new Error("Session tool requires an active local user Turn");
90
- const row = await environment.manager.repo.getDocMeta(getSessionRoomId(context.sessionId));
91
- if (!row?.meta || isLoroRepoDocDeleted(row) || row.meta.machineId !== environment.auth.machineId)
87
+ const invocation = daemon.readInvocation(context.sessionId);
88
+ if (getSessionCommandEnvironment()) {
89
+ if (!invocation.active || invocation.requesterUserId !== daemon.userId)
90
+ throw new Error("Session tool requires an active local user Turn");
91
+ } else if (!invocation.active) throw new Error("Session tool requires an active Turn");
92
+ const row = await daemon.manager.repo.getDocMeta(getSessionRoomId(context.sessionId));
93
+ if (!row?.meta || isLoroRepoDocDeleted(row) || row.meta.machineId !== daemon.machineId)
92
94
  throw new Error("Requester Session does not belong to this machine");
93
95
  const handler = getHandlers().get(name);
94
96
  if (!handler) throw new Error(`Unsupported daemon Session tool: ${name}`);
@@ -98,4 +100,4 @@ async function executeDaemonSessionTool(context, name, args) {
98
100
  export {
99
101
  executeDaemonSessionTool
100
102
  };
101
- //# sourceMappingURL=daemon-session-tools-Bgq2Cj2S.js.map
103
+ //# sourceMappingURL=daemon-session-tools-1fSa36oh.js.map
@@ -1,7 +1,7 @@
1
1
  import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
2
2
  import os__default from "node:os";
3
3
  import path__default from "node:path";
4
- import { a as runCommandTextSyncLegacy } from "./process-DZ2dHvHL.js";
4
+ import { a as runCommandTextSyncLegacy } from "./process-Dymi_SYz.js";
5
5
  function Diff() {
6
6
  }
7
7
  Diff.prototype = {
@@ -682,4 +682,4 @@ export {
682
682
  countTextLines as a,
683
683
  computeLineCounts as c
684
684
  };
685
- //# sourceMappingURL=diff-line-counts-D6bAVmNB.js.map
685
+ //# sourceMappingURL=diff-line-counts-Bt9_c57t.js.map
@@ -1,6 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { open, stat } from "node:fs/promises";
3
- import { c as computeLineCounts } from "./diff-line-counts-D6bAVmNB.js";
3
+ import { c as computeLineCounts } from "./diff-line-counts-Bt9_c57t.js";
4
4
  async function runDiffWorkerTask(input) {
5
5
  const lineCounts = computeLineCounts(input.oldText, input.newText);
6
6
  if (input.kind === "line-count") return { kind: input.kind, lineCounts };
@@ -58,4 +58,4 @@ function nodeErrorCode(error) {
58
58
  export {
59
59
  runDiffWorkerTask as r
60
60
  };
61
- //# sourceMappingURL=diff-worker-task-rnxgvZHM.js.map
61
+ //# sourceMappingURL=diff-worker-task-C8KSztUV.js.map
@@ -1,8 +1,8 @@
1
1
  import { o as object, s as string, l as literal, b as boolean, _ as _enum, u as union, n as number, d as discriminatedUnion, a as array, r as record, t as tuple, c as unknown } from "./schemas-Bue2bhN8.js";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import path__default from "node:path";
4
- import { r as runCommandTextLegacy } from "./process-DZ2dHvHL.js";
5
- import { a as countTextLines } from "./diff-line-counts-D6bAVmNB.js";
4
+ import { r as runCommandTextLegacy } from "./process-Dymi_SYz.js";
5
+ import { a as countTextLines } from "./diff-line-counts-Bt9_c57t.js";
6
6
  _enum(["host", "write", "read"]);
7
7
  _enum([
8
8
  "not-started",
@@ -1178,4 +1178,4 @@ export {
1178
1178
  CodeCollabV2RpcContentEnvelopeSchema as y,
1179
1179
  deriveCodeCollabV2ContentKeyId as z
1180
1180
  };
1181
- //# sourceMappingURL=directory-handle-DssOMLsI.js.map
1181
+ //# sourceMappingURL=directory-handle-DYiJCDuJ.js.map