Commit Graph

2359 Commits

Author SHA1 Message Date
Nikhil Sonti
2fadbecb6b test: assert scoped OpenClaw terminal container name 2026-04-18 13:26:08 -07:00
Nikhil Sonti
6fc65590c4 fix: restore scoped OpenClaw gateway container name 2026-04-18 13:23:10 -07:00
Nikhil Sonti
621d48b275 fix: remove dead OpenClaw runtime env file flow 2026-04-18 13:12:48 -07:00
Nikhil Sonti
58d7637cfe refactor: drop obsolete setup-command overload 2026-04-18 12:57:08 -07:00
Nikhil Sonti
57b8720e13 chore: remove OpenClaw compose resources from server build 2026-04-18 12:56:24 -07:00
Nikhil Sonti
380fc566e4 fix: handle legacy openclaw gateway container during runtime cutover 2026-04-18 12:49:31 -07:00
Nikhil Sonti
4a8179f821 test: cover direct-runtime lifecycle paths in openclaw service 2026-04-18 12:39:40 -07:00
Nikhil Sonti
484718d116 refactor: switch OpenClaw service to direct podman runtime 2026-04-18 12:35:28 -07:00
Nikhil Sonti
e1483bc29b fix: stage direct runtime container migration safely 2026-04-18 12:24:02 -07:00
Nikhil Sonti
a2eb26b7f3 test: assert exact podman run args 2026-04-18 12:13:59 -07:00
Nikhil Sonti
c75d3eb6a5 feat: run OpenClaw containers with direct podman commands 2026-04-18 12:10:04 -07:00
Nikhil Sonti
98cdca7bcb refactor: rename OpenClaw runtime away from compose semantics 2026-04-18 11:57:20 -07:00
Nikhil
f5a2b7315c fix: run all browseros-agent tests from root (#750)
* fix: run full browseros-agent test suite

* fix: stabilize server test reporting in CI

* fix: address PR review feedback

* refactor: extract server core test runner

* refactor: group server tests by filesystem

* fix: align CI suites with server test groups

* fix: provision server env for all CI suites

* fix: stabilize ci checks

* fix: report real test counts in ci
2026-04-17 17:26:44 -07:00
Nikhil
6de3b3422c fix: package OpenClaw compose resource (#749)
* fix: package openclaw compose resource

* fix: address PR review comments for docker-compose-missing
2026-04-17 15:01:59 -07:00
Nikhil
224b6cd3a8 chore: remove bun and ripgrep prod resources (#748) 2026-04-17 13:03:42 -07:00
Nikhil
7baee8d57e chore: release server alpha - 0.0.88 (#747) 2026-04-17 12:44:41 -07:00
Nikhil
e8e8c36fdb fix: pin OpenClaw image to 2026.4.12 (#746)
* fix: pin OpenClaw image to 2026.4.12

* fix: address PR review comments for 0417-openclaw-image-pin
2026-04-17 12:14:37 -07:00
Nikhil
3810005457 refactor: stabilize local OpenClaw integration (#741)
* feat(openclaw): add CLI client

* fix(openclaw): swap service to cli client

* fix(openclaw): restore mixed json parsing

* fix(openclaw): validate agent list payloads

* fix(openclaw): simplify cli client boundary

* fix(openclaw): simplify cli client boundary

* fix(openclaw): prefer outer config json payloads

* fix(openclaw): ignore trailing config log payloads

* refactor(openclaw): bootstrap config through cli

* fix(openclaw): narrow bootstrap ownership

* fix(openclaw): avoid noop key restarts

* fix(openclaw): enforce supported provider sync

* refactor(openclaw): remove agent role contract

* fix(openclaw): migrate legacy state and apply model updates

* fix(openclaw): migrate legacy agent state

* fix(openclaw): harden state updates

* refactor: stabilize local OpenClaw bootstrap and chat auth

* fix(openclaw): propagate container env and drop legacy paths

Compose now loads provider creds from .openclaw/.env and passes the
gateway token through, so in-container CLI commands (tui, doctor,
config) authenticate correctly and the gateway process sees
OPENROUTER_API_KEY. Service ensures the state env file exists and
rewrites the compose env with the token before composeUp in setup,
start, and tryAutoStart. Podman machine gets larger defaults and the
container enables NODE_COMPILE_CACHE + OPENCLAW_NO_RESPAWN. Legacy
state migration, the unused WebSocket gateway-client, memorySearch,
and thinking defaults are removed.
2026-04-17 11:00:07 -07:00
Nikhil
688f7962cb fix: rerun dev port cleanup before server restarts (#745) 2026-04-17 08:13:22 -07:00
Felarof
526d784d82 chore: add .auctor entries to gitignore (#739)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 18:00:24 -07:00
Nikhil
331fec07e6 fix: use separate BrowserOS dir in development (#736) 2026-04-16 16:42:06 -07:00
Nikhil
0652ee8ca8 feat: better hidden windows (#730)
* feat: better hidden windows

* fix: addressing review comments
2026-04-16 16:33:12 -07:00
Nikhil
156f5dbc5d feat: redesign OpenClaw control plane around CLI and HTTP (#735)
* feat: move OpenClaw control plane to CLI and HTTP

* fix: address PR review comments for 0416-openclaw_cli_http_redesign
2026-04-16 16:29:26 -07:00
Nikhil
ebd3200cfe feat(build): add arm64-only macOS release config (#728)
Introduces release.macos.arm64.yaml for single-architecture arm64
macOS release builds. Mirrors the windows/linux single-arch pattern
(configure -> compile -> sign_macos -> package_macos -> upload),
skipping the universal_build module to avoid the x64 cross-compile
and lipo merge. Reuses the sparkle_setup step and the same
notarization env vars as the universal macOS config.
2026-04-16 13:09:46 -07:00
Nikhil
4172daa130 chore: bump PATCH and OFFSET (#727) 2026-04-16 13:05:01 -07:00
Nikhil
c1b1e53a86 feat(ota): bundle full server resources tree in Sparkle payload (#726)
* feat(ota): bundle full server resources tree (server + third_party bins)

The OTA Sparkle payload now ships the complete resources/ tree the agent
build produced, not just browseros_server. Every third-party binary (bun,
ripgrep, podman, gvproxy, vfkit, krunkit, podman-mac-helper, win-sshproxy)
flows to OTA-updated installs so podman integration works for users on the
OTA channel, matching fresh Chromium-build installs.

Extract the per-binary sign table into build/common/server_binaries.py so
the Chromium-build sign path (modules/sign/) and OTA sign path (modules/ota/)
share a single source of truth. Adding a new third-party dep is now a
one-file edit that both paths pick up automatically; unknown executables
under resources/bin/ are a hard error at release time.

* fix(ota): address review comments on bundle signing flow

- Avoid double-zipping during notarization: add notarize_macos_zip for
  pre-built Sparkle bundles so notarytool submits the zip directly
  instead of re-wrapping it through ditto --keepParent (Apple's service
  does not descend into nested archives). Keep notarize_macos_binary for
  single-binary callers. Share credential setup + submit logic via
  internal helpers.
- Fail fast on unknown executables in sign_server_bundle_macos: collect
  the unknown-files list before any codesign call so a missing shared-
  table entry aborts in seconds, not after a full signing round.
- Drop dead get_entitlements_path helper (no callers remain after the
  bundle refactor).

* fix(ota): address PR review comments (greptile + claude)

- sign_server_bundle_macos filters to executables only (p.is_file() +
  not p.is_symlink() + os.access X_OK) before applying the unknown-file
  guard. Non-Mach-O files (configs, dylibs, etc.) under resources/bin/
  no longer cause misleading 'unknown executable' hard failures.
- sign_server_bundle_windows now hard-errors on a missing expected
  binary instead of silently skipping it. Symmetric with the macOS
  guard — an incomplete bundle must not publish.
- ServerOTAModule.execute() uses tempfile.TemporaryDirectory context
  managers for both the download and staging roots so they are cleaned
  up on every path, including failures.
- Per-platform sign/notarize/Sparkle-sign failures now raise RuntimeError
  instead of silently skipping the platform — a release pipeline can no
  longer omit a target while reporting success.
- Move import os and import shutil to the top of ota/sign_binary.py.
- Drop unused log_error import from ota/server.py.

* chore: bump server
2026-04-16 12:59:49 -07:00
Nikhil
d653883e99 fix(ci): add PR comment with test summary (#724)
* fix(ci): add PR comment with test summary and block on failure

Add a `comment` job to the test workflow that parses JUnit XML artifacts
and posts a sticky PR comment showing pass/fail counts per suite, with
failed test names listed in a collapsible section and a link to the run.

Guards against fork PRs (read-only token) and stale overlapping runs
(skips comment if PR head has moved past our SHA).

* fix(ci): use payload SHA for staleness check, handle missing artifacts

- Replace context.sha (merge commit SHA) with
  context.payload.pull_request.head.sha so the staleness guard
  compares the correct values and the comment actually gets posted
- Add continue-on-error to download-artifact so cancelled runs
  gracefully fall through to the "no test results" message

* fix(ci): show warning icon for zero-test suites instead of failure
2026-04-15 21:35:58 -07:00
Nikhil
f521ebc8dc chore: bump server version, offset and patch for release (#721) 2026-04-15 18:17:09 -07:00
Nikhil
f2a41fdc08 feat: bundle Podman runtime for BrowserOS server (#719)
* feat: bundle podman runtime for browseros server

* fix: address podman bundle review comments
2026-04-15 18:13:16 -07:00
Nikhil
b9dc875203 test: mock browseros llm in chat integration (#720) 2026-04-15 18:07:15 -07:00
Nikhil
20067d90c7 fix: stabilize root test suite and SDK browser context (#717)
* fix: isolate ACL semantic tests from Bun teardown crash

* fix: time out ACL semantic fixture subprocess

* fix: run full root test suite and repair sdk browser context

* fix: address PR review comments for 0415-fix_all_tests_and_issues

* test: temporarily skip sdk suite

* test: clarify sdk suite disable message
2026-04-15 17:28:01 -07:00
Nikhil
67f18bc868 fix(clean-up): removed old chrome.browseros.* APIs that are not used anymore (#718) 2026-04-15 17:16:30 -07:00
Nikhil
2f86020b30 feat: gate agent alpha UI behind capabilities (#716)
* feat: gate agent alpha UI behind capabilities

* fix: provide chat session for non-alpha home

* fix: gate agents page behind alpha

* fix: enable alpha capabilities in development
2026-04-15 16:06:22 -07:00
Nikhil
dc26ff2554 chore: bump server, offset & patch for release (#715) 2026-04-15 14:43:22 -07:00
Nikhil
718902a4c7 test(server): reap orphaned test browsers before spawn (#714)
Pre-kill BrowserOS processes whose --user-data-dir path contains the
browseros-test- prefix before each spawnBrowser, and in the test:cleanup
hook. This prevents a crashed prior test run from leaving a headless
BrowserOS attached to a stale port, without touching the developer's
regular BrowserOS.app instance (its user-data-dir is
~/Library/Application Support/BrowserOS, which does not match).
2026-04-15 14:20:21 -07:00
Nikhil
357821de6f feat: support changing proxy port via pref (#712) 2026-04-15 14:15:20 -07:00
Nikhil
d34bc64a67 feat: extension alpha support + refactor (#713)
* feat: support override alpha extension

* chore: rename the constexpr for agent
2026-04-15 14:14:48 -07:00
Nikhil
3423b31aa8 fix(openclaw): normalize openrouter model slug and stream gateway logs in dev (#711)
OpenRouter's public model slugs use dots in version numbers
(e.g. `anthropic/claude-haiku-4.5`), but openclaw's model registry only
recognises the dashed form (`claude-haiku-4-5`). Passing the dotted form
makes openclaw's registry lookup miss silently — the agent turn completes
with `stopReason=stop payloads=0` and the UI shows no reply. Rewrite dots
to dashes in the model portion for openrouter providers only so
copy-pasted OpenRouter slugs resolve correctly.

Also, in development mode:
  - Inject `logging.level: debug` into generated openclaw.json so the
    gateway emits debug-level entries to its file log.
  - Patch an existing openclaw.json on start/restart so already-provisioned
    users pick up the debug setting without a reset.
  - Tail the gateway container's logs into the browseros server logger so
    they appear in the same stream as the rest of dev output.
2026-04-15 12:59:44 -07:00
Dani Akash
f1c108b2ed feat: mcp acl guard (#710)
* feat: guard MCP actions with persisted ACL rules

* chore: add safe OpenClaw lifecycle logging
2026-04-16 01:11:13 +05:30
Nikhil
bf643c68f4 refactor: remove redundant context-overflow middleware (#708)
* refactor: remove redundant context-overflow middleware

The middleware caught provider overflow errors and re-tried with a
naive prompt truncation, but its `nonSystem.slice()` had no awareness
of tool_use/tool_result pairing — a cut between an assistant tool_use
and the matching tool_result produces an orphaned tool_use that
providers reject with a different error.

Compaction (`createCompactionPrepareStep`) already handles this safely:
`findSafeSplitPoint` walks past tool messages to preserve pair
integrity, and the pipeline (strip binary → prune → reduce outputs →
LLM summarize → sliding window) handles every overflow path before
the request leaves the agent.

Drops 426 lines: the middleware itself, its wiring in ai-sdk-agent,
and the matching test block + helpers in compaction.test.ts.

* docs: document BROWSEROS_AI_SDK_DEVTOOLS in .env.example

Surfaces the opt-in dev flag so contributors know it exists. Captures
every LLM call to .devtools/generations.json for post-hoc inspection.
2026-04-15 11:47:12 -07:00
Felarof
1c8edee557 feat: add project-level Claude Code skills for team (#709)
* chore: add auctor configuration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add project-level Claude Code skills for team

Adds 14 development workflow skills (brainstorming, planning, debugging,
TDD, code review, subagent-driven development, etc.) to .claude/skills/
so all team members get them automatically on pull.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 11:20:47 -07:00
Nikhil
1cca265427 fix: prepare wxt before typecheck in browseros-agent (#706)
The typecheck and compile scripts failed on fresh checkouts with
TS5083 because tsconfig.json extends .wxt/tsconfig.json, which is
gitignored and only generated by 'wxt prepare'. Run wxt prepare
before tsgo so the extended config and wxt.d.ts are always in place.
2026-04-15 09:24:25 -07:00
Nikhil
2171e71e8e feat: reimplement shared background klavis proxy (#694)
* feat: reimplement shared background klavis proxy

* fix: address review comments for 0413-klavis_connect_timeout_replan

* fix: address PR review comments for 0413-klavis_connect_timeout_replan
2026-04-15 09:22:55 -07:00
Dani Akash
aff8afd9a4 feat: role aware agents (#704)
* feat: add role aware agent creation

* feat: support custom role aware agents

* feat: add plain agent creation mode

* fix: validate custom role arrays
2026-04-14 19:13:23 +05:30
Dani Akash
0c96002cf5 fix: complete openclaw gateway recovery UX (#703)
* fix: complete openclaw gateway recovery ui

* fix: guard unknown gateway ui state

* fix: guard unknown openclaw status badge
2026-04-14 18:22:47 +05:30
Dani Akash
76e5dcb801 fix: harden openclaw gateway recovery (#702) 2026-04-14 17:53:33 +05:30
shivammittal274
a85f94de40 feat(cli): add strata commands for Klavis MCP integrations (#700)
Expose the 7 Klavis Strata MCP tools as CLI subcommands under
`browseros-cli strata`, so CLI users (claude-code, gemini-cli) can
discover and execute actions on 40+ external services.

Commands: check, discover, actions, details, exec, search, auth.
Includes discovery flow guidance in help text, integration tests,
and an "Integrations:" group in the root help output.
2026-04-14 17:32:05 +05:30
Dani Akash
6708ab834b fix: restore openai compatible openclaw providers (#699) 2026-04-14 14:15:11 +05:30
shivammittal274
007208d54b feat: add connector_mcp_servers tool for strata MCP server discovery (#698)
Agents connecting over MCP URL/CLI (like claude-code) had no way to know
which Klavis connectors were available or authenticated, causing them to
fall back to browser automation. This adds a connector_mcp_servers tool
that checks connection status and returns an auth URL when needed.
2026-04-14 13:09:30 +05:30
shivammittal274
dd85ae503f fix(openclaw): compose file path and extension auth (#697)
* fix(openclaw): compose file path after service dir move, loopback auth fallback

- Fix COMPOSE_RESOURCE path: services moved to api/services/openclaw/
  so the relative path needs one more parent directory traversal
- Fix requireTrustedAppOrigin middleware: Chrome extensions cannot set
  the Origin header (forbidden header name). When Origin is absent,
  fall back to checking the Host header is a loopback address. The
  server only binds to loopback so only local processes can reach it.
  Requests with an explicit non-trusted Origin are still rejected.

* fix: request header check

* chore: remove setup openclaw button

---------

Co-authored-by: Dani Akash <DaniAkash@users.noreply.github.com>
2026-04-14 12:53:02 +05:30