Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
365 commits
Select commit Hold shift + click to select a range
71a22bc
fix(config): create the plaintext secrets store owner-only whatever t…
Broccolito Sep 28, 2026
3ff0b4a
fix(desktop): let the app reattach, after the person agrees, when the…
Broccolito Sep 28, 2026
71879d6
perf(crew-broker): count presence without allocating on every signed …
Broccolito Sep 28, 2026
1f2bb70
fix(crew-cli): give name-resolution errors a code, word them neutrall…
Broccolito Sep 28, 2026
61c58d2
fix(crew-ui): check the chat's model before Allow, and say what Chat …
Broccolito Sep 28, 2026
0e2f093
fix(crew-ui): answer a send in words, keep its failure with its draft…
Broccolito Sep 28, 2026
a59befe
fix(crew-invite): also read a token wrapped with quoted-printable sof…
Broccolito Sep 28, 2026
30bfad8
fix(crew-cli): refuse enroll pending for a non-host instead of report…
Broccolito Sep 28, 2026
dda2f98
fix(crew-ui): open a team's #general, and the first team by name, whe…
Broccolito Sep 28, 2026
b2d2d00
fix(crew-files): mark a received file as downloaded from the internet
Broccolito Sep 28, 2026
d6f828b
fix(crew-ui): open plain Crew when Crew is chosen in the sidebar on a…
Broccolito Sep 28, 2026
b37f326
fix(crew-ui): say a connection setting's problem under its field, and…
Broccolito Sep 28, 2026
720df06
fix(crew-cli): name files watch rows like files status, and say when …
Broccolito Sep 28, 2026
16d8f03
fix(crew-ui): take the person to a refused connection field once, so …
Broccolito Sep 28, 2026
c819798
fix(crew-cli): list channels by team with #general first and people h…
Broccolito Sep 28, 2026
bd42fea
fix(models-ui): an unsent chat picks its own model, a Crew chat says …
Broccolito Sep 28, 2026
73f6206
fix(crew-cli): name the person and the team in members add, and show …
Broccolito Sep 28, 2026
7aa04cf
fix(crew-ui): show one note for a revoke stopped on this device, and …
Broccolito Sep 28, 2026
75016a6
test(crew-ui): name the second fixture team to sort after the first
Broccolito Sep 28, 2026
e74cbcb
fix(crew-ui): offer a lost channel's unsent draft for copying instead…
Broccolito Sep 28, 2026
164bea7
feat(crew): count unread Crew messages on the app's Crew item and the…
Broccolito Sep 28, 2026
d898281
fix(crew-cli): name each attachment in history, search and watch, and…
Broccolito Sep 28, 2026
3a19155
fix(crew-files): show the daemon's own words for a download it refuse…
Broccolito Sep 28, 2026
5e66c19
fix(models-ui): list signed-in coding agents in the picker, and bring…
Broccolito Sep 28, 2026
8189d26
fix(crew-ui): keep privacy and fingerprint details readable, and desc…
Broccolito Sep 28, 2026
e05cbde
test(crew-files): hold the desktop's privacy-change code to the Crew …
Broccolito Sep 28, 2026
31eddcf
fix(crew-cli): say what a terminal chat was bound to in words, and sh…
Broccolito Sep 28, 2026
247c1f8
fix(crew): show no more than six Crew notifications a minute, whateve…
Broccolito Sep 28, 2026
0256380
fix(crew-cli): give the effective privacy first on status, connection…
Broccolito Sep 28, 2026
73cc7e1
fix(desktop): settle a restart prompt the daemon answered during, rep…
Broccolito Sep 28, 2026
78e5ee1
fix(crew-cli): speak to the host in connections prepare and in the pr…
Broccolito Sep 28, 2026
60a4f64
fix(cli): run a provider's own default model when --provider names an…
Broccolito Sep 28, 2026
035ab96
fix(crew): give the daemon's deliberate refusals and lost requests th…
Broccolito Sep 28, 2026
892344b
fix(crew-ui): word each connection failure by its cause, with one ser…
Broccolito Sep 28, 2026
d245e91
fix(crew-ui): warn about someone else's invitation, replace a connect…
Broccolito Sep 28, 2026
4ad9ddf
fix(crew-ui): add older pages above with the reader's place kept, and…
Broccolito Sep 28, 2026
ec638f0
fix(settings): show the privacy record read-only in Edit configuratio…
Broccolito Sep 28, 2026
f94b403
fix(cli): stop the Llama Server a run started when the CLI exits, and…
Broccolito Sep 28, 2026
86798e2
fix(crew-ui): tell a removed computer and its host the same way back,…
Broccolito Sep 28, 2026
f4624b6
fix(crew-cli): lead a connection's typed last error with what to do
Broccolito Sep 28, 2026
1235d6e
fix(crew-ui): close three gaps a review of the message-body fixes found
Broccolito Sep 28, 2026
2a7f0c2
feat(crew-ui): show who is online in the Members tab, People and the …
Broccolito Sep 28, 2026
a0c1a6e
fix(crew-ui): show a refusal that answered while Crew was closed when…
Broccolito Sep 28, 2026
63ea29e
test(crew-ui): keep the task pane's quiet older-view case under the m…
Broccolito Sep 28, 2026
f690028
fix(crew-ui): keep only the live tail's last page in the view remembe…
Broccolito Sep 28, 2026
e357940
fix(crew): send one run.revoke per Stop, and ask the workspace only w…
Broccolito Sep 28, 2026
4ea7df0
fix(apps): serve an app's page and socket only to a browser holding i…
Broccolito Sep 28, 2026
85f3541
fix(agent-drafter): open an exported app through its one-time launch …
Broccolito Sep 28, 2026
bb5b609
fix(desktop): open a managed app preview and Applications through the…
Broccolito Sep 28, 2026
87b73a1
feat(crew-ui): warn the host before the workspace runs out of space
Broccolito Sep 28, 2026
d4a6241
test(crew-ui): type the storage test's actor so a member fixture type…
Broccolito Sep 28, 2026
4da148d
fix(crew): reconnect a connected connection after its own privacy or …
Broccolito Sep 28, 2026
31f2094
fix(crew-cli): keep the broker's storage sentences and the daemon's t…
Broccolito Sep 28, 2026
00ec97b
feat(crew-ui): say when a very large workspace lists fewer teams or c…
Broccolito Sep 28, 2026
4204dfa
test(desktop): spell the bidi override in the Crew tool-row test as a…
Broccolito Sep 28, 2026
747c315
fix(crew-files): propose Save names by the renderer's one rule and mo…
Broccolito Sep 28, 2026
b1e4a11
fix(crew-attention): say "mentioned you" only for what the timeline m…
Broccolito Sep 28, 2026
9f9196f
fix(cli): open an app with its one-time launch link in apps open and …
Broccolito Sep 28, 2026
941ee3f
docs(apps): say how an app is opened now that its page needs an acces…
Broccolito Sep 28, 2026
ccba162
fix(crew-attention): remove lone surrogates before the hidden charact…
Broccolito Sep 28, 2026
42d394c
fix(crew-attention): trim the viewer's name in the mention precheck, …
Broccolito Sep 28, 2026
1dab8ae
fix(agent-drafter): keep the daemon secret out of the Windows launche…
Broccolito Sep 28, 2026
dda4f8c
refactor(crew-cli): give channels list and privacy set-personal funct…
Broccolito Sep 28, 2026
8fae297
fix(crew): end a connected chat's own posts with the daemon's Source …
Broccolito Sep 28, 2026
bcfefec
fix(crew-files): drop lone surrogates from a proposed save name befor…
Broccolito Sep 28, 2026
c1e29f5
fix(bedrock): keep a gateway's error message the SDK hides, and name …
Broccolito Sep 28, 2026
e0e470d
fix(azure): say so when a saved Azure OpenAI endpoint is the UCSF gat…
Broccolito Sep 28, 2026
6939965
fix(providers-ui): provider-appropriate setup copy, human field names…
Broccolito Sep 28, 2026
9bfab63
fix(privacy-ui): lead Settings > App > Privacy with a statement about…
Broccolito Sep 28, 2026
8465f38
fix(providers): check a provider key before it replaces the saved one
Broccolito Sep 28, 2026
e6f467e
fix(crew-files): strip leading spaces and dots as one run so a save n…
Broccolito Sep 28, 2026
78ec9d7
fix(crew-ui): judge a connection's identity file by this computer's O…
Broccolito Sep 28, 2026
7d0b4b2
fix(crew): join from the workspace's own server over localhost, and w…
Broccolito Sep 28, 2026
1985db1
fix(crew-ui): name a failed host key's hop only when it is not the sa…
Broccolito Sep 28, 2026
d3b781e
fix(crew): never look up a pasted invitation's host name, and warn ab…
Broccolito Sep 28, 2026
81af85c
fix(providers): close the saved-key path in candidate checks and make…
Broccolito Sep 28, 2026
68a6e17
fix(crew-ui): reveal a message's hidden characters in one pass, taken…
Broccolito Sep 28, 2026
ca7d4bb
fix(crew-ui): show raw HTML's hidden characters and a link's real hos…
Broccolito Sep 28, 2026
71cccd8
fix(crew-ui): keep Load older working after the message window resets
Broccolito Sep 28, 2026
2bf8f9e
fix(crew-ui): stop Jump to first unread when an older page adds nothing
Broccolito Sep 28, 2026
909eb31
fix(crew-ui): give each post in doubt its own time bound
Broccolito Sep 28, 2026
5acafda
fix(crew-ui): keep the note about several dropped files until the per…
Broccolito Sep 28, 2026
9d04d38
fix(crew-cli): describe a prepared key for both hosting and joining, …
Broccolito Sep 28, 2026
846f8ae
fix(crew-cli): reword only the model's institution refusal, and keep …
Broccolito Sep 28, 2026
1249ece
refactor(crew): keep plan_invitation, begin_run_with_policy and build…
Broccolito Sep 28, 2026
6a422ed
fix(apps): answer a launch link with a page that sets the access cookie
Broccolito Sep 28, 2026
9a1676f
fix(cli): hand apps open's browser a private page, never the one-time…
Broccolito Sep 28, 2026
10eb7bd
fix(agent-drafter): exported launchers open a private page, not the l…
Broccolito Sep 28, 2026
a2aae5e
fix(desktop): open a built app in the browser from the main process t…
Broccolito Sep 28, 2026
8384f2d
fix(desktop): keep a managed app's access cookie when clearing its si…
Broccolito Sep 28, 2026
8dd3edc
fix(apps): show the one-time link in the terminal as well, and check …
Broccolito Sep 28, 2026
2896bc5
fix(desktop): launch an app from a biorouter serve tab through its ow…
Broccolito Sep 28, 2026
48aa2b4
fix(crew-cli): keep the daemon's sentence for a request it never sent
Broccolito Sep 28, 2026
8e5d0b8
docs(agent-drafter): say in the exported README how the launcher hand…
Broccolito Sep 28, 2026
f5ce8fa
fix(cli): tighten a loosened launch-page folder instead of refusing e…
Broccolito Sep 28, 2026
d26bb88
fix(desktop): one launch-link mint, the reason a launch failed, and n…
Broccolito Sep 28, 2026
b942f48
fix(crew-ui): judge a hidden character by the words drawn beside it, …
Broccolito Sep 28, 2026
dc6e07b
fix(crew-ui): name a link's real host after any scheme, look-alike do…
Broccolito Sep 28, 2026
cd51f7e
fix(providers): send a candidate key exactly as typed, and check an u…
Broccolito Sep 28, 2026
bfa7c18
fix(crew-ui): read a link's words part by part until one names a host
Broccolito Sep 28, 2026
a68c65b
fix(crew): dial again after a workspace server that was not running
Broccolito Sep 28, 2026
1d679df
fix(crew): space the daemon's own re-dials so a flapping bridge never…
Broccolito Sep 28, 2026
fed8694
fix(cli): record an apps serve daemon's key so another link can be mi…
Broccolito Sep 28, 2026
4178f09
fix(serve): keep the browser token off a command line when --open ope…
Broccolito Sep 28, 2026
1827ff3
docs(serve,apps): say how apps and serve --open hand a link to a brow…
Broccolito Sep 28, 2026
aa7f139
fix(crew): name every read since a chat's last post, a file read agai…
Broccolito Sep 28, 2026
a7e7eed
fix(git): restore the serve and apps changes my previous commit undid
Broccolito Sep 28, 2026
7f44f47
fix(crew): say "no keyring service" only where one can be missing, an…
Broccolito Sep 28, 2026
95639ec
fix(cli): open a launch page in the default browser, not the .html ha…
Broccolito Sep 28, 2026
8e0b933
docs(cli): say which daemons apps commands refuse, and what a spent l…
Broccolito Sep 28, 2026
c132cd0
fix(providers): take a person's proof to move where a saved key goes,…
Broccolito Sep 28, 2026
882792c
fix(crew): name every file a chat read since its last post, past the …
Broccolito Sep 28, 2026
acde3fe
fix(providers): classify the AWS endpoint keys Bedrock and SageMaker …
Broccolito Sep 28, 2026
10183bf
fix(server): word the destination refusals for whoever reads them, an…
Broccolito Sep 28, 2026
1b1f94e
fix(settings): show a browser which provider settings belong to the h…
Broccolito Sep 28, 2026
252ca41
fix(crew): end remote.attach's post with the daemon's line and keep a…
Broccolito Sep 28, 2026
b49d3bb
test(cli): check an apps serve daemon's record while its temp root st…
Broccolito Sep 28, 2026
f3eb2df
docs(crew): bring the manual in line with the wave-2 fixes
Broccolito Sep 28, 2026
ad9daa6
test(docs): hold the Crew manual to the wave-2 sentences and behaviour
Broccolito Sep 28, 2026
fece19e
docs: match the landing and product pages to the provider screens and…
Broccolito Sep 28, 2026
feb9ce6
docs(serve): say a browser cannot move where a provider sends its key
Broccolito Sep 28, 2026
51ceef1
docs(crew): name the settings dialog by its title, and hold the manua…
Broccolito Sep 28, 2026
7152954
docs(crew): quote the refusal a channel ID gets, which is not a name's
Broccolito Sep 28, 2026
9010ba4
docs(readme): name the Institutional tab the Versa providers sit on
Broccolito Sep 28, 2026
4615692
fix(crew): type every /crew answer and refusal in the OpenAPI spec
Broccolito Sep 28, 2026
14a1b0c
fix(crew-ui): read the daemon's Crew answers through the generated cl…
Broccolito Sep 28, 2026
79c9276
docs(session): say how Crew now retires a deleted chat's grant
Broccolito Sep 28, 2026
1246698
chore(brand): hold the native dialog strings to the Biorouter spelling
Broccolito Sep 28, 2026
8ae583d
fix(sessions): refuse to share a Crew chat, as Export does
Broccolito Sep 28, 2026
aa4f835
docs(api): document the crew_model_fixed refusal of a Crew chat's mod…
Broccolito Sep 28, 2026
c55fc29
fix(crew-ui): read transfers and host start runs as the daemon declar…
Broccolito Sep 28, 2026
8052cf9
fix(crew-ui): check Crew request bodies and answers against the gener…
Broccolito Sep 28, 2026
821dd4d
docs(crew): record the wave-2 decisions in the Crew design documents
Broccolito Sep 28, 2026
fcc3388
docs(crew): file Crew's design beside the manual and its campaign rec…
Broccolito Sep 28, 2026
ba7eb98
docs(crew): write the time ranges in two restatused history lines as …
Broccolito Sep 28, 2026
42e5391
Merge remote-tracking branch 'origin/main' into claude/crew-qa-fixes-…
Broccolito Sep 28, 2026
dbef305
docs(crew): quote the members add line, the share privacy note and th…
Broccolito Sep 28, 2026
84e53ca
docs(crew): list the task records, transfer receipts and task folder …
Broccolito Sep 28, 2026
29f9a3c
fix(crew): refuse a request on a disconnected connection as crew_not_…
Broccolito Sep 28, 2026
19d0a1d
fix(crew-ui): keep the history window's start honest and extend it be…
Broccolito Sep 28, 2026
d2a1d9c
fix(privacy): disclose a model held for an unsent chat before its cha…
Broccolito Sep 28, 2026
473dd28
fix(desktop): show the background-service reattach prompts as sheets …
Broccolito Sep 28, 2026
bf0d54b
docs(crew): say that work-folder commands have no network and no othe…
Broccolito Sep 28, 2026
021b3c6
fix(history): dismiss the export refusal toast when the person leaves…
Broccolito Sep 28, 2026
ad30690
fix(crew): type the unreadable-registry refusal and keep the reader's…
Broccolito Sep 28, 2026
5758177
fix(crew-ui): keep a failed post's words and an over-limit draft thro…
Broccolito Sep 28, 2026
2a7e701
fix(settings): return focus to the opener when Switch models or Confi…
Broccolito Sep 28, 2026
f49c233
fix(crew-ui): announce a channel add made while the person was away f…
Broccolito Sep 28, 2026
bc5027b
fix(settings): keep a cleared Max turns field empty with its message,…
Broccolito Sep 28, 2026
42c4ef2
fix(crew-ui): read the saved workspaces as the workspace menu opens, …
Broccolito Sep 28, 2026
c20e4b0
fix(config): refuse a provider name the daemon cannot build in /confi…
Broccolito Sep 28, 2026
0c449bd
fix(crew-cli): print a typed daemon refusal's own sentence and keep i…
Broccolito Sep 28, 2026
8580bec
fix(crew): refuse an ended grant as crew_grant_ended with its reason
Broccolito Sep 28, 2026
01dc479
fix(crew-cli): name an archived channel bare in sentences
Broccolito Sep 28, 2026
20e8df5
fix(crew-ui): name the channel of a failed task start, clear it on re…
Broccolito Sep 28, 2026
336e45b
fix(crew-ui): give the host the host's words for a full workspace, an…
Broccolito Sep 28, 2026
dda044f
fix(crew-ui): read the daemon's Source line in an agent's post as men…
Broccolito Sep 28, 2026
e8d077c
fix(crew-cli): say where a connection stands: same host, not joined, …
Broccolito Sep 28, 2026
fbc1337
fix(crew-ui): draw the New line from the fresh view when Crew opens o…
Broccolito Sep 28, 2026
56b3a33
fix(crew): say on the connection when its server has stopped saving c…
Broccolito Sep 28, 2026
8ec8685
fix(crew-ui): list Waiting to join by name and keep it to a few rows
Broccolito Sep 28, 2026
4f80aed
fix(crew-cli): privacy show offline and with effective_mode; say how …
Broccolito Sep 28, 2026
d03f113
fix(crew-ui): sort Already in {team} by the names its rows show
Broccolito Sep 28, 2026
2089a52
fix(crew-cli): refuse an over-long message before sending it; word a …
Broccolito Sep 28, 2026
b45f9d1
fix(crew): pause a transfer the workspace server could not save inste…
Broccolito Sep 28, 2026
b04eb3b
fix(crew-ui): confirm a member's new computer once it is in, title it…
Broccolito Sep 28, 2026
f286da4
fix(crew-cli): say a paused transfer, a forget and an unknown transfe…
Broccolito Sep 28, 2026
00e57f6
fix(crew-ui): stop blaming wrapping for a damaged invitation, and tit…
Broccolito Sep 28, 2026
bbfff28
fix(crew-ui): keep Workspace settings open through the refresh its ow…
Broccolito Sep 28, 2026
5322679
fix(crew-cli): per-list empty sentences, the terminal's already-membe…
Broccolito Sep 28, 2026
ad8c10a
fix(crew-ui): say the background service is gone in Crew's bar, with …
Broccolito Sep 28, 2026
073c1d2
fix(crew-cli): a task stopped with Stop reads Stopped in grants list
Broccolito Sep 28, 2026
8b3227c
fix(crew-ui): say in the connection bar when the workspace server has…
Broccolito Sep 28, 2026
28b9c04
fix(crew-cli): name institutions in a model refusal as the desktop does
Broccolito Sep 28, 2026
06bcea8
fix(crew-ui): offer Resume for a transfer the server could not save, …
Broccolito Sep 28, 2026
765ecbd
fix(crew): refuse a shared file name that hides characters, before an…
Broccolito Sep 28, 2026
7d8844e
docs(crew): answer each join conflict with its own way out, and stop …
Broccolito Sep 28, 2026
c8a8aae
fix(cli): say a terminal chat's privacy pin in words and hold 'is rea…
Broccolito Sep 28, 2026
51b5d03
fix(crew-ui): tell members Crew connects by itself once the server ru…
Broccolito Sep 28, 2026
f151945
docs(crew): document the command line's own codes, same-host sign-in …
Broccolito Sep 28, 2026
f6a4efe
fix(crew-cli): carry any daemon refusal's diagnostic detail in JSON
Broccolito Sep 28, 2026
917e76a
fix(crew-ui): list the remote work folder in Chat access consent, and…
Broccolito Sep 28, 2026
90ccb2b
docs(crew): describe a server that stopped saving, the restarted back…
Broccolito Sep 28, 2026
170970f
fix(crew-cli): word unlock for a computer with no keyring, and a paus…
Broccolito Sep 28, 2026
fe1c876
fix(providers): refuse a key the provider rejects for Versa and decla…
Broccolito Sep 28, 2026
695ba89
fix(agent): rebuild a chat's provider after its key is refused, and k…
Broccolito Sep 28, 2026
50a1468
fix(crew): say an operation's outcome may be unknown only when a chan…
Broccolito Sep 28, 2026
86c6023
docs(crew): say that a chat's Crew access includes the remote work fo…
Broccolito Sep 28, 2026
f53ce55
fix(crew-broker): report not_running for a broker that stopped, not t…
Broccolito Sep 28, 2026
04bf0e1
docs(crew): describe a member's new computer, the shortened Waiting t…
Broccolito Sep 28, 2026
92a0b3c
fix(crew-ui): show blank-looking characters in file names, keep the e…
Broccolito Sep 28, 2026
f406d6b
fix(crew-ui): let a card's 'Finish the open ... first.' go once that …
Broccolito Sep 28, 2026
287324c
fix(crew-ui): label a task's grant Stopped when the person stopped it…
Broccolito Sep 28, 2026
55f5702
fix(crew): judge an expected privacy mode against the privacy in force
Broccolito Sep 28, 2026
21655be
fix(crew-ui): make Members of {team} a list a keyboard can scroll, wi…
Broccolito Sep 28, 2026
4474b1f
docs(crew): name a stopped task's access Stopped, and describe file n…
Broccolito Sep 28, 2026
5e80709
fix(cli): configure writes nothing until the provider accepts it, and…
Broccolito Sep 28, 2026
5425d2e
fix(crew-ui): move focus to what replaced Allow or Revoke, and to a n…
Broccolito Sep 28, 2026
7609429
fix(crew): refuse saving a connection under an institution its worksp…
Broccolito Sep 28, 2026
8dead2e
fix(crew-ui): say /crew works after the first message in a chat that …
Broccolito Sep 28, 2026
98c19fe
fix(crew-ui): name the owner in full when a member may not add people…
Broccolito Sep 29, 2026
34cf5c2
docs(crew): say a connection under another institution than its works…
Broccolito Sep 29, 2026
ab37659
fix(config): re-read custom providers before calling a provider name …
Broccolito Sep 29, 2026
63c7e2e
fix(settings): do not let a no-op Max turns save hide a later change
Broccolito Sep 29, 2026
dd698c2
fix(crew-ui): name the agent one way in Chat access and the timeline,…
Broccolito Sep 29, 2026
91ac108
fix(sessions): answer "Make this chat public" on a Crew chat as a 409…
Broccolito Sep 29, 2026
5b91fd6
chore(api): regenerate the client for the declassify 409
Broccolito Sep 29, 2026
136c198
docs(crew): name the Chat access pane's one-word Allow button, and ho…
Broccolito Sep 29, 2026
74a52df
docs(crew): quote the refusal to make a Crew chat public
Broccolito Sep 29, 2026
8a0da8f
fix(crew-cli): say a full workspace to its host in the desktop's word…
Broccolito Sep 29, 2026
6dea574
fix(crew): re-probe a stopped workspace server steadily and say how l…
Broccolito Sep 29, 2026
c5f767f
fix(crew): tell the model what a confined work-folder command cannot do
Broccolito Sep 29, 2026
bb59356
fix(crew-ui): build each accessible name from one spoken run, and nam…
Broccolito Sep 29, 2026
120a772
fix(cli): build DaemonRefusal::for_test on every platform, so the cre…
Broccolito Sep 29, 2026
9445f06
docs(crew): say how soon Crew reconnects by itself, and quote the mem…
Broccolito Sep 29, 2026
e44e034
fix(crew-ui): keep the newest message in sight when the log narrows, …
Broccolito Sep 29, 2026
ce3225c
fix(crew): name the work-folder files a post's numbers came from in i…
Broccolito Sep 29, 2026
1cf4596
fix(crew-ui): keep an upload whose chip came back after a relaunch bo…
Broccolito Sep 29, 2026
b923fa1
docs(crew): show the source line that names a work-folder file, and h…
Broccolito Sep 29, 2026
38c0f42
fix(crew-files): refuse a path through a symlinked folder in words, n…
Broccolito Sep 29, 2026
477bbbd
test(docs): reword the source-line mutant so it keeps the phrase the …
Broccolito Sep 29, 2026
e4eaea0
docs(crew): explain the refusal of a download path through a link, /t…
Broccolito Sep 29, 2026
1b37219
docs(crew): record --replace, the terminal auth refusal and the stopp…
Broccolito Sep 29, 2026
dcffcbb
docs(crew): say a transfer the workspace server could not save pauses…
Broccolito Sep 29, 2026
c7a75c4
fix(crew): never draw text typed into the Sign in window while no pro…
Broccolito Sep 29, 2026
9ed7b86
fix(crew-cli): keep workspace_institution in JSON failures, and check…
Broccolito Sep 29, 2026
82f94d5
fix(crew-cli): say a join-invitation conflict saved nothing and name …
Broccolito Sep 29, 2026
7a555a8
docs(crew): quote the join-invitation refusal for a workspace saved w…
Broccolito Sep 29, 2026
42be17e
test(crew): wait for the recorded gap before asking how long a reconn…
Broccolito Sep 29, 2026
b8d8dc9
fix(config): refuse a provider name with spaces around it instead of …
Broccolito Sep 29, 2026
d643a98
fix(providers): re-read custom providers under one registry write lock
Broccolito Sep 29, 2026
062b7e9
docs(crew): write the design documents without em or en dashes, and r…
Broccolito Sep 29, 2026
7a5519c
docs(crew): say a dragged file with hidden characters in its name may…
Broccolito Sep 29, 2026
8f12b29
fix(crew-ui): say Checking… in Workspace settings while its privacy c…
Broccolito Sep 29, 2026
42e9526
fix(crew): hold a Private expectation where the workspace's last hell…
Broccolito Sep 29, 2026
02b1957
style(crew): satisfy clippy in the broker and the refusal detail
Broccolito Sep 29, 2026
8aeeb4d
test(docs): hold the files page's drag note for a hidden-character na…
Broccolito Sep 29, 2026
e4c017b
style(crew): find the last post with rfind in the stale-hello test
Broccolito Sep 29, 2026
13d43df
test(docs): read the drop flow's sentence for a code from a block arm…
Broccolito Sep 29, 2026
bd0a9ce
fix(crew): show a long work-folder path by its end in the source line
Broccolito Sep 29, 2026
3d85b69
fix(crew-ui): leave an observation end to this window's own save of t…
Broccolito Sep 29, 2026
9a310e9
fix(crew): end a redial schedule once its time is used up, whichever …
Broccolito Sep 29, 2026
2264810
fix(crew): judge a file selection's expected mode by the privacy in f…
Broccolito Sep 29, 2026
341df2d
refactor(config): move upsert_config's provider-name check into a hel…
Broccolito Sep 29, 2026
d946245
docs(crew): record the merge QA campaign, its three fix waves and the…
Broccolito Sep 29, 2026
1ced37e
docs: match the manual and guides to the final round's behaviour
Broccolito Sep 29, 2026
92094da
fix(apps): list the launch token's hex digits so macOS's bash 3.2 ref…
Broccolito Sep 29, 2026
5443d71
test: pass on a Linux runner with no keyring, and write fake CLIs fro…
Broccolito Sep 29, 2026
7670de3
docs(crew): record the hosted CI fixes that followed the final live r…
Broccolito Sep 29, 2026
6b37a4f
test(crew-ui): wait for the published composer hold before reading it…
Broccolito Sep 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
16 changes: 13 additions & 3 deletions .github/workflows/frontend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -196,15 +196,25 @@ jobs:
# already encodes it — but nothing ran the linter, so two PRs merged in one
# afternoon each added a file loose at `docs/` root.
#
# ⚠ This is DELIBERATELY three rules, not the whole linter. The tree carries a
# ⚠ This is DELIBERATELY four rules, not the whole linter. The tree carries a
# real backlog (156 findings across ten rules, measured 2026-09-22), and a gate
# that fails on arrival gets disabled rather than obeyed. These three are clean
# that fails on arrival gets disabled rather than obeyed. These four are clean
# on main today and can be held that way; the step prints how many findings it
# is NOT reporting, so a filtered pass never reads as "the docs are clean".
# Widen the list as a rule's backlog reaches zero — never past it.
# tree/research-cites-repo joined on 2026-09-28, when Crew's own design and records left
# docs/research/ (which holds studies of systems outside this repo) at zero findings.
- name: Documents live where the rule says (placement only)
if: ${{ !cancelled() }}
run: python3 scripts/docs-lint.py --only tree/loose-at-root,tree/no-index,status/folder-disagreement
run: python3 scripts/docs-lint.py --only tree/loose-at-root,tree/no-index,status/folder-disagreement,tree/research-cites-repo

