100 Commits
Author SHA1 Message Date
drakezhang cdd3380cde fix: resolve 0.3.2 conflict and stabilize daemon CI tests
Merge the 0.3.2 release and keep the background-input fix under Unreleased.

Isolate idle-exit tests from release checks and automatic daemon replacement. Wait for the first remote connection to complete its native handshake before testing replacement at capacity; the replacement connection still exercises the pre-handshake case.
2026-09-30 12:43:32 +08:00
drakezhang 3383a4d186 chore(release): prepare 0.3.2 2026-09-30 11:10:52 +08:00
drakezhang 507522fd84 fix: separate host-neutral daemon recovery hints 2026-09-30 00:25:12 +08:00
drakezhang 72986b2490 fix: guide WorkBuddy and CodeBuddy daemon startup 2026-09-29 23:59:03 +08:00
drakezhang ccaa3178bc fix(dsh-plugin): allow browser starts after ancestor archival 2026-09-29 23:22:19 +08:00
drakezhang cf9e93e2bc feat(extension): simplify browser profile controls 2026-09-29 20:18:55 +08:00
drakezhang bf5a8d9685 fix(dsh-plugin): support DSH 0.2 hosts 2026-09-29 17:49:44 +08:00
drakezhangandCursor ffc13cfe16 Merge origin/main into fix/336-windows-in-place-update.
Keep both Unreleased changelog notes: extension reconnect call settling from main and the Windows in-place update entries from this branch.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 16:16:52 +08:00
drakezhangandCursor a6c3498464 fix(cli): report a closed extension connection as a disconnect
Calls that fail because the extension's socket closed now carry
`reason: extension_disconnected`, so the CLI no longer tells the user to
check protocol versions. Native input keeps its unknown-outcome reason.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-28 11:20:13 +08:00
drakezhangandCursor 58b50f9e52 docs(changelog): note calls settling on extension reconnect
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-27 21:54:55 +08:00
drakezhang f335de9d54 Merge remote-tracking branch 'origin/main' into fix/extension-reconnect-status 2026-09-27 21:54:46 +08:00
drakezhangandCursor bedcf9062c fix(daemon): settle calls on abandoned sockets and scope the unresponsive mark
Terminate a socket's pending calls when it is replaced or closed, and register
and send under the same lock so no call can reach an abandoned socket. A call
that was already dispatched keeps its unknown-outcome contract in every wait
stage, including tab borrow. Session start is no longer retried.

Only mark heartbeat-capable extensions unresponsive, after two missed
heartbeats, and never let the mark replace a cleanup failure.

The handshake pong grace moves to a separate change.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-27 21:54:40 +08:00
drakezhang d691cc1726 test(windows): stop only a timed-out suite's own processes
The lifecycle host stopped every process started from the system TEMP
after a suite timed out, which could hit unrelated programs. Each suite
now gets its own TEMP, and only processes running from it are stopped.
Copies of bsk are removed from it afterwards so the artifact keeps logs.

Compile the `locked` test helper only where its tests run, which removes
a Windows dead-code warning.
2026-09-27 18:25:05 +08:00
drakezhang 8c79b19fb7 Merge main into fix/336-windows-in-place-update 2026-09-27 16:07:15 +08:00
drakezhang b3b133e283 fix(update): keep an update recoverable when the daemon stops or cannot restart
- The daemon owns its update in one slot that its blocking steps fill
  themselves. Shutdown aborts the async task but waits for those steps,
  then hands the update over or undoes it, so a daemon that goes idle
  while the release downloads or is checked no longer leaves the new
  executable installed without a way back. A download that finishes after
  shutdown began installs nothing.
- `bsk update` checks that it can start an independent daemon before
  stopping a background one. Inside a Windows Job that forbids breakaway
  it leaves that daemon running (`left_running`) instead of stopping a
  service it could not start again.
- The installation takes the update lock and keeps it until it is
  confirmed or rolled back; the flaky lock-free concurrency test is
  replaced by one that takes turns through the lock.
