Repository navigation
v0.53.0
connectors 0.53.0
-
OpenRouter management through the catalog provider (
openrouter, profile
openrouter.api-key, pinned OpenRouter OpenAPI document): the readskey.get,
workspaces.listandkeys.list, and the required-approval writekey.create
(docs/catalog-openrouter.md). -
A write that creates a credential holds it in custody.
key.createsends the create once;
the key OpenRouter returns once goes straight into the protected store as a new connection
of the alias and profile[adapters.<alias>.permissions.custody]names for the operation,
and the caller receives only that connection's reference and the key's hash, never the key.
A create with no custody target, or a declaration and target that disagree, is refused
before anything is sent; a timeout or crash after dispatch is an unknown outcome that is
never re-sent (docs/local-mutation-ledger.md, "Created credentials"). -
Runpod: the read
billing.pods(PodBilling,GET /v1/billing/pods) besidepods.list. -
GitLab catalog reads
file.rawandproject.languages: a repository file's exact UTF-8 text at a ref (a file that is not UTF-8 is refusedupstream_protocol, one over the 4 MiB provider response boundcapacity, on its raw bytes) and a project's languages with their percentages; verified against fixtures only. -
An owner no longer outlives its state directory. A Unix owner exits, as a shutdown request
stops it, once its socket is no longer in its state directory or the state directory's path no
longer names the directory it opened (removed or replaced); it checks at least every 250 ms and
lets connected clients finish for at most 5 seconds. Such an owner was unreachable and, with its
directory deleted, never became idle, so it ran until killed. A Windows owner holds its state
directory open, so that directory cannot be removed beneath it; it has no such check. Idle
retirement after 10 minutes is unchanged. -
Journey tests stop the owners they start (#175). A CLI built with debug assertions passes
CONNECTORS_TEST_OWNER_PARENTto the owner it starts on Unix, and that owner exits once the named
process has ended; a release build reads no such variable. The catalog journey harness names its
own test process, so its owners end with it however it ends, and on drop, pass or panic, it stops
every owner of its state directory: an owner that has not exited within 5 seconds of the
harness's shutdown request is killed through its pidfd (Linux) and waited for. -
A custody store that answers
outcome_unknownwhile holding a created key is reported as
custodyfailed, though the connection may have been published; checkconnections liston
the custody alias before creating again. -
The HTTP client's buffers that held OpenRouter's answer are not wiped after the key moves into
custody. -
An owner crash between OpenRouter's applied answer and the settle recovers the attempt as
unknown, with the key's hash recorded nowhere; nothing is re-sent, and the created key is
visible (by hash and label) inkeys.list. -
The ignored CLI journeys, custody included, run in no CI job.
An install that already has the router alias with the three OpenRouter reads
(full guide: docs/catalog-openrouter.md, "Creating a key" and "Moving an existing install"):
- Install this release's
connectorsandconnectors-catalog-provider, then print each
native configuration's revision and the provider's SHA-256:
connectors-catalog-provider --local-config /absolute/path/catalog.json --print-local-bootstrap
connectors-catalog-provider --local-config /absolute/path/inference.json --print-local-bootstrap
sha256sum /absolute/path/connectors-catalog-provider- Edit the configuration: the new revisions and SHA-256,
key.createin the router's
operations, the custody table and theinferencealias:
[adapters.router.permissions]
profiles = ["openrouter.api-key"]
operations = ["key.get", "workspaces.list", "keys.list", "key.create"]
[adapters.router.permissions.custody]
'key.create' = { adapter = "inference", profile = "openrouter.api-key" }
[adapters.inference]
instance_id = "openrouter-inference"
adapter_id = "catalog"
configuration_revision = "REPLACE_FROM_BOOTSTRAP"
protocol = "v1alpha1"
private_protocol = "connectors-private/2"
startup = "on-demand"
restart = "never"
[adapters.inference.permissions]
profiles = ["openrouter.api-key"]
operations = ["key.get"]
[adapters.inference.executable]
path = "/absolute/path/connectors-catalog-provider"
sha256 = "REPLACE_WITH_EXECUTABLE_SHA256"
args = ["--local-config", "/absolute/path/inference.json"]- Enter the management key through the protected prompt (a fresh install), or renew the
saved one, which the changed revision leavespending:
connectors --output json connections connect --adapter router --profile openrouter.api-key --credential-prompt
connectors --output json connections revalidate --adapter router --connection "$connection" --expected-revision "$revision"-
Once per alias:
approvals key-init --adapter routerandapprovals policy-set --adapter router --input-file policy.jsonwith{"operations":["key.create"]}(an existing policy is republished
with--expected-revision). -
Create one inference key:
approvals prepare,approvals issue --approve-subject <subject_sha256> --proof-output proof.json, then
connectors --output json operations invoke --adapter router --connection "$connection" \
--operation key.create --schema "$schema" --revision "$revision" \
--input-json '{"body":{"name":"agent-inference","limit":5,"limit_reset":"monthly"}}' \
--idempotency-key agent-inference-1 --approval-file proof.jsonThe answer is the new inference connection and the key's hash; the key is in no output.