# The Crew manual and its landing page quote dialog titles, name what a
# `biorouter serve` browser can do and say who may add people. Each rule
# reads the code it describes, and the suite first shows every rule
# failing on the wording a 2026-09-27 audit found, then runs it on the tree.
- name: The Crew manual agrees with the code it describes
if: ${{ !cancelled() }}
run: node --test scripts/check-crew-manual.test.mjs

# The published registry, the desktop fallback snapshot and the
# compiled-in private set are one catalog in three forms. Being written by
Expand Down
14 changes: 11 additions & 3 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -608,12 +608,20 @@ jobs:

# The token is exchanged for a cookie and leaves the address bar. It is
# not consumed (SD-9 in docs/deployment/serve-decisions.md): the
# readiness loop above has already redeemed it.
curl -s -o /dev/null -D "$RUNNER_TEMP/h" "http://127.0.0.1:18777/?t=citoken"
grep -qi '^HTTP/1.1 303' "$RUNNER_TEMP/h" || fail 'no redirect after the token exchange'
# readiness loop above has already redeemed it. The answer is a page of
# the daemon's own origin that moves on to /, not a 303: a redirect
# drops a SameSite=Strict cookie on a navigation that `serve --open`'s
# file: page started (routes::web_ui::exchange_bounce).
curl -s -o "$RUNNER_TEMP/bounce.html" -D "$RUNNER_TEMP/h" "http://127.0.0.1:18777/?t=citoken"
grep -qi '^HTTP/1.1 200' "$RUNNER_TEMP/h" || fail 'the token exchange did not answer its page'
grep -qi 'set-cookie: biorouter_session=' "$RUNNER_TEMP/h" || fail 'no session cookie'
grep -qi 'HttpOnly' "$RUNNER_TEMP/h" || fail 'the session cookie is readable from script'
grep -qi 'SameSite=Strict' "$RUNNER_TEMP/h" || fail 'the session cookie is sent cross-site'
grep -qi 'cache-control: no-store' "$RUNNER_TEMP/h" || fail 'the exchange page is cacheable'
grep -qi 'referrer-policy: no-referrer' "$RUNNER_TEMP/h" || fail 'the exchange page leaks its address'
grep -q 'http-equiv="refresh" content="0;url=/"' "$RUNNER_TEMP/bounce.html" \
|| fail 'the exchange page does not move on to the interface'
! grep -q citoken "$RUNNER_TEMP/bounce.html" || fail 'the exchange page carries the token'

