langgraph-api 0.4.1__py3-none-any.whl → 0.7.3__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.
Files changed (135) hide show
  1. langgraph_api/__init__.py +1 -1
  2. langgraph_api/api/__init__.py +111 -51
  3. langgraph_api/api/a2a.py +1610 -0
  4. langgraph_api/api/assistants.py +212 -89
  5. langgraph_api/api/mcp.py +3 -3
  6. langgraph_api/api/meta.py +52 -28
  7. langgraph_api/api/openapi.py +27 -17
  8. langgraph_api/api/profile.py +108 -0
  9. langgraph_api/api/runs.py +342 -195
  10. langgraph_api/api/store.py +19 -2
  11. langgraph_api/api/threads.py +209 -27
  12. langgraph_api/asgi_transport.py +14 -9
  13. langgraph_api/asyncio.py +14 -4
  14. langgraph_api/auth/custom.py +52 -37
  15. langgraph_api/auth/langsmith/backend.py +4 -3
  16. langgraph_api/auth/langsmith/client.py +13 -8
  17. langgraph_api/cli.py +230 -133
  18. langgraph_api/command.py +5 -3
  19. langgraph_api/config/__init__.py +532 -0
  20. langgraph_api/config/_parse.py +58 -0
  21. langgraph_api/config/schemas.py +431 -0
  22. langgraph_api/cron_scheduler.py +17 -1
  23. langgraph_api/encryption/__init__.py +15 -0
  24. langgraph_api/encryption/aes_json.py +158 -0
  25. langgraph_api/encryption/context.py +35 -0
  26. langgraph_api/encryption/custom.py +280 -0
  27. langgraph_api/encryption/middleware.py +632 -0
  28. langgraph_api/encryption/shared.py +63 -0
  29. langgraph_api/errors.py +12 -1
  30. langgraph_api/executor_entrypoint.py +11 -6
  31. langgraph_api/feature_flags.py +29 -0
  32. langgraph_api/graph.py +176 -76
  33. langgraph_api/grpc/client.py +313 -0
  34. langgraph_api/grpc/config_conversion.py +231 -0
  35. langgraph_api/grpc/generated/__init__.py +29 -0
  36. langgraph_api/grpc/generated/checkpointer_pb2.py +63 -0
  37. langgraph_api/grpc/generated/checkpointer_pb2.pyi +99 -0
  38. langgraph_api/grpc/generated/checkpointer_pb2_grpc.py +329 -0
  39. langgraph_api/grpc/generated/core_api_pb2.py +216 -0
  40. langgraph_api/grpc/generated/core_api_pb2.pyi +905 -0
  41. langgraph_api/grpc/generated/core_api_pb2_grpc.py +1621 -0
  42. langgraph_api/grpc/generated/engine_common_pb2.py +219 -0
  43. langgraph_api/grpc/generated/engine_common_pb2.pyi +722 -0
  44. langgraph_api/grpc/generated/engine_common_pb2_grpc.py +24 -0
  45. langgraph_api/grpc/generated/enum_cancel_run_action_pb2.py +37 -0
  46. langgraph_api/grpc/generated/enum_cancel_run_action_pb2.pyi +12 -0
  47. langgraph_api/grpc/generated/enum_cancel_run_action_pb2_grpc.py +24 -0
  48. langgraph_api/grpc/generated/enum_control_signal_pb2.py +37 -0
  49. langgraph_api/grpc/generated/enum_control_signal_pb2.pyi +16 -0
  50. langgraph_api/grpc/generated/enum_control_signal_pb2_grpc.py +24 -0
  51. langgraph_api/grpc/generated/enum_durability_pb2.py +37 -0
  52. langgraph_api/grpc/generated/enum_durability_pb2.pyi +16 -0
  53. langgraph_api/grpc/generated/enum_durability_pb2_grpc.py +24 -0
  54. langgraph_api/grpc/generated/enum_multitask_strategy_pb2.py +37 -0
  55. langgraph_api/grpc/generated/enum_multitask_strategy_pb2.pyi +16 -0
  56. langgraph_api/grpc/generated/enum_multitask_strategy_pb2_grpc.py +24 -0
  57. langgraph_api/grpc/generated/enum_run_status_pb2.py +37 -0
  58. langgraph_api/grpc/generated/enum_run_status_pb2.pyi +22 -0
  59. langgraph_api/grpc/generated/enum_run_status_pb2_grpc.py +24 -0
  60. langgraph_api/grpc/generated/enum_stream_mode_pb2.py +37 -0
  61. langgraph_api/grpc/generated/enum_stream_mode_pb2.pyi +28 -0
  62. langgraph_api/grpc/generated/enum_stream_mode_pb2_grpc.py +24 -0
  63. langgraph_api/grpc/generated/enum_thread_status_pb2.py +37 -0
  64. langgraph_api/grpc/generated/enum_thread_status_pb2.pyi +16 -0
  65. langgraph_api/grpc/generated/enum_thread_status_pb2_grpc.py +24 -0
  66. langgraph_api/grpc/generated/enum_thread_stream_mode_pb2.py +37 -0
  67. langgraph_api/grpc/generated/enum_thread_stream_mode_pb2.pyi +16 -0
  68. langgraph_api/grpc/generated/enum_thread_stream_mode_pb2_grpc.py +24 -0
  69. langgraph_api/grpc/generated/errors_pb2.py +39 -0
  70. langgraph_api/grpc/generated/errors_pb2.pyi +21 -0
  71. langgraph_api/grpc/generated/errors_pb2_grpc.py +24 -0
  72. langgraph_api/grpc/ops/__init__.py +370 -0
  73. langgraph_api/grpc/ops/assistants.py +424 -0
  74. langgraph_api/grpc/ops/runs.py +792 -0
  75. langgraph_api/grpc/ops/threads.py +1013 -0
  76. langgraph_api/http.py +16 -5
  77. langgraph_api/http_metrics.py +15 -35
  78. langgraph_api/http_metrics_utils.py +38 -0
  79. langgraph_api/js/build.mts +1 -1
  80. langgraph_api/js/client.http.mts +13 -7
  81. langgraph_api/js/client.mts +2 -5
  82. langgraph_api/js/package.json +29 -28
  83. langgraph_api/js/remote.py +56 -30
  84. langgraph_api/js/src/graph.mts +20 -0
  85. langgraph_api/js/sse.py +2 -2
  86. langgraph_api/js/ui.py +1 -1
  87. langgraph_api/js/yarn.lock +1204 -1006
  88. langgraph_api/logging.py +29 -2
  89. langgraph_api/metadata.py +99 -28
  90. langgraph_api/middleware/http_logger.py +7 -2
  91. langgraph_api/middleware/private_network.py +7 -7
  92. langgraph_api/models/run.py +54 -93
  93. langgraph_api/otel_context.py +205 -0
  94. langgraph_api/patch.py +5 -3
  95. langgraph_api/queue_entrypoint.py +154 -65
  96. langgraph_api/route.py +47 -5
  97. langgraph_api/schema.py +88 -10
  98. langgraph_api/self_hosted_logs.py +124 -0
  99. langgraph_api/self_hosted_metrics.py +450 -0
  100. langgraph_api/serde.py +79 -37
  101. langgraph_api/server.py +138 -60
  102. langgraph_api/state.py +4 -3
  103. langgraph_api/store.py +25 -16
  104. langgraph_api/stream.py +80 -29
  105. langgraph_api/thread_ttl.py +31 -13
  106. langgraph_api/timing/__init__.py +25 -0
  107. langgraph_api/timing/profiler.py +200 -0
  108. langgraph_api/timing/timer.py +318 -0
  109. langgraph_api/utils/__init__.py +53 -8
  110. langgraph_api/utils/cache.py +47 -10
  111. langgraph_api/utils/config.py +2 -1
  112. langgraph_api/utils/errors.py +77 -0
  113. langgraph_api/utils/future.py +10 -6
  114. langgraph_api/utils/headers.py +76 -2
  115. langgraph_api/utils/retriable_client.py +74 -0
  116. langgraph_api/utils/stream_codec.py +315 -0
  117. langgraph_api/utils/uuids.py +29 -62
  118. langgraph_api/validation.py +9 -0
  119. langgraph_api/webhook.py +120 -6
  120. langgraph_api/worker.py +55 -24
  121. {langgraph_api-0.4.1.dist-info → langgraph_api-0.7.3.dist-info}/METADATA +16 -8
  122. langgraph_api-0.7.3.dist-info/RECORD +168 -0
  123. {langgraph_api-0.4.1.dist-info → langgraph_api-0.7.3.dist-info}/WHEEL +1 -1
  124. langgraph_runtime/__init__.py +1 -0
  125. langgraph_runtime/routes.py +11 -0
  126. logging.json +1 -3
  127. openapi.json +839 -478
  128. langgraph_api/config.py +0 -387
  129. langgraph_api/js/isolate-0x130008000-46649-46649-v8.log +0 -4430
  130. langgraph_api/js/isolate-0x138008000-44681-44681-v8.log +0 -4430
  131. langgraph_api/js/package-lock.json +0 -3308
  132. langgraph_api-0.4.1.dist-info/RECORD +0 -107
  133. /langgraph_api/{utils.py → grpc/__init__.py} +0 -0
  134. {langgraph_api-0.4.1.dist-info → langgraph_api-0.7.3.dist-info}/entry_points.txt +0 -0
  135. {langgraph_api-0.4.1.dist-info → langgraph_api-0.7.3.dist-info}/licenses/LICENSE +0 -0
langgraph_api/worker.py CHANGED
@@ -17,10 +17,18 @@ from langgraph_api.config import (
17
17
  BG_JOB_MAX_RETRIES,
18
18
  BG_JOB_TIMEOUT_SECS,
19
19
  )
20
+ from langgraph_api.encryption.context import set_encryption_context
21
+ from langgraph_api.encryption.middleware import (
22
+ decrypt_response,
23
+ extract_blob_encryption_context,
24
+ )
20
25
  from langgraph_api.errors import UserInterrupt, UserRollback, UserTimeout
26
+ from langgraph_api.feature_flags import FF_USE_CORE_API
27
+ from langgraph_api.grpc.ops import Runs as GrpcRuns
21
28
  from langgraph_api.js.errors import RemoteException
22
29
  from langgraph_api.metadata import incr_runs
23
- from langgraph_api.schema import Run, StreamMode
30
+ from langgraph_api.otel_context import restore_otel_trace_context
31
+ from langgraph_api.schema import RUN_KWARGS_ENCRYPTION_SUBFIELDS, Run, StreamMode
24
32
  from langgraph_api.state import state_snapshot_to_thread_state
25
33
  from langgraph_api.stream import AnyStream, astream_state, consume
26
34
  from langgraph_api.utils import with_user
@@ -28,6 +36,8 @@ from langgraph_runtime.database import connect
28
36
  from langgraph_runtime.ops import Runs, Threads
29
37
  from langgraph_runtime.retry import RETRIABLE_EXCEPTIONS
30
38
 
39
+ CrudRuns = GrpcRuns if FF_USE_CORE_API else Runs
40
+
31
41
  logger = structlog.stdlib.get_logger(__name__)
32
42
 
33
43
  ALL_RETRIABLE_EXCEPTIONS = (asyncio.CancelledError, *RETRIABLE_EXCEPTIONS)
@@ -72,6 +82,17 @@ async def worker(
72
82
  run_id = run["run_id"]
73
83
  if attempt == 1:
74
84
  incr_runs()
85
+
86
+ # Extract and set encryption context BEFORE decryption (decrypt_response strips this key)
87
+ encryption_context = extract_blob_encryption_context(run["kwargs"].get("config"))
88
+ if encryption_context:
89
+ set_encryption_context(encryption_context)
90
+
91
+ # Decrypt kwargs fields FIRST, before any access to run["kwargs"]
92
+ run["kwargs"] = await decrypt_response(
93
+ run["kwargs"], "run", RUN_KWARGS_ENCRYPTION_SUBFIELDS
94
+ )
95
+
75
96
  checkpoint: CheckpointPayload | None = None
76
97
  exception: Exception | asyncio.CancelledError | None = None
77
98
  status: str | None = None
@@ -96,15 +117,17 @@ async def worker(
96
117
  )
97
118
  temporary = run["kwargs"].get("temporary", False)
98
119
  resumable = run["kwargs"].get("resumable", False)
120
+ run_created_at_dt = run["created_at"]
99
121
  run_created_at = run["created_at"].isoformat()
122
+ thread_id = str(run.get("thread_id"))
100
123
  lg_logging.set_logging_context(
101
124
  {
102
125
  "run_id": str(run_id),
103
126
  "run_attempt": attempt,
104
- "thread_id": str(run.get("thread_id")),
127
+ "thread_id": thread_id,
105
128
  "assistant_id": str(run.get("assistant_id")),
106
- "graph_id": _get_graph_id(run),
107
- "request_id": _get_request_id(run),
129
+ "graph_id": str(_get_graph_id(run)),
130
+ "request_id": str(_get_request_id(run)),
108
131
  }
109
132
  )
110
133
  run_stream_started_at_dt = datetime.now(UTC)
@@ -146,6 +169,8 @@ async def worker(
146
169
  if not isinstance(e, UserRollback | UserInterrupt):
147
170
  logger.exception(
148
171
  f"Run encountered an error in graph: {type(e)}({e})",
172
+ run_id=str(run_id),
173
+ thread_id=thread_id,
149
174
  )
150
175
  # TimeoutError is a special case where we rely on asyncio.wait_for to timeout runs
151
176
  # Convert user TimeoutErrors to a custom class so we can distinguish and later convert back
@@ -153,13 +178,13 @@ async def worker(
153
178
  raise UserTimeout(e) from e
154
179
  raise
155
180
 
156
- async with Runs.enter(run_id, run["thread_id"], main_loop) as done:
181
+ async with CrudRuns.enter(run_id, run["thread_id"], main_loop, resumable) as done:
157
182
  # attempt the run
158
183
  try:
159
184
  if attempt > BG_JOB_MAX_RETRIES:
160
185
  await logger.aerror(
161
186
  "Run exceeded max attempts",
162
- run_id=run["run_id"],
187
+ run_id=str(run["run_id"]),
163
188
  run_completed_in_ms=(
164
189
  int((time.time() * 1_000) - request_created_at)
165
190
  if request_created_at is not None
@@ -181,24 +206,28 @@ async def worker(
181
206
  )
182
207
 
183
208
  raise RuntimeError(error_message)
209
+ configurable = run["kwargs"].get("config", {}).get("configurable", {})
184
210
  async with set_auth_ctx_for_run(run["kwargs"]):
185
- if temporary:
186
- stream = astream_state(run, attempt, done)
187
- else:
188
- stream = astream_state(
189
- run,
190
- attempt,
191
- done,
192
- on_checkpoint=on_checkpoint,
193
- on_task_result=on_task_result,
211
+ with restore_otel_trace_context(
212
+ configurable, run_id=str(run_id), thread_id=str(thread_id)
213
+ ):
214
+ if temporary:
215
+ stream = astream_state(run, attempt, done)
216
+ else:
217
+ stream = astream_state(
218
+ run,
219
+ attempt,
220
+ done,
221
+ on_checkpoint=on_checkpoint,
222
+ on_task_result=on_task_result,
223
+ )
224
+ stream_modes: set[StreamMode] = set(
225
+ run["kwargs"].get("stream_mode", [])
226
+ )
227
+ await asyncio.wait_for(
228
+ wrap_user_errors(stream, run_id, resumable, stream_modes),
229
+ BG_JOB_TIMEOUT_SECS,
194
230
  )
195
- stream_modes: set[StreamMode] = set(
196
- run["kwargs"].get("stream_mode", [])
197
- )
198
- await asyncio.wait_for(
199
- wrap_user_errors(stream, run_id, resumable, stream_modes),
200
- BG_JOB_TIMEOUT_SECS,
201
- )
202
231
  except (Exception, asyncio.CancelledError) as ee:
203
232
  exception = ee
204
233
  except BaseException as eee:
@@ -228,6 +257,7 @@ async def worker(
228
257
  if request_created_at is not None
229
258
  else None
230
259
  ),
260
+ "run_wait_time_ms": ms(run_started_at_dt, run_created_at_dt),
231
261
  }
232
262
 
233
263
  if exception is None:
@@ -269,7 +299,7 @@ async def worker(
269
299
  elif isinstance(exception, TimeoutError):
270
300
  status = "timeout"
271
301
  await logger.awarning(
272
- "Background run timed out",
302
+ "Background run timed out. To increase the timeout, set the BG_JOB_TIMEOUT_SECS environment variable (integer, defaults to 3600).",
273
303
  **log_info,
274
304
  )
275
305
  if not temporary:
@@ -280,6 +310,7 @@ async def worker(
280
310
  status,
281
311
  graph_id=graph_id,
282
312
  checkpoint=checkpoint,
313
+ exception=exception,
283
314
  )
284
315
  elif isinstance(exception, UserRollback):
285
316
  status = "rollback"
@@ -331,7 +362,7 @@ async def worker(
331
362
  )
332
363
  # Don't update thread status yet.
333
364
  # Apply this even for temporary runs, so we retry
334
- await Runs.set_status(conn, run_id, "pending")
365
+ await CrudRuns.set_status(conn, run_id, "pending")
335
366
  else:
336
367
  status = "error"
337
368
 
@@ -1,27 +1,35 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.4.1
4
- Author-email: Nuno Campos <nuno@langchain.dev>, Will Fu-Hinthorn <will@langchain.dev>
3
+ Version: 0.7.3
4
+ Author-email: Will Fu-Hinthorn <will@langchain.dev>, Josh Rogers <josh@langchain.dev>, Parker Rule <parker@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
7
7
  Requires-Python: >=3.11
8
8
  Requires-Dist: cloudpickle>=3.0.0
9
- Requires-Dist: cryptography<45.0,>=42.0.0
9
+ Requires-Dist: cryptography<47.0,>=42.0.0
10
+ Requires-Dist: grpcio-health-checking<2.0.0,>=1.75.0
11
+ Requires-Dist: grpcio-tools==1.75.1
12
+ Requires-Dist: grpcio<2.0.0,>=1.75.0
10
13
  Requires-Dist: httpx>=0.25.0
11
14
  Requires-Dist: jsonschema-rs<0.30,>=0.20.0
12
15
  Requires-Dist: langchain-core>=0.3.64
13
- Requires-Dist: langgraph-checkpoint>=2.0.23
14
- Requires-Dist: langgraph-runtime-inmem<0.10.0,>=0.9.0
15
- Requires-Dist: langgraph-sdk>=0.2.0
16
- Requires-Dist: langgraph>=0.4.0
17
- Requires-Dist: langsmith>=0.3.45
16
+ Requires-Dist: langgraph-checkpoint<5,>=3.0.1
17
+ Requires-Dist: langgraph-runtime-inmem<0.23.0,>=0.22.0
18
+ Requires-Dist: langgraph-sdk>=0.3.0
19
+ Requires-Dist: langgraph<2,>=0.4.10
20
+ Requires-Dist: langsmith[otel]>=0.6.3
21
+ Requires-Dist: opentelemetry-api>=1.37.0
22
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.37.0
23
+ Requires-Dist: opentelemetry-sdk>=1.37.0
18
24
  Requires-Dist: orjson>=3.9.7
25
+ Requires-Dist: protobuf<7.0.0,>=6.32.1
19
26
  Requires-Dist: pyjwt>=2.9.0
20
27
  Requires-Dist: sse-starlette<2.2.0,>=2.1.0
21
28
  Requires-Dist: starlette>=0.38.6
22
29
  Requires-Dist: structlog<26,>=24.1.0
23
30
  Requires-Dist: tenacity>=8.0.0
24
31
  Requires-Dist: truststore>=0.1
32
+ Requires-Dist: uuid-utils>=0.12.0
25
33
  Requires-Dist: uvicorn>=0.26.0
26
34
  Requires-Dist: watchfiles>=0.13
27
35
  Description-Content-Type: text/markdown
@@ -0,0 +1,168 @@
1
+ langgraph_api/__init__.py,sha256=G0rwkDLSytonr7idr8ma7KaTUnRCn3-Ripum70RSeh0,22
2
+ langgraph_api/asgi_transport.py,sha256=PC3Fkqd8ajZOHyIGgl6GK8xrMo72vB7hcE-27epgPP0,5530
3
+ langgraph_api/asyncio.py,sha256=FEEkLm_N-15cbElo4vQ309MkDKBZuRqAYV8VJ1DocNw,9860
4
+ langgraph_api/cli.py,sha256=sUL1M4rfZ1zjDc04DRRqPpAdFEvIbvkhdSd8J5TZuec,20084
5
+ langgraph_api/command.py,sha256=DCAlZNZ4m3-IVcxXFB2coZ09pUEehOsrKNBR0TJltEU,856
6
+ langgraph_api/cron_scheduler.py,sha256=2MSP2UbRmkos82wBDzd62ml7aeqvB-eZ4sV5pxJDt6I,3332
7
+ langgraph_api/errors.py,sha256=rI_eZZYmvrj1N09JrjJJ862iCFfsrwQ8SWb9BE8_bU0,2219
8
+ langgraph_api/executor_entrypoint.py,sha256=GzjiMuQF752Er2HYyb-PTf4f0IrjNsiGXb7CwBW0fW4,849
9
+ langgraph_api/feature_flags.py,sha256=nATkWAn_YqwbKTMp9JMFmc3XFpC33MzWTExTyKAl8ss,1473
10
+ langgraph_api/graph.py,sha256=faoIXx8lpC3i_6zhKTZNjUsku1F_BtlpaOXzByUhJYM,29006
11
+ langgraph_api/http.py,sha256=N2YGalN6ytPnPnFBiyu0CgWni9j68Np8CAoeEqMXtk4,5966
12
+ langgraph_api/http_metrics.py,sha256=vw3UT9uj9qgxQ_DwJq77HGZqh6LHSjyxylWhqkf2jAw,5095
13
+ langgraph_api/http_metrics_utils.py,sha256=sjxF7SYGTzY0Wz_G0dzatsYNnWr31S6ujej4JmBG2yo,866
14
+ langgraph_api/logging.py,sha256=o5iVARqtFYKIcRrK2nk1ymcKEiVYKd_dHmhXLF2khFI,6090
15
+ langgraph_api/metadata.py,sha256=CA60_y0vXZ7emxIdDfRgMBrwidBih7aGtiYvOnvz-aU,9682
16
+ langgraph_api/otel_context.py,sha256=vKL49rlEKo7t0IhC-M7HXf19IYGiDuowa2yS5dyASws,6175
17
+ langgraph_api/patch.py,sha256=rbDd-RY-fGF8s3huN_FWfxYy9j1DzktxpS61PmY8_Zk,1536
18
+ langgraph_api/queue_entrypoint.py,sha256=pDfqekyhuLaI1YH-hxGmqwH6YDKMTCV8MeX6RfnAkps,8596
19
+ langgraph_api/route.py,sha256=2hx2lGVhuYb-Bej5xRddzx8aQwP1p-2Y_iPFCfAVH6A,6815
20
+ langgraph_api/schema.py,sha256=6I-d56l80-lmIo-la8cjCOy40y3076jzZSThpIpdw-Y,11739
21
+ langgraph_api/self_hosted_logs.py,sha256=MnXRLnUyv32-c0X9uv4yOy6Sz0meaxC1WuM1RBZTwU4,4425
22
+ langgraph_api/self_hosted_metrics.py,sha256=MMTgsbMpt2-vHJXZpbyI21dBoFsTaMVGWQxITdybX-Q,16884
23
+ langgraph_api/serde.py,sha256=4e-Q47hDKaSCde860Sv-Onl4_LxmcFeTT01p6KPWRnM,7876
24
+ langgraph_api/server.py,sha256=zXKZS6dr6iwMuVIoHY5cXb7sxKz7P_3MhZcpdG3ob7M,10287
25
+ langgraph_api/sse.py,sha256=SLdtZmTdh5D8fbWrQjuY9HYLd2dg8Rmi6ZMmFMVc2iE,4204
26
+ langgraph_api/state.py,sha256=0j4bMSqaUZdPx9dhTH_0u6fEnFzHOsBowmr2th-v0NY,4725
27
+ langgraph_api/store.py,sha256=dOuNc64dpg6_rhyIMSCGbQzZ1SPvq_KnJUmf8Sqyubw,5105
28
+ langgraph_api/stream.py,sha256=2SoMduZWDLBY6AeCNoWrg44RIytSqdtlYcyvf1vfFLE,20971
29
+ langgraph_api/thread_ttl.py,sha256=zsQ1sKuqZygG7DE65ZpDmMnWiicDz4bCLDG4p8TjivI,2438
30
+ langgraph_api/traceblock.py,sha256=Qq5CUdefnMDaRDnyvBSWGBClEj-f3oO7NbH6fedxOSE,630
31
+ langgraph_api/validation.py,sha256=VquRrx6j_84htRDi5m9NfqsRksCBwdJmnwlMn9X-cpk,5599
32
+ langgraph_api/webhook.py,sha256=6m815Zqqff2b1YJu5ES46s2Sdfdn309ZjXebbntgHL8,5782
33
+ langgraph_api/worker.py,sha256=l40a8WXfgj6AJNfAhsCb6RCt3lJWBnkW2CgeQwtVyLY,16930
34
+ langgraph_api/api/__init__.py,sha256=ewFqztuYFTpoLseaSZkc_gbDKduHcdb1ILMePr3zZeM,8286
35
+ langgraph_api/api/a2a.py,sha256=vX2k_71L1UA6OUklpsON2jRRwpXGvHqBZblep7xnecQ,54301
36
+ langgraph_api/api/assistants.py,sha256=VaavnwnamcB0ZlmgG4LTxNYTDNpqDLJ1MUJMBhbTRsQ,20289
37
+ langgraph_api/api/mcp.py,sha256=Nl6UoBXyxuSA6Zb9K7f69FHDsuhFou_UMubcAWZQoCw,14424
38
+ langgraph_api/api/meta.py,sha256=4P7mez8IF3orapfCgf1CjALrl5DARnkMqwVmB6Refx0,6269
39
+ langgraph_api/api/openapi.py,sha256=LfiRhoLWywe0dkQYECPHulTjyTjdprw82ARMV71PL20,12397
40
+ langgraph_api/api/profile.py,sha256=CA1ZkHALOuP8orYTICnEhcG_JnnA2wnyjbWyeb117jA,3455
41
+ langgraph_api/api/runs.py,sha256=wwbZEK7Tam1VXRlHP33IiOWYnHEs8A5FQrcXBfdXuT0,27839
42
+ langgraph_api/api/store.py,sha256=Qi9yp-3GTmCdUJtHuNFuCS7uZ0VVomMJFr3nNPDvFbg,6025
43
+ langgraph_api/api/threads.py,sha256=dpopnoXiYrxDJ2h6yshVMDtBRNXtQxgJj9OGCRhz6pk,16663
44
+ langgraph_api/api/ui.py,sha256=_genglTUy5BMHlL0lkQypX524yFv6Z5fraIvnrxp7yE,2639
45
+ langgraph_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ langgraph_api/auth/custom.py,sha256=-bCRMxXbGnWh4d0wZVxQicZVup-tutvkXpFpIKSXhfE,23272
47
+ langgraph_api/auth/middleware.py,sha256=jDA4t41DUoAArEY_PNoXesIUBJ0nGhh85QzRdn5EPD0,1916
48
+ langgraph_api/auth/noop.py,sha256=Bk6Nf3p8D_iMVy_OyfPlyiJp_aEwzL-sHrbxoXpCbac,586
49
+ langgraph_api/auth/studio_user.py,sha256=fojJpexdIZYI1w3awiqOLSwMUiK_M_3p4mlfQI0o-BE,454
50
+ langgraph_api/auth/langsmith/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ langgraph_api/auth/langsmith/backend.py,sha256=JVf8-q1IvB5EeiLJge3cOtPvDg6qHzK_4cR-R8hPXXQ,3753
52
+ langgraph_api/auth/langsmith/client.py,sha256=79kwCVeHU64nsHsxWipfZhf44lM6vfs2nlfTxlJF6LU,4142
53
+ langgraph_api/config/__init__.py,sha256=yBvJggB1b9YAdW2CcNeerWSiFFHtHLV446VNN4uCrsc,17322
54
+ langgraph_api/config/_parse.py,sha256=5P-tYGe4BCspeynlO9oWc9pzkfKZjNq9HQXfuEI-hLw,1859
55
+ langgraph_api/config/schemas.py,sha256=kD-74ACMJw88wKKuoKYoW8s8pZLateeDJCZ3u1wfjuI,16020
56
+ langgraph_api/encryption/__init__.py,sha256=gaCZ00CocSbqSqrDn6XJHaSp2CZCnC8qnrD9G4fbzyI,363
57
+ langgraph_api/encryption/aes_json.py,sha256=f2SoNEdwmzQBwRazNH8ZGCll31Zr_ZrJosv2b-GDy9U,6097
58
+ langgraph_api/encryption/context.py,sha256=_6qyeDa9K6HLzR0dRikbx1PWgJXrY2f7vu1g2_CvV3c,1149
59
+ langgraph_api/encryption/custom.py,sha256=ChFzox94vcAj3ZqSkxWNEJ4vyrszc9DxvZl8Y5S2gf8,10742
60
+ langgraph_api/encryption/middleware.py,sha256=xo4I9b2vDMpsegj6xallCdnELbigEh1jLxEk8yiRrCg,23755
61
+ langgraph_api/encryption/shared.py,sha256=bsyyi0njbUsi9sLN5Qwr4fJfKi_7BbkX8ngbkgpgBAM,2101
62
+ langgraph_api/grpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ langgraph_api/grpc/client.py,sha256=cZIowtE05zcNQEsYecDnQuCAK3oi_P2JXa1WVfywC6s,10494
64
+ langgraph_api/grpc/config_conversion.py,sha256=1lfLrprTp0J83DCUE3Op6e1u2afFI1Z2mcFUzCyHEco,7706
65
+ langgraph_api/grpc/generated/__init__.py,sha256=bMom8AZdwLEtOLeK2f6rrFE3-6e8gLhCnom9p-UzxM0,868
66
+ langgraph_api/grpc/generated/checkpointer_pb2.py,sha256=c2kqUY79VD5PnODN6XX6czOHI7fwjFz3HGKFtWy-dKI,5314
67
+ langgraph_api/grpc/generated/checkpointer_pb2.pyi,sha256=wWIPTrNZCCQb0mwNc5qkGXva-TJ4z0wSvqakbFb8BPQ,5323
68
+ langgraph_api/grpc/generated/checkpointer_pb2_grpc.py,sha256=jRDArLKMeZrEVzqJuxU9yxrVaVy015WYqlexF6710MU,12676
69
+ langgraph_api/grpc/generated/core_api_pb2.py,sha256=ybIP5OH83aukNk27O1y0EEq51OiYa_mq-Z2rPP8tnV0,35963
70
+ langgraph_api/grpc/generated/core_api_pb2.pyi,sha256=M6Ch39aISRiupWBIS6EjZbQ_4ilR-e2Ug2eri1uAQFs,47597
71
+ langgraph_api/grpc/generated/core_api_pb2_grpc.py,sha256=SA1-SDOAg03oRWqthg_COOvbgHREFGtGsb2VX6MF_Tw,60835
72
+ langgraph_api/grpc/generated/engine_common_pb2.py,sha256=SdLNv2GFwg4XtxEX3JAtJ_lNHZ16SSVcw23sozX_jTM,28311
73
+ langgraph_api/grpc/generated/engine_common_pb2.pyi,sha256=tFn1pCA65ccBD9_WQawFNFIwBU9EPt0FWeJrRTWcoBs,37220
74
+ langgraph_api/grpc/generated/engine_common_pb2_grpc.py,sha256=ChVXQ2OvT6i5OsWWvS-Cn2ldyXDbaPP1LwWmZfU3ya8,894
75
+ langgraph_api/grpc/generated/enum_cancel_run_action_pb2.py,sha256=lUUgb_1EHrh_j0J5j3V1Kw_SUH0ite2kRlv_fA0_qv4,1567
76
+ langgraph_api/grpc/generated/enum_cancel_run_action_pb2.pyi,sha256=iWDJVfBjmfmfzTpIF3GPQjZT7xbfSqIDBmAEMe1LqEM,442
77
+ langgraph_api/grpc/generated/enum_cancel_run_action_pb2_grpc.py,sha256=ldktwMSbuyvLtF8MBrxFUn5ujuyvCImuzRzjkC1DaEI,903
78
+ langgraph_api/grpc/generated/enum_control_signal_pb2.py,sha256=Ex43DoJnCekyqIHjGiZbzxv18to3m_01-_xRIkz7VA8,1598
79
+ langgraph_api/grpc/generated/enum_control_signal_pb2.pyi,sha256=TzMXy8IRnSF5O6OMh8hVmwjoGdhHZHrP4tR-Ch2AU0o,548
80
+ langgraph_api/grpc/generated/enum_control_signal_pb2_grpc.py,sha256=sFP0bCGyO_bp0-7Z1zwX0IvPSRWr3fBE8d9YziA1ydc,900
81
+ langgraph_api/grpc/generated/enum_durability_pb2.py,sha256=bPsGgqmYBGXZHU5fXO_DKpKvNfdPM1Yy3Roxlq9HjWw,1574
82
+ langgraph_api/grpc/generated/enum_durability_pb2.pyi,sha256=DmZxqhLW1n5MIPxaNxDudvGJBKXwooaHmH5EFNPXyLE,505
83
+ langgraph_api/grpc/generated/enum_durability_pb2_grpc.py,sha256=BQsfqAYZZvZM8HmvYyn7RbFH51WB0BJdflQ9DABu4pc,896
84
+ langgraph_api/grpc/generated/enum_multitask_strategy_pb2.py,sha256=F7zxI3TxTHck7oQ5vTlVplRbFUr92d9lvSXKzHf14cU,1640
85
+ langgraph_api/grpc/generated/enum_multitask_strategy_pb2.pyi,sha256=sOcVD6V5eLR8gTjOootxgMeVNMDUrOkKSaHBJMwC3V4,588
86
+ langgraph_api/grpc/generated/enum_multitask_strategy_pb2_grpc.py,sha256=9ZI2qrAC0WWHEn7phtyHp9PSAm6-Cm8L8aixQbJS5H0,904
87
+ langgraph_api/grpc/generated/enum_run_status_pb2.py,sha256=r31G5SG43wC9cZ63cf7I4bDDzUj_yN6iohZHCSsJUJ0,1661
88
+ langgraph_api/grpc/generated/enum_run_status_pb2.pyi,sha256=eCzHWo1y7bwy40Yu0eyeymf9kfD76p9QlhBGydkdSuY,677
89
+ langgraph_api/grpc/generated/enum_run_status_pb2_grpc.py,sha256=K1PtbVYTOOxZFSfmhU6GwTvfM3K25QV1x0NYbGQ4-78,896
90
+ langgraph_api/grpc/generated/enum_stream_mode_pb2.py,sha256=JrC12tCPapY2EnRUUmqrPxzNWam26ZqBF3Y2Xn4Ie7M,1764
91
+ langgraph_api/grpc/generated/enum_stream_mode_pb2.pyi,sha256=qu_fiSOiUHo6S9qLcvpOomJCz-kK4p21iXqaSaVBqpk,861
92
+ langgraph_api/grpc/generated/enum_stream_mode_pb2_grpc.py,sha256=UJoVhZT9HG-iw6I01j83x0T4zpTSMixjf9zmdvhqt2w,897
93
+ langgraph_api/grpc/generated/enum_thread_status_pb2.py,sha256=WCL5geuQUJLHNI9R-blHD1b06yyBm5VsjZNlKBXUP1s,1593
94
+ langgraph_api/grpc/generated/enum_thread_status_pb2.pyi,sha256=6Jz-TGMJn6HQYbGoF8Vuau08ijV2eqHeAYNTucDBjMU,531
95
+ langgraph_api/grpc/generated/enum_thread_status_pb2_grpc.py,sha256=vezfoGmllADB5UGeDKns3wATSOQ6L1NJhwRopo_NSs0,899
96
+ langgraph_api/grpc/generated/enum_thread_stream_mode_pb2.py,sha256=DXbe4vf2RotNj0t0N_MdyJRuiAm11KGQESR13y29JZE,1630
97
+ langgraph_api/grpc/generated/enum_thread_stream_mode_pb2.pyi,sha256=vS5KdSEeUJS1YxFakMZ2F6Ft-Imu2fMbZTgzbG8K56s,593
98
+ langgraph_api/grpc/generated/enum_thread_stream_mode_pb2_grpc.py,sha256=SbOmBSBSFEqKhfwA5OUQbufcRxzug-rqVf8yK2R0vrM,904
99
+ langgraph_api/grpc/generated/errors_pb2.py,sha256=JI6x-vBK1AE7DHZ5DQwN1mZWF6C4xTRxCaCkxpaDGEM,1758
100
+ langgraph_api/grpc/generated/errors_pb2.pyi,sha256=U6bVim23Mhnwclum7xE1a9h9okES0Fp5KGrQoB-qiqA,849
101
+ langgraph_api/grpc/generated/errors_pb2_grpc.py,sha256=isRazKCSYfy2FT97Gtck3feSkD54htDhtkMX4dFtp2s,887
102
+ langgraph_api/grpc/ops/__init__.py,sha256=EqYni0xn0mHlFAFUfzQpzYIHHf1-p6QhqHQC7ekxkiY,13974
103
+ langgraph_api/grpc/ops/assistants.py,sha256=WmJuYHn7kYkSzFsul6HyfJptratHEbL_mcQqvRhUPEY,13682
104
+ langgraph_api/grpc/ops/runs.py,sha256=J2MC_OSUfG6kpK145nh0nSL393K6e3a_e6sa5cLj4EM,27211
105
+ langgraph_api/grpc/ops/threads.py,sha256=HBfc-I--av2N_yshfJgeo8uibAJpIuo7rvX7uL1ik-U,35854
106
+ langgraph_api/js/.gitignore,sha256=l5yI6G_V6F1600I1IjiUKn87f4uYIrBAYU1MOyBBhg4,59
107
+ langgraph_api/js/.prettierrc,sha256=0es3ovvyNIqIw81rPQsdt1zCQcOdBqyR_DMbFE4Ifms,19
108
+ langgraph_api/js/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
+ langgraph_api/js/base.py,sha256=CJihwc51MwOVkis80f8zudRa1fQz_5jrom4rY8trww8,1133
110
+ langgraph_api/js/build.mts,sha256=-LVN4xxh5tY0JvJFZKT8vE6uT-O4oXjQlgCp9NwmVnQ,3380
111
+ langgraph_api/js/client.http.mts,sha256=FeVM53vduTPCyMPaYs__kmB3iWcz0k0om811DG0JvH0,4883
112
+ langgraph_api/js/client.mts,sha256=6lG_lDJkQVeWMURb2TaXR0Zvp8pMZk_N3id1zJsbIuA,32295
113
+ langgraph_api/js/errors.py,sha256=Cm1TKWlUCwZReDC5AQ6SgNIVGD27Qov2xcgHyf8-GXo,361
114
+ langgraph_api/js/global.d.ts,sha256=j4GhgtQSZ5_cHzjSPcHgMJ8tfBThxrH-pUOrrJGteOU,196
115
+ langgraph_api/js/package.json,sha256=RBs9OT4A0LeFOsu4d4EhsuO7XJUzgXN7nCRuOxRj-n0,1354
116
+ langgraph_api/js/remote.py,sha256=anYcBH4vH3RWc8DxrkcHdisuaCLz-fqPnqWlaEoI64E,39716
117
+ langgraph_api/js/schema.py,sha256=M4fLtr50O1jck8H1hm_0W4cZOGYGdkrB7riLyCes4oY,438
118
+ langgraph_api/js/sse.py,sha256=BB2YfVP6KKFKns34lTApXOSmK5CxiIUO29n62mS7jYc,4127
119
+ langgraph_api/js/traceblock.mts,sha256=QtGSN5VpzmGqDfbArrGXkMiONY94pMQ5CgzetT_bKYg,761
120
+ langgraph_api/js/tsconfig.json,sha256=imCYqVnqFpaBoZPx8k1nO4slHIWBFsSlmCYhO73cpBs,341
121
+ langgraph_api/js/ui.py,sha256=LG_HnQicmAAwvb6OJ50_ScjlnpPjpls4zS8ZkfH-SxQ,2494
122
+ langgraph_api/js/yarn.lock,sha256=p-hwSXUvL-P_e3uOJXIWbAqBieAl-yMPesBsSvw8x4s,96379
123
+ langgraph_api/js/src/graph.mts,sha256=etZd27NaoVevyitJ-LAUue0HeR7V3F2YNeSGwWHm13s,3417
124
+ langgraph_api/js/src/load.hooks.mjs,sha256=xNVHq75W0Lk6MUKl1pQYrx-wtQ8_neiUyI6SO-k0ecM,2235
125
+ langgraph_api/js/src/preload.mjs,sha256=8m3bYkf9iZLCQzKAYAdU8snxUwAG3dVLwGvAjfGfgIc,959
126
+ langgraph_api/js/src/utils/files.mts,sha256=nU09Y8lN8SYsg0x2ffmbIW8LEDBl-SWkmxsoXunFU0M,219
127
+ langgraph_api/js/src/utils/importMap.mts,sha256=pX4TGOyUpuuWF82kXcxcv3-8mgusRezOGe6Uklm2O5A,1644
128
+ langgraph_api/js/src/utils/pythonSchemas.mts,sha256=98IW7Z_VP7L_CHNRMb3_MsiV3BgLE2JsWQY_PQcRR3o,685
129
+ langgraph_api/js/src/utils/serde.mts,sha256=D9o6MwTgwPezC_DEmsWS5NnLPnjPMVWIb1I1D4QPEPo,743
130
+ langgraph_api/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
+ langgraph_api/middleware/http_logger.py,sha256=G54oWYsdoFmK0hKbHCBAiSLQt5CGh0rs1gUhDCLRJB8,4066
132
+ langgraph_api/middleware/private_network.py,sha256=eQEzWI8epBNUCiNsMu9O27ofHBQ45M0p2OZy5YdUYos,2097
133
+ langgraph_api/middleware/request_id.py,sha256=SDj3Yi3WvTbFQ2ewrPQBjAV8sYReOJGeIiuoHeZpR9g,1242
134
+ langgraph_api/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
+ langgraph_api/models/run.py,sha256=Ibfo6wWa2xEoSIYvL5PVQ5Xl2o5bbW9vOikaPiznNtQ,14316
136
+ langgraph_api/timing/__init__.py,sha256=lWXHCGh71I8ouF0wUznYRMKHAQ-8VQHF9gf9jkeV5dg,526
137
+ langgraph_api/timing/profiler.py,sha256=xGKP3qDD5yZU5Lh2o7LGFkCXWZErFKXWTZX3oIjZZ34,6199
138
+ langgraph_api/timing/timer.py,sha256=djg6JQLE_zwpOagqosguTh7nbRUYrersaYOdoqeREe0,9515
139
+ langgraph_api/tunneling/cloudflare.py,sha256=iKb6tj-VWPlDchHFjuQyep2Dpb-w2NGfJKt-WJG9LH0,3650
140
+ langgraph_api/utils/__init__.py,sha256=ljIYqTAmOjhfol0cI3K7OvYxSy2XkSLKzQdwov9-r1I,7097
141
+ langgraph_api/utils/cache.py,sha256=F23s-4BPJjuYh_PRL5pmIsSjqYWsY_b3PB7xmRwKwKw,3452
142
+ langgraph_api/utils/config.py,sha256=oY6OHgrRZ_ylGAycQmnaH_hCqjrvgA6duCQ9bag_KJ8,4167
143
+ langgraph_api/utils/errors.py,sha256=51WNBkbk1JHlTvA-J2lgkA3PDj3BEGcnhIECwAihWgU,2728
144
+ langgraph_api/utils/future.py,sha256=nyzRTVmXwGq1dwJCS39iOVLAsfk-cpZ9HKNje1G5J5g,7429
145
+ langgraph_api/utils/headers.py,sha256=NDBmKSSVOOYeYN0HfK1a3xbYtAg35M_JO1G9yklpZsA,5682
146
+ langgraph_api/utils/retriable_client.py,sha256=a50ZxfXV48C97rOCiVWAEmfOPJELwPnvUyEqo3vEixI,2379
147
+ langgraph_api/utils/stream_codec.py,sha256=bwxCm9bIsfSQ742oPKmZs__O0qVR4ylahEKtFMF4ygM,9941
148
+ langgraph_api/utils/uuids.py,sha256=8tY4ZjvtIfBM0CvBW--P2sGITdj6DBMBr0ZzO0L41RU,1786
149
+ langgraph_license/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
+ langgraph_license/validation.py,sha256=CU38RUZ5xhP1S8F_y8TNeV6OmtO-tIGjCXbXTwJjJO4,612
151
+ langgraph_runtime/__init__.py,sha256=ObQnjWp8QN3cbrEYz3mWpzhnJuWF_P7C85KILVN-C_M,1089
152
+ langgraph_runtime/checkpoint.py,sha256=J2ePryEyKJWGgxjs27qEHrjj87uPMX3Rqm3hLvG63uk,119
153
+ langgraph_runtime/database.py,sha256=ANEtfm4psr19FtpVcNs5CFWHw-JhfHvIMnkaORa4QSM,117
154
+ langgraph_runtime/lifespan.py,sha256=-YIHyEEaP_F2tSdTP0tNjfAJXs7KfxaIsWdmQAUi2KM,117
155
+ langgraph_runtime/metrics.py,sha256=CIBw3tjTg1c-o3_2InA-qV34028fQcYWBYkpN6zdEoI,116
156
+ langgraph_runtime/ops.py,sha256=ht_U9LPbHWy0l95b_Q0Vvtd7kYxeZsaSKSf0WpwHUoo,112
157
+ langgraph_runtime/queue.py,sha256=m7req6Ca9NOw1yp-zo30zGhldRWDFk4QVL_tgrVrhQg,114
158
+ langgraph_runtime/retry.py,sha256=V0duD01fO7GUQ_btQkp1aoXcEOFhXooGVP6q4yMfuyY,114
159
+ langgraph_runtime/routes.py,sha256=9sovbiIFUKNptpQ8E1RuHJN6CQZOgvO9ygC3E_z7BZk,343
160
+ langgraph_runtime/store.py,sha256=7mowndlsIroGHv3NpTSOZDJR0lCuaYMBoTnTrewjslw,114
161
+ LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
162
+ logging.json,sha256=sBy8HDDPuucpLbLUD6e8t5fsiQjJoklZsbVHi2qQ7aQ,367
163
+ openapi.json,sha256=G8W7uKabysvFhoF-UDppwKewleDbmdiGYvd74n8EnkM,184397
164
+ langgraph_api-0.7.3.dist-info/METADATA,sha256=BIEsyl43WDrLUZucXYJDocGp5M1eEWEBawC-kO_BuL0,4282
165
+ langgraph_api-0.7.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
166
+ langgraph_api-0.7.3.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
167
+ langgraph_api-0.7.3.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
168
+ langgraph_api-0.7.3.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -35,5 +35,6 @@ for module_name in (
35
35
  "retry",
36
36
  "store",
37
37
  "metrics",
38
+ "routes",
38
39
  ):
39
40
  sys.modules["langgraph_runtime." + module_name] = getattr(backend, module_name)
@@ -0,0 +1,11 @@
1
+ """Route discovery facade for runtime packages.
2
+
3
+ This module discovers and exposes internal routes from the active runtime.
4
+ Routes are loaded based on MIGRATIONS_PATH which determines the runtime type.
5
+ """
6
+
7
+ from collections.abc import Callable
8
+
9
+ from starlette.routing import Route
10
+
11
+ get_internal_routes: Callable[[], list[Route]] | None = None
logging.json CHANGED
@@ -15,8 +15,6 @@
15
15
  }
16
16
  },
17
17
  "root": {
18
- "handlers": [
19
- "console"
20
- ]
18
+ "handlers": ["console"]
21
19
  }
22
20
  }