Skip to content

refactor: own model discovery by runtime lifecycle#111173

Merged
steipete merged 31 commits into
mainfrom
refactor/lifecycle-model-auth-catalog
Jul 19, 2026
Merged

refactor: own model discovery by runtime lifecycle#111173
steipete merged 31 commits into
mainfrom
refactor/lifecycle-model-auth-catalog

Conversation

@steipete

@steipete steipete commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Related: #90741

What Problem This Solves

Model catalog consumers repeatedly rebuilt auth stores, provider registries, and projected catalogs on request-time paths. That duplicated filesystem and plugin discovery across agent context, provider auth, session status, replies, cron, doctor, model listing, the TUI, and media tools, while separate caches could expose mismatched auth, registry, and catalog generations.

Why This Change Was Made

This completes the lifecycle-owned catalog program. Gateway/config/auth publication now builds one atomic prepared model runtime generation per configured agent, synchronously stales the previous owner, and lets request paths fork mutable auth/registry state while reusing the generation's catalog snapshot. The context, provider-auth, session-status, auto-reply, cron, doctor, media-understanding, model-list, TUI, subagent spawn, PDF, and image-runtime consumers now use that prepared generation.

The request-time model discovery caches and their obsolete export paths are deleted. The released plugin SDK loadModelCatalog entry point remains only as a deprecated compatibility wrapper; all internal and bundled callers use the lifecycle-owned API.

Thanks to @zeroaltitude for the original performance investigation, measurements, and sponsored direction.

User Impact

Model-aware commands and runtime paths reuse a coherent catalog snapshot instead of paying repeated discovery cost. Auth/config publication swaps the whole generation together, so callers do not observe a new auth store paired with an old registry or catalog. PDF and image sub-runs inherit the parent generation rather than rediscovering models.

Concurrent standalone activations for the same owner are serialized through a per-owner FIFO, which prevents competing direct-command generations from continually staling one another. The late-added subagent structured-output validation path also consumes the prepared catalog rather than restoring request-time discovery.

Evidence

Node 24 benchmark, 20 batches of 25 operations (500 total):

Path p50 p95
Request-time discovery 1027.666 us 1094.410 us
Lifecycle snapshot 3.349 us 5.864 us
  • p50 speedup: 306.81x
  • one-time lifecycle build: 40.479 ms
  • full pnpm check:changed gate: green on Blacksmith Testbox tbx_01kxwxdcjwtxe1f81f3da6njqz (run 29682735289) across formatting, SDK API/package/surface/deprecation/boundary checks, all five TypeScript lanes, complete core/extensions/scripts lint, schema/database/media/sidecar/import-cycle/webhook/pairing guards
  • final CI-failure-surface gate after the dead-export and isolated-runtime fixes: green on Blacksmith Testbox tbx_01kxx0860989xwsmtty7jskzve (run 29684196462) across dependency/export deadcode, all test/script/root type lanes, Plugin SDK surface, and 60 focused lifecycle/BTW tests
  • post-rebase focused lifecycle, subagent, swarm, PDF/image tool, and Telegram suites: 268/268 green
  • media/PDF registration and tool suites after the final model-context extraction: 153/153 green
  • final protocol/QuickJS moving-main intersection: 145/145 focused gateway, Plugin SDK, subagent/swarm, compaction, and BTW tests green
  • mandatory full-tree autoreview found and drove closure of generation, workspace, read-only identity, provider-alias, and standalone-activation lifecycle races; each follow-up patch received a fresh clean review
  • packaged build was green before the final internal-only lifecycle fixes; the full changed gate revalidated their type, lint, formatting, SDK, and boundary surfaces

Designed Follow-up

The Plugin SDK compatibility facade still owns process-global API-provider publication; each prepared generation snapshots it into its per-registry runtime. Moving publication ownership itself out of process-global state is a designed follow-up, intentionally outside this program.

AI Assistance

Codex assisted with implementation, tests, review, benchmark execution, and PR drafting under maintainer direction.

@steipete
steipete requested a review from a team as a code owner July 19, 2026 03:25
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: discord Channel integration: discord channel: slack Channel integration: slack channel: telegram Channel integration: telegram gateway Gateway runtime cli CLI command changes scripts Repository scripts commands Command implementations agents Agent runtime and tooling size: XL maintainer Maintainer-authored PR labels Jul 19, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6f598315bc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +1612 to +1616
if ((!options?.authStorage || !options?.modelRegistry) && !preparedSnapshot) {
// Synchronous callers must enter through a lifecycle that already published discovery.
// Falling back to an empty registry turns a stale/pending generation into a false model miss.
throw new Error(
`prepared model runtime is not published for synchronous model resolution (${resolvedAgentDir}); use resolveModelAsync before lifecycle publication`,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Prepare model discovery before synchronous doctor resolution

In a fresh openclaw doctor process, no gateway or agent-run lifecycle has published a prepared snapshot before src/commands/doctor/repair-sequencing.ts:255 invokes collectActiveToolSchemaProjectionWarnings. That collector calls resolveModel without prepared stores, so this new unconditional throw is caught and reported as a model-loading warning for every agent, while the subsequent schema validation loses the model API/compatibility context. Either the doctor flow must publish/load a generation first or this synchronous caller must receive prepared stores; the current unit test mocks resolveModel, so it does not exercise this failure.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. labels Jul 19, 2026
@clawsweeper

clawsweeper Bot commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 19, 2026, 8:27 AM ET / 12:27 UTC.

Summary
The PR replaces request-time model/auth/catalog discovery with lifecycle-owned prepared runtime generations across core and bundled consumers while retaining loadModelCatalog as a deprecated Plugin SDK wrapper.

Reproducibility: not applicable. this is a refactor PR rather than a report of broken existing behavior. The relevant evidence is the supplied after-fix benchmark and focused runtime suites for the lifecycle path.

Review metrics: 1 noteworthy metric.

  • Plugin SDK catalog transition: 2 public readers added; 1 legacy reader retained as deprecated. This is a durable external compatibility surface, so the API direction needs explicit approval rather than relying only on internal caller migration.

Stored data model
Persistent data-model change detected: durable storage schema: src/agents/agent-model-discovery.auth.test.ts, durable storage schema: src/gateway/worker-environments/inference-runtime.test.ts, migration/backfill/repair: docs/agent-runtime-architecture.md, persistent cache schema: src/infra/tsdown-config.test.ts, persistent cache schema: src/plugin-sdk/agent-runtime-model-catalog-contract.test.ts, serialized state: src/gateway/server.models-voicewake-misc.test.ts, and 10 more. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Obtain explicit maintainer approval for the Plugin SDK compatibility and deprecation policy before merge.

Risk before merge

  • [P1] The branch changes a released Plugin SDK contract by adding prepared-catalog readers and retaining loadModelCatalog only as a deprecated wrapper; maintainers must explicitly accept the permanent API and deprecation path.
  • [P1] Prepared runtime generations now carry auth, registry, and catalog state through gateway, agent, media, and channel paths, so an upgrade must preserve existing agent-scoped auth and provider-routing behavior across a config/auth publication boundary.

Maintainer options:

  1. Approve the SDK and upgrade contract (recommended)
    Accept the deprecated compatibility wrapper and the new public lifecycle readers after confirming that existing plugin callers and persisted agent auth profiles retain their current behavior.
  2. Narrow the public surface before merge
    Keep the prepared-runtime refactor but remove or redesign the additional public Plugin SDK exports if maintainers do not want to support them as a durable contract.
  3. Pause for API direction
    Leave this PR open until an owner decides the supported Plugin SDK migration and deprecation policy.

Next step before merge

  • [P2] A protected maintainer-labeled PR still needs a human decision on the permanent Plugin SDK surface; there is no narrow mechanical repair to dispatch.

Maintainer decision needed

  • Question: Should OpenClaw make getPreparedModelCatalogSnapshot and loadPreparedModelCatalog permanent public Plugin SDK APIs while retaining loadModelCatalog as the deprecated source-compatible wrapper?
  • Rationale: The implementation preserves existing callers, but the durable public Plugin SDK shape and the eventual removal policy cannot be inferred safely from code alone.
  • Likely owner: steipete — The feature history and current branch show direct ownership of the lifecycle and Plugin SDK transition.
  • Options:
    • Approve the scoped SDK transition (recommended): Accept the two lifecycle-owned readers as the forward API and retain the legacy wrapper with its stated deprecation path.
    • Keep the lifecycle seam internal: Require the branch to avoid new public exports and provide a narrower internal migration path instead.

Security
Cleared: The dependency delta is narrow and exact-pinned, with no observed new install hook, permission expansion, secret handling change, or unrelated third-party execution path in the supplied diff.

Review details

Best possible solution:

Approve a single public SDK transition only if maintainers accept the deprecated legacy wrapper plus the two lifecycle-owned readers, then land with the documented one-generation ownership model and existing per-agent auth compatibility intact.

Do we have a high-confidence way to reproduce the issue?

Not applicable: this is a refactor PR rather than a report of broken existing behavior. The relevant evidence is the supplied after-fix benchmark and focused runtime suites for the lifecycle path.

Is this the best way to solve the issue?

Unclear until maintainers confirm the Plugin SDK contract. The implementation follows the repository’s preferred lifecycle-owned ownership shape, but exposing the new SDK readers and deprecating the existing entry point is a product/API decision.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against e24420bc1c08.

Label changes

Label justifications:

  • P2: The PR is a large but non-emergency runtime refactor affecting model discovery, provider routing, and authentication behavior.
  • merge-risk: 🚨 compatibility: It adds public Plugin SDK readers and changes the operational contract of the existing catalog reader through a deprecated wrapper.
  • merge-risk: 🚨 auth-provider: Prepared generations snapshot credential-backed auth and provider registries, so incorrect upgrade or publication behavior could affect existing provider routing.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body supplies after-fix terminal evidence: a 500-operation Node 24 benchmark, focused lifecycle/media/channel suites, and cited Blacksmith changed-gate runs; it directly supports the performance and lifecycle behavior claimed.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body supplies after-fix terminal evidence: a 500-operation Node 24 benchmark, focused lifecycle/media/channel suites, and cited Blacksmith changed-gate runs; it directly supports the performance and lifecycle behavior claimed.
Evidence reviewed

What I checked:

  • Prepared-runtime implementation: The branch introduces lifecycle-owned prepared catalog readers and migrates the public compatibility facade so new callers can read a published snapshot while legacy callers retain loadModelCatalog. (src/plugin-sdk/agent-runtime.ts, f1f8431b5b56)
  • Feature provenance: The lifecycle model-runtime program appears to originate with the commit that introduced prepared model/auth snapshots and carried them into hot agent paths. (src/agents/prepared-model-runtime.ts, 558853bc474c)
  • Prior review continuity: The earlier doctor, generation-rebinding, simple-completion, auth-invalidation, and startup-prewarm findings were followed by targeted fix commits; the latest completed ClawSweeper cycle at d4cea75 reported no remaining line-level finding but retained the SDK-policy decision. (src/agents/prepared-model-runtime.ts, f1f8431b5b56)
  • Dependency review surface: The only declared dependency delta adds exact-pinned ipaddr.js at the root because root typecheck/test projects compile @openclaw/net-policy directly; the PR’s dependency and security checks reported success. (package.json, f1f8431b5b56)
  • Real behavior evidence: The PR body reports an after-fix Node 24 benchmark over 500 operations, a one-time lifecycle build measurement, focused lifecycle/media/channel suites, and Blacksmith changed-gate runs; this is meaningful terminal-based proof for the refactor. (f1f8431b5b56)

Likely related people:

  • steipete: Authored the lifecycle snapshot implementation and all listed follow-up commits that resolved earlier generation, activation, and build-boundary concerns. (role: feature owner and recent area contributor; confidence: high; commits: 558853bc474c, ad51a2d75534, 7d72c2f459e5; files: src/agents/prepared-model-runtime.ts, src/plugin-sdk/agent-runtime.ts, src/gateway/worker-environments/inference-runtime.ts)
  • zeroaltitude: The PR credits the original investigation and benchmark direction, and the related precursor work focuses on the same model-discovery cost and auth/catalog consistency problem. (role: performance investigation originator; confidence: medium; files: src/agents/models-config.ts, src/agents/model-catalog.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (9 earlier review cycles; latest 8 shown)
  • reviewed 2026-07-19T03:50:08.335Z sha 7351bd4 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-19T04:32:43.887Z sha 7351bd4 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-19T08:25:43.789Z sha 3a73de1 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-19T08:59:39.994Z sha 3a73de1 :: found issues before merge. :: [P1] Rebind all async model decisions to the committed generation | [P1] Carry the prepared generation through simple completions
  • reviewed 2026-07-19T09:41:58.652Z sha 3a73de1 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-19T10:33:38.804Z sha c393095 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-19T11:11:28.561Z sha 7be0045 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-19T11:23:17.728Z sha d4cea75 :: needs maintainer review before merge. :: none

@steipete
steipete force-pushed the refactor/lifecycle-model-auth-catalog branch from 67f3fa9 to 7351bd4 Compare July 19, 2026 03:47
@clawsweeper clawsweeper Bot added status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 19, 2026
@zeroaltitude

Copy link
Copy Markdown
Contributor

Love seeing this get attention! Thank you so much!

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Jul 19, 2026
@steipete
steipete force-pushed the refactor/lifecycle-model-auth-catalog branch from 7351bd4 to 3a73de1 Compare July 19, 2026 08:22

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3a73de1671

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

: undefined);
const workspaceDir =
options?.workspaceDir ?? preparedSnapshot?.workspaceDir ?? derivedWorkspaceDir;
const normalizedRef = normalizeProviderModelRef({ provider, modelId, cfg, workspaceDir });

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Rebind async resolution to the published generation

When a config reload completes after the caller captured cfg/agentDir, loadPreparedModelRuntimeSnapshot deliberately rebinds this read to the newly committed owner, but this function adopts only its workspace and continues using the caller's old cfg and resolvedAgentDir for alias normalization, provider config, auth selection, suppression, and runtime hooks. This can combine the new generation's registry and credentials with removed routes, old endpoints, or stale provider policy; use the prepared snapshot's config and agent directory consistently whenever it supplied the stores.

Useful? React with 👍 / 👎.

Comment on lines +244 to +248
const resolved = await (params.modelResolver ?? resolveModelAsync)(
params.provider,
params.modelId,
params.agentDir,
params.cfg,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Carry the committed generation through simple completions

For TTS, thread titles, progress narration, and the other simple-completion callers, this asynchronous resolver can return a model and stores from a generation committed during a hot reload, but the remainder of this helper still performs route selection, auth lookup, header materialization, and cost/runtime policy with the stale params.cfg and params.agentDir. Even rebinding inside resolveModelAsync cannot fix those downstream reads because its result does not expose the committed context; acquire or return the lifecycle snapshot here so the whole completion uses one generation.

Useful? React with 👍 / 👎.

@steipete
steipete force-pushed the refactor/lifecycle-model-auth-catalog branch from c23934d to f1f8431 Compare July 19, 2026 12:22
@steipete
steipete merged commit 06f5f73 into main Jul 19, 2026
119 checks passed
@steipete
steipete deleted the refactor/lifecycle-model-auth-catalog branch July 19, 2026 12:30
@steipete

Copy link
Copy Markdown
Contributor Author

Merged via squash.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f1f8431b5b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +213 to +220
const preparedRuntimeLease = params.preparedModelRuntime
? { snapshot: params.preparedModelRuntime, release: () => {} }
: await acquireAgentRunPreparedModelRuntime({
agentDir: params.agentDir,
...(params.agentId ? { agentId: params.agentId } : {}),
config: params.cfg ?? {},
inheritedAuthDir: resolveDefaultAgentDir(params.cfg ?? {}),
...(runtimeParams.workspaceDir ? { workspaceDir: runtimeParams.workspaceDir } : {}),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Re-select image routing from the acquired generation

When a hot reload commits while runMediaEntry is awaiting image loading/normalization (src/media-understanding/runner.entries.ts:799-828), this lease may rebind to the new config generation, but subsequent resolution still uses the provider, model, auth-profile options, and workspace computed from the old request before the lease. Because the workspace passed here is also treated as explicitly preserved by acquireAgentRunPreparedModelRuntime, image preprocessing can combine the new registry/config with a removed model/profile or the previous agent workspace, causing an avoidable unknown-model/auth failure or routing through stale workspace policy. Acquire the generation before selecting the media entry, or re-select all image routing facts from preparedRuntime.config after acquisition.

Useful? React with 👍 / 👎.

@steipete steipete self-assigned this Jul 19, 2026
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 20, 2026
* refactor(agents): prepare model runtime catalogs

Build lifecycle-owned model and auth snapshots, carry prepared stores into hot agent paths, and serialize config/auth publication.

Credits @zeroaltitude's openclaw#90741 investigation and benchmark approach.

* refactor: finish lifecycle-owned model discovery

* fix: align prepared model catalog contracts

* test: align lifecycle catalog mocks

* test: fix prepared catalog type fixtures

* refactor: split prepared model runtime ownership

* fix: import prepared runtime replacement gate type

* test: split media runtime coverage

* test: preserve image auth fixture key types

* test: isolate lifecycle gate fixtures

* chore: keep release changelog owned

* refactor: finish prepared model catalog migration

* test: keep catalog review fixtures scanner-safe

* refactor: preserve lifecycle model runtime ownership

* fix: close prepared runtime lifecycle races

* fix: preserve compaction workspace fallback

* chore: document btw generation rebinding

* fix: preserve prepared generation boundaries

* fix: keep model-list discovery flag explicit

* fix: serialize standalone model runtime activation

* refactor: migrate subagent model catalog lookup

* refactor: clarify doctor catalog lookup seam

* chore: refresh plugin sdk api baseline

* test: migrate swarm catalog dependency

* refactor(telegram): rename runtime catalog seam

* refactor: extract model-aware tool context

* test(models): isolate lifecycle catalog fixtures

* refactor(agents): avoid btw parameter rebinding

* fix(net-policy): align root ipaddr dependency

* fix(build): keep net policy dependency bundled

* fix(deadcode): document net policy compile dependency
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling channel: discord Channel integration: discord channel: slack Channel integration: slack channel: telegram Channel integration: telegram cli CLI command changes commands Command implementations dependencies-changed PR changes dependency-related files docs Improvements or additions to documentation gateway Gateway runtime maintainer Maintainer-authored PR merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. scripts Repository scripts size: XL status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants