adhdev 0.6.35 → 0.6.37

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
@@ -505,8 +505,7 @@ async function detectIDEs() {
505
505
  path: appPath || cliPath,
506
506
  cliCommand: resolvedCli || null,
507
507
  version: version2,
508
- icon: def.icon,
509
- extensionSupport: def.extensionSupport
508
+ icon: def.icon
510
509
  });
511
510
  }
512
511
  return results;
@@ -1281,21 +1280,41 @@ var init_manager = __esm({
1281
1280
  clickCount: 1
1282
1281
  });
1283
1282
  await new Promise((r) => setTimeout(r, 150));
1284
- await this.sendInternal("Input.insertText", { text });
1283
+ const lines = text.split("\n");
1284
+ for (let i = 0; i < lines.length; i++) {
1285
+ if (lines[i].length > 0) {
1286
+ await this.sendInternal("Input.insertText", { text: lines[i] });
1287
+ await new Promise((r) => setTimeout(r, 100));
1288
+ }
1289
+ if (i < lines.length - 1) {
1290
+ await this.sendInternal("Input.dispatchKeyEvent", { type: "rawKeyDown", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, modifiers: 8 });
1291
+ await this.sendInternal("Input.dispatchKeyEvent", { type: "char", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, text: "\r", unmodifiedText: "\r", modifiers: 8 });
1292
+ await this.sendInternal("Input.dispatchKeyEvent", { type: "keyUp", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, modifiers: 8 });
1293
+ await new Promise((r) => setTimeout(r, 100));
1294
+ }
1295
+ }
1285
1296
  await new Promise((r) => setTimeout(r, 200));
1286
1297
  await this.sendInternal("Input.dispatchKeyEvent", {
1287
1298
  type: "rawKeyDown",
1288
1299
  key: "Enter",
1289
1300
  code: "Enter",
1290
1301
  windowsVirtualKeyCode: 13,
1291
- nativeVirtualKeyCode: 13
1302
+ text: "\r",
1303
+ unmodifiedText: "\r"
1292
1304
  });
1293
1305
  await this.sendInternal("Input.dispatchKeyEvent", {
1294
- type: "keyUp",
1306
+ type: "char",
1295
1307
  key: "Enter",
1296
1308
  code: "Enter",
1297
1309
  windowsVirtualKeyCode: 13,
1298
- nativeVirtualKeyCode: 13
1310
+ text: "\r",
1311
+ unmodifiedText: "\r"
1312
+ });
1313
+ await this.sendInternal("Input.dispatchKeyEvent", {
1314
+ type: "keyUp",
1315
+ key: "Enter",
1316
+ code: "Enter",
1317
+ windowsVirtualKeyCode: 13
1299
1318
  });
1300
1319
  this.log(`[CDP] typeAndSend: sent "${text.substring(0, 50)}..."`);
1301
1320
  return true;
@@ -1349,21 +1368,41 @@ var init_manager = __esm({
1349
1368
  windowsVirtualKeyCode: 8
1350
1369
  });
1351
1370
  await new Promise((r) => setTimeout(r, 150));
1352
- await this.sendInternal("Input.insertText", { text });
1371
+ const lines = text.split("\n");
1372
+ for (let i = 0; i < lines.length; i++) {
1373
+ if (lines[i].length > 0) {
1374
+ await this.sendInternal("Input.insertText", { text: lines[i] });
1375
+ await new Promise((r) => setTimeout(r, 100));
1376
+ }
1377
+ if (i < lines.length - 1) {
1378
+ await this.sendInternal("Input.dispatchKeyEvent", { type: "rawKeyDown", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, modifiers: 8 });
1379
+ await this.sendInternal("Input.dispatchKeyEvent", { type: "char", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, text: "\r", unmodifiedText: "\r", modifiers: 8 });
1380
+ await this.sendInternal("Input.dispatchKeyEvent", { type: "keyUp", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, modifiers: 8 });
1381
+ await new Promise((r) => setTimeout(r, 100));
1382
+ }
1383
+ }
1353
1384
  await new Promise((r) => setTimeout(r, 200));
1354
1385
  await this.sendInternal("Input.dispatchKeyEvent", {
1355
1386
  type: "rawKeyDown",
1356
1387
  key: "Enter",
1357
1388
  code: "Enter",
1358
1389
  windowsVirtualKeyCode: 13,
1359
- nativeVirtualKeyCode: 13
1390
+ text: "\r",
1391
+ unmodifiedText: "\r"
1360
1392
  });
1361
1393
  await this.sendInternal("Input.dispatchKeyEvent", {
1362
- type: "keyUp",
1394
+ type: "char",
1363
1395
  key: "Enter",
1364
1396
  code: "Enter",
1365
1397
  windowsVirtualKeyCode: 13,
1366
- nativeVirtualKeyCode: 13
1398
+ text: "\r",
1399
+ unmodifiedText: "\r"
1400
+ });
1401
+ await this.sendInternal("Input.dispatchKeyEvent", {
1402
+ type: "keyUp",
1403
+ key: "Enter",
1404
+ code: "Enter",
1405
+ windowsVirtualKeyCode: 13
1367
1406
  });
1368
1407
  this.log(`[CDP] typeAndSendAt(${Math.round(x)},${Math.round(y)}): sent "${text.substring(0, 50)}..."`);
1369
1408
  return true;
@@ -4757,14 +4796,7 @@ var init_handler = __esm({
4757
4796
  }
4758
4797
  return { success: false, error: `VSCode command not available: ${resolvedCmd || cmd}` };
4759
4798
  }
4760
- case "get_open_editors":
4761
- case "open_tab":
4762
- case "close_tab":
4763
- case "open_folder":
4764
- case "open_folder_picker":
4765
- case "open_recent":
4766
- case "get_commands":
4767
- return { success: false, error: `${cmd} requires bridge-extension (removed)` };
4799
+ // ─── Workspace cmds ──────────────
4768
4800
  case "get_recent_workspaces":
4769
4801
  return this.handleGetRecentWorkspaces(args);
