Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
468 commits
Select commit Hold shift + click to select a range
7b23cf9
Wait 3 s for OpenBot Desktop's ping and 8 s for its handoff, longer t…
davidmckayv Oct 18, 2026
0670da8
Remove what nothing uses after the rework: the async SHA-256 wrapper,…
davidmckayv Oct 18, 2026
52ee8a1
Describe in the company install guide only what the Recorder records …
davidmckayv Oct 18, 2026
7577f3d
Keep the manifest's permission list and the popup's prepare answer pr…
davidmckayv Oct 18, 2026
b205220
Mask form bodies pair by pair whatever their declared type, and JSON …
davidmckayv Oct 19, 2026
5f4ebee
Drop page-captured calls to OpenBot itself, as the debugger already d…
davidmckayv Oct 19, 2026
0a6555e
Keep a content message the port could not deliver, and stop an orphan…
davidmckayv Oct 19, 2026
df9a92e
Keep the sealed organization session no longer than it is needed: del…
davidmckayv Oct 19, 2026
573f7be
Drop the organization's expired verdicts from the Recorder guard's ca…
davidmckayv Oct 19, 2026
1caa000
Answer a Recorder bearer only where the tested trajectory-path check …
davidmckayv Oct 19, 2026
a8c3978
Say on the connect page what OpenBot gets access for: signing the bro…
davidmckayv Oct 19, 2026
83d39fe
Move the action notice and trajectory rollover thresholds into the ex…
davidmckayv Oct 19, 2026
6c60e33
Clear the rework's leftovers: the chat-only tool line and generated i…
davidmckayv Oct 19, 2026
ba86a7b
Say Bun 1.4 or later is required: the repository pins 1.4.3 and some …
davidmckayv Oct 19, 2026
5e9ac17
Keep the company install guide to the steps an IT team and an Intelli…
davidmckayv Oct 19, 2026
4dd9731
Describe the Recorder release for whoever upgrades: migration 0057, S…
davidmckayv Oct 19, 2026
39f4667
Find a browser installed after Desktop started, follow XDG_CONFIG_HOM…
davidmckayv Oct 19, 2026
b5c5277
Answer the Recorder's Desktop ping cheaply and every failure with a s…
davidmckayv Oct 19, 2026
2840289
Copy only the Recorder extension's package.json into a Desktop deploy…
davidmckayv Oct 19, 2026
e93a76e
Tell IT what removing OpenBot Desktop leaves behind: Windows deletes …
davidmckayv Oct 19, 2026
b107a37
Remove the screen-capture fake from the extension's test chrome: the …
davidmckayv Oct 18, 2026
5183003
End a recording that a Disconnect or a sign-out stops with a failed o…
davidmckayv Oct 19, 2026
3723510
Stop what a lost connection still runs: a keep-alive sign-out and a p…
davidmckayv Oct 19, 2026
e206446
Keep a recording running when its person connects this browser again:…
davidmckayv Oct 19, 2026
a4687ad
Reopen an offscreen document that goes away mid-recording or mid-Stop…
davidmckayv Oct 19, 2026
b0ac1d2
Narrow the reopened-document tests' expected session to the start mes…
davidmckayv Oct 19, 2026
be7b409
Say so when a recording's streamer never starts: the live status show…
davidmckayv Oct 19, 2026
fca58fd
Delete a recording's trajectory records from the outbox once it is do…
davidmckayv Oct 19, 2026
56f1dba
Bump the Recorder database to version 2, which drops what a build fro…
davidmckayv Oct 19, 2026
b706203
Pass OpenBot Desktop's refusal code through the Desktop connect and s…
davidmckayv Oct 19, 2026
ca814ee
Name everything a Disconnect discards in its dialog: the recording in…
davidmckayv Oct 19, 2026
9c319f0
Popup run-through fixes: say the Learning sentence once after Stop in…
davidmckayv Oct 19, 2026
132f61b
Say in the managed schema and the policy parser that Chrome withholds…
davidmckayv Oct 19, 2026
b8d0165
Say in the company guide that Chrome withholds a Recorder policy of t…
davidmckayv Oct 19, 2026
415ef2f
Drop the Recorder company install guide and its test, and the pointer…
davidmckayv Oct 19, 2026
fe7966a
Count a workspace Desktop copies as its manifest alone as present in …
davidmckayv Oct 19, 2026
a3ac00f
Cut an over-budget network event's request and response bodies to one…
davidmckayv Oct 19, 2026
047a4f5
Have the service worker name the extension version in offscreen.recov…
davidmckayv Oct 19, 2026
bd878ca
While a recording runs, ask OpenBot every 30 s whether its connection…
davidmckayv Oct 19, 2026
4fe3fca
Raise the Recorder's web connect limit from 3 to 10 per OpenBot origi…
davidmckayv Oct 19, 2026
468ac44
Mask what a person says while recording: scrubTranscript finds a card…
davidmckayv Oct 19, 2026
b3279c3
Transcribe the person's narration in the browser while they record: t…
davidmckayv Oct 19, 2026
eb9e7d4
Show the narration in the popup: a Voice row beside the recording's t…
davidmckayv Oct 19, 2026
bc975ef
Mask any spoken number Chrome cuts short or runs together: scrubTrans…
davidmckayv Oct 19, 2026
26f3110
Say so in the Voice row when the browser hears speech but hands back …
davidmckayv Oct 19, 2026
6a5ab27
Ask for every permission when the Recorder is installed, so the first…
davidmckayv Oct 19, 2026
66175e0
Warn that Learning will not see a recording only when its capture pas…
davidmckayv Oct 19, 2026
9d91f58
Keep the setup page readable in a narrow window: Allow microphone sit…
davidmckayv Oct 19, 2026
ce34f26
Keep one-time codes in the browser: a 2FA field with no autocomplete=…
davidmckayv Oct 19, 2026
8e1102f
Mask a code typed a digit per box: a row of 4 to 8 one-character boxe…
davidmckayv Oct 19, 2026
687598f
Merge main into the Recorder branch: desktop.yml watches both main's …
davidmckayv Oct 19, 2026
4b14dbf
Record only the network calls the person's own actions cause: a fetch…
davidmckayv Oct 19, 2026
ff087ee
Record navigation and page events from a followed tab's top frame onl…
davidmckayv Oct 19, 2026
4097d2b
Record into each person's own Learning space, with no Bot in the Reco…
davidmckayv Oct 19, 2026
5fa0ed8
Every Bot a person uses draws Skills from their own Learning space, a…
davidmckayv Oct 19, 2026
acf333b
Stop the Recorder's leak checks reading the event's clock as a leaked…
davidmckayv Oct 19, 2026
ffaf7ab
Record the person's steps instead of network calls: a recording is ea…
davidmckayv Oct 19, 2026
702652e
Say in the popup what a recording now holds: the form reads that it r…
davidmckayv Oct 19, 2026
ad25956
Keep the page's own chatter and redirects out of the steps: a write w…
davidmckayv Oct 19, 2026
b6de006
Name the element a click was meant for: a click on text or a wrapper …
davidmckayv Oct 19, 2026
56c6a2b
The AG-UI observation the network capture hands to the agent events: …
davidmckayv Oct 20, 2026
354bcc9
The agent events' interface: observe what the network capture sees of…
davidmckayv Oct 20, 2026
451a667
Let the agent events keep a long message instead of losing it: trimEv…
davidmckayv Oct 20, 2026
b828664
Read the chat message and tool call a click landed in as CopilotKit r…
davidmckayv Oct 20, 2026
93bb2d0
Turn the AG-UI traffic a recording sees into exactly the events Copil…
davidmckayv Oct 20, 2026
239be16
Prove the agent events match CopilotKit on real traffic: scripts/agen…
davidmckayv Oct 20, 2026
41e17f5
See the agent's side through Chrome's debugger: every AG-UI run a fol…
davidmckayv Oct 20, 2026
7911efd
Never change the capture's own observation: the agent events apply a …
davidmckayv Oct 20, 2026
97d6f01
Pin the agent events' masking, replays and coverage on real recording…
davidmckayv Oct 20, 2026
5f14f9a
Emit nothing for a recording that has stopped: a run's events still b…
davidmckayv Oct 20, 2026
a90fe8b
Read each streamed message's agent.message text in the coverage test …
davidmckayv Oct 20, 2026
244f0a7
See the agent's side from inside the page when Chrome refuses the deb…
davidmckayv Oct 20, 2026
88d45cc
Stop reading an event stream once its first event shows it is not AG-…
davidmckayv Oct 20, 2026
0ab250d
Merge the agent's side of a recording: the network capture's AG-UI ob…
davidmckayv Oct 21, 2026
0396906
Capture clicks and typing with CopilotKit main's own capture code: np…
davidmckayv Oct 21, 2026
0f2970e
Send typing exactly as CopilotKit main settles it, with each held edi…
davidmckayv Oct 21, 2026
48e5237
Mask every copy of an edited field's content to its value's verdict: …
davidmckayv Oct 21, 2026
2c2ea18
Never take CopilotKit's own capture batch for a step's save: a POST w…
davidmckayv Oct 21, 2026
0156642
See the agent's side of a recording made in OpenBot itself: the AG-UI…
davidmckayv Oct 21, 2026
42909f5
Match CopilotKit's legacy capture where the end-to-end run found the …
davidmckayv Oct 21, 2026
1e0fd90
Carry the dependency patches wherever the tree is installed: both ima…
davidmckayv Oct 21, 2026
bd1151c
Merge the capture and masking fixes from the end-to-end run: an edite…
davidmckayv Oct 21, 2026
2a0c01e
Never take CopilotKit's own capture-pass request for a save: the page…
davidmckayv Oct 21, 2026
520601c
Merge the agent-side fixes from the end-to-end run: CopilotKit's thre…
davidmckayv Oct 21, 2026
d360dab
Never cut an agent event's ids, names or enum-like fields to fit it: …
davidmckayv Oct 21, 2026
6ea697e
Follow OpenBot's own runtime info call, so a recording made in OpenBo…
davidmckayv Oct 21, 2026
5b45f58
Let a click take the Thread of the run its form's submit started: Ope…
davidmckayv Oct 21, 2026
1aa76bb
Merge the second end-to-end fixes: an oversized agent.event keeps eve…
davidmckayv Oct 21, 2026
518f63c
Mask a typed secret wherever it appears later in the recording, and k…
davidmckayv Oct 21, 2026
453a744
Keep the steps a service worker holds across a restart, put narration…
davidmckayv Oct 21, 2026
dd99a99
Merge the privacy fixes from the full end-to-end: a secret typed anyw…
davidmckayv Oct 21, 2026
5c0dce6
Say which connected browser is this one, and when each connected to t…
davidmckayv Oct 21, 2026
ecc0ea4
Record one row per action, beside CopilotKit's own events: a submit o…
davidmckayv Oct 21, 2026
9d384dc
Attach the saves the end-to-end run left off its steps and stop holdi…
davidmckayv Oct 21, 2026
b4a18e4
Carry a Thread's tools and context in agent.event only when they chan…
davidmckayv Oct 21, 2026
bc61d7f
Follow a chat's move to a new Thread as CopilotKit does, and let a cl…
davidmckayv Oct 21, 2026
4540681
Merge the durability, order and surface fixes from the full end-to-en…
davidmckayv Oct 21, 2026
5155470
Merge the step and save fixes from the full end-to-end: the Recorder'…
davidmckayv Oct 21, 2026
f3d852c
Merge the agent-side fixes from the CopilotKit-site end-to-end: a cha…
davidmckayv Oct 21, 2026
d2be564
Keep the text of a button, link or label that names a password
davidmckayv Oct 21, 2026
b68255b
Send a held step once when the browser quits as it leaves
davidmckayv Oct 21, 2026
18addf4
Start a new tab's first page change at its opener's page, and number …
davidmckayv Oct 21, 2026
63b1da2
Keep the agent events' click context across a service-worker restart
davidmckayv Oct 21, 2026
f88e89c
Merge the final end-to-end fixes: a control that only names a passwor…
davidmckayv Oct 21, 2026
dfd3435
Attach a save whose only typed values are secrets
davidmckayv Oct 21, 2026
fbaa3c8
Merge the last end-to-end fix: a save whose only typed values are sec…
davidmckayv Oct 21, 2026
961b41c
Merge origin/main into the Recorder branch
davidmckayv Oct 21, 2026
192dabe
Describe the Recorder's agent side in the changelog: every AG-UI run …
davidmckayv Oct 21, 2026
d4499fc
Merge origin/main into the Recorder branch
davidmckayv Oct 22, 2026
769630a
Bring the Recorder's tests in line with main
davidmckayv Oct 22, 2026
32ea6a3
Set down the contract the OpenBot Browser is built against
davidmckayv Oct 22, 2026
3d2196b
Add the Browser page and its sidebar button: the person's own browser…
davidmckayv Oct 22, 2026
48f34c9
Bring the Recorder's Settings pages to main's wording: OpenBot rather…
davidmckayv Oct 22, 2026
525989a
Run the person's own browser on OpenBot Desktop, with the Recorder bu…
davidmckayv Oct 22, 2026
2d5c90f
Archive the live browser run's deployment from the repository root, w…
davidmckayv Oct 22, 2026
d2a0104
Say plainly why the person's browser asks for port 4101 first
davidmckayv Oct 22, 2026
4722dec
Merge slice 3: OpenBot Desktop runs the person's browser
davidmckayv Oct 22, 2026
77b7b3a
Answer the Browser button's read in the sidebar pagination test, whic…
davidmckayv Oct 22, 2026
8eb4f68
Line the recording mark up with the icons in the rows around it, and …
davidmckayv Oct 22, 2026
2ba9a52
Type-check the Recorder's and Learning's server tests against main's …
davidmckayv Oct 22, 2026
603b1b0
Merge the Recorder branch: its tests pass CI's test typecheck
davidmckayv Oct 22, 2026
c045721
Merge slice 4: the Browser page
davidmckayv Oct 22, 2026
749213b
Open a person's own OpenBot browser from the server, already connected
davidmckayv Oct 22, 2026
f40e3c4
Let the Recorder take its connection and commands from its launcher
davidmckayv Oct 22, 2026
68490fa
Time a narrated phrase from its own first word when Chrome reuses a r…
davidmckayv Oct 22, 2026
70e49ad
Pin a Bot's browser launch exactly, before a person's browser joins it
davidmckayv Oct 22, 2026
94351c1
Open a person's browser on the computer, with the Recorder in it and …
davidmckayv Oct 22, 2026
f09680d
Carry the built Recorder in the computer image
davidmckayv Oct 22, 2026
29ec0bc
Start the local computer with Chrome or Edge, and document the Record…
davidmckayv Oct 22, 2026
8707864
Test the OpenBot browser's routes, its live screen and where it may go
davidmckayv Oct 22, 2026
5251968
Merge slice 1: the computer opens a person's browser with the Recorde…
davidmckayv Oct 22, 2026
ae24b03
Answer the computer's refusals as the person's, and its own failings …
davidmckayv Oct 22, 2026
25339b5
Merge slice 2: the server opens the person's own browser, and the Rec…
davidmckayv Oct 22, 2026
2f8ee2b
Leave OpenBot Desktop's own Recorder host out of the person's browser
davidmckayv Oct 22, 2026
55bb029
Name the OpenBot browser's connection in Settings, Browsers
davidmckayv Oct 22, 2026
ae240e5
Let the page say a phrase has begun, and put its times on the server'…
davidmckayv Oct 22, 2026
e924521
Let a person's cloud browser reach OpenBot and the gateway on their o…
davidmckayv Oct 22, 2026
a026a87
Hold the steps while the launcher says a phrase is under way, and rep…
davidmckayv Oct 22, 2026
c70d3b1
Put narration on the server's clock, wait for a slow page's own answe…
davidmckayv Oct 22, 2026
3421f3f
Merge the server's end-to-end fixes
davidmckayv Oct 22, 2026
d2abf16
Tell the Recorder when a phrase begins, show what it hears, and confi…
davidmckayv Oct 22, 2026
35a3fb7
Merge the Recorder's and the app's end-to-end fixes
davidmckayv Oct 22, 2026
bf6f136
Offer Record while the Recorder reports itself disconnected
davidmckayv Oct 22, 2026
8eaf612
Word the network filter's refusals for a person, and let a domain rul…
davidmckayv Oct 22, 2026
4a6003e
Say which page did not open in a sentence, not Playwright's error and…
davidmckayv Oct 22, 2026
c51714d
Pass the person starting and stopping a phrase to the Recorder
davidmckayv Oct 22, 2026
ee15000
Keep a person's browser open while its one window shows a Recorder page
davidmckayv Oct 22, 2026
73365f9
Load Google in browsers behind the egress filter
davidmckayv Oct 22, 2026
56280ca
Keep the whole page on the hosted live screen while the Recorder records
davidmckayv Oct 22, 2026
bb25221
Merge the computer's end-to-end fixes
davidmckayv Oct 22, 2026
ae57b18
Let a person's cloud browser reach OpenBot and the gateway by name on…
davidmckayv Oct 22, 2026
0ecca20
Describe the OpenBot Browser in the changelog
davidmckayv Oct 22, 2026
35c89a2
Let OpenBot tell the Recorder its connection was revoked
davidmckayv Oct 22, 2026
918ae6c
Let the Recorder forget a connection OpenBot revoked as soon as OpenB…
davidmckayv Oct 22, 2026
75ba0d1
Tell a person's OpenBot browser at once when they disconnect it, and …
davidmckayv Oct 22, 2026
bcbe663
Bracket an IPv6 address where a network refusal names its port
davidmckayv Oct 22, 2026
ec738cc
Merge the Disconnect fix: OpenBot tells the Recorder at once
davidmckayv Oct 22, 2026
77b3b88
Say in the changelog that a Disconnect signs the Recorder out at once
davidmckayv Oct 22, 2026
528768e
Judge each browser's connections by its own network policy alone
davidmckayv Oct 22, 2026
05e3712
Refuse a Recorder call the browser is slow to answer instead of endin…
davidmckayv Oct 22, 2026
3184ac1
Apply a person's live-screen input in the order it was sent
davidmckayv Oct 22, 2026
b0a572c
Give a hosted person's browser exactly what a hosted Bot's says about…
davidmckayv Oct 22, 2026
492caed
Show the address that failed for a tab on an error page
davidmckayv Oct 22, 2026
7389865
Let OpenBot tell the person's browser that its connection was revoked
davidmckayv Oct 22, 2026
97d6f14
Run the Recorder on disk in a profile that ran an earlier one, and pi…
davidmckayv Oct 22, 2026
9a2c8b3
Type the new real-browser tests the way the suite's others are typed
davidmckayv Oct 22, 2026
a2f4880
Keep the shared-filter browser test off the internet
davidmckayv Oct 22, 2026
ebffb8a
Merge the computer's round-two fixes
davidmckayv Oct 22, 2026
037eb7b
Never sign a person's own browsing as the deployment's Bot
davidmckayv Oct 22, 2026
7841889
Describe the computer's round-two fixes in the changelog
davidmckayv Oct 22, 2026
2584932
Assert the signed-out Recorder state has no person, in a shape that c…
davidmckayv Oct 22, 2026
3a4c2ab
Call an empty hosted tab "New tab" in the tab strip, not "about:blank"
davidmckayv Oct 22, 2026
3e11793
Report a hosted browser's Recorder as narrated by the app, signed in …
davidmckayv Oct 22, 2026
821f187
Say why a person's browser did not open, and at which step, in both logs
davidmckayv Oct 22, 2026
024cc71
Open a person's browser once when two opens arrive together
davidmckayv Oct 22, 2026
28709c6
Merge the run-3 fixes: overlapping opens take turns, and every failed…
davidmckayv Oct 22, 2026
0637895
Ask OpenBot before the Recorder takes a connection from its launcher
davidmckayv Oct 22, 2026
3551adf
Describe the run-3 fixes in the changelog
davidmckayv Oct 22, 2026
ac6d71c
Tell a person their browser cannot open, not how to set up its computer
davidmckayv Oct 22, 2026
e8e3f0f
Show the narration switch off when narration cannot hear the person
davidmckayv Oct 22, 2026
9e67426
Say nothing was recorded when Stop ends a recording with no actions
davidmckayv Oct 22, 2026
4efed44
Merge the run-4 fixes: no empty recording claimed saved, setup text k…
davidmckayv Oct 22, 2026
a002810
Describe the run-4 fixes in the changelog
davidmckayv Oct 22, 2026
31e8b14
Follow every tab the person uses while a recording runs
davidmckayv Oct 22, 2026
cf81161
Tell a person their browser cannot open, not to set OPENBOT_PUBLIC_URL
davidmckayv Oct 22, 2026
5eb0d66
Answer a browser that cannot start here as setup, and keep Playwright…
davidmckayv Oct 22, 2026
7b4a7ed
Merge David's tab decision: a recording follows every tab the person …
davidmckayv Oct 22, 2026
e0d8d2a
Describe the Recorder following every tab in the changelog
davidmckayv Oct 22, 2026
37921ea
Let the Recorder say what a stopped recording held
davidmckayv Oct 22, 2026
ff0926d
Log a page change only while the browser stays open
davidmckayv Oct 22, 2026
fc4be20
Start a person's native browser without focus emulation, and follow t…
davidmckayv Oct 22, 2026
9fd16ef
Report what a stopped recording held: its actions and its narrated ph…
davidmckayv Oct 22, 2026
ebe3fed
Say what a recording saved, and that it held nothing only when the Re…
davidmckayv Oct 22, 2026
acfebbd
Say a person's page changed only once their browser has stayed open w…
davidmckayv Oct 22, 2026
8242429
Refuse a person's browser started without its DevTools pipe, rather t…
davidmckayv Oct 22, 2026
410b467
Merge the run-5 fixes: background tabs stay in the background, and a …
davidmckayv Oct 22, 2026
d40192f
Describe the run-5 fixes in the changelog
davidmckayv Oct 22, 2026
1fd3528
Say where the person's browser shows before it is opened
davidmckayv Oct 22, 2026
08d2216
Say where a person's browser shows in its state, before it is opened
davidmckayv Oct 22, 2026
2003d31
Add the app's toast, Base UI's own, drawn as shadcn's Base UI Toast
davidmckayv Oct 22, 2026
c87fc4e
Open the person's browser in one click from the sidebar
davidmckayv Oct 22, 2026
ddefb67
Merge the one-click Browser button in the sidebar
davidmckayv Oct 22, 2026
ddafa36
Describe the one-click Browser button in the changelog
davidmckayv Oct 22, 2026
f50f1f1
Keep an error toast until it is closed, and draw the opening Browser …
davidmckayv Oct 22, 2026
5b7f309
Tell the person on a single-user OpenBot that their browser's setup i…
davidmckayv Oct 22, 2026
f5e1240
Merge the run-7 polish: the refusal stays until closed, Opening reads…
davidmckayv Oct 22, 2026
41d2428
Tell a single-user OpenBot's person what to do when their browser can…
davidmckayv Oct 22, 2026
b9cac96
Set down the contract for the person's real browser
davidmckayv Oct 22, 2026
7d55506
Name the computer route that lists the person's own browsers
davidmckayv Oct 22, 2026
5d6dc1a
Package the Recorder for the Chrome Web Store and Edge Add-ons
davidmckayv Oct 22, 2026
e4ac6aa
Connect the Recorder through OpenBot Desktop with no Connect page
davidmckayv Oct 22, 2026
08d7fe1
Keep each Recorder's activity, and open the person's own browser from…
davidmckayv Oct 22, 2026
57eb4f2
Light the Browser button's red dot from any of the person's Recorders…
davidmckayv Oct 22, 2026
6bfdcfd
Merge: the server keeps each Recorder's activity, and the Browser but…
davidmckayv Oct 22, 2026
88c189e
Bring the person's own Chrome or Edge forward, and open the Recorder'…
davidmckayv Oct 22, 2026
179623b
Register the Recorder from its stores with the person's Chrome and Ed…
davidmckayv Oct 22, 2026
b15b6b4
Merge: OpenBot Desktop registers the Recorder with the person's Chrom…
davidmckayv Oct 22, 2026
22953e2
Name a browser OpenBot Desktop connects by its own brand, Edge as Edge
davidmckayv Oct 22, 2026
8aea6c3
Tell OpenBot what the Recorder is recording, for the Browser button's…
davidmckayv Oct 22, 2026
3c8a26b
Say what the Recorder collects, and where it goes, before anything is…
davidmckayv Oct 22, 2026
e15e747
Name the id the Recorder runs under when Intelligence refuses its origin
davidmckayv Oct 22, 2026
f751d59
Merge: the Recorder connects through OpenBot Desktop with no Connect …
davidmckayv Oct 22, 2026
ca83b1c
Say only what is always true about where a recording goes
davidmckayv Oct 22, 2026
0abd72b
Describe the person's real browser in the changelog
davidmckayv Oct 22, 2026
c2b9e2e
Merge: package the Recorder for the Chrome Web Store and Edge Add-ons
davidmckayv Oct 22, 2026
253e648
Count the Recorder's activity route among the routes OpenBot serves it
davidmckayv Oct 22, 2026
eda630a
Keep the person's Learning space when Chrome stops the Recorder's idl…
davidmckayv Oct 22, 2026
8860452
Head the setup page with what the Recorder collects
davidmckayv Oct 22, 2026
3c63b1d
Merge the run-8 Recorder fixes: the Learning line survives a worker r…
davidmckayv Oct 22, 2026
356022b
Say in the changelog that the setup page opens with what the Recorder…
davidmckayv Oct 22, 2026
1500853
Set down what OpenBot's own page may ask the Recorder in the same bro…
davidmckayv Oct 23, 2026
e1de4b8
Answer OpenBot's own page in the same browser: its state, Record and …
davidmckayv Oct 23, 2026
f992492
Merge: the Recorder answers OpenBot's own page, and connects with no …
davidmckayv Oct 23, 2026
e53c21f
Work with the Recorder in the browser OpenBot is open in from the Bro…
davidmckayv Oct 23, 2026
4e9c98e
Show Connected at once in Settings, Browsers when a trusted OpenBot's…
davidmckayv Oct 23, 2026
9f8e612
Merge: the Browser button uses the browser OpenBot is open in
davidmckayv Oct 23, 2026
5e19ebd
Describe the Browser button in the person's own browser in the changelog
davidmckayv Oct 23, 2026
677e28c
Merge OpenBot main into the Recorder branch
davidmckayv Oct 26, 2026
b5e002d
Merge OpenBot main, through the Recorder branch, into the OpenBot Bro…
davidmckayv Oct 26, 2026
9fcf28d
The Recorder's notice takes main's 0.5rem radius
davidmckayv Oct 26, 2026
43a9b60
Merge branch 'merge-main-into-recorder' into merge-main-into-browser
davidmckayv Oct 26, 2026
86ae33c
Merge remote-tracking branch 'origin/main' into david/recorder-and-br…
davidmckayv Oct 27, 2026
ece8372
Expect Windows' path separator in the local browser's environment test
davidmckayv Oct 27, 2026
99e8089
Read the Anthropic key from either header in the AG2 test
davidmckayv Oct 27, 2026
ca8b748
Merge remote-tracking branch 'origin/main' into david/recorder-and-br…
davidmckayv Oct 27, 2026
a1dd3bf
Merge remote-tracking branch 'origin/main' into david/recorder-and-br…
davidmckayv Oct 27, 2026
543f2f6
Merge remote-tracking branch 'origin/main' into david/recorder-and-br…
davidmckayv Oct 28, 2026
38989c4
Address the code-owner review on the Recorder and the OpenBot Browser
davidmckayv Oct 28, 2026
3521221
Pin the on-device language sentence with this runtime's own name for …
davidmckayv Oct 28, 2026
975cbe9
Tests: print a DOM node in a failed assertion as its markup, not ever…
davidmckayv Oct 28, 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
  •  
  •  
  •  
