@moxt-ai/mobius 0.0.316 → 0.0.318

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 (47) hide show
  1. package/dist/agent/discovery/agent-discovery-context.d.ts +2 -0
  2. package/dist/agent/discovery/agent-discovery-context.d.ts.map +1 -1
  3. package/dist/agent/specification/vendors/pi-agent.d.ts.map +1 -1
  4. package/dist/agent/specification/vendors/pi-agent.js +1 -2
  5. package/dist/agent/specification/vendors/pi-agent.js.map +1 -1
  6. package/dist/cli/handler/agents/index.d.ts.map +1 -1
  7. package/dist/cli/handler/agents/index.js +2 -1
  8. package/dist/cli/handler/agents/index.js.map +1 -1
  9. package/dist/cli.js +82 -40
  10. package/dist/cli.js.map +4 -4
  11. package/dist/daemon/pairing/pair-local-machine.d.ts.map +1 -1
  12. package/dist/daemon/pairing/pair-local-machine.js +5 -1
  13. package/dist/daemon/pairing/pair-local-machine.js.map +1 -1
  14. package/dist/daemon/upgrades/data.d.ts.map +1 -1
  15. package/dist/daemon/upgrades/data.js +4 -1
  16. package/dist/daemon/upgrades/data.js.map +1 -1
  17. package/dist/runtime/config.d.ts +7 -1
  18. package/dist/runtime/config.d.ts.map +1 -1
  19. package/dist/runtime/config.js +9 -3
  20. package/dist/runtime/config.js.map +1 -1
  21. package/dist/runtime/engine.d.ts.map +1 -1
  22. package/dist/runtime/engine.js +2 -1
  23. package/dist/runtime/engine.js.map +1 -1
  24. package/dist/runtime.js +42 -27
  25. package/dist/runtime.js.map +4 -4
  26. package/dist/session/turn/session-turns.d.ts +7 -0
  27. package/dist/session/turn/session-turns.d.ts.map +1 -1
  28. package/dist/session/turn/session-turns.js +1 -0
  29. package/dist/session/turn/session-turns.js.map +1 -1
  30. package/dist/storage/daemon/release-files.d.ts.map +1 -1
  31. package/dist/storage/daemon/release-files.js +2 -1
  32. package/dist/storage/daemon/release-files.js.map +1 -1
  33. package/dist/storage/daemon/version-data.d.ts +5 -2
  34. package/dist/storage/daemon/version-data.d.ts.map +1 -1
  35. package/dist/storage/daemon/version-data.js +30 -7
  36. package/dist/storage/daemon/version-data.js.map +1 -1
  37. package/dist/storage/installation/installation-files.d.ts.map +1 -1
  38. package/dist/storage/installation/installation-files.js +2 -1
  39. package/dist/storage/installation/installation-files.js.map +1 -1
  40. package/dist/storage/state-root-layout.d.ts +16 -0
  41. package/dist/storage/state-root-layout.d.ts.map +1 -0
  42. package/dist/storage/state-root-layout.js +16 -0
  43. package/dist/storage/state-root-layout.js.map +1 -0
  44. package/dist/storage/state-root.d.ts.map +1 -1
  45. package/dist/storage/state-root.js +5 -3
  46. package/dist/storage/state-root.js.map +1 -1
  47. package/package.json +2 -2
@@ -1,5 +1,7 @@
1
1
  export interface LocalAgentDiscoveryContext {
2
2
  readonly architecture?: NodeJS.Architecture;
3
+ /** The Runtime's local data directory, where Agents that Mobius configures keep their Mobius-owned state. */
4
+ readonly dataDirectory: string;
3
5
  readonly defaultWorkspace: string;
4
6
  readonly environment: Readonly<NodeJS.ProcessEnv>;
5
7
  readonly platform?: NodeJS.Platform;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-discovery-context.d.ts","sourceRoot":"","sources":["../../../src/agent/discovery/agent-discovery-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAChC"}
1
+ {"version":3,"file":"agent-discovery-context.d.ts","sourceRoot":"","sources":["../../../src/agent/discovery/agent-discovery-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC;IAC5C,6GAA6G;IAC7G,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAChC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pi-agent.d.ts","sourceRoot":"","sources":["../../../../src/agent/specification/vendors/pi-agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAE1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAG7F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAE7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAI3E,qBAAa,oBAAqB,SAAQ,8BAA8B;IACpE,SAAkB,2BAA2B,SAAkC;IAC/E,QAAQ,CAAC,eAAe,QAAQ;IAChC,QAAQ,CAAC,cAAc,EAAE,2BAA2B,CAA2C;IAG/F,SAAkB,uBAAuB,WAC7B,kBAAkB,WACjB,0BAA0B,KACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAgB1C;IACF,QAAQ,CAAC,EAAE,QAAQ;IACnB,QAAQ,CAAC,KAAK,QAAQ;IACtB,SAAkB,4BAA4B,YAAY;IAC1D,SAAkB,yBAAyB,WAAW;IACtD,SAAkB,qBAAqB,QAAO,MAAM,CAAS;IAC7D,cAEC;IAED,SAAkB,SAAS,eACX,gBAAgB,eACf,kBAAkB,oBACb,MAAM,UAChB,WAAW,KACpB,OAAO,CAAC,IAAI,CAAC,CA4Bd;CACL"}
1
+ {"version":3,"file":"pi-agent.d.ts","sourceRoot":"","sources":["../../../../src/agent/specification/vendors/pi-agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAE1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAE7F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAE7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAI3E,qBAAa,oBAAqB,SAAQ,8BAA8B;IACpE,SAAkB,2BAA2B,SAAkC;IAC/E,QAAQ,CAAC,eAAe,QAAQ;IAChC,QAAQ,CAAC,cAAc,EAAE,2BAA2B,CAA2C;IAG/F,SAAkB,uBAAuB,WAC7B,kBAAkB,WACjB,0BAA0B,KACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAU1C;IACF,QAAQ,CAAC,EAAE,QAAQ;IACnB,QAAQ,CAAC,KAAK,QAAQ;IACtB,SAAkB,4BAA4B,YAAY;IAC1D,SAAkB,yBAAyB,WAAW;IACtD,SAAkB,qBAAqB,QAAO,MAAM,CAAS;IAC7D,cAEC;IAED,SAAkB,SAAS,eACX,gBAAgB,eACf,kBAAkB,oBACb,MAAM,UAChB,WAAW,KACpB,OAAO,CAAC,IAAI,CAAC,CA4Bd;CACL"}
@@ -2,7 +2,6 @@ import { createHash } from "node:crypto";
2
2
  import { join } from "node:path";
3
3
  import { methods, } from "@agentclientprotocol/sdk";
4
4
  import { PiAcpEndpoint } from "../../../acp/harness/pi/endpoint.js";
5
- import { readStateDirectory } from "../../../storage/state-directory.js";
6
5
  import { AgentProbeError } from "../../discovery/agent-probe-error.js";
7
6
  import { InProcessAcpAgentSpecification } from "../agent-specification.js";
8
7
  const ACP_PROBE_TIMEOUT_MILLISECONDS = 30_000;
@@ -17,7 +16,7 @@ export class PiAgentSpecification extends InProcessAcpAgentSpecification {
17
16
  // workspaces therefore exceed filesystem name limits before Mobius can run a readiness turn.
18
17
  // Keep persistence, but derive a bounded, stable directory from the resolved workspace.
19
18
  const workspaceHash = createHash("sha256").update(context.defaultWorkspace).digest("hex").slice(0, 24);
20
- const sessionDirectory = join(readStateDirectory(context.environment), "agents", "pi", "sessions", workspaceHash);
19
+ const sessionDirectory = join(context.dataDirectory, "agents", "pi", "sessions", workspaceHash);
21
20
  return Object.freeze({
22
21
  PI_ACP_ENABLE_EMBEDDED_CONTEXT: "true",
23
22
  MOBIUS_PI_SESSION_DIR: sessionDirectory,
@@ -1 +1 @@
1
- {"version":3,"file":"pi-agent.js","sourceRoot":"","sources":["../../../../src/agent/specification/vendors/pi-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAIH,OAAO,GACV,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAE3E,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAE9C,MAAM,OAAO,oBAAqB,SAAQ,8BAA8B;IAClD,2BAA2B,GAAG,8BAA8B,CAAC;IACtE,eAAe,GAAG,IAAI,CAAC;IACvB,cAAc,GAAgC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/F,qFAAqF;IACrF,+EAA+E;IAC7D,uBAAuB,GAAG,KAAK,EAC7C,MAA0B,EAC1B,OAAmC,EACM,EAAE;QAC3C,yFAAyF;QACzF,6FAA6F;QAC7F,wFAAwF;QACxF,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvG,MAAM,gBAAgB,GAAG,IAAI,CACzB,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,EACvC,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,aAAa,CAChB,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,8BAA8B,EAAE,MAAM;YACtC,qBAAqB,EAAE,gBAAgB;SAC1C,CAAC,CAAC;IACP,CAAC,CAAC;IACO,EAAE,GAAG,IAAI,CAAC;IACV,KAAK,GAAG,IAAI,CAAC;IACJ,4BAA4B,GAAG,QAAQ,CAAC;IACxC,yBAAyB,GAAG,OAAO,CAAC;IACpC,qBAAqB,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC;IAC7D;QACI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC5B,CAAC;IAEiB,SAAS,GAAG,KAAK,EAC/B,UAA4B,EAC5B,WAA+B,EAC/B,gBAAwB,EACxB,MAAmB,EACN,EAAE;QACf,MAAM,YAAY,GAAsB,WAAW,CAAC,iBAAiB,IAAI,EAAE,CAAC;QAC5E,IAAI,YAAY,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,kDAAkD,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,CAC1C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EACzB;YACI,qBAAqB,EAAE,EAAE;YACzB,GAAG,EAAE,gBAAgB;YACrB,UAAU,EAAE,EAAE;SACjB,EACD,EAAE,kBAAkB,EAAE,MAAM,EAAE,CACjC,CAAC;QACF,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,4CAA4C,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,CACzC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAC5B;YACI,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC5C,SAAS,EAAE,OAAO,CAAC,SAAS;SAC/B,EACD,EAAE,kBAAkB,EAAE,MAAM,EAAE,CACjC,CAAC;QACF,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,wDAAwD,CAAC,CAAC;QAC5G,CAAC;IACL,CAAC,CAAC;CACL"}
1
+ {"version":3,"file":"pi-agent.js","sourceRoot":"","sources":["../../../../src/agent/specification/vendors/pi-agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/handler/agents/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAUnD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CA4BjF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/handler/agents/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAUnD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CA6BjF"}
@@ -15,10 +15,11 @@ export function registerAgentsHandler(program, context) {
15
15
  .action(async (options) => {
16
16
  const installation = await openMobiusCliInstallation(context.shutdownSignal, process.env);
17
17
  const localContext = new RuntimeLocalContext(installation.stateDirectory, process.env);
18
- const defaultWorkspace = loadDefaultWorkspace(localContext.environment);
18
+ const defaultWorkspace = loadDefaultWorkspace(localContext.stateDirectory, localContext.environment);
19
19
  await ensurePrivateDirectory(defaultWorkspace);
20
20
  const inventory = await discoverLocalAgentInventory({
21
21
  defaultWorkspace,
22
+ dataDirectory: localContext.stateDirectory,
22
23
  environment: localContext.environment,
23
24
  signal: context.shutdownSignal,
24
25
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/handler/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQ7F,MAAM,UAAU,qBAAqB,CAAC,OAAgB,EAAE,OAAmB;IACvE,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,SAAS,CAAC,WAAW,CAAC,oCAAoC,EAAE,8CAA8C,CAAC,CAAC;SAC5G,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACpC,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1F,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACvF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC;YAChD,gBAAgB;YAChB,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,MAAM,EAAE,OAAO,CAAC,cAAc;SACjC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,qBAAqB,CACvB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAC3B,SAAS,EACT,OAAO,CAAC,OAAO,KAAK,IAAI,EACxB,OAAO,CAAC,cAAc,CACzB,CAAC;YACF,OAAO;QACX,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/handler/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQ7F,MAAM,UAAU,qBAAqB,CAAC,OAAgB,EAAE,OAAmB;IACvE,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,SAAS,CAAC,WAAW,CAAC,oCAAoC,EAAE,8CAA8C,CAAC,CAAC;SAC5G,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACpC,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1F,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACvF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,YAAY,CAAC,cAAc,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;QACrG,MAAM,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC;YAChD,gBAAgB;YAChB,aAAa,EAAE,YAAY,CAAC,cAAc;YAC1C,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,MAAM,EAAE,OAAO,CAAC,cAAc;SACjC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,qBAAqB,CACvB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAC3B,SAAS,EACT,OAAO,CAAC,OAAO,KAAK,IAAI,EACxB,OAAO,CAAC,cAAc,CACzB,CAAC;YACF,OAAO;QACX,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;AACX,CAAC"}
package/dist/cli.js CHANGED
@@ -2086,7 +2086,7 @@ var init_package = __esm({
2086
2086
  "package.json"() {
2087
2087
  package_default = {
2088
2088
  name: "@moxt-ai/mobius",
2089
- version: "0.0.316",
2089
+ version: "0.0.318",
2090
2090
  description: "Mobius CLI for pairing and running local AI agent services.",
2091
2091
  type: "module",
2092
2092
  bin: {
@@ -5615,12 +5615,31 @@ var init_node_error = __esm({
5615
5615
  }
5616
5616
  });
5617
5617
 
5618
+ // src/storage/state-root-layout.ts
5619
+ var STATE_ROOT_LAYOUT, STATE_ROOT_ENTRY_NAMES;
5620
+ var init_state_root_layout = __esm({
5621
+ "src/storage/state-root-layout.ts"() {
5622
+ "use strict";
5623
+ STATE_ROOT_LAYOUT = Object.freeze({
5624
+ /** Names the version whose data is current. */
5625
+ currentData: "current-data.txt",
5626
+ /** Applications' installations: `installations/<application>/<installation>`. */
5627
+ installations: "installations",
5628
+ /** Managed CLI releases: `npm/<version>`. */
5629
+ releases: "npm",
5630
+ /** Each CLI version's data: `versions/<version>`. */
5631
+ versions: "versions"
5632
+ });
5633
+ STATE_ROOT_ENTRY_NAMES = new Set(Object.values(STATE_ROOT_LAYOUT));
5634
+ }
5635
+ });
5636
+
5618
5637
  // src/storage/installation/installation-files.ts
5619
5638
  import { createHash, randomUUID } from "node:crypto";
5620
5639
  import { mkdir, open, readdir, rename, unlink, writeFile } from "node:fs/promises";
5621
5640
  import { dirname, join } from "node:path";
5622
5641
  function applicationDirectory(root, applicationId) {
5623
- return join(root, "installations", applicationId);
5642
+ return join(root, STATE_ROOT_LAYOUT.installations, applicationId);
5624
5643
  }
5625
5644
  function installationPointerPath(applicationDirectory2) {
5626
5645
  return join(applicationDirectory2, "current.json");
@@ -5683,6 +5702,7 @@ var init_installation_files = __esm({
5683
5702
  "src/storage/installation/installation-files.ts"() {
5684
5703
  "use strict";
5685
5704
  init_node_error();
5705
+ init_state_root_layout();
5686
5706
  MAXIMUM_FILE_BYTES = 16 * 1024;
5687
5707
  }
5688
5708
  });
@@ -5715,7 +5735,7 @@ async function exists(path8) {
5715
5735
  async function owningRoot(directory) {
5716
5736
  const application = dirname2(directory);
5717
5737
  const installations = dirname2(application);
5718
- if (basename(installations) !== "installations") {
5738
+ if (basename(installations) !== STATE_ROOT_LAYOUT.installations) {
5719
5739
  return null;
5720
5740
  }
5721
5741
  let pointer;
@@ -5728,11 +5748,11 @@ async function owningRoot(directory) {
5728
5748
  return null;
5729
5749
  }
5730
5750
  const container = dirname2(installations);
5731
- return basename(dirname2(container)) === "versions" ? dirname2(dirname2(container)) : container;
5751
+ return basename(dirname2(container)) === STATE_ROOT_LAYOUT.versions ? dirname2(dirname2(container)) : container;
5732
5752
  }
5733
5753
  async function validateStateRoot(environment) {
5734
5754
  const directory = readStateDirectory(environment);
5735
- if (await exists(join3(directory, "current-data.txt")) || await exists(join3(directory, "versions"))) {
5755
+ if (await exists(join3(directory, STATE_ROOT_LAYOUT.currentData)) || await exists(join3(directory, STATE_ROOT_LAYOUT.versions))) {
5736
5756
  return;
5737
5757
  }
5738
5758
  const root = await owningRoot(directory);
@@ -5746,6 +5766,7 @@ var init_state_root = __esm({
5746
5766
  "use strict";
5747
5767
  init_installation_files();
5748
5768
  init_state_directory();
5769
+ init_state_root_layout();
5749
5770
  StateRootError = class extends Error {
5750
5771
  code = "state_root_is_installation_data";
5751
5772
  owningRoot;
@@ -42773,8 +42794,8 @@ function inputPath(context, key) {
42773
42794
  return plainString(context.input[key]);
42774
42795
  }
42775
42796
  function isInside(directory, candidate) {
42776
- const relative6 = path2.relative(path2.resolve(directory), path2.resolve(candidate));
42777
- return relative6 === "" || !relative6.startsWith(`..${path2.sep}`) && relative6 !== "..";
42797
+ const relative7 = path2.relative(path2.resolve(directory), path2.resolve(candidate));
42798
+ return relative7 === "" || !relative7.startsWith(`..${path2.sep}`) && relative7 !== "..";
42778
42799
  }
42779
42800
  function hasSessionAllowRuleFor(changeSet, toolName) {
42780
42801
  return !!changeSet?.updates.some((update) => update.type === "addRules" && update.destination === "session" && update.behavior === "allow" && update.rules.some((rule) => rule.toolName === toolName));
@@ -74694,7 +74715,9 @@ var init_native = __esm({
74694
74715
  external_exports.object({
74695
74716
  commandId: identifierStringSchema,
74696
74717
  prompt: external_exports.string().max(1e5),
74697
- images: external_exports.array(promptImageSchema).max(8).readonly()
74718
+ images: external_exports.array(promptImageSchema).max(8).readonly(),
74719
+ // Absent from daemons that predate it; a client then cannot restore the prompt's files.
74720
+ resources: external_exports.array(promptResourceSchema).max(16).readonly().optional()
74698
74721
  }).readonly()
74699
74722
  ).readonly(),
74700
74723
  turn: activeTurnSnapshotSchema.nullable()
@@ -80707,7 +80730,6 @@ var init_pi_agent = __esm({
80707
80730
  "src/agent/specification/vendors/pi-agent.ts"() {
80708
80731
  "use strict";
80709
80732
  init_endpoint2();
80710
- init_state_directory();
80711
80733
  init_agent_probe_error();
80712
80734
  init_agent_specification();
80713
80735
  ACP_PROBE_TIMEOUT_MILLISECONDS2 = 3e4;
@@ -80719,13 +80741,7 @@ var init_pi_agent = __esm({
80719
80741
  // keeps the adapter's opt-in capability flag enabled for every launch it owns.
80720
80742
  createLaunchEnvironment = async (_agent, context) => {
80721
80743
  const workspaceHash = createHash3("sha256").update(context.defaultWorkspace).digest("hex").slice(0, 24);
80722
- const sessionDirectory = join21(
80723
- readStateDirectory(context.environment),
80724
- "agents",
80725
- "pi",
80726
- "sessions",
80727
- workspaceHash
80728
- );
80744
+ const sessionDirectory = join21(context.dataDirectory, "agents", "pi", "sessions", workspaceHash);
80729
80745
  return Object.freeze({
80730
80746
  PI_ACP_ENABLE_EMBEDDED_CONTEXT: "true",
80731
80747
  MOBIUS_PI_SESSION_DIR: sessionDirectory
@@ -90686,9 +90702,9 @@ var init_catalog2 = __esm({
90686
90702
 
90687
90703
  // src/runtime/config.ts
90688
90704
  import { join as join24, resolve as resolve14 } from "node:path";
90689
- function loadDefaultWorkspace(environment = process.env) {
90705
+ function loadDefaultWorkspace(dataDirectory, environment = process.env) {
90690
90706
  const { MOBIUS_DEFAULT_WORKSPACE: configuredWorkspace } = environment;
90691
- return configuredWorkspace ?? join24(readStateDirectory(environment), "workspace");
90707
+ return configuredWorkspace ?? join24(dataDirectory, "workspace");
90692
90708
  }
90693
90709
  function withRuntimeEnvironment(agent, environment) {
90694
90710
  const launchEnvironment = {};
@@ -90728,7 +90744,7 @@ var init_config = __esm({
90728
90744
  stateDirectory;
90729
90745
  constructor(stateDirectory, environment = process.env) {
90730
90746
  this.stateDirectory = resolve14(stateDirectory);
90731
- this.environment = Object.freeze({ ...environment, MOBIUS_STATE_DIRECTORY: this.stateDirectory });
90747
+ this.environment = Object.freeze({ ...environment });
90732
90748
  }
90733
90749
  };
90734
90750
  RuntimeReconnectTarget = class {
@@ -91322,9 +91338,9 @@ var init_runtime_installation_store = __esm({
91322
91338
  // src/storage/daemon/version-data.ts
91323
91339
  import { randomUUID as randomUUID11 } from "node:crypto";
91324
91340
  import { cp as cp2, lstat as lstat4, mkdtemp, readFile as readFile7, rename as rename4, rm as rm3, writeFile as writeFile2 } from "node:fs/promises";
91325
- import { join as join25 } from "node:path";
91341
+ import { join as join25, relative as relative2, sep as sep5 } from "node:path";
91326
91342
  async function readCurrentDataVersion(root, signal) {
91327
- const pointer = join25(root, "current-data.txt");
91343
+ const pointer = join25(root, STATE_ROOT_LAYOUT.currentData);
91328
91344
  try {
91329
91345
  await validateLocalPath(pointer, false, true, signal);
91330
91346
  const value = (await readFile7(pointer, { encoding: "utf8", signal })).trim();
@@ -91341,7 +91357,7 @@ async function readCurrentDataVersion(root, signal) {
91341
91357
  }
91342
91358
  async function versionDataExists(root, version2, signal) {
91343
91359
  try {
91344
- await validateLocalPath(join25(root, "versions", version2), true, true, signal);
91360
+ await validateLocalPath(join25(root, STATE_ROOT_LAYOUT.versions, version2), true, true, signal);
91345
91361
  return true;
91346
91362
  } catch (cause) {
91347
91363
  if (!isNodeError(cause, "ENOENT")) {
@@ -91350,8 +91366,12 @@ async function versionDataExists(root, version2, signal) {
91350
91366
  return false;
91351
91367
  }
91352
91368
  }
91369
+ function nestedRootEntry(segments) {
91370
+ return segments.length >= 4 && segments[0] === STATE_ROOT_LAYOUT.installations && STATE_ROOT_ENTRY_NAMES.has(segments[3] ?? "");
91371
+ }
91353
91372
  async function copyVersionData(root, sourceVersion, targetVersion, signal) {
91354
- const versions = join25(root, "versions");
91373
+ const leftBehind = [];
91374
+ const versions = join25(root, STATE_ROOT_LAYOUT.versions);
91355
91375
  const source = join25(versions, sourceVersion);
91356
91376
  const target = join25(versions, targetVersion);
91357
91377
  await validateLocalPath(root, true, true, signal);
@@ -91363,6 +91383,13 @@ async function copyVersionData(root, sourceVersion, targetVersion, signal) {
91363
91383
  recursive: true,
91364
91384
  filter: async (path8) => {
91365
91385
  signal.throwIfAborted();
91386
+ const segments = relative2(source, path8).split(sep5);
91387
+ if (nestedRootEntry(segments)) {
91388
+ if (segments.length === 4) {
91389
+ leftBehind.push(segments.join("/"));
91390
+ }
91391
+ return false;
91392
+ }
91366
91393
  if ((await lstat4(path8)).isSymbolicLink()) {
91367
91394
  throw new DataInheritanceError("The inherited data contains a symbolic link");
91368
91395
  }
@@ -91378,19 +91405,20 @@ async function copyVersionData(root, sourceVersion, targetVersion, signal) {
91378
91405
  }
91379
91406
  await validateLocalPath(target, true, true, signal);
91380
91407
  }
91408
+ return leftBehind;
91381
91409
  } finally {
91382
91410
  await rm3(staging, { recursive: true, force: true });
91383
91411
  }
91384
91412
  }
91385
91413
  async function writeCurrentDataVersion(root, version2, signal) {
91386
91414
  await validateLocalPath(root, true, true, signal);
91387
- await validateLocalPath(join25(root, "versions", version2), true, true, signal);
91415
+ await validateLocalPath(join25(root, STATE_ROOT_LAYOUT.versions, version2), true, true, signal);
91388
91416
  const temporary = join25(root, `.current-data-${randomUUID11()}.txt`);
91389
91417
  try {
91390
91418
  await writeFile2(temporary, `versions/${version2}
91391
91419
  `, { mode: 384, flag: "wx", signal });
91392
91420
  signal.throwIfAborted();
91393
- await rename4(temporary, join25(root, "current-data.txt"));
91421
+ await rename4(temporary, join25(root, STATE_ROOT_LAYOUT.currentData));
91394
91422
  } finally {
91395
91423
  await rm3(temporary, { force: true });
91396
91424
  }
@@ -91402,6 +91430,7 @@ var init_version_data = __esm({
91402
91430
  init_protocol();
91403
91431
  init_private_path();
91404
91432
  init_node_error();
91433
+ init_state_root_layout();
91405
91434
  DataInheritanceError = class extends Error {
91406
91435
  code = "data_inheritance_failed";
91407
91436
  };
@@ -91613,7 +91642,13 @@ async function prepareVersionData(version2, signal, environment = process.env, f
91613
91642
  if (previous === null) {
91614
91643
  return;
91615
91644
  }
91616
- await copyVersionData(root, runtimeUpgradeVersionSchema.parse(previous), targetVersion, signal);
91645
+ const leftBehind = await copyVersionData(root, runtimeUpgradeVersionSchema.parse(previous), targetVersion, signal);
91646
+ for (const entry of leftBehind) {
91647
+ process.stderr.write(
91648
+ `Mobius did not carry ${entry} into version ${targetVersion}: an earlier Mobius ran with that installation as its state root.
91649
+ `
91650
+ );
91651
+ }
91617
91652
  }
91618
91653
  async function recordCurrentData(version2, signal) {
91619
91654
  await writeCurrentDataVersion(readStateDirectory(), runtimeUpgradeVersionSchema.parse(version2), signal);
@@ -91818,6 +91853,7 @@ function buildPairedRuntime(installation, connection, defaultWorkspace, inventor
91818
91853
  createCatalogAgentResolver(
91819
91854
  (refreshSignal) => discoverLocalAgentInventory({
91820
91855
  defaultWorkspace,
91856
+ dataDirectory: localContext.stateDirectory,
91821
91857
  environment: localContext.environment,
91822
91858
  signal: refreshSignal
91823
91859
  }),
@@ -91826,6 +91862,7 @@ function buildPairedRuntime(installation, connection, defaultWorkspace, inventor
91826
91862
  ),
91827
91863
  (refreshSignal) => discoverLocalAgentInventory({
91828
91864
  defaultWorkspace,
91865
+ dataDirectory: localContext.stateDirectory,
91829
91866
  environment: localContext.environment,
91830
91867
  signal: refreshSignal
91831
91868
  }).then((inventory2) => inventory2.readyAgents())
@@ -91842,6 +91879,7 @@ async function pairRuntime(installation, options, signal, environment) {
91842
91879
  const defaultWorkspace = await resolveDefaultWorkspace(options.workspace);
91843
91880
  const inventory = await discoverLocalAgentInventory({
91844
91881
  defaultWorkspace,
91882
+ dataDirectory: localContext.stateDirectory,
91845
91883
  environment: localContext.environment,
91846
91884
  signal
91847
91885
  });
@@ -91865,6 +91903,7 @@ async function resumeRuntimeConnection(installation, connection, signal, environ
91865
91903
  const defaultWorkspace = await resolveDefaultWorkspace(connection.defaultWorkspace);
91866
91904
  const inventory = await discoverLocalAgentInventory({
91867
91905
  defaultWorkspace,
91906
+ dataDirectory: localContext.stateDirectory,
91868
91907
  environment: localContext.environment,
91869
91908
  signal
91870
91909
  });
@@ -91909,7 +91948,7 @@ async function pairLocalMachine(arguments_, signal = new AbortController().signa
91909
91948
  code: requested.code,
91910
91949
  pairingId: requested.pairingId,
91911
91950
  relayOrigin: requested.relayOrigin,
91912
- workspace: arguments_.includes("--workspace") ? requested.workspace : loadDefaultWorkspace(localContext.environment)
91951
+ workspace: arguments_.includes("--workspace") ? requested.workspace : loadDefaultWorkspace(localContext.stateDirectory, localContext.environment)
91913
91952
  },
91914
91953
  signal,
91915
91954
  process.env
@@ -92127,10 +92166,11 @@ function registerAgentsHandler(program2, context) {
92127
92166
  program2.command("agents").description("show detected, missing, and integration-ready Agents").option("--json", "write the Agent inventory as JSON").addOption(valueOption("--output-json <existing-file.json>", "write the JSON inventory to an existing file")).option("--verbose", "include per-Agent detection timing").action(async (options) => {
92128
92167
  const installation = await openMobiusCliInstallation(context.shutdownSignal, process.env);
92129
92168
  const localContext = new RuntimeLocalContext(installation.stateDirectory, process.env);
92130
- const defaultWorkspace = loadDefaultWorkspace(localContext.environment);
92169
+ const defaultWorkspace = loadDefaultWorkspace(localContext.stateDirectory, localContext.environment);
92131
92170
  await ensurePrivateDirectory(defaultWorkspace);
92132
92171
  const inventory = await discoverLocalAgentInventory({
92133
92172
  defaultWorkspace,
92173
+ dataDirectory: localContext.stateDirectory,
92134
92174
  environment: localContext.environment,
92135
92175
  signal: context.shutdownSignal
92136
92176
  });
@@ -92346,7 +92386,7 @@ var init_bounded_log = __esm({
92346
92386
  // src/storage/logs/log-files.ts
92347
92387
  import { readFileSync as readFileSync10 } from "node:fs";
92348
92388
  import { lstat as lstat5, readdir as readdir6, readFile as readFile10 } from "node:fs/promises";
92349
- import { join as join30, relative as relative2 } from "node:path";
92389
+ import { join as join30, relative as relative3 } from "node:path";
92350
92390
  function unhandledRejectionLogFilename(role) {
92351
92391
  return `unhandled-rejections-${role}.log`;
92352
92392
  }
@@ -92386,7 +92426,7 @@ async function findLogDirectories(root, unreadable, signal) {
92386
92426
  if (status === "listed") {
92387
92427
  found.push(logs);
92388
92428
  } else if (status === "unreadable") {
92389
- unreadable.push(relative2(root, logs));
92429
+ unreadable.push(relative3(root, logs));
92390
92430
  }
92391
92431
  }
92392
92432
  }
@@ -92400,7 +92440,7 @@ async function listDirectories(path8, root, unreadable, signal) {
92400
92440
  return entries.filter((entry) => entry.isDirectory() && !entry.isSymbolicLink()).map((entry) => entry.name);
92401
92441
  } catch (cause) {
92402
92442
  if (!isAbsent(cause)) {
92403
- unreadable.push(relative2(root, path8));
92443
+ unreadable.push(relative3(root, path8));
92404
92444
  }
92405
92445
  return [];
92406
92446
  }
@@ -92411,7 +92451,7 @@ async function listLogFiles(directory, root, unreadable) {
92411
92451
  return entries.filter((entry) => entry.isFile() && !entry.isSymbolicLink() && LOG_FILE_NAME_PATTERN.test(entry.name)).map((entry) => entry.name).sort();
92412
92452
  } catch (cause) {
92413
92453
  if (!isAbsent(cause)) {
92414
- unreadable.push(relative2(root, directory));
92454
+ unreadable.push(relative3(root, directory));
92415
92455
  }
92416
92456
  return [];
92417
92457
  }
@@ -92994,7 +93034,7 @@ var init_manager2 = __esm({
92994
93034
  import { readFile as readFile11, realpath as realpath8 } from "node:fs/promises";
92995
93035
  import { join as join31 } from "node:path";
92996
93036
  function releasePrefix(version2) {
92997
- return join31(readStateDirectory(), "npm", version2);
93037
+ return join31(readStateDirectory(), STATE_ROOT_LAYOUT.releases, version2);
92998
93038
  }
92999
93039
  async function readInstalledRelease(prefix) {
93000
93040
  const packageRoot = await realpath8(join31(prefix, "node_modules", "@moxt-ai", "mobius"));
@@ -93004,11 +93044,12 @@ var init_release_files = __esm({
93004
93044
  "src/storage/daemon/release-files.ts"() {
93005
93045
  "use strict";
93006
93046
  init_state_directory();
93047
+ init_state_root_layout();
93007
93048
  }
93008
93049
  });
93009
93050
 
93010
93051
  // src/daemon/upgrades/package.ts
93011
- import { isAbsolute as isAbsolute16, join as join32, relative as relative3 } from "node:path";
93052
+ import { isAbsolute as isAbsolute16, join as join32, relative as relative4 } from "node:path";
93012
93053
  async function prepareDaemonReleaseVersion(version2, signal) {
93013
93054
  runtimeUpgradeVersionSchema.parse(version2);
93014
93055
  signal.throwIfAborted();
@@ -93090,7 +93131,7 @@ async function verifyInstalledDaemonRelease(installed, prefix, version2, signal)
93090
93131
  engines: external_exports.object({ node: external_exports.string().refine((value) => (0, import_semver.validRange)(value) !== null) })
93091
93132
  }).parse(JSON.parse(installed.manifest));
93092
93133
  const entry = await canonicalPath(join32(installed.packageRoot, metadata.bin.mobius));
93093
- const resolved = relative3(await canonicalPath(prefix), entry);
93134
+ const resolved = relative4(await canonicalPath(prefix), entry);
93094
93135
  if (resolved.startsWith("..") || isAbsolute16(resolved)) {
93095
93136
  throw new Error("Installed entry escaped npm prefix");
93096
93137
  }
@@ -97406,7 +97447,8 @@ var init_session_turns = __esm({
97406
97447
  queued.push({
97407
97448
  commandId: candidate.command.commandId,
97408
97449
  prompt: candidate.command.prompt,
97409
- images: candidate.command.images
97450
+ images: candidate.command.images,
97451
+ resources: candidate.command.resources
97410
97452
  });
97411
97453
  }
97412
97454
  return { turn: turnSnapshot ?? null, queued };
@@ -97431,7 +97473,7 @@ var init_session_turns = __esm({
97431
97473
 
97432
97474
  // src/session/workspace/workspace-directory.ts
97433
97475
  import { homedir as homedir4 } from "node:os";
97434
- import { basename as basename8, dirname as dirname11, isAbsolute as isAbsolute17, join as join33, normalize as normalize2, relative as relative4 } from "node:path";
97476
+ import { basename as basename8, dirname as dirname11, isAbsolute as isAbsolute17, join as join33, normalize as normalize2, relative as relative5 } from "node:path";
97435
97477
  function encodePath(path8) {
97436
97478
  const encoded = Buffer.from(path8, "utf8").toString("base64url");
97437
97479
  if (path8.length === 0 || path8.length > MAX_WORKSPACE_PATH_LENGTH || encoded.length + "path-".length > MAX_DIRECTORY_IDENTIFIER_LENGTH) {
@@ -97525,7 +97567,7 @@ var init_workspace_directory = __esm({
97525
97567
  }
97526
97568
  };
97527
97569
  label = (path8) => {
97528
- const suffix = relative4(homedir4(), path8);
97570
+ const suffix = relative5(homedir4(), path8);
97529
97571
  return suffix === "" ? "~" : !isAbsolute17(suffix) && suffix !== ".." && !suffix.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) ? `~/${suffix.replaceAll("\\", "/")}` : path8;
97530
97572
  };
97531
97573
  identify = async (bindingId, requestedPath2, signal) => {
@@ -102392,7 +102434,7 @@ var init_daemon = __esm({
102392
102434
  });
102393
102435
 
102394
102436
  // src/cli/handler/logs/logic/collect-local-logs.ts
102395
- import { join as join38, relative as relative5, resolve as resolve19 } from "node:path";
102437
+ import { join as join38, relative as relative6, resolve as resolve19 } from "node:path";
102396
102438
  async function collectLocalDaemonLogs(stateDirectory, tailLines, signal) {
102397
102439
  signal.throwIfAborted();
102398
102440
  const root = resolve19(stateDirectory);
@@ -102403,7 +102445,7 @@ async function collectLocalDaemonLogs(stateDirectory, tailLines, signal) {
102403
102445
  const names = await listLogFiles(directory, root, unreadable);
102404
102446
  for (const name2 of names) {
102405
102447
  const path8 = join38(directory, name2);
102406
- const reported = relative5(root, path8);
102448
+ const reported = relative6(root, path8);
102407
102449
  const read = await readOwnedLogFile(path8, signal);
102408
102450
  if (read.kind === "unreadable") {
102409
102451
  unreadable.push(reported);