dominus-sdk-python 9.0.2__tar.gz → 9.0.3__tar.gz

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.
Files changed (75) hide show
  1. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/PKG-INFO +6 -2
  2. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/README.md +5 -1
  3. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/__init__.py +1 -1
  4. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus_sdk_python.egg-info/PKG-INFO +6 -2
  5. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/pyproject.toml +1 -1
  6. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_readme_quickstart_catalog.py +53 -18
  7. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/config/__init__.py +0 -0
  8. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/config/endpoints.py +0 -0
  9. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/errors.py +0 -0
  10. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/helpers/__init__.py +0 -0
  11. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/helpers/auth.py +0 -0
  12. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/helpers/cache.py +0 -0
  13. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/helpers/console_capture.py +0 -0
  14. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/helpers/core.py +0 -0
  15. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/helpers/crypto.py +0 -0
  16. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/helpers/sse.py +0 -0
  17. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/helpers/trace.py +0 -0
  18. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/__init__.py +0 -0
  19. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/admin.py +0 -0
  20. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/ai.py +0 -0
  21. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/artifacts.py +0 -0
  22. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/auth.py +0 -0
  23. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/authority.py +0 -0
  24. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/browser.py +0 -0
  25. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/coder.py +0 -0
  26. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/courier.py +0 -0
  27. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/db.py +0 -0
  28. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/ddl.py +0 -0
  29. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/deployer.py +0 -0
  30. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/fastapi.py +0 -0
  31. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/files.py +0 -0
  32. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/health.py +0 -0
  33. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/jobs.py +0 -0
  34. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/logs.py +0 -0
  35. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/platform.py +0 -0
  36. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/portal.py +0 -0
  37. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/processor.py +0 -0
  38. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/publisher.py +0 -0
  39. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/recipes.py +0 -0
  40. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/redis.py +0 -0
  41. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/secrets.py +0 -0
  42. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/secure.py +0 -0
  43. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/stash.py +0 -0
  44. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/sync.py +0 -0
  45. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/warden.py +0 -0
  46. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/namespaces/workflow.py +0 -0
  47. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/py.typed +0 -0
  48. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/services/__init__.py +0 -0
  49. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus/start.py +0 -0
  50. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus_sdk_python.egg-info/SOURCES.txt +0 -0
  51. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus_sdk_python.egg-info/dependency_links.txt +0 -0
  52. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus_sdk_python.egg-info/requires.txt +0 -0
  53. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/dominus_sdk_python.egg-info/top_level.txt +0 -0
  54. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/setup.cfg +0 -0
  55. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_auth.py +0 -0
  56. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_authority_public_vocabulary.py +0 -0
  57. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_browser_namespace.py +0 -0
  58. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_control_plane_namespaces.py +0 -0
  59. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_errors.py +0 -0
  60. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_flat_commands.py +0 -0
  61. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_health.py +0 -0
  62. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_logs.py +0 -0
  63. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_namespace_barrel_exports.py +0 -0
  64. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_platform_coder_namespaces.py +0 -0
  65. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_provisioning_parity.py +0 -0
  66. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_public_exports.py +0 -0
  67. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_publisher_namespace.py +0 -0
  68. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_recipes_namespace.py +0 -0
  69. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_recipes_stash_routing.py +0 -0
  70. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_secrets_presence_contract.py +0 -0
  71. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_stash_artifact_facade.py +0 -0
  72. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_stash_tables_namespace.py +0 -0
  73. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_transport_compat.py +0 -0
  74. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_workflow_lifecycle.py +0 -0
  75. {dominus_sdk_python-9.0.2 → dominus_sdk_python-9.0.3}/tests/test_workflow_refs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dominus-sdk-python
3
- Version: 9.0.2
3
+ Version: 9.0.3
4
4
  Summary: Python SDK for the Dominus gateway-first platform
5
5
  Author-email: CareBridge Systems <dev@carebridge.io>
6
6
  License-Expression: LicenseRef-Proprietary
@@ -48,7 +48,7 @@ cleanup audit is `docs/janitor/2026-08-04-sdk-python-cleanup-audit.md`.
48
48
  - Gateway-scoped client mode for MCP and other user-JWT sessions
49
49
  - Transport compatibility for wrapped `{success,data}` responses and unwrapped Warden/control-plane success objects
50
50
  - Local helpers for JWT verification, trace propagation, retries, and console capture
51
- - Current package version: `9.0.2`
51
+ - Current package version: `9.0.3`
52
52
 
53
53
  ## Install
