@adhdev/daemon-core 0.6.35 → 0.6.36
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.d.ts +2 -0
- package/dist/index.js +103 -14
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cdp/manager.ts +38 -12
- package/src/daemon/dev-server.ts +54 -5
- package/src/providers/provider-loader.ts +4 -1
package/dist/index.d.ts
CHANGED
|
@@ -2810,6 +2810,7 @@ declare class DevServer {
|
|
|
2810
2810
|
private handleSpawnTest;
|
|
2811
2811
|
private handleRunScript;
|
|
2812
2812
|
private handleCdpEvaluate;
|
|
2813
|
+
private handleCdpClick;
|
|
2813
2814
|
private handleCdpDomQuery;
|
|
2814
2815
|
private handleScreenshot;
|
|
2815
2816
|
private handleScriptsRun;
|
|
@@ -2833,6 +2834,7 @@ declare class DevServer {
|
|
|
2833
2834
|
private handleWriteFile;
|
|
2834
2835
|
private handleSource;
|
|
2835
2836
|
private handleSave;
|
|
2837
|
+
private handleTypeAndSend;
|
|
2836
2838
|
private handleScriptHints;
|
|
2837
2839
|
private handleValidate;
|
|
2838
2840
|
private handleAcpChat;
|
package/dist/index.js
CHANGED
|
@@ -1967,21 +1967,41 @@ var DaemonCdpManager = class {
|
|
|
1967
1967
|
clickCount: 1
|
|
1968
1968
|
});
|
|
1969
1969
|
await new Promise((r) => setTimeout(r, 150));
|
|
1970
|
-
|
|
1970
|
+
const lines = text.split("\n");
|
|
1971
|
+
for (let i = 0; i < lines.length; i++) {
|
|
1972
|
+
if (lines[i].length > 0) {
|
|
1973
|
+
await this.sendInternal("Input.insertText", { text: lines[i] });
|
|
1974
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
1975
|
+
}
|
|
1976
|
+
if (i < lines.length - 1) {
|
|
1977
|
+
await this.sendInternal("Input.dispatchKeyEvent", { type: "rawKeyDown", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, modifiers: 8 });
|
|
1978
|
+
await this.sendInternal("Input.dispatchKeyEvent", { type: "char", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, text: "\r", unmodifiedText: "\r", modifiers: 8 });
|
|
1979
|
+
await this.sendInternal("Input.dispatchKeyEvent", { type: "keyUp", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, modifiers: 8 });
|
|
1980
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
1981
|
+
}
|
|
1982
|
+
}
|
|
1971
1983
|
await new Promise((r) => setTimeout(r, 200));
|
|
1972
1984
|
await this.sendInternal("Input.dispatchKeyEvent", {
|
|
1973
1985
|
type: "rawKeyDown",
|
|
1974
1986
|
key: "Enter",
|
|
1975
1987
|
code: "Enter",
|
|
1976
1988
|
windowsVirtualKeyCode: 13,
|
|
1977
|
-
|
|
1989
|
+
text: "\r",
|
|
1990
|
+
unmodifiedText: "\r"
|
|
1978
1991
|
});
|
|
1979
1992
|
await this.sendInternal("Input.dispatchKeyEvent", {
|
|
1980
|
-
type: "
|
|
1993
|
+
type: "char",
|
|
1981
1994
|
key: "Enter",
|
|
1982
1995
|
code: "Enter",
|
|
1983
1996
|
windowsVirtualKeyCode: 13,
|
|
1984
|
-
|
|
1997
|
+
text: "\r",
|
|
1998
|
+
unmodifiedText: "\r"
|
|
1999
|
+
});
|
|
2000
|
+
await this.sendInternal("Input.dispatchKeyEvent", {
|
|
2001
|
+
type: "keyUp",
|
|
2002
|
+
key: "Enter",
|
|
2003
|
+
code: "Enter",
|
|
2004
|
+
windowsVirtualKeyCode: 13
|
|
1985
2005
|
});
|
|
1986
2006
|
this.log(`[CDP] typeAndSend: sent "${text.substring(0, 50)}..."`);
|
|
1987
2007
|
return true;
|
|
@@ -2035,21 +2055,41 @@ var DaemonCdpManager = class {
|
|
|
2035
2055
|
windowsVirtualKeyCode: 8
|
|
2036
2056
|
});
|
|
2037
2057
|
await new Promise((r) => setTimeout(r, 150));
|
|
2038
|
-
|
|
2058
|
+
const lines = text.split("\n");
|
|
2059
|
+
for (let i = 0; i < lines.length; i++) {
|
|
2060
|
+
if (lines[i].length > 0) {
|
|
2061
|
+
await this.sendInternal("Input.insertText", { text: lines[i] });
|
|
2062
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
2063
|
+
}
|
|
2064
|
+
if (i < lines.length - 1) {
|
|
2065
|
+
await this.sendInternal("Input.dispatchKeyEvent", { type: "rawKeyDown", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, modifiers: 8 });
|
|
2066
|
+
await this.sendInternal("Input.dispatchKeyEvent", { type: "char", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, text: "\r", unmodifiedText: "\r", modifiers: 8 });
|
|
2067
|
+
await this.sendInternal("Input.dispatchKeyEvent", { type: "keyUp", key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, modifiers: 8 });
|
|
2068
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
2069
|
+
}
|
|
2070
|
+
}
|
|
2039
2071
|
await new Promise((r) => setTimeout(r, 200));
|
|
2040
2072
|
await this.sendInternal("Input.dispatchKeyEvent", {
|
|
2041
2073
|
type: "rawKeyDown",
|
|
2042
2074
|
key: "Enter",
|
|
2043
2075
|
code: "Enter",
|
|
2044
2076
|
windowsVirtualKeyCode: 13,
|
|
2045
|
-
|
|
2077
|
+
text: "\r",
|
|
2078
|
+
unmodifiedText: "\r"
|
|
2046
2079
|
});
|
|
2047
2080
|
await this.sendInternal("Input.dispatchKeyEvent", {
|
|
2048
|
-
type: "
|
|
2081
|
+
type: "char",
|
|
2049
2082
|
key: "Enter",
|
|
2050
2083
|
code: "Enter",
|
|
2051
2084
|
windowsVirtualKeyCode: 13,
|
|
2052
|
-
|
|
2085
|
+
text: "\r",
|
|
2086
|
+
unmodifiedText: "\r"
|
|
2087
|
+
});
|
|
2088
|
+
await this.sendInternal("Input.dispatchKeyEvent", {
|
|
2089
|
+
type: "keyUp",
|
|
2090
|
+
key: "Enter",
|
|
2091
|
+
code: "Enter",
|
|
2092
|
+
windowsVirtualKeyCode: 13
|
|
2053
2093
|
});
|
|
2054
2094
|
this.log(`[CDP] typeAndSendAt(${Math.round(x)},${Math.round(y)}): sent "${text.substring(0, 50)}..."`);
|
|
2055
2095
|
return true;
|
|
@@ -5733,7 +5773,9 @@ var ProviderLoader = class _ProviderLoader {
|
|
|
5733
5773
|
if (options?.builtinDir) {
|
|
5734
5774
|
this.builtinDirs = Array.isArray(options.builtinDir) ? options.builtinDir : [options.builtinDir];
|
|
5735
5775
|
} else {
|
|
5736
|
-
|
|
5776
|
+
const bundledDir = path6.resolve(__dirname, "../providers/_builtin");
|
|
5777
|
+
const devDir = path6.resolve(__dirname, "../../providers/_builtin");
|
|
5778
|
+
this.builtinDirs = [fs5.existsSync(devDir) ? devDir : bundledDir];
|
|
5737
5779
|
}
|
|
5738
5780
|
this.userDir = options?.userDir || path6.join(os7.homedir(), ".adhdev", "providers");
|
|
5739
5781
|
this.upstreamDir = path6.join(this.userDir, ".upstream");
|
|
@@ -10284,6 +10326,7 @@ var DevServer = class _DevServer {
|
|
|
10284
10326
|
{ method: "GET", pattern: "/api/providers/versions", handler: (q, s) => this.handleDetectVersions(q, s) },
|
|
10285
10327
|
{ method: "POST", pattern: "/api/providers/reload", handler: (q, s) => this.handleReload(q, s) },
|
|
10286
10328
|
{ method: "POST", pattern: "/api/cdp/evaluate", handler: (q, s) => this.handleCdpEvaluate(q, s) },
|
|
10329
|
+
{ method: "POST", pattern: "/api/cdp/click", handler: (q, s) => this.handleCdpClick(q, s) },
|
|
10287
10330
|
{ method: "POST", pattern: "/api/cdp/dom/query", handler: (q, s) => this.handleCdpDomQuery(q, s) },
|
|
10288
10331
|
{ method: "POST", pattern: "/api/cdp/dom/inspect", handler: (q, s) => this.handleDomInspect(q, s) },
|
|
10289
10332
|
{ method: "POST", pattern: "/api/cdp/dom/children", handler: (q, s) => this.handleDomChildren(q, s) },
|
|
@@ -10314,6 +10357,7 @@ var DevServer = class _DevServer {
|
|
|
10314
10357
|
{ method: "POST", pattern: /^\/api\/providers\/([^/]+)\/file$/, handler: (q, s, p) => this.handleWriteFile(p[0], q, s) },
|
|
10315
10358
|
{ method: "GET", pattern: /^\/api\/providers\/([^/]+)\/source$/, handler: (q, s, p) => this.handleSource(p[0], q, s) },
|
|
10316
10359
|
{ method: "POST", pattern: /^\/api\/providers\/([^/]+)\/save$/, handler: (q, s, p) => this.handleSave(p[0], q, s) },
|
|
10360
|
+
{ method: "POST", pattern: /^\/api\/providers\/([^/]+)\/typeAndSend$/, handler: (q, s, p) => this.handleTypeAndSend(p[0], q, s) },
|
|
10317
10361
|
{ method: "GET", pattern: /^\/api\/providers\/([^/]+)\/config$/, handler: (q, s, p) => this.handleProviderConfig(p[0], q, s) },
|
|
10318
10362
|
{ method: "POST", pattern: /^\/api\/providers\/([^/]+)\/dom-context$/, handler: (q, s, p) => this.handleDomContext(p[0], q, s) },
|
|
10319
10363
|
{ method: "POST", pattern: /^\/api\/providers\/([^/]+)\/auto-implement$/, handler: (q, s, p) => this.handleAutoImplement(p[0], q, s) },
|
|
@@ -10556,6 +10600,7 @@ var DevServer = class _DevServer {
|
|
|
10556
10600
|
} catch {
|
|
10557
10601
|
}
|
|
10558
10602
|
}
|
|
10603
|
+
this.log(`Script raw debug: typeof=${typeof raw}, raw=${JSON.stringify(raw)}, parsed=${JSON.stringify(result)}`);
|
|
10559
10604
|
this.json(res, 200, { type, script: scriptName, result });
|
|
10560
10605
|
} catch (e) {
|
|
10561
10606
|
this.json(res, 500, { error: `Script execution failed: ${e.message}` });
|
|
@@ -10590,6 +10635,26 @@ var DevServer = class _DevServer {
|
|
|
10590
10635
|
this.json(res, 500, { error: e.message });
|
|
10591
10636
|
}
|
|
10592
10637
|
}
|
|
10638
|
+
async handleCdpClick(req, res) {
|
|
10639
|
+
const body = await this.readBody(req);
|
|
10640
|
+
const { ideType, x, y } = body;
|
|
10641
|
+
if (x == null || y == null) {
|
|
10642
|
+
this.json(res, 400, { error: "x and y coordinates required" });
|
|
10643
|
+
return;
|
|
10644
|
+
}
|
|
10645
|
+
const cdp = this.getCdp(ideType);
|
|
10646
|
+
if (!cdp?.isConnected) {
|
|
10647
|
+
this.json(res, 503, { error: "No CDP connection available" });
|
|
10648
|
+
return;
|
|
10649
|
+
}
|
|
10650
|
+
try {
|
|
10651
|
+
await cdp.send("Input.dispatchMouseEvent", { type: "mousePressed", x, y, button: "left", clickCount: 1 });
|
|
10652
|
+
await cdp.send("Input.dispatchMouseEvent", { type: "mouseReleased", x, y, button: "left", clickCount: 1 });
|
|
10653
|
+
this.json(res, 200, { success: true, clicked: true, x, y });
|
|
10654
|
+
} catch (e) {
|
|
10655
|
+
this.json(res, 500, { error: e.message });
|
|
10656
|
+
}
|
|
10657
|
+
}
|
|
10593
10658
|
async handleCdpDomQuery(req, res) {
|
|
10594
10659
|
const body = await this.readBody(req);
|
|
10595
10660
|
const { selector, limit = 10, ideType } = body;
|
|
@@ -10698,6 +10763,11 @@ var DevServer = class _DevServer {
|
|
|
10698
10763
|
name: p.name,
|
|
10699
10764
|
category: p.category
|
|
10700
10765
|
}));
|
|
10766
|
+
for (const cdp of this.cdpManagers.values()) {
|
|
10767
|
+
if (!cdp.isConnected) {
|
|
10768
|
+
cdp._targetId = null;
|
|
10769
|
+
}
|
|
10770
|
+
}
|
|
10701
10771
|
this.json(res, 200, { reloaded: true, providers });
|
|
10702
10772
|
} catch (e) {
|
|
10703
10773
|
this.json(res, 500, { error: e.message });
|
|
@@ -10853,7 +10923,7 @@ var DevServer = class _DevServer {
|
|
|
10853
10923
|
const provider = this.providerLoader.getMeta(type);
|
|
10854
10924
|
if (!provider) return null;
|
|
10855
10925
|
const cat = provider.category;
|
|
10856
|
-
const builtinDir = this.providerLoader.
|
|
10926
|
+
const builtinDir = this.providerLoader.builtinDirs?.[0] || path12.resolve(__dirname, "../providers/_builtin");
|
|
10857
10927
|
const userDir = path12.join(os14.homedir(), ".adhdev", "providers");
|
|
10858
10928
|
const directCandidates = [
|
|
10859
10929
|
path12.join(userDir, type),
|
|
@@ -11004,6 +11074,25 @@ var DevServer = class _DevServer {
|
|
|
11004
11074
|
this.json(res, 500, { error: `Save failed: ${e.message}` });
|
|
11005
11075
|
}
|
|
11006
11076
|
}
|
|
11077
|
+
async handleTypeAndSend(type, req, res) {
|
|
11078
|
+
const body = await this.readBody(req);
|
|
11079
|
+
const { selector, text } = body;
|
|
11080
|
+
if (!selector || typeof selector !== "string" || !text || typeof text !== "string") {
|
|
11081
|
+
this.json(res, 400, { error: "selector and text strings required" });
|
|
11082
|
+
return;
|
|
11083
|
+
}
|
|
11084
|
+
const cdp = this.getCdp(type);
|
|
11085
|
+
if (!cdp) {
|
|
11086
|
+
this.json(res, 503, { error: `CDP not connected for '${type}'` });
|
|
11087
|
+
return;
|
|
11088
|
+
}
|
|
11089
|
+
try {
|
|
11090
|
+
const sent = await cdp.typeAndSend(selector, text);
|
|
11091
|
+
this.json(res, 200, { sent });
|
|
11092
|
+
} catch (e) {
|
|
11093
|
+
this.json(res, 500, { error: e.message });
|
|
11094
|
+
}
|
|
11095
|
+
}
|
|
11007
11096
|
async handleScriptHints(type, _req, res) {
|
|
11008
11097
|
const dir = this.findProviderDir(type);
|
|
11009
11098
|
if (!dir) {
|
|
@@ -11239,7 +11328,7 @@ var DevServer = class _DevServer {
|
|
|
11239
11328
|
if (location === "user") {
|
|
11240
11329
|
targetDir = path12.join(os14.homedir(), ".adhdev", "providers", type);
|
|
11241
11330
|
} else {
|
|
11242
|
-
const builtinDir = path12.resolve(__dirname, "../providers/_builtin");
|
|
11331
|
+
const builtinDir = this.providerLoader.builtinDirs?.[0] || path12.resolve(__dirname, "../providers/_builtin");
|
|
11243
11332
|
targetDir = path12.join(builtinDir, category, type);
|
|
11244
11333
|
}
|
|
11245
11334
|
const jsonPath = path12.join(targetDir, "provider.json");
|
|
@@ -12049,7 +12138,7 @@ var DevServer = class _DevServer {
|
|
|
12049
12138
|
const domContext = null;
|
|
12050
12139
|
this.sendAutoImplSSE({ event: "progress", data: { function: "_init", status: "loading_reference", message: `\uB808\uD37C\uB7F0\uC2A4 \uC2A4\uD06C\uB9BD\uD2B8 \uB85C\uB4DC \uC911 (${reference})...` } });
|
|
12051
12140
|
let referenceScripts = {};
|
|
12052
|
-
const builtinDir = this.providerLoader.
|
|
12141
|
+
const builtinDir = this.providerLoader.builtinDirs?.[0] || path12.resolve(__dirname, "../providers/_builtin");
|
|
12053
12142
|
const refDir = path12.join(builtinDir, "ide", reference);
|
|
12054
12143
|
if (fs9.existsSync(refDir)) {
|
|
12055
12144
|
const scriptsDir = path12.join(refDir, "scripts");
|
|
@@ -12249,7 +12338,7 @@ var DevServer = class _DevServer {
|
|
|
12249
12338
|
}
|
|
12250
12339
|
if (model) args.push("--model", model);
|
|
12251
12340
|
const escapedArgs = args.map((a) => `'${a.replace(/'/g, "'\\''")}'`).join(" ");
|
|
12252
|
-
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 "
|
|
12341
|
+
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.`;
|
|
12253
12342
|
shellCmd = `${command} ${escapedArgs} "${metaPrompt}"`;
|
|
12254
12343
|
} else {
|
|
12255
12344
|
const escapedArgs = baseArgs.map((a) => `'${a.replace(/'/g, "'\\''")}'`).join(" ");
|
|
@@ -12311,7 +12400,7 @@ var DevServer = class _DevServer {
|
|
|
12311
12400
|
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, " ");
|
|
12312
12401
|
approvalBuffer = (approvalBuffer + cleanData).slice(-1500);
|
|
12313
12402
|
const elapsed = Date.now() - spawnedAt;
|
|
12314
|
-
if (elapsed > 15e3 && approvalBuffer.includes("
|
|
12403
|
+
if (elapsed > 15e3 && approvalBuffer.includes("_PIPELINE_COMPLETE_SIGNAL_")) {
|
|
12315
12404
|
this.log(`Agent finished task after ${Math.round(elapsed / 1e3)}s. Terminating interactive CLI session to unblock pipeline.`);
|
|
12316
12405
|
this.sendAutoImplSSE({ event: "output", data: { chunk: `
|
|
12317
12406
|
[\u{1F916} ADHDev Pipeline] Completion token detected. Proceeding...
|