managed-deepagents 0.6.2.dev44__py3-none-win_amd64.whl → 0.6.2.dev46__py3-none-win_amd64.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.

Potentially problematic release.


This version of managed-deepagents might be problematic. Click here for more details.

@@ -65,8 +65,15 @@ def clear_principal_resolve_cache_for_tests() -> None:
65
65
  _principal_resolve_cache.clear()
66
66
 
67
67
 
68
- def _principal_resolve_cache_key(identity: ResolvePrincipalIdentity) -> str:
69
- return f"{identity['provider']}\0{identity['issuer']}\0{identity['subject']}"
68
+ def _principal_resolve_cache_key(
69
+ context: AgentAuthContext, identity: ResolvePrincipalIdentity
70
+ ) -> str:
71
+ origin = context.base_url.rstrip("/")
72
+ workspace = (context.workspace_id or "").strip()
73
+ return (
74
+ f"{origin}\0{workspace}\0"
75
+ f"{identity['provider']}\0{identity['issuer']}\0{identity['subject']}"
76
+ )
70
77
 
71
78
 
72
79
  class PendingAuthorization(TypedDict):
@@ -145,17 +152,14 @@ class AgentAuth:
145
152
  "Agent Auth principal resolve requires provider, issuer, and subject"
146
153
  )
147
154
  key = _principal_resolve_cache_key(
148
- {"provider": provider, "issuer": issuer, "subject": subject}
155
+ self.context, {"provider": provider, "issuer": issuer, "subject": subject}
149
156
  )
150
157
  cached = _principal_resolve_cache.get(key)
151
158
  if cached is not None:
152
159
  return cached
153
- try:
154
- principal_id = self._resolve_principal_uncached(
155
- {"provider": provider, "issuer": issuer, "subject": subject}
156
- )
157
- except Exception:
158
- raise
160
+ principal_id = self._resolve_principal_uncached(
161
+ {"provider": provider, "issuer": issuer, "subject": subject}
162
+ )
159
163
  _principal_resolve_cache[key] = principal_id
160
164
  return principal_id
161
165
 
Binary file
@@ -24,6 +24,7 @@ from managed_deepagents._agent_auth import (
24
24
  AgentAuth,
25
25
  AgentAuthContext,
26
26
  CredentialAuthorizationRequiredError,
27
+ ResolvePrincipalIdentity,
27
28
  WorkspaceConnection,
28
29
  clear_principal_resolve_cache_for_tests,
29
30
  )
@@ -476,7 +477,7 @@ def resolve_credential_principal_id(
476
477
  def _external_identity_for_resolve(
477
478
  identity: RuntimeIdentity,
478
479
  workspace_id: str | None,
479
- ) -> dict[str, str] | None:
480
+ ) -> ResolvePrincipalIdentity | None:
480
481
  user = identity.get("user") or {}
481
482
  subject = user.get("id") if isinstance(user, Mapping) else None
482
483
  if not isinstance(subject, str) or not subject.strip():
@@ -16,7 +16,6 @@ import asyncio
16
16
  import hmac
17
17
  import json
18
18
  import os
19
- import re
20
19
  from collections.abc import Callable, Iterable, Mapping
21
20
  from http import HTTPStatus
22
21
  from importlib import import_module
@@ -65,17 +64,6 @@ class ManagedUser(ManagedUserRequired, total=False):
65
64
  mda_agent_auth_principal_id: str
66
65
 
67
66
 
68
- _AGENT_AUTH_PRINCIPAL_ID = re.compile(
69
- r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
70
- re.IGNORECASE,
71
- )
72
-
73
-
74
- def is_agent_auth_principal_id(value: str) -> bool:
75
- """True when ``value`` is shaped like an Agent Auth principal UUID."""
76
- return bool(_AGENT_AUTH_PRINCIPAL_ID.fullmatch(value.strip()))
77
-
78
-
79
67
  if TYPE_CHECKING:
80
68
  from managed_deepagents.identity import (
81
69
  HttpIngress,
@@ -104,6 +92,8 @@ INGRESS_SECRET_HEADER = "x-mda-ingress-secret" # noqa: S105 - header name, not
104
92
  #: Internal handoff headers — accepted after a server API key or legacy ingress secret validates.
105
93
  SOURCE_PROVIDER_HEADER = "x-mda-source-provider"
106
94
  SOURCE_THREAD_HEADER = "x-mda-source-thread-id"
95
+ #: Trigger loopback stamp for a verified identity_context principal UUID.
96
+ AGENT_AUTH_PRINCIPAL_HEADER = "x-mda-agent-auth-principal-id"
107
97
 
108
98
  #: Deployment env var carrying the shared secret the trusted backend presents.
109
99
  INGRESS_SECRET_ENV = "MDA_INGRESS_SECRET" # noqa: S105 - env var name, not a secret
@@ -493,9 +483,9 @@ def _trusted_headers_user(headers: Mapping[str, object]) -> ManagedUser:
493
483
  if source_provider is not None and source_thread is not None:
494
484
  user["mda_source_provider"] = str(source_provider)
495
485
  user["mda_source_thread_id"] = str(source_thread)
496
- # Trigger loopback stamps the identity_context principal UUID.
497
- if is_agent_auth_principal_id(str(actor)):
498
- user["mda_agent_auth_principal_id"] = str(actor)
486
+ principal = str(headers.get(AGENT_AUTH_PRINCIPAL_HEADER) or "").strip()
487
+ if principal:
488
+ user["mda_agent_auth_principal_id"] = principal
499
489
  return user
500
490
 
501
491
 
@@ -516,7 +506,13 @@ def _has_valid_handoff_secret(headers: Mapping[str, object]) -> bool:
516
506
 
517
507
  def _has_handoff_headers(headers: Mapping[str, object]) -> bool:
518
508
  return any(
519
- header in headers for header in (USER_HEADER, SOURCE_PROVIDER_HEADER, SOURCE_THREAD_HEADER)
509
+ header in headers
510
+ for header in (
511
+ USER_HEADER,
512
+ SOURCE_PROVIDER_HEADER,
513
+ SOURCE_THREAD_HEADER,
514
+ AGENT_AUTH_PRINCIPAL_HEADER,
515
+ )
520
516
  )
521
517
 
522
518
 
@@ -19,6 +19,7 @@ from managed_deepagents._channels.assistant_text import extract_assistant_text
19
19
  from managed_deepagents._channels.binding import CHANNEL_BINDING_KEY, ChannelBinding
20
20
  from managed_deepagents._channels.types import ChannelError
21
21
  from managed_deepagents._identity_auth import (
22
+ AGENT_AUTH_PRINCIPAL_HEADER,
22
23
  HANDOFF_SECRET_ENV,
23
24
  HANDOFF_SECRET_HEADER,
24
25
  INGRESS_SECRET_ENV,
@@ -355,6 +356,7 @@ def _create_trigger_ingress_loopback_client(
355
356
  )
356
357
  headers = {
357
358
  USER_HEADER: user_id,
359
+ AGENT_AUTH_PRINCIPAL_HEADER: user_id,
358
360
  SOURCE_PROVIDER_HEADER: source["provider"],
359
361
  SOURCE_THREAD_HEADER: source["thread_key"],
360
362
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: managed-deepagents
3
- Version: 0.6.2.dev44
3
+ Version: 0.6.2.dev46
4
4
  Summary: Managed Deep Agents — the define_deep_agent authoring interface plus the CLI that compiles and deploys a code-first Deep Agent repository to a managed LangGraph runtime.
5
5
  Author: LangChain
6
6
  License: MIT
@@ -1,20 +1,20 @@
1
1
  managed_deepagents/__init__.py,sha256=RezkpgYxCcywj6_W7Nk3PN9TMBfYyFgIatxGrIeY8V4,1862
2
2
  managed_deepagents/__main__.py,sha256=GcjmqN0Ea5v8OHKMxYToasm3eCX_doSLOlpEzAi1tAw,67
3
- managed_deepagents/_agent_auth.py,sha256=u9qvBjC1FM1U4M96M_juGqR7XI_0VtGEr6GgF9lcZJ0,19886
3
+ managed_deepagents/_agent_auth.py,sha256=TUZJgc1TyjEFNZX3E97VV30igM_bC9rDZ-pmKpUSExA,20010
4
4
  managed_deepagents/_agent_auth_http.py,sha256=aCYn7Rrtw3cnK3r4ir4JWxwzFkb7cF7nBgPpNdydxDw,5108
5
5
  managed_deepagents/_channel.py,sha256=-Og7QOM1yvV-yeTDOfv2CxXpR2HLY4xdX1bLrIsPi5k,5272
6
6
  managed_deepagents/_cli.py,sha256=jVaw2i1ysdRoWziMdPFmRXtKry_baYGRspyzyIeGWoU,1688
7
- managed_deepagents/_connections.py,sha256=rZnt9CI5BY16N66kR-bgx4pPoAmhNgtV73ejl7IkXhc,19378
7
+ managed_deepagents/_connections.py,sha256=zRqC0uy5FC6rdW9Dbwvpx1ubba6eHb-x7aGSZvONpGk,19418
8
8
  managed_deepagents/_connector.py,sha256=Syp0SRs1oFCUUltIUmZbSNi1Ys_PxObVdiAi-I9GBzs,8040
9
9
  managed_deepagents/_cors.py,sha256=V96RPrqewdRWG5RpEMEBnPuRq9_zF8nf4vf99k5dkuI,7597
10
10
  managed_deepagents/_credential_gate.py,sha256=SNxXunqmHgjBsZpiZu8yp49YkRIO0amkl0-7GHLGnIg,12280
11
11
  managed_deepagents/_eval_filesystem.py,sha256=1nuD0yn3gh19JrWNocWyPFyeJW42E7Gse3XRWCUSTAA,1399
12
12
  managed_deepagents/_extension.py,sha256=x2H1S8inkvTZQ_dr7kq0M8o8rre1FjzCDvMzItw4iyk,5318
13
- managed_deepagents/_identity_auth.py,sha256=TvZLzab47LIkLOps3c5yrVuuoekkTc8Mn4bbWOc4zXk,33546
13
+ managed_deepagents/_identity_auth.py,sha256=sykxsL2wzcJI7I0MFs4xkcoviQhfNQGIBFQ0rfP3cXU,33418
14
14
  managed_deepagents/_identity_http.py,sha256=aVQfZr7UKQoXF1Dry3p9fzXIj1882sEa668rvhn37i0,16029
15
15
  managed_deepagents/_identity_links.py,sha256=Z1H2Seo2KaI-vcdU3_PGM-F06wOz0IQqUP-28wqiQsA,9172
16
16
  managed_deepagents/_identity_runtime.py,sha256=FJeJkhCg0Wo8x8hwiLB-9MUS-VBsGVzBzk3JJaDqH0o,24847
17
- managed_deepagents/_ingress.py,sha256=iqsGm2jZKKn0FqjNn2nJAlR7d-IqCpVKWo6NbMEhjxw,12323
17
+ managed_deepagents/_ingress.py,sha256=8vJqIuyKI3dxC5wbyRPL9ES71xsXgxiTWJqYPpG7Wt0,12402
18
18
  managed_deepagents/_log.py,sha256=oYwOO0ZL4-INkge9YJvtLuCxL9zAtgjSPIggVbkcyc8,2932
19
19
  managed_deepagents/_loopback.py,sha256=hQ1oNi77XpdUjzZURSBRoMvJ1mGCs-STobfBftGmXuE,2409
20
20
  managed_deepagents/_managed_middleware.py,sha256=cfInVHTVjWoy_DBoFlnslfrDf2_n6llGnTGasta4AIo,10295
@@ -28,7 +28,7 @@ managed_deepagents/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
28
28
  managed_deepagents/runtime.py,sha256=B4iKTJZD0zXx_MZ09pqQFOkVo07tqJDT3qvOBr-0iOk,65782
29
29
  managed_deepagents/sandbox.py,sha256=xlpcWa6CoVX6GKip2nK-0Lw-HBCoFGFYm0r4x9eYwcY,2530
30
30
  managed_deepagents/schedules.py,sha256=MtTQN4tlm1NizFDCjZZv_huGfbQx-dj9WP1dIBybCug,5237
31
- managed_deepagents/_binaries/mda.exe,sha256=DAmmuhOtkqW4j92gqsKuXvseKHNVHSJR4SZTPOEeTWA,3905536
31
+ managed_deepagents/_binaries/mda.exe,sha256=fLdjZDHKoYDEbyWC0iDNi4CaMyR0phRPsf1aTUGS4ts,3905536
32
32
  managed_deepagents/_channels/__init__.py,sha256=Z6eXmzaLxG09DSyJoY_CX34axcsBo9gSJ0G7pRm2D6M,1216
33
33
  managed_deepagents/_channels/assistant_text.py,sha256=f-Z3J3PlQFXZHztgBxlRoqB2LigU1Hj1YpwoXBMTR18,2171
34
34
  managed_deepagents/_channels/binding.py,sha256=6vAKbWpg-eyLErJ0SsozH4mZc50hA1NhquM63mVmWDQ,3423
@@ -69,9 +69,9 @@ managed_deepagents/identity/__init__.py,sha256=3KHXJca8w9Xu99_QhJX9iV1xMHTa34NS1
69
69
  managed_deepagents/identity/claims.py,sha256=prby7r_8Lww3MmoBm8PX6PsSGE3GwSHkr8mVIz_08nU,1180
70
70
  managed_deepagents/identity/options.py,sha256=x_yMbXEFR7zXyehEjDHG2qjAlukXjrRBcQLcM6IndLM,2550
71
71
  managed_deepagents/identity/supabase.py,sha256=8uobl3WCrQL_ieSXG8KTLf1th7Qjim9liZT50HeaJE0,6026
72
- managed_deepagents-0.6.2.dev44.dist-info/licenses/LICENSE,sha256=WnPZQQ608ojZUkXl7BW6VbKloIAibZiGm1K6cjeZOL8,1066
73
- managed_deepagents-0.6.2.dev44.dist-info/METADATA,sha256=4mbNB9mNXciy5VVqWTsrBUBFC-3LtWDOiK_MJ1w37Ec,14039
74
- managed_deepagents-0.6.2.dev44.dist-info/WHEEL,sha256=3I5VVWZdsFlU417aCS2bMRuerS8wsfvBq99MyatBV3A,97
75
- managed_deepagents-0.6.2.dev44.dist-info/entry_points.txt,sha256=ziZqkKuaDO3qHCjKmBhrx9cm3ok8bZ9xcEDpUTj4unM,53
76
- managed_deepagents-0.6.2.dev44.dist-info/top_level.txt,sha256=fdBo4O0Hlol_w022tTLB5ftZpamb4yJoQ3MUvjgTGfA,19
77
- managed_deepagents-0.6.2.dev44.dist-info/RECORD,,
72
+ managed_deepagents-0.6.2.dev46.dist-info/licenses/LICENSE,sha256=WnPZQQ608ojZUkXl7BW6VbKloIAibZiGm1K6cjeZOL8,1066
73
+ managed_deepagents-0.6.2.dev46.dist-info/METADATA,sha256=1N01o7C9oOWrkmmpfRxFW95lBu7DORxX_9Wl6fos_t4,14039
74
+ managed_deepagents-0.6.2.dev46.dist-info/WHEEL,sha256=3I5VVWZdsFlU417aCS2bMRuerS8wsfvBq99MyatBV3A,97
75
+ managed_deepagents-0.6.2.dev46.dist-info/entry_points.txt,sha256=ziZqkKuaDO3qHCjKmBhrx9cm3ok8bZ9xcEDpUTj4unM,53
76
+ managed_deepagents-0.6.2.dev46.dist-info/top_level.txt,sha256=fdBo4O0Hlol_w022tTLB5ftZpamb4yJoQ3MUvjgTGfA,19
77
+ managed_deepagents-0.6.2.dev46.dist-info/RECORD,,