Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
238 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
fede96f
Read the Composio key this deployment reaches the broker with
mxmzb Sep 11, 2026
dde57eb
Name what this deployment needs of the broker beside calling a tool
mxmzb Sep 11, 2026
bfee96d
Let the browser's tool type carry what an action destroys
mxmzb Sep 11, 2026
1e02406
Add the write that enables one app at the broker
mxmzb Sep 11, 2026
32eda61
Document the broker, before anybody can reach it
mxmzb Sep 11, 2026
76c8056
Enable an app at the broker as a row the call path already understands
mxmzb Sep 11, 2026
316445f
Hand the plugin routes a broker, and say whether one is configured
mxmzb Sep 11, 2026
4ad3356
Install a real broker client, in the one file allowed to know the ven…
mxmzb Sep 11, 2026
4647be1
Read the broker's directory through this deployment rather than from …
mxmzb Sep 11, 2026
30301f9
Ask the broker whether a connection is real, and end one where it lives
mxmzb Sep 11, 2026
77d1f41
Record a brokered connection on the broker's word, and heal it in bot…
mxmzb Sep 11, 2026
f6b24c6
Offer the broker's directory, and answer what one person has connected
mxmzb Sep 11, 2026
a79124c
Stop sending this deployment's usage to the broker
mxmzb Sep 11, 2026
9f8838a
Correct the comments that said no adapter existed
mxmzb Sep 11, 2026
612e286
Build the broker client once, at startup, where a key is set
mxmzb Sep 11, 2026
c668431
Let an administrator browse the broker's apps and enable one
mxmzb Sep 11, 2026
24a4f1b
Stop offering a shared token to the connector that cannot hold one
mxmzb Sep 11, 2026
53dc3d2
Leave a read-only check somebody can run after a real consent
mxmzb Sep 11, 2026
c2adeb5
End every account at the broker when an app is removed
mxmzb Sep 11, 2026
feecf7b
Answer a brokered app's Connect with a link minted for whoever asked
mxmzb Sep 11, 2026
5398069
Give one Bot and one app a screen with a switch per action
mxmzb Sep 11, 2026
9d053e5
End a removed person's accounts where they actually live
mxmzb Sep 11, 2026
81b73bb
Let a person confirm and end their own brokered account
mxmzb Sep 11, 2026
2afeacb
Stop a failed read becoming a claim about what this deployment has
mxmzb Sep 11, 2026
fd8526f
Let a screen read what an action destroys
mxmzb Sep 11, 2026
00033a5
Bring the person back to this deployment after they consent
mxmzb Sep 11, 2026
3da24bf
Draw one account card, and let it forget what it was told
mxmzb Sep 11, 2026
e8f4989
File a disconnect only where something was disconnected
mxmzb Sep 11, 2026
6b89968
Test the mark that says an action destroys things, and say which sett…
mxmzb Sep 11, 2026
71af5ba
Hold the broker's catalogue for ten minutes instead of asking per key…
mxmzb Sep 11, 2026
8869a8f
Ask for one row's address instead of the whole plugin surface
mxmzb Sep 11, 2026
ea55938
Ship the broker's SDK, which every container was about to boot without
mxmzb Sep 11, 2026
396ba8b
Actually revoke the grant, and stop claiming more than was done
mxmzb Sep 11, 2026
a2fb3bf
Refuse an answer this transport cannot read, rather than calling it a…
mxmzb Sep 11, 2026
61fe1a4
Stop the key-diagnosis script failing worst when the key is bad
mxmzb Sep 11, 2026
f81686a
Ship the pruned dependencies the image went to the trouble of building
mxmzb Sep 11, 2026
121d0ab
Say what the wire can send, so the reads that trust it stop compiling
mxmzb Sep 11, 2026
db8d2bf
Make this suite able to fail on the defects it names
mxmzb Sep 11, 2026
c1f89e7
Merge the vendor-projection lever
mxmzb Sep 11, 2026
5445899
Merge the suite-falsifiability levers
mxmzb Sep 11, 2026
883c9c3
Refuse a return address nobody could come back through
mxmzb Sep 11, 2026
54175ff
Ask a broker that answers, and read only the rows this run owns
mxmzb Sep 11, 2026
f2cfb81
Keep this transport's own words on the failures it reports
mxmzb Sep 11, 2026
04e54dd
Refuse a vendor answer this adapter cannot read, instead of reading i…
mxmzb Sep 11, 2026
dcc1498
Typecheck the key-diagnosis script, and stop it printing the one sent…
mxmzb Sep 11, 2026
d0267e7
Merge worktree-agent-adb028f01806b249f
mxmzb Sep 11, 2026
08bba85
Merge worktree-agent-a43a541a55e7d2b41
mxmzb Sep 11, 2026
30db5a3
Merge worktree-agent-a181d59bd0f47f03e
mxmzb Sep 11, 2026
d875d37
Merge worktree-agent-a7d2c661a3c2c24c3
mxmzb Sep 11, 2026
297a1f9
Merge worktree-agent-a57833439a7beefc8
mxmzb Sep 11, 2026
39e4432
Stop telling operators no Composio surface exists, when one row does
mxmzb Sep 11, 2026
3661647
Merge the unconfigured-state truthfulness fix
mxmzb Sep 11, 2026
738aece
Say what Composio said, instead of sending everybody to check the key
mxmzb Sep 11, 2026
0304897
Merge the seam error-translation closure
mxmzb Sep 11, 2026
c7cb5d4
Stop the store's own docblock repeating the surface-is-absent claim
mxmzb Sep 11, 2026
30efbe6
Read the rest of a Composio listing, instead of calling one page the …
mxmzb Sep 11, 2026
44cf1ef
Merge the listing-pagination closure
mxmzb Sep 11, 2026
f2bf71a
Fail when the vendor refuses the withdrawal, and when the sweep reach…
mxmzb Sep 11, 2026
70d174c
Merge the connections-suite falsifiability repairs
mxmzb Sep 11, 2026
37fff32
Refuse an answer whose success this deployment cannot read, rather th…
mxmzb Sep 11, 2026
57b4b2e
Merge the result-path and precedence fixes
mxmzb Sep 11, 2026
72d00a1
Read a Composio answer the vendor's own package could not, instead of…
mxmzb Sep 11, 2026
a40b20f
Merge the vendor-fault reclassification
mxmzb Sep 11, 2026
105dbe8
Read Composio's verdict on a withdrawal, and stop calling an unclaime…
mxmzb Sep 11, 2026
bc4482f
Merge the withdrawal-verdict and unclaimed-config fixes
mxmzb Sep 11, 2026
f499d19
Stop the Composio diagnostic promising a distinction it never made
mxmzb Sep 11, 2026
a309b52
Merge the smoke-script diagnosis and docs fixes
mxmzb Sep 11, 2026
17ec5de
Hand Composio the return address that was checked, not the padding ar…
mxmzb Sep 11, 2026
ab9da5f
Merge the return-address normalisation fix
mxmzb Sep 11, 2026
63c3b78
Hand on the identifier the guard checked, and stop four refusals stat…
mxmzb Sep 11, 2026
9f63573
Merge the adapter finding-tail closure
mxmzb Sep 11, 2026
0c6439b
Look at the arguments a call forwards, and stop four guards passing w…
mxmzb Sep 11, 2026
60b3780
Merge the transport-test falsifiability closure
mxmzb Sep 11, 2026
69a9193
Read the vendor's own sentence where it is actually thrown, and let a…
mxmzb Sep 11, 2026
c0d428a
Merge the vendor-sentence depth and precedence fixes
mxmzb Sep 11, 2026
9a5dcd0
Withdraw only what this deployment granted, and prove the delete that…
mxmzb Sep 11, 2026
49f77d9
Merge the revocation scope and wiring guard
mxmzb Sep 11, 2026
90648e9
Send every candidate sentence through one door, and read the labels a…
mxmzb Sep 11, 2026
c852d55
Merge the single-door sentence guard and element checks
mxmzb Sep 11, 2026
b2ccc59
Refuse a withdrawal over a config this deployment cannot claim, and s…
mxmzb Sep 11, 2026
b1d830d
Merge the parallel-path class sweep
mxmzb Sep 11, 2026
62f7331
Follow Composio's cursor on both listings, rather than refuse a page …
mxmzb Sep 12, 2026
a0d4e01
Merge the catalogue and action listing pagination
mxmzb Sep 12, 2026
4e91a22
Name the connection kinds in the broker's own vocabulary, so no app h…
mxmzb Sep 13, 2026
e07fffd
Record how each brokered app connects, and when a connection was last…
mxmzb Sep 13, 2026
1e27703
Name the connection check on the trail, and say whose call it is
mxmzb Sep 13, 2026
3721dcc
Derive the field scheme union from the list the guard reads, rather t…
mxmzb Sep 13, 2026
cf3cb02
Say what is actually singular about the connection check, and stop cl…
mxmzb Sep 13, 2026
a59a7bd
Ship the snapshot 0030 was missing, so the next generate diffs agains…
mxmzb Sep 13, 2026
2f53061
Report what an app's authorization config was created as, rather than…
mxmzb Sep 13, 2026
b71070e
Read how an app connects off the catalogue, rather than assume one fl…
mxmzb Sep 13, 2026
5938d9f
Ask an app what it wants typed in, take the values, and re-check the …
mxmzb Sep 13, 2026
5458097
Offer only the apps this deployment can connect, rather than the whol…
mxmzb Sep 13, 2026
0e3b281
Search the directory in the test too, so the unconnectable app cannot…
mxmzb Sep 13, 2026
65f6b17
Rank the field schemes through a map the compiler counts, rather than…
mxmzb Sep 13, 2026
d7e66b6
Take the resolved connection kind at the enable seam, rather than der…
mxmzb Sep 13, 2026
f5ef9fe
Report when a brokered connection was last checked, rather than let c…
mxmzb Sep 13, 2026
8bf1ac0
Pin no_auth ahead of a managed scheme, for the two apps that publish …
mxmzb Sep 13, 2026
daff963
Answer a failed enable with the reason it failed, rather than with no…
mxmzb Sep 13, 2026
fcad766
Say that the brokered listing is a superset of the vault one, and tha…
mxmzb Sep 13, 2026
54b89ab
Log the enable failure nobody explained, and say what the two connect…
mxmzb Sep 13, 2026
f6c36fe
Name the gap the consent writer still leaves, and pin the failure nob…
mxmzb Sep 13, 2026
6d5c16f
Read the console line the unexplained enable failure writes, and the …
mxmzb Sep 13, 2026
aa86d7f
Carry the app's recorded auth scheme to the browser, and admit the co…
mxmzb Sep 13, 2026
f74a5f4
Name the three calls a typed-secret connection needs, and say why thi…
mxmzb Sep 13, 2026
38e4423
Create the config each kind of app actually needs, rather than the ma…
mxmzb Sep 13, 2026
87895a6
Record how an enabled app connects, and refuse to move a connected on…
mxmzb Sep 13, 2026
524c1c9
Hand the enable tests the connection the caller resolved, and assert …
mxmzb Sep 13, 2026
331871f
Carry the chosen app's connection into the store, and refuse an app t…
mxmzb Sep 13, 2026
6b191d3
Carry the recorded auth scheme on a server address, so connect opens …
mxmzb Sep 13, 2026
757de71
Tell the account hook which of three ways an app connects, and wire t…
mxmzb Sep 13, 2026
f654100
Ask each app what it wants from the person connecting, in that app's …
mxmzb Sep 13, 2026
09967b2
Tell both screens' rows the scheme the recorded server row already ca…
mxmzb Sep 13, 2026
d27c399
Connect one person with what they typed, and drop the failure because…
mxmzb Sep 13, 2026
acd3464
Take back the one account a verification made, rather than sweeping t…
mxmzb Sep 13, 2026
e5ab7f8
Refuse before the key travels, read the withdrawal's verdict, and tel…
mxmzb Sep 13, 2026
c40666a
Draw what the app asked for from what the app published, and give the…
mxmzb Sep 13, 2026
cf3b527
Let an app that needs no account run without one, and keep the gate f…
mxmzb Sep 13, 2026
0309380
Carry whether the key was ever actually used, and let somebody ask again
mxmzb Sep 13, 2026
3fbc3a4
Hand both screens the verification off the row they already read, and…
mxmzb Sep 13, 2026
f100fe3
Record a consent connection as verified, through the one writer both …
mxmzb Sep 13, 2026
ec01b51
Choose the one action a key probe may call, on what the vendor said a…
mxmzb Sep 13, 2026
6c14e36
Say what a connection rests on rather than only that there is one, an…
mxmzb Sep 13, 2026
af643a2
Name the app in the row's own sentences, and say what pressing Connec…
mxmzb Sep 13, 2026
409baf1
Pass a person's own key straight to Composio and keep its names, neve…
mxmzb Sep 13, 2026
fd401c2
Ask whether a key connection replaced one, rather than telling the tr…
mxmzb Sep 13, 2026
fcc89b6
Offer a re-check only on the kind that has one, and put a refused key…
mxmzb Sep 13, 2026
7bce641
Write each screen's reassurance once rather than twice, and complete …
mxmzb Sep 13, 2026
41a15e0
Check a typed key with one argument-less read, and say which of three…
mxmzb Sep 13, 2026
cce28c0
Record the state nobody can undo on the trail, and file both rows und…
mxmzb Sep 13, 2026
1ee070d
Answer a key app with its own form, and send on only the names it pub…
mxmzb Sep 13, 2026
5324ee5
Let somebody re-check the key they just fixed, and raise where the ve…
mxmzb Sep 13, 2026
9b1878b
Claim no vendor revocation for a key, whose value the disconnect leav…
mxmzb Sep 13, 2026
537ddf7
Say which of the three a key's missing check is, and offer the re-che…
mxmzb Sep 13, 2026
53b91f9
Name every app's resolved connection kind in the smoke report, and ta…
mxmzb Sep 13, 2026
6499e29
Say which of the four ways an app connects, and which class the picke…
mxmzb Sep 13, 2026
b746f56
Name the kinds the diagnostic tallies, and say the three states now s…
mxmzb Sep 13, 2026
e9d10c3
Derive which action a key would be checked with on the read, so a ref…
mxmzb Sep 13, 2026
79fc807
Refuse for a missing app URL only on the path that has a return leg, …
mxmzb Sep 13, 2026
14b91f8
Choose a probe the deployment can actually call, so the read cannot n…
mxmzb Sep 13, 2026
edc0af3
Say the account is standing without blaming a withdrawal that a re-ch…
mxmzb Sep 13, 2026
c910547
Record the action a check spent, so a refresh cannot accuse a key nob…
mxmzb Sep 13, 2026
1ae7a13
Quote the sentence a refused key actually gets, and name both paths t…
mxmzb Sep 13, 2026
bbf20c7
Ask the app whether a key can be checked today, so a record of what n…
mxmzb Sep 13, 2026
a832127
Date the clause a null record draws to the check that wrote it, and n…
mxmzb Sep 13, 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
18 changes: 18 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -338,3 +338,21 @@ AGENT_TOOL_TOKEN=
# for a deployment that has not stood up a worker. Set for one that has: openssl rand -base64 32.
# Do not accept a default in production.
WORKER_SHARED_SECRET=

# Composio, the broker that holds people's accounts for a few hundred apps, so a Bot can act in Gmail
# or Slack or Notion without this deployment registering an OAuth client with each of them.
#
# Optional. Without this key there is nothing to connect, nothing to grant, and no Composio tool for
# a Bot to call. What does remain is one row that goes nowhere, under "More apps" on the admin
# Plugins page, saying that adding a Composio key enables a catalogue of tools and naming this
# variable — the feature is named rather than hidden, so an administrator who has heard of Composio
# can find out what it wants. There is no directory to browse, no picker, and no brokered app on
# anybody's connected-accounts page.
#
# This variable is the whole of the setting. There is no screen anywhere in the product that sets it:
# it is read from this environment at startup, and an administrator with every permission there is
# cannot turn Composio on from a page.
#
# One key for the whole deployment, not one per person. Composio keeps people apart by a user id sent
# with every call, so one account's connections are never reachable from another's.
COMPOSIO_API_KEY=
27 changes: 25 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ RUN cd agent-computer && bun install --frozen-lockfile
# A second tree with the build-time dependencies left out, for the runtime stage to take. Vite,
# biome and the test tooling are a gigabyte that nothing in a running container imports.
RUN mkdir -p /prod && cp package.json bun.lock /prod/ \
&& cp -r app/package.json /prod/app-package.json \
&& cd /prod && mkdir -p app server worker \
&& cp /src/app/package.json app/package.json \
&& cp /src/server/package.json server/package.json \
Expand Down Expand Up @@ -100,10 +99,21 @@ RUN case "${TARGETARCH}" in \

