Repository navigation
Commit 67091ed
authored
feat: Bots work as coworkers (#673)
* fix: enable Automatic Learning by default
* fix: provision the default learning container during setup
* feat: provision self-hosted learning through Intelligence SSO
* feat: coworker parity for OpenBot
Bots now work as always-on coworkers: they act unattended, take on standing
responsibilities, reach people where they are, and stay under one set of
approvals and admin controls.
- Unattended work: headless turns drive the Bot's own computer, draw charts and
cards into the conversation, and keep its browser profile, cookies and files
across restarts. Computers move to a new image on wake or on request.
- Responsibilities and triggers: standing goals fed by schedules, signed
webhooks, GitHub, Linear, Sentry, PagerDuty, inbound email and Slack
messages; Run now and run history for routines.
- Reachability: Slack and Microsoft Teams through the OpenTag pairing, SMS,
and native push. A Bot's questions and approval requests reach the person
who owns the conversation and resume it when they answer. Charts reach Slack
and Teams as native charts.
- Approvals: one personal approval flow across browser, connected apps, shell,
files, the host and remote Bots; custom rules, auto-review and host command
modes.
- Memory: memories imported from connected apps with provenance, Bot-formed
memories, and background research that suggests next steps.
- Coordination: Bot-to-Bot messages, group conversations with attributed
speakers, and Team Bots shared with teammates.
- Demonstrations: record a task in the browser and turn it into a skill.
- Admin: capability toggles, SSO-required sign-in, SCIM, network egress
policy, action recording, OpenTelemetry export, Passwords and private
sign-in requests.
- A native mobile app (Expo) and its CI typecheck.
Migrations 0048 and 0049 are generated from the schema.
* docs: describe the coworker parity release in the changelog
* test: launch Chromium in the sign-in test only when asked
The test imported Playwright at the top of the file, and CI's install does not
carry it, so the whole file failed to load. It now follows follows-popup.test.ts:
the browser half runs with OPENBOT_COMPUTER_BROWSER=1 and imports Playwright
then, while the parsing test runs everywhere.
* fix: close the holes found in review
Every change below was reproduced with a failing test before it was fixed.
- Admin gate: match the decoded path as well as the raw one, and recognise
CopilotKit runs, connects and suggestions by their trailing segments, as the
runtime does. Use Bots and the model allowlist now also apply in the shared
headless turn runner, and Team Bots publication checks its own switch.
- Egress: a computer refuses the network until its policy arrives, and the
server pushes the policy as the computer wakes. Plain HTTP connects to the
address it checked, metadata and link-local addresses are refused in every
mode, WebRTC stays inside the proxy, and the filter no longer forwards plain
HTTP back into itself.
- Team Bots: the computer, its live screen and sign-ins stay with the owner and
administrators; teammates' turns run without computer tools.
- Groups: a reply waiting on its owner's share check is hidden from other people
and from their Bots, a resumed turn keeps its Bot-to-Bot depth, and an
always-allow is bound to the member set it was given for.
- Approvals: a refused or changed re-check, an approved hand-off, a revoked rule
and an interrupted action all continue the conversation, once. Same-action
matching includes the arguments, previews show the content being approved,
Team Bot calls keep their credential rules without spending a one-time consent
early, and auto-review covers vendor settings tools.
- Lifecycle, memory, passwords, telemetry: reset clears Bot-formed memories,
research and allow rules; one failed pause read no longer stops every turn; a
pause stops a running hand-off; memories stay visible during a resync and are
filtered in SQL; a stuck password sign-in reopens after a lease; exported
commands are scrubbed; Bot-formed memories cannot be stored twice.
- Inbound and auth: signed webhooks dedupe on signed identifiers, Slack triggers
match messages from anyone in the owner's channels, a push token cannot be
moved to another account, saving SSO-required ends non-SSO sessions (and is
refused with no identity provider), and the mobile sign-in scheme is trusted
only where the native app runs.
- A CI job runs the real-Chromium computer tests, and the new environment
variables are documented.
Migration 0050_review_fixes is generated from the schema.
* test: give each ADK model-name case its own thread
Both cases posted to thread "namespaced-model", run "first-run". The current
ag-ui-adk keeps a thread's state for the life of the process, so the second case
answered from the first one's thread and never asked the model endpoint. Each
case now uses its own thread and run.
* fix: close the gaps found in the second review
Each was reproduced with a failing test before it was fixed.
- An approved hand-off keeps its Bot-to-Bot depth however long the person
takes to decide: the signed run is checked by its signature, not by the
ten-minute expiry that guards live callbacks.
- Hand-offs obey Use Bots and the model allowlist, and a refusal is final
rather than retried.
- An approval whose Bot may no longer run is refused before the approved
action executes, instead of executing first and failing in the continuation.
- A re-check that hits a removed connector, a bad saved argument, or a share
check that is pending again tells the Bot, and an approval still failing on
its last try is answered "could not be carried out", so the conversation
continues instead of hanging.
- The egress filter tries every checked address (Happy Eyeballs), so an
IPv6-first answer on a host without IPv6 still connects, and never looks the
name up again.1 parent 1a15d8f commit 67091ed
337 files changed
Lines changed: 95596 additions & 493 deletions
File tree
- .github/workflows
- agent-computer
- src
- tests
- agent-mastra/src/mastra
- app
- src
- components
- app-sidebar
- approvals
- bot-profile
- channels
- computer
- passwords
- routines
- settings
- suggestions
- lib
- agents
- auth
- bot-lifecycle
- channels
- computers
- copilot
- enterprise
- passwords
- plugins
- routines
- routes
- _authed
- _app
- channel
- group
- admin
- settings
- sign-in
- tests
- desktop/src-tauri/src
- docs
- mobile
- app
- src
- server
- drizzle
- meta
- src
- activity
- admin
- agents
- approvals
- auth
- channels
- components
- computer
- db/schema
- delivery
- demonstrations
- host-access
- memory
- passwords
- plugins
- proactive
- responsibilities
- routines
- team-bots
- telemetry
- tests
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
425 | 425 | | |
426 | 426 | | |
427 | 427 | | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
87 | 87 | | |
88 | 88 | | |
89 | 89 | | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
90 | 135 | | |
91 | 136 | | |
92 | 137 | | |
| |||
565 | 610 | | |
566 | 611 | | |
567 | 612 | | |
568 | | - | |
| 613 | + | |
569 | 614 | | |
570 | 615 | | |
571 | 616 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
11 | 42 | | |
12 | 43 | | |
13 | 44 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| 76 | + | |
| 77 | + | |
76 | 78 | | |
77 | 79 | | |
78 | 80 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
165 | 165 | | |
166 | 166 | | |
167 | 167 | | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
168 | 172 | | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
173 | | - | |
174 | | - | |
175 | | - | |
| 173 | + | |
176 | 174 | | |
177 | 175 | | |
178 | 176 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
0 commit comments