feat(telemetry): support OTLP HTTP transports - #95

Merged
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports
Sep 3, 2026
Merged

feat(telemetry): support OTLP HTTP transports#95
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports

Conversation

@danielkov

@danielkovdanielkov commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Add configurable OTLP trace export over gRPC, HTTP/protobuf, and HTTP/JSON. Expose protocol selection through CLI, TOML, and standard OpenTelemetry environment variables, and propagate the resolved transport to nested Kit processes.

Motivation

OTLP collectors such as Gram expose standard HTTP trace ingestion endpoints rather than gRPC. Supporting both HTTP encodings lets Kit export its existing GenAI spans directly to those collectors.

Impact

OTLP/gRPC remains the default, so existing configurations retain their current transport. HTTP configurations treat otel_endpoint as a base endpoint and append /v1/traces when needed; trace export remains disabled when no endpoint is configured.

Technical details

Configuration precedence

Protocol resolution uses CLI, then config.toml, then OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, then OTEL_EXPORTER_OTLP_PROTOCOL, and finally the gRPC default. kit init leaves the protocol unset so environment selection remains effective.

HTTP export

The HTTP exporters preserve the standard generic and trace-specific OTLP header variables. The implementation enables the pinned OpenTelemetry HTTP protobuf and JSON features and reuses Kit's existing reqwest/rustls client stack.

Batch processing

HTTP transports use the SDK Tokio-backed batch span processor so the async reqwest exporter is driven by a compatible runtime. gRPC retains the existing thread-backed batch processor.

HTTP shutdown is independently bounded to five seconds so a stalled collector cannot delay Kit exit beyond the provider deadline.

@danielkov
danielkovforce-pushed the feat/otel-http-transports branch from 1d2ce74 to 44ae111CompareSeptember 3, 2026 12:37
@danielkov
danielkov enabled auto-merge (squash) September 3, 2026 12:38

@kit-code-agentkit-code-agentBot 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.

Found two issues: the new HTTP exporters select a client incompatible with the default batch processor, and malformed standard protocol environment values abort startup instead of falling back.

Comment threadCargo.toml
Comment threadsrc/main.rs

@kit-code-agentkit-code-agentBot 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.

The previous HTTP exporter/runtime incompatibility is addressed, and the protocol-environment behavior is an accepted intentional requirement. One new shutdown-bound issue remains.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

The prior HTTP shutdown-deadline finding is addressed for normal operation. One constrained thread-creation failure path can still bypass the bound.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

No issues found. The changes look good to merge.

@danielkov
danielkov merged commit b9f8a17 into mainSep 3, 2026
3 checks passed
Sign up for freeto 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.

1 participant

@danielkov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(telemetry): support OTLP HTTP transports - #95

Merged
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports
Sep 3, 2026
Merged

feat(telemetry): support OTLP HTTP transports#95
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports

Conversation

@danielkov

@danielkovdanielkov commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Add configurable OTLP trace export over gRPC, HTTP/protobuf, and HTTP/JSON. Expose protocol selection through CLI, TOML, and standard OpenTelemetry environment variables, and propagate the resolved transport to nested Kit processes.

Motivation

OTLP collectors such as Gram expose standard HTTP trace ingestion endpoints rather than gRPC. Supporting both HTTP encodings lets Kit export its existing GenAI spans directly to those collectors.

Impact

OTLP/gRPC remains the default, so existing configurations retain their current transport. HTTP configurations treat otel_endpoint as a base endpoint and append /v1/traces when needed; trace export remains disabled when no endpoint is configured.

Technical details

Configuration precedence

Protocol resolution uses CLI, then config.toml, then OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, then OTEL_EXPORTER_OTLP_PROTOCOL, and finally the gRPC default. kit init leaves the protocol unset so environment selection remains effective.

HTTP export

The HTTP exporters preserve the standard generic and trace-specific OTLP header variables. The implementation enables the pinned OpenTelemetry HTTP protobuf and JSON features and reuses Kit's existing reqwest/rustls client stack.

Batch processing

HTTP transports use the SDK Tokio-backed batch span processor so the async reqwest exporter is driven by a compatible runtime. gRPC retains the existing thread-backed batch processor.

HTTP shutdown is independently bounded to five seconds so a stalled collector cannot delay Kit exit beyond the provider deadline.

