Project the heavy schema columns off the tool hot paths#970
Merged
Conversation
3115a4e to
52c0bae
Compare
12ba686 to
4995d43
Compare
This was referenced Jun 12, 2026
Contributor
Cloudflare previewTorn down — the PR is closed. |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
executor-marketing | 7206161 | Commit Preview URL Branch Preview URL |
Jun 12 2026, 05:51 AM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
executor-cloud | 7206161 | Jun 12 2026, 05:51 AM |
@executor-js/cli
@executor-js/config
@executor-js/execution
@executor-js/sdk
@executor-js/codemode-core
@executor-js/runtime-quickjs
@executor-js/plugin-file-secrets
@executor-js/plugin-graphql
@executor-js/plugin-keychain
@executor-js/plugin-mcp
@executor-js/plugin-onepassword
@executor-js/plugin-openapi
executor
commit: |
52c0bae to
26b23dd
Compare
4995d43 to
fa0afd7
Compare
26b23dd to
73d64a5
Compare
fa0afd7 to
5adeb6c
Compare
Every invoke loaded the full tool row — including input_schema and output_schema JSON it never reads — and tools.list loaded every tool's schemas unbounded just to project metadata, so list cost scaled with schema bytes rather than tool count. The same shape of waste the spec inlining had, in miniature, across the tool table. The core DB wrapper now exposes fumadb's column projection (select), typed per table with the result narrowed to the chosen columns. The invoke lookup, tools.list, and the not-found suggestion queries select TOOL_INVOCATION_COLUMNS — everything but the two schema columns. The plugin invokeTool contract documents this as ToolInvocationRow (no plugin read the schemas off the row; operation details ride in plugin storage or annotations). tools.schema (describe) is unchanged and remains the schema-bearing surface. One test moved from asserting schemas on tools.list to tools.schema — that list behavior is exactly what this change removes.
5adeb6c to
7206161
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Every invoke loaded the full tool row — including
input_schemaandoutput_schemaJSON it never reads — andtools.listloaded every tool's schemas unbounded just to project metadata, so list cost scaled with schema bytes rather than tool count. The same shape of waste the spec inlining had, in miniature, across the tool table.select), typed per table with the result narrowed to the chosen columns.tools.list, and the not-found suggestion queries selectTOOL_INVOCATION_COLUMNS— everything but the two schema columns.invokeToolcontract documents this asToolInvocationRow. No plugin read the schemas off the row: operation details ride in plugin storage (openapi/graphql bindings) orannotations(mcp stamp).tools.schema(describe) is unchanged and remains the schema-bearing surface.Behavior change
Tool.inputSchema/outputSchema(already optional) are now absent ontools.listresults. The HTTP list endpoint never serialized them, and the execution/search layers only read name/description — one test asserted schemas via list and moved totools.schema.Testing
New tool-row-projection tests: list is metadata-only, invoke works end-to-end off the projected row, describe still serves full schemas. Full repo suite green.
Stack