Repository navigation
feat: one search tool and one execute tool spanning the account scope (ENG-3175) - #389
Merged
Merged
Conversation
willleeney
force-pushed
the
will/eng-3175-single-search-execute
branch
from
October 21, 2026 17:38
fc32cc7 to
16a3dad
Compare
willleeney
force-pushed
the
will/eng-3175-single-search-execute
branch
from
October 28, 2026 15:36
16a3dad to
e5ad279
Compare
… (ENG-3175) search_execute mode now lists StackOne's stackone_search_actions / stackone_execute_action / stackone_list_accounts once for the whole account scope, naming every account as a repeated x-account-id query parameter, instead of a pair per account. search() and execute() make one call each: hits name their accounts in available_accounts rather than one hit per account, and the server, not the SDK, refuses an action whose connector is linked on several accounts. The per-connector merge, connector routing and failed-account retry are gone. Changes for 3.0.0 callers: toolMode 'search_execute' serves the trio, not a pair per account; search() hits carry available_accounts instead of account_id; an ambiguous execute() throws StackOneAPIError from the server rather than ToolSetConfigError. Follows unified-cloud-api#9417. A search_execute listing names its accounts as one comma-separated x-account-id query value, and a scope of more than 50 accounts throws ToolSetConfigError (too-many-accounts) before any request. For one account the server serves <provider>_<accountId>_search_actions and _execute_action rather than the trio. The SDK presents them as stackone_search_actions and stackone_execute_action: the served names read as those names in descriptions, schemas and result strings; a stackone_account_id or provider naming the account or its connector is dropped, any other throws ToolArgumentsError (account-outside-scope, provider-outside-scope); search hits gain provider and available_accounts. search(), execute(), submitFeedback() and fetchTools() look the same for one or many accounts. Changes for 3.0.0 callers: x-account-id is sent as one comma-separated value; search_execute scopes are capped at 50 accounts; SearchHitAccount.name is optional. Rebased onto main after #392 and #391; written in their lint style (oxlint 1.88). Release-As: 3.1.0
willleeney
force-pushed
the
will/eng-3175-single-search-execute
branch
from
October 28, 2026 15:37
e5ad279 to
099fd1e
Compare
commit: |
commit: |
…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.
Contributor
|
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. The Python counterpart is StackOneHQ/stackone-ai-python#231.
Changes behaviour for 3.0.0 callers. In
toolMode: 'search_execute'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. Released as 3.1.0, not 4.0.0, since 3.0.0 is days old: the commits arefeat:with aRelease-As: 3.1.0footer, and the changes for 3.0.0 callers are listed in their bodies rather than asBREAKING CHANGE:footers. Keep the PR titlefeat:when squash-merging.x-account-idquery parameters and recorded end users as repeatedx-end-user-id.search(): one call. Hits carryavailable_accountsinstead ofaccount_id.execute(): one call. A single id inaccountIdsbecomesstackone_account_id. An ambiguous action is refused by the server and throwsStackOneAPIError; before, the SDK threwToolSetConfigError.Checks: 1267 tests pass (4 skipped);
tscclean; oxfmt 0.68 clean; the sdk-conformance suite passes. oxlint was not run locally: CI installs it from Nix, and the npm build of the same version rejects.oxlintrc.jsonc. CI's run is the check.Release order: the server change renames the tools Node 3.0.0 looks up, so this must ship before the server change reaches production.
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.