@danielkov
danielkovforce-pushed the feat/otel-http-transports branch from 1d2ce74 to 44ae111CompareSeptember 3, 2026 12:37
@danielkov
danielkov enabled auto-merge (squash) September 3, 2026 12:38

@kit-code-agentkit-code-agentBot 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.

Found two issues: the new HTTP exporters select a client incompatible with the default batch processor, and malformed standard protocol environment values abort startup instead of falling back.

Comment threadCargo.toml
Comment threadsrc/main.rs

@kit-code-agentkit-code-agentBot 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.

The previous HTTP exporter/runtime incompatibility is addressed, and the protocol-environment behavior is an accepted intentional requirement. One new shutdown-bound issue remains.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

The prior HTTP shutdown-deadline finding is addressed for normal operation. One constrained thread-creation failure path can still bypass the bound.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

No issues found. The changes look good to merge.

@danielkov
danielkov merged commit b9f8a17 into mainSep 3, 2026
3 checks passed
Sign up for freeto 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.

1 participant

@danielkov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(telemetry): support OTLP HTTP transports - #95

Merged
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports
Sep 3, 2026
Merged

feat(telemetry): support OTLP HTTP transports#95
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports

Conversation

@danielkov

@danielkovdanielkov commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Add configurable OTLP trace export over gRPC, HTTP/protobuf, and HTTP/JSON. Expose protocol selection through CLI, TOML, and standard OpenTelemetry environment variables, and propagate the resolved transport to nested Kit processes.

Motivation

OTLP collectors such as Gram expose standard HTTP trace ingestion endpoints rather than gRPC. Supporting both HTTP encodings lets Kit export its existing GenAI spans directly to those collectors.

Impact

OTLP/gRPC remains the default, so existing configurations retain their current transport. HTTP configurations treat otel_endpoint as a base endpoint and append /v1/traces when needed; trace export remains disabled when no endpoint is configured.

Technical details

Configuration precedence

Protocol resolution uses CLI, then config.toml, then OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, then OTEL_EXPORTER_OTLP_PROTOCOL, and finally the gRPC default. kit init leaves the protocol unset so environment selection remains effective.

HTTP export

The HTTP exporters preserve the standard generic and trace-specific OTLP header variables. The implementation enables the pinned OpenTelemetry HTTP protobuf and JSON features and reuses Kit's existing reqwest/rustls client stack.

Batch processing

HTTP transports use the SDK Tokio-backed batch span processor so the async reqwest exporter is driven by a compatible runtime. gRPC retains the existing thread-backed batch processor.

HTTP shutdown is independently bounded to five seconds so a stalled collector cannot delay Kit exit beyond the provider deadline.

@danielkov
danielkovforce-pushed the feat/otel-http-transports branch from 1d2ce74 to 44ae111CompareSeptember 3, 2026 12:37
@danielkov
danielkov enabled auto-merge (squash) September 3, 2026 12:38

@kit-code-agentkit-code-agentBot 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.

Found two issues: the new HTTP exporters select a client incompatible with the default batch processor, and malformed standard protocol environment values abort startup instead of falling back.

Comment threadCargo.toml
Comment threadsrc/main.rs

@kit-code-agentkit-code-agentBot 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.

The previous HTTP exporter/runtime incompatibility is addressed, and the protocol-environment behavior is an accepted intentional requirement. One new shutdown-bound issue remains.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

The prior HTTP shutdown-deadline finding is addressed for normal operation. One constrained thread-creation failure path can still bypass the bound.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

No issues found. The changes look good to merge.

@danielkov
danielkov merged commit b9f8a17 into mainSep 3, 2026
3 checks passed
Sign up for freeto 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.

1 participant

@danielkov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(telemetry): support OTLP HTTP transports - #95

Merged
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports
Sep 3, 2026
Merged

feat(telemetry): support OTLP HTTP transports#95
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports

Conversation

@danielkov

@danielkovdanielkov commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Add configurable OTLP trace export over gRPC, HTTP/protobuf, and HTTP/JSON. Expose protocol selection through CLI, TOML, and standard OpenTelemetry environment variables, and propagate the resolved transport to nested Kit processes.

Motivation

OTLP collectors such as Gram expose standard HTTP trace ingestion endpoints rather than gRPC. Supporting both HTTP encodings lets Kit export its existing GenAI spans directly to those collectors.

