@comecaramelos/dsh-chrome-mcp 1.0.0 → 2.0.0
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/README.md +44 -39
- package/lib/client.js +2186 -614
- package/lib/client.js.map +4 -4
- package/lib/host/apply.d.ts +38 -1
- package/lib/host/apply.d.ts.map +1 -1
- package/lib/host/apply.js +43 -17
- package/lib/host/apply.js.map +1 -1
- package/lib/host/bridge.d.ts +28 -19
- package/lib/host/bridge.d.ts.map +1 -1
- package/lib/host/bridge.js +71 -79
- package/lib/host/bridge.js.map +1 -1
- package/lib/host/catalog.d.ts +2 -2
- package/lib/host/catalog.js +2 -2
- package/lib/host/commands/chrome-path.d.ts +4 -0
- package/lib/host/commands/chrome-path.d.ts.map +1 -0
- package/lib/host/commands/chrome-path.js +65 -0
- package/lib/host/commands/chrome-path.js.map +1 -0
- package/lib/host/commands/chrome-refresh.d.ts +17 -0
- package/lib/host/commands/chrome-refresh.d.ts.map +1 -0
- package/lib/host/commands/chrome-refresh.js +37 -0
- package/lib/host/commands/chrome-refresh.js.map +1 -0
- package/lib/host/commands/index.d.ts +26 -0
- package/lib/host/commands/index.d.ts.map +1 -0
- package/lib/host/commands/index.js +41 -0
- package/lib/host/commands/index.js.map +1 -0
- package/lib/host/constants.d.ts +107 -30
- package/lib/host/constants.d.ts.map +1 -1
- package/lib/host/constants.js +107 -30
- package/lib/host/constants.js.map +1 -1
- package/lib/host/controller/_trace.d.ts +3 -0
- package/lib/host/controller/_trace.d.ts.map +1 -0
- package/lib/host/controller/_trace.js +14 -0
- package/lib/host/controller/_trace.js.map +1 -0
- package/lib/host/controller/bridge-run.d.ts +4 -2
- package/lib/host/controller/bridge-run.d.ts.map +1 -1
- package/lib/host/controller/bridge-run.js +24 -8
- package/lib/host/controller/bridge-run.js.map +1 -1
- package/lib/host/controller/captures.d.ts +9 -16
- package/lib/host/controller/captures.d.ts.map +1 -1
- package/lib/host/controller/captures.js +73 -48
- package/lib/host/controller/captures.js.map +1 -1
- package/lib/host/controller/commits.d.ts +2 -2
- package/lib/host/controller/commits.d.ts.map +1 -1
- package/lib/host/controller/commits.js +97 -41
- package/lib/host/controller/commits.js.map +1 -1
- package/lib/host/controller/connections.d.ts +38 -0
- package/lib/host/controller/connections.d.ts.map +1 -0
- package/lib/host/controller/connections.js +71 -0
- package/lib/host/controller/connections.js.map +1 -0
- package/lib/host/controller/controller.d.ts +19 -24
- package/lib/host/controller/controller.d.ts.map +1 -1
- package/lib/host/controller/controller.js +181 -114
- package/lib/host/controller/controller.js.map +1 -1
- package/lib/host/controller/index.d.ts +18 -14
- package/lib/host/controller/index.d.ts.map +1 -1
- package/lib/host/controller/index.js +16 -14
- package/lib/host/controller/index.js.map +1 -1
- package/lib/host/controller/notes.d.ts +9 -9
- package/lib/host/controller/notes.d.ts.map +1 -1
- package/lib/host/controller/notes.js +16 -21
- package/lib/host/controller/notes.js.map +1 -1
- package/lib/host/controller/persist.d.ts +10 -3
- package/lib/host/controller/persist.d.ts.map +1 -1
- package/lib/host/controller/persist.js +89 -42
- package/lib/host/controller/persist.js.map +1 -1
- package/lib/host/controller/publish.d.ts +4 -0
- package/lib/host/controller/publish.d.ts.map +1 -0
- package/lib/host/controller/publish.js +56 -0
- package/lib/host/controller/publish.js.map +1 -0
- package/lib/host/controller/runs.d.ts +34 -10
- package/lib/host/controller/runs.d.ts.map +1 -1
- package/lib/host/controller/runs.js +241 -58
- package/lib/host/controller/runs.js.map +1 -1
- package/lib/host/controller/state.d.ts +122 -20
- package/lib/host/controller/state.d.ts.map +1 -1
- package/lib/host/controller/windows-run.d.ts +10 -2
- package/lib/host/controller/windows-run.d.ts.map +1 -1
- package/lib/host/controller/windows-run.js +66 -35
- package/lib/host/controller/windows-run.js.map +1 -1
- package/lib/host/discovery/candidates.d.ts +23 -13
- package/lib/host/discovery/candidates.d.ts.map +1 -1
- package/lib/host/discovery/candidates.js +20 -8
- package/lib/host/discovery/candidates.js.map +1 -1
- package/lib/host/discovery/index.d.ts +1 -0
- package/lib/host/discovery/index.d.ts.map +1 -1
- package/lib/host/discovery/index.js +1 -0
- package/lib/host/discovery/index.js.map +1 -1
- package/lib/host/discovery/probe.d.ts +16 -5
- package/lib/host/discovery/probe.d.ts.map +1 -1
- package/lib/host/discovery/probe.js +68 -10
- package/lib/host/discovery/probe.js.map +1 -1
- package/lib/host/discovery/scan.d.ts +14 -9
- package/lib/host/discovery/scan.d.ts.map +1 -1
- package/lib/host/discovery/scan.js +56 -30
- package/lib/host/discovery/scan.js.map +1 -1
- package/lib/host/flags.d.ts +28 -5
- package/lib/host/flags.d.ts.map +1 -1
- package/lib/host/flags.js +75 -7
- package/lib/host/flags.js.map +1 -1
- package/lib/host/kind.d.ts +45 -0
- package/lib/host/kind.d.ts.map +1 -0
- package/lib/host/kind.js +251 -0
- package/lib/host/kind.js.map +1 -0
- package/lib/host/manager.d.ts +21 -0
- package/lib/host/manager.d.ts.map +1 -0
- package/lib/host/manager.js +113 -0
- package/lib/host/manager.js.map +1 -0
- package/lib/host/migration.d.ts +26 -0
- package/lib/host/migration.d.ts.map +1 -0
- package/lib/host/migration.js +127 -0
- package/lib/host/migration.js.map +1 -0
- package/lib/host/plugin-meta.d.ts +12 -3
- package/lib/host/plugin-meta.d.ts.map +1 -1
- package/lib/host/plugin-meta.js +13 -4
- package/lib/host/plugin-meta.js.map +1 -1
- package/lib/host/schema.d.ts +301 -247
- package/lib/host/schema.d.ts.map +1 -1
- package/lib/host/schema.js +145 -120
- package/lib/host/schema.js.map +1 -1
- package/lib/host/settings.d.ts +22 -3
- package/lib/host/settings.d.ts.map +1 -1
- package/lib/host/settings.js +81 -60
- package/lib/host/settings.js.map +1 -1
- package/lib/host/status.d.ts +7 -10
- package/lib/host/status.d.ts.map +1 -1
- package/lib/host/status.js +8 -23
- package/lib/host/status.js.map +1 -1
- package/lib/host/tool.d.ts +13 -7
- package/lib/host/tool.d.ts.map +1 -1
- package/lib/host/tool.js +4 -3
- package/lib/host/tool.js.map +1 -1
- package/lib/host/types/config.d.ts +66 -12
- package/lib/host/types/config.d.ts.map +1 -1
- package/lib/host/types/executable.d.ts +8 -3
- package/lib/host/types/executable.d.ts.map +1 -1
- package/lib/host/types/index.d.ts +5 -4
- package/lib/host/types/index.d.ts.map +1 -1
- package/lib/host/types/services.d.ts +26 -0
- package/lib/host/types/services.d.ts.map +1 -0
- package/lib/host/types/services.js +9 -0
- package/lib/host/types/services.js.map +1 -0
- package/lib/host/types/settings.d.ts +118 -65
- package/lib/host/types/settings.d.ts.map +1 -1
- package/lib/host/types/stderr.d.ts +3 -5
- package/lib/host/types/stderr.d.ts.map +1 -1
- package/lib/host/values.d.ts +152 -37
- package/lib/host/values.d.ts.map +1 -1
- package/lib/host/values.js +304 -112
- package/lib/host/values.js.map +1 -1
- package/lib/host/windows/connect-flags.d.ts +19 -8
- package/lib/host/windows/connect-flags.d.ts.map +1 -1
- package/lib/host/windows/connect-flags.js +50 -20
- package/lib/host/windows/connect-flags.js.map +1 -1
- package/lib/host/windows/index.d.ts +1 -1
- package/lib/host/windows/index.d.ts.map +1 -1
- package/lib/host/windows/index.js +1 -1
- package/lib/host/windows/index.js.map +1 -1
- package/lib/host/windows/paths.d.ts +27 -6
- package/lib/host/windows/paths.d.ts.map +1 -1
- package/lib/host/windows/paths.js +40 -13
- package/lib/host/windows/paths.js.map +1 -1
- package/lib/host/windows/run.d.ts.map +1 -1
- package/lib/host/windows/run.js +3 -2
- package/lib/host/windows/run.js.map +1 -1
- package/lib/index.d.ts +72 -56
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +74 -55
- package/lib/index.js.map +1 -1
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +35 -14
- package/cordis.patch.yml +0 -5
|
@@ -8,18 +8,43 @@
|
|
|
8
8
|
* seeded. A `probe` is the follow-up probe of the selection that answers the
|
|
9
9
|
* version line the card shows; the Windows Chrome run shares this same
|
|
10
10
|
* one-run-at-a-time chain.
|
|
11
|
+
*
|
|
12
|
+
* Since the component model there is no bridge of this row's own to restart:
|
|
13
|
+
* an executable or flag change changes what a future `resolve` would answer,
|
|
14
|
+
* and what is running today keeps running until the manager's pool says
|
|
15
|
+
* otherwise — so the drift paths re-mirror the default and hand the live
|
|
16
|
+
* connections that follow it back to the pool (./connections.ts).
|
|
11
17
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import { entryIds, mergeEntries
|
|
18
|
+
import { AsyncResource } from "node:async_hooks";
|
|
19
|
+
import { entryIds, mergeEntries } from "../catalog.js";
|
|
20
|
+
import { DISCOVERY_RETRY_DELAY_MS, DISCOVERY_RETRY_MAX, ERROR_CAP, KIND_FIELDS, KIND_ID_WINDOWS } from "../constants.js";
|
|
14
21
|
import { checkChrome, chromeExecutableCandidates, scanChromeExecutables } from "../discovery/index.js";
|
|
15
|
-
import { flagsSkipCheck } from "../flags.js";
|
|
22
|
+
import { flagsSkipCheck, flagsSkipProbe } from "../flags.js";
|
|
16
23
|
import { firstLine, isChromeMissing } from "../status.js";
|
|
17
24
|
import { windowsChromeUrl } from "../windows/index.js";
|
|
18
|
-
import { readPersistedCustomPaths } from "../values.js";
|
|
19
|
-
import {
|
|
20
|
-
import { noteSelection
|
|
21
|
-
import { persistChromePath, persistExecutables } from "./persist.js";
|
|
22
|
-
import {
|
|
25
|
+
import { readDroppedExecutables, readPersistedCustomPaths, readSavedExecutables, resolveSelection } from "../values.js";
|
|
26
|
+
import { invalidateOwnedForField } from "./connections.js";
|
|
27
|
+
import { noteSelection } from "./notes.js";
|
|
28
|
+
import { persistChromePath, persistDroppedExecutables, persistExecutables } from "./persist.js";
|
|
29
|
+
import { publishLive } from "./publish.js";
|
|
30
|
+
import { prelaunchWindowsForConnection, runWindowsChrome } from "./windows-run.js";
|
|
31
|
+
/**
|
|
32
|
+
* The runs answer from a neutral async context, never from the one that
|
|
33
|
+
* scheduled them. A form commit is a config **write** — and the commit handler
|
|
34
|
+
* runs synchronously inside the HMR write transaction it opened. A run
|
|
35
|
+
* scheduled from that handler inherits the transaction's async-local store
|
|
36
|
+
* through the promise continuation, so every follow-up config write the run
|
|
37
|
+
* answers — the seeded `chromePath`, the merged executable rows, the
|
|
38
|
+
* connect-mode flag — reads as a *nested* transaction, which HMR refuses
|
|
39
|
+
* outright ("HMR transactions cannot be nested", measured live 2026-10-12):
|
|
40
|
+
* the run settles, the mirror says `connected`, and the write-back silently
|
|
41
|
+
* never lands. This resource carries no async context of its own, so binding
|
|
42
|
+
* the run body to it starts the whole chain clean; the same write queues
|
|
43
|
+
* normally behind the transaction that is no longer open. (The option that drops
|
|
44
|
+
* the context predates the typed surface of `AsyncResourceOptions`.)
|
|
45
|
+
*/
|
|
46
|
+
const contextlessOptions = { keepAsyncContext: false };
|
|
47
|
+
const runContext = new AsyncResource("dsh-chrome-mcp run", contextlessOptions);
|
|
23
48
|
/** Element-wise equality of two saved-row lists (order is the dropdown order). */
|
|
24
49
|
export function sameEntries(a, b) {
|
|
25
50
|
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length)
|
|
@@ -33,19 +58,19 @@ export function sameEntries(a, b) {
|
|
|
33
58
|
* missing, and the result lands in the persisted rows instead of staying
|
|
34
59
|
* readable forever as a second source.
|
|
35
60
|
*/
|
|
36
|
-
export function mergeLegacyPaths(controller) {
|
|
61
|
+
export function mergeLegacyPaths(controller, skip) {
|
|
37
62
|
const { state } = controller;
|
|
38
63
|
if (state.legacyPathsMerged)
|
|
39
64
|
return state.runningExecutables;
|
|
40
65
|
state.legacyPathsMerged = true;
|
|
41
|
-
const legacy = readPersistedCustomPaths(
|
|
66
|
+
const legacy = readPersistedCustomPaths(state.source());
|
|
42
67
|
if (legacy.length === 0)
|
|
43
68
|
return state.runningExecutables;
|
|
44
|
-
const merged = mergeEntries(state.runningExecutables, legacy);
|
|
69
|
+
const merged = mergeEntries(state.runningExecutables, skip === void 0 ? legacy : legacy.filter((id) => !skip.has(id)));
|
|
45
70
|
if (merged.changed) {
|
|
46
71
|
state.runningExecutables = merged.entries;
|
|
47
72
|
void persistExecutables(controller, merged.entries);
|
|
48
|
-
controller.ctx.logger.info(`chrome-
|
|
73
|
+
controller.ctx.logger.info(`dsh-chrome-mcp(${controller.config.serverName}): folded ${String(legacy.length)} saved path(s) from the legacy chromeCustomPaths list into the executable rows`);
|
|
49
74
|
}
|
|
50
75
|
return state.runningExecutables;
|
|
51
76
|
}
|
|
@@ -62,47 +87,93 @@ export function mergeLegacyPaths(controller) {
|
|
|
62
87
|
*/
|
|
63
88
|
export async function runExecutableDiscovery(controller) {
|
|
64
89
|
const { state } = controller;
|
|
65
|
-
const
|
|
90
|
+
const layers = state.source();
|
|
66
91
|
// Rows are user-authored; re-normalize on every read (the client writes them
|
|
67
92
|
// in one shot, so the shape it hands may be anything).
|
|
68
|
-
const stored =
|
|
93
|
+
const stored = readSavedExecutables(layers);
|
|
94
|
+
// An id the stored list has lost since the last run rode the run that is
|
|
95
|
+
// reading it now — and a found path re-folds into the rows on every merge
|
|
96
|
+
// step, so a deleted row would stand straight back up behind its own
|
|
97
|
+
// deletion (measured live 2026-10-12: the (x86) Windows-executable row read
|
|
98
|
+
// as a delete that never landed). What stands dropped lives in
|
|
99
|
+
// `droppedExecutables` and no merge step folds it back; an id the list
|
|
100
|
+
// carries again clears its record.
|
|
101
|
+
const storedIds = new Set(entryIds(stored));
|
|
102
|
+
const deleted = readDroppedExecutables(layers);
|
|
103
|
+
const skipIds = new Set(deleted);
|
|
104
|
+
for (const id of entryIds(state.runningExecutables)) {
|
|
105
|
+
if (!storedIds.has(id))
|
|
106
|
+
skipIds.add(id);
|
|
107
|
+
}
|
|
108
|
+
for (const id of deleted) {
|
|
109
|
+
if (storedIds.has(id))
|
|
110
|
+
skipIds.delete(id);
|
|
111
|
+
}
|
|
112
|
+
if (skipIds.size !== deleted.length || !deleted.every((id) => skipIds.has(id))) {
|
|
113
|
+
void persistDroppedExecutables(controller, [...skipIds]);
|
|
114
|
+
}
|
|
69
115
|
const storedChanged = !sameEntries(stored, state.runningExecutables);
|
|
70
|
-
state.runningExecutables = storedChanged ? stored : mergeLegacyPaths(controller);
|
|
116
|
+
state.runningExecutables = storedChanged ? stored : mergeLegacyPaths(controller, skipIds);
|
|
71
117
|
const savedIds = entryIds(state.runningExecutables);
|
|
72
|
-
|
|
118
|
+
// What the profile configures, what this host carries (the Windows-side
|
|
119
|
+
// executables a WSL host reaches through the interop mount — offered, never
|
|
120
|
+
// probed), what the rows saved, and what the bridge runs.
|
|
121
|
+
const candidates = chromeExecutableCandidates(controller.config, savedIds, state.runningChromePath, controller.windowsExecutables());
|
|
73
122
|
let statuses = [];
|
|
74
123
|
try {
|
|
75
124
|
statuses = await scanChromeExecutables(candidates, controller.blockedForPlatform);
|
|
76
125
|
}
|
|
77
126
|
catch (error) {
|
|
78
|
-
controller.ctx.logger.warn(`chrome-
|
|
127
|
+
controller.ctx.logger.warn(`dsh-chrome-mcp(${controller.config.serverName}): executable run failed: ${String(error)}`);
|
|
79
128
|
}
|
|
80
|
-
state.
|
|
129
|
+
state.live.executableStatus = statuses;
|
|
81
130
|
// A found path that is not a row yet becomes one, nameless; a row the user
|
|
82
131
|
// named keeps that name. A path that vanished is dropped by the scan and so
|
|
83
|
-
// stops being offered — the reference's "Fetch executables" rule.
|
|
84
|
-
|
|
132
|
+
// stops being offered — the reference's "Fetch executables" rule. A path the
|
|
133
|
+
// user dropped answers too (a located Windows executable keeps answering
|
|
134
|
+
// forever) and must not be folded back.
|
|
135
|
+
const merged = mergeEntries(state.runningExecutables, statuses.map((status) => status.path).filter((path) => !skipIds.has(path)));
|
|
85
136
|
if (merged.changed) {
|
|
86
137
|
state.runningExecutables = merged.entries;
|
|
87
138
|
void persistExecutables(controller, merged.entries);
|
|
88
139
|
}
|
|
89
140
|
if (state.runningChromePath === "") {
|
|
90
141
|
const seeded = statuses.find((status) => status.version !== "" && status.error === "");
|
|
91
|
-
if (seeded !== void 0 && !
|
|
92
|
-
// Seeding is a selection change like any other:
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
controller.ctx.logger.info(`chrome-
|
|
142
|
+
if (seeded !== void 0 && !flagsSkipProbe(state.runningFlags)) {
|
|
143
|
+
// Seeding is a selection change like any other: it follows the same
|
|
144
|
+
// drift path a pick takes, otherwise the card would claim a path no
|
|
145
|
+
// answer launches with.
|
|
146
|
+
controller.ctx.logger.info(`dsh-chrome-mcp(${controller.config.serverName}): no executable configured — seeding chromePath = ${seeded.path} (found by scan)`);
|
|
96
147
|
state.seededPath = seeded.path;
|
|
97
148
|
void persistChromePath(controller, seeded.path);
|
|
98
149
|
// Already inside this run: the status list above already carries the
|
|
99
150
|
// seeded path's own answer, so no follow-up run.
|
|
100
151
|
applyChromePath(controller, seeded.path, "selected", false);
|
|
101
152
|
}
|
|
102
|
-
else if (candidates.length > 0 && !
|
|
103
|
-
// Nothing
|
|
104
|
-
|
|
105
|
-
|
|
153
|
+
else if (candidates.length > 0 && !flagsSkipProbe(state.runningFlags) && statuses.every((status) => status.error !== "" || status.version === "")) {
|
|
154
|
+
// Nothing runnable at all: the known executable-missing state. A
|
|
155
|
+
// candidate that answered a note instead of a version says why —
|
|
156
|
+
// the one case is the Windows executable a WSL host cannot launch
|
|
157
|
+
// but drives through the **Prelaunch Windows Chrome** run — so the
|
|
158
|
+
// line names what to run instead of leaving a bare "not found".
|
|
159
|
+
const noted = statuses.find((status) => status.note !== "");
|
|
160
|
+
const detail = noted === void 0
|
|
161
|
+
? `no executable detected (checked: ${candidates.join(", ")})`
|
|
162
|
+
: `no executable detected for this host (checked: ${candidates.join(", ")}); ${firstLine(noted.note)}`;
|
|
163
|
+
// The official troubleshooting advice for this state on a Linux
|
|
164
|
+
// host (docs/troubleshooting.md): nothing local answered, and the
|
|
165
|
+
// candidate list only knows where a `stable` install of this kernel
|
|
166
|
+
// lives — the line says what to do about it instead of leaving a
|
|
167
|
+
// bare "not found". On a WSL host the Windows side joins the answer
|
|
168
|
+
// as the **run**, never a launch: a Windows `chrome.exe` cannot be
|
|
169
|
+
// launched from WSL (see AGENTS.md, which is why the run exists).
|
|
170
|
+
const advice = noted === void 0 && controller.linuxHost
|
|
171
|
+
? controller.wslHost
|
|
172
|
+
? "; install Google Chrome inside the Linux environment, or run Prelaunch Windows Chrome to drive the Windows side (connect mode)"
|
|
173
|
+
: "; install Google Chrome inside the Linux environment (chrome-devtools-mcp never downloads one)"
|
|
174
|
+
: "";
|
|
175
|
+
state.live.lastError = firstLine(`Chrome executable not found: ${detail}${advice}`, ERROR_CAP + advice.length);
|
|
176
|
+
state.live.chromeMissing = isChromeMissing(state.live.lastError);
|
|
106
177
|
}
|
|
107
178
|
}
|
|
108
179
|
noteSelection(controller);
|
|
@@ -120,88 +191,200 @@ export async function probeSelection(controller) {
|
|
|
120
191
|
// answer for: the card mutes the pill and shows no version line for a probe
|
|
121
192
|
// the host cannot run.
|
|
122
193
|
if (flagsSkipCheck(state.runningFlags)) {
|
|
123
|
-
state.
|
|
194
|
+
state.live.chromeVersion = "";
|
|
195
|
+
publishLive(controller);
|
|
124
196
|
return "";
|
|
125
197
|
}
|
|
126
198
|
if (state.runningChromePath === "") {
|
|
127
|
-
state.
|
|
199
|
+
state.live.chromeVersion = "";
|
|
200
|
+
publishLive(controller);
|
|
128
201
|
return "";
|
|
129
202
|
}
|
|
130
203
|
try {
|
|
131
204
|
const version = await checkChrome({ ...controller.config, extraFlags: state.runningFlags, chromePath: state.runningChromePath }, state.runningFlags, controller.blockedForPlatform);
|
|
132
|
-
state.
|
|
205
|
+
state.live.chromeVersion = version;
|
|
133
206
|
if (version !== "") {
|
|
134
|
-
state.
|
|
135
|
-
state.
|
|
207
|
+
state.live.lastError = "";
|
|
208
|
+
state.live.chromeMissing = false;
|
|
136
209
|
}
|
|
210
|
+
publishLive(controller);
|
|
137
211
|
return version;
|
|
138
212
|
}
|
|
139
213
|
catch (error) {
|
|
140
|
-
state.
|
|
214
|
+
state.live.lastError = firstLine(error instanceof Error ? error.message : String(error));
|
|
141
215
|
// A failed probe says nothing about the version: keep no stale answer
|
|
142
216
|
// behind the error.
|
|
143
|
-
state.
|
|
144
|
-
state.
|
|
145
|
-
|
|
217
|
+
state.live.chromeVersion = "";
|
|
218
|
+
state.live.chromeMissing = isChromeMissing(state.live.lastError);
|
|
219
|
+
publishLive(controller);
|
|
220
|
+
controller.ctx.logger.warn(`dsh-chrome-mcp(${controller.config.serverName}): executable probe failed: ${state.live.lastError}`);
|
|
146
221
|
return "";
|
|
147
222
|
}
|
|
148
223
|
}
|
|
149
224
|
/**
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
225
|
+
* Write one executable selection through the Host write-back channel — the same
|
|
226
|
+
* persisted `chromePath` field every other surface reads — and re-fire the run
|
|
227
|
+
* behind it, the way the card's own selection commit does: a changed selection
|
|
228
|
+
* shifts the default answers (connections follow, the run re-runs), an
|
|
229
|
+
* unchanged write just re-probes. This is the command-side mirror of the
|
|
230
|
+
* picker — pill, command and catalog read and write one field — so a headless
|
|
231
|
+
* selection lands exactly where a GUI pick would.
|
|
232
|
+
*/
|
|
233
|
+
export function selectChromePath(controller, path) {
|
|
234
|
+
return persistChromePath(controller, path).then(() => {
|
|
235
|
+
const { state } = controller;
|
|
236
|
+
// Layers read *after* the write: what the user layer answers is the
|
|
237
|
+
// written path — or, on a cleared write ("" = fall back to the row
|
|
238
|
+
// config), whatever the row config carries under it.
|
|
239
|
+
const selection = resolveSelection(state.source());
|
|
240
|
+
const nextChromePath = selection.path;
|
|
241
|
+
const nextSource = nextChromePath === "" ? "" : selection.source !== "" ? selection.source : "selected";
|
|
242
|
+
if (nextChromePath !== state.runningChromePath || nextSource !== state.runningChromeSource)
|
|
243
|
+
applyChromePath(controller, nextChromePath, nextSource);
|
|
244
|
+
else
|
|
245
|
+
queue(controller, "probe");
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Carry a different executable into the live answers — the argv tail carries
|
|
250
|
+
* `--executablePath=<path>`, so unlike a flags edit this one is what the card's
|
|
251
|
+
* pill claims is running. What lives stands on is not restarted here: a
|
|
252
|
+
* connection that follows the row's default is handed back to the pool for a
|
|
253
|
+
* re-resolve, and one that picked its own executable was never following it.
|
|
254
|
+
* `rerun` schedules the scan+probe that follows a selection change; a caller
|
|
255
|
+
* that is already inside that run (the seeding branch above) passes `false`.
|
|
155
256
|
*/
|
|
156
257
|
export function applyChromePath(controller, path, nextSource, rerun = true) {
|
|
157
258
|
const { state } = controller;
|
|
158
259
|
state.runningChromePath = path;
|
|
159
260
|
state.runningChromeSource = nextSource;
|
|
261
|
+
state.live.runningNote = "";
|
|
160
262
|
noteSelection(controller);
|
|
161
|
-
controller.ctx.logger.info(`chrome-
|
|
162
|
-
|
|
163
|
-
noteStderr(controller, built);
|
|
164
|
-
restartBridge(controller, built, "executable update failed");
|
|
263
|
+
controller.ctx.logger.info(`dsh-chrome-mcp(${controller.config.serverName}): executable → "${path || "(none)"}" (the default answers shift with it)`);
|
|
264
|
+
invalidateOwnedForField(controller, KIND_FIELDS.executable);
|
|
165
265
|
// A different executable reads a different machine: refresh the list and
|
|
166
266
|
// probe what is now selected, so the pill's version is the new one's.
|
|
167
267
|
if (rerun)
|
|
168
268
|
queue(controller, "probe");
|
|
169
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* The bounded retry of one FAILED executable run.
|
|
272
|
+
*
|
|
273
|
+
* The failure this answers is not "Chrome is not installed" — that answer is a
|
|
274
|
+
* settled result and re-probing it forever would just be churn. It is the
|
|
275
|
+
* host that is not ready *yet*: on a WSL boot the Windows executables arrive
|
|
276
|
+
* through the interop mount, and the first run can fire seconds before that
|
|
277
|
+
* mount answers, so what the run states — `chromeMissing`, the known
|
|
278
|
+
* executable-missing state — reads "no found" for a machine that is about to
|
|
279
|
+
* answer. Today nothing re-fires: the card states that answer until someone
|
|
280
|
+
* presses **Fetch** again. So a run that settles standing failed arms exactly
|
|
281
|
+
* one retry behind the delay, capped (`DISCOVERY_RETRY_MAX` retries per run
|
|
282
|
+
* chain, reset the moment a run stops failing), and cancelled with the
|
|
283
|
+
* instance.
|
|
284
|
+
*
|
|
285
|
+
* The rule that decides where the retry sits is the persistence of the known
|
|
286
|
+
* error: the retry never touches `lastError`/`chromeMissing` — it *re-runs the
|
|
287
|
+
* same run*, whose own answers already follow the evidence rule (the run clears
|
|
288
|
+
* those fields only through a probe that answered a version). So the retry
|
|
289
|
+
* cannot clobber what the user is already being told: either the later run finds
|
|
290
|
+
* the executable (its probe answers a version, which is exactly the evidence
|
|
291
|
+
* that clears the state), or it does not (the same answer re-states, still
|
|
292
|
+
* standing). Nothing else distinguishes them — which is why arming the retry is
|
|
293
|
+
* safe and why it arms only while the state stands.
|
|
294
|
+
*/
|
|
295
|
+
function noteRunFailure(controller, statuses) {
|
|
296
|
+
const { state } = controller;
|
|
297
|
+
// Only a run that settled standing in the known executable-missing state is
|
|
298
|
+
// failed. And of those, the candidates that answered a platform *note* say
|
|
299
|
+
// why no run on this host will ever launch them (the one case is the Windows
|
|
300
|
+
// executable a WSL host drives through **Prelaunch Windows Chrome**) — that
|
|
301
|
+
// is a settled answer, not a host not ready yet, so a retry would answer the
|
|
302
|
+
// same note forever and is not armed.
|
|
303
|
+
const noteOnly = statuses.length > 0 && statuses.every((status) => status.note !== "");
|
|
304
|
+
if (state.live.chromeMissing !== true || noteOnly) {
|
|
305
|
+
state.retriesPending = 0;
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
if (state.disposed)
|
|
309
|
+
return;
|
|
310
|
+
if (state.retryTimer !== void 0)
|
|
311
|
+
return;
|
|
312
|
+
if (state.retriesPending >= DISCOVERY_RETRY_MAX)
|
|
313
|
+
return;
|
|
314
|
+
state.retriesPending += 1;
|
|
315
|
+
state.retryTimer = setTimeout(() => {
|
|
316
|
+
state.retryTimer = void 0;
|
|
317
|
+
// Only while the failure still stands: an instance whose later run found
|
|
318
|
+
// the executable has nothing left to retry.
|
|
319
|
+
if (state.disposed || state.live.chromeMissing !== true)
|
|
320
|
+
return;
|
|
321
|
+
void queue(controller, "probe");
|
|
322
|
+
}, DISCOVERY_RETRY_DELAY_MS);
|
|
323
|
+
}
|
|
324
|
+
/** Cancel the pending bounded retry — what the instance's dispose calls. */
|
|
325
|
+
export function cancelDiscoveryRetry(controller) {
|
|
326
|
+
const { state } = controller;
|
|
327
|
+
if (state.retryTimer !== void 0) {
|
|
328
|
+
clearTimeout(state.retryTimer);
|
|
329
|
+
state.retryTimer = void 0;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
170
332
|
/**
|
|
171
333
|
* Serialize one unit of work: a rows-only refresh, a run that also re-probes
|
|
172
334
|
* what is selected, or the Windows Chrome launch. Windows runs share this chain
|
|
173
335
|
* because the invariant is "one run at a time" — nothing about it interacts with
|
|
174
|
-
* the local probe.
|
|
336
|
+
* the local probe. The body answers from a neutral async context (see
|
|
337
|
+
* `runContext`): a run scheduled from a form commit must not carry that
|
|
338
|
+
* commit's write transaction, or every write the run answers would be refused
|
|
339
|
+
* as a nested transaction.
|
|
175
340
|
*/
|
|
176
341
|
export function queue(controller, kind) {
|
|
177
342
|
const { state } = controller;
|
|
178
343
|
state.runs = state.runs
|
|
179
|
-
.then(async () => {
|
|
344
|
+
.then(runContext.bind(async () => {
|
|
180
345
|
if (kind === "windows") {
|
|
181
346
|
await runWindowsChrome(controller);
|
|
182
347
|
}
|
|
183
348
|
else {
|
|
184
|
-
await runExecutableDiscovery(controller);
|
|
349
|
+
const statuses = await runExecutableDiscovery(controller);
|
|
185
350
|
if (kind === "probe")
|
|
186
351
|
await probeSelection(controller);
|
|
352
|
+
// A run that settled standing failed arms one bounded retry; a
|
|
353
|
+
// run that no longer stands failed resets the retry counter.
|
|
354
|
+
noteRunFailure(controller, statuses);
|
|
187
355
|
}
|
|
188
|
-
state.
|
|
189
|
-
|
|
356
|
+
state.live.executableDiscoveryRevision += 1;
|
|
357
|
+
publishLive(controller);
|
|
358
|
+
}))
|
|
190
359
|
.catch(() => { });
|
|
191
360
|
return state.runs;
|
|
192
361
|
}
|
|
193
362
|
/**
|
|
194
363
|
* One Windows Chrome run on demand: queued on the same chain as the button (one
|
|
195
|
-
* run at a time), resolved once it settled. The answer is the
|
|
196
|
-
*
|
|
197
|
-
*
|
|
364
|
+
* run at a time), resolved once it settled. The answer is the live mirror read
|
|
365
|
+
* after the run — the tool surface says what `windowsChromeStatus` says, never
|
|
366
|
+
* more than the run answered.
|
|
367
|
+
*
|
|
368
|
+
* With the manager mounted this is also the surface that keeps the live
|
|
369
|
+
* `chrome-windows` connections honest: a run that connected while such a
|
|
370
|
+
* connection stands is a reason to answer that connection again (the run is
|
|
371
|
+
* idempotent — the live port rides into `currentFlags` — so re-answering is not
|
|
372
|
+
* a second browser), and a run that connected without one is said to be worth
|
|
373
|
+
* one.
|
|
198
374
|
*/
|
|
199
375
|
export async function prelaunchWindowsChrome(controller) {
|
|
200
376
|
const { state } = controller;
|
|
201
|
-
await
|
|
202
|
-
const status = state.
|
|
377
|
+
await prelaunchWindowsForConnection(controller);
|
|
378
|
+
const status = state.live.windowsChromeStatus;
|
|
203
379
|
if (status.state === "connected" && status.port > 0) {
|
|
204
|
-
|
|
380
|
+
const url = windowsChromeUrl(status.port);
|
|
381
|
+
if (state.connections !== void 0) {
|
|
382
|
+
const windowsEntries = state.connections.entries().filter((entry) => entry.kind === KIND_ID_WINDOWS);
|
|
383
|
+
if (windowsEntries.length > 0)
|
|
384
|
+
return `Windows Chrome connected at ${url} — the manager's Windows Chrome connections stand live against it.`;
|
|
385
|
+
return `Windows Chrome connected at ${url}. No Windows Chrome connection exists yet — add one under the "Windows Chrome (WSL debug port)" kind, or use the Chrome connection kind with a "--browserUrl=${url}" flag.`;
|
|
386
|
+
}
|
|
387
|
+
return `Windows Chrome connected at ${url}. Without the MCP manager there is no connection to drive it — install the MCP manager bundle.`;
|
|
205
388
|
}
|
|
206
389
|
if (status.state === "not-applicable") {
|
|
207
390
|
return "This host is not a WSL instance: there is no Windows-side browser here to drive.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../src/host/controller/runs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../src/host/controller/runs.ts"],"names":[],"mappings":"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"}
|