fix smart title generation from browser window context
The title engine was falling back to "Screen capture" for all browser captures because it treated the entire browser window title as noise. Changes: - stripBrowserNameSuffix: removes "- Google Chrome" / "| Firefox" etc. from the end of window titles, leaving just the page title. "oracle - Google Search - Google Chrome" → "oracle - Google Search" "Oracle | Cloud Applications - Google Chrome" → page title only - extractSearchQuery: detects "[query] - Google Search" / Bing / etc. patterns after stripping the browser suffix, and formats the result as "Search for oracle". - buildCaptureTitle: uses stripped page title + search detection before falling through to the "Screen capture" fallback. - pickBestOcrPhrase: considers the full OCR line (≤80 chars) as a candidate with a +35 completeness bonus before splitting on | or ·. This preserves "Oracle | Cloud Applications and Cloud Platform" as a single phrase instead of breaking it into fragments. - candidateWords: filters out standalone punctuation tokens (|, ·, •) so they don't inflate word-count penalties for compound brand names. - verbForElementRole: hyperlinks and links now produce "Select" instead of "Click"; search box / search field produces "Search for". Five new unit tests cover: browser title stripping, search query extraction, full pipe-separated link text, link and search box verbs. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
@@ -86,6 +86,60 @@ test('capture titles fall back to OCR when metadata is absent', () => {
|
||||
assert.equal(title, 'Click Save changes');
|
||||
});
|
||||
|
||||
test('browser window title strips browser name and falls back to page title', () => {
|
||||
// OCR fails; browser window title should give something useful, not "Screen capture".
|
||||
const title = buildCaptureTitle({
|
||||
mode: 'fullscreen',
|
||||
metadata: {
|
||||
windowTitle: 'Oracle | Cloud Applications and Cloud Platform - Google Chrome',
|
||||
appName: 'chrome',
|
||||
},
|
||||
ocrText: '',
|
||||
});
|
||||
// Stripped title "Oracle | Cloud Applications and Cloud Platform" → best fragment
|
||||
assert.ok(title !== 'Screen capture', `Expected smart title, got: ${title}`);
|
||||
assert.ok(title.toLowerCase().includes('oracle') || title.toLowerCase().includes('cloud'), `Expected oracle/cloud in title, got: ${title}`);
|
||||
});
|
||||
|
||||
test('search query is extracted from browser window title pattern', () => {
|
||||
const title = buildCaptureTitle({
|
||||
mode: 'fullscreen',
|
||||
metadata: {
|
||||
windowTitle: 'oracle - Google Search - Google Chrome',
|
||||
appName: 'chrome',
|
||||
},
|
||||
ocrText: '',
|
||||
});
|
||||
assert.equal(title, 'Search for Oracle');
|
||||
});
|
||||
|
||||
test('full link text with pipe separator is preserved in OCR phrases', () => {
|
||||
const title = buildCaptureTitle({
|
||||
mode: 'fullscreen',
|
||||
metadata: { elementRole: 'hyperlink' },
|
||||
ocrText: 'Oracle | Cloud Applications and Cloud Platform',
|
||||
});
|
||||
assert.equal(title, 'Select Oracle | Cloud Applications and Cloud Platform');
|
||||
});
|
||||
|
||||
test('link element role uses Select verb', () => {
|
||||
const title = buildCaptureTitle({
|
||||
mode: 'fullscreen',
|
||||
metadata: { elementLabel: 'Sign in', elementRole: 'hyperlink' },
|
||||
ocrText: '',
|
||||
});
|
||||
assert.equal(title, 'Select Sign in');
|
||||
});
|
||||
|
||||
test('search box element role uses Search for verb', () => {
|
||||
const title = buildCaptureTitle({
|
||||
mode: 'fullscreen',
|
||||
metadata: { elementLabel: 'oracle', elementRole: 'search box' },
|
||||
ocrText: '',
|
||||
});
|
||||
assert.equal(title, 'Search for Oracle');
|
||||
});
|
||||
|
||||
test('ai prompts include the deterministic OCR-backed title candidate', () => {
|
||||
const { prompt } = buildAiPrompt({
|
||||
captureContext: {
|
||||
|
||||
Reference in New Issue
Block a user