# With the cookie, the shell and its runtime configuration.
curl -fsS -b 'biorouter_session=citoken' http://127.0.0.1:18777/ > "$RUNNER_TEMP/shell.html"
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,16 @@ Work with papers, genes, diseases, drugs, cohorts, and experimental data in the
| **Analyze and visualize** | Write and run R or Python, fit machine-learning models, and create figures and interactive dashboards. |
| **Work with desktop software** | Biorouter Copilot can inspect and operate applications on the backend computer, with your approval for each request. |
| **Build and reuse tools** | Create small research apps with Agent Drafter, run parallel chats, and save or schedule recurring tasks as workflows. |
| **Work with your lab** | In Crew, chat in channels, share files and give AI agents tasks the whole channel can see, in a workspace one lab member hosts on a shared Linux server. |

Copilot keeps observations and approvals separate for each chat. The applications themselves share a desktop, so choose the model before opening sensitive records or research data. See [Copilot setup and limits](docs/extensions/built-in/computer-controller.md).

Crew runs in the desktop app and in the `biorouter crew` commands, not in a `biorouter serve` browser. Each member connects with their own server account over SSH. Crew's Private and Public settings decide which AI models may read the workspace, and the stricter of your connection's and the workspace's setting applies. See the [Crew user manual](docs/crew/README.md).