- The Windows lifecycle host gives each suite 480 seconds, keeps its output
  after a timeout, and stops daemons the suite started from test copies.
2026-09-27 16:01:05 +08:00
drakezhang c7c36930ec fix(update): resume a --port 0 daemon on the port it served
After a failed handover the previous daemon served again with its
original configuration, so a daemon started with `--port 0` was given a
new port and browsers could no longer reconnect. It now resumes on the
port it served before the handover.
2026-09-27 13:25:47 +08:00
drakezhang 77b78b87e0 fix(update): verify the takeover and own the restart before rolling back
- `bsk update` restarts the daemon as a process it owns. One that is not
  ready in time is stopped and reaped before the previous version is
  restarted, so the rollback no longer meets it holding the daemon lock.
- A handover or restart succeeds only when a daemon of the release's
  version serves the original port. `--version` must print that version.
- A failed handover records a serving daemon only once the resumed one has
  published daemon.json, and appends the error if it cannot serve again.
- A daemon keeps the executable path it started from, so it can update
  again after a rollback on Linux, where `current_exe` then names a
  deleted file.
- The update lock sits next to the installed executable, so updates from
  different bsk homes are serialized through installation and rollback.
2026-09-27 11:13:41 +08:00
drakezhang b56bb4311a fix(update): leave a foreground daemon to its owner on bsk update
`bsk update` stopped any running daemon and started a background one in
its place. For a `--foreground` daemon that took it away from its
terminal or supervisor, and inside a host that forbids Job breakaway it
left no daemon at all.

The daemon now records in daemon.json whether its owner manages it.
`bsk update` installs the release but leaves such a daemon running and
says to restart it there; the CLI hint and `bsk doctor` give the same
steps. A background daemon is restarted on the port it served.
2026-09-27 10:11:12 +08:00
drakezhang eb9b1425fa test(update): wait for the old daemon to exit after the handover
It now exits only after it has seen the replacement serve, so it can
still be running when the replacement publishes daemon.json.
2026-09-27 01:35:24 +08:00
drakezhang 15c0baba05 fix(update): confirm the new daemon serves before the old one exits
The outgoing daemon releases its lock, IPC endpoint and port but stays
alive until a daemon started from the new executable answers. If that
daemon exits or is not ready within 20 seconds, it puts the previous
executable back and serves again on the same port.

- Keep the previous executable on every platform until the update is
  confirmed, and run the new one once before relying on it.
- Record each attempt's stage, result, error and recovery in
  update-state.json, show it in `bsk doctor`, and retry a failed
  version after 6 hours.
- Serialize update attempts with an update lock.
- Report new releases instead of installing them when bsk cannot write
  next to its executable.
- `bsk update` installs before stopping the daemon and rolls back if the
  restarted daemon does not become ready.
2026-09-27 01:28:35 +08:00
drakezhang 1c748217aa style: format the Windows update changes 2026-09-27 00:26:13 +08:00
drakezhang 8f485ab845 fix(dsh-plugin): show observation outages on the collapsed capsule
The expanded header already replaced a stale "s1 · clicking" line with
"reconnecting…", but the collapsed capsule and both status dots still
read the last session as live. Collapse is the form users leave on the
page, so an outage there looked like an in-progress action.

- treat reconnecting as its own chrome state so the header and capsule
  dots leave the active color
- keep the capsule's session count and swap the action timer for
  "reconnecting…" until the feed delivers a frame again
2026-09-27 00:08:24 +08:00
drakezhangandSthreal fc7561b891 fix(update): keep Windows daemons serving across self-update
Rename the running executable aside instead of handing replacement to a
detached script, and exit only after the new daemon has started. A
foreground daemon reports the release and leaves the restart to its owner.

Document BSK_AUTO_UPDATE=off.

Co-authored-by: Sthreal <2066885216@qq.com>
2026-09-27 00:03:35 +08:00
drakezhang d102adcbd9 fix(dsh-plugin): track observation stream outages explicitly
`subscribed` is derived from whether an EventSource object exists, so it
stays true for the whole outage: the failed stream is still held until the
rebuilt one replaces it. The "connecting…" states therefore never showed
during a real failure, while the floating card, now gated on `subscribed`,
was committed for one frame with "connection lost — retrying" on every
page load that had no sessions.

- add `reconnecting` to the snapshot: set on any stream error, including
  transient drops the browser retries itself, and cleared by the next
  well-formed frame on the current stream
- show "reconnecting…" in the overlay and sidebar header while it is set,
  in place of the last session status that could no longer be trusted
- keep the floating card hidden without sessions, as before this change
- cancel a pending reconnect whenever the stream is rebuilt, so a
  thumbnail switch during the backoff is not torn down by the stale timer
- drop the extra publish per stream rebuild that only served `subscribed`
2026-09-26 23:36:31 +08:00
drakezhang 45ff673272 fix(cli): scope recording state cleanup to its own session
A late `bsk record stop` for an earlier recording could delete the state
of a recording that started after it, leaving the newer recording
impossible to stop from the terminal. The end of `bsk record start` and a
successful `bsk record stop` had the same unconditional cleanup, and two
concurrent starts could both pass the existence check.

Guard the state file with a lock and only remove it while it still names
the session being cleaned up.

Refs #342
2026-09-26 21:24:44 +08:00
drakezhang 032b115761 fix(cli): clear stale recording state when its session is gone
If the foreground `bsk record start` process is killed and its session
later disappears, record-session.json keeps pointing at the dead session.
`bsk record stop` then fails with not_found and `bsk record start` refuses
to run until the file is removed by hand.

When record_stop reports not_found, drop the stale state and say so, so
`bsk record stop` is the recovery path its own error message promises.

Refs #342
2026-09-26 12:45:41 +08:00
drakezhang dcb43e5f5f fix(extension): stop recordings whose current tab cannot host the overlay
Opening a blob: URL in a new tab during a recording (for example a PDF
preview built with URL.createObjectURL) made that tab the current
recording tab. The overlay content script is never injected into blob:
documents, so the required RECORD_STOP acknowledgement could not arrive
and every `bsk record stop` failed, losing the whole recording.

Captured steps have been flushed by the frame coordinator since iframe
support moved capture into frame agents; RECORD_STOP only clears the
record overlay. Treat it as best-effort cleanup for every tab and keep
the frame coordinator as the flush barrier. Flush failures now carry
their reason into the record_stop error instead of a bare message.

Refs #342
2026-09-26 12:45:41 +08:00
drakezhang 0cbb5b4d49 Merge remote-tracking branch 'origin/main' into fix/download-popup-capture 2026-09-23 21:06:22 +08:00
drakezhang 03f8561e03 fix(extension): attribute new-tab downloads through the clicked tab
A target="_blank" attachment link downloads from a transient new tab, so
the clicked target never receives Page.downloadWillBegin and bsk download
timed out. Instead of matching the anchor href against every browser
download, accept the URL of a webNavigation navigation target whose source
is the clicked tab and that appears after the mouse press, and match it only
against download candidates observed after the press.