24 changes: 23 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,11 @@ COPILOTKIT_LICENSE_TOKEN=
# CPK_INTELLIGENCE_SKILLS_REVISION=exact-revision-id
# See docs/automatic-learning.md for managed/self-hosted setup and permissions.

# OpenBot accepts the OpenBot Recorder extension only from its own extension id. A fork, or a build
# signed with another key, has another id: list it here, comma separated, each 32 letters from a to
# p. Any other value stops the server at boot.
# OPENBOT_RECORDER_EXTRA_EXTENSION_IDS=

# How long a Bot's stream may say nothing before this deployment gives up on the turn, in
# milliseconds. A Bot is any AG-UI endpoint, which means it will be redeployed mid-answer, its own
# upstream will time out, and it will sometimes accept a connection and then write nothing at all.
Expand Down Expand Up @@ -207,6 +212,11 @@ OPENAI_API_KEY=
# BOT_MODEL=openai/gpt-5.5
#
# OPENAI_BASE_URL=
# Behind an OPENAI_BASE_URL that is not OpenAI or Azure, built-in Bots call the endpoint's Chat
# Completions API, which is what most compatible endpoints serve. A gateway that also serves the
# Responses API keeps Responses-only features, such as reasoning summaries, with `responses`.
# `chat` forces Chat Completions; any other value is an error when a built-in Bot runs.
# COPILOTKIT_OPENAI_API=responses

