mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-31 14:16:39 +01:00
## Thinking Path > - Paperclip manages agents and their work. > - Users choose providers and managed accounts while adding agents. > - Antigravity was missing from the ordinary additional-agent picker and its saved Google path did not complete native readiness. > - A user needs a successful Test, an enabled task action, and a stable account binding. > - This pull request connects the ordinary setup flow to the native candidate. > - It also preserves retired credential refreshes across database failures and server restarts. ## Linked Issues or Issue Description Built on merged #18188 and #18187. Refs: #12503, #14938 for related legacy CLI proposals. **Agent or provider** Google Antigravity ACP 1.4.3. **Why this adapter is useful** Users need to set up an Antigravity agent and run real work through their managed Google subscription. **How the agent is invoked** Native Paperclip Runner uses the pinned Antigravity ACP runtime. Exact operator admission remains required; the local candidate result does not enable general release. ## What Changed - Show Google Antigravity in the ordinary adapter grid and preserve the draft choice when setup resumes. - Reuse the same user’s saved personal default Google subscription and discover the exact low model through the native account. - Run a prompt-free native Test and wait for authoritative readiness before enabling task assignment. - Carry the managed account through native runs and recover retired refreshes through the existing encrypted, fsynced journal with exact generation checks. - Retain the latest rotated credential through verification, storage, and partial home-removal failures. Retry the exact account’s retained cleanup before another provider use. - Reconcile cleanup before taking the credential mutation lock, fence owners arriving during lock acquisition, and support nested lock holders without a join cycle. - Bound sign-in retirement outside database transactions and preserve claims for the existing cleanup owner; one pending sign-in does not block unrelated accounts. - Cover Gemini and Pi API-key recovery, keep API-key bulk manual-model editing usable, and keep adapter discovery available after candidate expiry. - Skip taskless native timer work before run or credential admission. Preserve current master monitor and deadline scheduling. ## Verification - The registered local saved-Google-subscription journey passed all 16 matchers in 196,520 ms using eval source `12aba` against actual serving source `4a37ee7c`. Both turns stayed in one conversation, produced exact downloaded files of 61 and 119 bytes after reload, and used distinct native primary processes. All observed owners retired, leases released, and credential fences settled. Independent readback confirmed Done work, no active owned runs, a connected saved account, and the retained agent paused for inspection. - The measured runtime is production-equivalent to pre-restack `65ef31dc` except its test-only transport fixture correction. Current-master head `ff7c9249` preserves all 99 product paths: 98 exact blobs and only eight inherited plugin-panel lines in `agents.ts`. Its native binary was rebuilt for inherited Codex-only diagnostic changes; the changed Rust behavior is outside Antigravity's ACPX execution path. Shared native/UI changes have focused regression coverage. The recorded live result is not represented as a measured replay of `ff7c9249`. - Full workspace build and typecheck passed on `ff7c9249`. All 376 focused tests in 14 files passed, covering Google credential/retirement controls and the inherited native-tool, redaction, route, and UI recovery changes. Token gates, maps, and diff checks passed. The required-close fixture was separately demonstrated red, then passed all 317 selected provider-wiring cases. - [Current-head CI](https://github.com/paperclipai/paperclip/actions/runs/40959387972) is green: 55 successful checks, two skipped workflow checks, and an optional neutral review check. Required `ci / verify` and `ci / e2e` passed. Greptile and Paperclip Review both report 5/5 on exact `ff7c9249`, with zero unresolved review threads. - This qualifies the selected operator-authorized local saved-subscription candidate. The original exploratory journey remains historical evidence; the repeatable fixed-driver eval is in the next PR. ## Risks - Google refresh recovery must preserve the exact grant, account, and credential generation. An uncertain native owner or failed encrypted handoff retains the private home and blocks cleanup. - A successful local saved-subscription candidate does not qualify fresh OAuth, API keys, Cloud, Linux, other models, or general release. - Timer filtering changes only taskless native Runner admissions. Existing task-bound monitors and legacy adapters retain their owners. ## Model Used OpenAI Codex (GPT-6). The host did not expose the exact model revision or context limit. The model used tools for code edits, tests, and review. ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have searched GitHub for duplicate or related PRs and linked them above - [x] I have either (a) linked existing issues with `Fixes: #` / `Closes #` / `Refs #` OR (b) described the issue in-PR following the relevant issue template - [x] I have not referenced internal/instance-local Paperclip issues or links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip` URLs) - [x] My branch name describes the change (e.g. `docs/...`, `fix/...`) and contains no internal Paperclip ticket id or instance-derived details - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [x] All Paperclip CI gates are green - [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [x] I will address all Greptile and reviewer comments before requesting merge --------- Co-authored-by: Paperclip <noreply@paperclip.ing>
400 lines
39 KiB
Markdown
400 lines
39 KiB
Markdown
# Connection setup — agent access
|
|
|
|
Google Antigravity runtime sign-in reuses the existing company/owner-bound local
|
|
AI connection attempts. Agent callers cannot import host credentials, complete
|
|
another user's attempt, or turn a tool OAuth grant into runtime authentication.
|
|
Native Google setup is source-tested for early-token rejection and physical
|
|
retirement before home removal; live Google and database authorization acceptance
|
|
remain separate. See [AI connections](../../doc/connections/AI-CONNECTIONS.md#local-subscription-sign-in).
|
|
|
|
Product map: [connection-setup](../feature-map/connection-setup.md).
|
|
|
|
Feature ID: `connection-setup`.
|
|
|
|
Delegated native entries inherit the [native admission and work-mode limits](README.md#native-rest-transport).
|
|
|
|
Review date: 2026-10-26. Source base: `a1f77821b9cd5c9c846fdf7a0fa5cc620ad2b6bb`; implementation: [#17737](https://github.com/paperclipai/paperclip/pull/17737).
|
|
|
|
Connection operations reviewed in this working tree. The inventory was reconciled
|
|
against production UI clients, REST registrations and service entry points; it is
|
|
a review checklist, not a runtime registry. [Authorization and evidence contract](../../doc/plans/2026-10-13-connection-api-parity.md).
|
|
Fixture evidence is separate from live provider qualification and from empirical
|
|
LLM success. Source-only entries have a reviewed agent path or an explicit boundary,
|
|
but do not claim an individually executed HTTP test.
|
|
|
|
Prompt Injection Prevention reuses shared OpenRouter API-key setup directly from
|
|
Settings → Connections. It adds no Apps provider or transport. Credential ownership
|
|
and audience rules are the existing connection rules; saving a connection alone
|
|
does not activate the service. See [service configuration](../../doc/prompt-injection-prevention.md).
|
|
|
|
1Password adds a service-account catalog method. Agents request access through
|
|
the existing connection tools and invoke its reviewed item actions through the
|
|
run-scoped gateway. The service-account token stays in the selected user/company
|
|
vault; vault boundaries are enforced by 1Password. Authorized API setup uses the shared connection-management policy; credential entry remains a human step when needed.
|
|
Evidence and limits: [1Password connector](../../doc/connections/1PASSWORD.md).
|
|
|
|
## `catalog`
|
|
|
|
Capability ID: `connection-setup/catalog`.
|
|
|
|
Review: `operation-reviewed`.
|
|
|
|
### `get-companies-tools-gallery`
|
|
|
|
API: `present` — `GET /api/companies/{companyId}/tools/gallery`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `get-companies-tools-apps-preflight`
|
|
|
|
API: `present` — `GET /api/companies/{companyId}/tools/apps/{galleryKey}/preflight`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `get-companies-tools-examples`
|
|
|
|
API: `present` — `GET /api/companies/{companyId}/tools/examples`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `post-companies-tools-examples-install`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/examples/{id}/install`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `post-companies-tools-examples-smoke`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/examples/{id}/smoke`; JSON REST.
|
|
Agent access: `operator-only` — existing human setup or approval surface; agent can identify the saved setup and inspect the result.
|
|
Policy: Human consent, identity confirmation, action approval, or trusted-host administration. This endpoint does not delegate human identity or self-approval to an agent.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `get-companies-tools-stdio-templates`
|
|
|
|
API: `present` — `GET /api/companies/{companyId}/tools/stdio-templates`; JSON REST.
|
|
Agent access: `operator-only` — a board user reads host command templates. Agents select approved provider templates through the catalog.
|
|
Policy: board actor and `tools:admin`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `post-companies-tools-stdio-templates`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/stdio-templates`; JSON REST.
|
|
Agent access: `operator-only` — a board user creates host command templates; agents select approved templates through the catalog.
|
|
Policy: Board actor, company access, and `tools:admin`. Connection-management grants do not authorize host command template administration.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `post-companies-tools-stdio-templates-disable`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/stdio-templates/{templateId}/disable`; JSON REST.
|
|
Agent access: `operator-only` — a board user disables host command templates; agents select approved templates through the catalog.
|
|
Policy: Board actor, company access, and `tools:admin`. Connection-management grants do not authorize host command template administration.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `post-companies-tools-mcp-import-json`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/mcp/import-json`; JSON REST.
|
|
Agent access: `operator-only` — existing human setup or approval surface; agent can identify the saved setup and inspect the result.
|
|
Policy: Board actor and company access. This operation previews parsed MCP configuration; it does not execute host commands or require the host-template `tools:admin` grant.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `post-runtime-tools-connections-search`
|
|
|
|
API: `present` — `POST /runtime-tools/connections/search`; JSON REST.
|
|
Agent access: `available` — existing REST/native runtime tool or scoped gateway client, as documented by the linked route.
|
|
Policy: Existing run-bound tool, scoped credential lease, execution policy, or assigned-email-agent checks; connection-management grants do not bypass these controls.
|
|
Evidence: `source-only` — [route](../../server/src/routes/connection-intents.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
## `identity-and-access`
|
|
|
|
Capability ID: `connection-setup/identity-and-access`.
|
|
|
|
Review: `operation-reviewed`.
|
|
|
|
### `post-companies-tools-apps-connect`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/apps/connect`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `post-companies-tools-connections`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/connections`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `verified` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above. [Authenticated fixtures](../../server/src/__tests__/connection-management.integration.test.ts) passed with database persistence and actual bearer/session middleware.
|
|
Verification: `passed` — deterministic provider fixtures / local assembled server; no live provider qualification.
|
|
Gaps: Provider fixtures do not qualify live provider setup or availability.
|
|
## `credentials`
|
|
|
|
Capability ID: `connection-setup/credentials`.
|
|
|
|
Review: `operation-reviewed`.
|
|
|
|
### `post-agents-me-connections-start-authorization`
|
|
|
|
API: `present` — `POST /api/agents/me/connections/{connectionId}/start-authorization`; JSON REST.
|
|
Agent access: `available` — existing REST/native runtime tool or scoped gateway client, as documented by the linked route.
|
|
Policy: `tools:manage_connections`, an active run, and the server-derived responsible user matching the authorization subject; shared scope/trust/user checks apply. Human authentication remains a handoff, with the actual agent retained for audit. JSON authorization initiation is explicitly REST-callable.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `post-agents-me-connections-token`
|
|
|
|
API: `present` — `POST /api/agents/me/connections/{connectionId}/token`; JSON REST.
|
|
Agent access: `available` — existing REST/native runtime tool or scoped gateway client, as documented by the linked route.
|
|
Policy: Existing run-bound tool, scoped credential lease, execution policy, or assigned-email-agent checks; connection-management grants do not bypass these controls.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `post-companies-tools-connections-start-authorization`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/connections/{connectionId}/start-authorization`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `post-tools-oauth-start`
|
|
|
|
API: `present` — `POST /api/tools/oauth/{connectionId}/start`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. Returns the saved setup without issuing agent-bound OAuth state; the human browser initiates provider consent.
|
|
Evidence: `verified` — [authenticated integration fixtures](../../server/src/__tests__/connection-management.integration.test.ts) passed through production authentication and database persistence, including saved Google service choices addressed to the responsible user. [Service-picker tests](../../ui/src/features/connections/GoogleWorkspaceServices.test.tsx) cover restoring only that user's request and retaining newer consent.
|
|
Verification: `passed` — deterministic local fixture; no live provider qualification.
|
|
Gaps: Provider fixtures do not qualify live provider setup or availability.
|
|
|
|
### `post-runtime-tools-github-credentials`
|
|
|
|
API: `present` — `POST /runtime-tools/github/credentials`; JSON REST.
|
|
Agent access: `available` — existing REST/native runtime tool or scoped gateway client, as documented by the linked route.
|
|
Policy: Existing run-bound tool, scoped credential lease, execution policy, or assigned-email-agent checks; connection-management grants do not bypass these controls.
|
|
Evidence: `source-only` — [route](../../server/src/routes/connection-intents.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
## `handoff`
|
|
|
|
Capability ID: `connection-setup/handoff`.
|
|
|
|
Review: `operation-reviewed`.
|
|
|
|
### `get-tools-oauth-cloud-connector-enrollment`
|
|
|
|
API: `present` — `GET /api/tools/oauth/cloud-connector/enrollment`; JSON REST.
|
|
Agent access: `operator-only` — existing human setup or approval surface; agent can identify the saved setup and inspect the result.
|
|
Policy: Board actor (`assertBoard`) for instance enrollment status; agents cannot read this operator surface.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `post-tools-oauth-cloud-connector-enrollment`
|
|
|
|
API: `present` — `POST /api/tools/oauth/cloud-connector/enrollment`; JSON REST.
|
|
Agent access: `operator-only` — existing human setup or approval surface; agent can identify the saved setup and inspect the result.
|
|
Policy: Instance administrator (`assertInstanceAdmin`) and access to the requested company. The saved enrollment binds the initiating human principal and return destination.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `get-tools-oauth-cloud-connector-enrollment-callback`
|
|
|
|
API: `present` — `GET /api/tools/oauth/cloud-connector/enrollment-callback`; browser return — HTML completion page or HTTP 303 redirect.
|
|
Agent access: `operator-only` — existing human setup or approval surface; agent can identify the saved setup and inspect the result.
|
|
Policy: Instance administrator (`assertInstanceAdmin`), access to the saved company, and the same initiating principal. The saved enrollment ID, approval code, state, and expiry must validate before completion.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `get-tools-oauth-cloud-connector-callback`
|
|
|
|
API: `present` — `GET /api/tools/oauth/cloud-connector/callback`; browser/provider/MCP protocol.
|
|
Agent access: `restricted` — browser authentication return.
|
|
Policy: Provider state/signature or gateway-token verification, company and resource binding; browser returns require the configuring human. Agent-issued durable gateway tokens retain both issuer and responsible-user authority.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `get-tools-oauth-paperclip-id-callback`
|
|
|
|
API: `present` — `GET /api/tools/oauth/paperclip-id/callback`; browser/provider/MCP protocol.
|
|
Agent access: `restricted` — browser authentication return.
|
|
Policy: Provider state/signature or gateway-token verification, company and resource binding; browser returns require the configuring human. Agent-issued durable gateway tokens retain both issuer and responsible-user authority.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `get-tools-vercel-connect-callback`
|
|
|
|
API: `present` — `GET /api/tools/vercel-connect/callback`; browser/provider/MCP protocol.
|
|
Agent access: `restricted` — browser authentication return.
|
|
Policy: Saved, unexpired Vercel OAuth state binds the company and connection to the addressed human or initiating actor/session. State is consumed once; expired, replayed and wrong-user returns fail. Personal grants require current active non-viewer company membership and retain the human creator. See [state validation](../../server/src/services/tool-access/oauth/state.ts) and [Vercel callback](../../server/src/services/tool-access/oauth/vercel-callback.ts).
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — return as the addressed human, inspect the saved personal grant and creator, then reject wrong-user, expired, replayed and revoked-membership callbacks. This callback has source review, without live Vercel qualification.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `get-tools-oauth-callback`
|
|
|
|
API: `present` — `GET /api/tools/oauth/callback`; browser/provider/MCP protocol.
|
|
Agent access: `restricted` — browser authentication return.
|
|
Policy: Provider state/signature or gateway-token verification, company and resource binding; browser returns require the configuring human. Agent-issued durable gateway tokens retain both issuer and responsible-user authority.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `get-mcp-runtime-tools`
|
|
|
|
API: `present` — `GET /mcp/runtime-tools`; browser/provider/MCP protocol.
|
|
Agent access: `restricted` — GET always returns HTTP 405 with `Allow: POST`. Use the corresponding POST MCP operation.
|
|
Policy: GET streaming is unsupported; this is a transport boundary independent of principal permissions. POST still requires the documented MCP authentication and resource policy.
|
|
Evidence: `source-only` — [route](../../server/src/routes/connection-intents.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — source-reviewed fixed 405 handler. A protocol check should assert status 405 and `Allow: POST`; use POST to exercise authenticated MCP calls.
|
|
Gaps: No GET event stream is implemented. This entry does not advertise a usable GET client connection.
|
|
|
|
### `post-mcp-runtime-tools`
|
|
|
|
API: `present` — `POST /mcp/runtime-tools`; browser/provider/MCP protocol.
|
|
Agent access: `available` — existing authenticated MCP/provider protocol; not callable as JSON REST.
|
|
Policy: Provider state/signature or gateway-token verification, company and resource binding; browser returns require the configuring human. Agent-issued durable gateway tokens retain both issuer and responsible-user authority.
|
|
Evidence: `source-only` — [route](../../server/src/routes/connection-intents.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `get-connection-intents-setup-options`
|
|
|
|
API: `present` — `GET /api/connection-intents/{interactionId}/setup-options`; JSON REST.
|
|
Agent access: `restricted` — existing human setup or approval surface; agent can identify the saved setup and inspect the result.
|
|
Policy: Human consent, identity confirmation, action approval, or trusted-host administration. This endpoint does not delegate human identity or self-approval to an agent.
|
|
Evidence: `source-only` — [route](../../server/src/routes/connection-intents.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `post-connection-intents-phase`
|
|
|
|
API: `present` — `POST /api/connection-intents/{interactionId}/phase`; JSON REST.
|
|
Agent access: `restricted` — existing human setup or approval surface; agent can identify the saved setup and inspect the result.
|
|
Policy: Human consent, identity confirmation, action approval, or trusted-host administration. This endpoint does not delegate human identity or self-approval to an agent.
|
|
Evidence: `source-only` — [route](../../server/src/routes/connection-intents.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
|
|
### `post-connection-intents-complete`
|
|
|
|
API: `present` — `POST /api/connection-intents/{interactionId}/complete`; JSON REST.
|
|
Agent access: `restricted` — existing human setup or approval surface; agent can identify the saved setup and inspect the result.
|
|
Policy: Human consent, identity confirmation, action approval, or trusted-host administration. This endpoint does not delegate human identity or self-approval to an agent.
|
|
Evidence: `source-only` — [route](../../server/src/routes/connection-intents.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
## `draft-recovery`
|
|
|
|
Capability ID: `connection-setup/draft-recovery`.
|
|
|
|
Review: `operation-reviewed`.
|
|
|
|
### `post-companies-tools-apps-finalize-oauth-access`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/apps/{connectionId}/finalize-oauth-access`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `post-companies-tools-apps-finish`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/tools/apps/{connectionId}/finish`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections` and `tools:manage_profiles`; current and requested audience/target authority, including nested `access`, all agents, and retained bindings.
|
|
Evidence: `verified` — [assembled-server integration](../../server/src/__tests__/connection-management.integration.test.ts), actual bearer/session authentication, persisted PostgreSQL state, and deterministic local MCP/provider fixtures.
|
|
Verification: `passed` — 25-scenario fixture suite on a fresh isolated PostgreSQL database, including scoped denial, approved continuation, revocation, cancellation and replay. No live provider qualification.
|
|
Gaps: Provider fixtures do not qualify live provider setup or availability.
|
|
|
|
### `post-tool-connections-reconnect`
|
|
|
|
API: `present` — `POST /api/tool-connections/{connectionId}/reconnect`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
## `task-request`
|
|
|
|
Capability ID: `connection-setup/task-request`.
|
|
|
|
Review: `operation-reviewed`.
|
|
|
|
### `post-runtime-tools-connections-request`
|
|
|
|
API: `present` — `POST /runtime-tools/connections/request`; JSON REST.
|
|
Agent access: `available` — existing REST/native runtime tool or scoped gateway client, as documented by the linked route.
|
|
Policy: Existing run-bound tool, scoped credential lease, execution policy, or assigned-email-agent checks; connection-management grants do not bypass these controls.
|
|
Evidence: `source-only` — [route](../../server/src/routes/connection-intents.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|
|
|
|
### `post-connection-intents-decline`
|
|
|
|
API: `present` — `POST /api/connection-intents/{interactionId}/decline`; JSON REST.
|
|
Agent access: `restricted` — existing human setup or approval surface; agent can identify the saved setup and inspect the result.
|
|
Policy: Human consent, identity confirmation, action approval, or trusted-host administration. This endpoint does not delegate human identity or self-approval to an agent.
|
|
Evidence: `source-only` — [route](../../server/src/routes/connection-intents.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: Agent invocation is denied by the stated policy. The authorized human or operator must perform this step; this entry does not claim delegated execution.
|
|
## `channel-setup`
|
|
|
|
Capability ID: `connection-setup/channel-setup`.
|
|
|
|
Review: `operation-reviewed`.
|
|
|
|
### `post-companies-chat-endpoints`
|
|
|
|
API: `present` — `POST /api/companies/{companyId}/chat-endpoints`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `verified` — [route](../../server/src/routes/chat-channels.ts); reviewed in the working tree based on the source commit above. [Authenticated fixtures](../../server/src/__tests__/connection-management.integration.test.ts) passed with database persistence and actual bearer/session middleware.
|
|
Verification: `passed` — deterministic provider fixtures / local assembled server; no live provider qualification.
|
|
Gaps: Provider fixtures do not qualify live provider setup or availability.
|
|
## `failure`
|
|
|
|
Capability ID: `connection-setup/failure`.
|
|
|
|
Review: `operation-reviewed`.
|
|
|
|
### `post-tool-connections-health-check`
|
|
|
|
API: `present` — `POST /api/tool-connections/{connectionId}/health-check`; JSON REST.
|
|
Agent access: `available` — agent REST and default native `search_api` / `call_api`.
|
|
Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user.
|
|
Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above.
|
|
Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial.
|
|
Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified.
|