The dispatch point reuses clickResolvedTarget's existing markSent hook, so
the click pipeline and the exact-target CDP path keep their behavior.
2026-09-23 21:06:22 +08:00
drakezhang a5d9201ffe docs: refresh English and Chinese READMEs 2026-09-23 15:12:39 +08:00
drakezhang 1e2b175f18 docs(privacy): disclose website debugging data handling 2026-09-23 14:46:34 +08:00
drakezhang 476500be35 chore(release): prepare 0.3.1 2026-09-23 14:30:58 +08:00
drakezhang a945f26302 Merge screenshot thumbnail bounds fix 2026-09-23 13:09:44 +08:00
drakezhang 2b01a15400 fix(dsh): keep extreme screenshot thumbnails usable 2026-09-23 13:09:31 +08:00
drakezhang b8b744abf2 chore(dsh): align SDK dependencies with the current host 2026-09-23 12:44:53 +08:00
drakezhang bbde2d73a6 fix(dsh): preserve screenshot previews across host rerenders 2026-09-23 12:25:55 +08:00
drakezhang 531a1fa91d fix(extension): reserve time for click delivery before lease expiry 2026-09-23 12:05:31 +08:00
drakezhang a965e6daf3 fix(dsh): render screenshot cards without host attachment components 2026-09-23 11:59:48 +08:00
drakezhang d426a40c2b fix(extension): expire orphaned click passthrough leases 2026-09-23 11:51:44 +08:00
drakezhang f446536125 fix(extension): scope click passthrough to control surfaces 2026-09-23 11:18:23 +08:00
drakezhang 4fde56f483 fix(vom): tolerate viewport rounding and honor AX modality 2026-09-23 11:16:26 +08:00
drakezhang fa18d3c3b1 fix(vom): preserve page actions beside nonmodal sidebars 2026-09-23 10:50:55 +08:00
drakezhang ece29530dd fix(extension): prevent control overlay from swallowing clicks 2026-09-23 10:26:53 +08:00
drakezhang cba47d4888 fix(extension): retain observations after optional root layout timeout
Separate snapshot decoding from optional geometry so DOM, AX, form state and
identity checks finish before measuring the root viewport. Retain captured
content with explicit geometry gaps after that measurement times out, without
issuing projection or hover reads behind the gate. Keep post-layout identity
validation on successful reads and reject attachment changes and cancellation.

Clarify that navigation does not reset pending reads. Preserve the existing
RPC reason while exposing the command, deadline/blocked phase and process.

Validation: 2200 extension tests passed (108 skipped); 126 focused regression
tests, TypeScript, changed-file Biome checks and production build passed.
2026-09-22 22:31:53 +08:00
drakezhang ca02b26547 fix(daemon): report a connected extension that cannot run commands
Fail in-flight calls when a browser generation is replaced, mark a silent heartbeat interval as unresponsive without dropping the socket, and allow one handshake grace after a pong.
2026-09-22 22:01:19 +08:00
drakezhang ad6dd44092 fix(extension): preserve read budgets and isolate stalled frame reads
Keep timed-out commands gated until Chrome settles them, including auto-attach configuration. Scope frame-tree deadlines to observation so navigation retains its caller budget, and give snapshot/AX captures a separate deadline.

Omit known unavailable iframe subtrees without rerouting them to the root session. Preserve viewing-only screenshots after post-capture identity verification when optional geometry times out.

Validation: 2191 extension tests passed (108 skipped); TypeScript, changed-file Biome checks, and production extension build passed.
2026-09-22 22:00:26 +08:00
drakezhang 64245fb1ab fix(extension): clear overlays when observed tabs are released
Reset preserved popup overlays after session teardown and hide them when observed control is released on tab detachment. Keep overlay notifications best-effort so unresponsive pages cannot delay cleanup.

Cover local and remote stop, disconnect cleanup, tab activation ordering, unavailable content scripts, and unaffected tabs.
2026-09-22 20:24:58 +08:00
drakezhang 5d828f3c79 Merge main and complete debugging translations for all supported locales 2026-09-22 12:49:42 +08:00
drakezhang 58cc2c3ce9 fix(debug): preserve results when reselecting active tabs 2026-09-22 12:25:20 +08:00
drakezhang 76f45c6c9d test(cli): use blocking streams in daemon probe fixtures 2026-09-22 11:38:40 +08:00
drakezhang 3c1d1c1adf Merge main skill installation guidance into debugging branch 2026-09-22 11:36:02 +08:00
drakezhang fb896db9e8 fix(extension): keep collapsed help actions readable in all locales
Browser preview checks exposed clipped German action labels in the collapsed help panel. Place collapsed actions on their own row and allow long labels to wrap within the panel, keeping return-control and cancel actions readable.
2026-09-22 11:35:49 +08:00
drakezhang 8a7f280bad fix(i18n): complete profile guidance for seven locales
Follow up on iAstro's locale implementation with the four profile instruction keys added on main. Preserve per-session instance selection, exact CLI and tool calls, and reconnect guidance in every translation.