# Optional dictation, independent of every agent/chat provider. Set provider, base URL,
# and model together. The endpoint must implement POST /audio/transcriptions under this
Expand Down Expand Up @@ -367,6 +377,16 @@ COMPUTER_TOKEN=
# Optional absolute app-owned data root; defaults to the platform's OpenBot user-data directory.
# OPENBOT_LOCAL_COMPUTER_DIR=

# The OpenBot browser: each person's own browser, opened from OpenBot with the Recorder already in it
# and connected. Unset, the supervisor below gives it a computer of its own (on a computer in the cloud
# it reaches the open web, this OpenBot and the Intelligence gateway, nothing inside the deployment);
# the one computer every Bot shares never runs it. Set, it runs on this
# computer instead, as a window on the person's own desktop, while Bots' computers stay where they are:
# OpenBot Desktop points it at its host-side local Chrome computer, called with COMPUTER_TOKEN. The
# Recorder in it reaches OpenBot at OPENBOT_PUBLIC_URL (or BETTER_AUTH_URL), which must be https, or
# http on 127.0.0.1 or [::1] with a port.
# OPENBOT_BROWSER_URL=http://127.0.0.1:4101

# Which Bot this computer belongs to, and therefore which profile directory it uses.
# COMPUTER_BOT_ID=shared

