Repository navigation
feat!: one search tool and one execute tool spanning the account scope (ENG-3175) - #231
Merged
Merged
Conversation
…as the trio search() and execute() call stackone_search_actions / stackone_execute_action once, replacing the per-account meta-tool fan-out, connector parsing, re-ranking and the failed-account retry in execute(). Hits carry available_accounts, not account_id. WIP: shared vectors not yet re-vendored; README/MIGRATION/examples and the Pydantic AI test still to do.
…vectors; document hits' available_accounts Vendors sdk-conformance@65e1286's vectors, which drop the per-connector messages and add trio-tool-not-served. A FunctionModel-driven Agent now runs a tool end to end against the mock MCP server in individual and search_execute modes. README, MIGRATION and the examples show search hits naming available_accounts rather than account_id, and the Pydantic AI example runs a search_execute agent too.
…one-account pair as the trio's names (ENG-3175)
…ts matching PR (#389) Both SDKs' conformance runs grade the pair together, and the new contract needs both on it. The Node pin moves to its merge commit once #389 lands.
willleeney
force-pushed
the
will/eng-3175-single-search-execute
branch
from
October 28, 2026 16:29
413aec2 to
d76c266
Compare
…packageManager sdk-conformance moved to pnpm 11.17.0 (#12), and pnpm/action-setup refuses a version key that disagrees with package_json_file. Each SDK checkout still runs its own pnpm 10.26.0: pnpm switches to a project's packageManager version.
willleeney
marked this pull request as ready for review
October 29, 2026 09:06
|
Running ultrareview automatically — this PR appears to change a public API contract, where a missed bug can break the clients and integrations that depend on it, so a deeper multi-pass review is worth running. I'll post findings when complete. |
Contributor
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing. Review the Copilot code review billing settings.
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.
Part of ENG-3175. Draft: depends on the server serving the trio to API keys (unified-cloud-api#9417 (merged)) and on StackOneHQ/sdk-conformance#9. Lands before the 3.0.0 release (#200), so the breaking change ships inside 3.0.0.
In
search_executemode the SDK now gives a model onestackone_search_actionsand onestackone_execute_action(withstackone_list_accounts) across every account in scope, instead of one pair per account.x-account-idquery parameters and recorded end users as repeatedx-end-user-id. A failure raises; there is one request, so nothing to skip.search(): onestackone_search_actionscall. Hits are as served, withavailable_accounts; an action linked on two accounts is one hit, not two, and there is noaccount_idper hit.execute(): onestackone_execute_actioncall. A single id inaccount_idsbecomesstackone_account_id. An ambiguous action is refused by the server (StackOneAPIError), not the SDK.execute().FunctionModel-drivenAgenttests run a tool end to end against the mock MCP server in individual andsearch_executemodes. The example runs an agent in each mode. Removes a stale_build_toolsmock.available_accounts; vectors vendored from sdk-conformance@65e1286.Checks: 850 tests pass; ruff and ty clean; the sdk-conformance suite passes.
Live (production API, Gemini 3.1 Pro, a Google Calendar account): Pydantic AI agents passed in both modes. Production still serves the per-account pair, so the trio itself was exercised only against mocks.
Follow-up once sdk-conformance merges: bump the pinned conformance ref (
5f60cc0) andNODE_SDK_REFin CI.Update: on the merged server (unified-cloud-api#9417)
Stu's #9417 is merged and replaces unified-cloud-api#9398. It takes the accounts as a comma-separated
x-account-id, serves the trio for two or more, and serves the account's own pair (<provider>_<accountId>_search_actions/_execute_action) for one, capped at 50. So now:x-account-idquery value (sorted, deduped) instead of repeated parameters; end users stay repeatedx-end-user-id.stackone_search_actions/stackone_execute_action. Served names are rewritten in descriptions, schemas, results and error text, and hits gainavailable_accountsandprovider. Astackone_account_idorprovidernaming that account is dropped (nulltoo); any other raisesToolArgumentsError(account-outside-scope,provider-outside-scope) before any call. Nostackone_list_accountsis invented.too-many-accountsconfig error before any request.The full sdk-conformance suite passes against both SDK branches, cross-SDK wire equality included; so do the sdk / pydantic / adk smoke scripts.