Document automatic registration and Chinese fallback behavior, exercise copied commands in all shipped locales, shorten the Portuguese update badge, and polish the German note prompt.
2026-09-22 11:35:49 +08:00
drakezhang de4229cb88 fix(debug): preserve rule drafts and separate replay integrity 2026-09-22 11:35:29 +08:00
drakezhang b8f145ec5b Merge main into PR #248 for profile localization follow-up 2026-09-22 11:24:10 +08:00
drakezhang 02ed43c9d7 Merge main into PR #207 and adapt skill prerequisites
Keep prerequisite discovery in the canonical skill entry and move CLI setup and extension recovery guidance into the environment reference. Preserve the reference bundle layout and the original PR commits.
2026-09-22 11:05:44 +08:00
drakezhang 6fef5f677f docs(debug): align capture workflow continuation 2026-09-22 11:01:31 +08:00
drakezhang c0e1955d86 fix(debug): preserve request integrity and bound capture races
Carry header truncation through queued events, preserve large bodies during header-only edits, and reserve task/global capture capacity before yielding. Merge live evidence when storage indexes are stale, preserve Document rule scope, and expose incomplete field scans without claiming unique matches.

Add regression coverage and run all debugging browser suites in CI.
2026-09-22 11:00:54 +08:00
drakezhang da87fe2f9c merge: integrate main and defer debugging skill references
Preserve skill resource bundling and profile-bound workflows from main. Move CLI and DSH debugging guidance into dedicated references with explicit capture triggers, evidence handling, and network experiment boundaries.
2026-09-22 10:31:02 +08:00
drakezhang ccd775077b fix(debug): preserve evidence fidelity and cancel startup safely 2026-09-21 21:52:46 +08:00
drakezhang 6f6e09e04c fix(dsh-plugin): preserve results while exited commands drain
Interrupting a command after exit could truncate its JSON and report a
parse failure. Output arriving during the drain could also extend the wait
past the execution timeout and turn a completed command into a timeout.

Only interrupt still-running children and count those matches in killFor.
Keep exited children draining, stop the execution timer on exit, and retain
the existing idle drain window and 2-second cap. An explicit AbortSignal
still cancels the caller's wait immediately during drain.

Clarify the execution timeout and separate output collection limit in the
runner options, plugin configuration and README. Preserve the existing
platform-specific cancellation grace, kill fallback and resource cleanup.

Validation: 10 regression checks failed before the fix and now pass; all
351 DSH plugin tests in 19 files pass, including real-process inherited-pipe
cleanup. Biome, Stylelint, TypeScript and git diff --check also pass.
Windows cancellation cases use simulated platforms on macOS.
2026-09-21 21:48:36 +08:00
drakezhang dc806259e4 fix(ci): verify DSH npm packages on Windows 2026-09-21 21:44:42 +08:00
drakezhang 82734dbac9 Merge main into PR #183 and resolve runner conflicts
Preserve the contributor's original commits and bounded settlement, pipe
cleanup, renewable output drain, and killAll/killFor fallback paths.

Reconcile the overlapping main runner fix by retaining its 1s drain grace,
referenced drain timers, cancellation timer cleanup, and listener ordering.
Keep the PR's 2s total drain cap and platform-specific kill deadlines.

Adapt the affected runner tests to the retained grace and update the
session-start regression fixture for main's prepare/start/claim lifecycle.
No unrelated feature changes.

