From c705b6e59973d246574c489a691c1a2a6cb4e8b7 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 11:16:44 +0000 Subject: [PATCH 1/6] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 2a5683f..6196a42 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 25 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-b84f53b1a92511eff85645f287ec08d43adcdcc589367c015770bde836422a65.yml -openapi_spec_hash: 71e317da7bc58cfc3bc2e4180f5b6267 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-e9b9d4ecddf4392a57de66af92ec2dac9d472eb04fdd9e8c994595f29f8ad359.yml +openapi_spec_hash: 5cf86ed865b01dfe3a159a45315ebb49 config_hash: f86a4e06ae5ed725aa79d58d7a8dc27c From a00ef505dc93926ee6f72bd8f4df20f944da894a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 12:18:00 +0000 Subject: [PATCH 2/6] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 6196a42..db7c82e 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 25 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-e9b9d4ecddf4392a57de66af92ec2dac9d472eb04fdd9e8c994595f29f8ad359.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-0253523aec437a0e9c67c3386fa25ed52ebbcc0073c907f0aa3586d8010d2e9d.yml openapi_spec_hash: 5cf86ed865b01dfe3a159a45315ebb49 -config_hash: f86a4e06ae5ed725aa79d58d7a8dc27c +config_hash: 2b6e4424b446fe1bf93359ba758c83ed From af91b9474c9f57003368ecb923861139b7123f42 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 12:20:17 +0000 Subject: [PATCH 3/6] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index db7c82e..784ab77 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 25 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-0253523aec437a0e9c67c3386fa25ed52ebbcc0073c907f0aa3586d8010d2e9d.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-508b6e971e1d1da37221163ee6625a7f348c96a0ddbf1ea2a8dc17b6cdfb74c3.yml openapi_spec_hash: 5cf86ed865b01dfe3a159a45315ebb49 -config_hash: 2b6e4424b446fe1bf93359ba758c83ed +config_hash: eebf67a9c2ccfe2641980c154d7a698e From e33005eff8ebd4f7f41510848a1a968c987e1501 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 23:12:01 +0000 Subject: [PATCH 4/6] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 784ab77..ec04fe4 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 25 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-508b6e971e1d1da37221163ee6625a7f348c96a0ddbf1ea2a8dc17b6cdfb74c3.yml -openapi_spec_hash: 5cf86ed865b01dfe3a159a45315ebb49 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-2a217dd4edf98594fcf6d1e70d84c7305eec80cea96318dfe08a743cbd2468a5.yml +openapi_spec_hash: 1f32b54c3c7623d246c5c90e4300e068 config_hash: eebf67a9c2ccfe2641980c154d7a698e From fc0ae29ae44c8a3cac7a9ac7294ff818634a442c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 12:07:32 +0000 Subject: [PATCH 5/6] feat(api): api update --- .stats.yml | 4 +- .../dev/types/web_web_crawl_md_response.py | 79 ++++++++++++++++- .../dev/types/web_web_scrape_html_response.py | 87 ++++++++++++++++++- .../dev/types/web_web_scrape_md_response.py | 87 ++++++++++++++++++- 4 files changed, 247 insertions(+), 10 deletions(-) diff --git a/.stats.yml b/.stats.yml index ec04fe4..4a04c1d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 25 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-2a217dd4edf98594fcf6d1e70d84c7305eec80cea96318dfe08a743cbd2468a5.yml -openapi_spec_hash: 1f32b54c3c7623d246c5c90e4300e068 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-aea83574a2e2963acf3791ff66f3b2d552e8b07ff00e2705ccd9a96cb3756a6e.yml +openapi_spec_hash: 3a11cd57f8e308484a461522a7f634ee config_hash: eebf67a9c2ccfe2641980c154d7a698e diff --git a/src/context/dev/types/web_web_crawl_md_response.py b/src/context/dev/types/web_web_crawl_md_response.py index ae798bc..6c8206d 100644 --- a/src/context/dev/types/web_web_crawl_md_response.py +++ b/src/context/dev/types/web_web_crawl_md_response.py @@ -1,12 +1,12 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List, Optional +from typing import Dict, List, Union, Optional from pydantic import Field as FieldInfo from .._models import BaseModel -__all__ = ["WebWebCrawlMdResponse", "Metadata", "Result", "ResultMetadata", "KeyMetadata"] +__all__ = ["WebWebCrawlMdResponse", "Metadata", "Result", "ResultMetadata", "ResultMetadataAlternate", "KeyMetadata"] class Metadata(BaseModel): @@ -29,10 +29,33 @@ class Metadata(BaseModel): """Total number of URLs crawled""" +class ResultMetadataAlternate(BaseModel): + href: str + """Resolved alternate URL.""" + + hreflang: Optional[str] = None + """Language or locale for the alternate URL, when present.""" + + title: Optional[str] = None + """Alternate resource title, when present.""" + + type: Optional[str] = None + """Alternate resource MIME type, when present.""" + + class ResultMetadata(BaseModel): crawl_depth: int = FieldInfo(alias="crawlDepth") """Depth relative to the start URL. 0 = start URL, 1 = one link away.""" + final_url: str = FieldInfo(alias="finalUrl") + """Final URL scraped after redirects or scraper fallback, when known. + + Falls back to sourceUrl when unavailable. + """ + + source_url: str = FieldInfo(alias="sourceUrl") + """Original URL requested by the caller.""" + status_code: int = FieldInfo(alias="statusCode") """HTTP status code of the response""" @@ -40,10 +63,58 @@ class ResultMetadata(BaseModel): """true if the page was fetched and parsed successfully""" title: str - """The page's content (empty string if unavailable)""" + """Best page title extracted from the page (empty string if unavailable).""" url: str - """The URL that was fetched""" + """The crawl URL fetched for this page.""" + + additional_meta: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="additionalMeta", default=None) + """Additional non-social meta tags not promoted to top-level metadata fields.""" + + alternates: Optional[List[ResultMetadataAlternate]] = None + """Resolved alternate links from link rel=alternate tags.""" + + author: Optional[str] = None + """Author metadata, when present.""" + + canonical_url: Optional[str] = FieldInfo(alias="canonicalUrl", default=None) + """Resolved canonical URL, when present.""" + + description: Optional[str] = None + """Best description extracted from standard, Open Graph, or Twitter metadata.""" + + favicon: Optional[str] = None + """Resolved favicon URL, when present.""" + + image: Optional[str] = None + """Primary resolved preview image from Open Graph, Twitter, or image metadata.""" + + json_ld: Optional[List[Dict[str, object]]] = FieldInfo(alias="jsonLd", default=None) + """JSON-LD structured data blocks parsed from the page.""" + + keywords: Optional[List[str]] = None + """Keywords extracted from the page's keywords meta tag.""" + + language: Optional[str] = None + """Language extracted from html lang or language meta tags.""" + + modified_time: Optional[str] = FieldInfo(alias="modifiedTime", default=None) + """Modified timestamp/date from page metadata, when present.""" + + open_graph: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="openGraph", default=None) + """Open Graph metadata with the og: prefix removed and keys camel-cased.""" + + published_time: Optional[str] = FieldInfo(alias="publishedTime", default=None) + """Published timestamp/date from page metadata, when present.""" + + robots: Optional[str] = None + """Robots meta directive, when present.""" + + site_name: Optional[str] = FieldInfo(alias="siteName", default=None) + """Site or application name from page metadata.""" + + twitter: Optional[Dict[str, Union[str, List[str]]]] = None + """Twitter card metadata with the twitter: prefix removed and keys camel-cased.""" class Result(BaseModel): diff --git a/src/context/dev/types/web_web_scrape_html_response.py b/src/context/dev/types/web_web_scrape_html_response.py index 690047c..0a458e2 100644 --- a/src/context/dev/types/web_web_scrape_html_response.py +++ b/src/context/dev/types/web_web_scrape_html_response.py @@ -1,11 +1,91 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import Optional +from typing import Dict, List, Union, Optional from typing_extensions import Literal +from pydantic import Field as FieldInfo + from .._models import BaseModel -__all__ = ["WebWebScrapeHTMLResponse", "KeyMetadata"] +__all__ = ["WebWebScrapeHTMLResponse", "Metadata", "MetadataAlternate", "KeyMetadata"] + + +class MetadataAlternate(BaseModel): + href: str + """Resolved alternate URL.""" + + hreflang: Optional[str] = None + """Language or locale for the alternate URL, when present.""" + + title: Optional[str] = None + """Alternate resource title, when present.""" + + type: Optional[str] = None + """Alternate resource MIME type, when present.""" + + +class Metadata(BaseModel): + """Metadata extracted from the scraped page HTML.""" + + final_url: str = FieldInfo(alias="finalUrl") + """Final URL scraped after redirects or scraper fallback, when known. + + Falls back to sourceUrl when unavailable. + """ + + source_url: str = FieldInfo(alias="sourceUrl") + """Original URL requested by the caller.""" + + additional_meta: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="additionalMeta", default=None) + """Additional non-social meta tags not promoted to top-level metadata fields.""" + + alternates: Optional[List[MetadataAlternate]] = None + """Resolved alternate links from link rel=alternate tags.""" + + author: Optional[str] = None + """Author metadata, when present.""" + + canonical_url: Optional[str] = FieldInfo(alias="canonicalUrl", default=None) + """Resolved canonical URL, when present.""" + + description: Optional[str] = None + """Best description extracted from standard, Open Graph, or Twitter metadata.""" + + favicon: Optional[str] = None + """Resolved favicon URL, when present.""" + + image: Optional[str] = None + """Primary resolved preview image from Open Graph, Twitter, or image metadata.""" + + json_ld: Optional[List[Dict[str, object]]] = FieldInfo(alias="jsonLd", default=None) + """JSON-LD structured data blocks parsed from the page.""" + + keywords: Optional[List[str]] = None + """Keywords extracted from the page's keywords meta tag.""" + + language: Optional[str] = None + """Language extracted from html lang or language meta tags.""" + + modified_time: Optional[str] = FieldInfo(alias="modifiedTime", default=None) + """Modified timestamp/date from page metadata, when present.""" + + open_graph: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="openGraph", default=None) + """Open Graph metadata with the og: prefix removed and keys camel-cased.""" + + published_time: Optional[str] = FieldInfo(alias="publishedTime", default=None) + """Published timestamp/date from page metadata, when present.""" + + robots: Optional[str] = None + """Robots meta directive, when present.""" + + site_name: Optional[str] = FieldInfo(alias="siteName", default=None) + """Site or application name from page metadata.""" + + title: Optional[str] = None + """Best title extracted from the page.""" + + twitter: Optional[Dict[str, Union[str, List[str]]]] = None + """Twitter card metadata with the twitter: prefix removed and keys camel-cased.""" class KeyMetadata(BaseModel): @@ -30,6 +110,9 @@ class WebWebScrapeHTMLResponse(BaseModel): underlying XML instead — see the `type` field. """ + metadata: Metadata + """Metadata extracted from the scraped page HTML.""" + success: Literal[True] """Indicates success""" diff --git a/src/context/dev/types/web_web_scrape_md_response.py b/src/context/dev/types/web_web_scrape_md_response.py index 2510e1a..7b673f0 100644 --- a/src/context/dev/types/web_web_scrape_md_response.py +++ b/src/context/dev/types/web_web_scrape_md_response.py @@ -1,11 +1,91 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import Optional +from typing import Dict, List, Union, Optional from typing_extensions import Literal +from pydantic import Field as FieldInfo + from .._models import BaseModel -__all__ = ["WebWebScrapeMdResponse", "KeyMetadata"] +__all__ = ["WebWebScrapeMdResponse", "Metadata", "MetadataAlternate", "KeyMetadata"] + + +class MetadataAlternate(BaseModel): + href: str + """Resolved alternate URL.""" + + hreflang: Optional[str] = None + """Language or locale for the alternate URL, when present.""" + + title: Optional[str] = None + """Alternate resource title, when present.""" + + type: Optional[str] = None + """Alternate resource MIME type, when present.""" + + +class Metadata(BaseModel): + """Metadata extracted from the scraped page HTML.""" + + final_url: str = FieldInfo(alias="finalUrl") + """Final URL scraped after redirects or scraper fallback, when known. + + Falls back to sourceUrl when unavailable. + """ + + source_url: str = FieldInfo(alias="sourceUrl") + """Original URL requested by the caller.""" + + additional_meta: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="additionalMeta", default=None) + """Additional non-social meta tags not promoted to top-level metadata fields.""" + + alternates: Optional[List[MetadataAlternate]] = None + """Resolved alternate links from link rel=alternate tags.""" + + author: Optional[str] = None + """Author metadata, when present.""" + + canonical_url: Optional[str] = FieldInfo(alias="canonicalUrl", default=None) + """Resolved canonical URL, when present.""" + + description: Optional[str] = None + """Best description extracted from standard, Open Graph, or Twitter metadata.""" + + favicon: Optional[str] = None + """Resolved favicon URL, when present.""" + + image: Optional[str] = None + """Primary resolved preview image from Open Graph, Twitter, or image metadata.""" + + json_ld: Optional[List[Dict[str, object]]] = FieldInfo(alias="jsonLd", default=None) + """JSON-LD structured data blocks parsed from the page.""" + + keywords: Optional[List[str]] = None + """Keywords extracted from the page's keywords meta tag.""" + + language: Optional[str] = None + """Language extracted from html lang or language meta tags.""" + + modified_time: Optional[str] = FieldInfo(alias="modifiedTime", default=None) + """Modified timestamp/date from page metadata, when present.""" + + open_graph: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="openGraph", default=None) + """Open Graph metadata with the og: prefix removed and keys camel-cased.""" + + published_time: Optional[str] = FieldInfo(alias="publishedTime", default=None) + """Published timestamp/date from page metadata, when present.""" + + robots: Optional[str] = None + """Robots meta directive, when present.""" + + site_name: Optional[str] = FieldInfo(alias="siteName", default=None) + """Site or application name from page metadata.""" + + title: Optional[str] = None + """Best title extracted from the page.""" + + twitter: Optional[Dict[str, Union[str, List[str]]]] = None + """Twitter card metadata with the twitter: prefix removed and keys camel-cased.""" class KeyMetadata(BaseModel): @@ -25,6 +105,9 @@ class WebWebScrapeMdResponse(BaseModel): markdown: str """Page content converted to GitHub Flavored Markdown""" + metadata: Metadata + """Metadata extracted from the scraped page HTML.""" + success: Literal[True] """Indicates success""" From 5e5f8875b8d058a194a1fec056dcc841e01e0260 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 12:20:01 +0000 Subject: [PATCH 6/6] release: 1.0.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ pyproject.toml | 2 +- src/context/dev/_version.py | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ce5e5c7..fea3454 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.35.0" + ".": "1.0.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bd6209..22eca09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 1.0.0 (2026-06-18) + +Full Changelog: [v0.35.0...v1.0.0](https://github.com/context-dot-dev/context-python-sdk/compare/v0.35.0...v1.0.0) + +### Features + +* **api:** api update ([fc0ae29](https://github.com/context-dot-dev/context-python-sdk/commit/fc0ae29ae44c8a3cac7a9ac7294ff818634a442c)) + ## 0.35.0 (2026-06-11) Full Changelog: [v0.34.0...v0.35.0](https://github.com/context-dot-dev/context-python-sdk/compare/v0.34.0...v0.35.0) diff --git a/pyproject.toml b/pyproject.toml index 7ef0c26..f524bf0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "context.dev" -version = "0.35.0" +version = "1.0.0" description = "The official Python library for the context.dev API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/context/dev/_version.py b/src/context/dev/_version.py index aba26ef..d2117c7 100644 --- a/src/context/dev/_version.py +++ b/src/context/dev/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "context.dev" -__version__ = "0.35.0" # x-release-please-version +__version__ = "1.0.0" # x-release-please-version