## Get started

1. **[Download Biorouter](https://biorouter.ucsf.edu/download)** for macOS, Windows, or Linux.
2. **Choose a model.** UCSF users can select **Versa API Azure** or **Versa API Bedrock** under Institutional Models. For local inference, choose **Llama Server** and download a model. You can also connect a commercial provider.
2. **Choose a model.** UCSF users can select **Versa API Azure** or **Versa API Bedrock** on the **Institutional** tab. For local inference, choose **Llama Server** and download a model. You can also connect a commercial provider.
3. **Start a chat.** Add a paper or dataset, or install an agent from BAAM.

For example, attach a few papers and ask:
Expand All @@ -96,6 +99,7 @@ Biorouter uses a shared Rust agent core, an Electron and React desktop app, and
- [Documentation](docs/README.md): guides and references by topic.
- [Architecture](docs/architecture/system-overview.md): how the components fit together.
- [Knowledge bases and BioOKF](docs/knowledge-base/README.md), [workflows](docs/workflows/README.md), and [Apps SDK](docs/apps-sdk/sdk-reference.md).
- [Crew user manual](docs/crew/README.md): joining or hosting a lab workspace, channels, files, agent tasks and server setup.
- [Contributing](CONTRIBUTING.md): build from source, test, and submit changes.
- [Report an issue](https://github.com/BaranziniLab/biorouter/issues). Report security concerns privately using [SECURITY.md](SECURITY.md).

Expand Down
Loading
Loading