You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A typed connector abstraction so a new integration is declared once, not built as bespoke routes.
Do
Connector { id, label, auth: 'oauth'|'token'|'app', scopes: {read, write}, grantModel: 'user'|'instance-resource', tools: ToolDef[] } in a registry.
Auth adapter reuses lib/connector-oauth.ts + user_api_keys (refresh tokens, envelope-encrypted) + github-app.ts for the App model. A connectorClient(env, provider, {userId, instanceId}) mints the access token and enforces scope.
Grants reuse instance_connector_grants (0044) generalized beyond folders (resource_type: folder|repo|spreadsheet|…). requireConnectorGrant gates every tool call to granted resources.
Connector → tools bridge: a connector's tools auto-register in the tool registry; they're offered to an agent only when (a) declared in capabilities.tools, (b) the subscriber has connected the provider, and (c) a grant exists (for instance-resource connectors).
Per-instance enablement UI (console): connect provider → grant resource(s) → the connector's tools light up for that instance.
Acceptance
A new connector added by declaring {auth, scopes, grantModel, tools} — no bespoke routes.
Tool handlers obtain auth via connectorClient; scope + grant enforced centrally; parameterized + audited.
Activity
feat(connectors): tool registry + GitHub read connector, wired into a…
feat(connectors): connector registry + connectorClient (#86) (#104)
feat(connectors): generic HTTP/REST connector — call any API as config (
feat(pipelines): declarative pipeline definition + durable runner (#97)…
serge-ivo commentedon Aug 3, 2026
Shipped — connector framework (lib/connectors/registry.ts + client.ts: auth/scopes/grants/token dispatch). Now manifest-driven (#143).
feat(connectors): declare Drive, WorkDrive and Gmail, and expose the …
fix(pipeline): a step is now bounded by what its agent declares (#381)…