Skip to content

Commit dcdf57e

Browse files
committed
Merge main
# Conflicts: # agent-computer/tests/enter-text.test.ts # agent-langgraph-agui/tests/test_provider_boundaries.py # app/src/routes/_authed/settings/index.tsx
2 parents a698bad + 4bb0c0b commit dcdf57e

75 files changed

Lines changed: 1529 additions & 453 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.

‎.claude/skills/openbot-copy/SKILL.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ because the admin is the one who sets them. A page anybody can open may not.
4040

4141
1. **Say what happened, then what to do.** "Gmail isn't connected. Connect it to let Bots read your
4242
mail." Not why the screen is built the way it is.
43-
2. **One idea per sentence. Short sentences.** A description is one or two sentences, about 20 words.
43+
2. **Use complete sentences for explanations.** Page descriptions, helper text, notices, and empty-state bodies need a subject and a verb, or a direct instruction ("Connect your accounts"). Avoid fragments such as "The apps your Bots use" or "What this Bot can do." Headings, labels, buttons, and short status labels may be fragments.
44+
**Keep only useful explanation.** State the action, outcome, or constraint the person needs. Remove copy that merely repeats the heading. Use natural sentence lengths; do not chop prose into fragments to meet a word count.
4445
3. **Plain words.** "use", not "hold a grant on". "can't", not "is unable to". Contractions are fine.
4546
4. **No "rather than", no em dashes, no "which is why", no "so that nothing … that may be wrong".**
4647
These are the marks of text that is explaining itself. Cut the clause or make it its own sentence.
@@ -59,6 +60,7 @@ because the admin is the one who sets them. A page anybody can open may not.
5960

6061
| Before | After |
6162
|---|---|
63+
| The apps and accounts your Bots use as you. Open one to connect it or change it. | Connect your accounts so Bots can use apps on your behalf. |
6264
| Your connected accounts could not be loaded, so nothing is listed here rather than a list that may be wrong. Reload the page, and tell an administrator if it persists. | Couldn't load your connections. Reload the page, or ask an admin if it keeps happening. |
6365
| Sent to the coworker it is for. Type @ to choose one yourself. | OpenBot picks the right Bot. Type @ to choose one. |
6466
| Gmail is a Composio app, and this deployment has no Composio key. (to a non-admin) | Gmail isn't set up yet. An admin has to turn it on. |
@@ -73,5 +75,6 @@ because the admin is the one who sets them. A page anybody can open may not.
7375
| "this deployment" on a page anybody can open | OpenBot, or say what is missing |
7476
| A sentence over ~25 words | Split it, or cut the clause that justifies the screen |
7577
| "rather than", an em dash, "which is" in UI text | Rewrite as two short sentences |
78+
| A description beginning "The apps…", "What…", "Who…", or "Where…" without a main verb | State the action or behavior in a complete sentence; remove redundant explanation |
7679
| An env var, OAuth, Composio or "grant" outside Admin | Say what the person sees |
7780
| A test asserting long explanatory copy | Assert the short sentence, or the role and the key words |

‎agent-computer/tests/enter-text.test.ts‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ let browser: Browser;
4040
beforeAll(async () => {
4141
if (!asked) return;
4242
const { chromium } = await import("playwright");
43-
// The build the computer launches and CI installs (`playwright install --no-shell chromium`).
44-
// Playwright's default here is the separate headless shell, which is no longer on the runner.
43+
// Match the computer image: full Chromium is installed without the headless shell.
4544
browser = await chromium.launch({ channel: "chromium" });
4645
});
4746

‎agent-langgraph-agui/tests/test_provider_boundaries.py‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import json
22
import os
3-
import re
43
import shutil
54
import subprocess
65
import sys
@@ -13,6 +12,7 @@
1312

1413
import httpx2
1514
import pytest
15+
from anthropic import Anthropic
1616

1717
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
1818

@@ -338,13 +338,14 @@ async def test_anthropic_selection_reaches_anthropic_boundary_without_openai_key
338338
assert result["messages"][0].content == "anthropic proof"
339339
assert "OPENAI_API_KEY" not in os.environ
340340
assert captured[0]["url"] == "http://127.0.0.1:4311/v1/messages"
341-
# Anthropic's SDK sends the key as `x-api-key` up to 1.x and as `Authorization: Bearer` from
342-
# 2.x; either is the key reaching Anthropic, which is what this test is about.
343-
bearer = captured[0]["headers"].get("authorization") or ""
344-
key = captured[0]["headers"].get("x-api-key") or bearer.removeprefix("Bearer ") or None
345-
assert key == "sk-ant-openbot-ci"
346-
# The Messages API version is dated, and the SDK picks it: 1.x sends 2023-06-01, 2.x a later date.
347-
assert re.fullmatch(r"\d{4}-\d{2}-\d{2}", captured[0]["headers"]["anthropic-version"])
341+
# Anthropic 2.3 uses Bearer authentication; older SDKs send x-api-key.
342+
headers = captured[0]["headers"]
343+
assert (
344+
headers.get("x-api-key") == "sk-ant-openbot-ci"
345+
or headers.get("authorization") == "Bearer sk-ant-openbot-ci"
346+
)
347+
with Anthropic(api_key="sk-ant-openbot-ci") as sdk:
348+
assert headers["anthropic-version"] == sdk.default_headers["anthropic-version"]
348349
assert captured[0]["body"]["model"] == request_model
349350
assert captured[0]["body"]["messages"] == [
350351
{"role": "user", "content": "Say hello."}

‎app/src/components/agents/agent-profile.tsx‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,11 @@ export function AgentProfile({
8484
<h1 className="w-full text-balance text-2xl font-semibold leading-tight tracking-tight">
8585
{profile.name}
8686
</h1>
87-
<p className="w-full text-balance text-sm text-muted-foreground">
88-
{profile.title}
89-
</p>
87+
{profile.title && (
88+
<p className="w-full text-balance text-sm text-muted-foreground">
89+
{profile.title}
90+
</p>
91+
)}
9092
</div>
9193

9294
<div className="flex flex-wrap justify-center gap-1.5">

‎app/src/components/agents/handoff-panel.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export function HandoffPanel({ agentId }: { agentId: string }) {
7777
</span>
7878
) : null
7979
}
80-
description="The Bots this one can ask for help. This doesn't change who can ask it. Their answers come back into the same conversation, under their name."
80+
description="Choose which Bots this Bot can ask for help. Their answers appear in the same conversation under their own names. This does not change who can ask this Bot for help."
8181
title="Bots it can ask"
8282
>
8383
{/* Facts about the deployment rather than rows to act on, so said as sentences. */}

0 commit comments

Comments
 (0)