Skip to content

Identity and approvals - #728

Merged
breardon2011 merged 6 commits into
mainfrom
channels/identity-and-approvals
Sep 15, 2026
Merged

breardon2011 merged 6 commits into
mainfrom
channels/identity-and-approvals

Conversation

@breardon2011

@breardon2011 breardon2011 commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

input.channel
A turn started by a channel message now carries the sender's identity:
provider, connectionId, workspaceId, and the conversation it arrived
in. Absent for turns that did not come from a channel.

useSecret(name, { scope })
Scope is project (default, unchanged), tenant, or user. A tenant
secret resolves from the channel installation the message arrived through;
a user secret resolves from the person being acted for. Both are fixed when
the session starts. If no secret is set for that tenant or user, the call is
refused and the request never leaves the runtime — there is no fallback to
the project secret.

Tools that wait for approval
defineTool accepts preview and apply in place of run. When the model
calls such a tool, preview runs, a proposal is recorded under the calling
message's id, and the model is told the proposal was recorded and to stop.
Nothing is written. apply runs later, from the arguments in the proposal,
once a decision arrives — it receives that decision on its context. Calling
the same tool twice with the same message id yields one proposal.

preview without apply, or apply without preview, is rejected. So is
supplying run alongside them.

The compiler records which tools are gated in the artifact manifest. It reads
this from the syntax tree — the presence of preview and apply on the
object literal — rather than by matching source text.

@mintlify

mintlify Bot commented Sep 12, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
opencomputer 🟢 Ready View Preview Sep 15, 2026, 6:03 PM

💡 Tip: Enable Automations to automatically generate PRs for you.

…ve — a gated tool was always a tool whose run() we write for you, so defineGatedTool duplicated a name for what is really a property of one; supplying preview() and apply() instead of run() now makes the model's call a proposal, useTool is unchanged, and the compiler reads gating from the syntax tree because it is no longer visible in the callee's name and a textual match would read a JSON Schema property called preview as a gate
…aged-connection clients (#733) and a package publish (#734); both sides added tests at the same points in project.test.ts, and the resolution keeps all of them plus the gatedTools expectations this branch adds to two pre-existing ones
…to a tenant or a person — the tools page still taught a defineGatedTool that no longer exists, and useSecret's scope was undocumented entirely despite being the thing that stops one deployment handing every customer's agent every other customer's credential
@breardon2011
breardon2011 merged commit 9896916 into main Sep 15, 2026
5 checks passed
breardon2011 added a commit that referenced this pull request Sep 15, 2026
… kept both rows in the capabilities table and both nav entries, kept the callService pointer alongside the approvals section in tools.mdx, and added a note distinguishing the two GitHub paths #735 introduced: callService proxies the REST API, useConnection injects a token for git and gh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant