@moxt-ai/mobius 0.0.347 → 0.0.349

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 (31) hide show
  1. package/dist/cli.js +161 -104
  2. package/dist/cli.js.map +4 -4
  3. package/dist/engine/runtime/command/registry/prompt.js +4 -4
  4. package/dist/engine/runtime/command/registry/prompt.js.map +1 -1
  5. package/dist/engine/runtime/command/registry/session.d.ts.map +1 -1
  6. package/dist/engine/runtime/command/registry/session.js +8 -1
  7. package/dist/engine/runtime/command/registry/session.js.map +1 -1
  8. package/dist/engine/runtime/relay/session-event-publisher.d.ts.map +1 -1
  9. package/dist/engine/runtime/relay/session-event-publisher.js +22 -1
  10. package/dist/engine/runtime/relay/session-event-publisher.js.map +1 -1
  11. package/dist/engine/session/content/external-content-store.d.ts +4 -1
  12. package/dist/engine/session/content/external-content-store.d.ts.map +1 -1
  13. package/dist/engine/session/content/external-content-store.js +11 -3
  14. package/dist/engine/session/content/external-content-store.js.map +1 -1
  15. package/dist/engine/session/prompt/prompt-artifacts.d.ts +6 -1
  16. package/dist/engine/session/prompt/prompt-artifacts.d.ts.map +1 -1
  17. package/dist/engine/session/prompt/prompt-artifacts.js +12 -17
  18. package/dist/engine/session/prompt/prompt-artifacts.js.map +1 -1
  19. package/dist/engine/session/prompt/prompt-lifecycle.d.ts.map +1 -1
  20. package/dist/engine/session/prompt/prompt-lifecycle.js +2 -1
  21. package/dist/engine/session/prompt/prompt-lifecycle.js.map +1 -1
  22. package/dist/engine/session/turn/execution-receipts.d.ts.map +1 -1
  23. package/dist/engine/session/turn/execution-receipts.js +5 -6
  24. package/dist/engine/session/turn/execution-receipts.js.map +1 -1
  25. package/dist/engine/session/workspace/workspace-directory.d.ts +1 -0
  26. package/dist/engine/session/workspace/workspace-directory.d.ts.map +1 -1
  27. package/dist/engine/session/workspace/workspace-directory.js +2 -1
  28. package/dist/engine/session/workspace/workspace-directory.js.map +1 -1
  29. package/dist/engine.js +152 -96
  30. package/dist/engine.js.map +4 -4
  31. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-directory.js","sourceRoot":"","sources":["../../../../src/engine/session/workspace/workspace-directory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-directory.js","sourceRoot":"","sources":["../../../../src/engine/session/workspace/workspace-directory.ts"],"names":[],"mappings":"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"}
package/dist/engine.js CHANGED
@@ -21673,7 +21673,8 @@ var workspaceListCommandSchema = external_exports.object({
21673
21673
  bindingId: identifierStringSchema,
21674
21674
  directoryId: DIRECTORY_IDENTIFIER,
21675
21675
  kind: external_exports.literal(WORKSPACE_LIST_KIND),
21676
- requestId: identifierStringSchema
21676
+ requestId: identifierStringSchema,
21677
+ view: external_exports.literal("metadata").optional()
21677
21678
  }).readonly();
