Skip to content

v0.53.0

Choose a tag to compare

@b10x-bot b10x-bot released this 17 Oct 03:50
· 670 commits to main since this release
0f8be46

connectors 0.53.0

  • OpenRouter management through the catalog provider (openrouter, profile
    openrouter.api-key, pinned OpenRouter OpenAPI document): the reads key.get,
    workspaces.list and keys.list, and the required-approval write key.create
    (docs/catalog-openrouter.md).

  • A write that creates a credential holds it in custody. key.create sends 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) beside pods.list.

  • GitLab catalog reads file.raw and project.languages: a repository file's exact UTF-8 text at a ref (a file that is not UTF-8 is refused upstream_protocol, one over the 4 MiB provider response bound capacity, 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_PARENT to 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_unknown while holding a created key is reported as
    custody failed, though the connection may have been published; check connections list on
    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) in keys.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"):

  1. Install this release's connectors and connectors-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
  1. Edit the configuration: the new revisions and SHA-256, key.create in the router's
    operations, the custody table and the inference alias:
[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"]
  1. Enter the management key through the protected prompt (a fresh install), or renew the
    saved one, which the changed revision leaves pending:
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"
  1. Once per alias: approvals key-init --adapter router and approvals policy-set --adapter router --input-file policy.json with {"operations":["key.create"]} (an existing policy is republished
    with --expected-revision).

  2. 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.json

The answer is the new inference connection and the key's hash; the key is in no output.