@adhdev/daemon-core 0.9.82-rc.129 → 0.9.82-rc.130

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/dist/index.js CHANGED
@@ -2153,19 +2153,19 @@ function resolveCommandPath(command) {
2153
2153
  return null;
2154
2154
  }
2155
2155
  function execAsync(cmd, timeoutMs = 5e3) {
2156
- return new Promise((resolve17) => {
2156
+ return new Promise((resolve18) => {
2157
2157
  const child = (0, import_child_process.exec)(cmd, {
2158
2158
  encoding: "utf-8",
2159
2159
  timeout: timeoutMs,
2160
2160
  ...process.platform === "win32" ? { windowsHide: true } : {}
2161
2161
  }, (err, stdout) => {
2162
2162
  if (err || !stdout?.trim()) {
2163
- resolve17(null);
2163
+ resolve18(null);
2164
2164
  } else {
2165
- resolve17(stdout.trim());
2165
+ resolve18(stdout.trim());
2166
2166
  }
2167
2167
  });
2168
- child.on("error", () => resolve17(null));
2168
+ child.on("error", () => resolve18(null));
2169
2169
  });
2170
2170
  }
2171
2171
  async function detectCLIs(providerLoader, options) {
@@ -5384,7 +5384,7 @@ ${lastSnapshot}`;
5384
5384
  `[${this.cliType}] Waiting for interactive prompt: status=${status} stableMs=${stableMs} recentOutputMs=${recentlyOutput} screen=${JSON.stringify(summarizeCliTraceText(screenText, 220)).slice(0, 260)}`
5385
5385
  );
5386
5386
  }
5387
- await new Promise((resolve17) => setTimeout(resolve17, 50));
5387
+ await new Promise((resolve18) => setTimeout(resolve18, 50));
5388
5388
  }
5389
5389
  const finalScreenText = this.terminalScreen.getText() || "";
5390
5390
  LOG.warn(
@@ -6629,7 +6629,7 @@ ${lastSnapshot}`;
6629
6629
  const deadline = Date.now() + 1e4;
6630
6630
  while (this.startupParseGate && Date.now() < deadline) {
6631
6631
  this.resolveStartupState("send_wait");
6632
- await new Promise((resolve17) => setTimeout(resolve17, 50));
6632
+ await new Promise((resolve18) => setTimeout(resolve18, 50));
6633
6633
  }
6634
6634
  }
6635
6635
  const parsedStatusBeforeSend = !allowInputDuringGeneration ? (() => {
@@ -6726,13 +6726,13 @@ ${lastSnapshot}`;
6726
6726
  }
6727
6727
  this.responseEpoch += 1;
6728
6728
  this.responseSettleIgnoreUntil = Date.now() + submitDelayMs + this.timeouts.outputSettle + 250;
6729
- await new Promise((resolve17, reject) => {
6729
+ await new Promise((resolve18, reject) => {
6730
6730
  let resolved = false;
6731
6731
  const completion = {
6732
6732
  resolveOnce: () => {
6733
6733
  if (resolved) return;
6734
6734
  resolved = true;
6735
- resolve17();
6735
+ resolve18();
6736
6736
  },
6737
6737
  rejectOnce: (error) => {
6738
6738
  if (resolved) return;
@@ -6890,17 +6890,17 @@ ${lastSnapshot}`;
6890
6890
  }
6891
6891
  }
6892
6892
  waitForStopped(timeoutMs) {
6893
- return new Promise((resolve17) => {
6893
+ return new Promise((resolve18) => {
6894
6894
  const startedAt = Date.now();
6895
6895
  const timer = setInterval(() => {
6896
6896
  if (!this.ptyProcess || this.currentStatus === "stopped") {
6897
6897
  clearInterval(timer);
6898
- resolve17(true);
6898
+ resolve18(true);
6899
6899
  return;
6900
6900
  }
6901
6901
  if (Date.now() - startedAt >= timeoutMs) {
6902
6902
  clearInterval(timer);
6903
- resolve17(false);
6903
+ resolve18(false);
6904
6904
  }
6905
6905
  }, 100);
6906
6906
  });
@@ -11026,7 +11026,7 @@ var DaemonCdpManager = class {
11026
11026
  * Returns multiple entries if multiple IDE windows are open on same port
11027
11027
  */
11028
11028
  static listAllTargets(port) {
11029
- return new Promise((resolve17) => {
11029
+ return new Promise((resolve18) => {
11030
11030
  const req = http.get(`http://127.0.0.1:${port}/json`, (res) => {
11031
11031
  let data = "";
11032
11032
  res.on("data", (chunk) => data += chunk.toString());
@@ -11042,16 +11042,16 @@ var DaemonCdpManager = class {
11042
11042
  (t) => !isNonMain(t.title || "") && t.url?.includes("workbench.html") && !t.url?.includes("agent")
11043
11043
  );
11044
11044
  const fallbackPages = pages.filter((t) => !isNonMain(t.title || ""));
11045
- resolve17(mainPages.length > 0 ? mainPages : fallbackPages);
11045
+ resolve18(mainPages.length > 0 ? mainPages : fallbackPages);
11046
11046
  } catch {
11047
- resolve17([]);
11047
+ resolve18([]);
11048
11048
  }
11049
11049
  });
11050
11050
  });
11051
- req.on("error", () => resolve17([]));
11051
+ req.on("error", () => resolve18([]));
11052
11052
  req.setTimeout(2e3, () => {
11053
11053
  req.destroy();
11054
- resolve17([]);
11054
+ resolve18([]);
11055
11055
  });
11056
11056
  });
11057
11057
  }
@@ -11091,7 +11091,7 @@ var DaemonCdpManager = class {
11091
11091
  }
11092
11092
  }
11093
11093
  findTargetOnPort(port) {
11094
- return new Promise((resolve17) => {
11094
+ return new Promise((resolve18) => {
11095
11095
  const req = http.get(`http://127.0.0.1:${port}/json`, (res) => {
11096
11096
  let data = "";
11097
11097
  res.on("data", (chunk) => data += chunk.toString());
@@ -11102,7 +11102,7 @@ var DaemonCdpManager = class {
11102
11102
  (t) => (t.type === "page" || t.type === "browser" || t.type === "Page") && t.webSocketDebuggerUrl
11103
11103
  );
11104
11104
  if (pages.length === 0) {
11105
- resolve17(targets.find((t) => t.webSocketDebuggerUrl) || null);
11105
+ resolve18(targets.find((t) => t.webSocketDebuggerUrl) || null);
11106
11106
  return;
11107
11107
  }
11108
11108
  const titleFilteredPages = pages.filter((t) => !this.isNonMainTitle(t.title || ""));
@@ -11121,25 +11121,25 @@ var DaemonCdpManager = class {
11121
11121
  this._targetId = selected.target.id;
11122
11122
  }
11123
11123
  this._pageTitle = selected.target.title || "";
11124
- resolve17(selected.target);
11124
+ resolve18(selected.target);
11125
11125
  return;
11126
11126
  }
11127
11127
  if (previousTargetId) {
11128
11128
  this.log(`[CDP] Target ${previousTargetId} not found in page list`);
11129
- resolve17(null);
11129
+ resolve18(null);
11130
11130
  return;
11131
11131
  }
11132
11132
  this._pageTitle = list[0]?.title || "";
11133
- resolve17(list[0]);
11133
+ resolve18(list[0]);
11134
11134
  } catch {
11135
- resolve17(null);
11135
+ resolve18(null);
11136
11136
  }
11137
11137
  });
11138
11138
  });
11139
- req.on("error", () => resolve17(null));
11139
+ req.on("error", () => resolve18(null));
11140
11140
  req.setTimeout(2e3, () => {
11141
11141
  req.destroy();
11142
- resolve17(null);
11142
+ resolve18(null);
11143
11143
  });
11144
11144
  });
11145
11145
  }
@@ -11150,7 +11150,7 @@ var DaemonCdpManager = class {
11150
11150
  this.extensionProviders = providers;
11151
11151
  }
11152
11152
  connectToTarget(wsUrl) {
11153
- return new Promise((resolve17) => {
11153
+ return new Promise((resolve18) => {
11154
11154
  this.ws = new import_ws.default(wsUrl);
11155
11155
  this.ws.on("open", async () => {
11156
11156
  this._connected = true;
@@ -11160,17 +11160,17 @@ var DaemonCdpManager = class {
11160
11160
  }
11161
11161
  this.connectBrowserWs().catch(() => {
11162
11162
  });
11163
- resolve17(true);
11163
+ resolve18(true);
11164
11164
  });
11165
11165
  this.ws.on("message", (data) => {
11166
11166
  try {
11167
11167
  const msg = JSON.parse(data.toString());
11168
11168
  if (msg.id && this.pending.has(msg.id)) {
11169
- const { resolve: resolve18, reject } = this.pending.get(msg.id);
11169
+ const { resolve: resolve19, reject } = this.pending.get(msg.id);
11170
11170
  this.pending.delete(msg.id);
11171
11171
  this.failureCount = 0;
11172
11172
  if (msg.error) reject(new Error(msg.error.message));
11173
- else resolve18(msg.result);
11173
+ else resolve19(msg.result);
11174
11174
  } else if (msg.method === "Runtime.executionContextCreated") {
11175
11175
  this.contexts.add(msg.params.context.id);
11176
11176
  } else if (msg.method === "Runtime.executionContextDestroyed") {
@@ -11193,7 +11193,7 @@ var DaemonCdpManager = class {
11193
11193
  this.ws.on("error", (err) => {
11194
11194
  this.log(`[CDP] WebSocket error: ${err.message}`);
11195
11195
  this._connected = false;
11196
- resolve17(false);
11196
+ resolve18(false);
11197
11197
  });
11198
11198
  });
11199
11199
  }
@@ -11207,7 +11207,7 @@ var DaemonCdpManager = class {
11207
11207
  return;
11208
11208
  }
11209
11209
  this.log(`[CDP] Connecting browser WS for target discovery...`);
11210
- await new Promise((resolve17, reject) => {
11210
+ await new Promise((resolve18, reject) => {
11211
11211
  this.browserWs = new import_ws.default(browserWsUrl);
11212
11212
  this.browserWs.on("open", async () => {
11213
11213
  this._browserConnected = true;
@@ -11217,16 +11217,16 @@ var DaemonCdpManager = class {
11217
11217
  } catch (e) {
11218
11218
  this.log(`[CDP] setDiscoverTargets failed: ${e.message}`);
11219
11219
  }
11220
- resolve17();
11220
+ resolve18();
11221
11221
  });
11222
11222
  this.browserWs.on("message", (data) => {
11223
11223
  try {
11224
11224
  const msg = JSON.parse(data.toString());
11225
11225
  if (msg.id && this.browserPending.has(msg.id)) {
11226
- const { resolve: resolve18, reject: reject2 } = this.browserPending.get(msg.id);
11226
+ const { resolve: resolve19, reject: reject2 } = this.browserPending.get(msg.id);
11227
11227
  this.browserPending.delete(msg.id);
11228
11228
  if (msg.error) reject2(new Error(msg.error.message));
11229
- else resolve18(msg.result);
11229
+ else resolve19(msg.result);
11230
11230
  }
11231
11231
  } catch {
11232
11232
  }
@@ -11246,31 +11246,31 @@ var DaemonCdpManager = class {
11246
11246
  }
11247
11247
  }
11248
11248
  getBrowserWsUrl() {
11249
- return new Promise((resolve17) => {
11249
+ return new Promise((resolve18) => {
11250
11250
  const req = http.get(`http://127.0.0.1:${this.port}/json/version`, (res) => {
11251
11251
  let data = "";
11252
11252
  res.on("data", (chunk) => data += chunk.toString());
11253
11253
  res.on("end", () => {
11254
11254
  try {
11255
11255
  const info = JSON.parse(data);
11256
- resolve17(info.webSocketDebuggerUrl || null);
11256
+ resolve18(info.webSocketDebuggerUrl || null);
11257
11257
  } catch {
11258
- resolve17(null);
11258
+ resolve18(null);
11259
11259
  }
11260
11260
  });
11261
11261
  });
11262
- req.on("error", () => resolve17(null));
11262
+ req.on("error", () => resolve18(null));
11263
11263
  req.setTimeout(3e3, () => {
11264
11264
  req.destroy();
11265
- resolve17(null);
11265
+ resolve18(null);
11266
11266
  });
11267
11267
  });
11268
11268
  }
11269
11269
  sendBrowser(method, params = {}, timeoutMs = 15e3) {
11270
- return new Promise((resolve17, reject) => {
11270
+ return new Promise((resolve18, reject) => {
11271
11271
  if (!this.browserWs || !this._browserConnected) return reject(new Error("Browser WS not connected"));
11272
11272
  const id = this.browserMsgId++;
11273
- this.browserPending.set(id, { resolve: resolve17, reject });
11273
+ this.browserPending.set(id, { resolve: resolve18, reject });
11274
11274
  this.browserWs.send(JSON.stringify({ id, method, params }));
11275
11275
  setTimeout(() => {
11276
11276
  if (this.browserPending.has(id)) {
@@ -11310,11 +11310,11 @@ var DaemonCdpManager = class {
11310
11310
  }
11311
11311
  // ─── CDP Protocol ────────────────────────────────────────
11312
11312
  sendInternal(method, params = {}, timeoutMs = 15e3) {
11313
- return new Promise((resolve17, reject) => {
11313
+ return new Promise((resolve18, reject) => {
11314
11314
  if (!this.ws || !this._connected) return reject(new Error("CDP not connected"));
11315
11315
  if (this.ws.readyState !== import_ws.default.OPEN) return reject(new Error("WebSocket not open"));
11316
11316
  const id = this.msgId++;
11317
- this.pending.set(id, { resolve: resolve17, reject });
11317
+ this.pending.set(id, { resolve: resolve18, reject });
11318
11318
  this.ws.send(JSON.stringify({ id, method, params }));
11319
11319
  setTimeout(() => {
11320
11320
  if (this.pending.has(id)) {
@@ -11563,7 +11563,7 @@ var DaemonCdpManager = class {
11563
11563
  const browserWs = this.browserWs;
11564
11564
  let msgId = this.browserMsgId;
11565
11565
  const sendWs = (method, params = {}, sessionId) => {
11566
- return new Promise((resolve17, reject) => {
11566
+ return new Promise((resolve18, reject) => {
11567
11567
  const mid = msgId++;
11568
11568
  this.browserMsgId = msgId;
11569
11569
  const handler = (raw) => {
@@ -11572,7 +11572,7 @@ var DaemonCdpManager = class {
11572
11572
  if (msg.id === mid) {
11573
11573
  browserWs.removeListener("message", handler);
11574
11574
  if (msg.error) reject(new Error(msg.error.message || JSON.stringify(msg.error)));
11575
- else resolve17(msg.result);
11575
+ else resolve18(msg.result);
11576
11576
  }
11577
11577
  } catch {
11578
11578
  }
@@ -11773,14 +11773,14 @@ var DaemonCdpManager = class {
11773
11773
  if (!ws || ws.readyState !== import_ws.default.OPEN) {
11774
11774
  throw new Error("CDP not connected");
11775
11775
  }
11776
- return new Promise((resolve17, reject) => {
11776
+ return new Promise((resolve18, reject) => {
11777
11777
  const id = getNextId();
11778
11778
  pendingMap.set(id, {
11779
11779
  resolve: (result) => {
11780
11780
  if (result?.result?.subtype === "error") {
11781
11781
  reject(new Error(result.result.description));
11782
11782
  } else {
11783
- resolve17(result?.result?.value);
11783
+ resolve18(result?.result?.value);
11784
11784
  }
11785
11785
  },
11786
11786
  reject
@@ -11812,10 +11812,10 @@ var DaemonCdpManager = class {
11812
11812
  throw new Error("CDP not connected");
11813
11813
  }
11814
11814
  const sendViaSession = (method, params = {}) => {
11815
- return new Promise((resolve17, reject) => {
11815
+ return new Promise((resolve18, reject) => {
11816
11816
  const pendingMap = this._browserConnected ? this.browserPending : this.pending;
11817
11817
  const id = this._browserConnected ? this.browserMsgId++ : this.msgId++;
11818
- pendingMap.set(id, { resolve: resolve17, reject });
11818
+ pendingMap.set(id, { resolve: resolve18, reject });
11819
11819
  ws.send(JSON.stringify({ id, sessionId, method, params }));
11820
11820
  setTimeout(() => {
11821
11821
  if (pendingMap.has(id)) {
@@ -16921,7 +16921,7 @@ function getSendChatInputEnvelope(args) {
16921
16921
  return normalizeInputEnvelope(args?.input ? { input: args.input } : args);
16922
16922
  }
16923
16923
  function sleep(ms) {
16924
- return new Promise((resolve17) => setTimeout(resolve17, ms));
16924
+ return new Promise((resolve18) => setTimeout(resolve18, ms));
16925
16925
  }
16926
16926
  async function waitOnceForFreshHermesCliStart(adapter, log) {
16927
16927
  if (adapter.cliType !== "hermes-cli") return;
@@ -17161,6 +17161,39 @@ function readExactRuntimeMirrorMessages(args) {
17161
17161
  return historySessionId === targetSessionId || instanceId === targetSessionId;
17162
17162
  });
17163
17163
  }
17164
+ function normalizeComparableWorkspace(value) {
17165
+ const text = typeof value === "string" ? value.trim() : "";
17166
+ if (!text) return "";
17167
+ return path12.resolve(text);
17168
+ }
17169
+ function isCurrentRuntimePtySafelyAttributed(args) {
17170
+ if (args.adapter.cliType !== "codex-cli") return false;
17171
+ if (!Array.isArray(args.ptyMessages) || args.ptyMessages.length === 0) return false;
17172
+ const targetSessionId = typeof args.readChatArgs?.targetSessionId === "string" ? args.readChatArgs.targetSessionId.trim() : "";
17173
+ const currentSession = args.helpers.currentSession;
17174
+ const currentSessionId = typeof currentSession?.sessionId === "string" ? currentSession.sessionId.trim() : "";
17175
+ if (!targetSessionId || !currentSessionId || targetSessionId !== currentSessionId) return false;
17176
+ const runtimeMeta = typeof args.adapter.getRuntimeMetadata === "function" ? args.adapter.getRuntimeMetadata() : null;
17177
+ const runtimeId = typeof runtimeMeta?.runtimeId === "string" ? runtimeMeta.runtimeId.trim() : "";
17178
+ if (!runtimeId || runtimeId !== targetSessionId) return false;
17179
+ const surfaceKind = typeof runtimeMeta?.surfaceKind === "string" ? runtimeMeta.surfaceKind : "";
17180
+ if (surfaceKind === "inactive_record" || surfaceKind === "recovery_snapshot") return false;
17181
+ const sessionWorkspace = normalizeComparableWorkspace(args.sessionWorkspace);
17182
+ const adapterWorkspace = normalizeComparableWorkspace(args.adapter.workingDir);
17183
+ if (!sessionWorkspace || !adapterWorkspace || sessionWorkspace !== adapterWorkspace) return false;
17184
+ const intendedWorkspace = normalizeComparableWorkspace(args.intendedWorkspace);
17185
+ if (intendedWorkspace && intendedWorkspace !== sessionWorkspace) return false;
17186
+ const registryEntry = args.helpers.ctx?.sessionRegistry?.get?.(targetSessionId);
17187
+ const registryInstanceKey = typeof registryEntry?.adapterKey === "string" && registryEntry.adapterKey.trim() ? registryEntry.adapterKey.trim() : typeof registryEntry?.instanceKey === "string" && registryEntry.instanceKey.trim() ? registryEntry.instanceKey.trim() : "";
17188
+ if (registryInstanceKey) {
17189
+ const targetInstance = args.helpers.ctx?.instanceManager?.getInstance?.(registryInstanceKey);
17190
+ if (targetInstance) {
17191
+ const instanceType = typeof targetInstance.type === "string" ? targetInstance.type : "";
17192
+ if (instanceType && instanceType !== args.adapter.cliType) return false;
17193
+ }
17194
+ }
17195
+ return true;
17196
+ }
17164
17197
  function supportsCliNativeTranscript(providerType, provider) {
17165
17198
  if (CLI_NATIVE_TRANSCRIPT_PROVIDERS.has(providerType)) return true;
17166
17199
  return provider?.category === "cli" && isNativeSourceCanonicalHistory(provider?.canonicalHistory);
@@ -17778,7 +17811,7 @@ function getCliVisibleTranscriptCount(adapter) {
17778
17811
  async function getStableExtensionBaseline(h) {
17779
17812
  const first = await readExtensionChatState(h);
17780
17813
  if (getStateMessageCount(first) > 0 || getStateLastSignature(first)) return first;
17781
- await new Promise((resolve17) => setTimeout(resolve17, 150));
17814
+ await new Promise((resolve18) => setTimeout(resolve18, 150));
17782
17815
  const second = await readExtensionChatState(h);
17783
17816
  return getStateMessageCount(second) >= getStateMessageCount(first) ? second : first;
17784
17817
  }
@@ -17786,7 +17819,7 @@ async function verifyExtensionSendObserved(h, before) {
17786
17819
  const beforeCount = getStateMessageCount(before);
17787
17820
  const beforeSignature = getStateLastSignature(before);
17788
17821
  for (let attempt = 0; attempt < 12; attempt += 1) {
17789
- await new Promise((resolve17) => setTimeout(resolve17, 250));
17822
+ await new Promise((resolve18) => setTimeout(resolve18, 250));
17790
17823
  const state = await readExtensionChatState(h);
17791
17824
  if (state?.status === "waiting_approval") return true;
17792
17825
  const afterCount = getStateMessageCount(state);
@@ -18009,8 +18042,16 @@ async function handleReadChat(h, args) {
18009
18042
  freshEnough
18010
18043
  });
18011
18044
  const unsafeNativeFallback = adapter.cliType === "codex-cli" && isUnsafeNativeTranscriptFallback(fallbackReason);
18012
- const safeRuntimeAckMessages = unsafeNativeFallback ? selectRuntimeInputAckMessages(returnedMessages) : [];
18013
- const exactRuntimeMirrorMessages = unsafeNativeFallback && safeRuntimeAckMessages.length === 0 ? readExactRuntimeMirrorMessages({
18045
+ const safeCurrentRuntimePtyMessages = unsafeNativeFallback && isCurrentRuntimePtySafelyAttributed({
18046
+ adapter,
18047
+ helpers: h,
18048
+ readChatArgs: args,
18049
+ sessionWorkspace,
18050
+ intendedWorkspace,
18051
+ ptyMessages: returnedMessages
18052
+ });
18053
+ const safeRuntimeAckMessages = unsafeNativeFallback && !safeCurrentRuntimePtyMessages ? selectRuntimeInputAckMessages(returnedMessages) : [];
18054
+ const exactRuntimeMirrorMessages = unsafeNativeFallback && !safeCurrentRuntimePtyMessages && safeRuntimeAckMessages.length === 0 ? readExactRuntimeMirrorMessages({
18014
18055
  providerType,
18015
18056
  targetSessionId: typeof args?.targetSessionId === "string" ? args.targetSessionId : void 0,
18016
18057
  currentSessionId: typeof h.currentSession?.sessionId === "string" ? h.currentSession.sessionId : void 0,
@@ -18019,10 +18060,17 @@ async function handleReadChat(h, args) {
18019
18060
  }) : [];
18020
18061
  const safeDaemonMessages = safeRuntimeAckMessages.length > 0 ? safeRuntimeAckMessages : exactRuntimeMirrorMessages;
18021
18062
  if (unsafeNativeFallback) {
18022
- selectedMessages = safeDaemonMessages;
18023
- selectedTranscriptAuthority = safeDaemonMessages.length > 0 ? "daemon" : void 0;
18024
- selectedCoverage = safeDaemonMessages.length > 0 ? "tail" : void 0;
18025
- selectedStatus = coerceUnsafeNativeFallbackStatus(returnedStatus, activeModal);
18063
+ if (safeCurrentRuntimePtyMessages) {
18064
+ selectedMessages = returnedMessages;
18065
+ selectedTranscriptAuthority = "daemon";
18066
+ selectedCoverage = coverage || "current-turn";
18067
+ selectedStatus = returnedStatus;
18068
+ } else {
18069
+ selectedMessages = safeDaemonMessages;
18070
+ selectedTranscriptAuthority = safeDaemonMessages.length > 0 ? "daemon" : void 0;
18071
+ selectedCoverage = safeDaemonMessages.length > 0 ? "tail" : void 0;
18072
+ selectedStatus = coerceUnsafeNativeFallbackStatus(returnedStatus, activeModal);
18073
+ }
18026
18074
  }
18027
18075
  messageSource = buildCliMessageSourceProvenance({
18028
18076
  selected: "pty-parser",
@@ -18040,11 +18088,16 @@ async function handleReadChat(h, args) {
18040
18088
  unavailableReason,
18041
18089
  nativeMessages,
18042
18090
  ptyMessages: returnedMessages,
18043
- returnedMessages: unsafeNativeFallback ? safeDaemonMessages : returnedMessages,
18091
+ returnedMessages: unsafeNativeFallback && !safeCurrentRuntimePtyMessages ? safeDaemonMessages : returnedMessages,
18044
18092
  safeMapping,
18045
18093
  freshEnough,
18046
- ptyStatusApprovalOnly: unsafeNativeFallback
18094
+ ptyStatusApprovalOnly: unsafeNativeFallback && !safeCurrentRuntimePtyMessages
18047
18095
  });
18096
+ if (safeCurrentRuntimePtyMessages) {
18097
+ messageSource.selectedDaemonSource = "current-runtime-pty";
18098
+ messageSource.transcriptAuthority = "daemon";
18099
+ messageSource.runtimeMappingSafe = true;
18100
+ }
18048
18101
  if (unsafeNativeFallback && exactRuntimeMirrorMessages.length > 0) {
18049
18102
  messageSource.selectedDaemonSource = "exact-runtime-mirror";
18050
18103
  messageSource.transcriptAuthority = "daemon";
@@ -19727,7 +19780,7 @@ async function executeProviderScript(h, args, scriptName) {
19727
19780
  const enterCount = cliCommand.enterCount || 1;
19728
19781
  await adapter.writeRaw(cliCommand.text + "\r");
19729
19782
  for (let i = 1; i < enterCount; i += 1) {
19730
- await new Promise((resolve17) => setTimeout(resolve17, 50));
19783
+ await new Promise((resolve18) => setTimeout(resolve18, 50));
19731
19784
  await adapter.writeRaw("\r");
19732
19785
  }
19733
19786
  }
@@ -20416,7 +20469,7 @@ var DaemonCommandHandler = class {
20416
20469
  try {
20417
20470
  const http3 = await import("http");
20418
20471
  const postData = JSON.stringify(body);
20419
- const result = await new Promise((resolve17, reject) => {
20472
+ const result = await new Promise((resolve18, reject) => {
20420
20473
  const req = http3.request({
20421
20474
  hostname: "127.0.0.1",
20422
20475
  port: 19280,
@@ -20428,9 +20481,9 @@ var DaemonCommandHandler = class {
20428
20481
  res.on("data", (chunk) => data += chunk);
20429
20482
  res.on("end", () => {
20430
20483
  try {
20431
- resolve17(JSON.parse(data));
20484
+ resolve18(JSON.parse(data));
20432
20485
  } catch {
20433
- resolve17({ raw: data });
20486
+ resolve18({ raw: data });
20434
20487
  }
20435
20488
  });
20436
20489
  });
@@ -20448,15 +20501,15 @@ var DaemonCommandHandler = class {
20448
20501
  if (!providerType) return { success: false, error: "providerType required" };
20449
20502
  try {
20450
20503
  const http3 = await import("http");
20451
- const result = await new Promise((resolve17, reject) => {
20504
+ const result = await new Promise((resolve18, reject) => {
20452
20505
  http3.get(`http://127.0.0.1:19280/api/providers/${providerType}/${endpoint}`, (res) => {
20453
20506
  let data = "";
20454
20507
  res.on("data", (chunk) => data += chunk);
20455
20508
  res.on("end", () => {
20456
20509
  try {
20457
- resolve17(JSON.parse(data));
20510
+ resolve18(JSON.parse(data));
20458
20511
  } catch {
20459
- resolve17({ raw: data });
20512
+ resolve18({ raw: data });
20460
20513
  }
20461
20514
  });
20462
20515
  }).on("error", reject);
@@ -20470,7 +20523,7 @@ var DaemonCommandHandler = class {
20470
20523
  try {
20471
20524
  const http3 = await import("http");
20472
20525
  const postData = JSON.stringify(args || {});
20473
- const result = await new Promise((resolve17, reject) => {
20526
+ const result = await new Promise((resolve18, reject) => {
20474
20527
  const req = http3.request({
20475
20528
  hostname: "127.0.0.1",
20476
20529
  port: 19280,
@@ -20482,9 +20535,9 @@ var DaemonCommandHandler = class {
20482
20535
  res.on("data", (chunk) => data += chunk);
20483
20536
  res.on("end", () => {
20484
20537
  try {
20485
- resolve17(JSON.parse(data));
20538
+ resolve18(JSON.parse(data));
20486
20539
  } catch {
20487
- resolve17({ raw: data });
20540
+ resolve18({ raw: data });
20488
20541
  }
20489
20542
  });
20490
20543
  });
@@ -20728,7 +20781,7 @@ async function waitForCliAdapterReady(adapter, options) {
20728
20781
  if (status === "stopped") {
20729
20782
  throw new Error("CLI runtime stopped before it became ready");
20730
20783
  }
20731
- await new Promise((resolve17) => setTimeout(resolve17, pollMs));
20784
+ await new Promise((resolve18) => setTimeout(resolve18, pollMs));
20732
20785
  }
20733
20786
  throw new Error(`CLI runtime did not become ready within ${timeoutMs}ms`);
20734
20787
  }
@@ -21126,7 +21179,7 @@ var CliProviderInstance = class {
21126
21179
  const enterCount = cliCommand.enterCount || 1;
21127
21180
  await this.adapter.writeRaw(cliCommand.text + "\r");
21128
21181
  for (let i = 1; i < enterCount; i += 1) {
21129
- await new Promise((resolve17) => setTimeout(resolve17, 50));
21182
+ await new Promise((resolve18) => setTimeout(resolve18, 50));
21130
21183
  await this.adapter.writeRaw("\r");
21131
21184
  }
21132
21185
  }
@@ -22563,13 +22616,13 @@ var AcpProviderInstance = class {
22563
22616
  }
22564
22617
  this.currentStatus = "waiting_approval";
22565
22618
  this.detectStatusTransition();
22566
- const approved = await new Promise((resolve17) => {
22567
- this.permissionResolvers.push(resolve17);
22619
+ const approved = await new Promise((resolve18) => {
22620
+ this.permissionResolvers.push(resolve18);
22568
22621
  setTimeout(() => {
22569
- const idx = this.permissionResolvers.indexOf(resolve17);
22622
+ const idx = this.permissionResolvers.indexOf(resolve18);
22570
22623
  if (idx >= 0) {
22571
22624
  this.permissionResolvers.splice(idx, 1);
22572
- resolve17(false);
22625
+ resolve18(false);
22573
22626
  }
22574
22627
  }, 3e5);
22575
22628
  });
@@ -23278,7 +23331,7 @@ async function waitForZeroMessageStartingLaunch(adapter) {
23278
23331
  } catch {
23279
23332
  return false;
23280
23333
  }
23281
- await new Promise((resolve17) => setTimeout(resolve17, ZERO_MESSAGE_STARTING_SEND_WAIT_MS));
23334
+ await new Promise((resolve18) => setTimeout(resolve18, ZERO_MESSAGE_STARTING_SEND_WAIT_MS));
23282
23335
  try {
23283
23336
  return hasZeroMessageStartingLaunch(adapter);
23284
23337
  } catch {
@@ -25378,7 +25431,7 @@ var ProviderLoader = class _ProviderLoader {
25378
25431
  return { updated: false };
25379
25432
  }
25380
25433
  try {
25381
- const etag = await new Promise((resolve17, reject) => {
25434
+ const etag = await new Promise((resolve18, reject) => {
25382
25435
  const options = {
25383
25436
  method: "HEAD",
25384
25437
  hostname: "github.com",
@@ -25396,7 +25449,7 @@ var ProviderLoader = class _ProviderLoader {
25396
25449
  headers: { "User-Agent": "adhdev-launcher" },
25397
25450
  timeout: 1e4
25398
25451
  }, (res2) => {
25399
- resolve17(res2.headers.etag || res2.headers["last-modified"] || "");
25452
+ resolve18(res2.headers.etag || res2.headers["last-modified"] || "");
25400
25453
  });
25401
25454
  req2.on("error", reject);
25402
25455
  req2.on("timeout", () => {
@@ -25405,7 +25458,7 @@ var ProviderLoader = class _ProviderLoader {
25405
25458
  });
25406
25459
  req2.end();
25407
25460
  } else {
25408
- resolve17(res.headers.etag || res.headers["last-modified"] || "");
25461
+ resolve18(res.headers.etag || res.headers["last-modified"] || "");
25409
25462
  }
25410
25463
  });
25411
25464
  req.on("error", reject);
@@ -25469,7 +25522,7 @@ var ProviderLoader = class _ProviderLoader {
25469
25522
  downloadFile(url, destPath) {
25470
25523
  const https = require("https");
25471
25524
  const http3 = require("http");
25472
- return new Promise((resolve17, reject) => {
25525
+ return new Promise((resolve18, reject) => {
25473
25526
  const doRequest = (reqUrl, redirectCount = 0) => {
25474
25527
  if (redirectCount > 5) {
25475
25528
  reject(new Error("Too many redirects"));
@@ -25489,7 +25542,7 @@ var ProviderLoader = class _ProviderLoader {
25489
25542
  res.pipe(ws);
25490
25543
  ws.on("finish", () => {
25491
25544
  ws.close();
25492
- resolve17();
25545
+ resolve18();
25493
25546
  });
25494
25547
  ws.on("error", reject);
25495
25548
  });
@@ -25992,10 +26045,10 @@ function findMacAppProcessPids(psOutput, appPaths) {
25992
26045
 
25993
26046
  // src/launch.ts
25994
26047
  async function execQuiet(command, options = {}) {
25995
- return new Promise((resolve17) => {
26048
+ return new Promise((resolve18) => {
25996
26049
  (0, import_child_process6.exec)(command, options, (error, stdout) => {
25997
- if (error) return resolve17("");
25998
- resolve17(stdout.toString());
26050
+ if (error) return resolve18("");
26051
+ resolve18(stdout.toString());
25999
26052
  });
26000
26053
  });
26001
26054
  }
@@ -26076,17 +26129,17 @@ async function findFreePort(ports) {
26076
26129
  throw new Error("No free port found");
26077
26130
  }
26078
26131
  function checkPortFree(port) {
26079
- return new Promise((resolve17) => {
26132
+ return new Promise((resolve18) => {
26080
26133
  const server = net.createServer();
26081
26134
  server.unref();
26082
- server.on("error", () => resolve17(false));
26135
+ server.on("error", () => resolve18(false));
26083
26136
  server.listen(port, "127.0.0.1", () => {
26084
- server.close(() => resolve17(true));
26137
+ server.close(() => resolve18(true));
26085
26138
  });
26086
26139
  });
26087
26140
  }
26088
26141
  async function isCdpActive(port) {
26089
- return new Promise((resolve17) => {
26142
+ return new Promise((resolve18) => {
26090
26143
  const req = require("http").get(`http://127.0.0.1:${port}/json/version`, {
26091
26144
  timeout: 2e3
26092
26145
  }, (res) => {
@@ -26095,16 +26148,16 @@ async function isCdpActive(port) {
26095
26148
  res.on("end", () => {
26096
26149
  try {
26097
26150
  const info = JSON.parse(data);
26098
- resolve17(!!info["WebKit-Version"] || !!info["Browser"]);
26151
+ resolve18(!!info["WebKit-Version"] || !!info["Browser"]);
26099
26152
  } catch {
26100
- resolve17(false);
26153
+ resolve18(false);
26101
26154
  }
26102
26155
  });
26103
26156
  });
26104
- req.on("error", () => resolve17(false));
26157
+ req.on("error", () => resolve18(false));
26105
26158
  req.on("timeout", () => {
26106
26159
  req.destroy();
26107
- resolve17(false);
26160
+ resolve18(false);
26108
26161
  });
26109
26162
  });
26110
26163
  }
@@ -27354,7 +27407,7 @@ async function waitForPidExit(pid, timeoutMs) {
27354
27407
  while (Date.now() - start < timeoutMs) {
27355
27408
  try {
27356
27409
  process.kill(pid, 0);
27357
- await new Promise((resolve17) => setTimeout(resolve17, 250));
27410
+ await new Promise((resolve18) => setTimeout(resolve18, 250));
27358
27411
  } catch {
27359
27412
  return;
27360
27413
  }
@@ -27465,7 +27518,7 @@ async function runDaemonUpgradeHelper(payload) {
27465
27518
  appendUpgradeLog(installOutput.trim());
27466
27519
  }
27467
27520
  if (process.platform === "win32") {
27468
- await new Promise((resolve17) => setTimeout(resolve17, 500));
27521
+ await new Promise((resolve18) => setTimeout(resolve18, 500));
27469
27522
  cleanupStaleGlobalInstallDirs(payload.packageName, installCommand.surface);
27470
27523
  appendUpgradeLog("Post-install staging cleanup complete");
27471
27524
  }
@@ -31663,7 +31716,7 @@ var DaemonCommandRouter = class {
31663
31716
  const setupPromise = finishWorktreeSetup();
31664
31717
  const setupResult = await Promise.race([
31665
31718
  setupPromise.then((value) => ({ completed: true, value })),
31666
- new Promise((resolve17) => setTimeout(() => resolve17({ completed: false }), setupWaitMs))
31719
+ new Promise((resolve18) => setTimeout(() => resolve18({ completed: false }), setupWaitMs))
31667
31720
  ]);
31668
31721
  if (!setupResult.completed) {
31669
31722
  setupPromise.catch((error) => {
@@ -33061,7 +33114,7 @@ var ProviderStreamAdapter = class {
33061
33114
  const beforeCount = this.messageCount(before);
33062
33115
  const beforeSignature = this.lastMessageSignature(before);
33063
33116
  for (let attempt = 0; attempt < 12; attempt += 1) {
33064
- await new Promise((resolve17) => setTimeout(resolve17, 250));
33117
+ await new Promise((resolve18) => setTimeout(resolve18, 250));
33065
33118
  let state;
33066
33119
  try {
33067
33120
  state = await this.readChat(evaluate);
@@ -33083,7 +33136,7 @@ var ProviderStreamAdapter = class {
33083
33136
  if (this.messageCount(first) > 0 || this.lastMessageSignature(first)) {
33084
33137
  return first;
33085
33138
  }
33086
- await new Promise((resolve17) => setTimeout(resolve17, 150));
33139
+ await new Promise((resolve18) => setTimeout(resolve18, 150));
33087
33140
  const second = await this.readChat(evaluate);
33088
33141
  return this.messageCount(second) >= this.messageCount(first) ? second : first;
33089
33142
  }
@@ -33234,7 +33287,7 @@ var ProviderStreamAdapter = class {
33234
33287
  if (typeof data.error === "string" && data.error.trim()) return false;
33235
33288
  }
33236
33289
  for (let attempt = 0; attempt < 6; attempt += 1) {
33237
- await new Promise((resolve17) => setTimeout(resolve17, 250));
33290
+ await new Promise((resolve18) => setTimeout(resolve18, 250));
33238
33291
  const state = await this.readChat(evaluate);
33239
33292
  const title = this.getStateTitle(state);
33240
33293
  if (this.titlesMatch(title, sessionId)) return true;
@@ -34162,13 +34215,13 @@ var VersionArchive = class {
34162
34215
  }
34163
34216
  };
34164
34217
  async function runCommand(cmd, timeout = 1e4) {
34165
- return new Promise((resolve17) => {
34218
+ return new Promise((resolve18) => {
34166
34219
  (0, import_child_process9.exec)(cmd, {
34167
34220
  encoding: "utf-8",
34168
34221
  timeout
34169
34222
  }, (error, stdout) => {
34170
- if (error) return resolve17(null);
34171
- resolve17(stdout.trim());
34223
+ if (error) return resolve18(null);
34224
+ resolve18(stdout.trim());
34172
34225
  });
34173
34226
  });
34174
34227
  }
@@ -35857,7 +35910,7 @@ function getCliTargetBundle(ctx, type, instanceId) {
35857
35910
  return { target, instance, adapter };
35858
35911
  }
35859
35912
  function sleep2(ms) {
35860
- return new Promise((resolve17) => setTimeout(resolve17, ms));
35913
+ return new Promise((resolve18) => setTimeout(resolve18, ms));
35861
35914
  }
35862
35915
  async function waitForCliReady(ctx, type, instanceId, timeoutMs) {
35863
35916
  const startedAt = Date.now();
@@ -38112,15 +38165,15 @@ var DevServer = class _DevServer {
38112
38165
  this.json(res, 500, { error: e.message });
38113
38166
  }
38114
38167
  });
38115
- return new Promise((resolve17, reject) => {
38168
+ return new Promise((resolve18, reject) => {
38116
38169
  this.server.listen(port, "127.0.0.1", () => {
38117
38170
  this.log(`Dev server listening on http://127.0.0.1:${port}`);
38118
- resolve17();
38171
+ resolve18();
38119
38172
  });
38120
38173
  this.server.on("error", (e) => {
38121
38174
  if (e.code === "EADDRINUSE") {
38122
38175
  this.log(`Port ${port} in use, skipping dev server`);
38123
- resolve17();
38176
+ resolve18();
38124
38177
  } else {
38125
38178
  reject(e);
38126
38179
  }
@@ -38202,20 +38255,20 @@ var DevServer = class _DevServer {
38202
38255
  child.stderr?.on("data", (d) => {
38203
38256
  stderr += d.toString().slice(0, 2e3);
38204
38257
  });
38205
- await new Promise((resolve17) => {
38258
+ await new Promise((resolve18) => {
38206
38259
  const timer = setTimeout(() => {
38207
38260
  child.kill();
38208
- resolve17();
38261
+ resolve18();
38209
38262
  }, 3e3);
38210
38263
  child.on("exit", () => {
38211
38264
  clearTimeout(timer);
38212
- resolve17();
38265
+ resolve18();
38213
38266
  });
38214
38267
  child.stdout?.once("data", () => {
38215
38268
  setTimeout(() => {
38216
38269
  child.kill();
38217
38270
  clearTimeout(timer);
38218
- resolve17();
38271
+ resolve18();
38219
38272
  }, 500);
38220
38273
  });
38221
38274
  });
@@ -38718,14 +38771,14 @@ var DevServer = class _DevServer {
38718
38771
  child.stderr?.on("data", (d) => {
38719
38772
  stderr += d.toString();
38720
38773
  });
38721
- await new Promise((resolve17) => {
38774
+ await new Promise((resolve18) => {
38722
38775
  const timer = setTimeout(() => {
38723
38776
  child.kill();
38724
- resolve17();
38777
+ resolve18();
38725
38778
  }, timeout);
38726
38779
  child.on("exit", () => {
38727
38780
  clearTimeout(timer);
38728
- resolve17();
38781
+ resolve18();
38729
38782
  });
38730
38783
  });
38731
38784
  const elapsed = Date.now() - start;
@@ -39395,14 +39448,14 @@ data: ${JSON.stringify(msg.data)}
39395
39448
  res.end(JSON.stringify(data, null, 2));
39396
39449
  }
39397
39450
  async readBody(req) {
39398
- return new Promise((resolve17) => {
39451
+ return new Promise((resolve18) => {
39399
39452
  let body = "";
39400
39453
  req.on("data", (chunk) => body += chunk);
39401
39454
  req.on("end", () => {
39402
39455
  try {
39403
- resolve17(JSON.parse(body));
39456
+ resolve18(JSON.parse(body));
39404
39457
  } catch {
39405
- resolve17({});
39458
+ resolve18({});
39406
39459
  }
39407
39460
  });
39408
39461
  });
@@ -39940,7 +39993,7 @@ async function waitForReady(endpoint, timeoutMs = STARTUP_TIMEOUT_MS, requiredRe
39940
39993
  const deadline = Date.now() + timeoutMs;
39941
39994
  while (Date.now() < deadline) {
39942
39995
  if (await canConnect(endpoint, requiredRequestTypes)) return;
39943
- await new Promise((resolve17) => setTimeout(resolve17, STARTUP_POLL_MS));
39996
+ await new Promise((resolve18) => setTimeout(resolve18, STARTUP_POLL_MS));
39944
39997
  }
39945
39998
  throw new Error(`Session host did not become ready within ${timeoutMs}ms`);
39946
39999
  }
@@ -40120,10 +40173,10 @@ async function installExtension(ide, extension) {
40120
40173
  const buffer = Buffer.from(await res.arrayBuffer());
40121
40174
  const fs17 = await import("fs");
40122
40175
  fs17.writeFileSync(vsixPath, buffer);
40123
- return new Promise((resolve17) => {
40176
+ return new Promise((resolve18) => {
40124
40177
  const cmd = `"${ide.cliCommand}" --install-extension "${vsixPath}" --force`;
40125
40178
  (0, import_child_process10.exec)(cmd, { timeout: 6e4 }, (error, _stdout, stderr) => {
40126
- resolve17({
40179
+ resolve18({
40127
40180
  extensionId: extension.id,
40128
40181
  marketplaceId: extension.marketplaceId,
40129
40182
  success: !error,
@@ -40136,11 +40189,11 @@ async function installExtension(ide, extension) {
40136
40189
  } catch (e) {
40137
40190
  }
40138
40191
  }
40139
- return new Promise((resolve17) => {
40192
+ return new Promise((resolve18) => {
40140
40193
  const cmd = `"${ide.cliCommand}" --install-extension ${extension.marketplaceId} --force`;
40141
40194
  (0, import_child_process10.exec)(cmd, { timeout: 6e4 }, (error, stdout, stderr) => {
40142
40195
  if (error) {
40143
- resolve17({
40196
+ resolve18({
40144
40197
  extensionId: extension.id,
40145
40198
  marketplaceId: extension.marketplaceId,
40146
40199
  success: false,
@@ -40148,7 +40201,7 @@ async function installExtension(ide, extension) {
40148
40201
  error: stderr || error.message
40149
40202
  });
40150
40203
  } else {
40151
- resolve17({
40204
+ resolve18({
40152
40205
  extensionId: extension.id,
40153
40206
  marketplaceId: extension.marketplaceId,
40154
40207
  success: true,