Validation: all 345 DSH plugin tests across 19 files pass, including the
real-process inherited-pipe regression; Biome, Stylelint, TypeScript and
git diff --check pass. Windows cancellation is covered by simulated-platform
tests; no Windows host was used.
2026-09-21 20:54:05 +08:00
drakezhang bbada7b2e8 fix(ci): normalize Cargo package paths on Windows 2026-09-21 20:50:12 +08:00
drakezhang 240bf1dd7a fix(skill): guard incomplete installs and parse CRLF metadata 2026-09-21 20:44:24 +08:00
drakezhang 47f5765cb3 fix(skill): preserve source links and migrate CRLF legacy skills
Isolate harness path tests from host environment settings and verify Windows defaults. Cover real historical LF/CRLF fixtures, custom intent, local edits, reference collisions, and exact checksum baselines.
2026-09-21 19:56:46 +08:00
drakezhang 45a3bf1c42 feat(skill): ship reference bundles with safe upgrades 2026-09-21 18:57:44 +08:00
drakezhang 1e58dd114d docs(skill): fit guidance within the merged prompt budget
Condense the DSH guidance while preserving its authorization boundary and recovery behavior. Keep the existing 7000-character limit after combining the PR with main's recovery instructions.
2026-09-20 19:51:46 +08:00
drakezhang 3274e64135 docs(skill): trim guidance and fix CLI tool references
Keep the DSH guidance within the existing prompt budget and use CLI action names in the CLI skill.
2026-09-20 17:23:34 +08:00
drakezhang 963f694be3 fix(dsh): retry lazy tool registration once per session batch 2026-09-20 16:40:26 +08:00
drakezhang da106d1305 fix(debug): unify retained evidence reads and incremental refresh 2026-09-20 16:29:17 +08:00
drakezhang a4ac06e48e fix(dsh): avoid retrying tool registration on streamed events
Retain successful invocation proof after failures and defer retries to turn/session boundaries or new skill invocations. Add regression coverage for sustained streaming and next-turn recovery.
2026-09-20 16:04:13 +08:00
drakezhang 01c6c1c20a merge: integrate main with website debugging 2026-09-20 14:42:33 +08:00
drakezhang e1a4018445 fix(dsh): recover lazy tools without rescanning streaming history
Parse current durable tool results and support both session history APIs. Scan each session once, process later events incrementally, and retry recovery when services or history become available.

Cover official DSH messages, reloads, long conversations, failed reads, and explicit history access counts.
2026-09-20 14:18:12 +08:00
drakezhang 58b7dabdd2 Merge PR #283 with current main 2026-09-20 14:08:58 +08:00
drakezhang f69412a9c7 fix(debug): bound capture hooks and preserve retained evidence 2026-09-20 12:50:19 +08:00
drakezhang c8d627d508 feat(debug): add native performance and request analysis 2026-09-20 12:05:21 +08:00
drakezhang 4b935e7318 feat(debug): preserve evidence and bound agent queries 2026-09-20 11:26:52 +08:00
drakezhang 2fc2704f85 fix: expose stop request targets in the public tool schema
Share optional stop target parameters between browser_session and its internal
stop handler. Document exact request targeting, mutual exclusion, and default
stop retry behavior in the model-visible contract.

Add a public schema regression covering requestId, optional targets, and retry
guidance. Lifecycle execution remains unchanged.

Validation: 95 tool and stop recovery tests passed; TypeScript and formatting
checks passed. The new schema test reproduced the omission before the fix.
2026-09-20 09:50:49 +08:00
drakezhang abf0d3a74d fix: unify durable session stop recovery
Route tool, overlay, archive, unload, and recovery cleanup through one lifecycle
owner and one job per request. Persist explicit stop intent before making a
session unusable; caller cancellation only ends its wait after admission.

Retain durable completion receipts independently of the current session so a
retry cannot stop another working session, even after background cleanup or
restart. Preserve failed default callers' retries across concurrent successful
waiters. Support exact request targeting and reject ambiguous stop targets.

Cover failed normal stops, queued and in-flight cancellation, concurrent entry
points, timer and disk recovery, persistence failures, anonymous starts, reused
IDs, unconfirmed replies, and completion receipt capacity accounting.

Validation: 303 plugin tests passed, including 31 stop recovery tests;
TypeScript checking, production build, and formatting passed.
Package lint was unavailable because publint is not installed in this environment.
2026-09-20 01:00:46 +08:00
drakezhang bfa5e521f8 fix: preserve startup ownership and isolate pending cleanup
Capture initial tab identities when creating an Agent Window and retain them
through failed startup compensation. Retry cleanup through the production
stop handler, preserving later user tabs and keeping ownership if agent tabs
still cannot close.

