@@ -278,64 +278,72 @@ ${renderAgentLaunch(config)}
278278// EFFECT: generated bash calls docker-git-browser-connection, which calls Docker.
279279// INVARIANT: browser shares the project container network namespace, so CDP is http://127.0.0.1:9223 from agents.
280280// COMPLEXITY: O(1) entrypoint orchestration; Docker build/run is delegated to Rust.
281+ const renderEntrypointRustBrowserConnectionStart = ( ) : ReadonlyArray < string > => [
282+ "# Unified Rust browser connection (noVNC + CDP) for MCP Playwright + Hermes — per #347." ,
283+ "# Defaults are safe no-ops unless MCP Playwright is enabled." ,
284+ "docker_git_start_rust_browser_connection() {" ,
285+ " if [[ \"${MCP_PLAYWRIGHT_ENABLE:-0}\" != \"1\" ]]; then" ,
286+ " return 0" ,
287+ " fi" ,
288+ "" ,
289+ " local browser_bin=\"\"" ,
290+ " local candidate" ,
291+ " for candidate in /usr/local/bin/docker-git-browser-connection /root/.cargo/bin/docker-git-browser-connection /usr/local/cargo/bin/docker-git-browser-connection $(command -v docker-git-browser-connection 2>/dev/null || true); do" ,
292+ " if [[ -x \"$candidate\" ]]; then" ,
293+ " browser_bin=\"$candidate\"" ,
294+ " break" ,
295+ " fi" ,
296+ " done" ,
297+ "" ,
298+ " if [[ -z \"$browser_bin\" ]]; then" ,
299+ " echo \"[browser] WARNING: docker-git-browser-connection not found; Playwright MCP browser is unavailable\" >&2" ,
300+ " MCP_PLAYWRIGHT_ENABLE=0" ,
301+ " export MCP_PLAYWRIGHT_ENABLE" ,
302+ " return 0" ,
303+ " fi" ,
304+ "" ,
305+ " local project_container=\"${DOCKER_GIT_PROJECT_CONTAINER_NAME:-$(hostname)}\"" ,
306+ " local network_mode=\"container:${project_container}\"" ,
307+ " mkdir -p /var/log" ,
308+ " \"$browser_bin\" start --project \"$project_container\" --network \"$network_mode\" >> /var/log/docker-git-browser.log 2>&1 || {" ,
309+ " echo \"[browser] WARNING: Rust browser connection failed; see /var/log/docker-git-browser.log\" >&2" ,
310+ " MCP_PLAYWRIGHT_ENABLE=0" ,
311+ " export MCP_PLAYWRIGHT_ENABLE" ,
312+ " return 0" ,
313+ " }" ,
314+ " echo \"[browser] Rust browser connection is ready via $browser_bin on $network_mode\"" ,
315+ "}"
316+ ]
317+
318+ const renderEntrypointRustBrowserConnectionStop = ( ) : ReadonlyArray < string > => [
319+ "docker_git_stop_playwright_browser() {" ,
320+ " if [[ \"${MCP_PLAYWRIGHT_ENABLE:-0}\" != \"1\" ]]; then" ,
321+ " return 0" ,
322+ " fi" ,
323+ "" ,
324+ " local browser_bin=\"\"" ,
325+ " local candidate" ,
326+ " for candidate in /usr/local/bin/docker-git-browser-connection /root/.cargo/bin/docker-git-browser-connection /usr/local/cargo/bin/docker-git-browser-connection $(command -v docker-git-browser-connection 2>/dev/null || true); do" ,
327+ " if [[ -x \"$candidate\" ]]; then" ,
328+ " browser_bin=\"$candidate\"" ,
329+ " break" ,
330+ " fi" ,
331+ " done" ,
332+ "" ,
333+ " if [[ -z \"$browser_bin\" ]]; then" ,
334+ " return 0" ,
335+ " fi" ,
336+ "" ,
337+ " local project_container=\"${DOCKER_GIT_PROJECT_CONTAINER_NAME:-$(hostname)}\"" ,
338+ " \"$browser_bin\" stop --project \"$project_container\" >> /var/log/docker-git-browser.log 2>&1 || true" ,
339+ "}"
340+ ]
341+
281342export const renderEntrypointRustBrowserConnection = ( ) : string =>
282343 [
283- "# Unified Rust browser connection (noVNC + CDP) for MCP Playwright + Hermes — per #347." ,
284- "# Defaults are safe no-ops unless MCP Playwright is enabled." ,
285- "docker_git_start_rust_browser_connection() {" ,
286- " if [[ \"${MCP_PLAYWRIGHT_ENABLE:-0}\" != \"1\" ]]; then" ,
287- " return 0" ,
288- " fi" ,
289- "" ,
290- " local browser_bin=\"\"" ,
291- " local candidate" ,
292- " for candidate in /usr/local/bin/docker-git-browser-connection /root/.cargo/bin/docker-git-browser-connection /usr/local/cargo/bin/docker-git-browser-connection $(command -v docker-git-browser-connection 2>/dev/null || true); do" ,
293- " if [[ -x \"$candidate\" ]]; then" ,
294- " browser_bin=\"$candidate\"" ,
295- " break" ,
296- " fi" ,
297- " done" ,
298- "" ,
299- " if [[ -z \"$browser_bin\" ]]; then" ,
300- " echo \"[browser] WARNING: docker-git-browser-connection not found; Playwright MCP browser is unavailable\" >&2" ,
301- " MCP_PLAYWRIGHT_ENABLE=0" ,
302- " export MCP_PLAYWRIGHT_ENABLE" ,
303- " return 0" ,
304- " fi" ,
305- "" ,
306- " local project_container=\"${DOCKER_GIT_PROJECT_CONTAINER_NAME:-$(hostname)}\"" ,
307- " local network_mode=\"container:${project_container}\"" ,
308- " mkdir -p /var/log" ,
309- " \"$browser_bin\" start --project \"$project_container\" --network \"$network_mode\" >> /var/log/docker-git-browser.log 2>&1 || {" ,
310- " echo \"[browser] WARNING: Rust browser connection failed; see /var/log/docker-git-browser.log\" >&2" ,
311- " MCP_PLAYWRIGHT_ENABLE=0" ,
312- " export MCP_PLAYWRIGHT_ENABLE" ,
313- " return 0" ,
314- " }" ,
315- " echo \"[browser] Rust browser connection is ready via $browser_bin on $network_mode\"" ,
316- "}" ,
317- "" ,
318- "docker_git_stop_playwright_browser() {" ,
319- " if [[ \"${MCP_PLAYWRIGHT_ENABLE:-0}\" != \"1\" ]]; then" ,
320- " return 0" ,
321- " fi" ,
322- "" ,
323- " local browser_bin=\"\"" ,
324- " local candidate" ,
325- " for candidate in /usr/local/bin/docker-git-browser-connection /root/.cargo/bin/docker-git-browser-connection /usr/local/cargo/bin/docker-git-browser-connection $(command -v docker-git-browser-connection 2>/dev/null || true); do" ,
326- " if [[ -x \"$candidate\" ]]; then" ,
327- " browser_bin=\"$candidate\"" ,
328- " break" ,
329- " fi" ,
330- " done" ,
331- "" ,
332- " if [[ -z \"$browser_bin\" ]]; then" ,
333- " return 0" ,
334- " fi" ,
344+ ...renderEntrypointRustBrowserConnectionStart ( ) ,
335345 "" ,
336- " local project_container=\"${DOCKER_GIT_PROJECT_CONTAINER_NAME:-$(hostname)}\"" ,
337- " \"$browser_bin\" stop --project \"$project_container\" >> /var/log/docker-git-browser.log 2>&1 || true" ,
338- "}" ,
346+ ...renderEntrypointRustBrowserConnectionStop ( ) ,
339347 "" ,
340348 "docker_git_start_rust_browser_connection"
341349 ] . join ( "\n" )
0 commit comments