Merge main into feature/model-selection - #574

Open
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection
Open

Merge main into feature/model-selection#574
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection

Conversation

@aws-toolkit-automation

Copy link
Copy Markdown
Collaborator

Automatic merge failed

  • Resolve conflicts and push to this PR branch.
  • Do not squash-merge this PR. Use the "Create a merge commit" option to do a regular merge.

Command line hint

To perform the merge from the command line, you could do something like the following (where "origin" is the name of the remote in your local git repo):

git stash
git fetch --all
git checkout origin/feature/model-selection
git merge origin/main
git commit
git push origin HEAD:refs/heads/autoMerge/feature/model-selection

* feat: distinct sign-in error when Q Developer access is blocked
Amazon Q Developer stopped accepting new Builder ID accounts. Such an account signs in
successfully -- sign-in is OIDC and is never gated -- and then finds Q silently
non-functional, because every Q request from that identity is refused and the refusal
surfaces as if it were a chat reply. No explanation, and nothing the user can act on.
Only the language server observes the refusal. The service gates on the User-Agent of the
shared language server, so the plugin's own SDK calls are allowed unconditionally and there
is no client-side signal to classify. The server reports it over the existing notification
channel, so this change teaches the plugin to listen.
- Declare aws/window/showNotification on the client and act on it.
- Advertise window.notifications. Without it the runtime builds no notification router and
drops the notification silently -- no error and no log, which is the failure mode that
cost the most time on the VS Code and JetBrains ports.
- Identify the notification by id, never by title. The runtime's router rewrites the
declared id into base64 of {"serverName":...,"id":...}, so the raw id never arrives, and
a title match would sign out a working user the first time an unrelated error reused the
title "Amazon Q Developer".
- Add QDevAccessBlockedState and resolve it in ViewRouter ahead of the logged-out state.
Reacting to the refusal signs the user out, so the two states are always true together;
checking logged out first would show the ordinary login view and lose the explanation.
- Add QDevAccessBlockedView, following ReauthenticateView, explaining what happened,
pointing to Kiro, and offering a route back to sign-in for pre-cutoff Builder IDs.
The screen carries its own copy rather than displaying the service's message: that message
is one sentence written for an API consumer and does not say what to do next. Consequently
the dates on the screen are product copy from the public announcement, not values reported
by the service.
Ports the behaviour already shipped in VS Code (Amazon-Q-Developer/amazon-q-vscode#159) and JetBrains
(Amazon-Q-Developer/amazon-q-jetbrains#120).
Verified: mvn -B package on Corretto 17 -- BUILD SUCCESS, 508 tests, 0 failures, including
7 new classifier tests and ViewRouterTest at 14/14 with 2 new routing tests.
* fix: seed the blocked state so the view router can emit at all
Found in Windows testing: the Amazon Q panel rendered permanently blank. The plugin
resolved and the language server launched, but no view was ever selected.
ViewRouter combines its state streams with combineLatest, which emits nothing until every
source has emitted once. Every pre-existing state is seeded during startup by the service
that owns it, but QDevAccessBlockedState has no owning service: it is only posted when the
language server reports a refusal, which for almost every user is never. The silent stream
starved the combined stream, so the router never published a view and the container had
nothing to render. The unit tests missed it because they hand-seed all streams.
Seed NOT_BLOCKED with startWithItem at the point of combination, so the stream can never
starve regardless of how the observable was injected. The clearing test now asserts the
blocked -> login ordering rather than a single post, since the seed legitimately posts the
login view once before the block arrives.
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.

2 participants

@aws-toolkit-automation@ashishrp-aws
, '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

Merge main into feature/model-selection - #574

Open
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection
Open

Merge main into feature/model-selection#574
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection

Conversation

@aws-toolkit-automation

Copy link
Copy Markdown
Collaborator

Automatic merge failed

  • Resolve conflicts and push to this PR branch.
  • Do not squash-merge this PR. Use the "Create a merge commit" option to do a regular merge.

Command line hint

To perform the merge from the command line, you could do something like the following (where "origin" is the name of the remote in your local git repo):

git stash
git fetch --all
git checkout origin/feature/model-selection
git merge origin/main
git commit
git push origin HEAD:refs/heads/autoMerge/feature/model-selection

* feat: distinct sign-in error when Q Developer access is blocked
Amazon Q Developer stopped accepting new Builder ID accounts. Such an account signs in
successfully -- sign-in is OIDC and is never gated -- and then finds Q silently
non-functional, because every Q request from that identity is refused and the refusal
surfaces as if it were a chat reply. No explanation, and nothing the user can act on.
Only the language server observes the refusal. The service gates on the User-Agent of the
shared language server, so the plugin's own SDK calls are allowed unconditionally and there
is no client-side signal to classify. The server reports it over the existing notification
channel, so this change teaches the plugin to listen.
- Declare aws/window/showNotification on the client and act on it.
- Advertise window.notifications. Without it the runtime builds no notification router and
drops the notification silently -- no error and no log, which is the failure mode that
cost the most time on the VS Code and JetBrains ports.
- Identify the notification by id, never by title. The runtime's router rewrites the
declared id into base64 of {"serverName":...,"id":...}, so the raw id never arrives, and
a title match would sign out a working user the first time an unrelated error reused the
title "Amazon Q Developer".
- Add QDevAccessBlockedState and resolve it in ViewRouter ahead of the logged-out state.
Reacting to the refusal signs the user out, so the two states are always true together;
checking logged out first would show the ordinary login view and lose the explanation.
- Add QDevAccessBlockedView, following ReauthenticateView, explaining what happened,
pointing to Kiro, and offering a route back to sign-in for pre-cutoff Builder IDs.
The screen carries its own copy rather than displaying the service's message: that message
is one sentence written for an API consumer and does not say what to do next. Consequently
the dates on the screen are product copy from the public announcement, not values reported
by the service.
Ports the behaviour already shipped in VS Code (Amazon-Q-Developer/amazon-q-vscode#159) and JetBrains
(Amazon-Q-Developer/amazon-q-jetbrains#120).
Verified: mvn -B package on Corretto 17 -- BUILD SUCCESS, 508 tests, 0 failures, including
7 new classifier tests and ViewRouterTest at 14/14 with 2 new routing tests.
* fix: seed the blocked state so the view router can emit at all
Found in Windows testing: the Amazon Q panel rendered permanently blank. The plugin
resolved and the language server launched, but no view was ever selected.
ViewRouter combines its state streams with combineLatest, which emits nothing until every
source has emitted once. Every pre-existing state is seeded during startup by the service
that owns it, but QDevAccessBlockedState has no owning service: it is only posted when the
language server reports a refusal, which for almost every user is never. The silent stream
starved the combined stream, so the router never published a view and the container had
nothing to render. The unit tests missed it because they hand-seed all streams.
Seed NOT_BLOCKED with startWithItem at the point of combination, so the stream can never
starve regardless of how the observable was injected. The clearing test now asserts the
blocked -> login ordering rather than a single post, since the seed legitimately posts the
login view once before the block arrives.
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.

2 participants

@aws-toolkit-automation@ashishrp-aws
, '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

Merge main into feature/model-selection - #574

Open
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection
Open

Merge main into feature/model-selection#574
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection

Conversation

@aws-toolkit-automation

Copy link
Copy Markdown
Collaborator

Automatic merge failed

  • Resolve conflicts and push to this PR branch.
  • Do not squash-merge this PR. Use the "Create a merge commit" option to do a regular merge.

Command line hint

To perform the merge from the command line, you could do something like the following (where "origin" is the name of the remote in your local git repo):

git stash
git fetch --all
git checkout origin/feature/model-selection
git merge origin/main
git commit
git push origin HEAD:refs/heads/autoMerge/feature/model-selection

* feat: distinct sign-in error when Q Developer access is blocked
Amazon Q Developer stopped accepting new Builder ID accounts. Such an account signs in
successfully -- sign-in is OIDC and is never gated -- and then finds Q silently
non-functional, because every Q request from that identity is refused and the refusal
surfaces as if it were a chat reply. No explanation, and nothing the user can act on.
Only the language server observes the refusal. The service gates on the User-Agent of the
shared language server, so the plugin's own SDK calls are allowed unconditionally and there
is no client-side signal to classify. The server reports it over the existing notification
channel, so this change teaches the plugin to listen.
- Declare aws/window/showNotification on the client and act on it.
- Advertise window.notifications. Without it the runtime builds no notification router and
drops the notification silently -- no error and no log, which is the failure mode that
cost the most time on the VS Code and JetBrains ports.
- Identify the notification by id, never by title. The runtime's router rewrites the
declared id into base64 of {"serverName":...,"id":...}, so the raw id never arrives, and
a title match would sign out a working user the first time an unrelated error reused the
title "Amazon Q Developer".
- Add QDevAccessBlockedState and resolve it in ViewRouter ahead of the logged-out state.
Reacting to the refusal signs the user out, so the two states are always true together;
checking logged out first would show the ordinary login view and lose the explanation.
- Add QDevAccessBlockedView, following ReauthenticateView, explaining what happened,
pointing to Kiro, and offering a route back to sign-in for pre-cutoff Builder IDs.
The screen carries its own copy rather than displaying the service's message: that message
is one sentence written for an API consumer and does not say what to do next. Consequently
the dates on the screen are product copy from the public announcement, not values reported
by the service.
Ports the behaviour already shipped in VS Code (Amazon-Q-Developer/amazon-q-vscode#159) and JetBrains
(Amazon-Q-Developer/amazon-q-jetbrains#120).
Verified: mvn -B package on Corretto 17 -- BUILD SUCCESS, 508 tests, 0 failures, including
7 new classifier tests and ViewRouterTest at 14/14 with 2 new routing tests.
* fix: seed the blocked state so the view router can emit at all
Found in Windows testing: the Amazon Q panel rendered permanently blank. The plugin
resolved and the language server launched, but no view was ever selected.
ViewRouter combines its state streams with combineLatest, which emits nothing until every
source has emitted once. Every pre-existing state is seeded during startup by the service
that owns it, but QDevAccessBlockedState has no owning service: it is only posted when the
language server reports a refusal, which for almost every user is never. The silent stream
starved the combined stream, so the router never published a view and the container had
nothing to render. The unit tests missed it because they hand-seed all streams.
Seed NOT_BLOCKED with startWithItem at the point of combination, so the stream can never
starve regardless of how the observable was injected. The clearing test now asserts the
blocked -> login ordering rather than a single post, since the seed legitimately posts the
login view once before the block arrives.
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.

2 participants

@aws-toolkit-automation@ashishrp-aws
, '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

Merge main into feature/model-selection - #574

Open
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection
Open

Merge main into feature/model-selection#574
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection

Conversation

@aws-toolkit-automation

Copy link
Copy Markdown
Collaborator

Automatic merge failed

  • Resolve conflicts and push to this PR branch.
  • Do not squash-merge this PR. Use the "Create a merge commit" option to do a regular merge.

Command line hint

To perform the merge from the command line, you could do something like the following (where "origin" is the name of the remote in your local git repo):

git stash
git fetch --all
git checkout origin/feature/model-selection
git merge origin/main
git commit
git push origin HEAD:refs/heads/autoMerge/feature/model-selection

* feat: distinct sign-in error when Q Developer access is blocked
Amazon Q Developer stopped accepting new Builder ID accounts. Such an account signs in
successfully -- sign-in is OIDC and is never gated -- and then finds Q silently
non-functional, because every Q request from that identity is refused and the refusal
surfaces as if it were a chat reply. No explanation, and nothing the user can act on.
Only the language server observes the refusal. The service gates on the User-Agent of the
shared language server, so the plugin's own SDK calls are allowed unconditionally and there
is no client-side signal to classify. The server reports it over the existing notification
channel, so this change teaches the plugin to listen.
- Declare aws/window/showNotification on the client and act on it.
- Advertise window.notifications. Without it the runtime builds no notification router and
drops the notification silently -- no error and no log, which is the failure mode that
cost the most time on the VS Code and JetBrains ports.
- Identify the notification by id, never by title. The runtime's router rewrites the
declared id into base64 of {"serverName":...,"id":...}, so the raw id never arrives, and
a title match would sign out a working user the first time an unrelated error reused the
title "Amazon Q Developer".
- Add QDevAccessBlockedState and resolve it in ViewRouter ahead of the logged-out state.
Reacting to the refusal signs the user out, so the two states are always true together;
checking logged out first would show the ordinary login view and lose the explanation.
- Add QDevAccessBlockedView, following ReauthenticateView, explaining what happened,
pointing to Kiro, and offering a route back to sign-in for pre-cutoff Builder IDs.
The screen carries its own copy rather than displaying the service's message: that message
is one sentence written for an API consumer and does not say what to do next. Consequently
the dates on the screen are product copy from the public announcement, not values reported
by the service.
Ports the behaviour already shipped in VS Code (Amazon-Q-Developer/amazon-q-vscode#159) and JetBrains
(Amazon-Q-Developer/amazon-q-jetbrains#120).
Verified: mvn -B package on Corretto 17 -- BUILD SUCCESS, 508 tests, 0 failures, including
7 new classifier tests and ViewRouterTest at 14/14 with 2 new routing tests.
* fix: seed the blocked state so the view router can emit at all
Found in Windows testing: the Amazon Q panel rendered permanently blank. The plugin
resolved and the language server launched, but no view was ever selected.
ViewRouter combines its state streams with combineLatest, which emits nothing until every
source has emitted once. Every pre-existing state is seeded during startup by the service
that owns it, but QDevAccessBlockedState has no owning service: it is only posted when the
language server reports a refusal, which for almost every user is never. The silent stream
starved the combined stream, so the router never published a view and the container had
nothing to render. The unit tests missed it because they hand-seed all streams.
Seed NOT_BLOCKED with startWithItem at the point of combination, so the stream can never
starve regardless of how the observable was injected. The clearing test now asserts the
blocked -> login ordering rather than a single post, since the seed legitimately posts the
login view once before the block arrives.
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.

2 participants

@aws-toolkit-automation@ashishrp-aws
, '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

Merge main into feature/model-selection - #574

Open
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection
Open

Merge main into feature/model-selection#574
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection

Conversation

@aws-toolkit-automation

Copy link
Copy Markdown
Collaborator

Automatic merge failed

  • Resolve conflicts and push to this PR branch.
  • Do not squash-merge this PR. Use the "Create a merge commit" option to do a regular merge.

Command line hint

To perform the merge from the command line, you could do something like the following (where "origin" is the name of the remote in your local git repo):

git stash
git fetch --all
git checkout origin/feature/model-selection
git merge origin/main
git commit
git push origin HEAD:refs/heads/autoMerge/feature/model-selection

* feat: distinct sign-in error when Q Developer access is blocked
Amazon Q Developer stopped accepting new Builder ID accounts. Such an account signs in
successfully -- sign-in is OIDC and is never gated -- and then finds Q silently
non-functional, because every Q request from that identity is refused and the refusal
surfaces as if it were a chat reply. No explanation, and nothing the user can act on.
Only the language server observes the refusal. The service gates on the User-Agent of the
shared language server, so the plugin's own SDK calls are allowed unconditionally and there
is no client-side signal to classify. The server reports it over the existing notification
channel, so this change teaches the plugin to listen.
- Declare aws/window/showNotification on the client and act on it.
- Advertise window.notifications. Without it the runtime builds no notification router and
drops the notification silently -- no error and no log, which is the failure mode that
cost the most time on the VS Code and JetBrains ports.
- Identify the notification by id, never by title. The runtime's router rewrites the
declared id into base64 of {"serverName":...,"id":...}, so the raw id never arrives, and
a title match would sign out a working user the first time an unrelated error reused the
title "Amazon Q Developer".
- Add QDevAccessBlockedState and resolve it in ViewRouter ahead of the logged-out state.
Reacting to the refusal signs the user out, so the two states are always true together;
checking logged out first would show the ordinary login view and lose the explanation.
- Add QDevAccessBlockedView, following ReauthenticateView, explaining what happened,
pointing to Kiro, and offering a route back to sign-in for pre-cutoff Builder IDs.
The screen carries its own copy rather than displaying the service's message: that message
is one sentence written for an API consumer and does not say what to do next. Consequently
the dates on the screen are product copy from the public announcement, not values reported
by the service.
Ports the behaviour already shipped in VS Code (Amazon-Q-Developer/amazon-q-vscode#159) and JetBrains
(Amazon-Q-Developer/amazon-q-jetbrains#120).
Verified: mvn -B package on Corretto 17 -- BUILD SUCCESS, 508 tests, 0 failures, including
7 new classifier tests and ViewRouterTest at 14/14 with 2 new routing tests.
* fix: seed the blocked state so the view router can emit at all
Found in Windows testing: the Amazon Q panel rendered permanently blank. The plugin
resolved and the language server launched, but no view was ever selected.
ViewRouter combines its state streams with combineLatest, which emits nothing until every
source has emitted once. Every pre-existing state is seeded during startup by the service
that owns it, but QDevAccessBlockedState has no owning service: it is only posted when the
language server reports a refusal, which for almost every user is never. The silent stream
starved the combined stream, so the router never published a view and the container had
nothing to render. The unit tests missed it because they hand-seed all streams.
Seed NOT_BLOCKED with startWithItem at the point of combination, so the stream can never
starve regardless of how the observable was injected. The clearing test now asserts the
blocked -> login ordering rather than a single post, since the seed legitimately posts the
login view once before the block arrives.
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.

2 participants

@aws-toolkit-automation@ashishrp-aws
, '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

Merge main into feature/model-selection - #574

Open
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection
Open

Merge main into feature/model-selection#574
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection

Conversation

@aws-toolkit-automation

Copy link
Copy Markdown
Collaborator

Automatic merge failed

  • Resolve conflicts and push to this PR branch.
  • Do not squash-merge this PR. Use the "Create a merge commit" option to do a regular merge.

Command line hint

To perform the merge from the command line, you could do something like the following (where "origin" is the name of the remote in your local git repo):

git stash
git fetch --all
git checkout origin/feature/model-selection
git merge origin/main
git commit
git push origin HEAD:refs/heads/autoMerge/feature/model-selection

* feat: distinct sign-in error when Q Developer access is blocked
Amazon Q Developer stopped accepting new Builder ID accounts. Such an account signs in
successfully -- sign-in is OIDC and is never gated -- and then finds Q silently
non-functional, because every Q request from that identity is refused and the refusal
surfaces as if it were a chat reply. No explanation, and nothing the user can act on.
Only the language server observes the refusal. The service gates on the User-Agent of the
shared language server, so the plugin's own SDK calls are allowed unconditionally and there
is no client-side signal to classify. The server reports it over the existing notification
channel, so this change teaches the plugin to listen.
- Declare aws/window/showNotification on the client and act on it.
- Advertise window.notifications. Without it the runtime builds no notification router and
drops the notification silently -- no error and no log, which is the failure mode that
cost the most time on the VS Code and JetBrains ports.
- Identify the notification by id, never by title. The runtime's router rewrites the
declared id into base64 of {"serverName":...,"id":...}, so the raw id never arrives, and
a title match would sign out a working user the first time an unrelated error reused the
title "Amazon Q Developer".
- Add QDevAccessBlockedState and resolve it in ViewRouter ahead of the logged-out state.
Reacting to the refusal signs the user out, so the two states are always true together;
checking logged out first would show the ordinary login view and lose the explanation.
- Add QDevAccessBlockedView, following ReauthenticateView, explaining what happened,
pointing to Kiro, and offering a route back to sign-in for pre-cutoff Builder IDs.
The screen carries its own copy rather than displaying the service's message: that message
is one sentence written for an API consumer and does not say what to do next. Consequently
the dates on the screen are product copy from the public announcement, not values reported
by the service.
Ports the behaviour already shipped in VS Code (Amazon-Q-Developer/amazon-q-vscode#159) and JetBrains
(Amazon-Q-Developer/amazon-q-jetbrains#120).
Verified: mvn -B package on Corretto 17 -- BUILD SUCCESS, 508 tests, 0 failures, including
7 new classifier tests and ViewRouterTest at 14/14 with 2 new routing tests.
* fix: seed the blocked state so the view router can emit at all
Found in Windows testing: the Amazon Q panel rendered permanently blank. The plugin
resolved and the language server launched, but no view was ever selected.
ViewRouter combines its state streams with combineLatest, which emits nothing until every
source has emitted once. Every pre-existing state is seeded during startup by the service
that owns it, but QDevAccessBlockedState has no owning service: it is only posted when the
language server reports a refusal, which for almost every user is never. The silent stream
starved the combined stream, so the router never published a view and the container had
nothing to render. The unit tests missed it because they hand-seed all streams.
Seed NOT_BLOCKED with startWithItem at the point of combination, so the stream can never
starve regardless of how the observable was injected. The clearing test now asserts the
blocked -> login ordering rather than a single post, since the seed legitimately posts the
login view once before the block arrives.
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.

2 participants

@aws-toolkit-automation@ashishrp-aws
, '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

Merge main into feature/model-selection - #574

Open
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection
Open

Merge main into feature/model-selection#574
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection

Conversation

@aws-toolkit-automation

Copy link
Copy Markdown
Collaborator

Automatic merge failed

  • Resolve conflicts and push to this PR branch.
  • Do not squash-merge this PR. Use the "Create a merge commit" option to do a regular merge.

Command line hint

To perform the merge from the command line, you could do something like the following (where "origin" is the name of the remote in your local git repo):

git stash
git fetch --all
git checkout origin/feature/model-selection
git merge origin/main
git commit
git push origin HEAD:refs/heads/autoMerge/feature/model-selection

* feat: distinct sign-in error when Q Developer access is blocked
Amazon Q Developer stopped accepting new Builder ID accounts. Such an account signs in
successfully -- sign-in is OIDC and is never gated -- and then finds Q silently
non-functional, because every Q request from that identity is refused and the refusal
surfaces as if it were a chat reply. No explanation, and nothing the user can act on.
Only the language server observes the refusal. The service gates on the User-Agent of the
shared language server, so the plugin's own SDK calls are allowed unconditionally and there
is no client-side signal to classify. The server reports it over the existing notification
channel, so this change teaches the plugin to listen.
- Declare aws/window/showNotification on the client and act on it.
- Advertise window.notifications. Without it the runtime builds no notification router and
drops the notification silently -- no error and no log, which is the failure mode that
cost the most time on the VS Code and JetBrains ports.
- Identify the notification by id, never by title. The runtime's router rewrites the
declared id into base64 of {"serverName":...,"id":...}, so the raw id never arrives, and
a title match would sign out a working user the first time an unrelated error reused the
title "Amazon Q Developer".
- Add QDevAccessBlockedState and resolve it in ViewRouter ahead of the logged-out state.
Reacting to the refusal signs the user out, so the two states are always true together;
checking logged out first would show the ordinary login view and lose the explanation.
- Add QDevAccessBlockedView, following ReauthenticateView, explaining what happened,
pointing to Kiro, and offering a route back to sign-in for pre-cutoff Builder IDs.
The screen carries its own copy rather than displaying the service's message: that message
is one sentence written for an API consumer and does not say what to do next. Consequently
the dates on the screen are product copy from the public announcement, not values reported
by the service.
Ports the behaviour already shipped in VS Code (Amazon-Q-Developer/amazon-q-vscode#159) and JetBrains
(Amazon-Q-Developer/amazon-q-jetbrains#120).
Verified: mvn -B package on Corretto 17 -- BUILD SUCCESS, 508 tests, 0 failures, including
7 new classifier tests and ViewRouterTest at 14/14 with 2 new routing tests.
* fix: seed the blocked state so the view router can emit at all
Found in Windows testing: the Amazon Q panel rendered permanently blank. The plugin
resolved and the language server launched, but no view was ever selected.
ViewRouter combines its state streams with combineLatest, which emits nothing until every
source has emitted once. Every pre-existing state is seeded during startup by the service
that owns it, but QDevAccessBlockedState has no owning service: it is only posted when the
language server reports a refusal, which for almost every user is never. The silent stream
starved the combined stream, so the router never published a view and the container had
nothing to render. The unit tests missed it because they hand-seed all streams.
Seed NOT_BLOCKED with startWithItem at the point of combination, so the stream can never
starve regardless of how the observable was injected. The clearing test now asserts the
blocked -> login ordering rather than a single post, since the seed legitimately posts the
login view once before the block arrives.
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.

2 participants

@aws-toolkit-automation@ashishrp-aws
, '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

Merge main into feature/model-selection - #574

Open
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection
Open

Merge main into feature/model-selection#574
aws-toolkit-automation wants to merge 1 commit into
feature/model-selectionfrom
autoMerge/feature/model-selection

Conversation

@aws-toolkit-automation

Copy link
Copy Markdown
Collaborator

Automatic merge failed

  • Resolve conflicts and push to this PR branch.
  • Do not squash-merge this PR. Use the "Create a merge commit" option to do a regular merge.

Command line hint

To perform the merge from the command line, you could do something like the following (where "origin" is the name of the remote in your local git repo):

git stash
git fetch --all
git checkout origin/feature/model-selection
git merge origin/main
git commit
git push origin HEAD:refs/heads/autoMerge/feature/model-selection

* feat: distinct sign-in error when Q Developer access is blocked
Amazon Q Developer stopped accepting new Builder ID accounts. Such an account signs in
successfully -- sign-in is OIDC and is never gated -- and then finds Q silently
non-functional, because every Q request from that identity is refused and the refusal
surfaces as if it were a chat reply. No explanation, and nothing the user can act on.
Only the language server observes the refusal. The service gates on the User-Agent of the
shared language server, so the plugin's own SDK calls are allowed unconditionally and there
is no client-side signal to classify. The server reports it over the existing notification
channel, so this change teaches the plugin to listen.
- Declare aws/window/showNotification on the client and act on it.
- Advertise window.notifications. Without it the runtime builds no notification router and
drops the notification silently -- no error and no log, which is the failure mode that
cost the most time on the VS Code and JetBrains ports.
- Identify the notification by id, never by title. The runtime's router rewrites the
declared id into base64 of {"serverName":...,"id":...}, so the raw id never arrives, and
a title match would sign out a working user the first time an unrelated error reused the
title "Amazon Q Developer".
- Add QDevAccessBlockedState and resolve it in ViewRouter ahead of the logged-out state.
Reacting to the refusal signs the user out, so the two states are always true together;
checking logged out first would show the ordinary login view and lose the explanation.
- Add QDevAccessBlockedView, following ReauthenticateView, explaining what happened,
pointing to Kiro, and offering a route back to sign-in for pre-cutoff Builder IDs.
The screen carries its own copy rather than displaying the service's message: that message
is one sentence written for an API consumer and does not say what to do next. Consequently
the dates on the screen are product copy from the public announcement, not values reported
by the service.
Ports the behaviour already shipped in VS Code (Amazon-Q-Developer/amazon-q-vscode#159) and JetBrains
(Amazon-Q-Developer/amazon-q-jetbrains#120).
Verified: mvn -B package on Corretto 17 -- BUILD SUCCESS, 508 tests, 0 failures, including
7 new classifier tests and ViewRouterTest at 14/14 with 2 new routing tests.
* fix: seed the blocked state so the view router can emit at all
Found in Windows testing: the Amazon Q panel rendered permanently blank. The plugin
resolved and the language server launched, but no view was ever selected.
ViewRouter combines its state streams with combineLatest, which emits nothing until every
source has emitted once. Every pre-existing state is seeded during startup by the service
that owns it, but QDevAccessBlockedState has no owning service: it is only posted when the
language server reports a refusal, which for almost every user is never. The silent stream
starved the combined stream, so the router never published a view and the container had
nothing to render. The unit tests missed it because they hand-seed all streams.
Seed NOT_BLOCKED with startWithItem at the point of combination, so the stream can never
starve regardless of how the observable was injected. The clearing test now asserts the
blocked -> login ordering rather than a single post, since the seed legitimately posts the
login view once before the block arrives.
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.

2 participants

@aws-toolkit-automation@ashishrp-aws