Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
2b4b194
Let a transport say what it knows about an action it listed
mxmzb Sep 9, 2026
80a9e89
Record what a listed action does and which version it is
mxmzb Sep 9, 2026
8ed87ed
Add the Composio SDK, for the live test to call the real thing with
mxmzb Sep 9, 2026
c470dd7
Believe what a vendor said an action does, and treat silence as a write
mxmzb Sep 9, 2026
ef219b7
Keep a Composio connection after its person is gone
mxmzb Sep 9, 2026
4e003de
Reach a Composio app as the person asking, at the version that was li…
mxmzb Sep 9, 2026
8ea0120
Format the Composio transport to match the repository's own style
mxmzb Sep 9, 2026
2e54ab9
Let Composio be one of the transports a kind can name
mxmzb Sep 9, 2026
15802ac
Add the migration for an action's effect and version and for Composio…
mxmzb Sep 9, 2026
163a466
Check the Composio shapes this transport is written against against t…
mxmzb Sep 9, 2026
6a22143
Decide once how a server is reached, instead of three times in three …
mxmzb Sep 9, 2026
94fb760
Add a script for the live Composio test and document the key it needs
mxmzb Sep 9, 2026
71fd357
Give the plugin store suite a fresh database and a Composio fixture, …
mxmzb Sep 9, 2026
6006b9b
Refuse to run this suite against a database that already owns its fix…
mxmzb Sep 9, 2026
5d92666
Require positive evidence before this suite deletes a row it may not own
mxmzb Sep 9, 2026
39918f9
Resolve once how a server is reached, and let the trail read it
mxmzb Sep 9, 2026
532a643
Key whose account a call reached on the auth kind, not on the credent…
mxmzb Sep 9, 2026
dd76143
Look a transport up by the kind that was resolved, not by guessing fr…
mxmzb Sep 9, 2026
a368aa3
Correct four comments that describe the rule this branch replaced
mxmzb Sep 9, 2026
d780fae
Reflow the comment the last commit corrected but left 133 columns wide
mxmzb Sep 9, 2026
88193ff
Refuse a brokered call nobody is attributed for, and one whose asker …
mxmzb Sep 9, 2026
9045a52
Test the two refusals that stand between a stray run and somebody els…
mxmzb Sep 9, 2026
1cc7b82
Hand the recorded effect to the classifier wherever a tool is classified
mxmzb Sep 9, 2026
9b1b060
Test both places a brokered action's effect is read, not just the cal…
mxmzb Sep 9, 2026
20c738c
Say in the classifier's own doc that a vendor's label can earn a read
mxmzb Sep 9, 2026
ac45f16
Name both entry-less shapes in the reconciliation helper's reason
mxmzb Sep 9, 2026
f7a9911
Record what a refresh learned about each action
mxmzb Sep 9, 2026
f8f95a9
Gate the three columns a refresh now writes, and guard the two vendor…
mxmzb Sep 9, 2026
b117092
Call a Composio action at the version it was listed at
mxmzb Sep 9, 2026
b253c99
Close the two audit gates that were waiting on a call that could comp…
mxmzb Sep 9, 2026
ab46ac5
Stop a model choosing which revision of an action it calls
mxmzb Sep 9, 2026
80d4117
Strip the reserved version key before trusting either branch
mxmzb Sep 9, 2026
bfd8506
Gate the branch where no version was recorded
mxmzb Sep 9, 2026
010e7e8
Name the strip as what protects the version, not the merge order
mxmzb Sep 9, 2026
1447a55
Make the unlabelled-action canary able to fail
mxmzb Sep 10, 2026
72a84a5
Resolve which Composio app a row is once, from the url the call dials
mxmzb Sep 10, 2026
9162ae1
Say which of the two brokered refusals the transport actually repeats
mxmzb Sep 10, 2026
112d884
Make the Notion listing mock restore what it overwrote, in one place
mxmzb Sep 10, 2026
29d91ab
Gate the two brokered properties the plan named and nothing covered
mxmzb Sep 10, 2026
abca7a7
Say that the brokered narrowing throw is reachable, and gate the fall…
mxmzb Sep 10, 2026
7c9ea0f
Build the catalogue urls in the access tests from hosts that already …
mxmzb Sep 10, 2026
b6f7b0c
Stop a value in a vendor column taking an action off the reviewed wri…
mxmzb Sep 10, 2026
4e9e9c0
Say where the actor actually authorizes a transport call, which is no…
mxmzb Sep 10, 2026
840b3d7
Keep the Composio SDK out of the runtime image, where nothing imports it
mxmzb Sep 10, 2026
14e7b87
Refuse the live Composio run that would skip every case and exit 0
mxmzb Sep 10, 2026
9c8353f
Stop offering operators a deployment setting no deployment reads
mxmzb Sep 10, 2026
dac4962
Say why an action list could not be read, in a sentence rather than a…
mxmzb Sep 10, 2026
17c7c37
Report the outcome the vendor actually reported, and our own failures…
mxmzb Sep 10, 2026
bed3dbd
Keep an app's actions when the refresh listed nothing because it aske…
mxmzb Sep 10, 2026
5015c9f
Fail the access tests when the slug they resolve is gone
mxmzb Sep 10, 2026
02cc2ef
Arm the Drive test's fetch, so a call made before its stub cannot rea…
mxmzb Sep 10, 2026
559dd99
Make the live test watch the vendor instead of erasing what it watches
mxmzb Sep 10, 2026
54e63fa
Give the Composio stubs answers the vendor could actually send
mxmzb Sep 10, 2026
0b08915
Observe at the vendor which person's account a Composio call opens
mxmzb Sep 10, 2026
c9e132c
Hold the forged-identity case to the arguments it actually sends
mxmzb Sep 10, 2026
2c8a7bc
Hold the trail to calling a vendor's refusal a failure
mxmzb Sep 10, 2026
aa52f27
Refuse a brokered call from somebody a colleague's connection would c…
mxmzb Sep 10, 2026
4103f8b
Take a brokered connection away when the person or the app goes
mxmzb Sep 10, 2026
d852a7a
Say who an audit row is about when the answer is not a person
mxmzb Sep 10, 2026
c1e70d4
Throw when no app was named and when no client was installed, rather …
mxmzb Sep 10, 2026
bb5f92a
Ask for the whole listing, and refuse a page too full to know it was …
mxmzb Sep 10, 2026
b2b16ba
Stop offering a model an action whose file argument only Composio's o…
mxmzb Sep 10, 2026
9f5c9de
Read one app slug out of a connection url, or read no app at all
mxmzb Sep 10, 2026
10b6bf0
Describe the client seam as unwired, and make the version remedy cond…
mxmzb Sep 10, 2026
23c2b24
Say that the schema reaching a model is the SDK's re-spelling and not…
mxmzb Sep 10, 2026
749eef9
Stop saying Composio lists an action's schema to anybody, when it lis…
mxmzb Sep 10, 2026
fa84783
Find a file parameter that is only reachable under a condition, not j…
mxmzb Sep 10, 2026
4f921bc
Hold the version refusal to the conditional remedy it now offers
mxmzb Sep 10, 2026
dc6d353
Fail these transport tests when the behaviour they are named for breaks
mxmzb Sep 10, 2026
056a0c5
Refuse a brokered row whose id is a curated slug instead of dialling …
mxmzb Sep 10, 2026
ce6fc8a
Say that an empty listing came from a vendor that was asked, because …
mxmzb Sep 10, 2026
8a375f5
Refuse to delete a person this suite never created
mxmzb Sep 10, 2026
1aad7c8
Take back every credential row this file mints, and put back only a c…
mxmzb Sep 10, 2026
e294a1f
Narrow every audit assertion to the run that is being asserted about
mxmzb Sep 10, 2026
ea0500e
Bring the anonymous actor inside the guard that covers every other id…
mxmzb Sep 10, 2026
3a4b46c
Believe the vendor when it declares an action destructive
mxmzb Sep 10, 2026
d287c7a
Walk the one keyword that was hiding a staged file from the listing f…
mxmzb Sep 10, 2026
7f357e5
Read the vendor's answer only where an unreadable one can still be re…
mxmzb Sep 10, 2026
d1afeba
Send the app the url names, so the gate and the call are about one fact
mxmzb Sep 10, 2026
8cea54b
Key the anonymous connection row on its app, so no file sweeps another's
mxmzb Sep 10, 2026
ffb2fee
Cover the empty-listing guard through a vendor that actually answers …
mxmzb Sep 10, 2026
0fe1754
Assert which MCP annotation is believed, and stop claiming none is
mxmzb Sep 10, 2026
6192122
Send an unresolvable row's sentence to the operator and to nobody else
mxmzb Sep 10, 2026
f892e61
Keep the statement and its parameters out of a failed replace
mxmzb Sep 10, 2026
0f187d9
File a brokered disconnect under the app, whichever act ended it
mxmzb Sep 10, 2026
3ae8161
Ask one question about which connection rows this file owns
mxmzb Sep 10, 2026
ba8519a
Put a failed query on the shelf that is raised rather than relayed
mxmzb Sep 10, 2026
d09f91f
Map a deployment fault on the routes that call the same method
mxmzb Sep 10, 2026
d4ed3d3
Cover the read that decides whether to revoke a credential again
mxmzb Sep 10, 2026
5c66242
Read the vendor call's fields by name in the stubs that record them
mxmzb Sep 10, 2026
848272b
Stop the seam claiming an MCP server publishes no effect
mxmzb Sep 10, 2026
95012eb
Say that the initiator kind and the actor answer different questions
mxmzb Sep 10, 2026
21218e2
Sort the import members this branch appended out of order
mxmzb Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 20 additions & 7 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"pretest": "bun run generate:app-config",
"test:smoke": "OPENBOT_SMOKE=1 bun test tests/smoke",
"test:live-screen": "OPENBOT_LIVE_SCREEN=1 bun test agent-computer/tests/live-screen.test.ts agent-computer/tests/browser-close-announcement.test.ts",
"test:live-composio": "bun -e \"if (!process.env.COMPOSIO_API_KEY?.trim()) { console.error('COMPOSIO_API_KEY is empty or unset, so every case in this suite would skip and this command would still exit 0. Run it as COMPOSIO_API_KEY=... bun run test:live-composio.'); process.exit(1) }\" && OPENBOT_LIVE_COMPOSIO=1 bun test server/tests/composio-live.test.ts",
"diagram": "bun scripts/architecture-diagram.ts",
"mock:knowledge": "bun scripts/mock-knowledge-mcp.ts"
},
Expand Down
12 changes: 12 additions & 0 deletions server/drizzle/0029_composio.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CREATE TABLE "composio_connections" (
"toolkit" text NOT NULL,
"user_id" text NOT NULL,
"connected_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT "composio_connections_toolkit_user_id_pk" PRIMARY KEY("toolkit","user_id")
);
--> statement-breakpoint
ALTER TABLE "mcp_tools" ADD COLUMN "effect" text;--> statement-breakpoint
ALTER TABLE "mcp_tools" ADD COLUMN "destructive" boolean DEFAULT false NOT NULL;--> statement-breakpoint
ALTER TABLE "mcp_tools" ADD COLUMN "version" text;--> statement-breakpoint
CREATE INDEX "composio_connections_user_idx" ON "composio_connections" USING btree ("user_id");
Loading