Skip to content

Commit 1085064

Browse files
committed
Merge remote-tracking branch 'origin/main' into feat/image-budget-311
# Conflicts: # src/chrome/src/agent/agent.js # src/chrome/src/ui/settings.js # src/firefox/src/agent/agent.js # src/firefox/src/ui/settings.js
2 parents 3d1cb00 + 971e7d9 commit 1085064

1,462 files changed

Lines changed: 135704 additions & 17473 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
You write release changelog entries for WebBrain, an open-source AI browser agent.
2+
Output only Markdown for the changelog body. Do not include the version heading or date.
3+
Use only these section headings when relevant: ### Added, ### Changed, ### Fixed, ### Tests.
4+
Prefer user-visible behavior and compatibility impact over implementation details.
5+
Keep bullets concise, concrete, and grounded in the supplied repository context.
6+
Mention Chrome and Firefox parity when the context clearly shows both sides changed.
7+
If tests changed, include a ### Tests section.
8+
Do not invent changes that are not present in the context.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Draft the changelog body for WebBrain {{version}} released on {{date}}.
2+
3+
Repository context:
4+
{{release_context}}

.github/workflows/cloud-e2e.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: WebBrain Cloud E2E
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
pack:
7+
description: Scenario pack
8+
required: true
9+
default: gnippets-spa
10+
type: choice
11+
options:
12+
- gnippets-spa
13+
- gnippets-captcha
14+
- gnippets-readonly
15+
- public-readonly
16+
- all
17+
concurrency:
18+
description: Parallel incognito browsers
19+
required: true
20+
default: "2"
21+
scenario:
22+
description: Optional single scenario ID
23+
required: false
24+
type: string
25+
26+
permissions:
27+
contents: read
28+
29+
jobs:
30+
e2e:
31+
runs-on: ubuntu-latest
32+
timeout-minutes: 90
33+
steps:
34+
- uses: actions/checkout@v4
35+
36+
- uses: actions/setup-node@v4
37+
with:
38+
node-version: 22
39+
cache: npm
40+
41+
- run: npm ci
42+
- run: npm run test:ci
43+
44+
- name: Run cloud scenarios
45+
env:
46+
WEBBRAIN_API_KEY: ${{ secrets.WEBBRAIN_API_KEY }}
47+
WEBBRAIN_BASE_URL: ${{ vars.WEBBRAIN_BASE_URL }}
48+
GNIPPETS_BASE_URL: ${{ vars.GNIPPETS_BASE_URL }}
49+
GNIPPETS_E2E_CONTROL_TOKEN: ${{ secrets.GNIPPETS_E2E_CONTROL_TOKEN }}
50+
CAPSOLVER_API_KEY: ${{ secrets.CAPSOLVER_API_KEY }}
51+
E2E_PACK: ${{ inputs.pack }}
52+
E2E_CONCURRENCY: ${{ inputs.concurrency }}
53+
E2E_SCENARIO: ${{ inputs.scenario }}
54+
run: |
55+
args=(--pack "$E2E_PACK" --concurrency "$E2E_CONCURRENCY")
56+
if [[ -n "$E2E_SCENARIO" ]]; then
57+
args+=(--scenario "$E2E_SCENARIO")
58+
fi
59+
node ci/run.mjs "${args[@]}"
60+
61+
- name: Upload traces, recordings, and rubrics
62+
if: always()
63+
uses: actions/upload-artifact@v4
64+
with:
65+
name: webbrain-cloud-e2e-${{ github.run_id }}
66+
path: ci/artifacts/
67+
if-no-files-found: warn
68+
retention-days: 14

.github/workflows/minor-release.yml

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
workflow_dispatch:
55
inputs:
66
use_ai:
7-
description: Generate the changelog with GitHub Models when manual notes are empty.
7+
description: Generate the changelog with AI when manual notes are empty.
88
required: true
99
type: boolean
1010
default: true
@@ -13,15 +13,9 @@ on:
1313
required: false
1414
type: string
1515
default: ''
16-
model:
17-
description: GitHub Models model for AI changelog generation.
18-
required: false
19-
type: string
20-
default: openai/gpt-4o
2116

2217
permissions:
2318
contents: write
24-
models: read
2519