4770
4802
  case "get_cli_history": {
@@ -4983,7 +5015,9 @@ var init_provider_loader = __esm({
4983
5015
  if (options?.builtinDir) {
4984
5016
  this.builtinDirs = Array.isArray(options.builtinDir) ? options.builtinDir : [options.builtinDir];
4985
5017
  } else {
4986
- this.builtinDirs = [path6.resolve(__dirname, "../providers/_builtin")];
5018
+ const bundledDir = path6.resolve(__dirname, "../providers/_builtin");
5019
+ const devDir = path6.resolve(__dirname, "../../providers/_builtin");
5020
+ this.builtinDirs = [fs5.existsSync(devDir) ? devDir : bundledDir];
4987
5021
  }
4988
5022
  this.userDir = options?.userDir || path6.join(os7.homedir(), ".adhdev", "providers");
4989
5023
  this.upstreamDir = path6.join(this.userDir, ".upstream");
@@ -5215,7 +5249,6 @@ var init_provider_loader = __esm({
5215
5249
  name: p.name,
5216
5250
  displayName: p.displayName || p.name,
5217
5251
  icon: p.icon || "\u{1F4BB}",
5218
- extensionSupport: "full",
5219
5252
  cli: p.cli,
5220
5253
  paths: p.paths
5221
5254
  });
@@ -26572,6 +26605,7 @@ var init_dev_server = __esm({
26572
26605
  { method: "GET", pattern: "/api/providers/versions", handler: (q, s) => this.handleDetectVersions(q, s) },
26573
26606
  { method: "POST", pattern: "/api/providers/reload", handler: (q, s) => this.handleReload(q, s) },
26574
26607
  { method: "POST", pattern: "/api/cdp/evaluate", handler: (q, s) => this.handleCdpEvaluate(q, s) },
26608
+ { method: "POST", pattern: "/api/cdp/click", handler: (q, s) => this.handleCdpClick(q, s) },
26575
26609
  { method: "POST", pattern: "/api/cdp/dom/query", handler: (q, s) => this.handleCdpDomQuery(q, s) },
26576
26610
  { method: "POST", pattern: "/api/cdp/dom/inspect", handler: (q, s) => this.handleDomInspect(q, s) },
26577
26611
  { method: "POST", pattern: "/api/cdp/dom/children", handler: (q, s) => this.handleDomChildren(q, s) },
@@ -26602,6 +26636,7 @@ var init_dev_server = __esm({
26602
26636
  { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/file$/, handler: (q, s, p) => this.handleWriteFile(p[0], q, s) },
26603
26637
  { method: "GET", pattern: /^\/api\/providers\/([^/]+)\/source$/, handler: (q, s, p) => this.handleSource(p[0], q, s) },
26604
26638
  { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/save$/, handler: (q, s, p) => this.handleSave(p[0], q, s) },
26639
+ { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/typeAndSend$/, handler: (q, s, p) => this.handleTypeAndSend(p[0], q, s) },
26605
26640
  { method: "GET", pattern: /^\/api\/providers\/([^/]+)\/config$/, handler: (q, s, p) => this.handleProviderConfig(p[0], q, s) },
26606
26641
  { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/dom-context$/, handler: (q, s, p) => this.handleDomContext(p[0], q, s) },
26607
26642
  { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/auto-implement$/, handler: (q, s, p) => this.handleAutoImplement(p[0], q, s) },
@@ -26804,7 +26839,13 @@ var init_dev_server = __esm({
26804
26839
  return;
26805
26840
  }
26806
26841
  try {
26807
- const scriptCode = params ? fn(params) : fn();
26842
+ let scriptCode = null;
26843
+ if (["sendMessage", "webviewSendMessage", "switchSession", "webviewSwitchSession", "setMode", "webviewSetMode", "setModel", "webviewSetModel"].includes(scriptName)) {
26844
+ const firstVal = params && typeof params === "object" && Object.keys(params).length > 0 ? Object.values(params)[0] : params;
26845
+ scriptCode = firstVal !== void 0 ? fn(firstVal) : fn();
26846
+ } else {
26847
+ scriptCode = params !== void 0 ? fn(params) : fn();
26848
+ }
26808
26849
  if (!scriptCode) {
26809
26850
  this.json(res, 500, { error: "Script function returned null" });
26810
26851
  return;
@@ -26844,6 +26885,7 @@ var init_dev_server = __esm({
26844
26885
  } catch {
26845
26886
  }
26846
26887
  }
26888
+ this.log(`Script raw debug: typeof=${typeof raw}, raw=${JSON.stringify(raw)}, parsed=${JSON.stringify(result)}`);
26847
26889
  this.json(res, 200, { type, script: scriptName, result });
26848
26890
  } catch (e) {
26849
26891
  this.json(res, 500, { error: `Script execution failed: ${e.message}` });
@@ -26878,6 +26920,26 @@ var init_dev_server = __esm({
26878
26920
  this.json(res, 500, { error: e.message });
26879
26921
  }
26880
26922
  }
26923
+ async handleCdpClick(req, res) {
26924
+ const body = await this.readBody(req);
26925
+ const { ideType, x, y } = body;
26926
+ if (x == null || y == null) {
26927
+ this.json(res, 400, { error: "x and y coordinates required" });
26928
+ return;
26929
+ }
26930
+ const cdp = this.getCdp(ideType);
26931
+ if (!cdp?.isConnected) {
26932
+ this.json(res, 503, { error: "No CDP connection available" });
26933
+ return;
26934
+ }
26935
+ try {
26936
+ await cdp.send("Input.dispatchMouseEvent", { type: "mousePressed", x, y, button: "left", clickCount: 1 });
26937
+ await cdp.send("Input.dispatchMouseEvent", { type: "mouseReleased", x, y, button: "left", clickCount: 1 });
26938
+ this.json(res, 200, { success: true, clicked: true, x, y });
26939
+ } catch (e) {
26940
+ this.json(res, 500, { error: e.message });
26941
+ }
26942
+ }
26881
26943
  async handleCdpDomQuery(req, res) {
26882
26944
  const body = await this.readBody(req);
26883
26945
  const { selector, limit = 10, ideType } = body;
@@ -26986,6 +27048,11 @@ var init_dev_server = __esm({
26986
27048
  name: p.name,
26987
27049
  category: p.category
26988
27050
  }));
27051
+ for (const cdp of this.cdpManagers.values()) {
27052
+ if (!cdp.isConnected) {
27053
+ cdp._targetId = null;
27054
+ }
27055
+ }
26989
27056
  this.json(res, 200, { reloaded: true, providers });
26990
27057
  } catch (e) {
26991
27058
  this.json(res, 500, { error: e.message });
@@ -27141,7 +27208,7 @@ var init_dev_server = __esm({
27141
27208
  const provider = this.providerLoader.getMeta(type);
27142
27209
  if (!provider) return null;
27143
27210
  const cat = provider.category;
27144
- const builtinDir = this.providerLoader.builtinDir || path12.resolve(__dirname, "../providers/_builtin");
27211
+ const builtinDir = this.providerLoader.builtinDirs?.[0] || path12.resolve(__dirname, "../providers/_builtin");
27145
27212
  const userDir = path12.join(os14.homedir(), ".adhdev", "providers");
27146
27213
  const directCandidates = [
27147
27214
  path12.join(userDir, type),
@@ -27292,6 +27359,25 @@ var init_dev_server = __esm({
27292
27359
  this.json(res, 500, { error: `Save failed: ${e.message}` });
27293
27360
  }
27294
27361
  }
27362
+ async handleTypeAndSend(type, req, res) {
27363
+ const body = await this.readBody(req);
27364
+ const { selector, text } = body;
27365
+ if (!selector || typeof selector !== "string" || !text || typeof text !== "string") {
27366
+ this.json(res, 400, { error: "selector and text strings required" });
27367
+ return;
27368
+ }
27369
+ const cdp = this.getCdp(type);
27370
+ if (!cdp) {
27371
+ this.json(res, 503, { error: `CDP not connected for '${type}'` });
27372
+ return;
27373
+ }
27374
+ try {
27375
+ const sent = await cdp.typeAndSend(selector, text);
27376
+ this.json(res, 200, { sent });
27377
+ } catch (e) {
27378
+ this.json(res, 500, { error: e.message });
27379
+ }
27380
+ }
27295
27381
  async handleScriptHints(type, _req, res) {
27296
27382
  const dir = this.findProviderDir(type);
27297
27383
  if (!dir) {
@@ -27527,7 +27613,7 @@ var init_dev_server = __esm({
27527
27613
  if (location === "user") {
27528
27614
  targetDir = path12.join(os14.homedir(), ".adhdev", "providers", type);
27529
27615
  } else {
27530
- const builtinDir = path12.resolve(__dirname, "../providers/_builtin");
27616
+ const builtinDir = this.providerLoader.builtinDirs?.[0] || path12.resolve(__dirname, "../providers/_builtin");
27531
27617
  targetDir = path12.join(builtinDir, category, type);
27532
27618
  }
27533
27619
  const jsonPath = path12.join(targetDir, "provider.json");
@@ -28337,7 +28423,7 @@ var init_dev_server = __esm({
28337
28423
  const domContext = null;
28338
28424
  this.sendAutoImplSSE({ event: "progress", data: { function: "_init", status: "loading_reference", message: `\uB808\uD37C\uB7F0\uC2A4 \uC2A4\uD06C\uB9BD\uD2B8 \uB85C\uB4DC \uC911 (${reference})...` } });
28339
28425
  let referenceScripts = {};
28340
- const builtinDir = this.providerLoader.builtinDir || path12.resolve(__dirname, "../providers/_builtin");
28426
+ const builtinDir = this.providerLoader.builtinDirs?.[0] || path12.resolve(__dirname, "../providers/_builtin");
28341
28427
  const refDir = path12.join(builtinDir, "ide", reference);
28342
28428
  if (fs9.existsSync(refDir)) {
28343
28429
  const scriptsDir = path12.join(refDir, "scripts");
@@ -28537,7 +28623,7 @@ var init_dev_server = __esm({
28537
28623
  }
28538
28624
  if (model) args.push("--model", model);
28539
28625
  const escapedArgs = args.map((a) => `'${a.replace(/'/g, "'\\''")}'`).join(" ");
28540
- const metaPrompt = `Read the file at ${promptFile} and follow ALL instructions recursively. You have full authority to implement ALL required script files, update provider.json configurations based on the reference patterns, and independently test them against 127.0.0.1:19280 via CDP CURL. Upon complete validation of ALL assigned files, print exactly "AUTO_IMPLEMENT_FINISHED" to gracefully close the pipeline. DO NOT WAIT FOR APPROVAL, execute completely autonomously.`;
28626
+ const metaPrompt = `Read the file at ${promptFile} and follow ALL instructions recursively. You have full authority to implement ALL required script files, update provider.json configurations based on the reference patterns, and independently test them against 127.0.0.1:19280 via CDP CURL. Upon complete validation of ALL assigned files, print exactly "_PIPELINE_COMPLETE_SIGNAL_" to gracefully close the pipeline. DO NOT WAIT FOR APPROVAL, execute completely autonomously.`;
28541
28627
  shellCmd = `${command} ${escapedArgs} "${metaPrompt}"`;
28542
28628
  } else {
28543
28629
  const escapedArgs = baseArgs.map((a) => `'${a.replace(/'/g, "'\\''")}'`).join(" ");
@@ -28599,7 +28685,7 @@ var init_dev_server = __esm({
28599
28685
  const cleanData = chunk.replace(/\x1B\[\d*[A-HJKSTfG]/g, " ").replace(/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g, "").replace(/\x1B\][^\x07]*\x07/g, "").replace(/\x1B\][^\x1B]*\x1B\\/g, "").replace(/ +/g, " ");
28600
28686
  approvalBuffer = (approvalBuffer + cleanData).slice(-1500);
28601
28687
  const elapsed = Date.now() - spawnedAt;
28602
- if (elapsed > 15e3 && approvalBuffer.includes("AUTO_IMPLEMENT_FINISHED")) {
28688
+ if (elapsed > 15e3 && approvalBuffer.includes("_PIPELINE_COMPLETE_SIGNAL_")) {
28603
28689
  this.log(`Agent finished task after ${Math.round(elapsed / 1e3)}s. Terminating interactive CLI session to unblock pipeline.`);
28604
28690
  this.sendAutoImplSSE({ event: "output", data: { chunk: `
28605
28691
  [\u{1F916} ADHDev Pipeline] Completion token detected. Proceeding...
@@ -30744,7 +30830,7 @@ var init_adhdev_daemon = __esm({
30744
30830
  fs11 = __toESM(require("fs"));
30745
30831
  path14 = __toESM(require("path"));
30746
30832
  import_chalk2 = __toESM(require("chalk"));
30747
- pkgVersion = "0.6.35";
30833
+ pkgVersion = "0.6.37";
30748
30834
  if (pkgVersion === "unknown") {
30749
30835
  try {
30750
30836
  const possiblePaths = [