Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
192 commits
Select commit Hold shift + click to select a range
129e6ad
feat(remote): mint account credentials for keyboard-less peer devices
wgqqqqq Aug 10, 2026
c04086e
feat(mobile): relay watch provisioning and hand the credential over
wgqqqqq Aug 10, 2026
0102b76
feat(browser): connect CDP to real user profiles
bobleer Aug 10, 2026
a4fc4c2
fix(browser): open the real remote debugging page for default CDP
bobleer Aug 10, 2026
b30cda4
fix(browser): reattach to the running browser on startup
bobleer Aug 10, 2026
6bd46cd
fix(ai): retry transient gateway model loss
bobleer Aug 10, 2026
c2272c8
fix(goal): prepare worktree before goal turns
bobleer Aug 10, 2026
bb960f4
fix(ci): preserve sherpa native cache artifacts
bobleer Aug 10, 2026
3dfc372
Merge pull request #2193 from wgqqqqq/feat/watch-provisioning
wgqqqqq Aug 10, 2026
734e5b0
Merge pull request #2197 from bobleer/bob/retry-transient-invalid-mod…
bobleer Aug 10, 2026
9152af3
feat(web-ui): show paths in file mentions
kev1n77 Aug 11, 2026
bf2038f
fix(ai): retry every provider error
bobleer Aug 11, 2026
362c189
perf(core): isolate document and subscription capabilities
limityan Aug 10, 2026
5a9479f
test(cli): cover exhaustive provider retries
bobleer Aug 11, 2026
a459967
Merge pull request #2200 from kev1n77/fmy/dev
kev1n77 Aug 11, 2026
22f5411
Merge pull request #2201 from GCWing/bob/retry-all-ai-request-errors
bobleer Aug 11, 2026
e7aef63
fix(browser): make startup reattach opt-in
bobleer Aug 11, 2026
92a7aa8
Merge pull request #2203 from bobleer/bob/browser-cdp-auto-connect-op…
bobleer Aug 11, 2026
8087510
docs(agents): expand remote scenario guardrails
bobleer Aug 11, 2026
47c033b
Merge pull request #2204 from GCWing/bob/agents-remote-scenarios
bobleer Aug 11, 2026
c5e83c1
feat(ai): improve models.dev reasoning preset configuration
wsp1911 Aug 11, 2026
bae89a5
fix(settings): streamline copy and align controls
bobleer Aug 11, 2026
2bec893
Merge pull request #2207 from bobleer/bob/settings-ui-consistency
bobleer Aug 11, 2026
8f22f7a
fix(agent): unify live model retry budget
bobleer Aug 11, 2026
e0576c1
test(cli): cover unified stream retry budget
bobleer Aug 11, 2026
002c0f5
docs(agents): add upgrade compatibility guardrails
bobleer Aug 11, 2026
3c75a57
fix(peer): refuse controller-owned commands on the peer host
bobleer Aug 11, 2026
fb16e44
fix(peer): restore session history after a peer surface switch
bobleer Aug 11, 2026
201ad29
fix(cli): reject zombie dispatch leaders
bobleer Aug 11, 2026
3911dc7
Merge pull request #2211 from bobleer/bob/unify-live-agent-error-retries
bobleer Aug 11, 2026
9f8b560
fix(control-hub): make browser.wait actually wait
bobleer Aug 11, 2026
62e1e63
refactor(harmonyos): centralize composer action policy
wgqqqqq Aug 10, 2026
8271bb6
fix(harmonyos): make the conversation screen usable during a run
wgqqqqq Aug 11, 2026
f7d109a
fix(relay): let device rpc carry payloads its validator already allows
wgqqqqq Aug 11, 2026
f8c5402
fix(agents): give every ControlHub mode the Cron tool
bobleer Aug 11, 2026
3d8ee4b
perf(build): narrow SDK dependencies and external-source test targets
limityan Aug 11, 2026
23571fd
fix(cron): tell the agent scheduling is a handoff
bobleer Aug 11, 2026
7345619
perf(build): prune dead dependencies and consolidate contract tests
limityan Aug 11, 2026
763680a
fix(computer-use): restore text-only observation and unblock the Ente…
bobleer Aug 11, 2026
7fee50a
fix(computer-use): fill new OpenAppResult fields on Windows and Linux
bobleer Aug 11, 2026
60cd458
test(computer-use): compile-check AppleScript templates with escaped …
bobleer Aug 11, 2026
fcde2fc
docs(computer-use): tell the subagent an empty AX tree is an answer
bobleer Aug 11, 2026
6f2bc2b
fix(computer-use): let describe_screen see deep enough to act on Elec…
bobleer Aug 11, 2026
ffe2aab
fix(computer-use): clip the AX tree on a char boundary, not a raw byt…
bobleer Aug 11, 2026
2aa7bff
fix(computer-use): bound AX payloads, report true image dimensions, c…
bobleer Aug 11, 2026
a4e06ca
perf(build)!: narrow Core and ACP feature assembly
limityan Aug 11, 2026
eaa91d5
fix(config): let sub-agents own a stored agent profile
wsp1911 Aug 12, 2026
aadf76a
fix(goal): keep the resume prompt inside its own session
bobleer Aug 12, 2026
9f78acc
feat(steering): let any queued message steer a running turn
bobleer Aug 12, 2026
aeb8099
perf(build)!: narrow Core and Services runtime features
limityan Aug 12, 2026
cee9d47
fix(ci): isolate sherpa native cache lifecycle
wgqqqqq Aug 12, 2026
92d06b8
Merge pull request #2242 from wgqqqqq/codex/fix-sherpa-native-cache
wgqqqqq Aug 12, 2026
ec84741
feat(todos): add a Todos scene for every scheduled task
bobleer Aug 12, 2026
f503c06
fix(external-sources): improve controls and recovery
limityan Aug 12, 2026
791ba4e
fix(external-sources): repair CI and source boundaries
limityan Aug 12, 2026
b0d03be
perf(build)!: slice portable contract capabilities
limityan Aug 12, 2026
e28a033
fix(todos): correct date order, calendar scope, intervals and run state
bobleer Aug 12, 2026
c58646e
fix(todos): make the date field typable and plain
bobleer Aug 12, 2026
7a81fce
feat(web-ui): polish interaction motion and presence
bobleer Aug 12, 2026
40661df
feat(release): add beta packaging channel
wgqqqqq Aug 11, 2026
ee24584
fix(release): support public beta on forks
wgqqqqq Aug 11, 2026
dede45b
fix(release): accept raw Tauri signing keys
wgqqqqq Aug 11, 2026
7173cc3
fix(release): accept raw updater public keys
wgqqqqq Aug 11, 2026
d13b453
test(release): scope Linux mirror ordering to stable
wgqqqqq Aug 12, 2026
59e8c0a
fix(release): harden beta channel publishing
wgqqqqq Aug 12, 2026
9412c53
fix(release): keep nightly updater on stable feed
wgqqqqq Aug 12, 2026
636e740
perf(mobile): make switching remote sessions feel instant
wgqqqqq Aug 13, 2026
30a8cac
refactor(flowchat): remove synthetic tail-space scrolling
wsp1911 Aug 7, 2026
94f5502
fix(flowchat): smooth TodoWrite and ExecCommand collapse
wsp1911 Aug 8, 2026
8fbe164
refactor(flowchat): stack FlowChatHeader above the message list
wsp1911 Aug 10, 2026
91948e3
feat(flowchat): reserve tail space and hold the follow target
wsp1911 Aug 10, 2026
726ca7f
fix(flowchat): settle the opening viewport before revealing it
wsp1911 Aug 10, 2026
43fdd56
feat(flowchat): trace and detect silent history paging refusals
wsp1911 Aug 10, 2026
b5bc93b
feat(flowchat): return the viewport to the tail after a gesture or re…
wsp1911 Aug 10, 2026
cf58359
fix(flowchat): judge the live tail by the window, not the viewport in…
wsp1911 Aug 10, 2026
cedc37f
refactor(flowchat): size the tail reservation to what needs it
wsp1911 Aug 10, 2026
9ab56a4
fix(flowchat): stop Turn navigation at the content end, not in the blank
wsp1911 Aug 10, 2026
33bda13
fix(flowchat): let a scrollbar drag release the viewport
wsp1911 Aug 10, 2026
be207f8
fix(flowchat): snap back when follow owns the viewport but is not mov…
wsp1911 Aug 10, 2026
6c075cb
fix(flowchat): anchor the reading position instead of delegating it
wsp1911 Aug 10, 2026
5583744
refactor(flowchat): lift the viewport anchor out of the virtualizer
wsp1911 Aug 10, 2026
a4f886b
refactor(flowchat): confine the virtualizer's index space and paging …
wsp1911 Aug 10, 2026
60c5f93
refactor(flowchat): virtualize with TanStack Virtual
wsp1911 Aug 10, 2026
5821e7b
fix(flowchat): keep the viewport on the reader's content across a pre…
wsp1911 Aug 11, 2026
d413503
fix(flowchat): register every deliberate viewport writer, and read a …
wsp1911 Aug 11, 2026
c27f4f1
refactor(flowchat): give the viewport one register, and a permanent t…
wsp1911 Aug 11, 2026
b41d318
fix(flowchat): measure the junction before moving the reader through it
wsp1911 Aug 11, 2026
89ff0b6
fix(flowchat): stop the transcript fading in every time a row mounts
wsp1911 Aug 11, 2026
095eaf9
chore(flowchat): delete the pre-virtualization user message chain
wsp1911 Aug 11, 2026
9deae20
docs(flowchat): split the viewport contract along the change it governs
wsp1911 Aug 11, 2026
7f3b7c5
fix(flowchat): tell a Turn arriving from a Turn being taken away
wsp1911 Aug 11, 2026
e4978b9
chore(flowchat): delete the file-only turn rollback panel
wsp1911 Aug 11, 2026
b795fa2
chore(flowchat): delete the sticky Task indicator, which never ran
wsp1911 Aug 11, 2026
8010336
fix(flowchat): let a usage-report click land once, through the register
wsp1911 Aug 12, 2026
aa31f2d
fix(usage): number a slow span the way its own jump does
wsp1911 Aug 12, 2026
4a292f0
fix(flowchat): let a reader at the top of a short window page again
wsp1911 Aug 12, 2026
f5701a9
fix(flowchat): stop the anchor's settle loop from running on a stale …
wsp1911 Aug 12, 2026
2850f37
fix(flowchat): end a navigation aim when the reader takes the viewport
wsp1911 Aug 12, 2026
a044394
feat(flowchat): show the usage report as a dialog, not a synthetic Turn
wsp1911 Aug 12, 2026
0c6ca53
chore(desktop): delete the local-command turn write path the web UI n…
wsp1911 Aug 12, 2026
18cee6c
feat(cli): /usage renders the report without writing a Turn
wsp1911 Aug 12, 2026
c0e7d4e
fix(flowchat): stop the viewport anchor undoing what the reader just did
wsp1911 Aug 12, 2026
048ecc7
feat(flowchat): record what following the tail costs
wsp1911 Aug 12, 2026
6cb9bf3
feat(flowchat): follow the thinking card's tail across the frames it has
wsp1911 Aug 12, 2026
50d0bd8
feat(flowchat): sample the message list's own tail follow
wsp1911 Aug 12, 2026
8814683
feat(flowchat): ease the transcript's follow across the frames it has
wsp1911 Aug 12, 2026
4dd6b87
docs(flowchat): record what the eased follow measured
wsp1911 Aug 12, 2026
41177d3
fix(flowchat): end the animated-scroll stand-down when the animation …
wsp1911 Aug 12, 2026
e3fb989
fix(flowchat): time the animated-scroll stand-down at both ends
wsp1911 Aug 12, 2026
4cec218
fix(flowchat): page from the transcript on screen, not from the windo…
wsp1911 Aug 12, 2026
f4d3f1d
fix(flowchat): reconnect the Appearance contracts virtualization dropped
wsp1911 Aug 12, 2026
fdbb53e
Merge pull request #2231 from wgqqqqq/codex/beta-release-packaging
wgqqqqq Aug 13, 2026
063c825
fix(web-ui): support markdown on older WebKit
wgqqqqq Aug 13, 2026
82d18c3
ci: sign and notarize macOS releases
wgqqqqq Aug 13, 2026
311331f
fix(web-ui): make the Markdown source fallback usable and gate it in CI
wgqqqqq Aug 13, 2026
5adea4a
Merge pull request #2250 from wgqqqqq/codex/fix-markdown-webkit-lookb…
wgqqqqq Aug 13, 2026
bcf7312
fix(ci): sign bundled macOS executables
wgqqqqq Aug 13, 2026
bc6451c
fix(todos): replace the native date picker with an in-app one
bobleer Aug 13, 2026
e93c72b
fix(todos): make the date picker surface opaque
bobleer Aug 13, 2026
397afdc
Merge pull request #2251 from wgqqqqq/codex/apple-developer-id-signing
wgqqqqq Aug 13, 2026
f1eb483
Merge upstream/main into bob/web-ui-motion-polish
bobleer Aug 13, 2026
91fb64b
fix(worktree): normalize Windows managed paths
bobleer Aug 13, 2026
9848f7a
Merge pull request #2254 from bobleer/bob/fix-windows-worktree-path
bobleer Aug 13, 2026
1ee66b1
feat(web-ui): smooth pointer-driven view transitions
bobleer Aug 13, 2026
4123b7c
fix(flowchat): stop a render taking the viewport back from the follow…
wsp1911 Aug 13, 2026
c1d287f
fix(flowchat): land the snap back where the transcript ended up
wsp1911 Aug 13, 2026
8ec7077
fix(flowchat): stop asking for history a session has all of
wsp1911 Aug 13, 2026
aa0e4b1
fix(flowchat): land a focused Turn the same way whichever key found it
wsp1911 Aug 13, 2026
ca24b07
fix(flowchat): animate a jump to latest only as far as it can be foll…
wsp1911 Aug 13, 2026
16d7998
Merge remote-tracking branch 'upstream/main' into bob/web-ui-motion-p…
bobleer Aug 13, 2026
a4d944e
Merge pull request #2214 from wgqqqqq/feat/harmonyos-conversation-fixes
wgqqqqq Aug 13, 2026
0af90e6
fix(harmonyos): make local/remote chat and connect flow match the phone
wgqqqqq Aug 13, 2026
f2dbcb3
fix(web-ui): align motion presence contracts
bobleer Aug 13, 2026
dc34e5f
feat(mac): brand DMG installer layout
wgqqqqq Aug 13, 2026
33a0d09
Merge pull request #2257 from bobleer/bob/web-ui-motion-polish
bobleer Aug 13, 2026
59e06a0
Merge pull request #2258 from wgqqqqq/codex/dmg-installer-background
wgqqqqq Aug 13, 2026
9b05dd0
perf(cargo): centralize default feature ownership
limityan Aug 13, 2026
073f270
refactor(harmonyos): unify conversation MVVM and restore dual-fold ma…
wgqqqqq Aug 13, 2026
2f67af0
feat(flowchat): follow again when output catches up with a reader in …
wsp1911 Aug 13, 2026
d1d1dd9
docs: refine TUI runtime and management boundaries
zvzuola Aug 13, 2026
e017814
style(mac): lighten DMG installer background
wgqqqqq Aug 13, 2026
a1ea197
feat(adapters): add dsh (DeepSeek Harness) plugin source adapter
bobleer Aug 13, 2026
a79020e
fix(flow-chat): stabilize paged history scrolling
wsp1911 Aug 13, 2026
612a289
refactor(flow-chat): group non-critical tool cards
wsp1911 Aug 13, 2026
e90ad99
fix(flowchat): stabilize virtual item estimates
wsp1911 Aug 13, 2026
b2888d1
fix(adapters): harden dsh package projection
bobleer Aug 13, 2026
a282cba
feat(acp): add DeepSeek Harness client preset
bobleer Aug 13, 2026
3be32a0
Merge pull request #2264 from wgqqqqq/codex/update-dmg-background
wgqqqqq Aug 14, 2026
7d8fc2c
Merge pull request #2256 from wgqqqqq/analysis/harmonyos-app-ui-ux
wgqqqqq Aug 14, 2026
e262ffc
Merge pull request #2266 from bobleer/bob/dsh-plugin-adapter
wgqqqqq Aug 14, 2026
8480386
perf(agent-runtime)!: isolate leaf capability closures
limityan Aug 14, 2026
76f8b89
Merge pull request #2272 from bobleer/bob/feat-dsh-acp
wgqqqqq Aug 14, 2026
4432148
feat(harmonyos): fold settled process cards and recover hollow remote…
wgqqqqq Aug 14, 2026
6679a08
perf(app-server): move TypeScript schemas to protocol owner
limityan Aug 14, 2026
626a3ab
Merge pull request #2276 from wgqqqqq/feat/harmonyos-conversation-ui-ux
wgqqqqq Aug 14, 2026
93c02ef
fix(flow-chat)!: make session rollback transactional
wsp1911 Aug 14, 2026
873ed8d
chore: bump version to 0.2.18
wgqqqqq Aug 14, 2026
5b0f992
feat(ai): add task-specific model settings
wsp1911 Aug 14, 2026
297b561
feat(acp): ship an IDE-facing ACP bridge for DeepSeek Harness
wgqqqqq Aug 14, 2026
c6b750a
fix(acp): unblock CI and materialize the dsh profile on remote hosts
wgqqqqq Aug 14, 2026
a46b557
fix(core-boundaries): teach the self-test about the ACP client's prof…
wgqqqqq Aug 14, 2026
21bd988
fix(agents): hide MCP tools from mode profiles
wsp1911 Aug 14, 2026
77d05ff
fix(acp): keep the remote agent's dying words
wgqqqqq Aug 14, 2026
bfd525a
fix(acp): ask the remote host the same question the agent list asks
wgqqqqq Aug 14, 2026
b114761
fix(remote-ssh): stop reading a dropped control handle as a kill
wgqqqqq Aug 14, 2026
607a4b7
fix(acp): log how a remote agent exited
wgqqqqq Aug 14, 2026
e6bbbd0
fix(acp): say why an agent died instead of that it died
wgqqqqq Aug 14, 2026
2abb21c
fix(permission): apply mode changes per round
wsp1911 Aug 14, 2026
cc59f99
fix(acp): show a code-mode step as the program it ran
wgqqqqq Aug 14, 2026
ac23982
fix(flow-chat): keep an ACP conversation on disk
wgqqqqq Aug 14, 2026
4c38663
feat(acp): reopen a stored DeepSeek Harness conversation
wgqqqqq Aug 14, 2026
fe68c03
Merge pull request #2291 from wgqqqqq/feat/dsh-acp-bridge
wgqqqqq Aug 14, 2026
59bc94f
Merge pull request #2289 from wgqqqqq/chore/bump-0.2.18
wgqqqqq Aug 14, 2026
63405be
fix(dsh): package the bridge profile on Windows
wgqqqqq Aug 14, 2026
48d43c3
Merge pull request #2296 from wgqqqqq/fix/dsh-profile-windows-vendor
wgqqqqq Aug 14, 2026
4f7bce8
feat(editor): support Markdown frontmatter
wsp1911 Aug 14, 2026
1540b8a
feat(agent): resume interrupted dialog turns
limityan Aug 14, 2026
f1f3f19
feat(sdk): add managed TypeScript SDK and shared transport core
limityan Aug 14, 2026
eb96fc6
fix(desktop): keep the DeepSeek bridge off the compile path
bobleer Aug 15, 2026
8ea84ae
Merge pull request #2299 from bobleer/fix/dsh-profile-not-a-compile-r…
bobleer Aug 15, 2026
f6e72bb
docs(deploy): restore the OpenBitFun origin from the BitFun checkout
bobleer Aug 15, 2026
95e061f
Merge pull request #2300 from bobleer/docs/openbitfun-host-restore
bobleer Aug 15, 2026
a056f54
fix(flow-chat): keep user position in tail blank
wsp1911 Aug 15, 2026
975f2e7
fix(web-ui): stabilize file explorer scrolling
wsp1911 Aug 15, 2026
0f76017
feat(peer): let every signed-in device keep working while you switch
bobleer Aug 15, 2026
79046a6
fix(peer): give the device switcher a full Appearance contract
bobleer Aug 15, 2026
132e140
fix(peer): keep a running session alive across a device switch
bobleer Aug 15, 2026
14a822f
fix(peer): stop reconcile from erasing a session after a device switch
bobleer Aug 15, 2026
3100bbb
fix(web-ui): prevent scene transition overlap
wsp1911 Aug 15, 2026
66ec398
fix(chat): make remote workspace file mentions reliable (#2313)
bobleer Aug 15, 2026
142d7e3
refactor(peer): isolate device surface state and switching (#2314)
bobleer Aug 15, 2026
e142b1c
Merge remote-tracking branch 'upstream/main' into wc/rebase
SWangHash Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
89 changes: 88 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -197,16 +197,45 @@ jobs:

- uses: swatinem/rust-cache@v2
with:
shared-key: "ci-check-v3-${{ runner.os }}-no-cargo-bin-v1"
shared-key: "ci-check-v5-${{ runner.os }}-no-cargo-bin-v1"
cache-bin: false
# PR caches are scoped to merge refs; trusted main pushes own shared
# refreshes and retain completed dependency builds after late test failures.
save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
cache-on-failure: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}

# rust-cache prunes the workspace target directory before saving it, so
# native libraries stored under target need an independent cache lifecycle.
- name: Restore Sherpa native libraries
id: sherpa-native-cache
uses: actions/cache/restore@v5
with:
path: target/sherpa-onnx-prebuilt
key: sherpa-onnx-v1-${{ runner.os }}-${{ runner.arch }}-1.13.4-static

- name: Repair missing Sherpa native state
shell: bash
run: |
if ! find target/sherpa-onnx-prebuilt -type f \
\( -name 'sherpa-onnx-c-api.lib' -o -name 'libsherpa-onnx-c-api.a' \) \
-print -quit 2>/dev/null | grep -q .; then
rm -rf target/sherpa-onnx-prebuilt
cargo clean -p sherpa-onnx-sys
fi

- name: Check compilation
run: cargo check --locked --workspace

- name: Save Sherpa native libraries
if: >-
github.event_name == 'push' &&
github.ref == 'refs/heads/main' &&
steps.sherpa-native-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: target/sherpa-onnx-prebuilt
key: sherpa-onnx-v1-${{ runner.os }}-${{ runner.arch }}-1.13.4-static

# The installer is intentionally excluded from the root Cargo workspace,
# so the workspace check above cannot catch drift in its shared Rust APIs.
- name: Check installer compilation
Expand Down Expand Up @@ -249,6 +278,61 @@ jobs:
- name: Run search tool tests
run: "cargo test --locked -p tool-runtime --lib search::"

# ── DeepSeek Harness bridge: profile packaging on Windows ──────────
# `prepare:dsh-profile` runs from `frontend:build-all` / official desktop
# packaging, not from desktop:dev or cargo check. Until this job existed,
# its first Windows execution ever was a release build, and it failed there
# (`spawnSync npm ENOENT`: npm is a `.cmd` shim Node will not spawn without
# a shell). This job is the cheapest thing that exercises the whole
# packaging path — npm install, tsc, `npm pack`, tar, tree copy — on the
# platform whose path and process rules differ.
dsh-profile-windows:
name: DSH Profile Packaging (windows-latest)
runs-on: windows-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v5

- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version-file: package.json
package-manager-cache: false

- name: Build the bridge profile
run: node scripts/prepare-dsh-profile.mjs

- name: Verify the profile is complete and stamped
shell: bash
run: |
set -euo pipefail
root=packages/dsh-acp/dist-profile
for path in \
"$root/.bitfun-bridge.json" \
"$root/cordis.patch.yml" \
"$root/package.json" \
"$root/lib/app.js" \
"$root/node_modules/@agentclientprotocol/sdk/package.json" \
"$root/node_modules/@deepseek-ai/dsh-agent-spine-demo/package.json"
do
[ -f "$path" ] || { echo "::error::missing $path"; exit 1; }
done
# A vendored tree copied with a broken separator filter drags
# node_modules along; the profile resolves those from the user's own
# dsh installation and must ship none of its own beyond the two above.
nested=$(find "$root/lib" "$root/presets" -name node_modules -o -name '*.map' || true)
if [ -n "$nested" ]; then
echo "::error::profile carries files it must not ship:"
echo "$nested"
exit 1
fi
node -e '
const stamp = require("./packages/dsh-acp/dist-profile/.bitfun-bridge.json");
if (stamp.profile !== "bitfun-acp") throw new Error("wrong profile name: " + stamp.profile);
if (!/^[0-9a-f]{64}$/.test(stamp.content)) throw new Error("no content digest");
process.stdout.write(`profile ${stamp.profile} @ ${stamp.bridge}, min dsh ${stamp.minDshVersion}\n`);
'

# ── Frontend: build ────────────────────────────────────────────────
frontend-build:
name: Frontend Build
Expand Down Expand Up @@ -306,6 +390,9 @@ jobs:
- name: Validate theme visual governance contract
run: pnpm run theme:visual-contract

- name: Validate WebKit compatibility gate
run: pnpm run verify:webkit-compatibility:test

- name: Lint web UI
run: pnpm run lint:web

Expand Down
Loading
Loading