Separate owned starting and cleanup resources from active sessions. Publish
sessions only after initialization and claim succeed, preserve the working
current session on failure, and reject ordinary operations and captures for
resources awaiting cleanup. Recheck queued operations before execution.

Add regression coverage for production stop retries, mixed windows, delayed
claims, current-session fallback, recovery, capacity, and queued operations.
Update window API fixtures for the creation result's initial tab identities.

Validation: extension 1862 passed (103 skipped), plugin 276 passed; both
TypeScript checks and production builds passed.
2026-09-20 00:04:52 +08:00
drakezhang 8e357f3a02 fix: make browser session starts recoverable
Track prepared starts with stable request handles, durable plugin ownership, monotonic cancellation, and retryable cleanup. Retain delayed and failed startup resources until cleanup is confirmed, without touching other sessions.

Add regression coverage for lost replies, killed CLI processes, delayed creation, failed cleanup, restart recovery, archive and unload, capacity accounting, and reused session IDs.

Fixes #245
2026-09-18 22:50:52 +08:00
drakezhang 8a3db0bf7f feat(debug): add scoped network rules and request replay 2026-09-18 22:01:11 +08:00
drakezhang 2766a22672 Merge main and reconcile background screenshot guidance
Preserve the streamlined skill workflow and document background support for both viewport and full-page screenshots. Keep Canvas capture guidance and remove the outdated visibility requirement for Agent full-page capture.
2026-09-18 21:10:30 +08:00
drakezhang 237667bd51 fix(navigation): preserve readiness across cancelled redirects 2026-09-18 18:54:30 +08:00
drakezhang 4c8ee1387b feat(debug): group manual actions into evidence chains 2026-09-18 17:12:49 +08:00
drakezhang b3a01cf924 feat(debug): retain browser-local investigation history 2026-09-18 14:45:55 +08:00
drakezhang a3f82006e2 feat(debug): add task-scoped website diagnostics
Add bounded request details, action evidence and before/after verification through CLI, DSH and an extension workspace. Preserve existing popup controls and add a current-task card.

Validation: Rust 710, extension 1770, DSH 242, i18n 52; typecheck, lint, production build and two real Chrome regressions passed.
2026-09-18 10:49:35 +08:00
drakezhang f41f1bfbd3 fix(release): remove empty unreleased changelog headings 2026-09-16 20:14:01 +08:00
drakezhang 4bf46adcd8 chore(release): prepare 0.3.0 2026-09-16 20:05:21 +08:00
drakezhang ce8d6b092f test: allow cold Chrome startup in the standalone browser job 2026-09-16 18:40:23 +08:00
drakezhang a4f9cc1888 fix: clarify wheel paint failures and isolate browser regression checks 2026-09-16 18:36:03 +08:00
drakezhang 351987452e fix: preserve input error diagnostics and configured timeouts 2026-09-16 18:07:25 +08:00
drakezhang 1edee0f25c fix: preserve native input outcomes and narrow disabled handling 2026-09-16 17:48:21 +08:00
drakezhang 933314189d test: stabilize browser readiness fixture and profile cleanup 2026-09-16 17:00:53 +08:00
drakezhang c8bfb980f0 fix: narrow document invalidation and preserve input outcome hints 2026-09-16 16:55:47 +08:00
drakezhang 87e876c7b9 docs: streamline browser skills for reliable task execution 2026-09-15 15:23:29 +08:00
drakezhang c314b76bc8 docs: fix setup and release guidance for 0.3.0 2026-09-15 13:19:34 +08:00
drakezhang 307ce78f57 test(installer): allow concurrent readers in Windows lock fixture 2026-09-15 11:55:38 +08:00
drakezhang 0c3e6d2752 fix(extension): recover from connection preference read failures 2026-09-15 11:42:22 +08:00