From 7db72abe38d397023cadeb8f3e20cc1920e7ac6b Mon Sep 17 00:00:00 2001 From: davidmckayv <1574202+davidmckayv@users.noreply.github.com> Date: Mon, 9 Nov 2026 03:46:01 +0000 Subject: [PATCH 1/3] Release v1.0.0-rc.2 --- charts/openbot/Chart.yaml | 2 +- desktop/src-tauri/Cargo.lock | 2 +- desktop/src-tauri/Cargo.toml | 2 +- package.json | 2 +- release-policy.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/charts/openbot/Chart.yaml b/charts/openbot/Chart.yaml index 9de41f949e..752b571ae7 100644 --- a/charts/openbot/Chart.yaml +++ b/charts/openbot/Chart.yaml @@ -6,7 +6,7 @@ type: application version: 0.2.0 # The OpenBot release this chart's default image tag points at. Kept equal to package.json's version # (the last version published) by the release workflow, and CI refuses a tree where they have drifted. -appVersion: "1.0.0-rc.1" +appVersion: "1.0.0-rc.2" home: https://github.com/CopilotKit/OpenBot sources: - https://github.com/CopilotKit/OpenBot diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index 5dd9fae457..7b24faeee3 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -2746,7 +2746,7 @@ dependencies = [ [[package]] name = "openbot-desktop" -version = "1.0.0-rc.1" +version = "1.0.0-rc.2" dependencies = [ "base64 0.22.1", "block2", diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml index 65097cd8fe..3e3178f7eb 100644 --- a/desktop/src-tauri/Cargo.toml +++ b/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "openbot-desktop" -version = "1.0.0-rc.1" +version = "1.0.0-rc.2" description = "OpenBot Desktop" edition = "2021" rust-version = "1.90" diff --git a/package.json b/package.json index b8e37624d7..eccb1a9e80 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openbot", - "version": "1.0.0-rc.1", + "version": "1.0.0-rc.2", "license": "MIT", "private": true, "packageManager": "bun@1.4.3", diff --git a/release-policy.json b/release-policy.json index 981f8389a5..b43f25488f 100644 --- a/release-policy.json +++ b/release-policy.json @@ -1,6 +1,6 @@ { "$schema": "./shared/release-policy.schema.json", - "version": "v1.0.0-rc.1", + "version": "v1.0.0-rc.2", "compatibility": { "launcherApi": 1, "configSchema": 1, From a58bf63e14e13eb1aab9147254d1a102f4d74e66 Mon Sep 17 00:00:00 2001 From: David McKay Date: Sun, 8 Nov 2026 19:46:29 -0800 Subject: [PATCH 2/3] Set the release policy's database to 0085 for v1.0.0-rc.2 #1298 adds 0084_brokered_accounts and 0085_approval_rule_account, so 1.0 now migrates to 0085. Starting databases and versions are unchanged; still restore the backup to go back. --- release-policy.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-policy.json b/release-policy.json index b43f25488f..a801ff9f84 100644 --- a/release-policy.json +++ b/release-policy.json @@ -11,7 +11,7 @@ "0082_routine_goal", "0077_channel_opening" ], - "to": "0083_learning_skill_approvals", + "to": "0085_approval_rule_account", "rollbackCompatible": false }, "intelligenceCapabilities": [] From ffeade1cb8d9acbae921e1910ec17d481f32ffa9 Mon Sep 17 00:00:00 2001 From: David McKay Date: Sun, 8 Nov 2026 19:46:29 -0800 Subject: [PATCH 3/3] Write the 1.0.0-rc.2 notes from the code Adds what landed on release/1.0 since rc.1 (#1297, #1298, #1302, #1324, #1326, #1327, #1328), rewrites #1322's entry to cover every waiting approval, and names the two new migrations where the notes said there were none. --- CHANGELOG.md | 94 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 71 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebe412ae9b..4753695a6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,8 +8,16 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged. ## Unreleased -**Before upgrading.** There are no migrations: the database stays at -`0083_learning_skill_approvals`. Four things change for an existing deployment: +**Before upgrading.** Two migrations run at start, and the database moves to +`0085_approval_rule_account`. `0084_brokered_accounts` creates a new, empty `brokered_accounts` +table, which fills as people open an app's page in Connections. `0085_approval_rule_account` adds +a nullable `account` column to `approval_rules`. No existing row is rewritten or backfilled, +nothing is dropped and no existing constraint changes. A person's existing connection to an app is +untouched, and calls through it run as before. Going back to 1.0.0-rc.1 or 0.3.4 after people +connect more than one account of an app is not seamless: a rule saved for one account applies to +every account of that app, and Disconnect can leave an extra account connected at Arcade, so +restore the backup taken before the upgrade instead. Four things change for an existing +deployment: - OpenBot Desktop updates its back end to CopilotKit Intelligence 0.16.0-rc.10 at the next Start, saying "Updating the back end to 0.16.0-rc.10. Its data stays." With it, a first back end setup downloads all of its images through downloads.copilotkit.ai first, where its own images came @@ -29,6 +37,34 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged. of the subtitle, and a Bot picked in setup before 0.3.3 and named "LangChain (LangGraph)" is renamed "LangChain". A Bot whose connection you set yourself keeps its subtitle. +### Apps and connections + +- **Connect more than one account of an app.** Once an app is connected, its page in Connections, + and Admin → Plugins for an admin's own account, offers **Connect another account**, on Composio + and Arcade. Pressing Connect again used to be refused with "You already have an account connected + to Gmail. Disconnect it first if you want to connect a different one." With several accounts the + page lists each by its address, with **Make default** and a Disconnect that ends only that + account. An app whose team account is shared still has one account. +- **A Bot can use the account a request is about.** It is told the addresses of your accounts at + that app; with none named it uses your default, the first you connected until you pick another. + A name that isn't one of your accounts is refused, and nothing is sent. +- **An approval names the account** ("Research Bot wants to send email from … on Gmail"), and Always + allow here saves the rule for that account only, shown as "from" and the address under the rule. + Once you connect a second account of an app, your own rules that let Bots act on that app without + asking stop applying, so Bots ask again for each account. Rules that ask or hand off, and team + rules, still cover every account. +- **Apps that need a key say so before you connect** (on Composio). In Browse apps, an app you + connect with a key reads "Needs a key from 1Password", and apps you sign in to are listed first, + where the list was by name alone. Its Connections tile says the same until it is connected, and + its page says "Needs a key from 1Password. Connect shows where to get one.", where it said the app + "connects with a key you already have". +- **The key form says where the key comes from.** Above the boxes, Connect says "1Password doesn't + offer a sign-in here, so it connects with a key from your 1Password account.", what to do at the + app, and **Get a key from 1Password**, which opens the app's own page, for 33 of the most-used key + apps and any app whose listing publishes a link. Box labels read in plain words ("Access token" + for "Bearer Token", "Web address" for "Base URL"), and help text that named Composio says + OpenBot. + ### OpenBot Desktop - **A back end setup that stops says why.** OpenBot's log now records how every back end setup, @@ -36,6 +72,10 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged. and the end of its error output. A setup that stopped used to leave nothing in the log. The card says whether the back end stopped with an error partway, quit without saying why, or could not be run, where all three said "The back end could not start." +- When OpenBot Desktop is signed in with a model Learning can't use, Learn now in Settings → + Learning says "Learning can't run on the model you signed in with. To use it, sign OpenBot in with + an OpenAI or Anthropic API key, or a Claude or ChatGPT plan.", where it told you to give the back + end's Learning agent a model and key. - **The first notification after OpenBot Desktop starts is raised**, for a Bot that needs you or replies while OpenBot is minimised or behind another window. The first one after each launch used to raise nothing, because the app was still checking that notifications were on. OpenBot's log @@ -46,6 +86,8 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged. step says "Setting up your apps" while they connect, where it flashed "Sign in to CopilotKit". Opening OpenBot after a restart says "Starting the engine machine." while it starts OpenBot's Podman machine, and Start's steps say "OpenBot's services" where they said "Containers". +- The screen shown while OpenBot runs opens on "OpenBot is running", with its Updates section under + Show OpenBot and Stop OpenBot, as on the stopped screen, where it sat above the heading. - **App updates download from downloads.copilotkit.ai.** The update feed there names downloads.copilotkit.ai for the Windows installer and the Mac update archives, where they came from GitHub, and every signature is unchanged. If that download fails, OpenBot Desktop reads @@ -58,6 +100,14 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged. ### Teach a Bot +- **Teach a Bot says what happens after a recording saves**: "OpenBot learns a skill from it, and + you'll find it in Settings, Learning. Once it's learned, ask any Bot to do it." A row under the + recording follows it through Learning: **Learn now** before a run, "Learning from your + recordings" during one, "Ready to review" with **Review**, and "Skill learned" with **Try it**, + which opens Home with the task in the message box, not sent. A failed run, Learning with no + model, or a refused Learn now says why, and **See your skills** opens Settings → Learning. With + the page in the background and notifications allowed, a notification says when the skill + arrives. It used to say only that the recording was saved to your Learning space. - **Teach a Bot is one page.** Its title and one line on how sit above the browser, and Your recordings sits under it at the same width and scrolls on its own, so a long list no longer makes the browser smaller. The page was headed "Browser". Where the browser opens as a window on your @@ -69,10 +119,9 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged. name, the Narration switch (its (i) says what narration is for) and **Start recording**, where the name field, the switch and Record sat in a bar above the browser. The narration line shows under the browser only while recording, or to say "No microphone found. Narration is off." on a - computer with none, which keeps your narration choice for when there is one. + computer with none. There, Record no longer asks "Narrate while you record?": it records without + narration and asks the first time you record with a microphone. - Your recordings links to Settings → Learning ("See what your Bots learned"). -- On a computer with no microphone, Record no longer asks "Narrate while you record?". It records - without narration and asks the first time you record with a microphone. ### Conversations @@ -105,16 +154,16 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged. card, Needs you and a task's waiting line say "Save a file todo.txt in share", "Read a file" and "Run a command", where they said "Write file on todo.txt in share". A file on the Bot's own computer is named by its path, and its save step reads "Saved a file". +- **A Bot's Activity names an action waiting for your approval the way its card does**, "Click + the link “Python” on en.wikipedia.org" or "Send email on Gmail", where it read "Approve + computer_click" with "write" beside it. Approval cards list what an action would send as + labelled lines, where they showed raw JSON, and a click shows none. In Slack and Microsoft Teams + the card says it the same way ("Research Bot wants to click the link “Python” on + en.wikipedia.org"). A saved rule is titled "Click" or "Send email on Gmail" instead of its tool + id, and the line under it reads "changes in share for Shop", where it read "write on + host-grant-15407-… for shopper-bot". - An opened "Looked for a tool" step lists the tools the Bot found by name ("Send email on Gmail"), where it showed their ids and the descriptions the search returned to the Bot. -- A browser action waiting for your approval is named the way its card names it. A Bot's Activity - row read "Approve computer_click" with "write" beside it, and now reads "Click the link “Python” - on en.wikipedia.org". The Needs you card names the link too and lists what the action would send - by label, without the page handles a click carried as raw JSON. An approval in Slack says it the - same way ("Research Bot wants to click the link “Python” on en.wikipedia.org"), and a saved rule - is titled "Click" or "Send email on Gmail" instead of its tool id. The line under it names the - folder and the Bot by name and the kind of action in words ("changes in share for Shop"), where - it read "write on host-grant-15407-… for shopper-bot". ### Personal edition @@ -132,11 +181,6 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged. ### Smaller changes -- Settings > Activity and Admin > Audit reach past the newest 50 events: "Show older events" under - the last row loads the next page, and the count says "Newest 50 events" until nothing is older. -- "OpenBot is running" opens on its heading again. Its Updates disclosure, and the line above it, - sit under Show OpenBot and Stop OpenBot, as on the stopped screen, instead of at the top of the - card with nothing above the line. - The sidebar floats as frosted glass over the colours of OpenBot's orb, the orb sits beside OpenBot's name, and the app is set in Atkinson Hyperlegible Next. The glass turns off with the system's reduce transparency or increase contrast setting, and a skin keeps its own look. @@ -165,14 +209,18 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged. is read out by screen readers. - **New Bot** lists the frameworks a custom agent can run on under **Connect a custom agent** on its first screen, below the form, one line each with its logo, Claude Agent SDK, LangChain, Google ADK - and AWS Strands first. Choosing one goes straight to its address, and Back returns to the list. - They were behind a Connect a custom agent button. -- In an 800px-tall window, OpenBot Desktop's usual height on a Mac, New Bot's first screen shows all - four of those frameworks above Cancel and Create Bot before you scroll, where only Claude Agent - SDK did. + and AWS Strands first, all four above Cancel and Create Bot in OpenBot Desktop's default window, + 800px tall. Choosing one goes straight to its address, and Back returns to the list. They were + behind a Connect a custom agent button. - LangChain is called **LangChain**, with LangChain's own mark, where it said "LangChain (LangGraph)": in New Bot, a Bot's "Powered by" subtitle and its Runs on row, and OpenBot Desktop's note under a ChatGPT plan. +- Settings → Activity and Admin → Audit reach past the newest 50 events. **Show older events** under + the last row loads the next page, and the count reads "Newest 50 events", growing as more load, + until nothing older is left. They stopped at the newest 50 and counted them as if that were + everything. +- Apps the broker lists in lowercase are named with capitals in Browse apps and when added, such as + "1Password" where it said "1password". An app added before the upgrade keeps its name. ## 0.3.4