Skip to content

feat(ext): add observability extension hooks - #666

Open
SantiagoDePolonia wants to merge 4 commits into
mainfrom
feat/otel
Open

feat(ext): add observability extension hooks#666
SantiagoDePolonia wants to merge 4 commits into
mainfrom
feat/otel

Conversation

@SantiagoDePolonia

@SantiagoDePolonia SantiagoDePolonia commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Description

Adds the Core extension seams needed for Pro-owned observability without adding an OpenTelemetry dependency to Core.

  • Register outer HTTP middleware and upstream-call observers through the extension registry.
  • Propagate configured provider instance names, canonical provider types, explicit GenAI operations, and passthrough stream intent.
  • Measure the first successful response-body read for streaming calls and instrument the direct Bedrock AWS SDK path.
  • Add provider-specific passthrough semantics for Cohere, OpenRouter, and Z.ai.
  • Expose the resolved Prometheus metrics endpoint so observability middleware can exclude custom scrape paths.

AI Generated (optional)

Implemented and reviewed with Codex.

Testing

  • Core pre-commit suite: race tests, formatting, module tidy check, performance guard, fix check, and lint.
  • Full Core test suite.
  • Targeted race tests for the extension registry, client hooks, providers, and server paths.
  • Pro unit, race, and end-to-end suites against this worktree.

Summary by CodeRabbit

  • New Features
    • Added extensibility for outer HTTP middleware and upstream model-call observers.
    • Added lifecycle and first-response-chunk monitoring for provider requests.
    • Expanded request metadata with provider, model, operation, status, duration, and streaming details.
    • Improved passthrough route classification for chat, embeddings, and text completion.
  • Bug Fixes
    • Preserved streaming intent through passthrough routing and provider forwarding.
    • Standardized metrics endpoint normalization and fallback behavior.
  • Documentation
    • Clarified extension registration and upstream observer support.

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The pull request adds upstream observer extensions, stream-first-chunk hooks, provider and operation metadata propagation, passthrough semantic enrichment, outer middleware wiring, and centralized metrics endpoint resolution.

Changes

Observability and request metadata

Layer / File(s) Summary
Extension wiring and endpoint resolution
config/*, ext/*, internal/app/app.go, internal/server/http.go
The registry stores outer middleware and upstream observers. The server applies middleware and resolves metrics endpoints through shared config logic.
Observation contracts and stream hooks
ext/upstream.go, internal/llmclient/*, internal/core/*
The extension and client contracts describe upstream calls, results, and first-response-chunk hooks. Client and core metadata carry stream intent and uncertainty.
Provider identity and Bedrock observation
internal/providers/config.go, internal/providers/factory.go, internal/providers/credentials.go, internal/providers/bedrock/*
Provider configuration preserves names. Factory hooks add provider identity. Bedrock emits request, completion, and first-chunk observations.
Provider metadata and passthrough semantics
internal/providers/*, internal/llmclient/operations.go
Provider adapters send operation and model metadata. Passthrough enrichers classify provider endpoints with GenAI operation values.
Passthrough metadata propagation
internal/server/*, internal/core/*
Passthrough workflows preserve stream intent and forward resolved operation, model, provider, and stream-certainty metadata.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Poem

A rabbit watched each stream begin,
While hooks recorded what came in.
Models, names, and routes aligned,
The first bright chunk was marked in time.
Metrics and middleware found their place.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.63% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the main change: adding observability extension hooks.
Description check ✅ Passed The description explains the purpose, key changes, and testing performed, and it follows the repository template.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/otel

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov-commenter

codecov-commenter commented Aug 8, 2026

Copy link
Copy Markdown

@coderabbitai coderabbitai 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.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@config/metrics.go`:
- Around line 22-31: Update ResolveMetricsEndpoint to normalize non-empty
configured endpoints as absolute paths before the reserved /v1 and /p prefix
checks. Ensure relative values such as metrics, v1/models, and ../v1/models are
converted and cleaned into absolute paths, while preserving the existing
conflict fallback to /metrics.

In `@internal/llmclient/client.go`:
- Around line 655-663: Update DoPassthrough so observeFirstChunk is called only
for successful HTTP responses, never for terminal retryable or non-retryable
error responses, while preserving response closure and retry handling. Add a
regression test covering a streaming passthrough request whose error response
body does not trigger OnStreamFirstChunk.

In `@internal/providers/credentials.go`:
- Line 328: Add test coverage for ManagedProviderCredential.buildProvider, using
a named managed provider and factory-installed hooks; assert that both request
and response hook metadata contain the expected Provider and ProviderType
identity after ProviderFactory.Create().

In `@internal/providers/openrouter/passthrough_semantics_test.go`:
- Around line 17-23: Extend the semantic assertions in
internal/providers/openrouter/passthrough_semantics_test.go:17-23 to require
info.AuditPath == "/v1/chat/completions", and in
internal/providers/zai/passthrough_semantics_test.go:17-23 to require
info.AuditPath == "/v1/embeddings"; keep the existing provider, GenAI operation,
and semantic operation checks.

In `@internal/server/http.go`:
- Around line 225-235: In the metrics setup around MetricsEnabled, reject
MetricsEndpoint values equal to or beneath the /debug/pprof route family when
pprof is enabled before appending metricsPath to authSkipPaths. Preserve the
existing route-conflict handling for other endpoints, and add an integration
test covering metrics and pprof enabled together.
- Around line 261-268: Register middleware.Recover() immediately after
redactSensitiveRequestURI() and before the cfg.OuterMiddleware loop in the HTTP
middleware setup, then remove its later registration so outer middleware panics
are recovered. Add a test covering a panic from outer middleware and assert that
the server returns the recovered response.

In `@internal/server/translated_inference_service.go`:
- Around line 453-459: Add the ProviderName field to the fast-path request
construction alongside Model and Stream, populating it with
providerNameFromWorkflow(workflow). Preserve the existing provider-routing
fields and behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 0e82fcf1-e9af-4d02-911f-a118cb4efedc

📥 Commits

Reviewing files that changed from the base of the PR and between c7eeb8a and 5aaef49.

📒 Files selected for processing (63)
  • config/metrics.go
  • config/metrics_test.go
  • ext/ext.go
  • ext/registry.go
  • ext/registry_test.go
  • ext/upstream.go
  • internal/app/app.go
  • internal/app/app_test.go
  • internal/core/passthrough.go
  • internal/core/semantic.go
  • internal/core/semantic_test.go
  • internal/llmclient/client.go
  • internal/llmclient/client_test.go
  • internal/llmclient/hooks.go
  • internal/llmclient/hooks_test.go
  • internal/llmclient/operations.go
  • internal/providers/anthropic/anthropic.go
  • internal/providers/anthropic/chat.go
  • internal/providers/anthropic/chat_stream.go
  • internal/providers/anthropic/passthrough_semantics.go
  • internal/providers/anthropic/responses.go
  • internal/providers/bedrock/bedrock.go
  • internal/providers/bedrock/bedrock_test.go
  • internal/providers/bedrock/chat.go
  • internal/providers/bedrock/chat_stream.go
  • internal/providers/bedrock/observation.go
  • internal/providers/cohere/chat.go
  • internal/providers/cohere/cohere.go
  • internal/providers/cohere/cohere_test.go
  • internal/providers/cohere/embeddings.go
  • internal/providers/cohere/passthrough_semantics.go
  • internal/providers/cohere/passthrough_semantics_test.go
  • internal/providers/config.go
  • internal/providers/config_test.go
  • internal/providers/credentials.go
  • internal/providers/deepseek/passthrough_semantics.go
  • internal/providers/factory.go
  • internal/providers/factory_test.go
  • internal/providers/gemini/gemini.go
  • internal/providers/kilo/passthrough_semantics.go
  • internal/providers/ollama/ollama.go
  • internal/providers/openai/compatible_provider.go
  • internal/providers/openai/passthrough_semantics.go
  • internal/providers/openai/passthrough_semantics_test.go
  • internal/providers/openrouter/openrouter.go
  • internal/providers/openrouter/passthrough_semantics.go
  • internal/providers/openrouter/passthrough_semantics_test.go
  • internal/providers/passthrough.go
  • internal/providers/sglang/passthrough_semantics.go
  • internal/providers/sglang/sglang.go
  • internal/providers/vertex/vertex.go
  • internal/providers/vertex/vertex_test.go
  • internal/providers/vllm/passthrough_semantics.go
  • internal/providers/vllm/vllm.go
  • internal/providers/zai/passthrough_semantics.go
  • internal/providers/zai/passthrough_semantics_test.go
  • internal/providers/zai/zai.go
  • internal/server/handlers_test.go
  • internal/server/http.go
  • internal/server/http_test.go
  • internal/server/passthrough_semantic_enrichment_test.go
  • internal/server/passthrough_service.go
  • internal/server/translated_inference_service.go

Comment thread config/metrics.go
Comment thread internal/llmclient/client.go Outdated
}

cfg := buildProviderConfig(rawCfg, s.resilience)
cfg.Name = name

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.

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

test_file="$(fd '^credentials_test\.go$' internal/providers | head -n1)"
test -n "$test_file"

rg -n -C 5 'buildProvider|install\(|SetHooks|OnRequestStart|OnRequestEnd|ProviderType|Provider:' \
  internal/providers/credentials.go "$test_file"

Repository: ENTERPILOT/GoModel

Length of output: 6270


🏁 Script executed:

#!/bin/bash
set -euo pipefail

test_file="$(fd '^credentials_test\.go$' internal/providers | head -n1)"
echo "test_file=$test_file"

echo "--- credentials.go relevant sections ---"
sed -n '220,350p' internal/providers/credentials.go

echo "--- config_test relevant sections ---"
if [ -f internal/providers/config_test.go ]; then
  sed -n '1,260p' internal/providers/config_test.go
fi

echo "--- managed provider hook registrations ---"
rg -n -C 4 'ProviderFactory|Create\(|OnRequestStart|OnRequestEnd|RequestHooks|ResponseHooks|ProviderType|Provider:' internal/providers

Repository: ENTERPILOT/GoModel

Length of output: 50375


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "--- providers test files ---"
fd '_test\.go$' internal/providers | sed 's#^\./##' | sort

echo "--- focused hook tests in provider tests ---"
rg -n -C 4 'OnRequestStart|OnRequestEnd|SetHooks|ProviderOptions|RequestHooks|ResponseHooks|Hooks' internal/providers -g '*_test.go' | head -n 220

echo "--- ProviderFactory definition and Create implementation ---"
rg -n -C 3 'type ProviderFactory|func \(.*ProviderFactory\).*Create|ProviderOptions|RequestHooks|ResponseHooks|NewProviderFactory|func NewProviderFactory' internal/providers -g '*.go' | head -n 260

Repository: ENTERPILOT/GoModel

Length of output: 37404


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "--- provider factory files ---"
fd 'factory|provider' internal/providers -t f | grep -E '(^|/)(factory|provider)(\.go|/)' | sort

echo "--- factory.go outline/relevant ---"
file="$(fd '^factory\.go$' internal/providers | head -n1)"
echo "file=$file"
wc -l "$file"
if [ -n "$file" ]; then
  sed -n '1,260p' "$file"
fi

echo "--- credentials_test.go outline/relevant ---"
creds_test="$(fd '^credentials_test\.go$' internal/providers | head -n1)"
wc -l "$creds_test"
rg -n -C 4 'buildProvider|Register|^func Test|ProviderConfig|Name|ConfiguredProviders|Reload|Add\(|Registration|ProviderFactory|Enabled|models' "$creds_test"

Repository: ENTERPILOT/GoModel

Length of output: 19430


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "--- core types containing ProviderInfo/RequestInfo/ResponseInfo/Hooks ---"
rg -n -C 4 'type ProviderInfo|type RequestInfo|type ResponseInfo|type Hooks|ProviderName|ProviderType|ProviderInfo' internal -g '*.go' | head -n 180

echo "--- llmclient hook request execution ---"
for f in $(fd '.*\.go$' internal/llmclient); do
  if rg -q 'OnRequestStart|OnRequestEnd|OnStreamFirstChunk|ProviderInfo|RequestInfo|ResponseInfo' "$f"; then
    echo "### $f"
    rg -n -C 3 'OnRequestStart|OnRequestEnd|OnStreamFirstChunk|ProviderInfo|RequestInfo|ResponseInfo|ProviderName|ProviderType' "$f"
  fi
done

Repository: ENTERPILOT/GoModel

Length of output: 24899


Add coverage for managed-provider hook identity.

ManagedProviderCredential.buildProvider() assigns cfg.Name before ProviderFactory.Create() decorates hooks, so named managed providers can carry provider identity in hook metadata. Add a test that installs a named managed provider with factory hooks and asserts Provider and ProviderType in request/response hook metadata.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/providers/credentials.go` at line 328, Add test coverage for
ManagedProviderCredential.buildProvider, using a named managed provider and
factory-installed hooks; assert that both request and response hook metadata
contain the expected Provider and ProviderType identity after
ProviderFactory.Create().

Source: Coding guidelines

Comment thread internal/providers/openrouter/passthrough_semantics_test.go
Comment thread internal/server/http.go
Comment thread internal/server/http.go
Comment thread internal/server/translated_inference_service.go Outdated
@greptile-apps

greptile-apps Bot commented Aug 8, 2026

Copy link
Copy Markdown

Confidence Score: 5/5

No blocking failure remains.

The previously reported passthrough streaming behavior is covered by the current propagation of uncertain stream intent and by successful upstream SSE response detection. An end-to-end execution confirmed that the observer receives the first response chunk under the reported request conditions.

T-Rex T-Rex Logs

What T-Rex did

  • Authored isolated Go integration test source that constructs the late-selector, oversized passthrough SSE scenario and verifies the entire affected route and observer chain.
  • Executed the isolated test across the gateway, OpenAI-compatible provider, and in-process upstream SSE, and confirmed a single first-response-chunk observer callback with stream=true uncertain=true status=200.
  • Reviewed the test artifacts to confirm end-to-end coverage and the accompanying log output.

View all artifacts

T-Rex Ran code and verified through T-Rex

Reviews (2): Last reviewed commit: "fix(ext): harden telemetry extension hoo..." | Re-trigger Greptile

Comment thread internal/server/passthrough_service.go Outdated
@SantiagoDePolonia

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai 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.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/app/app_test.go (1)

787-830: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Pass the resolved Prometheus route to middleware factories.

applyExtensions creates ext.HTTPServerConfig{MetricsEndpoint: serverCfg.MetricsEndpoint} before config.ResolveMetricsEndpoint removes reserved conflicts. Use the resolved path for fallback and pprof-conflict cases: ""/ "/v1" and pprof-conflicting values such as "/debug/pprof" should propagate as /metrics to OuterMiddlewareFor. Cover these as table cases in TestApplyExtensionsSnapshotsRegistryIntoServerConfig.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/app/app_test.go` around lines 787 - 830, Update applyExtensions to
resolve the metrics endpoint before constructing ext.HTTPServerConfig, so
fallback values such as empty or "/v1" and pprof-conflicting paths like
"/debug/pprof" are passed to OuterMiddlewareFor as "/metrics". Extend
TestApplyExtensionsSnapshotsRegistryIntoServerConfig with table-driven cases
covering each resolved outcome, while preserving existing endpoint propagation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/app/app.go`:
- Around line 120-122: Update the app server setup around applyExtensions and
server.New to resolve the effective metrics endpoint once, including
normalization and pprof-conflict fallback, then reuse that value for both
extensions.OuterMiddlewareFor and route registration. Add coverage for the
default path, a custom path without a leading slash, and a pprof-conflicting
path.

In `@internal/providers/credentials_test.go`:
- Around line 85-119: Extend the hook propagation test around factory.Add and
providerHooks to configure and invoke OnStreamFirstChunk, then assert its
captured RequestInfo has Provider "managed-eu" and ProviderType "test",
alongside the existing OnRequestStart and OnRequestEnd identity checks.

In `@internal/server/handlers_test.go`:
- Around line 2245-2250: Expand the passthrough request assertions in the
affected test to a table-driven check covering Operation, Model, Stream, and
ProviderName. Validate each field against the expected translated fast-path
request produced by tryFastPathStreamingChatPassthrough, while retaining the
existing nil-request guard.

In `@internal/server/request_selector_peek.go`:
- Line 31: Update the bounded request-body peek logic around the stream decoder
and core.MarkPassthroughStreamUncertain: track whether the stream field was
encountered or parsed, and mark StreamUncertain only when that field was not
parsed, not merely when complete remains false. Add a table-driven test covering
stream appearing before model and provider, preserving the existing uncertainty
behavior when stream is absent.

---

Outside diff comments:
In `@internal/app/app_test.go`:
- Around line 787-830: Update applyExtensions to resolve the metrics endpoint
before constructing ext.HTTPServerConfig, so fallback values such as empty or
"/v1" and pprof-conflicting paths like "/debug/pprof" are passed to
OuterMiddlewareFor as "/metrics". Extend
TestApplyExtensionsSnapshotsRegistryIntoServerConfig with table-driven cases
covering each resolved outcome, while preserving existing endpoint propagation.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: fe9bb1da-1e5a-42ca-912c-ce3960cc6e0d

📥 Commits

Reviewing files that changed from the base of the PR and between 5aaef49 and eb796ee.

📒 Files selected for processing (24)
  • config/metrics.go
  • config/metrics_test.go
  • ext/registry.go
  • ext/upstream.go
  • internal/app/app.go
  • internal/app/app_test.go
  • internal/core/passthrough.go
  • internal/core/semantic.go
  • internal/llmclient/client.go
  • internal/llmclient/client_test.go
  • internal/providers/anthropic/anthropic.go
  • internal/providers/cohere/cohere.go
  • internal/providers/credentials_test.go
  • internal/providers/openai/compatible_provider.go
  • internal/providers/openrouter/passthrough_semantics_test.go
  • internal/providers/sglang/sglang.go
  • internal/providers/vllm/vllm.go
  • internal/providers/zai/passthrough_semantics_test.go
  • internal/server/handlers_test.go
  • internal/server/http.go
  • internal/server/http_test.go
  • internal/server/passthrough_service.go
  • internal/server/request_selector_peek.go
  • internal/server/translated_inference_service.go

Comment thread internal/app/app.go
Comment thread internal/providers/credentials_test.go Outdated
Comment thread internal/server/handlers_test.go
Comment thread internal/server/request_selector_peek.go

@coderabbitai coderabbitai 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/providers/credentials_test.go (1)

81-128: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use table-driven cases for hook identity propagation.

Represent request start, request end, and first chunk as table cases. Invoke each callback and assert the captured provider name and type. This keeps new hook cases consistent with the test convention.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/providers/credentials_test.go` around lines 81 - 128, Refactor
TestCredentialsService_BuildProviderPreservesManagedHookIdentity to use
table-driven cases for OnRequestStart, OnRequestEnd, and OnStreamFirstChunk. For
each case, invoke the corresponding providerHooks callback and assert the
captured RequestInfo or ResponseInfo has provider “managed-eu” and type “test,”
preserving the existing identity checks while applying the same assertion
pattern consistently.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@internal/providers/credentials_test.go`:
- Around line 81-128: Refactor
TestCredentialsService_BuildProviderPreservesManagedHookIdentity to use
table-driven cases for OnRequestStart, OnRequestEnd, and OnStreamFirstChunk. For
each case, invoke the corresponding providerHooks callback and assert the
captured RequestInfo or ResponseInfo has provider “managed-eu” and type “test,”
preserving the existing identity checks while applying the same assertion
pattern consistently.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e1723e86-9130-4345-bad9-812a497b46b3

📥 Commits

Reviewing files that changed from the base of the PR and between eb796ee and bfe90af.

📒 Files selected for processing (11)
  • config/metrics.go
  • config/metrics_test.go
  • internal/app/app.go
  • internal/app/app_test.go
  • internal/providers/config.go
  • internal/providers/config_test.go
  • internal/providers/credentials_test.go
  • internal/server/handlers_test.go
  • internal/server/http.go
  • internal/server/request_selector_peek.go
  • internal/server/request_selector_peek_test.go

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants