Repository navigation
Expand file tree
/
Copy pathapplication.properties
More file actions
342 lines (254 loc) · 13.3 KB
/
Copy pathapplication.properties
File metadata and controls
342 lines (254 loc) · 13.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
spring.main.allow-bean-definition-overriding=true
# =============================================================================
# Browser4 Application Configuration
# =============================================================================
# This file documents ALL environment variables recognized by Browser4.
# Values below are PLACEHOLDERS and commented out by default.
# The CLI and backend read these from the OS environment, not from this file —
# this file serves as documentation and a local reference.
#
# To manage env vars interactively, use the helper scripts:
# bash: ./bin/env-manage.sh show|get|set|unset|export|list
# pwsh: .\bin\env-manage.ps1 show|get|set|unset|export|list
# =============================================================================
# ---------------------------------------------------------------------------
# CLI: Runtime & Paths
# ---------------------------------------------------------------------------
# Chrome extension auth token for auto-approval of attach requests.
# Find yours at: chrome-extension://.../connect.html → "Authentication Token" section
# The CLI reads this from the OS environment, not from this file.
# BROWSER4_EXTENSION_TOKEN=<your-real-token>
# Default session ID for the CLI (pre-selects a session so you don't need --session on every command)
# BROWSER4_CLI_SESSION=default
# Override CLI session state directory (default: ~/.browser4 on Linux/macOS, %APPDATA%/browser4 on Windows)
# BROWSER4_CLI_STATE_DIR=/custom/path/to/state
# Override runtime bundle & download cache directory
# BROWSER4_RUNTIME_DIR=/custom/path/to/runtime
# Override skills directory path (default: versioned install dir under RUNTIME_DIR)
# BROWSER4_SKILLS_DIR=/custom/path/to/skills
# Custom Chromium/Chrome browser executable path (auto-detected if unset)
# BROWSER4_BROWSER_PATH=/usr/bin/google-chrome
# JVM options injected into backend server launch, space-separated
# BROWSER4_SERVER_OPTS=-Dapp.name=browser4 -Xmx2g
# MCP-over-HTTP endpoint (opt-in; OFF by default). Enabling it binds a second
# endpoint (POST /mcp, default port 8088) and eagerly acquires a browser session
# at backend start, so it is only worth turning on for an MCP client such as
# Claude Desktop or Cursor. Pass it through the JVM options above, e.g.:
# BROWSER4_SERVER_OPTS=-Dmcp.http.enabled=true -Dmcp.http.port=8088
# mcp.http.enabled=true
# mcp.http.port=8088
# Directory for server startup logs (default: RUNTIME_DIR/logs)
# BROWSER4_SERVER_LOG_DIR=/path/to/logs
# ---------------------------------------------------------------------------
# CLI: Download & Mirror
# ---------------------------------------------------------------------------
# Override releases download base URL (default: GitHub Releases)
# BROWSER4_RELEASES_BASE_URL=https://mirrors.example.com/browser4/releases
# Override mirror configuration file path (default: runtime/mirrors.json)
# BROWSER4_MIRRORS_CONFIG=/path/to/custom-mirrors.json
# Mirror reachability check timeout in seconds (default: 5)
# BROWSER4_CLI_MIRROR_CHECK_TIMEOUT_SECS=10
# Per-mirror speed test download timeout in seconds (default: 30)
# BROWSER4_CLI_MIRROR_SPEED_TEST_TIMEOUT_SECS=15
# Cached mirror preference TTL in seconds (default: 86400 = 24 hours)
# BROWSER4_CLI_MIRROR_PREFERENCE_TTL_SECS=3600
# Download timeout in seconds (default: 1800 = 30 minutes)
# BROWSER4_CLI_DOWNLOAD_TIMEOUT_SECS=600
# Set to 1 to disable speed testing (falls back to TCP-only reachability)
# BROWSER4_CLI_DISABLE_MIRROR_SPEED_TEST=1
# Root search start directory for resolving relative paths (default: current working directory)
# BROWSER4_CLI_INVOKE_DIR=/home/user/projects
# ---------------------------------------------------------------------------
# CLI: Build & Bundle
# ---------------------------------------------------------------------------
# Set to 1/true/yes/on to force download from remote releases instead of local build
# BROWSER4_CLI_FORCE_REMOTE_BUNDLE=1
# Set to 1/true/yes/on to force rebuild runtime bundle from source
# BROWSER4_CLI_FORCE_REBUILD_BUNDLE=1
# ---------------------------------------------------------------------------
# CLI: HTTP Request Timeouts (seconds)
# ---------------------------------------------------------------------------
# Default HTTP request timeout (default: 30)
# BROWSER4_CLI_HTTP_TIMEOUT_SECS=60
# Navigation (page load) request timeout (default: 120)
# BROWSER4_CLI_NAVIGATION_TIMEOUT_SECS=180
# Text input request timeout (default: 90)
# BROWSER4_CLI_INPUT_TIMEOUT_SECS=120
# Snapshot request timeout (default: 60)
# BROWSER4_CLI_SNAPSHOT_TIMEOUT_SECS=90
# Agent tool request timeout (default: 180)
# BROWSER4_CLI_AGENT_TIMEOUT_SECS=300
# Act tool request timeout (default: 60)
# BROWSER4_CLI_ACT_TIMEOUT_SECS=120
# Crawl request timeout (default: 600)
# BROWSER4_CLI_CRAWL_TIMEOUT_SECS=1200
# ---------------------------------------------------------------------------
# CLI: Proxy
# ---------------------------------------------------------------------------
# Explicit CLI download proxy URL (also set by --proxy <url> on the CLI)
# BROWSER4_CLI_PROXY=http://proxy:8080
# Internal test flag (ignore)
# BROWSER4_CLI_TEST_TEMPORARY_PROFILE=0
# ---------------------------------------------------------------------------
# LLM / AI Provider API Keys
# ---------------------------------------------------------------------------
# Set ONE of these depending on which LLM provider you use.
# Priority order (in AgentToolExecutor): LLM_API_KEY → DEEPSEEK_API_KEY →
# OPENROUTER_API_KEY → VOLCENGINE_API_KEY → OPENAI_API_KEY
#
# IMPORTANT: env-style keys (DEEPSEEK_API_KEY=...) below are only honored as
# REAL environment variables or -D system properties. Inside a `.properties`
# file (including ~/.browser4/config/conf-enabled/*.properties) they do NOT
# bind to the engine's dotted lookups (deepseek.api.key) and extract/summarize
# would fail with "LLM API key is not configured". At startup the backend
# automatically rewrites env-style LLM keys found in conf-enabled properties
# files to their dotted form (DEEPSEEK_API_KEY=... → deepseek.api.key=...),
# but the recommended file format is the dotted keys in the provider sections
# below.
# Generic LLM API key (fallback for all providers)
# LLM_API_KEY=sk-...
# OpenAI (env-var style; only valid as an environment variable)
# OPENAI_API_KEY=sk-...
# OpenRouter (env-var style; only valid as an environment variable)
# OPENROUTER_API_KEY=sk-or-v1-...
# DeepSeek (env-var style; only valid as an environment variable)
# DEEPSEEK_API_KEY=sk-...
# Volcengine (env-var style; only valid as an environment variable)
# VOLCENGINE_API_KEY=...
# Provider-specific Spring properties (uncomment the provider you want to use):
## OpenRouter
#openrouter.api.key=...
#openrouter.model.name=openai/gpt-5.4
#openrouter.base.url=https://openrouter.ai/api/v1/
#openrouter.api.key=...
#openrouter.model.name=bytedance-seed/seed-2.0-lite
#openrouter.base.url=https://openrouter.ai/api/v1/
## Volcengine (ByteDance)
# volcengine.api.key=...
# volcengine.model.name=doubao-seed-2-0-pro-260215
# volcengine.base.url=https://ark.cn-beijing.volces.com/api/v3
## DeepSeek
# deepseek.api.key=sk-...
# deepseek.model.name=deepseek-v4-flash
# deepseek.base.url=https://api.deepseek.com
# Per-request input length cap for the LLM chat model. PulsarRPA's
# ChatModelSettings defaults to 64_000 (a conservative floor across all
# providers) and silently truncates messages above it; deepseek-v4-flash
# supports a 1M-token context window, so raise the cap to match and leave
# headroom for output tokens.
llm.max.input.token.length=900000
## OpenAI-compatible
# openai.api.key=sk-...
# openai.model.name=gpt-4o
# openai.base.url=https://api.openai.com/v1
## Aliyun Qwen (DashScope, OpenAI-compatible)
# openai.api.key=sk-...
# openai.model.name=qwen-plus
# openai.base.url=https://dashscope.aliyuncs.com/compatible-mode/v1
# ---------------------------------------------------------------------------
# CAPTCHA Solving
# ---------------------------------------------------------------------------
# Enable automatic CAPTCHA detection and solving during browsing
# captcha.auto.solve.enabled=true
# Primary solving service: CAPSOLVER, TWO_CAPTCHA, ANTI_CAPTCHA
# captcha.service.provider=CAPSOLVER
# API keys — set as environment variables (preferred) or in application-private.properties
# captcha.capsolver.api.key=${CAPSOLVER_KEY}
# captcha.twocaptcha.api.key=${TWOCAPTCHA_KEY}
# captcha.anticaptcha.api.key=${ANTICAPTCHA_KEY}
# CAPSOLVER_KEY=<your-capsolver-key>
# TWOCAPTCHA_KEY=<your-2captcha-key>
# ANTICAPTCHA_KEY=<your-anticaptcha-key>
# Maximum time to wait for a solution (seconds)
# captcha.solve.timeout.seconds=120
# Interval between polling for task status (ms)
# captcha.poll.interval.ms=1000
# Enable automatic CAPTCHA detection on page load
# captcha.detection.enabled=true
# Types of CAPTCHA to auto-solve
# captcha.auto.solve.types=RECAPTCHA_V2,HCAPTCHA,TURNSTILE
# Report failed solves for refund (2Captcha / Anti-Captcha only)
# captcha.report.failed.enabled=true
# Maximum retry attempts for solving
# captcha.solve.max.retries=3
# ---------------------------------------------------------------------------
# Observability: OpenTelemetry + Metrics
# ---------------------------------------------------------------------------
# Enable/disable OpenTelemetry tracing (default: true)
# OTEL_TRACES_ENABLED=true
# OTLP gRPC collector endpoint (default: http://localhost:4317)
# OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# OpenTelemetry service name (default: browser4-agentic)
# OTEL_SERVICE_NAME=browser4-agentic
# OpenTelemetry service version (default: from build)
# OTEL_SERVICE_VERSION=4.8.1-SNAPSHOT
# Enable/disable metrics collection (default: true)
# METRICS_ENABLED=true
# Metrics name prefix (default: pulsar_agentic)
# METRICS_PREFIX=pulsar_agentic
# Comma-separated key=value pairs for metrics common tags
# METRICS_COMMON_TAGS=env=production,region=us-east-1
# ---------------------------------------------------------------------------
# Backend
# ---------------------------------------------------------------------------
# Comma-separated list of read actions whitelisted for tab operations
# (e.g. read_snapshot,read_state,read_cookies)
# BROWSER4_TAB_READ_ACTIONS_WHITELIST=read_snapshot,read_state
# Custom path to Playwright browser binaries
# PLAYWRIGHT_BROWSERS_PATH=/path/to/playwright-browsers
# ---------------------------------------------------------------------------
# Proxy (network)
# ---------------------------------------------------------------------------
# Proxy rotation URL for the browser
# proxy.rotation.url=https://your-proxy-provider.com/rotation-endpoint
# HTTP/HTTPS proxy environment variables (read by both CLI and backend):
# http_proxy / HTTP_PROXY — HTTP proxy
# https_proxy / HTTPS_PROXY — HTTPS proxy
# all_proxy / ALL_PROXY — Catch-all proxy
# ---------------------------------------------------------------------------
# E2E Testing
# ---------------------------------------------------------------------------
# External Browser4 service URL for E2E tests (skips local bundle build/launch)
# BROWSER4_E2E_SERVICE_URL=http://localhost:18182
# Alias for BROWSER4_E2E_SERVICE_URL
# BROWSER4_E2E_SERVER_URL=http://localhost:18182
# Host the Browser4 container uses to reach the fixture server (default: 127.0.0.1)
# BROWSER4_E2E_FIXTURE_HOST=host.docker.internal
# Override per-command timeout in E2E tests (seconds)
# BROWSER4_E2E_CLI_TIMEOUT_SECS=120
# Set to 1/true/yes/on for Maven-based startup in E2E tests
# BROWSER4_E2E_USE_MAVEN_STARTUP=1
# Force remote bundle download in E2E tests
# BROWSER4_E2E_FORCE_REMOTE_BUNDLE=1
# ---------------------------------------------------------------------------
# Mock Site Testing
# ---------------------------------------------------------------------------
# Port for mock site test server (default: 8182)
# MOCK_SITE_PORT=9090
# Wait seconds for mock site startup
# MOCK_SITE_WAIT_SEC=30
# ---------------------------------------------------------------------------
# Example Crawler Credentials (development only)
# ---------------------------------------------------------------------------
# Taobao login credentials for example scrapers
# PULSAR_TAOBAO_USERNAME=your-username
# PULSAR_TAOBAO_PASSWORD=your-password
# Simuwang login credentials for example scrapers
# PULSAR_SIMUWANG_USERNAME=your-username
# PULSAR_SIMUWANG_PASSWORD=your-password
# ── Agent feedback-loop overhaul (2026-08-21) ──────────────────────────────
# Native tool calling is the DEFAULT now; tool results feed back into the
# conversation automatically. Explicit fallbacks: `text`, `chat`.
# agent.tool.expose.mode=toolCalling
# Tiered task-adaptive tool disclosure: `tiered` (default) or `full` (flat list).
# browser4.agent.toolDisclosure=tiered
# Abort after N consecutive text-only responses (0 = disabled).
# browser4.agent.textOnlyStallLimit=5
# Finish-report gate validation: `strict` (default) or `warn`.
# browser4.agent.finishGateCheck=strict
# Max model<->tool round-trips inside one native tool-calling turn.
# browser4.agent.toolLoop.maxIterations=12
# Agent execution engine: `cli` (default, CLI tool-loop driving browser4-cli).
# `observe-act` (legacy ARIA-snapshot engine) is DEPRECATED — kept only for
# backward compatibility; new runs should stay on the default `cli`.
browser4.agent.runEngine=cli