54
54
 
@@ -79,6 +79,9 @@ from dominus import dominus
79
79
 
80
80
 
81
81
  async def main() -> None:
82
+ # Use the stable identifier of the person performing the write.
83
+ actor_context = {"type": "user", "id": "your-actor-id"}
84
+
82
85
  run = await dominus.workflow.ensure(
83
86
  workflow_recipe_ref="recipe://workflow-recipe-v1/hello@v1",
84
87
  )
@@ -90,6 +93,7 @@ async def main() -> None:
90
93
  kind="blob",
91
94
  artifact_key="hello",
92
95
  data=base64.b64encode(b"hello dominus").decode("ascii"),
96
+ actor_context=actor_context,
93
97
  )
94
98
  artifact = await dominus.artifacts.retrieve_v2(
95
99
  group="your-group",
@@ -15,7 +15,7 @@ cleanup audit is `docs/janitor/2026-08-04-sdk-python-cleanup-audit.md`.
15
15
  - Gateway-scoped client mode for MCP and other user-JWT sessions
16
16
  - Transport compatibility for wrapped `{success,data}` responses and unwrapped Warden/control-plane success objects
17
17
  - Local helpers for JWT verification, trace propagation, retries, and console capture
18
- - Current package version: `9.0.2`
18
+ - Current package version: `9.0.3`
19
19
 
20
20
  ## Install
21
21
 
@@ -46,6 +46,9 @@ from dominus import dominus
46
46
 
47
47
 
48
48
  async def main() -> None:
49
+ # Use the stable identifier of the person performing the write.
50
+ actor_context = {"type": "user", "id": "your-actor-id"}
51
+
49
52
  run = await dominus.workflow.ensure(
50
53
  workflow_recipe_ref="recipe://workflow-recipe-v1/hello@v1",
51
54
  )
@@ -57,6 +60,7 @@ async def main() -> None:
57
60
  kind="blob",
58
61
  artifact_key="hello",
59
62
  data=base64.b64encode(b"hello dominus").decode("ascii"),
63
+ actor_context=actor_context,
60
64
  )
