dominus-sdk-python 4.3.0__py3-none-any.whl → 4.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
dominus/__init__.py CHANGED
@@ -164,7 +164,7 @@ from .errors import (
164
164
  TimeoutError as DominusTimeoutError,
165
165
  )
166
166
 
167
- __version__ = "4.3.0"
167
+ __version__ = "4.5.0"
168
168
  __all__ = [
169
169
  # Main SDK instance
170
170
  "dominus",
@@ -98,7 +98,16 @@ class BrowserNamespace:
98
98
  Ensure a browser run. ``POST /api/browser/runs/ensure``.
99
99
 
100
100
  Browser run metadata remains browser-worker runtime state. Artifact V2
101
- is only used by the worker for sanitized result/capture payloads.
101
+ is used for sanitized `browser-run` result payloads and, when opted-in
102
+ via ``capture_policy["storage_state"] = "always"`` plus
103
+ ``auth_ref["session_slot_id"]``, for captured Playwright storage_state
104
+ in the separate ``browser-session`` category. Captured values are
105
+ never returned inline; only the artifact ref appears on the result
106
+ envelope as ``result_summary.captured_session_artifact_ref``.
107
+
108
+ Reuse a captured session by passing the same ``session_slot_id`` (slot
109
+ lookup, returns no storage_state on first call) or an explicit
110
+ ``session_artifact_ref`` (hard-error if the ref does not exist).
102
111
  """
103
112
  if not target:
104
113
  raise ValueError("target is required")
@@ -575,3 +575,120 @@ class RedisNamespace:
575
575
  body=body,
576
576
  use_gateway=True,
577
577
  )
578
+
579
+ async def xadd(
580
+ self,
581
+ key: str,
582
+ fields: Dict[str, Any],
583
+ id: Optional[str] = None,
584
+ maxlen: Optional[int] = None,
585
+ ttl: Optional[int] = None,
586
+ category: Optional[str] = None,
587
+ ) -> Dict[str, Any]:
588
+ """
589
+ Append an entry to a Redis stream.
590
+
591
+ Backed by the native dominus-redis-worker /xadd route added 2026-05-09.
592
+ Each field value is independently size-guarded (1 MiB cap per encoded
593
+ value). Use streams for log-style state that scales with iteration
594
+ count (agent step events, audit trails). Replaces RedisWorkerProjectCompat
595
+ shim emulation that did SET/GET whole-collection rewrites.
596
+
597
+ Args:
598
+ key: Stream key (logical_path)
599
+ fields: Field/value dict for the new entry
600
+ id: Optional explicit ID. Defaults to ``*`` (server-generated
601
+ ``<ms>-<seq>``). Returned in the response so callers can use
602
+ it for downstream xrange resume-after pagination.
603
+ maxlen: Optional MAXLEN cap. When set, redis-worker calls XADD
604
+ with MAXLEN ~ N (approximate trim).
605
+ ttl: Optional TTL in seconds (default uses worker default 3600).
606
+ category: Optional namespace category (default ``streams``).
607
+
608
+ Returns:
609
+ Dict with {"key", "id", "ttl_seconds"}
610
+ """
611
+ body: Dict[str, Any] = {
612
+ "logical_path": key,
613
+ "fields": fields,
614
+ }
615
+ if id:
616
+ body["id"] = id
617
+ if maxlen is not None:
618
+ body["maxlen"] = maxlen
619
+ if ttl is not None:
620
+ body["ttl_seconds"] = ttl
621
+ if category:
622
+ body["category"] = category
623
+ return await self._client._request(
624
+ endpoint="/api/redis/xadd",
625
+ body=body,
626
+ use_gateway=True,
627
+ )
628
+
629
+ async def xrange(
630
+ self,
631
+ key: str,
632
+ min: str = "-",
633
+ max: str = "+",
634
+ count: Optional[int] = None,
635
+ category: Optional[str] = None,
636
+ ) -> Dict[str, Any]:
637
+ """
638
+ Read entries from a Redis stream in id order.
639
+
640
+ Backed by /xrange added 2026-05-09. Pass ``-``/``+`` (default) for
641
+ the full range or explicit ``<ms>-<seq>`` ids for resume-after
642
+ pagination.
643
+
644
+ Args:
645
+ key: Stream key (logical_path)
646
+ min: Inclusive lower bound id, ``-`` for oldest.
647
+ max: Inclusive upper bound id, ``+`` for newest.
648
+ count: Optional COUNT cap.
649
+ category: Optional namespace category (default ``streams``).
650
+
651
+ Returns:
652
+ Dict with {"found", "entries": [{"id", "fields"}, ...], "count"}
653
+ """
654
+ body: Dict[str, Any] = {
655
+ "logical_path": key,
656
+ "min": min,
657
+ "max": max,
658
+ }
659
+ if count is not None:
660
+ body["count"] = count
661
+ if category:
662
+ body["category"] = category
663
+ return await self._client._request(
664
+ endpoint="/api/redis/xrange",
665
+ body=body,
666
+ use_gateway=True,
667
+ )
668
+
669
+ async def xlen(
670
+ self,
671
+ key: str,
672
+ category: Optional[str] = None,
673
+ ) -> Dict[str, Any]:
674
+ """
675
+ Stream entry count.
676
+
677
+ Backed by /xlen added 2026-05-09. Approximate on streams with
678
+ deletions; exact otherwise.
679
+
680
+ Args:
681
+ key: Stream key (logical_path)
682
+ category: Optional namespace category (default ``streams``).
683
+
684
+ Returns:
685
+ Dict with {"length"}
686
+ """
687
+ body: Dict[str, Any] = {"logical_path": key}
688
+ if category:
689
+ body["category"] = category
690
+ return await self._client._request(
691
+ endpoint="/api/redis/xlen",
692
+ body=body,
693
+ use_gateway=True,
694
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dominus-sdk-python
3
- Version: 4.3.0
3
+ Version: 4.5.0
4
4
  Summary: Python SDK for the Dominus gateway-first platform
5
5
  Author-email: CareBridge Systems <dev@carebridge.io>
6
6
  License: Proprietary
@@ -1,4 +1,4 @@
1
- dominus/__init__.py,sha256=7zVX4jREUdY9TScFlc93aLsvMCcal0ZVT3R_kOUVFCY,6997
1
+ dominus/__init__.py,sha256=9dUf_NR4QxzaUUK7qpaliliDKq3Q65KC-S9Y2_RdsCo,6997
2
2
  dominus/errors.py,sha256=NthcR-o1Q1nQsE3ZSHStcW_RdZ8LQ06mPDSenY1txgM,8547
3
3
  dominus/start.py,sha256=_VxLodIPbbY3eDgxDAtkrvGYXctKXOS8RDErRM8JWbc,49468
4
4
  dominus/config/__init__.py,sha256=nvLLNh4dM_MCqcfF3XFS2NnVn44q0RYHEfAPP-2G5To,434
@@ -17,7 +17,7 @@ dominus/namespaces/ai.py,sha256=Kr_eY-SkEfC-b1fhVVv40pXn_GHkxRzMGD47WoTgu9M,4855
17
17
  dominus/namespaces/artifacts.py,sha256=MgjkjSmUP_5XGTAFU2UQ1VU3Vju3kVuvDqxChosP2J0,22246
18
18
  dominus/namespaces/auth.py,sha256=YA61WjeRewatrz6BTPhRC95jDgYk3b2QDlH0xdGUceg,67795
19
19
  dominus/namespaces/authority.py,sha256=vfXNc6A-eAeOzSuyMpBmkWjUvFVXvuelrn3O9YcIY9E,76874
20
- dominus/namespaces/browser.py,sha256=EM5Y1t7ezxYSPHdS3xo-jI7dSOFb_etS20EBdUyMR90,7277
20
+ dominus/namespaces/browser.py,sha256=_epZQbCQKUP66CnXJLvccZGJd5TVqMy8nGpscwrqTaE,7868
21
21
  dominus/namespaces/courier.py,sha256=7ZuwTWzVGBPTnqPV1VqPdme6PkPyhQOddwaI1wxrlE8,8324
22
22
  dominus/namespaces/db.py,sha256=dv4IZACziub7OE8i_4q_Z31uVYJglE12TFkFIbFnYjw,15157
23
23
  dominus/namespaces/ddl.py,sha256=NTpd3V3595qcBheUZfFq4tQiAZsyYH9O8GR9OZ_czK8,25844
@@ -29,14 +29,14 @@ dominus/namespaces/jobs.py,sha256=YdiTzajUWtpdhk_jJhOlF0EeFegaRQFiszGSsFLs-Dc,54
29
29
  dominus/namespaces/logs.py,sha256=uM3yDU2YsqEqOt9eg1I9JyHZdHrFxSQahbknTLhmw_U,22102
30
30
  dominus/namespaces/portal.py,sha256=vf0Vu_12yS4_fto7sVCau5vQtghml7Wh7J2-XJnO2zA,15595
31
31
  dominus/namespaces/processor.py,sha256=gk-vvWfBTU9LkV34OaB4VdftArhTE67tfhlUtY0YglI,2678
32
- dominus/namespaces/redis.py,sha256=46-j-yXaS5Od0dGl6D7r5Cp3fLDiQeM6Rlzsn9TCfsc,15508
32
+ dominus/namespaces/redis.py,sha256=1joYhewLGdN4-OCYJu5rvhsF5yORUUfVtBrgjzLKAzs,19337
33
33
  dominus/namespaces/secrets.py,sha256=od8AKgENwW6U-kVfIX3DSphXKeJA6XC-SxbGqsxhhUk,6253
34
34
  dominus/namespaces/secure.py,sha256=9idGY5R6k7b-JM1SAF_1Gt-YV5OempyxFBflgLJieLo,7168
35
35
  dominus/namespaces/sync.py,sha256=mGwMNwc_iWoKgS94n1staPdsKBHNvliMG7omokl7Qmk,2198
36
36
  dominus/namespaces/warden.py,sha256=ebbCeBJJwK9uALEj2aDbvWJ5HTlOXOpXJOwzokH1cso,1139
37
37
  dominus/namespaces/workflow.py,sha256=1LMzlYoVImtdpnuenJDtpx7dB2wdNVE3tSBFn-ZAyJA,47204
38
38
  dominus/services/__init__.py,sha256=LQl5sx6DHhX1xCN3MRoUgffxqwm3Mfm525hijyFods8,43
39
- dominus_sdk_python-4.3.0.dist-info/METADATA,sha256=bEd541Lu4P9g4ulABDzL3z-Xokw-kX8kCRopwUDMjTk,8900
40
- dominus_sdk_python-4.3.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
41
- dominus_sdk_python-4.3.0.dist-info/top_level.txt,sha256=515zxMIbX0DpheRbjvNqKIt_AFqdFjX41jtyp_SqLf4,8
42
- dominus_sdk_python-4.3.0.dist-info/RECORD,,
39
+ dominus_sdk_python-4.5.0.dist-info/METADATA,sha256=OsKJKzfOCg2j9_TMxJL0KBadYk6Nkz5dQ9sL8KSZUAU,8900
40
+ dominus_sdk_python-4.5.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
41
+ dominus_sdk_python-4.5.0.dist-info/top_level.txt,sha256=515zxMIbX0DpheRbjvNqKIt_AFqdFjX41jtyp_SqLf4,8
42
+ dominus_sdk_python-4.5.0.dist-info/RECORD,,