Expand Down Expand Up @@ -426,7 +446,9 @@ MANAGED_AGENT_TOKEN=

# One computer per Bot. Unset, every Bot shares the computer at AGENT_COMPUTER_URL, suitable on a
# laptop and explicit about being one shared machine. Set, the supervisor gives each Bot a container
# of its own, with its own /workspace and its own browser profile.
# of its own, with its own /workspace and its own browser profile. A person's own OpenBot browser
# runs only on a computer of its own, so it needs this (or OPENBOT_BROWSER_URL above): on the shared
# computer a Bot's shell could read the person's logins off the disk.
COMPUTER_SUPERVISOR_URL=
# Shared with the supervisor. Not the security boundary, its four verbs are, but it keeps anything
# else that can reach the port from cycling a Bot's computer.
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ jobs:
- run: >-
bun test tests/sign-in.test.ts tests/session-cookies.test.ts tests/follows-popup.test.ts
tests/demonstration-live.test.ts tests/webrtc-proxy.test.ts tests/web-bot-auth-browser.test.ts
tests/handoff-page-restore.test.ts tests/enter-text.test.ts
tests/handoff-page-restore.test.ts tests/enter-text.test.ts tests/person-browser.test.ts tests/person-browser-computer.test.ts
tests/screencast-keys-browser.test.ts
working-directory: agent-computer
env:
OPENBOT_COMPUTER_BROWSER: '1'
Expand Down
16 changes: 14 additions & 2 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ name: Desktop
# it at runtime with an `expect`, so a bad row panics the window rather than failing a type check.
on:
pull_request:
paths: ["desktop/**", "shared/harnesses.json", "shared/marks/**", "package.json", ".github/workflows/desktop.yml"]
paths: ["desktop/**", "shared/harnesses.json", "shared/marks/**", "shared/recorder-extension.json", "package.json", ".github/workflows/desktop.yml"]
push:
branches: [main]
paths: ["desktop/**", "shared/harnesses.json", "shared/marks/**", "package.json", ".github/workflows/desktop.yml"]
paths: ["desktop/**", "shared/harnesses.json", "shared/marks/**", "shared/recorder-extension.json", "package.json", ".github/workflows/desktop.yml"]
workflow_call:
secrets:
OPENBOT_GOOGLE_MODEL_OAUTH_CLIENT_SECRET:
Expand Down Expand Up @@ -143,6 +143,18 @@ jobs:
- name: Rust regression tests
run: cargo test --locked --lib --bins
working-directory: desktop/src-tauri
# The binary run as the Recorder's browsers run it: the native messaging host Chrome starts, and
# the install that writes its manifests. The host name and extension id come from
# shared/recorder-extension.json, which the Rust reads at compile time.
- name: Recorder native host tests
run: cargo test --locked --test recorder_host
working-directory: desktop/src-tauri
# Only a release build is a GUI-subsystem executable on Windows, and only a release build proves
# the debug-only test seam is absent.
- name: Recorder native host tests (release)
if: matrix.platform.name == 'windows'
run: cargo test --locked --release --test recorder_host
working-directory: desktop/src-tauri
# Hosted Windows runners are administrators. Exercise setup again with an actual Users-only
# account: DISM's feature reads worked as CI's administrator but refused ordinary app users.
- name: Windows standard-user setup regression
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,6 @@ venv/
.pytest_cache/
.ruff_cache/
.mypy_cache/

# The Recorder extension's signing key never enters the repository (Decision 9).
extension/**/*.pem
Loading
Loading