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/cli/index.js +182 -47
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +113 -27
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
1302
|
+
text: "\r",
|
|
1303
|
+
unmodifiedText: "\r"
|
|
1292
1304
|
});
|
|
1293
1305
|
await this.sendInternal("Input.dispatchKeyEvent", {
|
|
1294
|
-
type: "
|
|
1306
|
+
type: "char",
|
|
1295
1307
|
key: "Enter",
|
|
1296
1308
|
code: "Enter",
|
|
1297
1309
|
windowsVirtualKeyCode: 13,
|
|
1298
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1390
|
+
text: "\r",
|
|
1391
|
+
unmodifiedText: "\r"
|
|
1360
1392
|
});
|
|
1361
1393
|
await this.sendInternal("Input.dispatchKeyEvent", {
|
|
1362
|
-
type: "
|
|
1394
|
+
type: "char",
|
|
1363
1395
|
key: "Enter",
|
|
1364
1396
|
code: "Enter",
|
|
1365
1397
|
windowsVirtualKeyCode: 13,
|
|
1366
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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 "
|
|
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("
|
|
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.
|
|
30833
|
+
pkgVersion = "0.6.37";
|
|
30748
30834
|
if (pkgVersion === "unknown") {
|
|
30749
30835
|
try {
|
|
30750
30836
|
const possiblePaths = [
|