aboutsummaryrefslogtreecommitdiff
path: root/castle-search/src/format.ts
diff options
context:
space:
mode:
authorIgor Soarez <igor@soarez.org>2026-11-06 03:33:30 +0000
committerIgor Soarez <igor@soarez.org>2026-11-06 03:33:30 +0000
commit561f0ee076c684a79fd5671af1bad0894f33e4de (patch)
tree7849677412a8b5f80835fa812f2e255f222a2c82 /castle-search/src/format.ts
parent147b3b1507ebcdf5912fbd4c474c9dfb35265148 (diff)
castle-search: resolve Google links lazily, in Chrome, not eagerly over plain HTTPHEADmaster
The Node-side resolver sent one curl-like request per result with no cookies, JS or browser; Google answers that with its 'Verifying your request' countdown after a handful, and the testing itself triggered it. A click or direct navigation in Chrome redirects at once (measured). Search now leaves Google links wrapped and prints the breadcrumb Google shows for each. castle_cdp_resolve follows one wrapped link in a Chrome tab when the agent picks it, accepts only google.com/goto?url=<token>, and reports the verification page instead of waiting it out.
Diffstat (limited to 'castle-search/src/format.ts')
-rw-r--r--castle-search/src/format.ts8
1 files changed, 8 insertions, 0 deletions
diff --git a/castle-search/src/format.ts b/castle-search/src/format.ts
index aef6c3b..9c7c3cc 100644
--- a/castle-search/src/format.ts
+++ b/castle-search/src/format.ts
@@ -8,6 +8,7 @@
*/
import type { SearchResult } from "./extract.ts";
+import { isGoogleGoto } from "./google-links.ts";
export type FormatInput = {
query: string;
@@ -36,6 +37,13 @@ export const formatResults = (input: FormatInput): string => {
input.results.forEach((result, index) => {
lines.push(`${index + 1}. ${result.title}`);
lines.push(` ${result.url}`);
+ // Google wraps every link and only reveals the target when followed. Say so
+ // here, next to the link, with what Google displays for it — that is often
+ // enough to decide without resolving anything.
+ if (isGoogleGoto(result.url)) {
+ const shown = result.display ? ` Google shows it as: ${result.display}.` : "";
+ lines.push(` [Google-wrapped link, real URL not yet known.${shown} Pass it to castle_cdp_resolve if you need to open it.]`);
+ }
if (result.snippet) lines.push(` ${result.snippet}`);
lines.push("");
});