Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…vers Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ws on /api/mcp Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t a selection excludes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d scopes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # backend/ee-repo-ref.txt # frontend/src/lib/components/copilot/chat/global/core.ts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # backend/ee-repo-ref.txt # frontend/src/lib/components/copilot/chat/global/core.ts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s on demand Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deploying windmill with
|
| Latest commit: |
4df7824
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://805e36c1.windmill.pages.dev |
| Branch Preview URL: | https://ai-session-backend-mcp-tools.windmill.pages.dev |
… none Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
/review |
Pi ReviewGood to merge This is a large but well-executed refactor: the AI session's GLOBAL toolset now runs on the backend (the Rust handlers previously served only over MCP), with the chat calling Considered and dismissed
Test coverage
Manual verification The one outstanding item is the full global eval suite run against the base branch, which the PR's own test plan marks as "results to follow" — that comparison is the last confirmation that the parity of the moved tool logic holds end-to-end. Beyond that, the author's test plan already covers the paths that matter: browser drive-through of write / test-run / cancel / deploy / delete, MCP with a real |
Codex Reviewcc @hugocasa Should address issues before merging: linked-agent tests ignore browser drafts
Test coverageRust unit tests and frontend core tests cover argument handling, forms, effects, and run formatting. Add an integration regression where the linked agent’s browser cell differs from its stored draft, including failed-save/conflict cases. Manually edit a linked agent, then invoke I inspected the target diff and call paths and ran |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
/review |
|
Claude finished @hugocasa's task in 1m 30s —— View job cc @hugocasa Mergeable, but should ideally address nits: the new linked-agent draft settling in
Since the last reviews
Findings
Checked and fine
AGENTS.md complianceNo violations found. The Test coverageBackend: the Rust unit coverage of Frontend: CI and eval workflows: config only, so no automated tests are expected. Manual verificationEdit a linked agent's prompt in the agent editor, then from global chat call I did not run the backend or frontend test suites in this checkout. |
| // parked in the browser, or one that failed to save, would leave it running the | ||
| // older configuration. | ||
| for (const path of linkedAgentPaths({ modules: [module] } as FlowValue)) { | ||
| await fetchAgentWithDraft(path, workspace) |
There was a problem hiding this comment.
P2: fetchAgentWithDraft lets the getResource 401/403/404 propagate. Before this call, a step linked to a deleted agent or one in an unreadable folder still reached the server, and with_agent_drafts (runs.rs:1361-1363) deliberately treats that as "run against what is deployed". Now the browser throws a raw ApiError before startPreparedRun is ever called. loadLinkedAgentDrafts already does flush, refuse on failure or conflict, and tolerate expected link failures, so using it here would keep the two sides consistent:
await loadLinkedAgentDrafts(linkedAgentPaths({ modules: [module] } as FlowValue), workspace)| // the same rows and the same values as the flow editor's own step test. A setting the step | ||
| // leaves alone is not offered at all, so a mounted widget cannot invent a value for it: an | ||
| // `enabled_tools` the form synthesized empty would advertise none of the agent's tools. | ||
| it('test_run_step refuses a linked agent whose unsaved edit is in conflict', async () => { |
There was a problem hiding this comment.
P2: the new test went in between the comment block above (about an agent step opening on the editor's own rows and enabled_tools) and the test that comment describes (test_run_step opens an aiagent step on the step's own configuration). The comment now sits on the wrong test. Move this it above the comment.
Codex ReviewGood to merge No new issues found. The latest commit resolves the earlier linked-agent draft finding by checking pending saves, failures, and conflicts before starting the step test. Test coverageThe backend retains 48 unit tests. Frontend regressions cover draft-effect conflicts, flow validation, run forms, and the linked-agent conflict guard. The new HTTP/browser round trip has no committed integration regression. CI and documentation changes need no separate unit tests. I inspected the target diff and call paths and ran Manually edit a linked agent, then invoke |
Pi ReviewGood to merge This is a large, careful refactor: the AI session's GLOBAL toolset now runs through Considered and dismissed
Test coverage
Manual verification — the PR's test plan already exercises the in-app paths (write/test/cancel/live-editor update/deploy/delete/flow write, MCP via a real client, route-guard refusals, a 35 s migration). The one thing left open is the full global eval suite against the base branch (listed as pending in the PR), which I'd want green before relying on the eval changes. |
…chats no session Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s the server does Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
/review |
|
Claude finished @hugocasa's task in 38s —— View job Good to merge
Since the last reviewBoth P2 nits from my previous round are fixed:
New changes, checked and fine
AGENTS.md complianceNo violations. The new comments explain constraints and say nothing about how the code was drafted. Test coverageBackend: the scoring rule has a unit test. Frontend: the linked-agent conflict test still pins the guard. A failed-save case next to it would be cheap to add but isn't needed. Eval harness and CI: config and test-infra changes only, so no automated tests are expected. Manual verificationLink a flow step to an agent, then delete the agent (or move it to a folder the user cannot read). From global chat, call |
Pi ReviewGood to merge I read the route and its auth guard ( Considered and dismissed
The prior-round findings are all resolved in the latest commits: the Codex P1 (linked-agent browser drafts) is fixed by Test coverage
Manual verification: The full global eval suite and the MCP client run are listed in the PR's own test plan and were reported as passing. The one remaining in-app scenario worth a human check before merge is the linked-agent draft settlement: edit a linked agent's prompt in the agent editor, then from global chat call |
Codex ReviewGood to merge No new issues found in the three commits since the previous Codex review. I checked the linked-agent follow-up, eval identity/session changes, and matching npm score filters in Rust and script chat. The earlier linked-agent draft finding remains resolved. Test coverageThe npm filtering change adds a Rust regression test. I ran I did not run the committed backend/frontend suites, browser checks, or real-backend evals; this checkout lacks installed dependencies, a backend build, and a running instance. The PR reports successful browser/MCP checks and the full global eval comparison. Manual coverage should confirm that descriptive npm queries return useful results in global and script chat. It should also exercise deleted/unreadable linked agents while retaining failed-save/conflict refusal, plus non-admin and standalone-pipeline eval cases against the real backend. Those paths were not independently exercised in this review. |
This commit updates the EE repository reference after PR #877 was merged in windmill-ee-private. Previous ee-repo-ref: 9e960246d51401a2b0487dcffcadd0b43cd67d39 New ee-repo-ref: b3fd7d49f2ba58f5080fabc3a5686c34a0b2684c Automated by sync-ee-ref workflow.
|
🤖 Updated |
… tools Read the app builder right from the role's capabilities, pass role capabilities in the global evals, and regenerate the MCP tool definitions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
/review |
|
Claude finished @hugocasa's task in 1m 18s —— View job Good to merge
Since the last reviewThe merge commit is the only change that touches this PR's own surface. It does three things. 1.
2. The chat side ( 3. Evals ( The regenerated FindingsNone. AGENTS.md complianceNo violations. The new comments state the constraint ("a composing role… writes the server refuses") and say nothing about earlier drafts of the code. Test coverageBackend: Frontend: Evals/CI: test-infra only. Manual verificationIn a workspace where a member's role has I did not run the backend or frontend suites in this checkout. |
Codex ReviewGood to merge No new issues found since the previous Codex review at Test coverageBackend unit tests and frontend regressions cover tool logic, draft conflicts, flow validation, run forms, and linked-agent guards. The HTTP/browser round trip and latest role adaptations have no committed integration regression. No Svelte component tests or separate automated tests for CI/documentation changes are expected. I ran In an AI Session, use a member whose role grants app composition. Create an app, add a deployed runnable by path, and preview it. Confirm the draft starts without inline runnables, preserves sandbox isolation, and saves successfully. Also check independently granted script, flow, and app rights expose the corresponding tools. Run the global eval smoke suite against the merged backend, including non-admin profiles and standalone pipeline cases. Confirm attempts use their fixture identity, complete successfully, and clean up their workspaces and tokens. |
Pi ReviewGood to merge The delta since the prior reviews is the workspace-roles port in the merge commit Considered and dismissed
Test coverage
Manual verification The PR's test plan already covers the browser, MCP, and full eval suite. The remaining scenario worth an end-to-end check is the compose-role path itself: log in as an operator whose role has |

Summary
Stacked on #11738. That PR serves the AI session's GLOBAL toolset over MCP by reimplementing the tools in Rust, which left two implementations of every tool: the chat's TypeScript and the server's Rust. This PR makes the chat call the Rust handlers too, so a tool's behaviour is written once and the chat and MCP clients get the same tools.
The chat calls
POST /w/{workspace}/ai_session_tools/{name}with the tool's arguments and the context only the browser knows (open editors, the session, the AI provider catalog, the run phase). The server answers with the model-facing text plus effects the browser applies: draft writes and deletes (saved through the browser's own draft store, so open editors, autosave and conflict handling behave as before), card statuses, code diffs. The chat's drafts never touch the server before the browser saves them.Changes
mcp/sessionmoved tobackend/windmill-api/src/ai_session_tools, compiled without themcpfeature;mcp/session.rsis now a thin MCP adapter.POST /w/{w}/ai_session_tools/{name}(chat.rs, inopenapi.yamlascallAiSessionTool). Job tokens and scoped tokens are refused.Surface(chat or MCP): MCP-only links (Run page,preview_url, drafturl) and the rebase size guard stay MCP-only.ai_providers.rs): the chat sends the catalog it builds for its prompt; MCP gets one built from resources, without model listings, so it never rules out a model id it cannot see.@typesfallback, bounded fetch), schema-less script writes (the browser infers schemas with its parsers), check-only dry runs before confirmation cards (settings, delete).global/backendSessionTools.tscalls the route and applies effects;global/serverTools.tsand the converted datatable, migration, DuckLake, workspace-settings, hub and skill tools are thin wrappers.global/core.tsand its helpers (flowRunTree.tsand friends).deploy_workspace_itemanddiff: they share the UI's deploy and diff code with Compare & Deploy and the session deploy panel.get_instructions, the trigger and schedule schemas.realWorkspace.ts), instead of a mock backend; about 2,200 lines of mock code that only global mode used are gone.WMILL_AI_EVAL_DATABASE_URL), since CE cannot create users through the API; their token is revoked afterwards.embeddingandhttp_trigger, starts a native worker for thepostgresqltag, and sets a short resource type index interval.AGENTS.md: the MCP paragraph now says what is written once and what is still written twice.Intended differences
write_flowhonoursoverride.cancel_job,create_folder).get_db_schemawaits up to 120 s, then says the query did not finish; the chat used to wait on the job.search_appmay order matched files slightly differently when its output is cut.rss parsergivesrss-parserat 815), so the fixed cut-off returned nothing for anything but exact package names.Test plan
global/core.test.tsreworked to the server seam (tests of logic that moved are deleted); new tests for draft-write conflicts and the openflow check.ai_session_tools(48), with and without themcpfeature.migrations_enabled, the hub display-name fallback and two smaller gaps.claude -p): write, run, list drafts.test3-flow-createpasses 3/3 on rerun and the other three fail at base's own rate over repeated runs (docs and email-trigger cases are model variance on both). The pipeline cases now pass here; they failed on base because of the session bug in the harness.Screenshots
Write, test run and result, with the draft open in the editor:

An edit made on the server reaching the open editor:

Deploy (TypeScript path) then delete (server, after its check-only pass):

🤖 Generated with Claude Code