WORKDIR /app

# BOTH HALVES OF THE TREE COME FROM /prod. A workspace install is two directories, not one: the
# packages it could hoist go to the root `node_modules`, and a per-workspace `node_modules` sits
# beside each manifest holding the rest. The server's half used to be taken from /src, which is the
# unpruned install, so the prune above bought nothing where the server actually resolves — and
# `@copilotkit/aimock`, a development dependency, shipped as a symlink into a store the prune had
# emptied, along with the two `.bin` shims pointing at it. Every dependency `server/package.json`
# declares resolves from the /prod half; the ones it does not declare are absent now rather than
# present and broken.
COPY --from=deps /prod/node_modules node_modules
COPY --from=deps /prod/server/node_modules server/node_modules
COPY --from=deps /src/package.json package.json
COPY --from=deps /src/bun.lock bun.lock
COPY --from=deps /src/server/node_modules server/node_modules
# The browser's tree is a separate install root with its own lockfile rather than a workspace of the
# one above, so there is no /prod half of it to take and it ships as resolved, `typescript` included.
# Pruning it would mean a second `--production` install in the stage above.
COPY --from=deps /src/agent-computer/node_modules agent-computer/node_modules

COPY server server
Expand All @@ -112,6 +122,19 @@ COPY examples examples
COPY agent-computer/src agent-computer/src
COPY agent-computer/package.json agent-computer/package.json

# `bun run composio:smoke`, because the manifest copied above carries that entry and the question it
# answers belongs here rather than on a laptop: it asks what THIS deployment's Composio key can see,
# and that key is the one in this container's environment. It reads `server/src/plugins/composio*`,
# which is already in the image, so the file itself was the only thing missing and the entry was an
# instruction that could not be followed where it shipped.
#
# ONE FILE, NOT `scripts/`. The others there are the laptop's. `diagram` and `mock:knowledge` reach
# for `roughjs` and `@copilotkit/aimock`, which the prune above removes; `test:ci` runs a suite that
# is not in the image; `generate:app-config` writes a file the build has already baked into
# `app/dist`. Copying the directory ships four more entries with nothing to do here, to fix one that
# has something to do.
COPY scripts/composio-smoke.ts scripts/composio-smoke.ts

# The built app, served by the API on the same origin. There is no CORS in this server, so this is
# not a convenience: two origins would simply fail.
COPY --from=app-build /src/app/dist app/dist
Expand Down
Loading