21678
21679
  var workspaceEntriesEventSchema = external_exports.object({
21679
21680
  bindingId: identifierStringSchema,
@@ -63398,6 +63399,7 @@ var ClaudeAcpAgent = class {
63398
63399
  session.titles.onPrompt(params.prompt);
63399
63400
  const turn = {
63400
63401
  promptUuid,
63402
+ inputQueuedAt: performance.now(),
63401
63403
  isLocalOnlyCommand,
63402
63404
  settled: false,
63403
63405
  resolve: () => {
@@ -63883,6 +63885,15 @@ var ClaudeAcpAgent = class {
63883
63885
  case "started": {
63884
63886
  const queued = findUnsettledTurn(frame.command_uuid);
63885
63887
  if (queued) {
63888
+ if (!queued.commandStarted) {
63889
+ this.logger.log(JSON.stringify({
63890
+ event: "claude-sdk-command-start-timing",
63891
+ sessionId: params.sessionId,
63892
+ promptUuid: queued.promptUuid,
63893
+ observedAt: Date.now(),
63894
+ queuedToCommandStartMs: performance.now() - queued.inputQueuedAt
63895
+ }));
63896
+ }
63886
63897
  queued.commandStarted = true;
63887
63898
  }
63888
63899
  const state = session.orphanCommands?.get(frame.command_uuid);
@@ -64569,6 +64580,16 @@ ${message.api_refusal_explanation}` : "";
64569
64580
  }
64570
64581
  const queued = findUnsettledTurn(message.uuid);
64571
64582
  if (queued) {
64583
+ if (!queued.inputEchoObserved) {
64584
+ queued.inputEchoObserved = true;
64585
+ this.logger.log(JSON.stringify({
64586
+ event: "claude-sdk-input-echo-timing",
64587
+ sessionId: params.sessionId,
64588
+ promptUuid: queued.promptUuid,
64589
+ observedAt: Date.now(),
64590
+ queuedToEchoMs: performance.now() - queued.inputQueuedAt
64591
+ }));
64592
+ }
64572
64593
  if (session.activeTurn !== queued) {
64573
64594
  if (session.activeTurn) {
64574
64595
  if (session.cancelled) {
@@ -86975,6 +86996,63 @@ var NativeSessionService = class {
86975
86996
  };
86976
86997
  };
86977
86998
 
86999
+ // src/engine/session/prompt/prompt-artifacts.ts
87000
+ import { createHash as createHash6 } from "node:crypto";
87001
+ import { pathToFileURL as pathToFileURL2 } from "node:url";
87002
+ var PromptArtifactError = class extends OperationError {
87003
+ constructor(code, message, options = {}) {
87004
+ super(code, message, options);
87005
+ this.name = "PromptArtifactError";
87006
+ }
87007
+ };
87008
+ var ResolvedPromptArtifacts = class {
87009
+ images;
87010
+ resources;
87011
+ constructor(images, resources) {
87012
+ this.images = images;
87013
+ this.resources = resources;
87014
+ }
87015
+ };
87016
+ function isTextPromptResourceMediaType(mediaType) {
87017
+ return mediaType.startsWith("text/") || mediaType === "application/json" || mediaType.endsWith("+json") || mediaType === "application/xml" || mediaType.endsWith("+xml");
87018
+ }
87019
+ async function resolvePromptArtifacts(read, attachments, signal) {
87020
+ const images = [];
87021
+ const resources = [];
87022
+ for (const attachment of attachments) {
87023
+ signal.throwIfAborted();
87024
+ const artifact = await read(attachment, signal);
87025
+ const { bytes } = artifact;
87026
+ if (bytes.byteLength !== attachment.byteLength || createHash6("sha256").update(bytes).digest("hex") !== attachment.contentKey) {
87027
+ throw new PromptArtifactError(
87028
+ "artifact_integrity_failed",
87029
+ "The prompt attachment failed integrity validation"
87030
+ );
87031
+ }
87032
+ if (attachment.kind === "image") {
87033
+ if (bytes.byteLength > PROMPT_IMAGE_MAX_BYTES || images.length >= 8) {
87034
+ continue;
87035
+ }
87036
+ images.push({
87037
+ data: Buffer.from(bytes).toString("base64"),
87038
+ mimeType: attachment.mimeType,
87039
+ name: attachment.name
87040
+ });
87041
+ continue;
87042
+ }
87043
+ if (bytes.byteLength > MAX_PROMPT_ATTACHMENT_BYTES || resources.length >= 16) {
87044
+ continue;
87045
+ }
87046
+ resources.push({
87047
+ mimeType: attachment.mimeType,
87048
+ name: attachment.name,
87049
+ type: "link",
87050
+ uri: pathToFileURL2(artifact.path).href
87051
+ });
87052
+ }
87053
+ return new ResolvedPromptArtifacts(images, resources);
87054
+ }
87055
+
86978
87056
  // src/engine/session/prompt/prompt-lifecycle.ts
86979
87057
  function promptContent(command) {
86980
87058
  const content = [];
@@ -86991,7 +87069,7 @@ function promptContent(command) {
86991
87069
  uri: attachment.uri
86992
87070
  } : {
86993
87071
  byteLength: attachment.byteLength,
86994
- encoding: "text",
87072
+ encoding: isTextPromptResourceMediaType(attachment.mimeType) ? "text" : "binary",
86995
87073
  mimeType: attachment.mimeType,
86996
87074
  resourceKey: attachment.contentKey,
86997
87075
  type: "external_resource",
@@ -87156,7 +87234,7 @@ async function settleAbandonedTurn(projection, operations, cancellation) {
87156
87234
  }
87157
87235
 
87158
87236
  // src/engine/session/turn/execution-receipts.ts
87159
- import { createHash as createHash6, randomUUID as randomUUID15 } from "node:crypto";
87237
+ import { createHash as createHash7, randomUUID as randomUUID15 } from "node:crypto";
87160
87238
  var MAX_TERMINAL_RECEIPTS = 1024;
87161
87239
  var ExecutionReceipts = class {
87162
87240
  #executions = /* @__PURE__ */ new Map();
@@ -87176,11 +87254,11 @@ var ExecutionReceipts = class {
87176
87254
  }
87177
87255
  }
87178
87256
  }
87179
- #save = (commandId, receipt) => {
87257
+ #save = (commandId, receipt, liveOutcome = receipt.outcome) => {
87180
87258
  const evicted = this.#closing ? [] : this.#table.save({ ...receipt, commandId, updatedAt: (/* @__PURE__ */ new Date()).toISOString() }, MAX_TERMINAL_RECEIPTS);
87181
87259
  const previous = this.#executions.get(commandId);
87182
87260
  const wasActive = previous?.outcome === null;
87183
- this.#executions.set(commandId, receipt);
87261
+ this.#executions.set(commandId, { ...receipt, outcome: liveOutcome });
87184
87262
  for (const evictedCommandId of evicted) {
87185
87263
  this.#executions.delete(evictedCommandId);
87186
87264
  this.#recoveredCommands.delete(evictedCommandId);
@@ -87268,7 +87346,7 @@ var ExecutionReceipts = class {
87268
87346
  type: "lifecycle-metadata",
87269
87347
  payload: { kind: "prompt.completed", commandId, stopReason: "cancelled" }
87270
87348
  };
87271
- const commandHash = createHash6("sha256").update(
87349
+ const commandHash = createHash7("sha256").update(
87272
87350
  encodeSessionCancelBeforeStartCommand({
87273
87351
  commandId,
87274
87352
  kind: "session.cancel-before-start",
@@ -87297,10 +87375,12 @@ var ExecutionReceipts = class {
87297
87375
  return;
87298
87376
  }
87299
87377
  const sanitized = payload.kind === "prompt.completed" ? payload : { ...payload, message: "The local Agent could not complete the request" };
87300
- this.#save(payload.commandId, {
87301
- ...receipt,
87302
- outcome: JSON.stringify({ type: "lifecycle-metadata", payload: sanitized, recordedAt: event.recordedAt })
87303
- });
87378
+ const outcome = { type: "lifecycle-metadata", payload, recordedAt: event.recordedAt };
87379
+ this.#save(
87380
+ payload.commandId,
87381
+ { ...receipt, outcome: JSON.stringify({ ...outcome, payload: sanitized }) },
87382
+ JSON.stringify(outcome)
87383
+ );
87304
87384
  };
87305
87385
  recover = () => {
87306
87386
  const recovered = [];
@@ -87332,7 +87412,7 @@ var ExecutionReceipts = class {
87332
87412
  return recovered;
87333
87413
  };
87334
87414
  claimExecution = (commandId, sessionId, commandJson) => {
87335
- const commandHash = createHash6("sha256").update(commandJson).digest("hex");
87415
+ const commandHash = createHash7("sha256").update(commandJson).digest("hex");
87336
87416
  let existing = this.#executions.get(commandId);
87337
87417
  const previous = this.outcome(commandId);
87338
87418
  if (existing?.sessionId === sessionId && !existing.started && previous?.type === "lifecycle-metadata" && previous.payload.kind === "prompt.failed-before-start" && previous.payload.code === "runtime_restarted") {
@@ -87881,7 +87961,8 @@ var WorkspaceDirectoryService = class {
87881
87961
  };
87882
87962
  describe = async (bindingId, id, signal) => {
87883
87963
  const path7 = await this.resolve(bindingId, id, signal);
87884
- return { path: path7, label: this.label(path7) };
87964
+ const parent = dirname10(path7);
87965
+ return { path: path7, label: this.label(path7), parentDirectoryId: parent === path7 ? "" : encodePath(parent) };
87885
87966
  };
87886
87967
  list = async (bindingId, id, signal) => {
87887
87968
  const target = await this.resolve(bindingId, id, signal);
@@ -88052,8 +88133,8 @@ function buildSessionLayer(options) {
88052
88133
  }
88053
88134
 
88054
88135
  // src/engine/session/content/external-content-store.ts
88055
- import { createHash as createHash7 } from "node:crypto";
88056
- import { join as join26 } from "node:path";
88136
+ import { createHash as createHash8 } from "node:crypto";
88137
+ import { extname as extname3, join as join26 } from "node:path";
88057
88138
 
88058
88139
  // src/engine/storage/files/scratch-directory.ts
88059
88140
  import { randomUUID as randomUUID17 } from "node:crypto";
@@ -88140,6 +88221,10 @@ var metadataSchema = external_exports.strictObject({
88140
88221
  mediaType: external_exports.string().min(1).max(2048).regex(/^[\u0020-\u007e]+$/u),
88141
88222
  name: external_exports.string().min(1).max(500)
88142
88223
  });
88224
+ function contentFileName(key, name2) {
88225
+ const extension = extname3(name2).toLowerCase();
88226
+ return /^\.[a-z0-9]{1,16}$/u.test(extension) ? `${key}${extension}` : key;
88227
+ }
88143
88228
  var LocalExternalContentStore = class {
88144
88229
  #scratch;
88145
88230
  #entries = /* @__PURE__ */ new Map();
@@ -88182,7 +88267,7 @@ var LocalExternalContentStore = class {
88182
88267
  const active = AbortSignal.any([signal, this.#lifetime.signal]);
88183
88268
  active.throwIfAborted();
88184
88269
  const metadata = metadataSchema.parse({ kind, mediaType, name: name2 });
88185
- const key = createHash7("sha256").update(bytes).digest("hex");
88270
+ const key = createHash8("sha256").update(bytes).digest("hex");
88186
88271
  const request = `mobius-content:${kind}:${key}`;
88187
88272
  const existing = this.#entries.get(request);
88188
88273
  if (existing !== void 0 && existing.expiresAt > Date.now()) {
@@ -88195,7 +88280,7 @@ var LocalExternalContentStore = class {
88195
88280
  }
88196
88281
  await this.#expire();
88197
88282
  active.throwIfAborted();
88198
- const path7 = await this.#scratch.write(kind, key, bytes, active);
88283
+ const path7 = await this.#scratch.write(kind, contentFileName(key, metadata.name), bytes, active);
88199
88284
  active.throwIfAborted();
88200
88285
  const retained = this.#entries.get(request);
88201
88286
  this.#entries.set(request, {
@@ -88231,7 +88316,11 @@ var LocalExternalContentStore = class {
88231
88316
  read = (sessionId, request, signal) => this.#track(async () => {
88232
88317
  const active = AbortSignal.any([signal, this.#lifetime.signal]);
88233
88318
  const resolved = await this.#resolve(sessionId, request, active);
88234
- return resolved === null ? null : this.#scratch.read(resolved.path, active);
88319
+ if (resolved === null) {
88320
+ return null;
88321
+ }
88322
+ const bytes = await this.#scratch.read(resolved.path, active);
88323
+ return bytes === null ? null : { ...resolved, bytes };
88235
88324
  });
88236
88325
  [Symbol.asyncDispose] = async () => {
88237
88326
  clearInterval(this.#expirationTimer);
@@ -89050,7 +89139,7 @@ var SessionError = class extends OperationError {
89050
89139
  };
89051
89140
 
89052
89141
  // src/engine/session/settings/discover-agent-settings.ts
89053
- import { createHash as createHash8 } from "node:crypto";
89142
+ import { createHash as createHash9 } from "node:crypto";
89054
89143
 
89055
89144
  // src/engine/agent/settings/agent-settings-base.ts
89056
89145
  var AgentSettingsLaunchSelectionResult = class {
@@ -89368,7 +89457,7 @@ function settingsRevision(agent, reportedAgentVersion, settings, modelEffort) {
89368
89457
  unsupportedModelIds: modelEffort.unsupportedModelIds,
89369
89458
  valuesByModel: {}
89370
89459
  };
89371
- return createHash8("sha256").update(
89460
+ return createHash9("sha256").update(
89372
89461
  JSON.stringify({
89373
89462
  adapterVersion: agent.adapterVersion,
89374
89463
  agentId: agent.id,
@@ -89524,7 +89613,7 @@ function createAgentSettingsCommands(context) {
89524
89613
  }
89525
89614
 
89526
89615
  // src/engine/runtime/command/registry/content-write/index.ts
89527
- import { createHash as createHash9 } from "node:crypto";
89616
+ import { createHash as createHash10 } from "node:crypto";
89528
89617
  function createContentWriteCommands(context) {
89529
89618
  const pending = /* @__PURE__ */ new Map();
89530
89619
  const operations = /* @__PURE__ */ new Set();
@@ -89554,7 +89643,7 @@ function createContentWriteCommands(context) {
89554
89643
  pending.set(message.requestId, {
89555
89644
  bytes: new Uint8Array(message.byteLength),
89556
89645
  command: message,
89557
- hash: createHash9("sha256"),
89646
+ hash: createHash10("sha256"),
89558
89647
  receivedBytes: 0,
89559
89648
  sequence: 0
89560
89649
  });
@@ -89648,7 +89737,7 @@ function createContentWriteCommands(context) {
89648
89737
  import { WebSocket as WebSocket5 } from "undici";
89649
89738
 
89650
89739
  // src/engine/session/content/session-files.ts
89651
- import { basename as basename8, extname as extname3, isAbsolute as isAbsolute16, join as join30, normalize as normalize3, resolve as resolve16 } from "node:path";
89740
+ import { basename as basename8, extname as extname4, isAbsolute as isAbsolute16, join as join30, normalize as normalize3, resolve as resolve16 } from "node:path";
89652
89741
  import { fileURLToPath as fileURLToPath2 } from "node:url";
89653
89742
  function requestedPath(value) {
89654
89743
  if (value.includes("\0")) {
@@ -89704,7 +89793,7 @@ async function streamLocalFile(command, send2, sendChunk, signal, workingDirecto
89704
89793
  send2({
89705
89794
  byteLength: before.size,
89706
89795
  kind: FILE_BEGIN_KIND,
89707
- mediaType: external?.mediaType ?? raster?.mimeType ?? (extname3(target).toLowerCase() === ".svg" ? "image/svg+xml" : "application/octet-stream"),
89796
+ mediaType: external?.mediaType ?? raster?.mimeType ?? (extname4(target).toLowerCase() === ".svg" ? "image/svg+xml" : "application/octet-stream"),
89708
89797
  modifiedAt: before.modifiedAt.toISOString(),
89709
89798
  name: external?.name ?? (basename8(target) || "file"),
89710
89799
  requestId: command.requestId,
@@ -90418,67 +90507,6 @@ function warnIgnoredSetting(event, commandId, sessionId, agentId, selection, cat
90418
90507
  `);
90419
90508
  }
90420
90509
 
90421
- // src/engine/session/prompt/prompt-artifacts.ts
90422
- import { createHash as createHash10 } from "node:crypto";
90423
- var MAX_AGENT_RESOURCE_BYTE_LENGTH = 1e6;
90424
- var PromptArtifactError = class extends OperationError {
90425
- constructor(code, message, options = {}) {
90426
- super(code, message, options);
90427
- this.name = "PromptArtifactError";
90428
- }
90429
- };
90430
- var ResolvedPromptArtifacts = class {
90431
- images;
90432
- resources;
90433
- constructor(images, resources) {
90434
- this.images = images;
90435
- this.resources = resources;
90436
- }
90437
- };
90438
- function isTextMediaType(mediaType) {
90439
- return mediaType.startsWith("text/") || mediaType === "application/json" || mediaType.endsWith("+json") || mediaType === "application/xml" || mediaType.endsWith("+xml");
90440
- }
90441
- async function resolvePromptArtifacts(read, attachments, signal) {
90442
- const images = [];
90443
- const resources = [];
90444
- for (const attachment of attachments) {
90445
- signal.throwIfAborted();
90446
- const bytes = await read(attachment, signal);
90447
- if (bytes.byteLength !== attachment.byteLength || createHash10("sha256").update(bytes).digest("hex") !== attachment.contentKey) {
90448
- throw new PromptArtifactError(
90449
- "artifact_integrity_failed",
90450
- "The prompt attachment failed integrity validation"
90451
- );
90452
- }
90453
- if (attachment.kind === "image") {
90454
- if (bytes.byteLength > PROMPT_IMAGE_MAX_BYTES || images.length >= 8) {
90455
- continue;
90456
- }
90457
- images.push({
90458
- data: Buffer.from(bytes).toString("base64"),
90459
- mimeType: attachment.mimeType,
90460
- name: attachment.name
90461
- });
90462
- continue;
90463
- }
90464
- if (!isTextMediaType(attachment.mimeType)) {
90465
- continue;
90466
- }
90467
- if (bytes.byteLength > MAX_AGENT_RESOURCE_BYTE_LENGTH || resources.length >= 16) {
90468
- continue;
90469
- }
90470
- let text2;
90471
- try {
90472
- text2 = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
90473
- } catch {
90474
- signal.throwIfAborted();
90475
- continue;
90476
- }
90477
- resources.push({ mimeType: attachment.mimeType, text: text2, type: "embedded", uri: attachment.uri });
90478
- }
90479
- return new ResolvedPromptArtifacts(images, resources);
90480
- }
90481
-
90482
90510
  // src/engine/session/prompt/execute-prompt.ts
90483
90511
  async function executePrompt({
90484
90512
  operations,
@@ -90690,16 +90718,16 @@ var sessionPromptCommand = {
90690
90718
  eventProjection: context.eventProjection,
90691
90719
  command: message,
90692
90720
  resolveAgent: context.resolveAgent,
90693
- readArtifact: async (artifact, signal) => {
90694
- const bytes = await context.externalContent.read(
90721
+ readArtifact: async (attachment, signal) => {
90722
+ const artifact = await context.externalContent.read(
90695
90723
  message.sessionId,
90696
- `mobius-content:${artifact.kind}:${artifact.contentKey}`,
90724
+ `mobius-content:${attachment.kind}:${attachment.contentKey}`,
90697
90725
  signal
90698
90726
  );
90699
- if (bytes === null) {
90727
+ if (artifact === null) {
90700
90728
  throw new Error("The prompt attachment is unavailable");
90701
90729
  }
90702
- return bytes;
90730
+ return { bytes: artifact.bytes, path: artifact.path };
90703
90731
  },
90704
90732
  reportFailure: context.diagnostics.daemonDiagnostic,
90705
90733
  directories: context.directories,
@@ -90727,7 +90755,7 @@ var sessionPromptCommand = {
90727
90755
  // package.json
90728
90756
  var package_default = {
90729
90757
  name: "@moxt-ai/mobius",
90730
- version: "0.0.347",
90758
+ version: "0.0.349",
90731
90759
  description: "Mobius CLI for pairing and running local AI agent services.",
90732
90760
  type: "module",
90733
90761
  bin: {
@@ -90769,13 +90797,13 @@ var package_default = {
90769
90797
  prepack: "pnpm build",
90770
90798
  start: "node dist/cli.js",
90771
90799
  typecheck: "tsc --project tsconfig.json && tsc --project tests/tsconfig.json",
90772
- "pretest:controlled": "tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json",
90773
- "test:controlled": "vitest run tests/sessions tests/runtime --maxWorkers=4",
90800
+ "pretest:controlled": "pnpm build",
90801
+ "test:controlled": "vitest run tests/sessions tests/runtime",
90774
90802
  "pretest:manual": "pnpm pretest:controlled",
90775
90803
  "test:manual": "vitest run tests/manual",
90776
- "pretest:agents": "tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json",
90804
+ "pretest:agents": "pnpm build",
90777
90805
  "test:agents": "vitest run tests/agents --maxWorkers=2",
90778
- "pretest:npm-compatibility": "tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json",
90806
+ "pretest:npm-compatibility": "pnpm build",
90779
90807
  "test:npm-compatibility": "vitest run tests/runtime/daemon-upgrade.integration.test.ts",
90780
90808
  "pretest:pressure": "tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json",
90781
90809
  "test:pressure": "node tests/pressure/concurrent-sessions.mjs"
@@ -90899,7 +90927,12 @@ async function prepareSession(command, recovery, closed, config2, resolveAgent,
90899
90927
  }
90900
90928
  async function executeWorkspaceList(socket, command, directories, signal) {
90901
90929
  try {
90902
- const listing = await directories.list(command.bindingId, command.directoryId, signal);
90930
+ const listing = command.view === "metadata" ? await directories.describe(command.bindingId, command.directoryId, signal).then((directory) => ({
90931
+ directoryId: command.directoryId,
90932
+ directoryLabel: directory.label,
90933
+ entries: [],
90934
+ parentDirectoryId: directory.parentDirectoryId
90935
+ })) : await directories.list(command.bindingId, command.directoryId, signal);
90903
90936
  send(socket, {
90904
90937
  bindingId: command.bindingId,
90905
90938
  directoryId: listing.directoryId,
@@ -91832,13 +91865,23 @@ var RuntimeSessionEventPublisher = class {
91832
91865
  return;
91833
91866
  }
91834
91867
  if (batch === void 0 || newBatch) {
91835
- batch = { events: [], bytes: EMPTY_ENVELOPE_BYTES };
91868
+ batch = { events: [], firstAnswers: [], bytes: EMPTY_ENVELOPE_BYTES };
91836
91869
  this.#pending.push(batch);
91837
91870
  }
91838
91871
  batch.events.push(event);
91839
91872
  batch.bytes += bytes;
91840
91873
  this.#pendingBytes += additionalBytes;
91874
+ const awaiting = this.#awaitingFirstAnswer.get(event.sessionId);
91841
91875
  const firstAnswer = this.#consumeFirstAnswer(event);
91876
+ if (firstAnswer && awaiting !== void 0) {
91877
+ batch.firstAnswers.push({
91878
+ sessionId: event.sessionId,
91879
+ commandId: awaiting.commandId,
91880
+ eventId: event.eventId,
91881
+ observedAt: Date.now(),
91882
+ publishedAt: performance.now()
91883
+ });
91884
+ }
91842
91885
  const connection = this.#connection;
91843
91886
  if (connection.kind !== "connected" || connection.socket.readyState !== WebSocket9.OPEN) {
91844
91887
  return;
@@ -91893,6 +91936,19 @@ var RuntimeSessionEventPublisher = class {
91893
91936
  this.#pendingBytes -= batch.bytes;
91894
91937
  try {
91895
91938
  socket.send(encoded);
91939
+ for (const answer of batch.firstAnswers) {
91940
+ console.info(
91941
+ JSON.stringify({
91942
+ event: "runtime-first-answer-handoff-timing",
91943
+ sessionId: answer.sessionId,
91944
+ commandId: answer.commandId,
91945
+ eventId: answer.eventId,
91946
+ observedAt: answer.observedAt,
91947
+ handedOffAt: Date.now(),
91948
+ publishToHandoffMs: performance.now() - answer.publishedAt
91949
+ })
91950
+ );
91951
+ }
91896
91952
  } catch {
91897
91953
  console.warn("Live Session output could not be sent", { code: "live_event_send_failed" });
91898
91954
  break;