Unblock Komodo hardware watch checks

This commit is contained in:
seanbetts committed 2026-04-26 11:15:05 +01:00
1 parent e5e1c6e7db
commit b269b90007
6 files changed
+53 -15

No files matched your search

+4 -1
View File
@@ -55,12 +55,15 @@ maybe_set_cdp_endpoint() {
load_local_env
KOMODO_USER_AGENT="${KOMODO_USER_AGENT:-Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36}"
export KOMODO_USER_AGENT
fetch_json() {
name="$1"
url="$2"
allow_fallback="${3:-1}"
tmp="$OUT_DIR/$name.json.tmp"
if curl -A 'Mozilla/5.0' --retry 1 --retry-delay 1 --max-time 12 -fsSL "$url" > "$tmp" 2>/dev/null \
if curl -A "$KOMODO_USER_AGENT" --retry 1 --retry-delay 1 --max-time 12 -fsSL "$url" > "$tmp" 2>/dev/null \
&& jq empty "$tmp" >/dev/null 2>&1; then
mv "$tmp" "$OUT_DIR/$name.json"
return 0
+7 -2
View File
@@ -23,6 +23,11 @@ function launchOptions(headless) {
return options;
}
function userAgent() {
return process.env.KOMODO_USER_AGENT ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36";
}
function findKomodoPage(context, origin) {
const pages = context.pages();
return pages.find((candidate) => candidate.url().startsWith(origin)) || pages[0] || null;
@@ -66,7 +71,7 @@ async function main() {
} else if (profileDir) {
context = await chromium.launchPersistentContext(profileDir, {
...launchOptions(headless),
userAgent: "Mozilla/5.0",
userAgent: userAgent(),
});
shouldCloseContext = true;
page = context.pages()[0] || await context.newPage();
@@ -74,7 +79,7 @@ async function main() {
browser = await chromium.launch(launchOptions(headless));
shouldCloseBrowser = true;
context = await browser.newContext({
userAgent: "Mozilla/5.0",
userAgent: userAgent(),
storageState: storageState || undefined,
extraHTTPHeaders: referer ? { Referer: referer } : undefined,
});
+7 -2
View File
@@ -25,6 +25,11 @@ function launchOptions(headless) {
return options;
}
function userAgent() {
return process.env.KOMODO_USER_AGENT ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36";
}
function findKomodoPage(context, origin) {
const pages = context.pages();
return pages.find((candidate) => candidate.url().startsWith(origin)) || pages[0] || null;
@@ -68,7 +73,7 @@ async function main() {
} else if (profileDir) {
context = await chromium.launchPersistentContext(profileDir, {
...launchOptions(headless),
userAgent: "Mozilla/5.0",
userAgent: userAgent(),
});
shouldCloseContext = true;
page = context.pages()[0] || await context.newPage();
@@ -76,7 +81,7 @@ async function main() {
browser = await chromium.launch(launchOptions(headless));
shouldCloseBrowser = true;
context = await browser.newContext({
userAgent: "Mozilla/5.0",
userAgent: userAgent(),
storageState: storageState || undefined,
extraHTTPHeaders: referer ? { Referer: referer } : undefined,
});
+11 -1
View File
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
import argparse
import json
import os
import urllib.error
import urllib.request
from pathlib import Path
@@ -20,6 +21,12 @@ VISUAL_EXTS = {
".m4v",
}
DEFAULT_USER_AGENT = (
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/123.0.0.0 Safari/537.36"
)
def is_visual_url(url: str) -> bool:
path = urlparse(url).path.lower()
@@ -167,7 +174,10 @@ def is_valid_download(url: str, content_type: str, data: bytes):
def download(url: str, dest: Path):
dest.parent.mkdir(parents=True, exist_ok=True)
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
req = urllib.request.Request(
url,
headers={"User-Agent": os.environ.get("KOMODO_USER_AGENT", DEFAULT_USER_AGENT)},
)
with urllib.request.urlopen(req, timeout=15) as response:
data = response.read()
status = getattr(response, "status", 200)
+18 -9
View File
@@ -1,17 +1,18 @@
# Steam Hardware Watch Status
Last updated: `2026-04-24`
Last updated: `2026-04-26`
## Best Current Answer
- `Price`: no confirmed public price leak for the new Steam Controller.
- `Release date`: no exact public launch date found.
- `Same-time launch`: not supported by the current evidence. A shared rollout window remains plausible, but the controller looks further along than Steam Machine or Steam Frame.
- `Price`: no confirmed public price leak for the new Steam Controller, Steam Machine, or Steam Frame.
- `Release date`: official Valve store pages now support a broad `early 2026` / `coming in 2026` window, but no exact preorder, ship, or launch date was found.
- `Same-time launch`: stronger than the seeded baseline for a shared public rollout window because Valve's official Steam Hardware page groups Controller, Machine, and Frame together. Exact same-day availability is still unconfirmed, and the controller remains furthest along.
## Source Snapshot
### Komodo
- Automated Komodo API access is working again after replacing the helper's rejected generic `Mozilla/5.0` user agent with a realistic browser user agent.
- `Steam Controller`, `Steam Machine`, and `Steam Frame` are all real published WooCommerce products in a held state:
- `publish`
- `product-type-simple`
@@ -19,23 +20,31 @@ Last updated: `2026-04-24`
- `wishlist-only`
- On `2026-04-24`, Komodo bulk-updated product records for all three hardware lines across currencies.
- Also on `2026-04-24`, Komodo exposed a fresh controller-only section and media rollout with banner, videos, feature art, controls imagery, and a spec image.
- No comparable fresh Machine or Frame section and media rollout was found.
- Rechecked on `2026-04-26`: product modified timestamps remain `2026-04-24T15:12:12` for Controller, `2026-04-24T14:32:54` for Machine, and `2026-04-24T14:33:36` for Frame.
- No comparable fresh Machine or Frame section and media rollout was found. Machine and Frame still only show older wishlist sections in the current Komodo search output.
### SteamDB
- The strongest launch-adjacent signal remains the hidden `steam_controller_unboxing_2026` asset first seen on `2026-04-20`.
- Browser-verified SteamDB state on `2026-04-26`:
- `Steam Controller` app `4165870` remains `prerelease` with store release date `Coming soon`.
- `steam_controller_unboxing_2026` app `4653940` remains a released free video app, first seen on `2026-04-20`, with package `1620489` available as free on demand and showing `No Price`.
- The standard curl helper was blocked by SteamDB, so browser-style verification is the current usable path.
### SteamTracking / GameTracking
- Valve’s client strings already include controller onboarding, firmware update flow, puck handling, and pairing logic for the new controller ecosystem.
- A fresh SteamTracking checkout on `2026-04-26` still includes controller onboarding, firmware update flow, puck handling, and pairing logic for the new controller ecosystem.
- Pairing-focused hits include `ibex_internal`, `ibex_external`, `PairDongleTritonConnected`, `PairDongleTritonDocked`, and `ShouldTritonPairInOobe`.
### Valve Support / CDN
- No controller price or date leak has been confirmed from support pages or discoverable docs in the seeded baseline.
- Official Valve store pages were reachable and saved:
- `/sale/hardware` says the Steam Hardware family expands in early 2026, lists Steam Controller, Steam Machine, and Steam Frame, and was modified at `2026-04-26T06:06:01Z` in the embedded event metadata.
- `/sale/steamcontroller` has a dedicated Steam Controller page and was modified at `2026-04-26T06:05:47Z` in the embedded event metadata.
- No official Valve price, exact release date, or preorder date was found.
### Customs / Regulatory
- Shipment and filing checks remain secondary confirmation sources. No direct price or launch-date confirmation is seeded here.
- A quick `2026-04-26` web check did not find a new relevant Valve regulatory filing for the 2026 controller, Machine, or Frame. Results were dominated by old Steam Controller and Steam Deck records or unrelated products.
## Open Questions
+6
View File
@@ -6,3 +6,9 @@
{"date_checked":"2026-04-24","source":"steamdb","entity":"steam-controller","claim":"A hidden Steam Controller unboxing video asset exists and is the strongest late-stage public launch signal in the seeded baseline.","evidence_type":"hidden_media_app","confidence":"high","ref":"https://steamdb.info/app/4653940/","notes":"known internally as steam_controller_unboxing_2026 from prior research"}
{"date_checked":"2026-04-24","source":"steamtracking","entity":"steam-controller","claim":"Valve client assets already contain controller onboarding, firmware, puck, and pairing flows for the new controller ecosystem.","evidence_type":"client_strings","confidence":"medium","ref":"/tmp/SteamTracking-master/Protobufs/webuimessages_steaminput.proto","notes":"Triton, Puck, and pairing/OOBE flows present in seeded local dump"}
{"date_checked":"2026-04-24","source":"analysis","entity":"steam-controller,steam-machine,steam-frame","claim":"Current evidence supports a controller-ahead rollout more than a same-day three-product launch.","evidence_type":"cross_source_inference","confidence":"medium","ref":"/Users/sean.betts/.codex/skills/steam-hardware-watch/status/runs/2026-04-24.md","notes":"driven by controller-only Komodo rollout plus SteamDB unboxing signal"}
{"date_checked": "2026-04-26", "source": "valve-store", "entity": "steam-controller,steam-machine,steam-frame", "claim": "Official Steam Hardware store sale page is published and says the hardware family expands in early 2026.", "evidence_type": "official_store_page", "confidence": "high", "ref": "https://store.steampowered.com/sale/hardware", "notes": "Local artifact: /Users/sean/steam_hardware_watch/2026-04-26/api/valve/steam-hardware-root.html; event modified 2026-04-26T06:06:01Z; includes Controller, Machine, Frame and no exact price."}
{"date_checked": "2026-04-26", "source": "valve-store", "entity": "steam-controller", "claim": "Official Steam Controller sale page is published with a dedicated controller rollout page but no public price or exact date.", "evidence_type": "official_store_page", "confidence": "high", "ref": "https://store.steampowered.com/sale/steamcontroller", "notes": "Local artifact: /Users/sean/steam_hardware_watch/2026-04-26/api/valve/steam-controller-store.html; event modified 2026-04-26T06:05:47Z."}
{"date_checked": "2026-04-26", "source": "steamdb", "entity": "steam-controller", "claim": "SteamDB currently lists Steam Controller app 4165870 as prerelease with store release date Coming soon.", "evidence_type": "steamdb_app_metadata", "confidence": "medium", "ref": "https://steamdb.info/app/4165870/", "notes": "Browser fetch succeeded; curl helper was blocked. SteamDB shows last record update 2026-04-07T22:07:16Z."}
{"date_checked": "2026-04-26", "source": "steamdb", "entity": "steam-controller", "claim": "SteamDB still shows steam_controller_unboxing_2026 as a released free video app with an available free-on-demand package.", "evidence_type": "hidden_media_app", "confidence": "medium", "ref": "https://steamdb.info/app/4653940/", "notes": "Browser fetch succeeded; app first seen 2026-04-20 and last record update 2026-04-21T22:16:14Z; package 1620489 lists No Price."}
{"date_checked": "2026-04-26", "source": "steamtracking", "entity": "steam-controller", "claim": "Fresh SteamTracking checkout still contains Ibex dongles, Triton pairing, and controller OOBE strings.", "evidence_type": "client_strings", "confidence": "medium", "ref": "/Users/sean/steam_hardware_watch/2026-04-26/reports/steamtracking-pairing-focus.txt", "notes": "Includes ibex_internal, ibex_external, PairDongleTritonConnected, PairDongleTritonDocked, and ShouldTritonPairInOobe in service_steaminputmanager.proto."}
{"date_checked": "2026-04-26", "source": "komodo", "entity": "steam-controller,steam-machine,steam-frame", "claim": "Komodo API access was restored after using a realistic browser user agent; product records remain last modified on 2026-04-24 and no newer Machine or Frame rollout was found.", "evidence_type": "api_recheck", "confidence": "high", "ref": "/Users/sean/steam_hardware_watch/2026-04-26/reports/komodo-product-modified.tsv", "notes": "Root cause of earlier block was helper user-agent Mozilla/5.0 receiving HTTP 403; default curl and realistic Chrome/Safari UAs returned JSON."}