Impact

OTLP/gRPC remains the default, so existing configurations retain their current transport. HTTP configurations treat otel_endpoint as a base endpoint and append /v1/traces when needed; trace export remains disabled when no endpoint is configured.

Technical details

Configuration precedence

Protocol resolution uses CLI, then config.toml, then OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, then OTEL_EXPORTER_OTLP_PROTOCOL, and finally the gRPC default. kit init leaves the protocol unset so environment selection remains effective.

HTTP export

The HTTP exporters preserve the standard generic and trace-specific OTLP header variables. The implementation enables the pinned OpenTelemetry HTTP protobuf and JSON features and reuses Kit's existing reqwest/rustls client stack.

Batch processing

HTTP transports use the SDK Tokio-backed batch span processor so the async reqwest exporter is driven by a compatible runtime. gRPC retains the existing thread-backed batch processor.

HTTP shutdown is independently bounded to five seconds so a stalled collector cannot delay Kit exit beyond the provider deadline.

@danielkov
danielkovforce-pushed the feat/otel-http-transports branch from 1d2ce74 to 44ae111CompareSeptember 3, 2026 12:37
@danielkov
danielkov enabled auto-merge (squash) September 3, 2026 12:38

@kit-code-agentkit-code-agentBot 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.

Found two issues: the new HTTP exporters select a client incompatible with the default batch processor, and malformed standard protocol environment values abort startup instead of falling back.

Comment threadCargo.toml
Comment threadsrc/main.rs

@kit-code-agentkit-code-agentBot 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.

The previous HTTP exporter/runtime incompatibility is addressed, and the protocol-environment behavior is an accepted intentional requirement. One new shutdown-bound issue remains.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

The prior HTTP shutdown-deadline finding is addressed for normal operation. One constrained thread-creation failure path can still bypass the bound.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

No issues found. The changes look good to merge.

@danielkov
danielkov merged commit b9f8a17 into mainSep 3, 2026
3 checks passed
Sign up for freeto 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.

1 participant

@danielkov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(telemetry): support OTLP HTTP transports - #95

Merged
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports
Sep 3, 2026
Merged

feat(telemetry): support OTLP HTTP transports#95
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports

Conversation

@danielkov

@danielkovdanielkov commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Add configurable OTLP trace export over gRPC, HTTP/protobuf, and HTTP/JSON. Expose protocol selection through CLI, TOML, and standard OpenTelemetry environment variables, and propagate the resolved transport to nested Kit processes.

Motivation

OTLP collectors such as Gram expose standard HTTP trace ingestion endpoints rather than gRPC. Supporting both HTTP encodings lets Kit export its existing GenAI spans directly to those collectors.

Impact

OTLP/gRPC remains the default, so existing configurations retain their current transport. HTTP configurations treat otel_endpoint as a base endpoint and append /v1/traces when needed; trace export remains disabled when no endpoint is configured.

Technical details

Configuration precedence

Protocol resolution uses CLI, then config.toml, then OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, then OTEL_EXPORTER_OTLP_PROTOCOL, and finally the gRPC default. kit init leaves the protocol unset so environment selection remains effective.

HTTP export

The HTTP exporters preserve the standard generic and trace-specific OTLP header variables. The implementation enables the pinned OpenTelemetry HTTP protobuf and JSON features and reuses Kit's existing reqwest/rustls client stack.

Batch processing

HTTP transports use the SDK Tokio-backed batch span processor so the async reqwest exporter is driven by a compatible runtime. gRPC retains the existing thread-backed batch processor.

HTTP shutdown is independently bounded to five seconds so a stalled collector cannot delay Kit exit beyond the provider deadline.

@danielkov
danielkovforce-pushed the feat/otel-http-transports branch from 1d2ce74 to 44ae111CompareSeptember 3, 2026 12:37
@danielkov
danielkov enabled auto-merge (squash) September 3, 2026 12:38

@kit-code-agentkit-code-agentBot 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.

Found two issues: the new HTTP exporters select a client incompatible with the default batch processor, and malformed standard protocol environment values abort startup instead of falling back.

Comment threadCargo.toml
Comment threadsrc/main.rs

@kit-code-agentkit-code-agentBot 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.

The previous HTTP exporter/runtime incompatibility is addressed, and the protocol-environment behavior is an accepted intentional requirement. One new shutdown-bound issue remains.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

The prior HTTP shutdown-deadline finding is addressed for normal operation. One constrained thread-creation failure path can still bypass the bound.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

No issues found. The changes look good to merge.

@danielkov
danielkov merged commit b9f8a17 into mainSep 3, 2026
3 checks passed
Sign up for freeto 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.

1 participant

@danielkov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(telemetry): support OTLP HTTP transports - #95

Merged
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports
Sep 3, 2026
Merged

feat(telemetry): support OTLP HTTP transports#95
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports

Conversation

@danielkov

@danielkovdanielkov commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Add configurable OTLP trace export over gRPC, HTTP/protobuf, and HTTP/JSON. Expose protocol selection through CLI, TOML, and standard OpenTelemetry environment variables, and propagate the resolved transport to nested Kit processes.

Motivation

OTLP collectors such as Gram expose standard HTTP trace ingestion endpoints rather than gRPC. Supporting both HTTP encodings lets Kit export its existing GenAI spans directly to those collectors.

Impact

OTLP/gRPC remains the default, so existing configurations retain their current transport. HTTP configurations treat otel_endpoint as a base endpoint and append /v1/traces when needed; trace export remains disabled when no endpoint is configured.

Technical details

Configuration precedence

Protocol resolution uses CLI, then config.toml, then OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, then OTEL_EXPORTER_OTLP_PROTOCOL, and finally the gRPC default. kit init leaves the protocol unset so environment selection remains effective.

HTTP export

The HTTP exporters preserve the standard generic and trace-specific OTLP header variables. The implementation enables the pinned OpenTelemetry HTTP protobuf and JSON features and reuses Kit's existing reqwest/rustls client stack.

Batch processing

HTTP transports use the SDK Tokio-backed batch span processor so the async reqwest exporter is driven by a compatible runtime. gRPC retains the existing thread-backed batch processor.

HTTP shutdown is independently bounded to five seconds so a stalled collector cannot delay Kit exit beyond the provider deadline.

@danielkov
danielkovforce-pushed the feat/otel-http-transports branch from 1d2ce74 to 44ae111CompareSeptember 3, 2026 12:37
@danielkov
danielkov enabled auto-merge (squash) September 3, 2026 12:38

@kit-code-agentkit-code-agentBot 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.

Found two issues: the new HTTP exporters select a client incompatible with the default batch processor, and malformed standard protocol environment values abort startup instead of falling back.

Comment threadCargo.toml
Comment threadsrc/main.rs

@kit-code-agentkit-code-agentBot 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.

The previous HTTP exporter/runtime incompatibility is addressed, and the protocol-environment behavior is an accepted intentional requirement. One new shutdown-bound issue remains.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

The prior HTTP shutdown-deadline finding is addressed for normal operation. One constrained thread-creation failure path can still bypass the bound.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

No issues found. The changes look good to merge.

@danielkov
danielkov merged commit b9f8a17 into mainSep 3, 2026
3 checks passed
Sign up for freeto 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.

1 participant

@danielkov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(telemetry): support OTLP HTTP transports - #95

Merged
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports
Sep 3, 2026
Merged

feat(telemetry): support OTLP HTTP transports#95
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports

Conversation

@danielkov

@danielkovdanielkov commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Add configurable OTLP trace export over gRPC, HTTP/protobuf, and HTTP/JSON. Expose protocol selection through CLI, TOML, and standard OpenTelemetry environment variables, and propagate the resolved transport to nested Kit processes.

Motivation

OTLP collectors such as Gram expose standard HTTP trace ingestion endpoints rather than gRPC. Supporting both HTTP encodings lets Kit export its existing GenAI spans directly to those collectors.

Impact

OTLP/gRPC remains the default, so existing configurations retain their current transport. HTTP configurations treat otel_endpoint as a base endpoint and append /v1/traces when needed; trace export remains disabled when no endpoint is configured.

Technical details

Configuration precedence

Protocol resolution uses CLI, then config.toml, then OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, then OTEL_EXPORTER_OTLP_PROTOCOL, and finally the gRPC default. kit init leaves the protocol unset so environment selection remains effective.

HTTP export

The HTTP exporters preserve the standard generic and trace-specific OTLP header variables. The implementation enables the pinned OpenTelemetry HTTP protobuf and JSON features and reuses Kit's existing reqwest/rustls client stack.

Batch processing

HTTP transports use the SDK Tokio-backed batch span processor so the async reqwest exporter is driven by a compatible runtime. gRPC retains the existing thread-backed batch processor.

HTTP shutdown is independently bounded to five seconds so a stalled collector cannot delay Kit exit beyond the provider deadline.

@danielkov
danielkovforce-pushed the feat/otel-http-transports branch from 1d2ce74 to 44ae111CompareSeptember 3, 2026 12:37
@danielkov
danielkov enabled auto-merge (squash) September 3, 2026 12:38

@kit-code-agentkit-code-agentBot 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.

Found two issues: the new HTTP exporters select a client incompatible with the default batch processor, and malformed standard protocol environment values abort startup instead of falling back.

Comment threadCargo.toml
Comment threadsrc/main.rs

@kit-code-agentkit-code-agentBot 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.

The previous HTTP exporter/runtime incompatibility is addressed, and the protocol-environment behavior is an accepted intentional requirement. One new shutdown-bound issue remains.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

The prior HTTP shutdown-deadline finding is addressed for normal operation. One constrained thread-creation failure path can still bypass the bound.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

No issues found. The changes look good to merge.

@danielkov
danielkov merged commit b9f8a17 into mainSep 3, 2026
3 checks passed
Sign up for freeto 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.

1 participant

@danielkov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(telemetry): support OTLP HTTP transports - #95

Merged
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports
Sep 3, 2026
Merged

feat(telemetry): support OTLP HTTP transports#95
danielkov merged 4 commits into
mainfrom
feat/otel-http-transports

Conversation

@danielkov

@danielkovdanielkov commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Add configurable OTLP trace export over gRPC, HTTP/protobuf, and HTTP/JSON. Expose protocol selection through CLI, TOML, and standard OpenTelemetry environment variables, and propagate the resolved transport to nested Kit processes.

Motivation

OTLP collectors such as Gram expose standard HTTP trace ingestion endpoints rather than gRPC. Supporting both HTTP encodings lets Kit export its existing GenAI spans directly to those collectors.

Impact

OTLP/gRPC remains the default, so existing configurations retain their current transport. HTTP configurations treat otel_endpoint as a base endpoint and append /v1/traces when needed; trace export remains disabled when no endpoint is configured.

Technical details

Configuration precedence

Protocol resolution uses CLI, then config.toml, then OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, then OTEL_EXPORTER_OTLP_PROTOCOL, and finally the gRPC default. kit init leaves the protocol unset so environment selection remains effective.

HTTP export

The HTTP exporters preserve the standard generic and trace-specific OTLP header variables. The implementation enables the pinned OpenTelemetry HTTP protobuf and JSON features and reuses Kit's existing reqwest/rustls client stack.

Batch processing

HTTP transports use the SDK Tokio-backed batch span processor so the async reqwest exporter is driven by a compatible runtime. gRPC retains the existing thread-backed batch processor.

HTTP shutdown is independently bounded to five seconds so a stalled collector cannot delay Kit exit beyond the provider deadline.

@danielkov
danielkovforce-pushed the feat/otel-http-transports branch from 1d2ce74 to 44ae111CompareSeptember 3, 2026 12:37
@danielkov
danielkov enabled auto-merge (squash) September 3, 2026 12:38

@kit-code-agentkit-code-agentBot 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.

Found two issues: the new HTTP exporters select a client incompatible with the default batch processor, and malformed standard protocol environment values abort startup instead of falling back.

Comment threadCargo.toml
Comment threadsrc/main.rs

@kit-code-agentkit-code-agentBot 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.

The previous HTTP exporter/runtime incompatibility is addressed, and the protocol-environment behavior is an accepted intentional requirement. One new shutdown-bound issue remains.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

The prior HTTP shutdown-deadline finding is addressed for normal operation. One constrained thread-creation failure path can still bypass the bound.

Comment threadsrc/telemetry.rs

@kit-code-agentkit-code-agentBot 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.

No issues found. The changes look good to merge.

@danielkov
danielkov merged commit b9f8a17 into mainSep 3, 2026
3 checks passed
Sign up for freeto 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.

1 participant

@danielkov