mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-24 01:41:42 +02:00
## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - Its feature map describes user journeys and their verification paths. > - The map already defines feature IDs and full capability IDs. > - The README and child pages did not show those IDs consistently. > - Readers need those IDs to connect issues, tests, stories, and evidence. > - This pull request adds a recipe index and displays the existing IDs. > - The benefit is clear references across the product and agent access maps. ## Linked Issues or Issue Description **Issue type** Missing documentation. **Where is the issue?** `maps/feature-map/README.md`, the child recipes, and their agent access companions. **What's wrong?** The README sends readers to Storybook to browse features. Child pages show local keys, such as `installation`, without the full `plugins/installation` ID. Readers must inspect the generator to find the full reference. **Suggested fix** List recipe links and existing IDs in the README. Show each feature ID and full capability ID in its child pages. Explain capability IDs and entry-point references. Keep the current keys and anchors. Related work: Refs #15288. Refs #16052. Refs #15983. No duplicate open PR or issue was found by title search. ## What Changed - Add an index grouped by feature area. It lists every recipe, feature ID, and full capability ID. - Explain how IDs are formed and used in issues, tests, Storybook, and evidence. - Add feature IDs to all product recipes and agent access companions. - Show full capability IDs beside recipe keys and below access and Storybook guidance headings. - Preserve existing keys, heading anchors, and generated ID values. Keep the latest upstream company capability in the index. ## Verification - `node scripts/check-maps.mjs` passes for 34 feature families and 175 capability IDs. - `node --test scripts/check-maps.test.mjs scripts/storybook-feature-index.test.mjs` passes all 17 tests. - `node scripts/storybook-feature-index.mjs` passes on this checkout and generates the feature indexes and overview inputs. - `git diff --check` passes. - A source comparison confirms that the README matches the recipe index. After removal of the added ID labels, all 68 child pages match the upstream prose and headings. - Full workspace checks were attempted: `pnpm -r typecheck`, `pnpm test:run`, and `pnpm build`. They could not start because the local pnpm wrapper could not fetch and verify the pinned pnpm 9.15.4 release. This checkout also has no workspace dependencies installed. - `node scripts/storybook-catalog.mjs` could not run because `storybook/internal/csf-tools` is not installed. The direct map and index checks above pass without that dependency. - Remote typecheck, release-registry, and full build checks passed. The first attempts of [server shard 3/12](https://github.com/paperclipai/paperclip/actions/runs/39460473910/job/118758430448) and [server shard 12/12](https://github.com/paperclipai/paperclip/actions/runs/39460473910/job/118758429932) stopped after their runners received a shutdown signal. The test steps were canceled. GitHub rejects the rerun request with HTTP 403: "The workflow run containing this job is already running". Five other CI jobs remain active. The next action is to rerun the two interrupted shards after workflow 39460473910 ends. No application changes were made to address these runner interruptions. - To inspect the result, open the feature-map README, follow a recipe link, and compare its full capability IDs with its access companion. ## Risks - Low risk. The change updates map documentation only. It changes no application code or ID schema. - The readable README index and child labels repeat source IDs. Keep them aligned when a capability changes. - Generated capability descriptions now include the visible ID prefix. Generated IDs, labels, navigation order, and verification fields remain the same. - Full local workspace checks and catalog generation remain unverified for the environment reasons above. > For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and discuss it in `#dev` before opening the PR. Feature PRs that overlap with planned core work may need to be redirected — check the roadmap first. See `CONTRIBUTING.md`. ## Model Used OpenAI Codex, model `gpt-6.1-sol`, with a 475,000-token context window and `xhigh` reasoning effort. The model used local file tools, shell commands, and GitHub CLI access. ## 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 - [ ] 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>
287 lines
15 KiB
Markdown
287 lines
15 KiB
Markdown
# Runs, harnesses, and model accounts — agent access
|
|
|
|
Product map: [Runs, harnesses, and model accounts](../feature-map/runs-adapters.md).
|
|
|
|
Feature ID: `runs-adapters`.
|
|
|
|
Review date: 2026-10-12. Source commit: `58e16dbddfc9c8d0cf60867f9d9847f0feda055b`.
|
|
Native REST transport reconciled in this change; see the
|
|
[shared transport contract](README.md#native-rest-transport).
|
|
|
|
This is a source-reviewed baseline of representative operations and known gaps.
|
|
Each capability needs operation-level review before its entire scope can be
|
|
qualified. No live agent execution is claimed. Follow the [map contract](../README.md)
|
|
for format, permission checks, evidence and maintenance.
|
|
|
|
Scoped runner-default source review: 2026-10-12 at
|
|
`eee0534154eaf5d0d3f2bbc97c1e24d86f34a5a5`, limited to runner discovery,
|
|
selected-runtime testing and saved execution/session preservation. The original
|
|
baseline source and review depth remain unchanged for unrelated operations.
|
|
|
|
Scoped native cancellation source review: 2026-10-12 at
|
|
`ce23716503a2c9158b5a7ab74ab61571ff4ee7a3`, limited to owned startup and
|
|
shutdown/readiness ordering. The original baseline and review depth remain for
|
|
unrelated operations; no live provider or agent authorization is claimed.
|
|
|
|
## `availability`
|
|
|
|
Capability ID: `runs-adapters/availability`.
|
|
|
|
Review: `baseline`.
|
|
|
|
API: `present` — representative operation IDs:
|
|
|
|
- `GET /api/adapters`.
|
|
- `GET /api/companies/{companyId}/adapters/{type}/models`.
|
|
|
|
Agent access: `partial` — Agent company-model REST / native `call_api` discovery and
|
|
bound runtime context; adapter/account inventories remain board-only.
|
|
|
|
Policy: Run/cost visibility and agent configuration policy; adapter installation/account
|
|
login/session control require board/admin.
|
|
|
|
Evidence: `source-only` — [implementation](../../server/src/routes/agents.ts#L6608) at
|
|
the reviewed commit above.
|
|
|
|
Verification: `not-run` — exercise a listed permitted operation with actual agent
|
|
credentials/run context; inspect its result and applicable persistence/attribution.
|
|
Assert the relevant denied actor, owner, company or mode from Policy. Review the
|
|
remaining operations before qualifying the whole capability.
|
|
|
|
Runner discovery exposes `supportedRunners` and `defaultRunner`; it describes
|
|
qualified selection, not successful authentication or task execution. Native
|
|
Claude retains existing account grants and company/responsible-user boundaries.
|
|
Source: [adapter discovery](../../server/src/adapters/registry.ts).
|
|
|
|
Gaps: Raw instance adapter listing requires board, while company model discovery exists
|
|
for eligible agents.
|
|
|
|
Scoped source-only evidence: [adapter discovery](../../server/src/routes/adapters.ts)
|
|
reports supported runners/effective default for the selected company/environment;
|
|
[selection policy](../../server/src/services/agent-runner-selection.ts) reads
|
|
server-owned immutable sandbox facts without provisioning. New Codex defaults
|
|
and explicit overrides follow the [shared runner contract](../../packages/shared/src/agent-runner.ts);
|
|
Claude follows its qualified rollout described above. The board inventory does not grant a
|
|
native agent an equivalent discovery binding. See
|
|
[probe restrictions](./execution-environments.md#probe) for acquiring qualification.
|
|
An absent forced-Kubernetes environment is an unqualified sandbox target, never
|
|
a local target. Discovery and automatic creation keep the Legacy path without
|
|
provisioning it; explicit Paperclip selection returns qualification guidance.
|
|
The existing execution path owns lazy environment creation. Saved runners remain
|
|
unchanged. This is source/control evidence, not live Kubernetes qualification.
|
|
|
|
## `validation`
|
|
|
|
Capability ID: `runs-adapters/validation`.
|
|
|
|
Review: `baseline`.
|
|
|
|
API: `present` — representative operation IDs:
|
|
|
|
- `POST /api/companies/{companyId}/adapters/{type}/test-environment`.
|
|
|
|
Agent access: `partial` — Permitted agent-creation validation through REST / native
|
|
`call_api` / CLI; account login requires its operator.
|
|
|
|
Policy: Run/cost visibility and agent configuration policy; adapter installation/account
|
|
login/session control require board/admin.
|
|
|
|
Evidence: `source-only` — [implementation](../../server/src/routes/agents.ts#L6608) at
|
|
the reviewed commit above.
|
|
|
|
Verification: `not-run` — exercise a listed permitted operation with actual agent
|
|
credentials/run context; inspect its result and applicable persistence/attribution.
|
|
Assert the relevant denied actor, owner, company or mode from Policy. Review the
|
|
remaining operations before qualifying the whole capability.
|
|
|
|
Gaps: Environment test path checks creation/configuration policy; missing provider auth
|
|
must use its owner setup flow.
|
|
|
|
Scoped source review: [test authorization and resolution](../../server/src/routes/agents.ts)
|
|
requires same-company `agents:create`, saved-agent update access when supplied,
|
|
allowed environment selection, and normal secret/responsible-user checks. An
|
|
unchanged saved runner avoids new-creation policy but still receives selected
|
|
runtime validation. [Native readiness](../../server/src/services/native-runtime/setup-readiness.ts)
|
|
tests native Codex startup/model/account and bounded teardown; an authentication
|
|
or Legacy CLI check cannot replace that runtime evidence. Missing dependencies,
|
|
credentials, invalid models and incompatible settings fail without silently
|
|
changing runners. Account login remains board/owner-bound.
|
|
|
|
Scoped artifact-preparation source evidence: [native preparation](../../server/src/services/native-runtime/native-session-executor.ts)
|
|
can overlap runner and default image-harness work only when the selected command
|
|
runner declares concurrent sync support. Current executable hash, metadata,
|
|
transport, and final-path checks still precede dispatch. The caller waits for
|
|
both operations on failure. Explicit harness uploads and npm installs remain
|
|
serial. This changes no API or agent grant. The
|
|
[real-shell controls](../../server/src/services/native-runtime/native-artifact-preparation.test.ts)
|
|
do not qualify the whole validation capability or a live response-time target.
|
|
|
|
Scoped backend-preparation source evidence: remote native Codex can prepare its
|
|
managed GitHub transport during fresh assigned-MCP discovery. The session claim,
|
|
wake binding, review assignment and complete gateway launch binding checks still
|
|
precede that work. Provider startup waits for both results. Failures drain both
|
|
operations before the existing run cleanup releases any created GitHub access.
|
|
No grant, token, authority cache or provider dispatch bypass is added. The
|
|
[executor controls](../../server/src/services/native-runtime/native-session-executor.test.ts)
|
|
remain separate from live latency and permitted/denied agent acceptance.
|
|
|
|
For a linked Codex subscription with server-resolved managed credential provenance,
|
|
setup checks the resolved owner and stages a private probe copy before local or
|
|
remote isolation. Without a selected API key, an unbound linked `CODEX_HOME` is
|
|
rejected with explicit Legacy
|
|
or managed-account guidance. Caller configuration cannot supply that provenance. Selected `CODEX_API_KEY` and
|
|
`OPENAI_API_KEY` authentication skips unrelated subscription reads and refresh
|
|
bindings, matching task materialization. The fake-credential controls verify key
|
|
precedence without changing the account source or exposing either credential.
|
|
The general native
|
|
home materializer retains its no-follow symlink guard. Refresh still targets the
|
|
checked account source, and confirmed bounded retirement removes its private
|
|
copy. Unconfirmed retirement retains the existing cleanup block and owned state.
|
|
Failures before probe handoff remove only the owned temporary preparation root;
|
|
local daemon resolution occurs before credential staging. Once a probe is handed
|
|
off, unconfirmed retirement still retains its recovery state.
|
|
[Existing fake-credential setup controls](../../server/src/services/native-runtime/setup-readiness.test.ts)
|
|
exercise linked/regular sources and failure cleanup. This adds no credential-read
|
|
API, agent login authority or cross-company account access. Its source-only
|
|
evidence does not qualify a live permitted/denied agent operation.
|
|
|
|
Verification for this scope remains `not-run`: use an admitted agent REST/CLI
|
|
validation path, assert missing grants and cross-company targets/accounts are
|
|
denied, then prove the useful task/follow-up separately. `hire_agent` inherits its
|
|
caller's runtime; do not assume its binding accepts arbitrary runner or account
|
|
settings. See [creation access](./agents.md#hire).
|
|
|
|
## `runs`
|
|
|
|
Capability ID: `runs-adapters/runs`.
|
|
|
|
Review: `baseline`.
|
|
|
|
Scoped source-only timing evidence: workspace preparation spans carry only the
|
|
existing hashed run ID. Controller startup phase spans carry no custom attributes.
|
|
Native controller setup and settlement phases use that same run hash, including
|
|
assigned MCP discovery; neither tool definitions nor credentials are recorded.
|
|
Both retain operator-controlled tracing; unconfigured clients stay silent.
|
|
This adds no agent API, credential access, run-log write, or recovery authority.
|
|
See [the tracing contract](../../doc/observability.md#controller-preparation-phases).
|
|
Live latency verification remains separate from the existing access baseline.
|
|
|
|
API: `present` — representative operation IDs:
|
|
|
|
- `GET /api/heartbeat-runs/{runId}`.
|
|
- `GET /api/heartbeat-runs/{runId}/log`.
|
|
- `GET /api/heartbeat-runs/{runId}/events`.
|
|
- `GET /api/heartbeat-runs/{runId}/workspace-operations`.
|
|
- `GET /api/heartbeat-runs/{runId}/issues`.
|
|
- `GET /api/companies/{companyId}/heartbeat-runs`.
|
|
- `GET /api/companies/{companyId}/live-runs`.
|
|
- `GET /api/issues/{id}/runs`.
|
|
- `GET /api/issues/{id}/recovery-actions`.
|
|
|
|
Agent access: `available` — REST / native call_api / CLI run, plus the listed
|
|
read-only paths through the default queue and HTTP/2 sandbox callback bridge.
|
|
The sandbox uses its injected run credential. See
|
|
[run diagnostics](../../skills/paperclip/references/run-diagnostics.md) and the
|
|
[activity access contract](activity.md#runs).
|
|
|
|
Policy: Same company, company-scope read authority and run/task visibility still
|
|
apply. Task-bound history and recovery records require task read authority.
|
|
Each run-linked task is filtered by the caller's task-read predicate; a readable
|
|
company run cannot expose inaccessible private task titles. Existing content
|
|
and credential redaction apply. Adapter installation, account login, session
|
|
control, recovery writes and raw provider-trace administration retain their
|
|
existing board/admin or dedicated-tool gates.
|
|
|
|
Evidence: `source-only` — diagnostic scope reviewed at
|
|
`f10210990a3c9cad1a4359318388f237de3169dd` in the
|
|
[bridge route list](../../packages/adapter-utils/src/sandbox-callback-bridge.ts),
|
|
[run routes](../../server/src/routes/agents.ts),
|
|
[task-link route](../../server/src/routes/activity.ts), and
|
|
[private-run regression suite](../../server/src/__tests__/heartbeat-run-privacy-routes.test.ts).
|
|
|
|
Verification: `not-run` for a live sandbox using the updated routes. Bridge and
|
|
controller fixtures cover permitted reads, denied writes, redaction and private
|
|
task-link filtering. After deployment, verify with an actual run identity and
|
|
assert foreign-company, private-task and restricted-mode denial. Source review,
|
|
board reads and skipped fixtures do not qualify that live path.
|
|
|
|
Gaps: Provider trace reveals/downloads require instance-admin and cannot be counted as
|
|
ordinary run output access.
|
|
The new bridge surface does not qualify retry, cancellation, workspace repair or
|
|
session-control access. Deployed diagnostic usefulness remains unverified.
|
|
|
|
## `session`
|
|
|
|
Capability ID: `runs-adapters/session`.
|
|
|
|
Review: `baseline`.
|
|
|
|
API: `present` — representative operation IDs:
|
|
|
|
- `POST /api/agents/{id}/runtime-state/reset-session`.
|
|
- `GET /api/agents/{id}/task-sessions`.
|
|
|
|
Agent access: `restricted` — Board session controls; native server-owned session
|
|
continuation.
|
|
|
|
Policy: Run/cost visibility and agent configuration policy; adapter installation/account
|
|
login/session control require board/admin.
|
|
|
|
Evidence: `source-only` — [implementation](../../server/src/routes/agents.ts#L6608) at
|
|
the reviewed commit above.
|
|
|
|
Verification: `not-run` — assert the documented agent denial with an owned test fixture;
|
|
verify any listed agent request/result path separately. A delegated operation needs its
|
|
own policy and access review.
|
|
|
|
Gaps: Task-session listing and execution-context reset require board agent
|
|
management at their HTTP routes. Native `call_api` preserves these denials; native
|
|
continuation remains server-owned.
|
|
|
|
Scoped source-only evidence: [configuration changes](../../server/src/services/agent-configuration.ts)
|
|
and [native execution/recovery](../../server/src/services/native-runtime/native-session-executor.ts)
|
|
retain existing execution on unrelated edits and use recorded run configuration
|
|
for active/recovered runs. Explicit runner changes use revisions and session
|
|
invalidation. Verify saved configuration, current versus historical run identity,
|
|
restart and follow-up without granting session-reset authority to an agent.
|
|
|
|
Scoped source review: 2026-10-13, the recovery correction against
|
|
`ea6c8eb5e16d61111968f633a66748b397b64a3e` reuses
|
|
[completed onboarding handoff validation](../../server/src/services/chat-completion-delivery.ts)
|
|
before applying the issue-terminal backstop. The company, parent origin/status,
|
|
assignee, completed child and remaining children must match. Only that backstop
|
|
is suppressed for the validated report; process-death and controller/native
|
|
ownership checks still apply. No agent gains session or recovery control.
|
|
PostgreSQL regressions cover valid native/Legacy callbacks and rejected bindings;
|
|
revised live execution and actor authorization remain `not-run`.
|
|
|
|
Scoped source-only evidence: [configuration changes](../../server/src/services/agent-configuration.ts)
|
|
and [native execution/recovery](../../server/src/services/native-runtime/native-session-executor.ts)
|
|
retain existing execution on unrelated edits and use recorded run configuration
|
|
for active/recovered runs. Explicit runner changes use revisions and session
|
|
invalidation. Verify saved configuration, current versus historical run identity,
|
|
restart and follow-up without granting session-reset authority to an agent.
|
|
|
|
Scoped Evidence: `source-only` — the
|
|
[native transport](../../packages/paperclip-runner/src/live/runnerd-codex-transport.ts)
|
|
joins owned startup before certifying cleanup. Rejected duplicates cannot replace
|
|
that owner or mutate recovery state. Unconfirmed preparation or registration
|
|
retains recovery state; late registration may release only its own route and
|
|
cannot launch after close. Shutdown interrupts readiness without granting
|
|
authority over an unauthenticated adopted process.
|
|
|
|
Scoped Verification: `not-run` — verify allowed/denied access using the actual
|
|
actor independently from the credential-free ownership controls. This correction
|
|
adds no account-setup, cleanup-override or session-reset authority. The real native
|
|
readiness/recovery fixtures and installed provider acceptance remain separate gates.
|
|
|
|
Scoped shutdown source review: 2026-10-14, against literal
|
|
`651a3de64fc943216cc414b64b1443809f9499da`. The suspension barrier bounds remote
|
|
state reads by its remaining deadline and rejects late proof. Intentional
|
|
[provider ingress shutdown](../../server/src/realtime/runner-prp-outbound.ts)
|
|
joins physical socket closure and retires the connection owner before endpoint
|
|
release. Unconfirmed termination stays blocked. Existing fake-peer and delayed
|
|
read controls are source evidence; this changes no actor, company, account or
|
|
session-reset permission. Operation-level verification remains `not-run` and
|
|
the failed Test setup does not qualify successful live cleanup.
|