61
65
  artifact = await dominus.artifacts.retrieve_v2(
62
66
  group="your-group",
@@ -178,7 +178,7 @@ from .errors import (
178
178
  TimeoutError as DominusTimeoutError,
179
179
  )
180
180
 
181
- __version__ = "9.0.2"
181
+ __version__ = "9.0.3"
182
182
  __all__ = [
183
183
  # Main SDK instance
184
184
  "dominus",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dominus-sdk-python
3
- Version: 9.0.2
3
+ Version: 9.0.3
4
4
  Summary: Python SDK for the Dominus gateway-first platform
5
5
  Author-email: CareBridge Systems <dev@carebridge.io>
6
6
  License-Expression: LicenseRef-Proprietary
@@ -48,7 +48,7 @@ cleanup audit is `docs/janitor/2026-08-04-sdk-python-cleanup-audit.md`.
48
48
  - Gateway-scoped client mode for MCP and other user-JWT sessions
49
49
  - Transport compatibility for wrapped `{success,data}` responses and unwrapped Warden/control-plane success objects
50
50
  - Local helpers for JWT verification, trace propagation, retries, and console capture
51
- - Current package version: `9.0.2`
51
+ - Current package version: `9.0.3`
52
52
 
53
53
  ## Install
54
54
 
@@ -79,6 +79,9 @@ from dominus import dominus
79
79
 
80
80
 
81
81
  async def main() -> None:
82
+ # Use the stable identifier of the person performing the write.
83
+ actor_context = {"type": "user", "id": "your-actor-id"}
84
+
82
85
  run = await dominus.workflow.ensure(
83
86
  workflow_recipe_ref="recipe://workflow-recipe-v1/hello@v1",
84
87
  )
@@ -90,6 +93,7 @@ async def main() -> None:
90
93
  kind="blob",
91
94
  artifact_key="hello",
92
95
  data=base64.b64encode(b"hello dominus").decode("ascii"),
96
+ actor_context=actor_context,
93
97
  )
94
98
  artifact = await dominus.artifacts.retrieve_v2(
95
99
  group="your-group",
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dominus-sdk-python"
7
- version = "9.0.2"
7
+ version = "9.0.3"
8
8
  description = "Python SDK for the Dominus gateway-first platform"
9
9
  readme = "README.md"
10
10
  license = "LicenseRef-Proprietary"
@@ -64,9 +64,12 @@ def test_quick_start_executes_in_fresh_process_with_live_transport_shapes() -> N
64
64
  r'''
65
65
  import asyncio
66
66
  import base64
67
+ import json
67
68
  import sys
68
69
  from pathlib import Path
69
70
 
71
+ import httpx
72
+
70
73
  readme = Path(sys.argv[1]).read_text(encoding="utf-8")
71
74
  section = readme[readme.index("## Quick Start"):]
72
75
  marker = "```python\n"
@@ -74,37 +77,69 @@ def test_quick_start_executes_in_fresh_process_with_live_transport_shapes() -> N
74
77
  body = section[start:section.index("```", start)]
75
78
 
76
79
  from dominus import dominus
80
+ import dominus.helpers.core as core
77
81
 
78
82
  asyncio.run(dominus._ensure_ready())
79
83
  calls = []
80
-
81
- async def fake_request(**kwargs):
82
- calls.append(kwargs)
83
- endpoint = kwargs["endpoint"]
84
- if endpoint == "/api/authority/runs/ensure":
85
- return {"run_id": "run-1"}
86
- if endpoint == "/svc/stash/items/upsert":
87
- return {"item": {"id": "stash-1"}, "scope_origin": "own"}
88
- if endpoint == "/svc/stash/items/get":
89
- return {"item": {"id": "stash-1"}}
90
- return {}
91
-
92
- dominus._request = fake_request
84
+ actors = []
85
+
86
+ async def fake_jwt(*_args, **_kwargs):
87
+ return "header.payload.signature"
88
+
89
+ core._ensure_valid_jwt = fake_jwt
90
+
91
+ def handle(request):
92
+ body = json.loads(base64.b64decode(request.content)) if request.content else {}
93
+ calls.append(
94
+ {
95
+ "endpoint": request.url.path,
96
+ "body": body,
97
+ "headers": dict(request.headers),
98
+ }
99
+ )
100
+ if request.url.path == "/svc/authority/runs/ensure":
101
+ payload = {"run_id": "run-1"}
102
+ elif request.url.path == "/svc/stash/items/upsert":
103
+ payload = {"item": {"id": "stash-1"}, "scope_origin": "own"}
104
+ elif request.url.path == "/svc/stash/items/get":
105
+ payload = {"item": {"id": "stash-1"}}
106
+ else:
107
+ payload = {}
108
+ return httpx.Response(200, json=payload)
109
+
110
+ transport = httpx.MockTransport(handle)
111
+ real_async_client = httpx.AsyncClient
112
+
113
+ def mock_async_client(*args, **kwargs):
114
+ kwargs["transport"] = transport
115
+ return real_async_client(*args, **kwargs)
116
+
117
+ httpx.AsyncClient = mock_async_client
118
+ real_request = dominus._request
119
+
120
+ async def observed_request(**kwargs):
121
+ actors.append(kwargs.get("actor"))
122
+ return await real_request(**kwargs)
123
+
124
+ dominus._request = observed_request
93
125
  exec(compile(body, "README.md#quick-start", "exec"), {"__name__": "__main__"})
94
126
 
95
127
  endpoints = [call["endpoint"] for call in calls]
96
128
  assert endpoints == [
97
- "/api/authority/runs/ensure",
98
- "/api/artifact/v2/store",
99
- "/api/artifact/v2/retrieve",
129
+ "/svc/authority/runs/ensure",
130
+ "/svc/artifact/v2/store",
131
+ "/svc/artifact/v2/retrieve",
100
132
  "/svc/stash/items/upsert",
101
133
  "/svc/stash/items/get",
102
- "/api/authority/runs/run-1/timeline",
103
- "/api/authority/runs/run-1/verdict",
134
+ "/svc/authority/runs/run-1/timeline",
135
+ "/svc/authority/runs/run-1/verdict",
104
136
  ], endpoints
105
137
  assert calls[0]["body"]["workflow_recipe_ref"] == "recipe://workflow-recipe-v1/hello@v1"
106
138
  assert calls[1]["body"]["data"] == base64.b64encode(b"hello dominus").decode("ascii")
107
139
  assert base64.b64decode(calls[1]["body"]["data"], validate=True) == b"hello dominus"
140
+ assert actors[1] == {"type": "user", "id": "your-actor-id"}
141
+ assert calls[1]["headers"]["x-actor-type"] == "user"
142
+ assert calls[1]["headers"]["x-actor-id"] == "your-actor-id"
108
143
  assert calls[3]["body"] == {
109
144
  "kind": "config",
110
145
  "scope": {"env": "production"},