2620
concurrency:
2721
group: minor-release-${{ github.ref }}
@@ -108,21 +102,43 @@ jobs:
108102
109103
- name: Generate changelog notes with AI
110104
if: ${{ inputs.manual_changelog == '' && inputs.use_ai }}
111-
id: ai_changelog
112-
uses: actions/ai-inference@v1
113-
with:
114-
model: ${{ inputs.model }}
115-
prompt-file: .github/prompts/minor-release-changelog.prompt.yml
116-
input: |
117-
version: ${{ steps.release_meta.outputs.new_version }}
118-
date: ${{ steps.release_meta.outputs.release_date }}
119-
file_input: |
120-
release_context: .release/release-context.md
121-
122-
- name: Save AI changelog notes
123-
if: ${{ inputs.manual_changelog == '' && inputs.use_ai }}
105+
env:
106+
OPENAI_API_KEY: ${{ secrets.OPENAI_SECRET }}
124107
run: |
125-
cp "${{ steps.ai_changelog.outputs.response-file }}" .release/changelog-body.md
108+
SYSTEM_PROMPT=$(cat .github/prompts/minor-release-changelog-system.txt)
109+
USER_TEMPLATE=$(cat .github/prompts/minor-release-changelog-user.txt)
110+
RELEASE_CONTEXT=$(cat .release/release-context.md)
111+
VERSION="${{ steps.release_meta.outputs.new_version }}"
112+
DATE="${{ steps.release_meta.outputs.release_date }}"
113+
114+
jq -n \
115+
--arg sys "$SYSTEM_PROMPT" \
116+
--arg usr "$USER_TEMPLATE" \
117+
--arg ver "$VERSION" \
118+
--arg dt "$DATE" \
119+
--arg ctx "$RELEASE_CONTEXT" \
120+
'{
121+
model: "gpt-5.4-nano-2026-03-17",
122+
messages: [
123+
{role: "system", content: $sys},
124+
{role: "user", content: ($usr | gsub("\\{\\{version\\}\\}"; $ver) | gsub("\\{\\{date\\}\\}"; $dt) | gsub("\\{\\{release_context\\}\\}"; $ctx))}
125+
],
126+
max_completion_tokens: 1200,
127+
temperature: 0.2
128+
}' > /tmp/payload.json
129+
130+
RESPONSE=$(curl -s https://api.openai.com/v1/chat/completions \
131+
-H "Authorization: Bearer $OPENAI_API_KEY" \
132+
-H "Content-Type: application/json" \
133+
-d @/tmp/payload.json)
134+
135+
ERROR=$(echo "$RESPONSE" | jq -r '.error.message // empty')
136+
if [ -n "$ERROR" ]; then
137+
echo "API error: $ERROR" >&2
138+
exit 1
139+
fi
140+
141+
echo "$RESPONSE" | jq -r '.choices[0].message.content' > .release/changelog-body.md
126142
127143
- name: Require changelog notes
128144
run: |

.github/workflows/webmcp.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: WebMCP E2E
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- ".github/workflows/webmcp.yml"
7+
- "package.json"
8+
- "package-lock.json"
9+
- "src/chrome/**"
10+
- "test/fixtures/webmcp-*.html"
11+
- "test/webmcp-e2e.mjs"
12+
push:
13+
branches:
14+
- main
15+
paths:
16+
- ".github/workflows/webmcp.yml"
17+
- "package.json"
18+
- "package-lock.json"
19+
- "src/chrome/**"
20+
- "test/fixtures/webmcp-*.html"
21+
- "test/webmcp-e2e.mjs"
22+
workflow_dispatch:
23+
24+
permissions:
25+
contents: read
26+
27+
concurrency:
28+
group: webmcp-${{ github.workflow }}-${{ github.ref }}
29+
cancel-in-progress: true
30+
31+
jobs:
32+
smoke:
33+
runs-on: ubuntu-24.04
34+
timeout-minutes: 5
35+
steps:
36+
- uses: actions/checkout@v4
37+
38+
- uses: actions/setup-node@v4
39+
with:
40+
node-version: 22
41+
cache: npm
42+
43+
- run: npm ci
44+
45+
- name: Report Chrome version
46+
run: google-chrome --version
47+
48+
- name: Run real Chrome WebMCP smoke test
49+
env:
50+
WEBMCP_CHROME_PATH: /usr/bin/google-chrome
51+
run: npm run test:webmcp

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
.DS_Store
33
node_modules/
44
test/anonymous/.test-profile/
5+
ci/artifacts/
56

67
# ---- Expo / React Native local state ----
78
.expo/

0 commit comments

Comments
 (0)