From 2eac170cf5d2cdc323c002c56fc562784feb343f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Jul 2026 16:47:59 +0000 Subject: [PATCH 1/4] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 6b4e1c4..9768c4b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 29 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-51ebe668b198157ccb18984017dd2fe35f7675220e8b933b03325b3c459ef2a6.yml -openapi_spec_hash: b3ed94bd6b59d4e32fc2c5aa8187d6b2 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-ea4f36d262d32250c0626d46b9df01e15fd17dec54928c712284693c8be487d2.yml +openapi_spec_hash: 33fe53c36120b880472d3743ba2bd898 config_hash: ff35e224e809656528c44163aa41bebd From 4fb738fd4527cdeef0448c4d79d31ad513e20e50 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Jul 2026 20:15:47 +0000 Subject: [PATCH 2/4] feat(api): api update --- .stats.yml | 4 ++-- src/context/dev/types/monitor_create_params.py | 14 +++++++++----- src/context/dev/types/monitor_create_response.py | 14 +++++++++----- src/context/dev/types/monitor_list_response.py | 14 +++++++++----- src/context/dev/types/monitor_retrieve_response.py | 14 +++++++++----- src/context/dev/types/monitor_update_params.py | 14 +++++++++----- src/context/dev/types/monitor_update_response.py | 14 +++++++++----- 7 files changed, 56 insertions(+), 32 deletions(-) diff --git a/.stats.yml b/.stats.yml index 9768c4b..6343a8a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 29 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-ea4f36d262d32250c0626d46b9df01e15fd17dec54928c712284693c8be487d2.yml -openapi_spec_hash: 33fe53c36120b880472d3743ba2bd898 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-190c8939f11afec54c1c0303cb21e7164a350fb66c5fe8fb5ae970e809dfb066.yml +openapi_spec_hash: 65e3c8513e047a95bcf276b6f88045a6 config_hash: ff35e224e809656528c44163aa41bebd diff --git a/src/context/dev/types/monitor_create_params.py b/src/context/dev/types/monitor_create_params.py index 231330e..40813ad 100644 --- a/src/context/dev/types/monitor_create_params.py +++ b/src/context/dev/types/monitor_create_params.py @@ -61,7 +61,7 @@ class ChangeDetectionMonitorsExactChangeDetection(TypedDict, total=False): class ChangeDetectionMonitorsSemanticChangeDetection(TypedDict, total=False): """ - Detect meaning-level changes to the extracted data, ignoring cosmetic or paraphrase-only differences. What is watched is determined by the extract target's `schema` and `instructions`. + Detect meaning-level changes to tracked page content, ignoring cosmetic or paraphrase-only differences. Which changes are meaningful is judged against the extract target's `instructions` (and `schema`, when provided). """ type: Required[Literal["semantic"]] @@ -128,7 +128,7 @@ class TargetMonitorsSitemapTarget(TypedDict, total=False): class TargetMonitorsExtractTarget(TypedDict, total=False): """Watch the monitor-relevant pages of a site for meaningful changes. - A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged against the monitor's instructions. The tracked page set is refreshed by a periodic re-discovery crawl. + A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged for relevance against the monitor's `instructions` (and `schema`, when provided). The tracked page set is refreshed by a periodic re-discovery crawl. """ instructions: Required[str] @@ -153,9 +153,13 @@ class TargetMonitorsExtractTarget(TypedDict, total=False): schema: Dict[str, object] """JSON Schema describing the data you care about. - It guides which pages are selected for tracking and gives the change judge - context on what matters. If omitted, a default summary + key-points schema is - used. + It is used three ways: it guides which pages are selected for tracking, it gives + the change judge extra context on which changes matter (alongside + `instructions`), and it defines the shape of the baseline `data` snapshot on GET + /monitors/{monitor_id} (refreshed at most about once a day). It is not a + response format for changes: change events and webhook payloads always contain + diffs, summaries, and evidence excerpts — never data in this schema's shape. If + omitted, a default summary + key-points schema is used. """ diff --git a/src/context/dev/types/monitor_create_response.py b/src/context/dev/types/monitor_create_response.py index 961e3bb..76ef2ea 100644 --- a/src/context/dev/types/monitor_create_response.py +++ b/src/context/dev/types/monitor_create_response.py @@ -39,7 +39,7 @@ class ChangeDetectionMonitorsExactChangeDetection(BaseModel): class ChangeDetectionMonitorsSemanticChangeDetection(BaseModel): """ - Detect meaning-level changes to the extracted data, ignoring cosmetic or paraphrase-only differences. What is watched is determined by the extract target's `schema` and `instructions`. + Detect meaning-level changes to tracked page content, ignoring cosmetic or paraphrase-only differences. Which changes are meaningful is judged against the extract target's `instructions` (and `schema`, when provided). """ type: Literal["semantic"] @@ -107,7 +107,7 @@ class TargetMonitorsSitemapTarget(BaseModel): class TargetMonitorsExtractTarget(BaseModel): """Watch the monitor-relevant pages of a site for meaningful changes. - A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged against the monitor's instructions. The tracked page set is refreshed by a periodic re-discovery crawl. + A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged for relevance against the monitor's `instructions` (and `schema`, when provided). The tracked page set is refreshed by a periodic re-discovery crawl. """ instructions: str @@ -132,9 +132,13 @@ class TargetMonitorsExtractTarget(BaseModel): schema_: Optional[Dict[str, object]] = FieldInfo(alias="schema", default=None) """JSON Schema describing the data you care about. - It guides which pages are selected for tracking and gives the change judge - context on what matters. If omitted, a default summary + key-points schema is - used. + It is used three ways: it guides which pages are selected for tracking, it gives + the change judge extra context on which changes matter (alongside + `instructions`), and it defines the shape of the baseline `data` snapshot on GET + /monitors/{monitor_id} (refreshed at most about once a day). It is not a + response format for changes: change events and webhook payloads always contain + diffs, summaries, and evidence excerpts — never data in this schema's shape. If + omitted, a default summary + key-points schema is used. """ diff --git a/src/context/dev/types/monitor_list_response.py b/src/context/dev/types/monitor_list_response.py index a862041..9a5ae5b 100644 --- a/src/context/dev/types/monitor_list_response.py +++ b/src/context/dev/types/monitor_list_response.py @@ -40,7 +40,7 @@ class DataChangeDetectionMonitorsExactChangeDetection(BaseModel): class DataChangeDetectionMonitorsSemanticChangeDetection(BaseModel): """ - Detect meaning-level changes to the extracted data, ignoring cosmetic or paraphrase-only differences. What is watched is determined by the extract target's `schema` and `instructions`. + Detect meaning-level changes to tracked page content, ignoring cosmetic or paraphrase-only differences. Which changes are meaningful is judged against the extract target's `instructions` (and `schema`, when provided). """ type: Literal["semantic"] @@ -108,7 +108,7 @@ class DataTargetMonitorsSitemapTarget(BaseModel): class DataTargetMonitorsExtractTarget(BaseModel): """Watch the monitor-relevant pages of a site for meaningful changes. - A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged against the monitor's instructions. The tracked page set is refreshed by a periodic re-discovery crawl. + A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged for relevance against the monitor's `instructions` (and `schema`, when provided). The tracked page set is refreshed by a periodic re-discovery crawl. """ instructions: str @@ -133,9 +133,13 @@ class DataTargetMonitorsExtractTarget(BaseModel): schema_: Optional[Dict[str, object]] = FieldInfo(alias="schema", default=None) """JSON Schema describing the data you care about. - It guides which pages are selected for tracking and gives the change judge - context on what matters. If omitted, a default summary + key-points schema is - used. + It is used three ways: it guides which pages are selected for tracking, it gives + the change judge extra context on which changes matter (alongside + `instructions`), and it defines the shape of the baseline `data` snapshot on GET + /monitors/{monitor_id} (refreshed at most about once a day). It is not a + response format for changes: change events and webhook payloads always contain + diffs, summaries, and evidence excerpts — never data in this schema's shape. If + omitted, a default summary + key-points schema is used. """ diff --git a/src/context/dev/types/monitor_retrieve_response.py b/src/context/dev/types/monitor_retrieve_response.py index 57bb13b..6a790bd 100644 --- a/src/context/dev/types/monitor_retrieve_response.py +++ b/src/context/dev/types/monitor_retrieve_response.py @@ -39,7 +39,7 @@ class ChangeDetectionMonitorsExactChangeDetection(BaseModel): class ChangeDetectionMonitorsSemanticChangeDetection(BaseModel): """ - Detect meaning-level changes to the extracted data, ignoring cosmetic or paraphrase-only differences. What is watched is determined by the extract target's `schema` and `instructions`. + Detect meaning-level changes to tracked page content, ignoring cosmetic or paraphrase-only differences. Which changes are meaningful is judged against the extract target's `instructions` (and `schema`, when provided). """ type: Literal["semantic"] @@ -107,7 +107,7 @@ class TargetMonitorsSitemapTarget(BaseModel): class TargetMonitorsExtractTarget(BaseModel): """Watch the monitor-relevant pages of a site for meaningful changes. - A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged against the monitor's instructions. The tracked page set is refreshed by a periodic re-discovery crawl. + A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged for relevance against the monitor's `instructions` (and `schema`, when provided). The tracked page set is refreshed by a periodic re-discovery crawl. """ instructions: str @@ -132,9 +132,13 @@ class TargetMonitorsExtractTarget(BaseModel): schema_: Optional[Dict[str, object]] = FieldInfo(alias="schema", default=None) """JSON Schema describing the data you care about. - It guides which pages are selected for tracking and gives the change judge - context on what matters. If omitted, a default summary + key-points schema is - used. + It is used three ways: it guides which pages are selected for tracking, it gives + the change judge extra context on which changes matter (alongside + `instructions`), and it defines the shape of the baseline `data` snapshot on GET + /monitors/{monitor_id} (refreshed at most about once a day). It is not a + response format for changes: change events and webhook payloads always contain + diffs, summaries, and evidence excerpts — never data in this schema's shape. If + omitted, a default summary + key-points schema is used. """ diff --git a/src/context/dev/types/monitor_update_params.py b/src/context/dev/types/monitor_update_params.py index ec98f08..fa48e24 100644 --- a/src/context/dev/types/monitor_update_params.py +++ b/src/context/dev/types/monitor_update_params.py @@ -57,7 +57,7 @@ class ChangeDetectionMonitorsExactChangeDetection(TypedDict, total=False): class ChangeDetectionMonitorsSemanticChangeDetection(TypedDict, total=False): """ - Detect meaning-level changes to the extracted data, ignoring cosmetic or paraphrase-only differences. What is watched is determined by the extract target's `schema` and `instructions`. + Detect meaning-level changes to tracked page content, ignoring cosmetic or paraphrase-only differences. Which changes are meaningful is judged against the extract target's `instructions` (and `schema`, when provided). """ type: Required[Literal["semantic"]] @@ -124,7 +124,7 @@ class TargetMonitorsSitemapTarget(TypedDict, total=False): class TargetMonitorsExtractTarget(TypedDict, total=False): """Watch the monitor-relevant pages of a site for meaningful changes. - A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged against the monitor's instructions. The tracked page set is refreshed by a periodic re-discovery crawl. + A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged for relevance against the monitor's `instructions` (and `schema`, when provided). The tracked page set is refreshed by a periodic re-discovery crawl. """ instructions: Required[str] @@ -149,9 +149,13 @@ class TargetMonitorsExtractTarget(TypedDict, total=False): schema: Dict[str, object] """JSON Schema describing the data you care about. - It guides which pages are selected for tracking and gives the change judge - context on what matters. If omitted, a default summary + key-points schema is - used. + It is used three ways: it guides which pages are selected for tracking, it gives + the change judge extra context on which changes matter (alongside + `instructions`), and it defines the shape of the baseline `data` snapshot on GET + /monitors/{monitor_id} (refreshed at most about once a day). It is not a + response format for changes: change events and webhook payloads always contain + diffs, summaries, and evidence excerpts — never data in this schema's shape. If + omitted, a default summary + key-points schema is used. """ diff --git a/src/context/dev/types/monitor_update_response.py b/src/context/dev/types/monitor_update_response.py index 3661ca0..6184533 100644 --- a/src/context/dev/types/monitor_update_response.py +++ b/src/context/dev/types/monitor_update_response.py @@ -39,7 +39,7 @@ class ChangeDetectionMonitorsExactChangeDetection(BaseModel): class ChangeDetectionMonitorsSemanticChangeDetection(BaseModel): """ - Detect meaning-level changes to the extracted data, ignoring cosmetic or paraphrase-only differences. What is watched is determined by the extract target's `schema` and `instructions`. + Detect meaning-level changes to tracked page content, ignoring cosmetic or paraphrase-only differences. Which changes are meaningful is judged against the extract target's `instructions` (and `schema`, when provided). """ type: Literal["semantic"] @@ -107,7 +107,7 @@ class TargetMonitorsSitemapTarget(BaseModel): class TargetMonitorsExtractTarget(BaseModel): """Watch the monitor-relevant pages of a site for meaningful changes. - A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged against the monitor's instructions. The tracked page set is refreshed by a periodic re-discovery crawl. + A crawl guided by `schema`/`instructions` selects up to `max_pages` relevant pages to track; each run re-checks exactly those pages, and confirmed content changes are judged for relevance against the monitor's `instructions` (and `schema`, when provided). The tracked page set is refreshed by a periodic re-discovery crawl. """ instructions: str @@ -132,9 +132,13 @@ class TargetMonitorsExtractTarget(BaseModel): schema_: Optional[Dict[str, object]] = FieldInfo(alias="schema", default=None) """JSON Schema describing the data you care about. - It guides which pages are selected for tracking and gives the change judge - context on what matters. If omitted, a default summary + key-points schema is - used. + It is used three ways: it guides which pages are selected for tracking, it gives + the change judge extra context on which changes matter (alongside + `instructions`), and it defines the shape of the baseline `data` snapshot on GET + /monitors/{monitor_id} (refreshed at most about once a day). It is not a + response format for changes: change events and webhook payloads always contain + diffs, summaries, and evidence excerpts — never data in this schema's shape. If + omitted, a default summary + key-points schema is used. """ From d0f20d706a262ca3b5fbd904c4d2816e589d7532 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Jul 2026 00:56:26 +0000 Subject: [PATCH 3/4] feat(api): api update --- .stats.yml | 4 +- .../monitor_list_account_runs_response.py | 43 ++++++++++++++++++- .../dev/types/monitor_list_runs_response.py | 43 ++++++++++++++++++- 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/.stats.yml b/.stats.yml index 6343a8a..c2cc39a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 29 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-190c8939f11afec54c1c0303cb21e7164a350fb66c5fe8fb5ae970e809dfb066.yml -openapi_spec_hash: 65e3c8513e047a95bcf276b6f88045a6 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-ecb277557634e2f0838ea196e2b21f11924f65e133c7977e8c2e1a603b8df466.yml +openapi_spec_hash: 798ce4cb042389a1179bf9af6fc1173d config_hash: ff35e224e809656528c44163aa41bebd diff --git a/src/context/dev/types/monitor_list_account_runs_response.py b/src/context/dev/types/monitor_list_account_runs_response.py index a5d4bf0..d148fac 100644 --- a/src/context/dev/types/monitor_list_account_runs_response.py +++ b/src/context/dev/types/monitor_list_account_runs_response.py @@ -6,7 +6,7 @@ from .._models import BaseModel -__all__ = ["MonitorListAccountRunsResponse", "Data", "DataError"] +__all__ = ["MonitorListAccountRunsResponse", "Data", "DataError", "DataWebhookDelivery", "DataWebhookDeliveryError"] class DataError(BaseModel): @@ -15,6 +15,40 @@ class DataError(BaseModel): message: str +class DataWebhookDeliveryError(BaseModel): + code: str + + message: str + + +class DataWebhookDelivery(BaseModel): + """The webhook delivery attempted for a change detected by this run. + + Omitted when no webhook was attempted, including historical runs created before delivery tracking was added. + """ + + attempted_at: datetime + + error: Optional[DataWebhookDeliveryError] = None + + event_id: str + """Identifier sent in the X-Context-Id header.""" + + http_status: Optional[int] = None + """ + The endpoint's final HTTP response status, or null when no response was + received. + """ + + status: Literal["delivered", "rejected", "failed", "skipped_unsafe_url"] + """Delivery outcome. + + delivered means any 2xx response; rejected means a non-2xx response; failed + means no HTTP response was received; skipped_unsafe_url means the URL failed the + public-endpoint safety check. + """ + + class Data(BaseModel): id: str @@ -56,6 +90,13 @@ class Data(BaseModel): started_at: Optional[datetime] = None + webhook_delivery: Optional[DataWebhookDelivery] = None + """The webhook delivery attempted for a change detected by this run. + + Omitted when no webhook was attempted, including historical runs created before + delivery tracking was added. + """ + class MonitorListAccountRunsResponse(BaseModel): data: List[Data] diff --git a/src/context/dev/types/monitor_list_runs_response.py b/src/context/dev/types/monitor_list_runs_response.py index 1e0500a..94763c3 100644 --- a/src/context/dev/types/monitor_list_runs_response.py +++ b/src/context/dev/types/monitor_list_runs_response.py @@ -6,7 +6,7 @@ from .._models import BaseModel -__all__ = ["MonitorListRunsResponse", "Data", "DataError"] +__all__ = ["MonitorListRunsResponse", "Data", "DataError", "DataWebhookDelivery", "DataWebhookDeliveryError"] class DataError(BaseModel): @@ -15,6 +15,40 @@ class DataError(BaseModel): message: str +class DataWebhookDeliveryError(BaseModel): + code: str + + message: str + + +class DataWebhookDelivery(BaseModel): + """The webhook delivery attempted for a change detected by this run. + + Omitted when no webhook was attempted, including historical runs created before delivery tracking was added. + """ + + attempted_at: datetime + + error: Optional[DataWebhookDeliveryError] = None + + event_id: str + """Identifier sent in the X-Context-Id header.""" + + http_status: Optional[int] = None + """ + The endpoint's final HTTP response status, or null when no response was + received. + """ + + status: Literal["delivered", "rejected", "failed", "skipped_unsafe_url"] + """Delivery outcome. + + delivered means any 2xx response; rejected means a non-2xx response; failed + means no HTTP response was received; skipped_unsafe_url means the URL failed the + public-endpoint safety check. + """ + + class Data(BaseModel): id: str @@ -56,6 +90,13 @@ class Data(BaseModel): started_at: Optional[datetime] = None + webhook_delivery: Optional[DataWebhookDelivery] = None + """The webhook delivery attempted for a change detected by this run. + + Omitted when no webhook was attempted, including historical runs created before + delivery tracking was added. + """ + class MonitorListRunsResponse(BaseModel): data: List[Data] From a147acad4ff27a2143717dc96e94268646195a6e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Jul 2026 00:56:54 +0000 Subject: [PATCH 4/4] release: 2.2.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 9 +++++++++ pyproject.toml | 2 +- src/context/dev/_version.py | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 656a2ef..bfc26f9 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.1.0" + ".": "2.2.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e38771..988cfad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 2.2.0 (2026-07-10) + +Full Changelog: [v2.1.0...v2.2.0](https://github.com/context-dot-dev/context-python-sdk/compare/v2.1.0...v2.2.0) + +### Features + +* **api:** api update ([d0f20d7](https://github.com/context-dot-dev/context-python-sdk/commit/d0f20d706a262ca3b5fbd904c4d2816e589d7532)) +* **api:** api update ([4fb738f](https://github.com/context-dot-dev/context-python-sdk/commit/4fb738fd4527cdeef0448c4d79d31ad513e20e50)) + ## 2.1.0 (2026-07-08) Full Changelog: [v2.0.0...v2.1.0](https://github.com/context-dot-dev/context-python-sdk/compare/v2.0.0...v2.1.0) diff --git a/pyproject.toml b/pyproject.toml index 09e139a..87342b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "context.dev" -version = "2.1.0" +version = "2.2.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 a6ed8e3..b91150a 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__ = "2.1.0" # x-release-please-version +__version__ = "2.2.0" # x-release-please-version