mainsequence 9.0.3.dev33__tar.gz → 9.0.4__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.
- {mainsequence-9.0.3.dev33/mainsequence.egg-info → mainsequence-9.0.4}/PKG-INFO +1 -1
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/server/caller_assertions.py +12 -11
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4/mainsequence.egg-info}/PKG-INFO +1 -1
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/pyproject.toml +1 -1
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_caller_assertions.py +7 -7
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_fastapi_request_identity.py +6 -6
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/LICENSE +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/README.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/mainsequence-inference/SKILL.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/maintenance/metatables_transition/SKILL.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/__init__.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/__main__.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/_request_identity.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/bootstrap.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/api.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/cli.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/code_repository_status.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/config.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/cli/ui.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/__init__.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/agent_runtime_models.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/base.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/client.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/github_issues.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/inference.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/models_foundry.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/models_user.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/observability.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/utils.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/client/value_sets.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/code_repository_context.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/code_repository_skills.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/defaults.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/logconf.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/repository_identity_security.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/scaffold_skills.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/server/__init__.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/server/fastapi.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/setup.cfg +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_auth_bootstrap.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_auth_precedence.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_canonical_api_route_contract.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_cli.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_cli_auth_contract.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_cli_secure_storage.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_client.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_code_repository_branch_contract.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_code_repository_documentation_contract.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_code_repository_runtime_context.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_code_repository_skills.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_dependency_extras.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_dev_release_version.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_environment_resource_context.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_environment_response_contracts.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_filter_normalization.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_github_issues_client.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_independent_context.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_inference_client.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_instrumentation.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_job_client.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_local_ops.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_logconf.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_notification_uid_contract.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_observability_client.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_scaffold_skills.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_secret_client_model.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_source_ownership.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_ssh_utils.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_tolerant_response_reading.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_tolerant_value_sets.py +0 -0
- {mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_user_application_facts.py +0 -0
|
@@ -15,14 +15,14 @@ import requests
|
|
|
15
15
|
|
|
16
16
|
try:
|
|
17
17
|
import jwt
|
|
18
|
-
from cryptography.hazmat.primitives.asymmetric import
|
|
18
|
+
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
|
|
19
19
|
from jwt import InvalidKeyError, InvalidTokenError
|
|
20
20
|
except ImportError as exc:
|
|
21
21
|
raise ImportError("Caller verification requires the mainsequence[server] extra.") from exc
|
|
22
22
|
|
|
23
23
|
ASSERTION_HEADER = "X-MainSequence-Caller-Assertion"
|
|
24
24
|
ASSERTION_TYPE = "mainsequence-caller-assertion+jwt"
|
|
25
|
-
ASSERTION_ALGORITHM = "
|
|
25
|
+
ASSERTION_ALGORITHM = "EdDSA"
|
|
26
26
|
MAX_ASSERTION_SECONDS = 300
|
|
27
27
|
KEY_CACHE_SECONDS = 60
|
|
28
28
|
REQUIRED_CLAIMS = frozenset(
|
|
@@ -107,7 +107,7 @@ class CallerAssertionVerifier:
|
|
|
107
107
|
self.issuer = issuer
|
|
108
108
|
self.jwks_url = jwks_url
|
|
109
109
|
self._fetch_jwks = fetch_jwks or self._fetch_public_keys
|
|
110
|
-
self._keys: dict[str,
|
|
110
|
+
self._keys: dict[str, Ed25519PublicKey] = {}
|
|
111
111
|
self._keys_until = 0.0
|
|
112
112
|
self._lock = threading.Lock()
|
|
113
113
|
|
|
@@ -141,35 +141,36 @@ class CallerAssertionVerifier:
|
|
|
141
141
|
raise CallerAssertionUnavailable("Caller public keys are unavailable.") from None
|
|
142
142
|
|
|
143
143
|
@staticmethod
|
|
144
|
-
def _parse_public_keys(document: object) -> dict[str,
|
|
144
|
+
def _parse_public_keys(document: object) -> dict[str, Ed25519PublicKey]:
|
|
145
145
|
if not isinstance(document, dict) or set(document) != {"keys"}:
|
|
146
146
|
raise CallerAssertionUnavailable("Caller public-key document is invalid.")
|
|
147
147
|
entries = document["keys"]
|
|
148
148
|
if not isinstance(entries, list) or not 1 <= len(entries) <= 16:
|
|
149
149
|
raise CallerAssertionUnavailable("Caller public-key set is invalid.")
|
|
150
|
-
keys: dict[str,
|
|
150
|
+
keys: dict[str, Ed25519PublicKey] = {}
|
|
151
151
|
for entry in entries:
|
|
152
152
|
if (
|
|
153
153
|
not isinstance(entry, dict)
|
|
154
|
-
or set(entry) != {"kid", "alg", "use", "kty", "
|
|
154
|
+
or set(entry) != {"kid", "alg", "use", "kty", "crv", "x"}
|
|
155
155
|
or entry.get("alg") != ASSERTION_ALGORITHM
|
|
156
156
|
or entry.get("use") != "sig"
|
|
157
|
-
or entry.get("kty") != "
|
|
157
|
+
or entry.get("kty") != "OKP"
|
|
158
|
+
or entry.get("crv") != "Ed25519"
|
|
158
159
|
):
|
|
159
160
|
raise CallerAssertionUnavailable("Caller public key is invalid.")
|
|
160
161
|
kid = entry["kid"]
|
|
161
162
|
if not isinstance(kid, str) or not kid or len(kid) > 128 or kid in keys:
|
|
162
163
|
raise CallerAssertionUnavailable("Caller public-key ID is invalid.")
|
|
163
164
|
try:
|
|
164
|
-
key = jwt.algorithms.
|
|
165
|
+
key = jwt.algorithms.OKPAlgorithm.from_jwk(entry)
|
|
165
166
|
except (ValueError, TypeError, InvalidKeyError) as exc:
|
|
166
167
|
raise CallerAssertionUnavailable("Caller public key is invalid.") from exc
|
|
167
|
-
if not isinstance(key,
|
|
168
|
-
raise CallerAssertionUnavailable("Caller public key is
|
|
168
|
+
if not isinstance(key, Ed25519PublicKey):
|
|
169
|
+
raise CallerAssertionUnavailable("Caller public key is not an Ed25519 public key.")
|
|
169
170
|
keys[kid] = key
|
|
170
171
|
return keys
|
|
171
172
|
|
|
172
|
-
def _key_for(self, kid: str) ->
|
|
173
|
+
def _key_for(self, kid: str) -> Ed25519PublicKey:
|
|
173
174
|
with self._lock:
|
|
174
175
|
if time.monotonic() >= self._keys_until or kid not in self._keys:
|
|
175
176
|
self._keys = {}
|
|
@@ -8,7 +8,7 @@ import pytest
|
|
|
8
8
|
import requests
|
|
9
9
|
|
|
10
10
|
jwt = pytest.importorskip("jwt")
|
|
11
|
-
|
|
11
|
+
ed25519 = pytest.importorskip("cryptography.hazmat.primitives.asymmetric.ed25519")
|
|
12
12
|
|
|
13
13
|
from mainsequence.server.caller_assertions import ( # noqa: E402
|
|
14
14
|
ASSERTION_TYPE,
|
|
@@ -28,16 +28,16 @@ KEYS_URL = f"{ISSUER}/caller-keys/"
|
|
|
28
28
|
def keys():
|
|
29
29
|
result = []
|
|
30
30
|
for kid in ("first", "second"):
|
|
31
|
-
key =
|
|
32
|
-
public = jwt.algorithms.
|
|
31
|
+
key = ed25519.Ed25519PrivateKey.generate()
|
|
32
|
+
public = jwt.algorithms.OKPAlgorithm.to_jwk(key.public_key(), as_dict=True)
|
|
33
33
|
result.append(
|
|
34
34
|
(
|
|
35
35
|
key,
|
|
36
36
|
{
|
|
37
37
|
"kid": kid,
|
|
38
|
-
"alg": "
|
|
38
|
+
"alg": "EdDSA",
|
|
39
39
|
"use": "sig",
|
|
40
|
-
**{name: public[name] for name in ("kty", "
|
|
40
|
+
**{name: public[name] for name in ("kty", "crv", "x")},
|
|
41
41
|
},
|
|
42
42
|
)
|
|
43
43
|
)
|
|
@@ -58,7 +58,7 @@ def token(key, *, kid="first", headers=None, **changes):
|
|
|
58
58
|
}
|
|
59
59
|
claims.update(changes)
|
|
60
60
|
return jwt.encode(
|
|
61
|
-
claims, key, algorithm="
|
|
61
|
+
claims, key, algorithm="EdDSA", headers=headers or {"kid": kid, "typ": ASSERTION_TYPE}
|
|
62
62
|
)
|
|
63
63
|
|
|
64
64
|
|
|
@@ -131,7 +131,7 @@ def test_rejects_signature_algorithm_type_and_missing_claims(keys):
|
|
|
131
131
|
with pytest.raises(InvalidCallerAssertion):
|
|
132
132
|
check.verify(
|
|
133
133
|
jwt.encode(
|
|
134
|
-
claims, key, algorithm="
|
|
134
|
+
claims, key, algorithm="EdDSA", headers={"kid": "first", "typ": ASSERTION_TYPE}
|
|
135
135
|
)
|
|
136
136
|
)
|
|
137
137
|
|
|
@@ -7,7 +7,7 @@ from uuid import uuid4
|
|
|
7
7
|
|
|
8
8
|
import jwt
|
|
9
9
|
import pytest
|
|
10
|
-
from cryptography.hazmat.primitives.asymmetric import
|
|
10
|
+
from cryptography.hazmat.primitives.asymmetric import ed25519
|
|
11
11
|
from fastapi import FastAPI, Request, WebSocket
|
|
12
12
|
from fastapi.testclient import TestClient
|
|
13
13
|
|
|
@@ -42,10 +42,10 @@ def clean_environment(monkeypatch):
|
|
|
42
42
|
|
|
43
43
|
@pytest.fixture
|
|
44
44
|
def signed(monkeypatch):
|
|
45
|
-
key =
|
|
46
|
-
public = jwt.algorithms.
|
|
47
|
-
jwk = {name: public[name] for name in ("kty", "
|
|
48
|
-
fetch = Mock(return_value={"keys": [{"kid": "test", "alg": "
|
|
45
|
+
key = ed25519.Ed25519PrivateKey.generate()
|
|
46
|
+
public = jwt.algorithms.OKPAlgorithm.to_jwk(key.public_key(), as_dict=True)
|
|
47
|
+
jwk = {name: public[name] for name in ("kty", "crv", "x")}
|
|
48
|
+
fetch = Mock(return_value={"keys": [{"kid": "test", "alg": "EdDSA", "use": "sig", **jwk}]})
|
|
49
49
|
verifier = CallerAssertionVerifier(
|
|
50
50
|
issuer=ISSUER,
|
|
51
51
|
jwks_url=ISSUER + "/fastapi/caller-keys/",
|
|
@@ -70,7 +70,7 @@ def signed(monkeypatch):
|
|
|
70
70
|
)
|
|
71
71
|
claims.update(changes)
|
|
72
72
|
return jwt.encode(
|
|
73
|
-
claims, key, algorithm="
|
|
73
|
+
claims, key, algorithm="EdDSA", headers={"kid": "test", "typ": ASSERTION_TYPE}
|
|
74
74
|
)
|
|
75
75
|
|
|
76
76
|
return token, fetch, verifier
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/mainsequence/repository_identity_security.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_code_repository_branch_contract.py
RENAMED
|
File without changes
|
{mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_code_repository_documentation_contract.py
RENAMED
|
File without changes
|
{mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_code_repository_runtime_context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_environment_response_contracts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.3.dev33 → mainsequence-9.0.4}/tests/test_models_user_request_bound_auth.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|