[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection - #1716

Merged
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg
Apr 14, 2026
Merged

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection#1716
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg

Conversation

@karthikscale3

@karthikscale3karthikscale3 commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Early encryption detection: Added a lightweight probe that fetches a single event with full data after initial load to detect whether a run contains encrypted fields. This surfaces the Decrypt button in both the trace and events tabs before the user selects any span.
  • Clickable encrypted markers: Encrypted placeholders in JSON inspector views and attribute panels are now clickable buttons labeled "Decrypt" that trigger the decryption flow directly, rather than requiring the user to find and click the top-level Decrypt button.
  • hasEncryptedFields utility: New exported function in web-shared that checks a hydrated resource for encryption markers across input, output, metadata, error, and eventData fields.
  • Persist features.encryption flag in executionContext at run creation so the UI can detect encryption without a probe fetch

How it works

A new DecryptClickContext (React context) threads the onDecrypt callback from EntityDetailPanel and EventListView down to all nested DataInspector and EncryptedFieldBlock instances. When the context is present, encrypted markers render as clickable "Decrypt" buttons; when absent (e.g. no decryption support), they remain static "Encrypted" labels.

The encryption probe in useWorkflowTraceViewerData fires a background request for 1 event with withData: true after the initial load completes. If any field in the hydrated response is an encryption marker, hasEncryptedData is set to true and propagated to the UI.

Test plan

  • Open a run with encrypted data → Decrypt button appears in trace and events tabs without selecting a span
  • Expand an event row in the events tab → inline "Decrypt" label is clickable
  • Select a span in the trace tab → "Decrypt" button in attribute panel fields is full-width and clickable
  • Click any "Decrypt" marker → triggers decryption flow, data resolves
  • Open a run without encrypted data → no Decrypt button appears

@karthikscale3

Copy link
Copy Markdown
ContributorAuthor

I think @TooTallNate recently added an encryption tag to the run's context object. Should that be used as a way to detect encryption without fetching an event separately?

Great, yes, that would make this simpler. Will look

The change from #1652 added features.encryption to WorkflowMetadata which is a runtime-only value available inside workflow code via getWorkflowMetadata(). It's computed on-the-fly from whether an encryption key exists. So this wouldn't work for us since the executionContext still doesn't have this flag. I made a change in this PR to persist this flag in the executionContext so runs from this version can be inferred directly and over time we can remove the probe fallback.

@karthikscale3karthikscale3 changed the title [web][web-shared] Make encrypted markers clickable and detect encryption before span selection[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selectionApr 13, 2026
@karthikscale3
karthikscale3 merged commit df115fd into mainApr 14, 2026
101 of 105 checks passed
@karthikscale3
karthikscale3 deleted the karthik/fix-decryption-itg branch April 14, 2026 00:12
@ghostghost mentioned this pull request Apr 13, 2026
@karthikscale3karthikscale3 added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 14, 2026
@ghost

Copy link
Copy Markdown

Backported to stable (df115fd -> f1cc68f).

ghost pushed a commit that referenced this pull request Apr 14, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
ijjk pushed a commit that referenced this pull request Apr 15, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stableCherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, '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

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection - #1716

Merged
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg
Apr 14, 2026
Merged

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection#1716
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg

Conversation

@karthikscale3

@karthikscale3karthikscale3 commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Early encryption detection: Added a lightweight probe that fetches a single event with full data after initial load to detect whether a run contains encrypted fields. This surfaces the Decrypt button in both the trace and events tabs before the user selects any span.
  • Clickable encrypted markers: Encrypted placeholders in JSON inspector views and attribute panels are now clickable buttons labeled "Decrypt" that trigger the decryption flow directly, rather than requiring the user to find and click the top-level Decrypt button.
  • hasEncryptedFields utility: New exported function in web-shared that checks a hydrated resource for encryption markers across input, output, metadata, error, and eventData fields.
  • Persist features.encryption flag in executionContext at run creation so the UI can detect encryption without a probe fetch

How it works

A new DecryptClickContext (React context) threads the onDecrypt callback from EntityDetailPanel and EventListView down to all nested DataInspector and EncryptedFieldBlock instances. When the context is present, encrypted markers render as clickable "Decrypt" buttons; when absent (e.g. no decryption support), they remain static "Encrypted" labels.

The encryption probe in useWorkflowTraceViewerData fires a background request for 1 event with withData: true after the initial load completes. If any field in the hydrated response is an encryption marker, hasEncryptedData is set to true and propagated to the UI.

Test plan

  • Open a run with encrypted data → Decrypt button appears in trace and events tabs without selecting a span
  • Expand an event row in the events tab → inline "Decrypt" label is clickable
  • Select a span in the trace tab → "Decrypt" button in attribute panel fields is full-width and clickable
  • Click any "Decrypt" marker → triggers decryption flow, data resolves
  • Open a run without encrypted data → no Decrypt button appears

@karthikscale3

Copy link
Copy Markdown
ContributorAuthor

I think @TooTallNate recently added an encryption tag to the run's context object. Should that be used as a way to detect encryption without fetching an event separately?

Great, yes, that would make this simpler. Will look

The change from #1652 added features.encryption to WorkflowMetadata which is a runtime-only value available inside workflow code via getWorkflowMetadata(). It's computed on-the-fly from whether an encryption key exists. So this wouldn't work for us since the executionContext still doesn't have this flag. I made a change in this PR to persist this flag in the executionContext so runs from this version can be inferred directly and over time we can remove the probe fallback.

@karthikscale3karthikscale3 changed the title [web][web-shared] Make encrypted markers clickable and detect encryption before span selection[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selectionApr 13, 2026
@karthikscale3
karthikscale3 merged commit df115fd into mainApr 14, 2026
101 of 105 checks passed
@karthikscale3
karthikscale3 deleted the karthik/fix-decryption-itg branch April 14, 2026 00:12
@ghostghost mentioned this pull request Apr 13, 2026
@karthikscale3karthikscale3 added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 14, 2026
@ghost

Copy link
Copy Markdown

Backported to stable (df115fd -> f1cc68f).

ghost pushed a commit that referenced this pull request Apr 14, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
ijjk pushed a commit that referenced this pull request Apr 15, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stableCherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, '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

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection - #1716

Merged
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg
Apr 14, 2026
Merged

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection#1716
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg

Conversation

@karthikscale3

@karthikscale3karthikscale3 commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Early encryption detection: Added a lightweight probe that fetches a single event with full data after initial load to detect whether a run contains encrypted fields. This surfaces the Decrypt button in both the trace and events tabs before the user selects any span.
  • Clickable encrypted markers: Encrypted placeholders in JSON inspector views and attribute panels are now clickable buttons labeled "Decrypt" that trigger the decryption flow directly, rather than requiring the user to find and click the top-level Decrypt button.
  • hasEncryptedFields utility: New exported function in web-shared that checks a hydrated resource for encryption markers across input, output, metadata, error, and eventData fields.
  • Persist features.encryption flag in executionContext at run creation so the UI can detect encryption without a probe fetch

How it works

A new DecryptClickContext (React context) threads the onDecrypt callback from EntityDetailPanel and EventListView down to all nested DataInspector and EncryptedFieldBlock instances. When the context is present, encrypted markers render as clickable "Decrypt" buttons; when absent (e.g. no decryption support), they remain static "Encrypted" labels.

The encryption probe in useWorkflowTraceViewerData fires a background request for 1 event with withData: true after the initial load completes. If any field in the hydrated response is an encryption marker, hasEncryptedData is set to true and propagated to the UI.

Test plan

  • Open a run with encrypted data → Decrypt button appears in trace and events tabs without selecting a span
  • Expand an event row in the events tab → inline "Decrypt" label is clickable
  • Select a span in the trace tab → "Decrypt" button in attribute panel fields is full-width and clickable
  • Click any "Decrypt" marker → triggers decryption flow, data resolves
  • Open a run without encrypted data → no Decrypt button appears

@karthikscale3

Copy link
Copy Markdown
ContributorAuthor

I think @TooTallNate recently added an encryption tag to the run's context object. Should that be used as a way to detect encryption without fetching an event separately?

Great, yes, that would make this simpler. Will look

The change from #1652 added features.encryption to WorkflowMetadata which is a runtime-only value available inside workflow code via getWorkflowMetadata(). It's computed on-the-fly from whether an encryption key exists. So this wouldn't work for us since the executionContext still doesn't have this flag. I made a change in this PR to persist this flag in the executionContext so runs from this version can be inferred directly and over time we can remove the probe fallback.

@karthikscale3karthikscale3 changed the title [web][web-shared] Make encrypted markers clickable and detect encryption before span selection[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selectionApr 13, 2026
@karthikscale3
karthikscale3 merged commit df115fd into mainApr 14, 2026
101 of 105 checks passed
@karthikscale3
karthikscale3 deleted the karthik/fix-decryption-itg branch April 14, 2026 00:12
@ghostghost mentioned this pull request Apr 13, 2026
@karthikscale3karthikscale3 added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 14, 2026
@ghost

Copy link
Copy Markdown

Backported to stable (df115fd -> f1cc68f).

ghost pushed a commit that referenced this pull request Apr 14, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
ijjk pushed a commit that referenced this pull request Apr 15, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stableCherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, '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

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection - #1716

Merged
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg
Apr 14, 2026
Merged

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection#1716
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg

Conversation

@karthikscale3

@karthikscale3karthikscale3 commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Early encryption detection: Added a lightweight probe that fetches a single event with full data after initial load to detect whether a run contains encrypted fields. This surfaces the Decrypt button in both the trace and events tabs before the user selects any span.
  • Clickable encrypted markers: Encrypted placeholders in JSON inspector views and attribute panels are now clickable buttons labeled "Decrypt" that trigger the decryption flow directly, rather than requiring the user to find and click the top-level Decrypt button.
  • hasEncryptedFields utility: New exported function in web-shared that checks a hydrated resource for encryption markers across input, output, metadata, error, and eventData fields.
  • Persist features.encryption flag in executionContext at run creation so the UI can detect encryption without a probe fetch

How it works

A new DecryptClickContext (React context) threads the onDecrypt callback from EntityDetailPanel and EventListView down to all nested DataInspector and EncryptedFieldBlock instances. When the context is present, encrypted markers render as clickable "Decrypt" buttons; when absent (e.g. no decryption support), they remain static "Encrypted" labels.

The encryption probe in useWorkflowTraceViewerData fires a background request for 1 event with withData: true after the initial load completes. If any field in the hydrated response is an encryption marker, hasEncryptedData is set to true and propagated to the UI.

Test plan

  • Open a run with encrypted data → Decrypt button appears in trace and events tabs without selecting a span
  • Expand an event row in the events tab → inline "Decrypt" label is clickable
  • Select a span in the trace tab → "Decrypt" button in attribute panel fields is full-width and clickable
  • Click any "Decrypt" marker → triggers decryption flow, data resolves
  • Open a run without encrypted data → no Decrypt button appears

@karthikscale3

Copy link
Copy Markdown
ContributorAuthor

I think @TooTallNate recently added an encryption tag to the run's context object. Should that be used as a way to detect encryption without fetching an event separately?

Great, yes, that would make this simpler. Will look

The change from #1652 added features.encryption to WorkflowMetadata which is a runtime-only value available inside workflow code via getWorkflowMetadata(). It's computed on-the-fly from whether an encryption key exists. So this wouldn't work for us since the executionContext still doesn't have this flag. I made a change in this PR to persist this flag in the executionContext so runs from this version can be inferred directly and over time we can remove the probe fallback.

@karthikscale3karthikscale3 changed the title [web][web-shared] Make encrypted markers clickable and detect encryption before span selection[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selectionApr 13, 2026
@karthikscale3
karthikscale3 merged commit df115fd into mainApr 14, 2026
101 of 105 checks passed
@karthikscale3
karthikscale3 deleted the karthik/fix-decryption-itg branch April 14, 2026 00:12
@ghostghost mentioned this pull request Apr 13, 2026
@karthikscale3karthikscale3 added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 14, 2026
@ghost

Copy link
Copy Markdown

Backported to stable (df115fd -> f1cc68f).

ghost pushed a commit that referenced this pull request Apr 14, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
ijjk pushed a commit that referenced this pull request Apr 15, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stableCherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, '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

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection - #1716

Merged
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg
Apr 14, 2026
Merged

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection#1716
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg

Conversation

@karthikscale3

@karthikscale3karthikscale3 commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Early encryption detection: Added a lightweight probe that fetches a single event with full data after initial load to detect whether a run contains encrypted fields. This surfaces the Decrypt button in both the trace and events tabs before the user selects any span.
  • Clickable encrypted markers: Encrypted placeholders in JSON inspector views and attribute panels are now clickable buttons labeled "Decrypt" that trigger the decryption flow directly, rather than requiring the user to find and click the top-level Decrypt button.
  • hasEncryptedFields utility: New exported function in web-shared that checks a hydrated resource for encryption markers across input, output, metadata, error, and eventData fields.
  • Persist features.encryption flag in executionContext at run creation so the UI can detect encryption without a probe fetch

How it works

A new DecryptClickContext (React context) threads the onDecrypt callback from EntityDetailPanel and EventListView down to all nested DataInspector and EncryptedFieldBlock instances. When the context is present, encrypted markers render as clickable "Decrypt" buttons; when absent (e.g. no decryption support), they remain static "Encrypted" labels.

The encryption probe in useWorkflowTraceViewerData fires a background request for 1 event with withData: true after the initial load completes. If any field in the hydrated response is an encryption marker, hasEncryptedData is set to true and propagated to the UI.

Test plan

  • Open a run with encrypted data → Decrypt button appears in trace and events tabs without selecting a span
  • Expand an event row in the events tab → inline "Decrypt" label is clickable
  • Select a span in the trace tab → "Decrypt" button in attribute panel fields is full-width and clickable
  • Click any "Decrypt" marker → triggers decryption flow, data resolves
  • Open a run without encrypted data → no Decrypt button appears

@karthikscale3

Copy link
Copy Markdown
ContributorAuthor

I think @TooTallNate recently added an encryption tag to the run's context object. Should that be used as a way to detect encryption without fetching an event separately?

Great, yes, that would make this simpler. Will look

The change from #1652 added features.encryption to WorkflowMetadata which is a runtime-only value available inside workflow code via getWorkflowMetadata(). It's computed on-the-fly from whether an encryption key exists. So this wouldn't work for us since the executionContext still doesn't have this flag. I made a change in this PR to persist this flag in the executionContext so runs from this version can be inferred directly and over time we can remove the probe fallback.

@karthikscale3karthikscale3 changed the title [web][web-shared] Make encrypted markers clickable and detect encryption before span selection[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selectionApr 13, 2026
@karthikscale3
karthikscale3 merged commit df115fd into mainApr 14, 2026
101 of 105 checks passed
@karthikscale3
karthikscale3 deleted the karthik/fix-decryption-itg branch April 14, 2026 00:12
@ghostghost mentioned this pull request Apr 13, 2026
@karthikscale3karthikscale3 added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 14, 2026
@ghost

Copy link
Copy Markdown

Backported to stable (df115fd -> f1cc68f).

ghost pushed a commit that referenced this pull request Apr 14, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
ijjk pushed a commit that referenced this pull request Apr 15, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stableCherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, '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

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection - #1716

Merged
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg
Apr 14, 2026
Merged

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection#1716
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg

Conversation

@karthikscale3

@karthikscale3karthikscale3 commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Early encryption detection: Added a lightweight probe that fetches a single event with full data after initial load to detect whether a run contains encrypted fields. This surfaces the Decrypt button in both the trace and events tabs before the user selects any span.
  • Clickable encrypted markers: Encrypted placeholders in JSON inspector views and attribute panels are now clickable buttons labeled "Decrypt" that trigger the decryption flow directly, rather than requiring the user to find and click the top-level Decrypt button.
  • hasEncryptedFields utility: New exported function in web-shared that checks a hydrated resource for encryption markers across input, output, metadata, error, and eventData fields.
  • Persist features.encryption flag in executionContext at run creation so the UI can detect encryption without a probe fetch

How it works

A new DecryptClickContext (React context) threads the onDecrypt callback from EntityDetailPanel and EventListView down to all nested DataInspector and EncryptedFieldBlock instances. When the context is present, encrypted markers render as clickable "Decrypt" buttons; when absent (e.g. no decryption support), they remain static "Encrypted" labels.

The encryption probe in useWorkflowTraceViewerData fires a background request for 1 event with withData: true after the initial load completes. If any field in the hydrated response is an encryption marker, hasEncryptedData is set to true and propagated to the UI.

Test plan

  • Open a run with encrypted data → Decrypt button appears in trace and events tabs without selecting a span
  • Expand an event row in the events tab → inline "Decrypt" label is clickable
  • Select a span in the trace tab → "Decrypt" button in attribute panel fields is full-width and clickable
  • Click any "Decrypt" marker → triggers decryption flow, data resolves
  • Open a run without encrypted data → no Decrypt button appears

@karthikscale3

Copy link
Copy Markdown
ContributorAuthor

I think @TooTallNate recently added an encryption tag to the run's context object. Should that be used as a way to detect encryption without fetching an event separately?

Great, yes, that would make this simpler. Will look

The change from #1652 added features.encryption to WorkflowMetadata which is a runtime-only value available inside workflow code via getWorkflowMetadata(). It's computed on-the-fly from whether an encryption key exists. So this wouldn't work for us since the executionContext still doesn't have this flag. I made a change in this PR to persist this flag in the executionContext so runs from this version can be inferred directly and over time we can remove the probe fallback.

@karthikscale3karthikscale3 changed the title [web][web-shared] Make encrypted markers clickable and detect encryption before span selection[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selectionApr 13, 2026
@karthikscale3
karthikscale3 merged commit df115fd into mainApr 14, 2026
101 of 105 checks passed
@karthikscale3
karthikscale3 deleted the karthik/fix-decryption-itg branch April 14, 2026 00:12
@ghostghost mentioned this pull request Apr 13, 2026
@karthikscale3karthikscale3 added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 14, 2026
@ghost

Copy link
Copy Markdown

Backported to stable (df115fd -> f1cc68f).

ghost pushed a commit that referenced this pull request Apr 14, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
ijjk pushed a commit that referenced this pull request Apr 15, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stableCherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, '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

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection - #1716

Merged
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg
Apr 14, 2026
Merged

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection#1716
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg

Conversation

@karthikscale3

@karthikscale3karthikscale3 commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Early encryption detection: Added a lightweight probe that fetches a single event with full data after initial load to detect whether a run contains encrypted fields. This surfaces the Decrypt button in both the trace and events tabs before the user selects any span.
  • Clickable encrypted markers: Encrypted placeholders in JSON inspector views and attribute panels are now clickable buttons labeled "Decrypt" that trigger the decryption flow directly, rather than requiring the user to find and click the top-level Decrypt button.
  • hasEncryptedFields utility: New exported function in web-shared that checks a hydrated resource for encryption markers across input, output, metadata, error, and eventData fields.
  • Persist features.encryption flag in executionContext at run creation so the UI can detect encryption without a probe fetch

How it works

A new DecryptClickContext (React context) threads the onDecrypt callback from EntityDetailPanel and EventListView down to all nested DataInspector and EncryptedFieldBlock instances. When the context is present, encrypted markers render as clickable "Decrypt" buttons; when absent (e.g. no decryption support), they remain static "Encrypted" labels.

The encryption probe in useWorkflowTraceViewerData fires a background request for 1 event with withData: true after the initial load completes. If any field in the hydrated response is an encryption marker, hasEncryptedData is set to true and propagated to the UI.

Test plan

  • Open a run with encrypted data → Decrypt button appears in trace and events tabs without selecting a span
  • Expand an event row in the events tab → inline "Decrypt" label is clickable
  • Select a span in the trace tab → "Decrypt" button in attribute panel fields is full-width and clickable
  • Click any "Decrypt" marker → triggers decryption flow, data resolves
  • Open a run without encrypted data → no Decrypt button appears

@karthikscale3

Copy link
Copy Markdown
ContributorAuthor

I think @TooTallNate recently added an encryption tag to the run's context object. Should that be used as a way to detect encryption without fetching an event separately?

Great, yes, that would make this simpler. Will look

The change from #1652 added features.encryption to WorkflowMetadata which is a runtime-only value available inside workflow code via getWorkflowMetadata(). It's computed on-the-fly from whether an encryption key exists. So this wouldn't work for us since the executionContext still doesn't have this flag. I made a change in this PR to persist this flag in the executionContext so runs from this version can be inferred directly and over time we can remove the probe fallback.

@karthikscale3karthikscale3 changed the title [web][web-shared] Make encrypted markers clickable and detect encryption before span selection[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selectionApr 13, 2026
@karthikscale3
karthikscale3 merged commit df115fd into mainApr 14, 2026
101 of 105 checks passed
@karthikscale3
karthikscale3 deleted the karthik/fix-decryption-itg branch April 14, 2026 00:12
@ghostghost mentioned this pull request Apr 13, 2026
@karthikscale3karthikscale3 added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 14, 2026
@ghost

Copy link
Copy Markdown

Backported to stable (df115fd -> f1cc68f).

ghost pushed a commit that referenced this pull request Apr 14, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
ijjk pushed a commit that referenced this pull request Apr 15, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stableCherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, '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

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection - #1716

Merged
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg
Apr 14, 2026
Merged

[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selection#1716
karthikscale3 merged 82 commits into
mainfrom
karthik/fix-decryption-itg

Conversation

@karthikscale3

@karthikscale3karthikscale3 commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Early encryption detection: Added a lightweight probe that fetches a single event with full data after initial load to detect whether a run contains encrypted fields. This surfaces the Decrypt button in both the trace and events tabs before the user selects any span.
  • Clickable encrypted markers: Encrypted placeholders in JSON inspector views and attribute panels are now clickable buttons labeled "Decrypt" that trigger the decryption flow directly, rather than requiring the user to find and click the top-level Decrypt button.
  • hasEncryptedFields utility: New exported function in web-shared that checks a hydrated resource for encryption markers across input, output, metadata, error, and eventData fields.
  • Persist features.encryption flag in executionContext at run creation so the UI can detect encryption without a probe fetch

How it works

A new DecryptClickContext (React context) threads the onDecrypt callback from EntityDetailPanel and EventListView down to all nested DataInspector and EncryptedFieldBlock instances. When the context is present, encrypted markers render as clickable "Decrypt" buttons; when absent (e.g. no decryption support), they remain static "Encrypted" labels.

The encryption probe in useWorkflowTraceViewerData fires a background request for 1 event with withData: true after the initial load completes. If any field in the hydrated response is an encryption marker, hasEncryptedData is set to true and propagated to the UI.

Test plan

  • Open a run with encrypted data → Decrypt button appears in trace and events tabs without selecting a span
  • Expand an event row in the events tab → inline "Decrypt" label is clickable
  • Select a span in the trace tab → "Decrypt" button in attribute panel fields is full-width and clickable
  • Click any "Decrypt" marker → triggers decryption flow, data resolves
  • Open a run without encrypted data → no Decrypt button appears

@karthikscale3

Copy link
Copy Markdown
ContributorAuthor

I think @TooTallNate recently added an encryption tag to the run's context object. Should that be used as a way to detect encryption without fetching an event separately?

Great, yes, that would make this simpler. Will look

The change from #1652 added features.encryption to WorkflowMetadata which is a runtime-only value available inside workflow code via getWorkflowMetadata(). It's computed on-the-fly from whether an encryption key exists. So this wouldn't work for us since the executionContext still doesn't have this flag. I made a change in this PR to persist this flag in the executionContext so runs from this version can be inferred directly and over time we can remove the probe fallback.

@karthikscale3karthikscale3 changed the title [web][web-shared] Make encrypted markers clickable and detect encryption before span selection[web][web-shared][core] Make encrypted markers clickable and detect encryption before span selectionApr 13, 2026
@karthikscale3
karthikscale3 merged commit df115fd into mainApr 14, 2026
101 of 105 checks passed
@karthikscale3
karthikscale3 deleted the karthik/fix-decryption-itg branch April 14, 2026 00:12
@ghostghost mentioned this pull request Apr 13, 2026
@karthikscale3karthikscale3 added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 14, 2026
@ghost

Copy link
Copy Markdown

Backported to stable (df115fd -> f1cc68f).

ghost pushed a commit that referenced this pull request Apr 14, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
ijjk pushed a commit that referenced this pull request Apr 15, 2026
…ncryption before span selection (#1716)
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
* Make encrypted markers clickable to trigger decryption and detect encryption at run level before span selection
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stableCherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious