Skip to content

Dev 1.4.0 - #505

Merged
ujiro99 merged 104 commits into
mainfrom
dev-1.4.0
Oct 24, 2026
Merged

ujiro99 merged 104 commits into
mainfrom
dev-1.4.0

Conversation

@ujiro99

@ujiro99 ujiro99 commented Oct 20, 2026

Copy link
Copy Markdown
Owner

No description provided.

ujiro99 and others added 30 commits October 19, 2026 08:19
The selection text shared via session storage was not cleared on tab
switching, and tabs without the content script (e.g. chrome://) can't
record their selection. So a shortcut could run with a stale selection
from another tab instead of falling back to the clipboard.

Record the tab ID with the selection and use it only when it matches
the active tab. Also re-record the selection when a tab becomes visible.

Closes #498

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The hub only serves the e2e test page and static data files, so a CSS
framework brings no benefit. Replace Tailwind classes with plain CSS
(globals.css + CSS Modules) and shadcn/ui components with native
elements, keeping the test page DOM that e2e relies on unchanged.

Also add E2E_HUB_BASE_URL to route the deployed hub to a local build so
hub changes can be verified with e2e before deploying.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KWGX774FR5iixzXqS7CMpU
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KWGX774FR5iixzXqS7CMpU
- postcss-shadow-dom-properties: declare the initial values of
  @property-registered custom properties inside the stylesheet, since
  Chrome ignores @Property in shadow trees (needed by Tailwind CSS v4)
- findRemUsages: detect rem units, which follow the user's page root
  font-size inside the content script's Shadow DOM

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KWGX774FR5iixzXqS7CMpU
- Use @tailwindcss/vite and move the theme from tailwind.config.js to
  CSS (@theme); replace tailwindcss-animate with tw-animate-css and
  update tailwind-merge to v3
- Redefine every rem-based token in px (--spacing: 4px, text, container,
  radius) so the content script UI doesn't follow the user's page root
  font-size, and fail the build if content script CSS contains rem
- Apply the Shadow DOM @Property fallback via PostCSS
- Rename utilities for v4 (shadow, rounded, outline-hidden, ...), add
  @reference to CSS modules using @apply, and restore v3 defaults
  (placeholder color, button cursor)
- Ignore 'Request context disposed' in the e2e hub route helper

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KWGX774FR5iixzXqS7CMpU
…canning

- Use @theme inline for tokens that reference runtime CSS variables.
  With a plain @theme, --color-background was resolved on :root/:host,
  so the popup's per-element --background override (user styles) no
  longer changed bg-background (e2e E2E-72)
- Scan only src/ (excluding tests) for class names; plain text in docs
  generated unused rem-based utilities

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KWGX774FR5iixzXqS7CMpU
Windows opened by the extension (e.g. the PageAction recorder) load the
deployed HTML because their navigation can't be intercepted; forwarding
its hashed assets to the local build returned 404 and broke the page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KWGX774FR5iixzXqS7CMpU
The shortcut handler judged the selection with the stored text, while
the content script ran the command with the selection in its tab. So
when the window lost focus with text selected, the stale selection was
used instead of the clipboard.

- The shortcut handler passes the selection it decided to the content
  script, and decides whether to use the clipboard only once.
- Rename allowClipboardFallback to selectionFromClipboard, and split
  UrlParam.useClipboard into selectionFromClipboard and
  clipboardForSteps. Whether to read the clipboard is derived by
  needsClipboard().
- Remove the re-check of an empty selection in actions and toUrl.
- Stop re-recording the selection on visibilitychange.

Refs #498

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Ipc.getTabId returns null instead of throwing when the tab ID can't be
  retrieved, so callers don't need their own error handling.
- The shortcut handler gets the active tab with getCurrentTab(), like the
  other places in the service worker.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…olation

- Declare `@layer properties` at the top of every CSS file that uses layers,
  so it stays the lowest-priority layer whatever the chunk injection order.
- Fail the build when no content script CSS could be checked for rem, and
  also detect uppercase REM and other root-relative units (rlh, rex, ...).
- Define breakpoints in px as in v3, so media queries don't follow the
  browser's default font-size setting.
- e2e: return the local 404 for missing hub pages instead of falling back to
  the deployed hub, and match the base path on a segment boundary.
- Fix a lint error in the cn() test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KWGX774FR5iixzXqS7CMpU
Keeping the selection in session storage raced with the asynchronous
writes and the clears on focus change. The shortcut handler now asks the
active tab for its current selection, and the tab reports whether the
window lost focus after the text was selected, so the clipboard is used
instead of a selection that may be older than it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The executor fills in the default, so actions no longer repeat it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s focus

A global shortcut can be pressed while another app has focus, and the
active tab of the last focused window still has the selection made
before the user switched apps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…OnFocusChange

The setting only keeps the menu open across focus changes. Keeping the
selection for the shortcut let a selection older than the clipboard be
used.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ignoring the selection after the window lost focus didn't match what the
user sees in the page. The selection is now ignored only when another
app has focus at the time the shortcut is run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cmd2uuid derived a command ID from its content including the title, but
it is no longer called from the extension or the Hub.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MuHp872cRxjzMMEpMfPxeG
- Lower the minimum command title length from 3 to 2.
- Trim the title and collapse whitespace runs (including full-width
  spaces, tabs and newlines) into one ASCII space before validation,
  and save the normalized title. Matches the Hub's normalization.

Refs ujiro99/selection-command-hub#297

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MuHp872cRxjzMMEpMfPxeG
Match the Hub's limit so a title accepted by the extension is not
rejected when shared.

Refs ujiro99/selection-command-hub#297

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MuHp872cRxjzMMEpMfPxeG
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MuHp872cRxjzMMEpMfPxeG
Start a new onboarding experiment that compares the welcome-overlay flow
(variant C, now the control) with a simplified variant D. Variant letters
now name a UI pattern rather than a role, so the control is chosen per
experiment and C keeps meaning the same pattern it did in onboarding_v3.

The kill switch and the failed-assignment fallback both land on C. Variant
A is no longer assigned but stays in the type until its code is removed.

Add onboarding_v4 to the hub experiments config, keeping onboarding_v3 for
already-published builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7m4SrJWH9ySfRuqRtDVg6
…ground

Variant D drops the "select -> command -> result" OnboardingRail from
Steps 1-3 and replaces the slate vignette with the welcome overlay's blue
radial glow, kept behind every step. The glow is extracted into
OnboardingGlow and mounted by both the overlay and the layout at the same
time, so the overlay fades out onto an identical, already-bloomed glow.

Variant differences are resolved once in getVariantUi() and exposed as
onboarding.ui, so steps check `ui.showRail` instead of variant letters.
Steps 1 and 2 keep extra room above the target text without the rail so
its callout does not overlap the explanation.

Add variant D shots to the onboarding screenshot spec and pin the other
shots to an explicit variant.

Refs #494

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7m4SrJWH9ySfRuqRtDVg6
- 読み取り失敗時に最大3回まで再試行する
- Offscreenからの不正な応答をエラーとして扱う
- textareaにフォーカスできない場合はエラーにする
- 作成時の単一ドキュメント制約エラーでは既存ドキュメントを使う
- バックグラウンドタブで開く場合は実行元タブへエラーを通知する
- エラートーストとクリップボード読み取りの重複処理を共通化する

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ujiro99 and others added 27 commits October 23, 2026 12:59
feat(extension): オンボーディング画面のダークモード対応
- Lift the dialog surface and its controls above the page background,
  and blur the overlay behind the dialog
- Lighten popover surfaces (Select content, InputPopup menu) and the
  focus ring in dark mode
- Unify SelectTrigger focus ring with Input / Textarea
- Render open mode icons as masks so they follow the text color

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Move the dark mode surface tokens and overlay blur from
  CommandEditDialog into the shared DialogContent / DialogOverlay
- Use the shared dialog surface for option/Dialog in dark mode
- Support dark mode in the search URL assist "how to use" section and
  keep the Gemini button text readable

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Darken the text highlight in the page action help
- Use the popover surface for the page action step editor and keep
  the step name / delay fields text-only while not editing
- Align user variable chips and add buttons with the dialog tone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Lighten interactive control backgrounds on the page and give
  SelectContent an input-like border
- Keep the switch thumb visible when off, like shadcn/ui
- Use dark-friendly hover colors for share/edit/copy/remove buttons
- Use dark defaults for user style colors in the dark theme
- Tone down the Gemini button and the AI assist button in dark mode
- Lighten the destructive color for error text in dark mode
- Add dark variants of the Selection Command Hub images

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In the dark theme, colors set in the user styles no longer switch the
other popup colors back to the light defaults. Each unset color now falls
back to its own dark default, and the hover color stays visible on both
dark and light custom backgrounds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the hard-coded default colors in the user style descriptions
with a placeholder, filled with the default of the current theme.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Convert the align images into alpha masks and paint them in the text
color, like the open mode icons, so they stay visible in dark mode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… mode

- Lighten the detail toggle chevron icons in the command edit dialog
- Add a hover background to SelectField triggers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
User style colors no longer switch the whole popup to the user's colors,
so the note about it no longer matches the behavior.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add `bg-hover` / `bg-selected` color tokens that adapt to light and dark
mode, including lighter values inside dialogs, select menus and menubar
menus, and apply them to clickable elements in the options page and the
input menu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Relative hover scales made wide elements grow far more than narrow ones.
Add `hover-grow-sm/md/lg` utilities tuned per element size so each grows
by about 6px, and apply them in the options page. Also fix the malformed
transition of the sidebar menu button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… theme

- Add `--sc-overlay-*` tokens for dialogs and select/menubar menus instead
  of repeating the same values in three places.
- Override `--accent` in menubar menus so keyboard focus stays visible in
  dark mode.
- Re-fill the user style default when the theme changes while adding one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(extension): コンテンツスクリプトのUIのダークモード対応
Use a light background for the onboarding callout and brighten the
target text, link preview and highlight colors in dark mode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The copy button only appears after Gemini finishes generating the answer,
which often exceeds the default 5s element wait. Add a waitUntil/clickable
condition with a longer timeout to the copy step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The progress overlay and the side panel step timeout both assumed every
step finishes within PAGE_ACTION_TIMEOUT + delay. A click with a waitUntil
condition can wait much longer, which hid the overlay mid-step and could
abort side panel steps early. Add getStepTimeout() and use it for both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unwrap Gemini markdown links via z.preprocess so the error message is not
shown while typing before the input is blurred.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(extension): improve search URL assist reliability
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ujiro99
ujiro99 marked this pull request as ready for review October 24, 2026 05:34
@ujiro99
ujiro99 merged commit 282d8c7 into main Oct 24, 2026
5 of 6 checks passed
@ujiro99
ujiro99 deleted the dev-1.4.0 branch October 24, 2026 05:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants