adhdev 0.8.56 → 0.8.58

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
@@ -44,9 +44,16 @@ __export(config_exports, {
44
44
  loadConfig: () => loadConfig,
45
45
  markSetupComplete: () => markSetupComplete,
46
46
  resetConfig: () => resetConfig,
47
+ resolveProviderSourceMode: () => resolveProviderSourceMode,
47
48
  saveConfig: () => saveConfig,
48
49
  updateConfig: () => updateConfig
49
50
  });
51
+ function resolveProviderSourceMode(providerSourceMode, legacyDisableUpstream) {
52
+ if (providerSourceMode === "normal" || providerSourceMode === "no-upstream") {
53
+ return providerSourceMode;
54
+ }
55
+ return legacyDisableUpstream === true ? "no-upstream" : "normal";
56
+ }
50
57
  function isPlainObject(value) {
51
58
  return !!value && typeof value === "object" && !Array.isArray(value);
52
59
  }
@@ -84,7 +91,7 @@ function normalizeConfig(raw) {
84
91
  registeredMachineId: asOptionalString(parsed.registeredMachineId),
85
92
  providerSettings: isPlainObject(parsed.providerSettings) ? parsed.providerSettings : {},
86
93
  ideSettings: isPlainObject(parsed.ideSettings) ? parsed.ideSettings : {},
87
- disableUpstream: asBoolean(parsed.disableUpstream, DEFAULT_CONFIG.disableUpstream ?? false),
94
+ providerSourceMode: resolveProviderSourceMode(parsed.providerSourceMode, parsed.disableUpstream),
88
95
  providerDir: asOptionalString(parsed.providerDir),
89
96
  terminalSizingMode: parsed.terminalSizingMode === "fit" ? "fit" : "measured"
90
97
  };
@@ -233,7 +240,7 @@ var init_config = __esm({
233
240
  registeredMachineId: void 0,
234
241
  providerSettings: {},
235
242
  ideSettings: {},
236
- disableUpstream: false,
243
+ providerSourceMode: "normal",
237
244
  terminalSizingMode: "measured"
238
245
  };
239
246
  MACHINE_ID_PREFIX = "mach_";
@@ -733,15 +740,15 @@ function resolveCommandPath(command) {
733
740
  return null;
734
741
  }
735
742
  function execAsync(cmd, timeoutMs = 5e3) {
736
- return new Promise((resolve16) => {
743
+ return new Promise((resolve15) => {
737
744
  const child = (0, import_child_process2.exec)(cmd, { encoding: "utf-8", timeout: timeoutMs }, (err, stdout) => {
738
745
  if (err || !stdout?.trim()) {
739
- resolve16(null);
746
+ resolve15(null);
740
747
  } else {
741
- resolve16(stdout.trim());
748
+ resolve15(stdout.trim());
742
749
  }
743
750
  });
744
- child.on("error", () => resolve16(null));
751
+ child.on("error", () => resolve15(null));
745
752
  });
746
753
  }
747
754
  async function detectCLIs(providerLoader, options) {
@@ -1187,7 +1194,7 @@ var init_manager = __esm({
1187
1194
  * Returns multiple entries if multiple IDE windows are open on same port
1188
1195
  */
1189
1196
  static listAllTargets(port) {
1190
- return new Promise((resolve16) => {
1197
+ return new Promise((resolve15) => {
1191
1198
  const req = http.get(`http://127.0.0.1:${port}/json`, (res) => {
1192
1199
  let data = "";
1193
1200
  res.on("data", (chunk) => data += chunk.toString());
@@ -1203,16 +1210,16 @@ var init_manager = __esm({
1203
1210
  (t) => !isNonMain(t.title || "") && t.url?.includes("workbench.html") && !t.url?.includes("agent")
1204
1211
  );
1205
1212
  const fallbackPages = pages.filter((t) => !isNonMain(t.title || ""));
1206
- resolve16(mainPages.length > 0 ? mainPages : fallbackPages);
1213
+ resolve15(mainPages.length > 0 ? mainPages : fallbackPages);
1207
1214
  } catch {
1208
- resolve16([]);
1215
+ resolve15([]);
1209
1216
  }
1210
1217
  });
1211
1218
  });
1212
- req.on("error", () => resolve16([]));
1219
+ req.on("error", () => resolve15([]));
1213
1220
  req.setTimeout(2e3, () => {
1214
1221
  req.destroy();
1215
- resolve16([]);
1222
+ resolve15([]);
1216
1223
  });
1217
1224
  });
1218
1225
  }
@@ -1252,7 +1259,7 @@ var init_manager = __esm({
1252
1259
  }
1253
1260
  }
1254
1261
  findTargetOnPort(port) {
1255
- return new Promise((resolve16) => {
1262
+ return new Promise((resolve15) => {
1256
1263
  const req = http.get(`http://127.0.0.1:${port}/json`, (res) => {
1257
1264
  let data = "";
1258
1265
  res.on("data", (chunk) => data += chunk.toString());
@@ -1263,7 +1270,7 @@ var init_manager = __esm({
1263
1270
  (t) => (t.type === "page" || t.type === "browser" || t.type === "Page") && t.webSocketDebuggerUrl
1264
1271
  );
1265
1272
  if (pages.length === 0) {
1266
- resolve16(targets.find((t) => t.webSocketDebuggerUrl) || null);
1273
+ resolve15(targets.find((t) => t.webSocketDebuggerUrl) || null);
1267
1274
  return;
1268
1275
  }
1269
1276
  const mainPages = pages.filter((t) => !this.isNonMainTitle(t.title || ""));
@@ -1273,24 +1280,24 @@ var init_manager = __esm({
1273
1280
  const specific = list.find((t) => t.id === this._targetId);
1274
1281
  if (specific) {
1275
1282
  this._pageTitle = specific.title || "";
1276
- resolve16(specific);
1283
+ resolve15(specific);
1277
1284
  } else {
1278
1285
  this.log(`[CDP] Target ${this._targetId} not found in page list`);
1279
- resolve16(null);
1286
+ resolve15(null);
1280
1287
  }
1281
1288
  return;
1282
1289
  }
1283
1290
  this._pageTitle = list[0]?.title || "";
1284
- resolve16(list[0]);
1291
+ resolve15(list[0]);
1285
1292
  } catch {
1286
- resolve16(null);
1293
+ resolve15(null);
1287
1294
  }
1288
1295
  });
1289
1296
  });
1290
- req.on("error", () => resolve16(null));
1297
+ req.on("error", () => resolve15(null));
1291
1298
  req.setTimeout(2e3, () => {
1292
1299
  req.destroy();
1293
- resolve16(null);
1300
+ resolve15(null);
1294
1301
  });
1295
1302
  });
1296
1303
  }
@@ -1301,7 +1308,7 @@ var init_manager = __esm({
1301
1308
  this.extensionProviders = providers;
1302
1309
  }
1303
1310
  connectToTarget(wsUrl) {
1304
- return new Promise((resolve16) => {
1311
+ return new Promise((resolve15) => {
1305
1312
  this.ws = new import_ws.default(wsUrl);
1306
1313
  this.ws.on("open", async () => {
1307
1314
  this._connected = true;
@@ -1311,17 +1318,17 @@ var init_manager = __esm({
1311
1318
  }
1312
1319
  this.connectBrowserWs().catch(() => {
1313
1320
  });
1314
- resolve16(true);
1321
+ resolve15(true);
1315
1322
  });
1316
1323
  this.ws.on("message", (data) => {
1317
1324
  try {
1318
1325
  const msg = JSON.parse(data.toString());
1319
1326
  if (msg.id && this.pending.has(msg.id)) {
1320
- const { resolve: resolve17, reject } = this.pending.get(msg.id);
1327
+ const { resolve: resolve16, reject } = this.pending.get(msg.id);
1321
1328
  this.pending.delete(msg.id);
1322
1329
  this.failureCount = 0;
1323
1330
  if (msg.error) reject(new Error(msg.error.message));
1324
- else resolve17(msg.result);
1331
+ else resolve16(msg.result);
1325
1332
  } else if (msg.method === "Runtime.executionContextCreated") {
1326
1333
  this.contexts.add(msg.params.context.id);
1327
1334
  } else if (msg.method === "Runtime.executionContextDestroyed") {
@@ -1344,7 +1351,7 @@ var init_manager = __esm({
1344
1351
  this.ws.on("error", (err) => {
1345
1352
  this.log(`[CDP] WebSocket error: ${err.message}`);
1346
1353
  this._connected = false;
1347
- resolve16(false);
1354
+ resolve15(false);
1348
1355
  });
1349
1356
  });
1350
1357
  }
@@ -1358,7 +1365,7 @@ var init_manager = __esm({
1358
1365
  return;
1359
1366
  }
1360
1367
  this.log(`[CDP] Connecting browser WS for target discovery...`);
1361
- await new Promise((resolve16, reject) => {
1368
+ await new Promise((resolve15, reject) => {
1362
1369
  this.browserWs = new import_ws.default(browserWsUrl);
1363
1370
  this.browserWs.on("open", async () => {
1364
1371
  this._browserConnected = true;
@@ -1368,16 +1375,16 @@ var init_manager = __esm({
1368
1375
  } catch (e) {
1369
1376
  this.log(`[CDP] setDiscoverTargets failed: ${e.message}`);
1370
1377
  }
1371
- resolve16();
1378
+ resolve15();
1372
1379
  });
1373
1380
  this.browserWs.on("message", (data) => {
1374
1381
  try {
1375
1382
  const msg = JSON.parse(data.toString());
1376
1383
  if (msg.id && this.browserPending.has(msg.id)) {
1377
- const { resolve: resolve17, reject: reject2 } = this.browserPending.get(msg.id);
1384
+ const { resolve: resolve16, reject: reject2 } = this.browserPending.get(msg.id);
1378
1385
  this.browserPending.delete(msg.id);
1379
1386
  if (msg.error) reject2(new Error(msg.error.message));
1380
- else resolve17(msg.result);
1387
+ else resolve16(msg.result);
1381
1388
  }
1382
1389
  } catch {
1383
1390
  }
@@ -1397,31 +1404,31 @@ var init_manager = __esm({
1397
1404
  }
1398
1405
  }
1399
1406
  getBrowserWsUrl() {
1400
- return new Promise((resolve16) => {
1407
+ return new Promise((resolve15) => {
1401
1408
  const req = http.get(`http://127.0.0.1:${this.port}/json/version`, (res) => {
1402
1409
  let data = "";
1403
1410
  res.on("data", (chunk) => data += chunk.toString());
1404
1411
  res.on("end", () => {
1405
1412
  try {
1406
1413
  const info = JSON.parse(data);
1407
- resolve16(info.webSocketDebuggerUrl || null);
1414
+ resolve15(info.webSocketDebuggerUrl || null);
1408
1415
  } catch {
1409
- resolve16(null);
1416
+ resolve15(null);
1410
1417
  }
1411
1418
  });
1412
1419
  });
1413
- req.on("error", () => resolve16(null));
1420
+ req.on("error", () => resolve15(null));
1414
1421
  req.setTimeout(3e3, () => {
1415
1422
  req.destroy();
1416
- resolve16(null);
1423
+ resolve15(null);
1417
1424
  });
1418
1425
  });
1419
1426
  }
1420
1427
  sendBrowser(method, params = {}, timeoutMs = 15e3) {
1421
- return new Promise((resolve16, reject) => {
1428
+ return new Promise((resolve15, reject) => {
1422
1429
  if (!this.browserWs || !this._browserConnected) return reject(new Error("Browser WS not connected"));
1423
1430
  const id = this.browserMsgId++;
1424
- this.browserPending.set(id, { resolve: resolve16, reject });
1431
+ this.browserPending.set(id, { resolve: resolve15, reject });
1425
1432
  this.browserWs.send(JSON.stringify({ id, method, params }));
1426
1433
  setTimeout(() => {
1427
1434
  if (this.browserPending.has(id)) {
@@ -1461,11 +1468,11 @@ var init_manager = __esm({
1461
1468
  }
1462
1469
  // ─── CDP Protocol ────────────────────────────────────────
1463
1470
  sendInternal(method, params = {}, timeoutMs = 15e3) {
1464
- return new Promise((resolve16, reject) => {
1471
+ return new Promise((resolve15, reject) => {
1465
1472
  if (!this.ws || !this._connected) return reject(new Error("CDP not connected"));
1466
1473
  if (this.ws.readyState !== import_ws.default.OPEN) return reject(new Error("WebSocket not open"));
1467
1474
  const id = this.msgId++;
1468
- this.pending.set(id, { resolve: resolve16, reject });
1475
+ this.pending.set(id, { resolve: resolve15, reject });
1469
1476
  this.ws.send(JSON.stringify({ id, method, params }));
1470
1477
  setTimeout(() => {
1471
1478
  if (this.pending.has(id)) {
@@ -1714,7 +1721,7 @@ var init_manager = __esm({
1714
1721
  const browserWs = this.browserWs;
1715
1722
  let msgId = this.browserMsgId;
1716
1723
  const sendWs = (method, params = {}, sessionId) => {
1717
- return new Promise((resolve16, reject) => {
1724
+ return new Promise((resolve15, reject) => {
1718
1725
  const mid = msgId++;
1719
1726
  this.browserMsgId = msgId;
1720
1727
  const handler = (raw) => {
@@ -1723,7 +1730,7 @@ var init_manager = __esm({
1723
1730
  if (msg.id === mid) {
1724
1731
  browserWs.removeListener("message", handler);
1725
1732
  if (msg.error) reject(new Error(msg.error.message || JSON.stringify(msg.error)));
1726
- else resolve16(msg.result);
1733
+ else resolve15(msg.result);
1727
1734
  }
1728
1735
  } catch {
1729
1736
  }
@@ -1924,14 +1931,14 @@ var init_manager = __esm({
1924
1931
  if (!ws || ws.readyState !== import_ws.default.OPEN) {
1925
1932
  throw new Error("CDP not connected");
1926
1933
  }
1927
- return new Promise((resolve16, reject) => {
1934
+ return new Promise((resolve15, reject) => {
1928
1935
  const id = getNextId();
1929
1936
  pendingMap.set(id, {
1930
1937
  resolve: (result) => {
1931
1938
  if (result?.result?.subtype === "error") {
1932
1939
  reject(new Error(result.result.description));
1933
1940
  } else {
1934
- resolve16(result?.result?.value);
1941
+ resolve15(result?.result?.value);
1935
1942
  }
1936
1943
  },
1937
1944
  reject
@@ -1963,10 +1970,10 @@ var init_manager = __esm({
1963
1970
  throw new Error("CDP not connected");
1964
1971
  }
1965
1972
  const sendViaSession = (method, params = {}) => {
1966
- return new Promise((resolve16, reject) => {
1973
+ return new Promise((resolve15, reject) => {
1967
1974
  const pendingMap = this._browserConnected ? this.browserPending : this.pending;
1968
1975
  const id = this._browserConnected ? this.browserMsgId++ : this.msgId++;
1969
- pendingMap.set(id, { resolve: resolve16, reject });
1976
+ pendingMap.set(id, { resolve: resolve15, reject });
1970
1977
  ws.send(JSON.stringify({ id, sessionId, method, params }));
1971
1978
  setTimeout(() => {
1972
1979
  if (pendingMap.has(id)) {
@@ -2801,6 +2808,7 @@ function listSavedHistorySessions(agentType, options = {}) {
2801
2808
  let lastMessageAt = 0;
2802
2809
  let sessionTitle = "";
2803
2810
  let preview = "";
2811
+ let workspace = "";
2804
2812
  for (const file2 of files.sort()) {
2805
2813
  const filePath = path7.join(dir, file2);
2806
2814
  const content = fs3.readFileSync(filePath, "utf-8");
@@ -2813,6 +2821,10 @@ function listSavedHistorySessions(agentType, options = {}) {
2813
2821
  parsed = null;
2814
2822
  }
2815
2823
  if (!parsed || parsed.historySessionId !== historySessionId) continue;
2824
+ if (parsed.kind === "session_start") {
2825
+ if (!workspace && parsed.workspace) workspace = parsed.workspace;
2826
+ continue;
2827
+ }
2816
2828
  messageCount += 1;
2817
2829
  if (!firstMessageAt || parsed.receivedAt < firstMessageAt) firstMessageAt = parsed.receivedAt;
2818
2830
  if (!lastMessageAt || parsed.receivedAt > lastMessageAt) lastMessageAt = parsed.receivedAt;
@@ -2827,7 +2839,8 @@ function listSavedHistorySessions(agentType, options = {}) {
2827
2839
  messageCount,
2828
2840
  firstMessageAt,
2829
2841
  lastMessageAt,
2830
- preview: preview || void 0
2842
+ preview: preview || void 0,
2843
+ workspace: workspace || void 0
2831
2844
  });
2832
2845
  }
2833
2846
  summaries.sort((a, b) => b.lastMessageAt - a.lastMessageAt);
@@ -3010,6 +3023,30 @@ var init_chat_history = __esm({
3010
3023
  options.historySessionId
3011
3024
  );
3012
3025
  }
3026
+ writeSessionStart(agentType, historySessionId, workspace, instanceId) {
3027
+ const id = String(historySessionId || "").trim();
3028
+ const ws = String(workspace || "").trim();
3029
+ if (!id || !ws) return;
3030
+ try {
3031
+ const dir = path7.join(HISTORY_DIR, this.sanitize(agentType));
3032
+ fs3.mkdirSync(dir, { recursive: true });
3033
+ const date5 = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
3034
+ const filePath = path7.join(dir, `${this.sanitize(id)}_${date5}.jsonl`);
3035
+ const record2 = {
3036
+ ts: (/* @__PURE__ */ new Date()).toISOString(),
3037
+ receivedAt: Date.now(),
3038
+ role: "system",
3039
+ kind: "session_start",
3040
+ content: ws,
3041
+ agent: agentType,
3042
+ instanceId,
3043
+ historySessionId: id,
3044
+ workspace: ws
3045
+ };
3046
+ fs3.appendFileSync(filePath, JSON.stringify(record2) + "\n", "utf-8");
3047
+ } catch {
3048
+ }
3049
+ }
3013
3050
  promoteHistorySession(agentType, previousHistorySessionId, nextHistorySessionId) {
3014
3051
  const fromId = String(previousHistorySessionId || "").trim();
3015
3052
  const toId = String(nextHistorySessionId || "").trim();
@@ -5602,7 +5639,7 @@ function getStateLastSignature(state) {
5602
5639
  async function getStableExtensionBaseline(h) {
5603
5640
  const first = await readExtensionChatState(h);
5604
5641
  if (getStateMessageCount(first) > 0 || getStateLastSignature(first)) return first;
5605
- await new Promise((resolve16) => setTimeout(resolve16, 150));
5642
+ await new Promise((resolve15) => setTimeout(resolve15, 150));
5606
5643
  const second = await readExtensionChatState(h);
5607
5644
  return getStateMessageCount(second) >= getStateMessageCount(first) ? second : first;
5608
5645
  }
@@ -5610,7 +5647,7 @@ async function verifyExtensionSendObserved(h, before) {
5610
5647
  const beforeCount = getStateMessageCount(before);
5611
5648
  const beforeSignature = getStateLastSignature(before);
5612
5649
  for (let attempt = 0; attempt < 12; attempt += 1) {
5613
- await new Promise((resolve16) => setTimeout(resolve16, 250));
5650
+ await new Promise((resolve15) => setTimeout(resolve15, 250));
5614
5651
  const state = await readExtensionChatState(h);
5615
5652
  if (state?.status === "waiting_approval") return true;
5616
5653
  const afterCount = getStateMessageCount(state);
@@ -6820,6 +6857,32 @@ var init_cdp_commands = __esm({
6820
6857
  }
6821
6858
  });
6822
6859
 
6860
+ // ../../oss/packages/daemon-core/src/config/provider-source-config.ts
6861
+ function normalizeProviderDir(value) {
6862
+ if (typeof value !== "string") return void 0;
6863
+ const trimmed = value.trim();
6864
+ return trimmed ? trimmed : void 0;
6865
+ }
6866
+ function parseProviderSourceConfigUpdate(input) {
6867
+ const updates = {};
6868
+ if (Object.prototype.hasOwnProperty.call(input, "providerSourceMode")) {
6869
+ const { providerSourceMode } = input;
6870
+ if (providerSourceMode !== "normal" && providerSourceMode !== "no-upstream") {
6871
+ return { ok: false, error: "providerSourceMode must be 'normal' or 'no-upstream'" };
6872
+ }
6873
+ updates.providerSourceMode = providerSourceMode;
6874
+ }
6875
+ if (Object.prototype.hasOwnProperty.call(input, "providerDir")) {
6876
+ updates.providerDir = normalizeProviderDir(input.providerDir);
6877
+ }
6878
+ return { ok: true, updates };
6879
+ }
6880
+ var init_provider_source_config = __esm({
6881
+ "../../oss/packages/daemon-core/src/config/provider-source-config.ts"() {
6882
+ "use strict";
6883
+ }
6884
+ });
6885
+
6823
6886
  // ../../oss/packages/daemon-core/src/providers/cli-script-results.ts
6824
6887
  function parseCliScriptResult(result) {
6825
6888
  if (typeof result === "string") {
@@ -6936,6 +6999,38 @@ async function handleSetProviderSetting(h, args) {
6936
6999
  }
6937
7000
  return { success: false, error: `Failed to set ${providerType}.${key} \u2014 invalid key, value, or not a public setting` };
6938
7001
  }
7002
+ function handleGetProviderSourceConfig(h, _args) {
7003
+ const loader = h.ctx.providerLoader;
7004
+ if (!loader) return { success: false, error: "providerLoader not available" };
7005
+ return { success: true, ...loader.getSourceConfig() };
7006
+ }
7007
+ async function handleSetProviderSourceConfig(h, args) {
7008
+ const loader = h.ctx.providerLoader;
7009
+ if (!loader) return { success: false, error: "providerLoader not available" };
7010
+ const parsed = parseProviderSourceConfigUpdate(args || {});
7011
+ if ("error" in parsed) {
7012
+ return { success: false, error: parsed.error };
7013
+ }
7014
+ const currentConfig2 = loadConfig();
7015
+ const nextConfig = {
7016
+ ...currentConfig2,
7017
+ ...parsed.updates.providerSourceMode ? { providerSourceMode: parsed.updates.providerSourceMode } : {},
7018
+ ...Object.prototype.hasOwnProperty.call(parsed.updates, "providerDir") ? { providerDir: parsed.updates.providerDir } : {}
7019
+ };
7020
+ saveConfig(nextConfig);
7021
+ const sourceConfig = loader.applySourceConfig({
7022
+ sourceMode: nextConfig.providerSourceMode,
7023
+ userDir: Object.prototype.hasOwnProperty.call(parsed.updates, "providerDir") ? parsed.updates.providerDir : loader.getSourceConfig().explicitProviderDir || void 0
7024
+ });
7025
+ loader.reload();
7026
+ loader.registerToDetector();
7027
+ await h.ctx.onProviderSourceConfigChanged?.();
7028
+ LOG.info(
7029
+ "Command",
7030
+ `[set_provider_source_config] mode=${sourceConfig.sourceMode} explicitProviderDir=${sourceConfig.explicitProviderDir || "-"} userDir=${sourceConfig.userDir}`
7031
+ );
7032
+ return { success: true, reloaded: true, ...sourceConfig };
7033
+ }
6939
7034
  function normalizeProviderScriptArgs(args) {
6940
7035
  const normalizedArgs = { ...args || {} };
6941
7036
  for (const key of ["mode", "model", "message", "action", "button", "text", "sessionId", "value"]) {
@@ -7129,6 +7224,8 @@ function handleSetIdeExtension(h, args) {
7129
7224
  var init_stream_commands = __esm({
7130
7225
  "../../oss/packages/daemon-core/src/commands/stream-commands.ts"() {
7131
7226
  "use strict";
7227
+ init_config();
7228
+ init_provider_source_config();
7132
7229
  init_cli_script_results();
7133
7230
  init_control_effects();
7134
7231
  init_logger();
@@ -7656,6 +7753,10 @@ var init_handler = __esm({
7656
7753
  return handleGetProviderSettings(this, args);
7657
7754
  case "set_provider_setting":
7658
7755
  return handleSetProviderSetting(this, args);
7756
+ case "get_provider_source_config":
7757
+ return handleGetProviderSourceConfig(this, args);
7758
+ case "set_provider_source_config":
7759
+ return handleSetProviderSourceConfig(this, args);
7659
7760
  // ─── IDE Extension Settings (stream-commands.ts) ──────────
7660
7761
  case "get_ide_extensions":
7661
7762
  return handleGetIdeExtensions(this, args);
@@ -7695,7 +7796,7 @@ var init_handler = __esm({
7695
7796
  try {
7696
7797
  const http3 = await import("http");
7697
7798
  const postData = JSON.stringify(body);
7698
- const result = await new Promise((resolve16, reject) => {
7799
+ const result = await new Promise((resolve15, reject) => {
7699
7800
  const req = http3.request({
7700
7801
  hostname: "127.0.0.1",
7701
7802
  port: 19280,
@@ -7707,9 +7808,9 @@ var init_handler = __esm({
7707
7808
  res.on("data", (chunk) => data += chunk);
7708
7809
  res.on("end", () => {
7709
7810
  try {
7710
- resolve16(JSON.parse(data));
7811
+ resolve15(JSON.parse(data));
7711
7812
  } catch {
7712
- resolve16({ raw: data });
7813
+ resolve15({ raw: data });
7713
7814
  }
7714
7815
  });
7715
7816
  });
@@ -7727,15 +7828,15 @@ var init_handler = __esm({
7727
7828
  if (!providerType) return { success: false, error: "providerType required" };
7728
7829
  try {
7729
7830
  const http3 = await import("http");
7730
- const result = await new Promise((resolve16, reject) => {
7831
+ const result = await new Promise((resolve15, reject) => {
7731
7832
  http3.get(`http://127.0.0.1:19280/api/providers/${providerType}/${endpoint}`, (res) => {
7732
7833
  let data = "";
7733
7834
  res.on("data", (chunk) => data += chunk);
7734
7835
  res.on("end", () => {
7735
7836
  try {
7736
- resolve16(JSON.parse(data));
7837
+ resolve15(JSON.parse(data));
7737
7838
  } catch {
7738
- resolve16({ raw: data });
7839
+ resolve15({ raw: data });
7739
7840
  }
7740
7841
  });
7741
7842
  }).on("error", reject);
@@ -7749,7 +7850,7 @@ var init_handler = __esm({
7749
7850
  try {
7750
7851
  const http3 = await import("http");
7751
7852
  const postData = JSON.stringify(args || {});
7752
- const result = await new Promise((resolve16, reject) => {
7853
+ const result = await new Promise((resolve15, reject) => {
7753
7854
  const req = http3.request({
7754
7855
  hostname: "127.0.0.1",
7755
7856
  port: 19280,
@@ -7761,9 +7862,9 @@ var init_handler = __esm({
7761
7862
  res.on("data", (chunk) => data += chunk);
7762
7863
  res.on("end", () => {
7763
7864
  try {
7764
- resolve16(JSON.parse(data));
7865
+ resolve15(JSON.parse(data));
7765
7866
  } catch {
7766
- resolve16({ raw: data });
7867
+ resolve15({ raw: data });
7767
7868
  }
7768
7869
  });
7769
7870
  });
@@ -9947,7 +10048,7 @@ var init_provider_cli_adapter = __esm({
9947
10048
  `[${this.cliType}] Waiting for interactive prompt: hasPrompt=${hasPrompt} stableMs=${stableMs} recentOutputMs=${recentlyOutput} status=${status} startup=${startupLikelyActive} screen=${JSON.stringify(summarizeCliTraceText(screenText, 220)).slice(0, 260)}`
9948
10049
  );
9949
10050
  }
9950
- await new Promise((resolve16) => setTimeout(resolve16, 50));
10051
+ await new Promise((resolve15) => setTimeout(resolve15, 50));
9951
10052
  }
9952
10053
  const finalScreenText = this.terminalScreen.getText() || "";
9953
10054
  LOG.warn(
@@ -10520,7 +10621,7 @@ ${data.message || ""}`.trim();
10520
10621
  const deadline = Date.now() + 1e4;
10521
10622
  while (this.startupParseGate && Date.now() < deadline) {
10522
10623
  this.resolveStartupState("send_wait");
10523
- await new Promise((resolve16) => setTimeout(resolve16, 50));
10624
+ await new Promise((resolve15) => setTimeout(resolve15, 50));
10524
10625
  }
10525
10626
  }
10526
10627
  await this.waitForInteractivePrompt();
@@ -10590,12 +10691,12 @@ ${data.message || ""}`.trim();
10590
10691
  if (this.isWaitingForResponse) this.finishResponse();
10591
10692
  }, this.timeouts.maxResponse);
10592
10693
  };
10593
- await new Promise((resolve16) => {
10694
+ await new Promise((resolve15) => {
10594
10695
  let resolved = false;
10595
10696
  const resolveOnce = () => {
10596
10697
  if (resolved) return;
10597
10698
  resolved = true;
10598
- resolve16();
10699
+ resolve15();
10599
10700
  };
10600
10701
  const submit = () => {
10601
10702
  if (!this.ptyProcess) {
@@ -10769,17 +10870,17 @@ ${data.message || ""}`.trim();
10769
10870
  }
10770
10871
  }
10771
10872
  waitForStopped(timeoutMs) {
10772
- return new Promise((resolve16) => {
10873
+ return new Promise((resolve15) => {
10773
10874
  const startedAt = Date.now();
10774
10875
  const timer = setInterval(() => {
10775
10876
  if (!this.ptyProcess || this.currentStatus === "stopped") {
10776
10877
  clearInterval(timer);
10777
- resolve16(true);
10878
+ resolve15(true);
10778
10879
  return;
10779
10880
  }
10780
10881
  if (Date.now() - startedAt >= timeoutMs) {
10781
10882
  clearInterval(timer);
10782
- resolve16(false);
10883
+ resolve15(false);
10783
10884
  }
10784
10885
  }, 100);
10785
10886
  });
@@ -11069,6 +11170,9 @@ function getForcedNewSessionScriptName(provider, launchMode) {
11069
11170
  const controls = Array.isArray(provider.controls) ? provider.controls : [];
11070
11171
  for (const control of controls) {
11071
11172
  if (control?.type !== "action") continue;
11173
+ if (typeof control?.confirmTitle === "string" && control.confirmTitle.trim()) continue;
11174
+ if (typeof control?.confirmMessage === "string" && control.confirmMessage.trim()) continue;
11175
+ if (typeof control?.confirmLabel === "string" && control.confirmLabel.trim()) continue;
11072
11176
  const invokeScript = typeof control?.invokeScript === "string" ? control.invokeScript.trim() : "";
11073
11177
  if (!invokeScript) continue;
11074
11178
  const controlId = typeof control?.id === "string" ? control.id.trim() : "";
@@ -11078,6 +11182,20 @@ function getForcedNewSessionScriptName(provider, launchMode) {
11078
11182
  }
11079
11183
  return null;
11080
11184
  }
11185
+ async function waitForCliAdapterReady(adapter, options) {
11186
+ const timeoutMs = Math.max(100, options?.timeoutMs ?? 15e3);
11187
+ const pollMs = Math.max(10, options?.pollMs ?? 50);
11188
+ const deadline = Date.now() + timeoutMs;
11189
+ while (Date.now() < deadline) {
11190
+ if (adapter?.isReady?.()) return;
11191
+ const status = adapter?.getStatus?.()?.status;
11192
+ if (status === "stopped") {
11193
+ throw new Error("CLI runtime stopped before it became ready");
11194
+ }
11195
+ await new Promise((resolve15) => setTimeout(resolve15, pollMs));
11196
+ }
11197
+ throw new Error(`CLI runtime did not become ready within ${timeoutMs}ms`);
11198
+ }
11081
11199
  var os13, path11, crypto3, fs5, import_node_module, CachedDatabaseSync, CliProviderInstance;
11082
11200
  var init_cli_provider_instance = __esm({
11083
11201
  "../../oss/packages/daemon-core/src/providers/cli-provider-instance.ts"() {
@@ -11374,6 +11492,7 @@ var init_cli_provider_instance = __esm({
11374
11492
  const scriptName = getForcedNewSessionScriptName(this.provider, this.launchMode);
11375
11493
  if (!scriptName) return;
11376
11494
  LOG.info("CLI", `[${this.type}] forcing fresh session launch via script: ${scriptName}`);
11495
+ await waitForCliAdapterReady(this.adapter);
11377
11496
  const raw = await this.adapter.invokeScript(scriptName, {});
11378
11497
  const parsed = parseCliScriptResult(raw);
11379
11498
  if (!parsed.success) {
@@ -11723,6 +11842,7 @@ ${effect.notification.body || ""}`.trim();
11723
11842
  const previousProviderSessionId = this.providerSessionId;
11724
11843
  this.providerSessionId = nextSessionId;
11725
11844
  this.historyWriter.promoteHistorySession(this.type, previousHistorySessionId, nextSessionId);
11845
+ this.historyWriter.writeSessionStart(this.type, nextSessionId, this.workingDir, this.instanceId);
11726
11846
  this.adapter.updateRuntimeMeta({ providerSessionId: nextSessionId });
11727
11847
  this.onProviderSessionResolved?.({
11728
11848
  instanceId: this.instanceId,
@@ -27826,8 +27946,8 @@ var init_acp = __esm({
27826
27946
  this.#requestHandler = requestHandler;
27827
27947
  this.#notificationHandler = notificationHandler;
27828
27948
  this.#stream = stream;
27829
- this.#closedPromise = new Promise((resolve16) => {
27830
- this.#abortController.signal.addEventListener("abort", () => resolve16());
27949
+ this.#closedPromise = new Promise((resolve15) => {
27950
+ this.#abortController.signal.addEventListener("abort", () => resolve15());
27831
27951
  });
27832
27952
  this.#receive();
27833
27953
  }
@@ -27976,8 +28096,8 @@ var init_acp = __esm({
27976
28096
  }
27977
28097
  async sendRequest(method, params) {
27978
28098
  const id = this.#nextRequestId++;
27979
- const responsePromise = new Promise((resolve16, reject) => {
27980
- this.#pendingResponses.set(id, { resolve: resolve16, reject });
28099
+ const responsePromise = new Promise((resolve15, reject) => {
28100
+ this.#pendingResponses.set(id, { resolve: resolve15, reject });
27981
28101
  });
27982
28102
  await this.#sendMessage({ jsonrpc: "2.0", id, method, params });
27983
28103
  return responsePromise;
@@ -28613,13 +28733,13 @@ var init_acp_provider_instance = __esm({
28613
28733
  }
28614
28734
  this.currentStatus = "waiting_approval";
28615
28735
  this.detectStatusTransition();
28616
- const approved = await new Promise((resolve16) => {
28617
- this.permissionResolvers.push(resolve16);
28736
+ const approved = await new Promise((resolve15) => {
28737
+ this.permissionResolvers.push(resolve15);
28618
28738
  setTimeout(() => {
28619
- const idx = this.permissionResolvers.indexOf(resolve16);
28739
+ const idx = this.permissionResolvers.indexOf(resolve15);
28620
28740
  if (idx >= 0) {
28621
28741
  this.permissionResolvers.splice(idx, 1);
28622
- resolve16(false);
28742
+ resolve15(false);
28623
28743
  }
28624
28744
  }, 3e5);
28625
28745
  });
@@ -30750,7 +30870,7 @@ var init_handler2 = __esm({
30750
30870
  this._addToNodeFs(path30, initialAdd, wh, depth + 1);
30751
30871
  }
30752
30872
  }).on(EV.ERROR, this._boundHandleError);
30753
- return new Promise((resolve16, reject) => {
30873
+ return new Promise((resolve15, reject) => {
30754
30874
  if (!stream)
30755
30875
  return reject();
30756
30876
  stream.once(STR_END, () => {
@@ -30759,7 +30879,7 @@ var init_handler2 = __esm({
30759
30879
  return;
30760
30880
  }
30761
30881
  const wasThrottled = throttler ? throttler.clear() : false;
30762
- resolve16(void 0);
30882
+ resolve15(void 0);
30763
30883
  previous.getChildren().filter((item) => {
30764
30884
  return item !== directory && !current.has(item);
30765
30885
  }).forEach((item) => {
@@ -31644,6 +31764,9 @@ function validateProviderDefinition(raw) {
31644
31764
  warnings.push(`Unknown provider field: ${key}`);
31645
31765
  }
31646
31766
  }
31767
+ if (provider.disableUpstream !== void 0) {
31768
+ warnings.push("disableUpstream is deprecated in provider definitions; use machine-level provider source policy instead");
31769
+ }
31647
31770
  const category = provider.category;
31648
31771
  if (category === "cli" || category === "acp") {
31649
31772
  const spawn6 = provider.spawn;
@@ -31773,8 +31896,11 @@ var init_provider_loader = __esm({
31773
31896
  ProviderLoader = class _ProviderLoader {
31774
31897
  providers = /* @__PURE__ */ new Map();
31775
31898
  providerAvailability = /* @__PURE__ */ new Map();
31899
+ defaultProvidersDir;
31900
+ explicitProviderDir = null;
31776
31901
  userDir;
31777
31902
  upstreamDir;
31903
+ sourceMode = "normal";
31778
31904
  disableUpstream;
31779
31905
  watchers = [];
31780
31906
  logFn;
@@ -31788,22 +31914,15 @@ var init_provider_loader = __esm({
31788
31914
  static META_FILE = ".meta.json";
31789
31915
  constructor(options) {
31790
31916
  this.logFn = options?.logFn || LOG.forComponent("Provider").asLogFn();
31791
- const defaultProvidersDir = path14.join(os15.homedir(), ".adhdev", "providers");
31792
- if (options?.userDir) {
31793
- this.userDir = options.userDir;
31794
- this.log(`Config 'providerDir' applied: ${this.userDir}`);
31795
- } else {
31796
- const localRepoPath = path14.resolve(__dirname, "../../../../../adhdev-providers");
31797
- if (fs6.existsSync(localRepoPath)) {
31798
- this.userDir = localRepoPath;
31799
- this.log(`Auto-detected local public repository: ${this.userDir} (Dev workspace speedup)`);
31800
- } else {
31801
- this.userDir = defaultProvidersDir;
31802
- this.log(`Using default user providers directory: ${this.userDir}`);
31803
- }
31804
- }
31805
- this.upstreamDir = path14.join(defaultProvidersDir, ".upstream");
31806
- this.disableUpstream = options?.disableUpstream ?? false;
31917
+ this.defaultProvidersDir = path14.join(os15.homedir(), ".adhdev", "providers");
31918
+ this.userDir = this.defaultProvidersDir;
31919
+ this.upstreamDir = path14.join(this.defaultProvidersDir, ".upstream");
31920
+ this.disableUpstream = false;
31921
+ this.applySourceConfig({
31922
+ userDir: options?.userDir,
31923
+ sourceMode: options?.sourceMode,
31924
+ disableUpstream: options?.disableUpstream
31925
+ });
31807
31926
  }
31808
31927
  log(msg) {
31809
31928
  this.logFn(`[ProviderLoader] ${msg}`);
@@ -31828,6 +31947,33 @@ var init_provider_loader = __esm({
31828
31947
  getProviderRoots() {
31829
31948
  return [this.userDir, this.upstreamDir];
31830
31949
  }
31950
+ getSourceConfig() {
31951
+ return {
31952
+ sourceMode: this.sourceMode,
31953
+ disableUpstream: this.disableUpstream,
31954
+ explicitProviderDir: this.explicitProviderDir,
31955
+ userDir: this.userDir,
31956
+ upstreamDir: this.upstreamDir,
31957
+ providerRoots: this.getProviderRoots()
31958
+ };
31959
+ }
31960
+ applySourceConfig(options) {
31961
+ const nextSourceMode = options?.sourceMode === "no-upstream" ? "no-upstream" : options?.sourceMode === "normal" ? "normal" : options?.disableUpstream ? "no-upstream" : this.sourceMode || "normal";
31962
+ if (options && Object.prototype.hasOwnProperty.call(options, "userDir")) {
31963
+ this.explicitProviderDir = options.userDir?.trim() ? options.userDir : null;
31964
+ }
31965
+ this.sourceMode = nextSourceMode;
31966
+ this.userDir = this.explicitProviderDir || this.defaultProvidersDir;
31967
+ this.upstreamDir = path14.join(this.defaultProvidersDir, ".upstream");
31968
+ this.disableUpstream = this.sourceMode === "no-upstream";
31969
+ if (this.explicitProviderDir) {
31970
+ this.log(`Config 'providerDir' applied: ${this.userDir}`);
31971
+ } else {
31972
+ this.log(`Using default user providers directory: ${this.userDir}`);
31973
+ }
31974
+ this.log(`Provider source config: mode=${this.sourceMode} explicitProviderDir=${this.explicitProviderDir || "-"} userDir=${this.userDir} upstreamDir=${this.upstreamDir}`);
31975
+ return this.getSourceConfig();
31976
+ }
31831
31977
  /**
31832
31978
  * Canonical provider directory shape for a given root.
31833
31979
  */
@@ -31878,7 +32024,7 @@ var init_provider_loader = __esm({
31878
32024
  this.log(`Loaded ${upstreamCount} upstream providers (auto-updated)`);
31879
32025
  }
31880
32026
  } else if (this.disableUpstream) {
31881
- this.log("Upstream loading disabled (disableUpstream=true)");
32027
+ this.log("Upstream loading disabled (sourceMode=no-upstream)");
31882
32028
  }
31883
32029
  if (fs6.existsSync(this.userDir)) {
31884
32030
  const userCount = this.loadDir(this.userDir, [".upstream"]);
@@ -32389,7 +32535,7 @@ var init_provider_loader = __esm({
32389
32535
  */
32390
32536
  async fetchLatest() {
32391
32537
  if (this.disableUpstream) {
32392
- this.log("Upstream fetch skipped (disableUpstream=true)");
32538
+ this.log("Upstream fetch skipped (sourceMode=no-upstream)");
32393
32539
  return { updated: false };
32394
32540
  }
32395
32541
  const https = require("https");
@@ -32411,7 +32557,7 @@ var init_provider_loader = __esm({
32411
32557
  return { updated: false };
32412
32558
  }
32413
32559
  try {
32414
- const etag = await new Promise((resolve16, reject) => {
32560
+ const etag = await new Promise((resolve15, reject) => {
32415
32561
  const options = {
32416
32562
  method: "HEAD",
32417
32563
  hostname: "github.com",
@@ -32429,7 +32575,7 @@ var init_provider_loader = __esm({
32429
32575
  headers: { "User-Agent": "adhdev-launcher" },
32430
32576
  timeout: 1e4
32431
32577
  }, (res2) => {
32432
- resolve16(res2.headers.etag || res2.headers["last-modified"] || "");
32578
+ resolve15(res2.headers.etag || res2.headers["last-modified"] || "");
32433
32579
  });
32434
32580
  req2.on("error", reject);
32435
32581
  req2.on("timeout", () => {
@@ -32438,7 +32584,7 @@ var init_provider_loader = __esm({
32438
32584
  });
32439
32585
  req2.end();
32440
32586
  } else {
32441
- resolve16(res.headers.etag || res.headers["last-modified"] || "");
32587
+ resolve15(res.headers.etag || res.headers["last-modified"] || "");
32442
32588
  }
32443
32589
  });
32444
32590
  req.on("error", reject);
@@ -32502,7 +32648,7 @@ var init_provider_loader = __esm({
32502
32648
  downloadFile(url2, destPath) {
32503
32649
  const https = require("https");
32504
32650
  const http3 = require("http");
32505
- return new Promise((resolve16, reject) => {
32651
+ return new Promise((resolve15, reject) => {
32506
32652
  const doRequest = (reqUrl, redirectCount = 0) => {
32507
32653
  if (redirectCount > 5) {
32508
32654
  reject(new Error("Too many redirects"));
@@ -32522,7 +32668,7 @@ var init_provider_loader = __esm({
32522
32668
  res.pipe(ws);
32523
32669
  ws.on("finish", () => {
32524
32670
  ws.close();
32525
- resolve16();
32671
+ resolve15();
32526
32672
  });
32527
32673
  ws.on("error", reject);
32528
32674
  });
@@ -32998,17 +33144,17 @@ async function findFreePort(ports) {
32998
33144
  throw new Error("No free port found");
32999
33145
  }
33000
33146
  function checkPortFree(port) {
33001
- return new Promise((resolve16) => {
33147
+ return new Promise((resolve15) => {
33002
33148
  const server = net2.createServer();
33003
33149
  server.unref();
33004
- server.on("error", () => resolve16(false));
33150
+ server.on("error", () => resolve15(false));
33005
33151
  server.listen(port, "127.0.0.1", () => {
33006
- server.close(() => resolve16(true));
33152
+ server.close(() => resolve15(true));
33007
33153
  });
33008
33154
  });
33009
33155
  }
33010
33156
  async function isCdpActive(port) {
33011
- return new Promise((resolve16) => {
33157
+ return new Promise((resolve15) => {
33012
33158
  const req = require("http").get(`http://127.0.0.1:${port}/json/version`, {
33013
33159
  timeout: 2e3
33014
33160
  }, (res) => {
@@ -33017,16 +33163,16 @@ async function isCdpActive(port) {
33017
33163
  res.on("end", () => {
33018
33164
  try {
33019
33165
  const info = JSON.parse(data);
33020
- resolve16(!!info["WebKit-Version"] || !!info["Browser"]);
33166
+ resolve15(!!info["WebKit-Version"] || !!info["Browser"]);
33021
33167
  } catch {
33022
- resolve16(false);
33168
+ resolve15(false);
33023
33169
  }
33024
33170
  });
33025
33171
  });
33026
- req.on("error", () => resolve16(false));
33172
+ req.on("error", () => resolve15(false));
33027
33173
  req.on("timeout", () => {
33028
33174
  req.destroy();
33029
- resolve16(false);
33175
+ resolve15(false);
33030
33176
  });
33031
33177
  });
33032
33178
  }
@@ -33772,7 +33918,7 @@ async function waitForPidExit(pid, timeoutMs) {
33772
33918
  while (Date.now() - start < timeoutMs) {
33773
33919
  try {
33774
33920
  process.kill(pid, 0);
33775
- await new Promise((resolve16) => setTimeout(resolve16, 250));
33921
+ await new Promise((resolve15) => setTimeout(resolve15, 250));
33776
33922
  } catch {
33777
33923
  return;
33778
33924
  }
@@ -33887,7 +34033,7 @@ async function runDaemonUpgradeHelper(payload) {
33887
34033
  appendUpgradeLog(installOutput.trim());
33888
34034
  }
33889
34035
  if (process.platform === "win32") {
33890
- await new Promise((resolve16) => setTimeout(resolve16, 500));
34036
+ await new Promise((resolve15) => setTimeout(resolve15, 500));
33891
34037
  cleanupStaleGlobalInstallDirs(payload.packageName);
33892
34038
  appendUpgradeLog("Post-install staging cleanup complete");
33893
34039
  }
@@ -34215,8 +34361,9 @@ var init_router = __esm({
34215
34361
  if (!providerType) {
34216
34362
  return { success: false, error: "providerType required" };
34217
34363
  }
34218
- const offset = Math.max(0, Number(args?.offset) || 0);
34219
- const limit = Math.max(1, Math.min(100, Number(args?.limit) || 30));
34364
+ const wantsAll = args?.all === true;
34365
+ const offset = wantsAll ? 0 : Math.max(0, Number(args?.offset) || 0);
34366
+ const limit = wantsAll ? Number.MAX_SAFE_INTEGER : Math.max(1, Math.min(100, Number(args?.limit) || 30));
34220
34367
  const { sessions: historySessions, hasMore } = listSavedHistorySessions(providerType, { offset, limit });
34221
34368
  const state = loadState();
34222
34369
  const savedSessions = getSavedProviderSessions(state, { providerType, kind });
@@ -34237,13 +34384,13 @@ var init_router = __esm({
34237
34384
  providerName: saved?.providerName || recent?.providerName || providerType,
34238
34385
  kind: saved?.kind || recent?.kind || kind,
34239
34386
  title: saved?.title || recent?.title || session.sessionTitle || session.preview || providerType,
34240
- workspace: saved?.workspace || recent?.workspace,
34387
+ workspace: saved?.workspace || recent?.workspace || session.workspace,
34241
34388
  currentModel: saved?.currentModel || recent?.currentModel,
34242
34389
  preview: session.preview,
34243
34390
  messageCount: session.messageCount,
34244
34391
  firstMessageAt: session.firstMessageAt,
34245
34392
  lastMessageAt: session.lastMessageAt,
34246
- canResume: !!(saved?.workspace || recent?.workspace) && canResumeById
34393
+ canResume: !!(saved?.workspace || recent?.workspace || session.workspace) && canResumeById
34247
34394
  };
34248
34395
  }),
34249
34396
  hasMore
@@ -34878,7 +35025,7 @@ var init_provider_adapter = __esm({
34878
35025
  const beforeCount = this.messageCount(before);
34879
35026
  const beforeSignature = this.lastMessageSignature(before);
34880
35027
  for (let attempt = 0; attempt < 12; attempt += 1) {
34881
- await new Promise((resolve16) => setTimeout(resolve16, 250));
35028
+ await new Promise((resolve15) => setTimeout(resolve15, 250));
34882
35029
  let state;
34883
35030
  try {
34884
35031
  state = await this.readChat(evaluate);
@@ -34900,7 +35047,7 @@ var init_provider_adapter = __esm({
34900
35047
  if (this.messageCount(first) > 0 || this.lastMessageSignature(first)) {
34901
35048
  return first;
34902
35049
  }
34903
- await new Promise((resolve16) => setTimeout(resolve16, 150));
35050
+ await new Promise((resolve15) => setTimeout(resolve15, 150));
34904
35051
  const second = await this.readChat(evaluate);
34905
35052
  return this.messageCount(second) >= this.messageCount(first) ? second : first;
34906
35053
  }
@@ -35040,7 +35187,7 @@ var init_provider_adapter = __esm({
35040
35187
  if (typeof data.error === "string" && data.error.trim()) return false;
35041
35188
  }
35042
35189
  for (let attempt = 0; attempt < 6; attempt += 1) {
35043
- await new Promise((resolve16) => setTimeout(resolve16, 250));
35190
+ await new Promise((resolve15) => setTimeout(resolve15, 250));
35044
35191
  const state = await this.readChat(evaluate);
35045
35192
  const title = this.getStateTitle(state);
35046
35193
  if (this.titlesMatch(title, sessionId)) return true;
@@ -37552,7 +37699,7 @@ function getCliTargetBundle(ctx, type, instanceId) {
37552
37699
  return { target, instance, adapter };
37553
37700
  }
37554
37701
  function sleep(ms) {
37555
- return new Promise((resolve16) => setTimeout(resolve16, ms));
37702
+ return new Promise((resolve15) => setTimeout(resolve15, ms));
37556
37703
  }
37557
37704
  async function waitForCliReady(ctx, type, instanceId, timeoutMs) {
37558
37705
  const startedAt = Date.now();
@@ -38404,18 +38551,6 @@ function resolveAutoImplWritableProviderDir(ctx, category, type, requestedDir) {
38404
38551
  if (!fs13.existsSync(providerJson)) {
38405
38552
  return { dir: null, reason: `provider.json not found in writable provider directory: ${desiredDir}` };
38406
38553
  }
38407
- try {
38408
- const providerData = JSON.parse(fs13.readFileSync(providerJson, "utf-8"));
38409
- if (providerData.disableUpstream !== true) {
38410
- providerData.disableUpstream = true;
38411
- fs13.writeFileSync(providerJson, JSON.stringify(providerData, null, 2));
38412
- }
38413
- } catch (error48) {
38414
- return {
38415
- dir: null,
38416
- reason: `Failed to update provider.json in writable provider directory: ${error48.message}`
38417
- };
38418
- }
38419
38554
  return { dir: desiredDir };
38420
38555
  }
38421
38556
  function loadAutoImplReferenceScripts(ctx, referenceType) {
@@ -39714,6 +39849,8 @@ var init_dev_server = __esm({
39714
39849
  fs14 = __toESM(require("fs"));
39715
39850
  path23 = __toESM(require("path"));
39716
39851
  init_provider_schema();
39852
+ init_config();
39853
+ init_provider_source_config();
39717
39854
  init_scaffold_template();
39718
39855
  init_version_archive();
39719
39856
  init_logger();
@@ -39728,6 +39865,7 @@ var init_dev_server = __esm({
39728
39865
  cdpManagers;
39729
39866
  instanceManager;
39730
39867
  cliManager;
39868
+ onProviderSourceConfigChanged;
39731
39869
  logFn;
39732
39870
  sseClients = [];
39733
39871
  watchScriptPath = null;
@@ -39744,6 +39882,7 @@ var init_dev_server = __esm({
39744
39882
  this.cdpManagers = options.cdpManagers;
39745
39883
  this.instanceManager = options.instanceManager || null;
39746
39884
  this.cliManager = options.cliManager || null;
39885
+ this.onProviderSourceConfigChanged = options.onProviderSourceConfigChanged || null;
39747
39886
  this.logFn = options.logFn || LOG.forComponent("DevServer").asLogFn();
39748
39887
  }
39749
39888
  log(msg) {
@@ -39753,6 +39892,8 @@ var init_dev_server = __esm({
39753
39892
  routes = [
39754
39893
  // Static routes
39755
39894
  { method: "GET", pattern: "/api/providers", handler: (q, s) => this.handleListProviders(q, s) },
39895
+ { method: "GET", pattern: "/api/providers/source-config", handler: (q, s) => this.handleGetProviderSourceConfig(q, s) },
39896
+ { method: "POST", pattern: "/api/providers/source-config", handler: (q, s) => this.handleSetProviderSourceConfig(q, s) },
39756
39897
  { method: "GET", pattern: "/api/providers/versions", handler: (q, s) => this.handleDetectVersions(q, s) },
39757
39898
  { method: "POST", pattern: "/api/providers/reload", handler: (q, s) => this.handleReload(q, s) },
39758
39899
  { method: "POST", pattern: "/api/cdp/evaluate", handler: (q, s) => this.handleCdpEvaluate(q, s) },
@@ -39850,15 +39991,15 @@ var init_dev_server = __esm({
39850
39991
  this.json(res, 500, { error: e.message });
39851
39992
  }
39852
39993
  });
39853
- return new Promise((resolve16, reject) => {
39994
+ return new Promise((resolve15, reject) => {
39854
39995
  this.server.listen(port, "127.0.0.1", () => {
39855
39996
  this.log(`Dev server listening on http://127.0.0.1:${port}`);
39856
- resolve16();
39997
+ resolve15();
39857
39998
  });
39858
39999
  this.server.on("error", (e) => {
39859
40000
  if (e.code === "EADDRINUSE") {
39860
40001
  this.log(`Port ${port} in use, skipping dev server`);
39861
- resolve16();
40002
+ resolve15();
39862
40003
  } else {
39863
40004
  reject(e);
39864
40005
  }
@@ -39872,7 +40013,33 @@ var init_dev_server = __esm({
39872
40013
  // ─── Handlers ───
39873
40014
  async handleListProviders(_req, res) {
39874
40015
  const providers = this.providerLoader.getAll().map(toProviderListEntry);
39875
- this.json(res, 200, { providers, count: providers.length });
40016
+ this.json(res, 200, { providers, count: providers.length, sourceConfig: this.providerLoader.getSourceConfig() });
40017
+ }
40018
+ async handleGetProviderSourceConfig(_req, res) {
40019
+ this.json(res, 200, { success: true, sourceConfig: this.providerLoader.getSourceConfig() });
40020
+ }
40021
+ async handleSetProviderSourceConfig(req, res) {
40022
+ const body = await this.readBody(req);
40023
+ const parsed = parseProviderSourceConfigUpdate(body || {});
40024
+ if (!parsed.ok) {
40025
+ this.json(res, 400, { success: false, error: parsed.error });
40026
+ return;
40027
+ }
40028
+ const currentConfig2 = loadConfig();
40029
+ const nextConfig = {
40030
+ ...currentConfig2,
40031
+ ...parsed.updates.providerSourceMode ? { providerSourceMode: parsed.updates.providerSourceMode } : {},
40032
+ ...Object.prototype.hasOwnProperty.call(parsed.updates, "providerDir") ? { providerDir: parsed.updates.providerDir } : {}
40033
+ };
40034
+ saveConfig(nextConfig);
40035
+ const sourceConfig = this.providerLoader.applySourceConfig({
40036
+ sourceMode: nextConfig.providerSourceMode,
40037
+ userDir: Object.prototype.hasOwnProperty.call(parsed.updates, "providerDir") ? parsed.updates.providerDir : this.providerLoader.getSourceConfig().explicitProviderDir || void 0
40038
+ });
40039
+ this.providerLoader.reload();
40040
+ this.providerLoader.registerToDetector();
40041
+ await this.onProviderSourceConfigChanged?.();
40042
+ this.json(res, 200, { success: true, reloaded: true, sourceConfig });
39876
40043
  }
39877
40044
  async handleProviderConfig(type, _req, res) {
39878
40045
  const provider = this.providerLoader.resolve(type);
@@ -39914,20 +40081,20 @@ var init_dev_server = __esm({
39914
40081
  child.stderr?.on("data", (d) => {
39915
40082
  stderr += d.toString().slice(0, 2e3);
39916
40083
  });
39917
- await new Promise((resolve16) => {
40084
+ await new Promise((resolve15) => {
39918
40085
  const timer = setTimeout(() => {
39919
40086
  child.kill();
39920
- resolve16();
40087
+ resolve15();
39921
40088
  }, 3e3);
39922
40089
  child.on("exit", () => {
39923
40090
  clearTimeout(timer);
39924
- resolve16();
40091
+ resolve15();
39925
40092
  });
39926
40093
  child.stdout?.once("data", () => {
39927
40094
  setTimeout(() => {
39928
40095
  child.kill();
39929
40096
  clearTimeout(timer);
39930
- resolve16();
40097
+ resolve15();
39931
40098
  }, 500);
39932
40099
  });
39933
40100
  });
@@ -40423,14 +40590,14 @@ var init_dev_server = __esm({
40423
40590
  child.stderr?.on("data", (d) => {
40424
40591
  stderr += d.toString();
40425
40592
  });
40426
- await new Promise((resolve16) => {
40593
+ await new Promise((resolve15) => {
40427
40594
  const timer = setTimeout(() => {
40428
40595
  child.kill();
40429
- resolve16();
40596
+ resolve15();
40430
40597
  }, timeout);
40431
40598
  child.on("exit", () => {
40432
40599
  clearTimeout(timer);
40433
- resolve16();
40600
+ resolve15();
40434
40601
  });
40435
40602
  });
40436
40603
  const elapsed = Date.now() - start;
@@ -40575,18 +40742,6 @@ var init_dev_server = __esm({
40575
40742
  if (!fs14.existsSync(providerJson)) {
40576
40743
  return { dir: null, reason: `provider.json not found in writable provider directory: ${desiredDir}` };
40577
40744
  }
40578
- try {
40579
- const providerData = JSON.parse(fs14.readFileSync(providerJson, "utf-8"));
40580
- if (providerData.disableUpstream !== true) {
40581
- providerData.disableUpstream = true;
40582
- fs14.writeFileSync(providerJson, JSON.stringify(providerData, null, 2));
40583
- }
40584
- } catch (error48) {
40585
- return {
40586
- dir: null,
40587
- reason: `Failed to update provider.json in writable provider directory: ${error48.message}`
40588
- };
40589
- }
40590
40745
  return { dir: desiredDir };
40591
40746
  }
40592
40747
  async handleAutoImplement(type, req, res) {
@@ -41112,14 +41267,14 @@ data: ${JSON.stringify(msg.data)}
41112
41267
  res.end(JSON.stringify(data, null, 2));
41113
41268
  }
41114
41269
  async readBody(req) {
41115
- return new Promise((resolve16) => {
41270
+ return new Promise((resolve15) => {
41116
41271
  let body = "";
41117
41272
  req.on("data", (chunk) => body += chunk);
41118
41273
  req.on("end", () => {
41119
41274
  try {
41120
- resolve16(JSON.parse(body));
41275
+ resolve15(JSON.parse(body));
41121
41276
  } catch {
41122
- resolve16({});
41277
+ resolve15({});
41123
41278
  }
41124
41279
  });
41125
41280
  });
@@ -41604,7 +41759,7 @@ async function waitForReady(endpoint, timeoutMs = STARTUP_TIMEOUT_MS) {
41604
41759
  const deadline = Date.now() + timeoutMs;
41605
41760
  while (Date.now() < deadline) {
41606
41761
  if (await canConnect(endpoint)) return;
41607
- await new Promise((resolve16) => setTimeout(resolve16, STARTUP_POLL_MS));
41762
+ await new Promise((resolve15) => setTimeout(resolve15, STARTUP_POLL_MS));
41608
41763
  }
41609
41764
  throw new Error(`Session host did not become ready within ${timeoutMs}ms`);
41610
41765
  }
@@ -41768,10 +41923,10 @@ async function installExtension(ide, extension) {
41768
41923
  const buffer = Buffer.from(await res.arrayBuffer());
41769
41924
  const fs24 = await import("fs");
41770
41925
  fs24.writeFileSync(vsixPath, buffer);
41771
- return new Promise((resolve16) => {
41926
+ return new Promise((resolve15) => {
41772
41927
  const cmd = `"${ide.cliCommand}" --install-extension "${vsixPath}" --force`;
41773
41928
  (0, import_child_process10.exec)(cmd, { timeout: 6e4 }, (error48, _stdout, stderr) => {
41774
- resolve16({
41929
+ resolve15({
41775
41930
  extensionId: extension.id,
41776
41931
  marketplaceId: extension.marketplaceId,
41777
41932
  success: !error48,
@@ -41784,11 +41939,11 @@ async function installExtension(ide, extension) {
41784
41939
  } catch (e) {
41785
41940
  }
41786
41941
  }
41787
- return new Promise((resolve16) => {
41942
+ return new Promise((resolve15) => {
41788
41943
  const cmd = `"${ide.cliCommand}" --install-extension ${extension.marketplaceId} --force`;
41789
41944
  (0, import_child_process10.exec)(cmd, { timeout: 6e4 }, (error48, stdout, stderr) => {
41790
41945
  if (error48) {
41791
- resolve16({
41946
+ resolve15({
41792
41947
  extensionId: extension.id,
41793
41948
  marketplaceId: extension.marketplaceId,
41794
41949
  success: false,
@@ -41796,7 +41951,7 @@ async function installExtension(ide, extension) {
41796
41951
  error: stderr || error48.message
41797
41952
  });
41798
41953
  } else {
41799
- resolve16({
41954
+ resolve15({
41800
41955
  extensionId: extension.id,
41801
41956
  marketplaceId: extension.marketplaceId,
41802
41957
  success: true,
@@ -41990,10 +42145,11 @@ var init_registry = __esm({
41990
42145
  async function initDaemonComponents(config2) {
41991
42146
  installGlobalInterceptor();
41992
42147
  const appConfig = loadConfig();
41993
- const disableUpstream = appConfig.disableUpstream ?? false;
42148
+ const providerSourceMode = appConfig.providerSourceMode || "normal";
42149
+ const disableUpstream = providerSourceMode === "no-upstream";
41994
42150
  const providerLoader = new ProviderLoader({
41995
42151
  logFn: config2.providerLogFn,
41996
- disableUpstream,
42152
+ sourceMode: providerSourceMode,
41997
42153
  userDir: appConfig.providerDir
41998
42154
  });
41999
42155
  if (!disableUpstream && !providerLoader.hasUpstream()) {
@@ -42098,6 +42254,10 @@ async function initDaemonComponents(config2) {
42098
42254
  onProviderSettingChanged: async (providerType) => {
42099
42255
  await refreshProviderAvailability(providerType);
42100
42256
  config2.onStatusChange?.();
42257
+ },
42258
+ onProviderSourceConfigChanged: async () => {
42259
+ await refreshProviderAvailability();
42260
+ config2.onStatusChange?.();
42101
42261
  }
42102
42262
  });
42103
42263
  agentStreamManager = new DaemonAgentStreamManager(
@@ -42147,7 +42307,8 @@ async function initDaemonComponents(config2) {
42147
42307
  cdpInitializer,
42148
42308
  cdpManagers,
42149
42309
  sessionRegistry,
42150
- detectedIdes: detectedIdesRef
42310
+ detectedIdes: detectedIdesRef,
42311
+ refreshProviderAvailability
42151
42312
  };
42152
42313
  }
42153
42314
  async function startDaemonDevSupport(options) {
@@ -42156,7 +42317,10 @@ async function startDaemonDevSupport(options) {
42156
42317
  cdpManagers: options.components.cdpManagers,
42157
42318
  instanceManager: options.components.instanceManager,
42158
42319
  cliManager: options.components.cliManager,
42159
- logFn: options.logFn
42320
+ logFn: options.logFn,
42321
+ onProviderSourceConfigChanged: async () => {
42322
+ await options.components.refreshProviderAvailability();
42323
+ }
42160
42324
  });
42161
42325
  await devServer.start();
42162
42326
  options.components.providerLoader.watch();
@@ -42306,6 +42470,7 @@ __export(src_exports, {
42306
42470
  normalizeInputEnvelope: () => normalizeInputEnvelope,
42307
42471
  normalizeManagedStatus: () => normalizeManagedStatus,
42308
42472
  normalizeMessageParts: () => normalizeMessageParts,
42473
+ parseProviderSourceConfigUpdate: () => parseProviderSourceConfigUpdate,
42309
42474
  partitionSessionHostDiagnosticsSessions: () => partitionSessionHostDiagnosticsSessions,
42310
42475
  partitionSessionHostRecords: () => partitionSessionHostRecords,
42311
42476
  probeCdpPort: () => probeCdpPort,
@@ -42369,6 +42534,7 @@ var init_src = __esm({
42369
42534
  init_ide_provider_instance();
42370
42535
  init_cli_provider_instance();
42371
42536
  init_acp_provider_instance();
42537
+ init_provider_source_config();
42372
42538
  init_io_contracts();
42373
42539
  init_version_archive();
42374
42540
  init_dev_server();
@@ -42808,7 +42974,7 @@ function routeDataChannelMessage(peerId, msg, peers, handlers) {
42808
42974
  log(`pty_input: REJECTED \u2014 permission=${permission} peer=${peerId}`);
42809
42975
  return;
42810
42976
  }
42811
- const sessionId = parsed.sessionId || parsed.cliId || parsed.cliType || "";
42977
+ const sessionId = parsed.sessionId || parsed.targetSessionId || parsed.cliId || parsed.cliType || "";
42812
42978
  if (handlers.ptyInputHandler && parsed.data && sessionId) {
42813
42979
  handlers.ptyInputHandler(sessionId, parsed.data);
42814
42980
  }
@@ -42820,7 +42986,7 @@ function routeDataChannelMessage(peerId, msg, peers, handlers) {
42820
42986
  log(`pty_resize: REJECTED \u2014 permission=${permission} peer=${peerId}`);
42821
42987
  return;
42822
42988
  }
42823
- const sessionId = parsed.sessionId || parsed.cliId || parsed.cliType || "";
42989
+ const sessionId = parsed.sessionId || parsed.targetSessionId || parsed.cliId || parsed.cliType || "";
42824
42990
  if (handlers.ptyResizeHandler && parsed.cols && parsed.rows && sessionId) {
42825
42991
  handlers.ptyResizeHandler(sessionId, parsed.cols, parsed.rows);
42826
42992
  }
@@ -43838,14 +44004,14 @@ var require_filesystem = __commonJS({
43838
44004
  });
43839
44005
  return buffer.subarray(0, bytesRead);
43840
44006
  };
43841
- var readFile = (path30) => new Promise((resolve16, reject) => {
44007
+ var readFile = (path30) => new Promise((resolve15, reject) => {
43842
44008
  fs24.open(path30, "r", (err, fd) => {
43843
44009
  if (err) {
43844
44010
  reject(err);
43845
44011
  } else {
43846
44012
  const buffer = Buffer.alloc(MAX_LENGTH);
43847
44013
  fs24.read(fd, buffer, 0, MAX_LENGTH, 0, (_2, bytesRead) => {
43848
- resolve16(buffer.subarray(0, bytesRead));
44014
+ resolve15(buffer.subarray(0, bytesRead));
43849
44015
  fs24.close(fd, () => {
43850
44016
  });
43851
44017
  });
@@ -43913,10 +44079,10 @@ var require_detect_libc = __commonJS({
43913
44079
  var commandOut = "";
43914
44080
  var safeCommand = () => {
43915
44081
  if (!commandOut) {
43916
- return new Promise((resolve16) => {
44082
+ return new Promise((resolve15) => {
43917
44083
  childProcess2.exec(command, (err, out) => {
43918
44084
  commandOut = err ? " " : out;
43919
- resolve16(commandOut);
44085
+ resolve15(commandOut);
43920
44086
  });
43921
44087
  });
43922
44088
  }
@@ -46596,14 +46762,14 @@ var require_input = __commonJS({
46596
46762
  return this;
46597
46763
  } else {
46598
46764
  if (this._isStreamInput()) {
46599
- return new Promise((resolve16, reject) => {
46765
+ return new Promise((resolve15, reject) => {
46600
46766
  const finished = () => {
46601
46767
  this._flattenBufferIn();
46602
46768
  sharp.metadata(this.options, (err, metadata2) => {
46603
46769
  if (err) {
46604
46770
  reject(is.nativeError(err, stack));
46605
46771
  } else {
46606
- resolve16(metadata2);
46772
+ resolve15(metadata2);
46607
46773
  }
46608
46774
  });
46609
46775
  };
@@ -46614,12 +46780,12 @@ var require_input = __commonJS({
46614
46780
  }
46615
46781
  });
46616
46782
  } else {
46617
- return new Promise((resolve16, reject) => {
46783
+ return new Promise((resolve15, reject) => {
46618
46784
  sharp.metadata(this.options, (err, metadata2) => {
46619
46785
  if (err) {
46620
46786
  reject(is.nativeError(err, stack));
46621
46787
  } else {
46622
- resolve16(metadata2);
46788
+ resolve15(metadata2);
46623
46789
  }
46624
46790
  });
46625
46791
  });
@@ -46652,25 +46818,25 @@ var require_input = __commonJS({
46652
46818
  return this;
46653
46819
  } else {
46654
46820
  if (this._isStreamInput()) {
46655
- return new Promise((resolve16, reject) => {
46821
+ return new Promise((resolve15, reject) => {
46656
46822
  this.on("finish", function() {
46657
46823
  this._flattenBufferIn();
46658
46824
  sharp.stats(this.options, (err, stats2) => {
46659
46825
  if (err) {
46660
46826
  reject(is.nativeError(err, stack));
46661
46827
  } else {
46662
- resolve16(stats2);
46828
+ resolve15(stats2);
46663
46829
  }
46664
46830
  });
46665
46831
  });
46666
46832
  });
46667
46833
  } else {
46668
- return new Promise((resolve16, reject) => {
46834
+ return new Promise((resolve15, reject) => {
46669
46835
  sharp.stats(this.options, (err, stats2) => {
46670
46836
  if (err) {
46671
46837
  reject(is.nativeError(err, stack));
46672
46838
  } else {
46673
- resolve16(stats2);
46839
+ resolve15(stats2);
46674
46840
  }
46675
46841
  });
46676
46842
  });
@@ -50092,7 +50258,7 @@ var require_output = __commonJS({
50092
50258
  return this;
50093
50259
  } else {
50094
50260
  if (this._isStreamInput()) {
50095
- return new Promise((resolve16, reject) => {
50261
+ return new Promise((resolve15, reject) => {
50096
50262
  this.once("finish", () => {
50097
50263
  this._flattenBufferIn();
50098
50264
  sharp.pipeline(this.options, (err, data, info) => {
@@ -50100,24 +50266,24 @@ var require_output = __commonJS({
50100
50266
  reject(is.nativeError(err, stack));
50101
50267
  } else {
50102
50268
  if (this.options.resolveWithObject) {
50103
- resolve16({ data, info });
50269
+ resolve15({ data, info });
50104
50270
  } else {
50105
- resolve16(data);
50271
+ resolve15(data);
50106
50272
  }
50107
50273
  }
50108
50274
  });
50109
50275
  });
50110
50276
  });
50111
50277
  } else {
50112
- return new Promise((resolve16, reject) => {
50278
+ return new Promise((resolve15, reject) => {
50113
50279
  sharp.pipeline(this.options, (err, data, info) => {
50114
50280
  if (err) {
50115
50281
  reject(is.nativeError(err, stack));
50116
50282
  } else {
50117
50283
  if (this.options.resolveWithObject) {
50118
- resolve16({ data, info });
50284
+ resolve15({ data, info });
50119
50285
  } else {
50120
- resolve16(data);
50286
+ resolve15(data);
50121
50287
  }
50122
50288
  }
50123
50289
  });
@@ -51677,7 +51843,7 @@ var init_adhdev_daemon = __esm({
51677
51843
  import_ws3 = require("ws");
51678
51844
  init_source2();
51679
51845
  init_version();
51680
- pkgVersion = resolvePackageVersion({ injectedVersion: "0.8.56" });
51846
+ pkgVersion = resolvePackageVersion({ injectedVersion: "0.8.58" });
51681
51847
  ACTIVE_CHAT_POLL_STATUSES = /* @__PURE__ */ new Set([
51682
51848
  "generating",
51683
51849
  "waiting_approval",
@@ -52185,6 +52351,8 @@ ${err?.stack || ""}`);
52185
52351
  forwardAgentStreamsToIdeInstance(this.components.instanceManager, ideType, streams);
52186
52352
  }
52187
52353
  });
52354
+ const providerSourceConfig = this.components.providerLoader.getSourceConfig();
52355
+ LOG.info("Provider", `Source config: mode=${providerSourceConfig.sourceMode} explicitProviderDir=${providerSourceConfig.explicitProviderDir || "-"} userDir=${providerSourceConfig.userDir} upstreamDir=${providerSourceConfig.upstreamDir}`);
52188
52356
  if (shouldAutoRestoreHostedSessionsOnStartup(process.env)) {
52189
52357
  await this.components.cliManager.restoreHostedSessions();
52190
52358
  }
@@ -52346,7 +52514,11 @@ ${err?.stack || ""}`);
52346
52514
  providerLoader: this.components.providerLoader,
52347
52515
  cdpManagers: this.components.cdpManagers,
52348
52516
  instanceManager: this.components.instanceManager,
52349
- cliManager: this.components.cliManager
52517
+ cliManager: this.components.cliManager,
52518
+ onProviderSourceConfigChanged: async () => {
52519
+ await this.components.refreshProviderAvailability();
52520
+ this.statusReporter?.onStatusChange();
52521
+ }
52350
52522
  });
52351
52523
  await devServer.start();
52352
52524
  }
@@ -52543,7 +52715,7 @@ ${err?.stack || ""}`);
52543
52715
  this.localWss.emit("connection", ws, req);
52544
52716
  });
52545
52717
  });
52546
- await new Promise((resolve16, reject) => {
52718
+ await new Promise((resolve15, reject) => {
52547
52719
  const cleanup = () => {
52548
52720
  this.localHttpServer?.off("error", onError);
52549
52721
  this.localHttpServer?.off("listening", onListening);
@@ -52554,7 +52726,7 @@ ${err?.stack || ""}`);
52554
52726
  };
52555
52727
  const onListening = () => {
52556
52728
  cleanup();
52557
- resolve16();
52729
+ resolve15();
52558
52730
  };
52559
52731
  this.localHttpServer.once("error", onError);
52560
52732
  this.localHttpServer.once("listening", onListening);
@@ -52714,12 +52886,12 @@ ${err?.stack || ""}`);
52714
52886
  this.localClients.clear();
52715
52887
  this.localWss?.close();
52716
52888
  this.localWss = null;
52717
- await new Promise((resolve16) => {
52889
+ await new Promise((resolve15) => {
52718
52890
  if (!this.localHttpServer) {
52719
- resolve16();
52891
+ resolve15();
52720
52892
  return;
52721
52893
  }
52722
- this.localHttpServer.close(() => resolve16());
52894
+ this.localHttpServer.close(() => resolve15());
52723
52895
  this.localHttpServer = null;
52724
52896
  });
52725
52897
  } catch {
@@ -53267,14 +53439,14 @@ var require_run_async = __commonJS({
53267
53439
  return function() {
53268
53440
  var args = arguments;
53269
53441
  var originalThis = this;
53270
- var promise2 = new Promise(function(resolve16, reject) {
53442
+ var promise2 = new Promise(function(resolve15, reject) {
53271
53443
  var resolved = false;
53272
53444
  const wrappedResolve = function(value) {
53273
53445
  if (resolved) {
53274
53446
  console.warn("Run-async promise already resolved.");
53275
53447
  }
53276
53448
  resolved = true;
53277
- resolve16(value);
53449
+ resolve15(value);
53278
53450
  };
53279
53451
  var rejected = false;
53280
53452
  const wrappedReject = function(value) {
@@ -54065,7 +54237,7 @@ var require_Observable = __commonJS({
54065
54237
  Observable2.prototype.forEach = function(next, promiseCtor) {
54066
54238
  var _this = this;
54067
54239
  promiseCtor = getPromiseCtor(promiseCtor);
54068
- return new promiseCtor(function(resolve16, reject) {
54240
+ return new promiseCtor(function(resolve15, reject) {
54069
54241
  var subscriber = new Subscriber_1.SafeSubscriber({
54070
54242
  next: function(value) {
54071
54243
  try {
@@ -54076,7 +54248,7 @@ var require_Observable = __commonJS({
54076
54248
  }
54077
54249
  },
54078
54250
  error: reject,
54079
- complete: resolve16
54251
+ complete: resolve15
54080
54252
  });
54081
54253
  _this.subscribe(subscriber);
54082
54254
  });
@@ -54098,14 +54270,14 @@ var require_Observable = __commonJS({
54098
54270
  Observable2.prototype.toPromise = function(promiseCtor) {
54099
54271
  var _this = this;
54100
54272
  promiseCtor = getPromiseCtor(promiseCtor);
54101
- return new promiseCtor(function(resolve16, reject) {
54273
+ return new promiseCtor(function(resolve15, reject) {
54102
54274
  var value;
54103
54275
  _this.subscribe(function(x) {
54104
54276
  return value = x;
54105
54277
  }, function(err) {
54106
54278
  return reject(err);
54107
54279
  }, function() {
54108
- return resolve16(value);
54280
+ return resolve15(value);
54109
54281
  });
54110
54282
  });
54111
54283
  };
@@ -56201,11 +56373,11 @@ var require_innerFrom = __commonJS({
56201
56373
  "use strict";
56202
56374
  var __awaiter = exports2 && exports2.__awaiter || function(thisArg, _arguments, P, generator) {
56203
56375
  function adopt(value) {
56204
- return value instanceof P ? value : new P(function(resolve16) {
56205
- resolve16(value);
56376
+ return value instanceof P ? value : new P(function(resolve15) {
56377
+ resolve15(value);
56206
56378
  });
56207
56379
  }
56208
- return new (P || (P = Promise))(function(resolve16, reject) {
56380
+ return new (P || (P = Promise))(function(resolve15, reject) {
56209
56381
  function fulfilled(value) {
56210
56382
  try {
56211
56383
  step(generator.next(value));
@@ -56221,7 +56393,7 @@ var require_innerFrom = __commonJS({
56221
56393
  }
56222
56394
  }
56223
56395
  function step(result) {
56224
- result.done ? resolve16(result.value) : adopt(result.value).then(fulfilled, rejected);
56396
+ result.done ? resolve15(result.value) : adopt(result.value).then(fulfilled, rejected);
56225
56397
  }
56226
56398
  step((generator = generator.apply(thisArg, _arguments || [])).next());
56227
56399
  });
@@ -56303,14 +56475,14 @@ var require_innerFrom = __commonJS({
56303
56475
  }, i);
56304
56476
  function verb(n) {
56305
56477
  i[n] = o[n] && function(v) {
56306
- return new Promise(function(resolve16, reject) {
56307
- v = o[n](v), settle(resolve16, reject, v.done, v.value);
56478
+ return new Promise(function(resolve15, reject) {
56479
+ v = o[n](v), settle(resolve15, reject, v.done, v.value);
56308
56480
  });
56309
56481
  };
56310
56482
  }
56311
- function settle(resolve16, reject, d, v) {
56483
+ function settle(resolve15, reject, d, v) {
56312
56484
  Promise.resolve(v).then(function(v2) {
56313
- resolve16({ value: v2, done: d });
56485
+ resolve15({ value: v2, done: d });
56314
56486
  }, reject);
56315
56487
  }
56316
56488
  };
@@ -56929,7 +57101,7 @@ var require_lastValueFrom = __commonJS({
56929
57101
  var EmptyError_1 = require_EmptyError();
56930
57102
  function lastValueFrom(source, config2) {
56931
57103
  var hasConfig = typeof config2 === "object";
56932
- return new Promise(function(resolve16, reject) {
57104
+ return new Promise(function(resolve15, reject) {
56933
57105
  var _hasValue = false;
56934
57106
  var _value;
56935
57107
  source.subscribe({
@@ -56940,9 +57112,9 @@ var require_lastValueFrom = __commonJS({
56940
57112
  error: reject,
56941
57113
  complete: function() {
56942
57114
  if (_hasValue) {
56943
- resolve16(_value);
57115
+ resolve15(_value);
56944
57116
  } else if (hasConfig) {
56945
- resolve16(config2.defaultValue);
57117
+ resolve15(config2.defaultValue);
56946
57118
  } else {
56947
57119
  reject(new EmptyError_1.EmptyError());
56948
57120
  }
@@ -56964,16 +57136,16 @@ var require_firstValueFrom = __commonJS({
56964
57136
  var Subscriber_1 = require_Subscriber();
56965
57137
  function firstValueFrom(source, config2) {
56966
57138
  var hasConfig = typeof config2 === "object";
56967
- return new Promise(function(resolve16, reject) {
57139
+ return new Promise(function(resolve15, reject) {
56968
57140
  var subscriber = new Subscriber_1.SafeSubscriber({
56969
57141
  next: function(value) {
56970
- resolve16(value);
57142
+ resolve15(value);
56971
57143
  subscriber.unsubscribe();
56972
57144
  },
56973
57145
  error: reject,
56974
57146
  complete: function() {
56975
57147
  if (hasConfig) {
56976
- resolve16(config2.defaultValue);
57148
+ resolve15(config2.defaultValue);
56977
57149
  } else {
56978
57150
  reject(new EmptyError_1.EmptyError());
56979
57151
  }
@@ -68779,14 +68951,14 @@ var require_async_iterator = __commonJS({
68779
68951
  };
68780
68952
  }
68781
68953
  function readAndResolve(iter) {
68782
- var resolve16 = iter[kLastResolve];
68783
- if (resolve16 !== null) {
68954
+ var resolve15 = iter[kLastResolve];
68955
+ if (resolve15 !== null) {
68784
68956
  var data = iter[kStream].read();
68785
68957
  if (data !== null) {
68786
68958
  iter[kLastPromise] = null;
68787
68959
  iter[kLastResolve] = null;
68788
68960
  iter[kLastReject] = null;
68789
- resolve16(createIterResult(data, false));
68961
+ resolve15(createIterResult(data, false));
68790
68962
  }
68791
68963
  }
68792
68964
  }
@@ -68794,13 +68966,13 @@ var require_async_iterator = __commonJS({
68794
68966
  process.nextTick(readAndResolve, iter);
68795
68967
  }
68796
68968
  function wrapForNext(lastPromise, iter) {
68797
- return function(resolve16, reject) {
68969
+ return function(resolve15, reject) {
68798
68970
  lastPromise.then(function() {
68799
68971
  if (iter[kEnded]) {
68800
- resolve16(createIterResult(void 0, true));
68972
+ resolve15(createIterResult(void 0, true));
68801
68973
  return;
68802
68974
  }
68803
- iter[kHandlePromise](resolve16, reject);
68975
+ iter[kHandlePromise](resolve15, reject);
68804
68976
  }, reject);
68805
68977
  };
68806
68978
  }
@@ -68820,12 +68992,12 @@ var require_async_iterator = __commonJS({
68820
68992
  return Promise.resolve(createIterResult(void 0, true));
68821
68993
  }
68822
68994
  if (this[kStream].destroyed) {
68823
- return new Promise(function(resolve16, reject) {
68995
+ return new Promise(function(resolve15, reject) {
68824
68996
  process.nextTick(function() {
68825
68997
  if (_this[kError]) {
68826
68998
  reject(_this[kError]);
68827
68999
  } else {
68828
- resolve16(createIterResult(void 0, true));
69000
+ resolve15(createIterResult(void 0, true));
68829
69001
  }
68830
69002
  });
68831
69003
  });
@@ -68848,13 +69020,13 @@ var require_async_iterator = __commonJS({
68848
69020
  return this;
68849
69021
  }), _defineProperty(_Object$setPrototypeO, "return", function _return() {
68850
69022
  var _this2 = this;
68851
- return new Promise(function(resolve16, reject) {
69023
+ return new Promise(function(resolve15, reject) {
68852
69024
  _this2[kStream].destroy(null, function(err) {
68853
69025
  if (err) {
68854
69026
  reject(err);
68855
69027
  return;
68856
69028
  }
68857
- resolve16(createIterResult(void 0, true));
69029
+ resolve15(createIterResult(void 0, true));
68858
69030
  });
68859
69031
  });
68860
69032
  }), _Object$setPrototypeO), AsyncIteratorPrototype);
@@ -68876,15 +69048,15 @@ var require_async_iterator = __commonJS({
68876
69048
  value: stream._readableState.endEmitted,
68877
69049
  writable: true
68878
69050
  }), _defineProperty(_Object$create, kHandlePromise, {
68879
- value: function value(resolve16, reject) {
69051
+ value: function value(resolve15, reject) {
68880
69052
  var data = iterator[kStream].read();
68881
69053
  if (data) {
68882
69054
  iterator[kLastPromise] = null;
68883
69055
  iterator[kLastResolve] = null;
68884
69056
  iterator[kLastReject] = null;
68885
- resolve16(createIterResult(data, false));
69057
+ resolve15(createIterResult(data, false));
68886
69058
  } else {
68887
- iterator[kLastResolve] = resolve16;
69059
+ iterator[kLastResolve] = resolve15;
68888
69060
  iterator[kLastReject] = reject;
68889
69061
  }
68890
69062
  },
@@ -68903,12 +69075,12 @@ var require_async_iterator = __commonJS({
68903
69075
  iterator[kError] = err;
68904
69076
  return;
68905
69077
  }
68906
- var resolve16 = iterator[kLastResolve];
68907
- if (resolve16 !== null) {
69078
+ var resolve15 = iterator[kLastResolve];
69079
+ if (resolve15 !== null) {
68908
69080
  iterator[kLastPromise] = null;
68909
69081
  iterator[kLastResolve] = null;
68910
69082
  iterator[kLastReject] = null;
68911
- resolve16(createIterResult(void 0, true));
69083
+ resolve15(createIterResult(void 0, true));
68912
69084
  }
68913
69085
  iterator[kEnded] = true;
68914
69086
  });
@@ -68923,7 +69095,7 @@ var require_async_iterator = __commonJS({
68923
69095
  var require_from2 = __commonJS({
68924
69096
  "../../node_modules/readable-stream/lib/internal/streams/from.js"(exports2, module2) {
68925
69097
  "use strict";
68926
- function asyncGeneratorStep(gen, resolve16, reject, _next, _throw, key, arg) {
69098
+ function asyncGeneratorStep(gen, resolve15, reject, _next, _throw, key, arg) {
68927
69099
  try {
68928
69100
  var info = gen[key](arg);
68929
69101
  var value = info.value;
@@ -68932,7 +69104,7 @@ var require_from2 = __commonJS({
68932
69104
  return;
68933
69105
  }
68934
69106
  if (info.done) {
68935
- resolve16(value);
69107
+ resolve15(value);
68936
69108
  } else {
68937
69109
  Promise.resolve(value).then(_next, _throw);
68938
69110
  }
@@ -68940,13 +69112,13 @@ var require_from2 = __commonJS({
68940
69112
  function _asyncToGenerator(fn) {
68941
69113
  return function() {
68942
69114
  var self2 = this, args = arguments;
68943
- return new Promise(function(resolve16, reject) {
69115
+ return new Promise(function(resolve15, reject) {
68944
69116
  var gen = fn.apply(self2, args);
68945
69117
  function _next(value) {
68946
- asyncGeneratorStep(gen, resolve16, reject, _next, _throw, "next", value);
69118
+ asyncGeneratorStep(gen, resolve15, reject, _next, _throw, "next", value);
68947
69119
  }
68948
69120
  function _throw(err) {
68949
- asyncGeneratorStep(gen, resolve16, reject, _next, _throw, "throw", err);
69121
+ asyncGeneratorStep(gen, resolve15, reject, _next, _throw, "throw", err);
68950
69122
  }
68951
69123
  _next(void 0);
68952
69124
  });
@@ -70885,9 +71057,9 @@ var init_base = __esm({
70885
71057
  * @return {Promise}
70886
71058
  */
70887
71059
  run() {
70888
- return new Promise((resolve16, reject) => {
71060
+ return new Promise((resolve15, reject) => {
70889
71061
  this._run(
70890
- (value) => resolve16(value),
71062
+ (value) => resolve15(value),
70891
71063
  (error48) => reject(error48)
70892
71064
  );
70893
71065
  });
@@ -77519,7 +77691,7 @@ var require_lib2 = __commonJS({
77519
77691
  return matches;
77520
77692
  };
77521
77693
  exports2.analyse = analyse;
77522
- var detectFile = (filepath, opts = {}) => new Promise((resolve16, reject) => {
77694
+ var detectFile = (filepath, opts = {}) => new Promise((resolve15, reject) => {
77523
77695
  let fd;
77524
77696
  const fs24 = (0, node_1.default)();
77525
77697
  const handler = (err, buffer) => {
@@ -77529,7 +77701,7 @@ var require_lib2 = __commonJS({
77529
77701
  if (err) {
77530
77702
  reject(err);
77531
77703
  } else if (buffer) {
77532
- resolve16((0, exports2.detect)(buffer));
77704
+ resolve15((0, exports2.detect)(buffer));
77533
77705
  } else {
77534
77706
  reject(new Error("No error and no buffer received"));
77535
77707
  }
@@ -83714,14 +83886,14 @@ var baseOpen = async (options) => {
83714
83886
  }
83715
83887
  const subprocess = import_node_child_process5.default.spawn(command, cliArguments, childProcessOptions);
83716
83888
  if (options.wait) {
83717
- return new Promise((resolve16, reject) => {
83889
+ return new Promise((resolve15, reject) => {
83718
83890
  subprocess.once("error", reject);
83719
83891
  subprocess.once("close", (exitCode) => {
83720
83892
  if (!options.allowNonzeroExitCode && exitCode > 0) {
83721
83893
  reject(new Error(`Exited with code ${exitCode}`));
83722
83894
  return;
83723
83895
  }
83724
- resolve16(subprocess);
83896
+ resolve15(subprocess);
83725
83897
  });
83726
83898
  });
83727
83899
  }