gatewaysdk 0.3.2__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 (376) hide show
  1. gatewaysdk/__init__.py +540 -0
  2. gatewaysdk/adapter/__init__.py +15 -0
  3. gatewaysdk/adapter/base.py +94 -0
  4. gatewaysdk/adapter/messages.py +270 -0
  5. gatewaysdk/adapter/triplet.py +1026 -0
  6. gatewaysdk/algorithm/__init__.py +39 -0
  7. gatewaysdk/algorithm/apo/__init__.py +5 -0
  8. gatewaysdk/algorithm/apo/apo.py +898 -0
  9. gatewaysdk/algorithm/apo/prompts/apply_edit_variant01.poml +22 -0
  10. gatewaysdk/algorithm/apo/prompts/apply_edit_variant02.poml +18 -0
  11. gatewaysdk/algorithm/apo/prompts/text_gradient_variant01.poml +18 -0
  12. gatewaysdk/algorithm/apo/prompts/text_gradient_variant02.poml +16 -0
  13. gatewaysdk/algorithm/apo/prompts/text_gradient_variant03.poml +107 -0
  14. gatewaysdk/algorithm/base.py +262 -0
  15. gatewaysdk/algorithm/decorator.py +264 -0
  16. gatewaysdk/algorithm/evals/__init__.py +7 -0
  17. gatewaysdk/algorithm/evals/evals.py +217 -0
  18. gatewaysdk/algorithm/fast.py +250 -0
  19. gatewaysdk/algorithm/gepa/__init__.py +61 -0
  20. gatewaysdk/algorithm/gepa/adapter.py +495 -0
  21. gatewaysdk/algorithm/gepa/gepa.py +570 -0
  22. gatewaysdk/algorithm/gepa/lib/__init__.py +18 -0
  23. gatewaysdk/algorithm/gepa/lib/adapters/README.md +12 -0
  24. gatewaysdk/algorithm/gepa/lib/adapters/__init__.py +0 -0
  25. gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/README.md +341 -0
  26. gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/__init__.py +1 -0
  27. gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/anymaths_adapter.py +174 -0
  28. gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/requirements.txt +1 -0
  29. gatewaysdk/algorithm/gepa/lib/adapters/default_adapter/README.md +0 -0
  30. gatewaysdk/algorithm/gepa/lib/adapters/default_adapter/__init__.py +0 -0
  31. gatewaysdk/algorithm/gepa/lib/adapters/default_adapter/default_adapter.py +209 -0
  32. gatewaysdk/algorithm/gepa/lib/adapters/dspy_adapter/README.md +7 -0
  33. gatewaysdk/algorithm/gepa/lib/adapters/dspy_adapter/__init__.py +0 -0
  34. gatewaysdk/algorithm/gepa/lib/adapters/dspy_adapter/dspy_adapter.py +307 -0
  35. gatewaysdk/algorithm/gepa/lib/adapters/dspy_full_program_adapter/README.md +99 -0
  36. gatewaysdk/algorithm/gepa/lib/adapters/dspy_full_program_adapter/dspy_program_proposal_signature.py +137 -0
  37. gatewaysdk/algorithm/gepa/lib/adapters/dspy_full_program_adapter/full_program_adapter.py +268 -0
  38. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/GEPA_RAG.md +621 -0
  39. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/__init__.py +56 -0
  40. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/evaluation_metrics.py +226 -0
  41. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/generic_rag_adapter.py +496 -0
  42. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/rag_pipeline.py +238 -0
  43. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_store_interface.py +212 -0
  44. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/__init__.py +2 -0
  45. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/chroma_store.py +196 -0
  46. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/lancedb_store.py +422 -0
  47. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/milvus_store.py +409 -0
  48. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/qdrant_store.py +368 -0
  49. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/weaviate_store.py +418 -0
  50. gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/README.md +552 -0
  51. gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/__init__.py +37 -0
  52. gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/mcp_adapter.py +699 -0
  53. gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/mcp_client.py +364 -0
  54. gatewaysdk/algorithm/gepa/lib/adapters/terminal_bench_adapter/README.md +9 -0
  55. gatewaysdk/algorithm/gepa/lib/adapters/terminal_bench_adapter/__init__.py +0 -0
  56. gatewaysdk/algorithm/gepa/lib/adapters/terminal_bench_adapter/terminal_bench_adapter.py +217 -0
  57. gatewaysdk/algorithm/gepa/lib/api.py +382 -0
  58. gatewaysdk/algorithm/gepa/lib/core/__init__.py +0 -0
  59. gatewaysdk/algorithm/gepa/lib/core/adapter.py +180 -0
  60. gatewaysdk/algorithm/gepa/lib/core/data_loader.py +74 -0
  61. gatewaysdk/algorithm/gepa/lib/core/engine.py +379 -0
  62. gatewaysdk/algorithm/gepa/lib/core/result.py +233 -0
  63. gatewaysdk/algorithm/gepa/lib/core/state.py +636 -0
  64. gatewaysdk/algorithm/gepa/lib/examples/__init__.py +0 -0
  65. gatewaysdk/algorithm/gepa/lib/examples/aime.py +24 -0
  66. gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/eval_default.py +111 -0
  67. gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/prompt-templates/instruction_prompt.txt +9 -0
  68. gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/prompt-templates/optimal_prompt.txt +24 -0
  69. gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/train_anymaths.py +177 -0
  70. gatewaysdk/algorithm/gepa/lib/examples/dspy_full_program_evolution/arc_agi.ipynb +25705 -0
  71. gatewaysdk/algorithm/gepa/lib/examples/dspy_full_program_evolution/example.ipynb +348 -0
  72. gatewaysdk/algorithm/gepa/lib/examples/mcp_adapter/__init__.py +4 -0
  73. gatewaysdk/algorithm/gepa/lib/examples/mcp_adapter/mcp_optimization_example.py +456 -0
  74. gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/RAG_GUIDE.md +613 -0
  75. gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/__init__.py +9 -0
  76. gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/rag_optimization.py +820 -0
  77. gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/requirements-rag.txt +29 -0
  78. gatewaysdk/algorithm/gepa/lib/examples/terminal-bench/prompt-templates/instruction_prompt.txt +16 -0
  79. gatewaysdk/algorithm/gepa/lib/examples/terminal-bench/prompt-templates/terminus.txt +9 -0
  80. gatewaysdk/algorithm/gepa/lib/examples/terminal-bench/train_terminus.py +161 -0
  81. gatewaysdk/algorithm/gepa/lib/gepa_utils.py +117 -0
  82. gatewaysdk/algorithm/gepa/lib/logging/__init__.py +0 -0
  83. gatewaysdk/algorithm/gepa/lib/logging/experiment_tracker.py +187 -0
  84. gatewaysdk/algorithm/gepa/lib/logging/logger.py +75 -0
  85. gatewaysdk/algorithm/gepa/lib/logging/utils.py +103 -0
  86. gatewaysdk/algorithm/gepa/lib/proposer/__init__.py +0 -0
  87. gatewaysdk/algorithm/gepa/lib/proposer/base.py +31 -0
  88. gatewaysdk/algorithm/gepa/lib/proposer/merge.py +357 -0
  89. gatewaysdk/algorithm/gepa/lib/proposer/reflective_mutation/__init__.py +0 -0
  90. gatewaysdk/algorithm/gepa/lib/proposer/reflective_mutation/base.py +49 -0
  91. gatewaysdk/algorithm/gepa/lib/proposer/reflective_mutation/reflective_mutation.py +176 -0
  92. gatewaysdk/algorithm/gepa/lib/py.typed +0 -0
  93. gatewaysdk/algorithm/gepa/lib/strategies/__init__.py +0 -0
  94. gatewaysdk/algorithm/gepa/lib/strategies/batch_sampler.py +77 -0
  95. gatewaysdk/algorithm/gepa/lib/strategies/candidate_selector.py +50 -0
  96. gatewaysdk/algorithm/gepa/lib/strategies/component_selector.py +36 -0
  97. gatewaysdk/algorithm/gepa/lib/strategies/eval_policy.py +64 -0
  98. gatewaysdk/algorithm/gepa/lib/strategies/instruction_proposal.py +126 -0
  99. gatewaysdk/algorithm/gepa/lib/utils/__init__.py +10 -0
  100. gatewaysdk/algorithm/gepa/lib/utils/stop_condition.py +196 -0
  101. gatewaysdk/algorithm/gepa/tracing.py +105 -0
  102. gatewaysdk/algorithm/utils.py +177 -0
  103. gatewaysdk/algorithm/verl/__init__.py +5 -0
  104. gatewaysdk/algorithm/verl/interface.py +202 -0
  105. gatewaysdk/automations.py +111 -0
  106. gatewaysdk/benchmark_hub/README.md +88 -0
  107. gatewaysdk/benchmark_hub/__init__.py +119 -0
  108. gatewaysdk/benchmark_hub/_archive.py +189 -0
  109. gatewaysdk/benchmark_hub/_tar.py +6 -0
  110. gatewaysdk/benchmark_hub/client.py +992 -0
  111. gatewaysdk/benchmark_hub/dispatch_shard.py +34 -0
  112. gatewaysdk/benchmark_hub/eval_config.py +20 -0
  113. gatewaysdk/benchmark_hub/evals.py +351 -0
  114. gatewaysdk/benchmark_hub/harbor_adapter.py +673 -0
  115. gatewaysdk/benchmark_hub/path_utils.py +81 -0
  116. gatewaysdk/benchmark_hub/save_utils.py +101 -0
  117. gatewaysdk/benchmark_hub/verifiers_adapter.py +327 -0
  118. gatewaysdk/benchmark_hub/versioning.py +72 -0
  119. gatewaysdk/build.py +515 -0
  120. gatewaysdk/cli/__init__.py +58 -0
  121. gatewaysdk/cli/agent_runner.py +132 -0
  122. gatewaysdk/cli/http_client.py +115 -0
  123. gatewaysdk/cli/platform.py +4086 -0
  124. gatewaysdk/cli/prometheus.py +115 -0
  125. gatewaysdk/cli/release_gate.py +215 -0
  126. gatewaysdk/cli/store.py +131 -0
  127. gatewaysdk/cli/vllm.py +29 -0
  128. gatewaysdk/client.py +406 -0
  129. gatewaysdk/config.py +348 -0
  130. gatewaysdk/connectors/__init__.py +25 -0
  131. gatewaysdk/connectors/client.py +203 -0
  132. gatewaysdk/connectors/skill.py +25 -0
  133. gatewaysdk/connectors/template.py +106 -0
  134. gatewaysdk/context.py +606 -0
  135. gatewaysdk/emitter/__init__.py +43 -0
  136. gatewaysdk/emitter/annotation.py +370 -0
  137. gatewaysdk/emitter/exception.py +54 -0
  138. gatewaysdk/emitter/message.py +61 -0
  139. gatewaysdk/emitter/object.py +117 -0
  140. gatewaysdk/emitter/reward.py +320 -0
  141. gatewaysdk/env_var.py +156 -0
  142. gatewaysdk/environment/__init__.py +108 -0
  143. gatewaysdk/environment/_bundle.py +281 -0
  144. gatewaysdk/environment/_harbor.py +276 -0
  145. gatewaysdk/environment/_materialize.py +97 -0
  146. gatewaysdk/environment/_tar.py +33 -0
  147. gatewaysdk/environment/_world.py +346 -0
  148. gatewaysdk/environment/core.py +527 -0
  149. gatewaysdk/environment/errors.py +58 -0
  150. gatewaysdk/environment/runtime.py +150 -0
  151. gatewaysdk/environment/schema/__init__.py +35 -0
  152. gatewaysdk/environment/schema/__main__.py +225 -0
  153. gatewaysdk/environment/schema/_slack_fidelity.py +116 -0
  154. gatewaysdk/environment/schema/_slack_scenario.py +183 -0
  155. gatewaysdk/environment/schema/api.py +1628 -0
  156. gatewaysdk/environment/schema/batch.py +755 -0
  157. gatewaysdk/environment/schema/compiler.py +615 -0
  158. gatewaysdk/environment/schema/conform.py +428 -0
  159. gatewaysdk/environment/schema/connector.py +777 -0
  160. gatewaysdk/environment/schema/connectors/apple-business-manager/handlers.py +17 -0
  161. gatewaysdk/environment/schema/connectors/apple-business-manager/parity.json +28 -0
  162. gatewaysdk/environment/schema/connectors/apple-business-manager/provenance.json +233 -0
  163. gatewaysdk/environment/schema/connectors/apple-business-manager/scope.toml +112 -0
  164. gatewaysdk/environment/schema/connectors/apple-business-manager/world.json +1380 -0
  165. gatewaysdk/environment/schema/connectors/base.json +28 -0
  166. gatewaysdk/environment/schema/connectors/custom/handlers.py +18 -0
  167. gatewaysdk/environment/schema/connectors/custom/world.json +123 -0
  168. gatewaysdk/environment/schema/connectors/github/handlers.py +81 -0
  169. gatewaysdk/environment/schema/connectors/github/parity.json +37 -0
  170. gatewaysdk/environment/schema/connectors/github/provenance.json +134 -0
  171. gatewaysdk/environment/schema/connectors/github/scope.toml +158 -0
  172. gatewaysdk/environment/schema/connectors/github/world.json +5869 -0
  173. gatewaysdk/environment/schema/connectors/google-calendar/handlers.py +23 -0
  174. gatewaysdk/environment/schema/connectors/google-calendar/world.json +209 -0
  175. gatewaysdk/environment/schema/connectors/google-drive/handlers.py +18 -0
  176. gatewaysdk/environment/schema/connectors/google-drive/world.json +286 -0
  177. gatewaysdk/environment/schema/connectors/jamf/handlers.py +34 -0
  178. gatewaysdk/environment/schema/connectors/jamf/parity.json +49 -0
  179. gatewaysdk/environment/schema/connectors/jamf/provenance.json +181 -0
  180. gatewaysdk/environment/schema/connectors/jamf/scope.toml +128 -0
  181. gatewaysdk/environment/schema/connectors/jamf/world.json +2218 -0
  182. gatewaysdk/environment/schema/connectors/jira/handlers.py +28 -0
  183. gatewaysdk/environment/schema/connectors/jira/world.json +389 -0
  184. gatewaysdk/environment/schema/connectors/kandji/handlers.py +38 -0
  185. gatewaysdk/environment/schema/connectors/kandji/parity.json +29 -0
  186. gatewaysdk/environment/schema/connectors/kandji/provenance.json +152 -0
  187. gatewaysdk/environment/schema/connectors/kandji/scope.toml +120 -0
  188. gatewaysdk/environment/schema/connectors/kandji/world.json +765 -0
  189. gatewaysdk/environment/schema/connectors/linear/handlers.py +20 -0
  190. gatewaysdk/environment/schema/connectors/linear/world.json +363 -0
  191. gatewaysdk/environment/schema/connectors/microsoft-teams/fidelity.json +45 -0
  192. gatewaysdk/environment/schema/connectors/microsoft-teams/handlers.py +1 -0
  193. gatewaysdk/environment/schema/connectors/microsoft-teams/provenance.json +851 -0
  194. gatewaysdk/environment/schema/connectors/microsoft-teams/scope.md +231 -0
  195. gatewaysdk/environment/schema/connectors/microsoft-teams/teams-types.json +1710 -0
  196. gatewaysdk/environment/schema/connectors/microsoft-teams/world.json +858 -0
  197. gatewaysdk/environment/schema/connectors/netsuite/handlers.py +32 -0
  198. gatewaysdk/environment/schema/connectors/netsuite/parity.json +50 -0
  199. gatewaysdk/environment/schema/connectors/netsuite/provenance.json +137 -0
  200. gatewaysdk/environment/schema/connectors/netsuite/scope.toml +78 -0
  201. gatewaysdk/environment/schema/connectors/netsuite/world.json +16243 -0
  202. gatewaysdk/environment/schema/connectors/salesforce/handlers.py +806 -0
  203. gatewaysdk/environment/schema/connectors/salesforce/parity.json +46 -0
  204. gatewaysdk/environment/schema/connectors/salesforce/provenance.json +143 -0
  205. gatewaysdk/environment/schema/connectors/salesforce/scope.toml +174 -0
  206. gatewaysdk/environment/schema/connectors/salesforce/world.json +4695 -0
  207. gatewaysdk/environment/schema/connectors/slack/MODEL.md +236 -0
  208. gatewaysdk/environment/schema/connectors/slack/capabilities.json +1039 -0
  209. gatewaysdk/environment/schema/connectors/slack/handlers.py +762 -0
  210. gatewaysdk/environment/schema/connectors/slack/parity.json +65 -0
  211. gatewaysdk/environment/schema/connectors/slack/provenance.json +294 -0
  212. gatewaysdk/environment/schema/connectors/slack/scope.toml +44 -0
  213. gatewaysdk/environment/schema/connectors/slack/world.json +4993 -0
  214. gatewaysdk/environment/schema/connectors/workday/handlers.py +75 -0
  215. gatewaysdk/environment/schema/connectors/workday/parity.json +36 -0
  216. gatewaysdk/environment/schema/connectors/workday/provenance.json +179 -0
  217. gatewaysdk/environment/schema/connectors/workday/scope.toml +180 -0
  218. gatewaysdk/environment/schema/connectors/workday/world.json +806 -0
  219. gatewaysdk/environment/schema/data.py +593 -0
  220. gatewaysdk/environment/schema/extract.py +263 -0
  221. gatewaysdk/environment/schema/host.py +2437 -0
  222. gatewaysdk/environment/schema/host_surfaces.py +275 -0
  223. gatewaysdk/environment/schema/platform.py +1272 -0
  224. gatewaysdk/environment/schema/scaffold.py +250 -0
  225. gatewaysdk/environment/schema/skill.py +118 -0
  226. gatewaysdk/environment/schema/skills/agents/connector-template-author.md +202 -0
  227. gatewaysdk/environment/schema/skills/connector-schema-authoring/CONNECTORS.md +331 -0
  228. gatewaysdk/environment/schema/skills/connector-schema-authoring/CONVENTIONS.md +100 -0
  229. gatewaysdk/environment/schema/skills/connector-schema-authoring/SKILL.md +313 -0
  230. gatewaysdk/environment/schema/skills/world-data-ingestion/ROWS.md +223 -0
  231. gatewaysdk/environment/schema/skills/world-data-ingestion/SKILL.md +293 -0
  232. gatewaysdk/environment/schema/skills/worlds-getting-started/SKILL.md +390 -0
  233. gatewaysdk/environment/schema/slack.py +757 -0
  234. gatewaysdk/environment/schema/snapshot.py +479 -0
  235. gatewaysdk/environment/schema/store.py +904 -0
  236. gatewaysdk/environment/schema/tasks.py +525 -0
  237. gatewaysdk/environment/schema/tools_world.py +322 -0
  238. gatewaysdk/environment/schema/validation.py +577 -0
  239. gatewaysdk/environment/schema/worker.py +78 -0
  240. gatewaysdk/environment/schema/workers.py +500 -0
  241. gatewaysdk/environment/schema/world_tests.py +336 -0
  242. gatewaysdk/environments/__init__.py +24 -0
  243. gatewaysdk/environments/client.py +486 -0
  244. gatewaysdk/environments/types.py +318 -0
  245. gatewaysdk/execution/__init__.py +15 -0
  246. gatewaysdk/execution/base.py +64 -0
  247. gatewaysdk/execution/client_server.py +443 -0
  248. gatewaysdk/execution/events.py +69 -0
  249. gatewaysdk/execution/inter_process.py +16 -0
  250. gatewaysdk/execution/shared_memory.py +282 -0
  251. gatewaysdk/experiments/__init__.py +90 -0
  252. gatewaysdk/experiments/assignment.py +177 -0
  253. gatewaysdk/experiments/client.py +877 -0
  254. gatewaysdk/experiments/exposure.py +222 -0
  255. gatewaysdk/experiments/types.py +81 -0
  256. gatewaysdk/importers/__init__.py +49 -0
  257. gatewaysdk/importers/_normalize.py +91 -0
  258. gatewaysdk/importers/builder.py +173 -0
  259. gatewaysdk/importers/client.py +95 -0
  260. gatewaysdk/importers/langsmith.py +196 -0
  261. gatewaysdk/importers/recipes.py +249 -0
  262. gatewaysdk/instrumentation/__init__.py +300 -0
  263. gatewaysdk/instrumentation/agentops.py +314 -0
  264. gatewaysdk/instrumentation/agentops_langchain.py +45 -0
  265. gatewaysdk/instrumentation/base.py +119 -0
  266. gatewaysdk/instrumentation/litellm.py +83 -0
  267. gatewaysdk/instrumentation/registry.py +273 -0
  268. gatewaysdk/instrumentation/vllm.py +81 -0
  269. gatewaysdk/instrumentation/weave.py +500 -0
  270. gatewaysdk/integrations/__init__.py +15 -0
  271. gatewaysdk/integrations/gateway/__init__.py +11 -0
  272. gatewaysdk/integrations/gateway/client.py +171 -0
  273. gatewaysdk/integrations/tool_access.py +549 -0
  274. gatewaysdk/litagent/__init__.py +11 -0
  275. gatewaysdk/litagent/decorator.py +536 -0
  276. gatewaysdk/litagent/litagent.py +252 -0
  277. gatewaysdk/llm_proxy.py +1742 -0
  278. gatewaysdk/logging.py +370 -0
  279. gatewaysdk/memory.py +278 -0
  280. gatewaysdk/personas.py +186 -0
  281. gatewaysdk/platform/__init__.py +17 -0
  282. gatewaysdk/platform/builder.py +221 -0
  283. gatewaysdk/platform/compatibility.py +67 -0
  284. gatewaysdk/platform/manifest.py +185 -0
  285. gatewaysdk/platform/orchestrator.py +901 -0
  286. gatewaysdk/platform/registry.py +122 -0
  287. gatewaysdk/platform/worker.py +864 -0
  288. gatewaysdk/replay/__init__.py +1032 -0
  289. gatewaysdk/replay/pytest.py +56 -0
  290. gatewaysdk/reward.py +7 -0
  291. gatewaysdk/run.py +1781 -0
  292. gatewaysdk/runner/__init__.py +11 -0
  293. gatewaysdk/runner/agent.py +878 -0
  294. gatewaysdk/runner/base.py +182 -0
  295. gatewaysdk/runner/legacy.py +309 -0
  296. gatewaysdk/security.py +700 -0
  297. gatewaysdk/semconv.py +170 -0
  298. gatewaysdk/server.py +399 -0
  299. gatewaysdk/sessions.py +282 -0
  300. gatewaysdk/store/__init__.py +45 -0
  301. gatewaysdk/store/base.py +908 -0
  302. gatewaysdk/store/client_server.py +2093 -0
  303. gatewaysdk/store/collection/__init__.py +30 -0
  304. gatewaysdk/store/collection/base.py +587 -0
  305. gatewaysdk/store/collection/memory.py +970 -0
  306. gatewaysdk/store/collection/mongo.py +1412 -0
  307. gatewaysdk/store/collection_based.py +1823 -0
  308. gatewaysdk/store/gateway.py +983 -0
  309. gatewaysdk/store/gateway_listener.py +465 -0
  310. gatewaysdk/store/listener.py +58 -0
  311. gatewaysdk/store/memory.py +396 -0
  312. gatewaysdk/store/mongo.py +165 -0
  313. gatewaysdk/store/redis_stream.py +517 -0
  314. gatewaysdk/store/sqlite.py +3 -0
  315. gatewaysdk/store/threading.py +370 -0
  316. gatewaysdk/store/utils.py +142 -0
  317. gatewaysdk/tracer/__init__.py +14 -0
  318. gatewaysdk/tracer/base.py +286 -0
  319. gatewaysdk/tracer/dummy.py +106 -0
  320. gatewaysdk/tracer/otel.py +559 -0
  321. gatewaysdk/tracing/__init__.py +110 -0
  322. gatewaysdk/tracing/api.py +808 -0
  323. gatewaysdk/tracing/attributes.py +9 -0
  324. gatewaysdk/tracing/context.py +272 -0
  325. gatewaysdk/tracing/exporters/__init__.py +10 -0
  326. gatewaysdk/tracing/exporters/gateway.py +228 -0
  327. gatewaysdk/tracing/identity.py +288 -0
  328. gatewaysdk/tracing/init.py +620 -0
  329. gatewaysdk/tracing/instrumentors/__init__.py +15 -0
  330. gatewaysdk/tracing/instrumentors/claude_agent_sdk.py +766 -0
  331. gatewaysdk/tracing/instrumentors/instrumentation_principles.md +294 -0
  332. gatewaysdk/tracing/instrumentors/registry.py +352 -0
  333. gatewaysdk/tracing/mapping.py +729 -0
  334. gatewaysdk/tracing/processors.py +393 -0
  335. gatewaysdk/tracing/push.py +617 -0
  336. gatewaysdk/tracing/push_models.py +247 -0
  337. gatewaysdk/tracing/semconv.py +294 -0
  338. gatewaysdk/tracing/span_builder.py +356 -0
  339. gatewaysdk/trainer/__init__.py +6 -0
  340. gatewaysdk/trainer/init_utils.py +263 -0
  341. gatewaysdk/trainer/legacy.py +359 -0
  342. gatewaysdk/trainer/registry.py +12 -0
  343. gatewaysdk/trainer/trainer.py +638 -0
  344. gatewaysdk/types/__init__.py +63 -0
  345. gatewaysdk/types/core.py +556 -0
  346. gatewaysdk/types/resources.py +204 -0
  347. gatewaysdk/types/tracer.py +515 -0
  348. gatewaysdk/types/tracing.py +162 -0
  349. gatewaysdk/users.py +251 -0
  350. gatewaysdk/utils/__init__.py +1 -0
  351. gatewaysdk/utils/id.py +18 -0
  352. gatewaysdk/utils/metrics.py +1025 -0
  353. gatewaysdk/utils/otel.py +550 -0
  354. gatewaysdk/utils/otlp.py +556 -0
  355. gatewaysdk/utils/redact.py +22 -0
  356. gatewaysdk/utils/server_launcher.py +1045 -0
  357. gatewaysdk/utils/system_snapshot.py +90 -0
  358. gatewaysdk/verl/__init__.py +8 -0
  359. gatewaysdk/verl/__main__.py +6 -0
  360. gatewaysdk/verl/async_server.py +46 -0
  361. gatewaysdk/verl/config.yaml +27 -0
  362. gatewaysdk/verl/daemon.py +1154 -0
  363. gatewaysdk/verl/dataset.py +44 -0
  364. gatewaysdk/verl/entrypoint.py +248 -0
  365. gatewaysdk/verl/trainer.py +549 -0
  366. gatewaysdk/world_browser.py +748 -0
  367. gatewaysdk/world_data.py +453 -0
  368. gatewaysdk/world_sessions.py +978 -0
  369. gatewaysdk/world_tasks.py +285 -0
  370. gatewaysdk/world_tools.py +115 -0
  371. gatewaysdk/worlds.py +639 -0
  372. gatewaysdk-0.3.2.dist-info/METADATA +236 -0
  373. gatewaysdk-0.3.2.dist-info/RECORD +376 -0
  374. gatewaysdk-0.3.2.dist-info/WHEEL +4 -0
  375. gatewaysdk-0.3.2.dist-info/entry_points.txt +5 -0
  376. gatewaysdk-0.3.2.dist-info/licenses/LICENSE +19 -0
@@ -0,0 +1,28 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:gateway:connector:primitives:1",
4
+ "$defs": {
5
+ "Id": {
6
+ "type": "string",
7
+ "minLength": 1,
8
+ "maxLength": 128
9
+ },
10
+ "Label": {
11
+ "type": "string",
12
+ "minLength": 1,
13
+ "maxLength": 256
14
+ },
15
+ "Text": {
16
+ "type": "string"
17
+ },
18
+ "Email": {
19
+ "type": "string",
20
+ "minLength": 3,
21
+ "maxLength": 254
22
+ },
23
+ "Timestamp": {
24
+ "type": "string",
25
+ "format": "date-time"
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,18 @@
1
+ """Custom connector world tools; edit freely, but keep writes on the store."""
2
+
3
+ from gateway_env import store, tool
4
+
5
+
6
+ @tool(name="list_records")
7
+ def list_records(kind):
8
+ return [r for r in store.list("records") if r["kind"] == kind]
9
+
10
+
11
+ @tool(name="get_record")
12
+ def get_record(id):
13
+ return store.get("records", {"id": id})
14
+
15
+
16
+ @tool(name="create_record")
17
+ def create_record(record):
18
+ return store.insert("records", record, source={"record": "tool.create_record"})
@@ -0,0 +1,123 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:gateway:connector:custom",
4
+ "$defs": {
5
+ "Record": {
6
+ "type": "object",
7
+ "properties": {
8
+ "id": {
9
+ "$ref": "base.json#/$defs/Id"
10
+ },
11
+ "kind": {
12
+ "$ref": "base.json#/$defs/Label"
13
+ },
14
+ "name": {
15
+ "$ref": "base.json#/$defs/Label"
16
+ },
17
+ "attributes": {
18
+ "type": "object",
19
+ "properties": {},
20
+ "required": [],
21
+ "additionalProperties": true
22
+ },
23
+ "updated_at": {
24
+ "$ref": "base.json#/$defs/Timestamp"
25
+ }
26
+ },
27
+ "required": [
28
+ "id",
29
+ "kind",
30
+ "name",
31
+ "attributes",
32
+ "updated_at"
33
+ ],
34
+ "additionalProperties": false
35
+ }
36
+ },
37
+ "x-gateway": {
38
+ "version": 1,
39
+ "domain_version": "1.0.0",
40
+ "package": {
41
+ "id": "gateway-connector-custom",
42
+ "version": "1.0.0"
43
+ },
44
+ "entities": {
45
+ "records": {
46
+ "schema": {
47
+ "$ref": "#/$defs/Record"
48
+ },
49
+ "primary_key": [
50
+ "id"
51
+ ],
52
+ "unique": [],
53
+ "relationships": []
54
+ }
55
+ },
56
+ "tools": {
57
+ "list_records": {
58
+ "input": {
59
+ "type": "object",
60
+ "properties": {
61
+ "kind": {
62
+ "$ref": "base.json#/$defs/Label"
63
+ }
64
+ },
65
+ "required": [
66
+ "kind"
67
+ ],
68
+ "additionalProperties": false
69
+ },
70
+ "output": {
71
+ "type": "array",
72
+ "items": {
73
+ "$ref": "#/$defs/Record"
74
+ }
75
+ },
76
+ "description": "Records of one kind."
77
+ },
78
+ "get_record": {
79
+ "input": {
80
+ "type": "object",
81
+ "properties": {
82
+ "id": {
83
+ "$ref": "base.json#/$defs/Id"
84
+ }
85
+ },
86
+ "required": [
87
+ "id"
88
+ ],
89
+ "additionalProperties": false
90
+ },
91
+ "output": {
92
+ "anyOf": [
93
+ {
94
+ "$ref": "#/$defs/Record"
95
+ },
96
+ {
97
+ "type": "null"
98
+ }
99
+ ]
100
+ },
101
+ "description": "One record, or null."
102
+ },
103
+ "create_record": {
104
+ "input": {
105
+ "type": "object",
106
+ "properties": {
107
+ "record": {
108
+ "$ref": "#/$defs/Record"
109
+ }
110
+ },
111
+ "required": [
112
+ "record"
113
+ ],
114
+ "additionalProperties": false
115
+ },
116
+ "output": {
117
+ "$ref": "#/$defs/Record"
118
+ },
119
+ "description": "Create a record."
120
+ }
121
+ }
122
+ }
123
+ }
@@ -0,0 +1,81 @@
1
+ """GitHub world tools; every mutation goes through the schema store.
2
+
3
+ Errors mirror the REST error body
4
+ ``{"message", "documentation_url", "errors": [{"resource", "field", "code"}]}``:
5
+ 404 carries the message ``Not Found``, 422 carries ``Validation Failed`` plus the
6
+ resource/field/code triple. An operation the world does not model raises
7
+ ``not_modelled`` with the vendor route rather than fabricating a response.
8
+ """
9
+
10
+ from gateway_env import store, tool
11
+
12
+ ISSUES = "https://docs.github.com/rest/issues/issues"
13
+ LABELS = "https://docs.github.com/rest/issues/labels"
14
+ PULLS = "https://docs.github.com/rest/pulls/pulls"
15
+
16
+
17
+ def _not_found(documentation_url):
18
+ raise ValueError(f"Not Found ({documentation_url})")
19
+
20
+
21
+ def _validation_failed(resource, field, code, documentation_url):
22
+ raise ValueError(f"Validation Failed: {resource}.{field} {code} ({documentation_url})")
23
+
24
+
25
+ def _repository(repo_id, documentation_url):
26
+ repository = store.get("github_repositories", {"id": repo_id})
27
+ if repository is None:
28
+ _not_found(documentation_url)
29
+ return repository
30
+
31
+
32
+ @tool(name="list_issues")
33
+ def list_issues(repo_id, state=None):
34
+ _repository(repo_id, f"{ISSUES}#list-repository-issues")
35
+ issues = [i for i in store.list("github_issues") if i["repo_id"] == repo_id]
36
+ return [i for i in issues if state is None or i["state"] == state]
37
+
38
+
39
+ @tool(name="get_pull_request")
40
+ def get_pull_request(repo_id, number):
41
+ pull = store.get("github_pull_requests", {"repo_id": repo_id, "number": number})
42
+ if pull is None:
43
+ _not_found(f"{PULLS}#get-a-pull-request")
44
+ return pull
45
+
46
+
47
+ @tool(name="create_issue")
48
+ def create_issue(issue):
49
+ _repository(issue["repo_id"], f"{ISSUES}#create-an-issue")
50
+ key = {"repo_id": issue["repo_id"], "number": issue["number"]}
51
+ if store.get("github_issues", key) is not None:
52
+ _validation_failed("Issue", "number", "already_exists", f"{ISSUES}#create-an-issue")
53
+ return store.insert("github_issues", issue, source={"record": "tool.create_issue"})
54
+
55
+
56
+ @tool(name="add_label")
57
+ def add_label(repo_id, number, name):
58
+ key = {"repo_id": repo_id, "number": number}
59
+ issue = store.get("github_issues", key)
60
+ if issue is None:
61
+ _not_found(f"{LABELS}#add-labels-to-an-issue")
62
+ label = store.get("github_labels", {"repo_id": repo_id, "name": name})
63
+ if label is None:
64
+ raise ValueError(
65
+ "not_modelled: POST /repos/{owner}/{repo}/issues/{issue_number}/labels "
66
+ "creates an unknown label with a colour the server assigns"
67
+ )
68
+ if any(
69
+ existing == name or (isinstance(existing, dict) and existing.get("name") == name)
70
+ for existing in issue["labels"]
71
+ ):
72
+ return issue
73
+ # Issue responses use embedded vendor label objects. repo_id is route context,
74
+ # not part of components/schemas/label, so do not leak the entity projection.
75
+ embedded_label = {field: value for field, value in label.items() if field != "repo_id"}
76
+ return store.update(
77
+ "github_issues",
78
+ key,
79
+ {"labels": [*issue["labels"], embedded_label]},
80
+ source={"record": "tool.add_label"},
81
+ )
@@ -0,0 +1,37 @@
1
+ {
2
+ "version": 1,
3
+ "connector": "github",
4
+ "status": "subset",
5
+ "world_tools": ["add_label", "create_issue", "get_pull_request", "list_issues"],
6
+ "registration": {
7
+ "mode": "managed",
8
+ "provider": "merge",
9
+ "managed_tool_allowlist": ["create_issue", "get_pull_request"]
10
+ },
11
+ "surfaces": [
12
+ {
13
+ "name": "GitHub MCP server",
14
+ "kind": "official_hosted_mcp",
15
+ "auth": "OAuth or GitHub token",
16
+ "manifest_validation": "unauthenticated",
17
+ "supported_world_tools": ["create_issue", "get_pull_request", "list_issues"],
18
+ "limitations": [
19
+ "Credentialed tools/list was not available.",
20
+ "Official tool names and request envelopes are broader than this world.",
21
+ "add_label has no verified managed-provider name match."
22
+ ],
23
+ "evidence": ["https://github.com/github/github-mcp-server"]
24
+ },
25
+ {
26
+ "name": "Merge Agent Handler",
27
+ "kind": "managed_provider",
28
+ "auth": "Merge managed connection",
29
+ "manifest_validation": "public_catalog",
30
+ "supported_world_tools": ["create_issue", "get_pull_request"],
31
+ "limitations": [
32
+ "Only exact world-tool name matches are exposed by Gateway."
33
+ ],
34
+ "evidence": ["https://docs.merge.dev/agent-handler/overview/"]
35
+ }
36
+ ]
37
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "connector": "github",
3
+ "shape": "base",
4
+ "fidelity": {
5
+ "label": "subset",
6
+ "target_label": "mimic",
7
+ "entity_count": 8,
8
+ "recursive_field_count": 1662,
9
+ "golden_replay": {
10
+ "status": "skipped",
11
+ "reason": "No syntheticized GitHub sandbox capture is available."
12
+ },
13
+ "sandbox_round_trip": {
14
+ "status": "skipped",
15
+ "reason": "A free test organization plus the Gateway GitHub App was not available to this reconstruction."
16
+ }
17
+ },
18
+ "domain_version": "3.0.0",
19
+ "source": [
20
+ {
21
+ "kind": "openapi",
22
+ "url": "https://raw.githubusercontent.com/github/rest-api-description/3cef12e8a02d612ad032473d4fb87266f2befeae/descriptions/api.github.com/api.github.com.json",
23
+ "version": "OpenAPI 3.0.3; info.version 1.1.4; github/rest-api-description commit 3cef12e8a02d612ad032473d4fb87266f2befeae (2026-09-04)",
24
+ "sha256": "531b05749a9f86c7be01330e6d89d052fd3102ff31df4e0c765d9550b11bbad8",
25
+ "verified_at": "2026-09-06T21:35:38Z",
26
+ "verification": "Fetched 12927758 bytes from the pinned raw URL and computed SHA-256.",
27
+ "used_for": [
28
+ "simple-user, private-user, public-user, webhooks_user and webhooks_user_mannequin read forms",
29
+ "repository and minimal-repository read forms",
30
+ "label, webhooks_label and label-search-result-item read forms",
31
+ "issue, pull-request, pull-request-simple, pull-request-review, webhooks_review, check-run and commit read forms",
32
+ "all recursively referenced component schemas",
33
+ "declared issue state/state_reason, pull-request state, author-association, check-run status/conclusion and nested enum blocks"
34
+ ]
35
+ },
36
+ {
37
+ "kind": "graphql-schema",
38
+ "url": "https://raw.githubusercontent.com/octokit/graphql-schema/82ff2d4780080e6929ebb95608cefa22dfa05ac7/schema.graphql",
39
+ "version": "octokit/graphql-schema commit 82ff2d4780080e6929ebb95608cefa22dfa05ac7",
40
+ "sha256": "3c62d0526d133cee53221c89de9b455ade24db78b9e7ad56d642c4c15bce2654",
41
+ "verified_at": "2026-09-06T21:35:38Z",
42
+ "verification": "Fetched 1223842 bytes from the pinned raw URL and computed SHA-256.",
43
+ "used_for": [
44
+ "PullRequestReviewState values APPROVED, CHANGES_REQUESTED, COMMENTED, DISMISSED and PENDING in declared order"
45
+ ]
46
+ },
47
+ {
48
+ "kind": "docs",
49
+ "url": "https://docs.github.com/en/rest",
50
+ "version": "secondary unpinned documentation landing page",
51
+ "sha256": null,
52
+ "verified_at": null,
53
+ "used_for": [
54
+ "Existing handler error wording and documentation_url route fragments only; no entity field is sourced from this page"
55
+ ]
56
+ }
57
+ ],
58
+ "authored_by": "connector-template-author reconstruction from pinned machine-readable declarations",
59
+ "importer": null,
60
+ "scope_hash": "sha256:4e1ec679802e119d31ed5d1471b1db125f9a4e6d882e857937f0a9e4a455912a",
61
+ "world_sha256": "sha256:1936e3350d77b28cf331d2881a08bee8b8e1a4546ab89ee6a9a017023550370e",
62
+ "generated_at": "2026-09-06T22:27:40Z",
63
+ "coverage": {
64
+ "entity_components": {
65
+ "github_users": [
66
+ "simple-user",
67
+ "private-user",
68
+ "public-user",
69
+ "webhooks_user",
70
+ "webhooks_user_mannequin"
71
+ ],
72
+ "github_repositories": [
73
+ "repository",
74
+ "minimal-repository"
75
+ ],
76
+ "github_labels": [
77
+ "label",
78
+ "webhooks_label",
79
+ "label-search-result-item"
80
+ ],
81
+ "github_issues": [
82
+ "issue"
83
+ ],
84
+ "github_pull_requests": [
85
+ "pull-request",
86
+ "pull-request-simple"
87
+ ],
88
+ "github_reviews": [
89
+ "pull-request-review",
90
+ "webhooks_review"
91
+ ],
92
+ "github_check_runs": [
93
+ "check-run"
94
+ ],
95
+ "github_commits": [
96
+ "commit"
97
+ ]
98
+ },
99
+ "merge_policy": "For multiple response forms, recursively union properties and intersect required names. A property absent from one form remains optional; nullable remains independent of optionality.",
100
+ "nested_fidelity": "Embedded users, repositories, labels, milestones, teams, integrations, check suites, outputs, deployments, Git identities, trees, verification, parents, stats and files are retained rather than flattened away.",
101
+ "root_closure": "Entity roots reject fields outside the union of their pinned read forms plus documented containment/relationship projections. Nested objects preserve the source's additionalProperties behavior."
102
+ },
103
+ "dialect_transform": {
104
+ "nullable": "OpenAPI nullable is represented as type plus null or an anyOf null branch.",
105
+ "formats": "date-time is retained. The selected source closure contains 159 uri, 14 uri-template, 4 email and 24 int64 format occurrences that gateway-world/1 cannot express; scalar types are retained and those format annotations are omitted.",
106
+ "examples": "415 singular OpenAPI example annotations in the selected unique source schemas are omitted because gateway-world/1 supports examples arrays, not example.",
107
+ "extensions": "Five x-github-breaking-changes annotations in the selected unique source schemas are omitted because the dialect has no vendor-extension keyword.",
108
+ "schema_valued_additional_properties": "nullable-integration.permissions is widened to additionalProperties true because the dialect only supports boolean additionalProperties.",
109
+ "reserved_names": "Safe vendor root fields beginning with '_' are supported. pull-request._links and pull-request-review._links retain their declared href objects; _key, payload, and storage prefixes remain reserved."
110
+ },
111
+ "notes": [
112
+ "This replaces the shallow projection with the pinned REST component closure while retaining exactly eight state entities and four existing tools.",
113
+ "Pull-request and review _links objects are retained from the pinned OpenAPI rather than omitted for their vendor field name.",
114
+ "The direct repo_id/pull_number containment fields come from REST route context. Direct *_id/ref/sha/message/comment_count fields are relationship or key projections; the original nested vendor fields remain present.",
115
+ "Requiredness for a single read form follows that component. Requiredness for merged forms is the intersection, preventing fields from one valid endpoint form from being required on another.",
116
+ "github_users.type intentionally remains an unconstrained string: the webhook forms declare Bot/User/Organization/Mannequin, but simple-user, public-user and private-user do not declare a closed value block. Applying the webhook enum to all user responses would over-constrain the model.",
117
+ "github_issues.state uses the declared webhooks_issue enum; state_reason uses the declared issue enum including duplicate and null. github_reviews.state uses the pinned GraphQL declaration because both REST review forms expose an unconstrained string.",
118
+ "No fixture or golden data was added: the template layout does not copy connector-local data, and no sandbox response was available to syntheticize."
119
+ ],
120
+ "unverified": [
121
+ "Projection equality is not enforceable: gateway-world/1 requires primary keys to be direct and cannot assert that owner_id equals owner.id, for example. Ingestion must derive documented route-context and key projections.",
122
+ "github_users.login uniqueness is a service invariant but is not declared by the OpenAPI component schema.",
123
+ "github_repositories.full_name uniqueness and github_labels id uniqueness are not declared as JSON Schema uniqueness constraints by the OpenAPI source.",
124
+ "The documentation_url strings and ValueError formatting in handlers.py have not been replayed against live 404/422 responses.",
125
+ "create_issue still accepts the complete read entity rather than GitHub's distinct create request schema; tool behavior remains a subset of the vendor API.",
126
+ "No sandbox/test-organization round trip, relationship exercise, syntheticized golden replay, or production evidence capture was run."
127
+ ],
128
+ "mimic_blockers": [
129
+ "Provision the free test organization and Gateway GitHub App, seed synthetic records through GitHub, ingest the returned records, and audit every relationship/enum/unique constraint.",
130
+ "Capture and syntheticize golden responses, then reach the mimic replay threshold.",
131
+ "Resolve or accept the remaining compiler gaps for unsupported formats, schema-valued maps, and nested projection equality.",
132
+ "Model create-request tool inputs separately from complete read entities if tool parity is in scope."
133
+ ]
134
+ }
@@ -0,0 +1,158 @@
1
+ # Import/reconstruction scope for the GitHub base connector.
2
+ #
3
+ # Primary evidence is the exact github/rest-api-description commit and SHA-256
4
+ # recorded in provenance.json. The repository importer is not implemented, so
5
+ # world.json is a deterministic dialect transcription of the component schemas
6
+ # and read forms below.
7
+
8
+ [import]
9
+ kind = "openapi"
10
+ prefix = "github_"
11
+ shape = "base"
12
+ source_component_path = "descriptions/api.github.com/api.github.com.json"
13
+ allowlist = [
14
+ "simple-user",
15
+ "repository",
16
+ "label",
17
+ "issue",
18
+ "pull-request",
19
+ "pull-request-review",
20
+ "check-run",
21
+ "commit",
22
+ ]
23
+
24
+ [coverage]
25
+ entity_count = 8
26
+ recursive_field_count = 1662
27
+ label = "subset"
28
+ reason = "The pinned machine-readable read shapes are modelled, but no test-organization round trip or syntheticized golden replay has been run."
29
+
30
+ [entities."simple-user"]
31
+ entity = "github_users"
32
+ primary_key = ["id"]
33
+ unique = [["login"]]
34
+ read_forms = ["simple-user", "private-user", "public-user", "webhooks_user", "webhooks_user_mannequin"]
35
+ merge = "union properties recursively; intersect required fields"
36
+ notes = "The merged type property remains open because simple-user/public-user/private-user declare an unconstrained string even though webhook user schemas declare enum blocks."
37
+
38
+ [entities.repository]
39
+ entity = "github_repositories"
40
+ primary_key = ["id"]
41
+ unique = [["full_name"]]
42
+ read_forms = ["repository", "minimal-repository"]
43
+ merge = "union properties recursively; intersect required fields"
44
+ relationship_projections = { owner_id = "owner.id" }
45
+ relationships = [{ fields = ["owner_id"], target = "github_users" }]
46
+
47
+ [entities.label]
48
+ entity = "github_labels"
49
+ primary_key = ["repo_id", "name"]
50
+ unique = [["id"]]
51
+ read_forms = ["label", "webhooks_label", "label-search-result-item"]
52
+ merge = "union properties recursively; intersect required fields"
53
+ containment = { repo_id = "repository.id from route context" }
54
+ relationships = [{ fields = ["repo_id"], target = "github_repositories" }]
55
+ notes = "Search-only score and text_matches remain optional on ordinary label responses."
56
+
57
+ [entities.issue]
58
+ entity = "github_issues"
59
+ primary_key = ["repo_id", "number"]
60
+ unique = [["id"]]
61
+ read_forms = ["issue"]
62
+ containment = { repo_id = "repository.id from route context" }
63
+ relationship_projections = { user_id = "user.id", assignee_id = "assignee.id" }
64
+ enum_sources = { state = "components/schemas/webhooks_issue/properties/state", state_reason = "components/schemas/issue/properties/state_reason" }
65
+ relationships = [
66
+ { fields = ["repo_id"], target = "github_repositories" },
67
+ { fields = ["user_id"], target = "github_users" },
68
+ { fields = ["assignee_id"], target = "github_users" },
69
+ ]
70
+ notes = "labels preserves the vendor oneOf string-or-label-object item shape; it is not reduced to label names."
71
+
72
+ [entities."pull-request"]
73
+ entity = "github_pull_requests"
74
+ primary_key = ["repo_id", "number"]
75
+ unique = [["id"]]
76
+ read_forms = ["pull-request", "pull-request-simple"]
77
+ merge = "union properties recursively; intersect required fields"
78
+ containment = { repo_id = "repository.id from route context" }
79
+ relationship_projections = { user_id = "user.id", assignee_id = "assignee.id", merged_by_id = "merged_by.id", head_user_id = "head.user.id", base_user_id = "base.user.id", head_ref = "head.ref", head_sha = "head.sha", base_ref = "base.ref", base_sha = "base.sha" }
80
+ relationships = [
81
+ { fields = ["repo_id"], target = "github_repositories" },
82
+ { fields = ["user_id"], target = "github_users" },
83
+ { fields = ["assignee_id"], target = "github_users" },
84
+ { fields = ["merged_by_id"], target = "github_users" },
85
+ { fields = ["head_user_id"], target = "github_users" },
86
+ { fields = ["base_user_id"], target = "github_users" },
87
+ ]
88
+ notes = "Nested user, head, base, repository, label, milestone, team, auto_merge and stack objects remain intact; direct projections only make selected keys and relationships enforceable."
89
+
90
+ [entities."pull-request-review"]
91
+ entity = "github_reviews"
92
+ primary_key = ["id"]
93
+ read_forms = ["pull-request-review", "webhooks_review"]
94
+ merge = "union properties recursively; intersect required fields"
95
+ containment = { repo_id = "repository.id from route context", pull_number = "pull_request.number from route context" }
96
+ relationship_projections = { user_id = "user.id" }
97
+ enum_sources = { state = "PullRequestReviewState in the pinned GraphQL schema" }
98
+ relationships = [
99
+ { fields = ["repo_id", "pull_number"], target = "github_pull_requests" },
100
+ { fields = ["user_id"], target = "github_users" },
101
+ ]
102
+
103
+ [entities."check-run"]
104
+ entity = "github_check_runs"
105
+ primary_key = ["id"]
106
+ read_forms = ["check-run"]
107
+ containment = { repo_id = "repository.id from route context" }
108
+ relationships = [{ fields = ["repo_id"], target = "github_repositories" }]
109
+
110
+ [entities.commit]
111
+ entity = "github_commits"
112
+ primary_key = ["repo_id", "sha"]
113
+ read_forms = ["commit"]
114
+ containment = { repo_id = "repository.id from route context" }
115
+ relationship_projections = { message = "commit.message", comment_count = "commit.comment_count", author_id = "author.id", committer_id = "committer.id" }
116
+ relationships = [
117
+ { fields = ["repo_id"], target = "github_repositories" },
118
+ { fields = ["author_id"], target = "github_users" },
119
+ { fields = ["committer_id"], target = "github_users" },
120
+ ]
121
+ notes = "The nested commit object, Git author/committer, tree, verification, parents, stats and files are preserved alongside direct relationship projections."
122
+
123
+ # GitHub REST has no polymorphic lookup in these entity roots. commit.author and
124
+ # commit.committer are declared as simple-user or empty-object; nullable direct
125
+ # account-id projections preserve that distinction without claiming every Git
126
+ # identity maps to a GitHub account.
127
+ polymorphic = []
128
+
129
+ [transform]
130
+ nullable = "OpenAPI nullable is converted to a type-plus-null union or anyOf with null."
131
+ non_date_time_formats = "uri, uri-template, email, and int64 format annotations are dropped because gateway-world/1 does not support them; underlying scalar types are preserved."
132
+ examples = "OpenAPI example annotations are omitted because gateway-world/1 accepts examples arrays, not singular example."
133
+ schema_additional_properties = "nullable-integration.permissions has schema-valued additionalProperties in OpenAPI and is widened to additionalProperties = true because gateway-world/1 only accepts a boolean."
134
+ root_closure = "Entity roots are additionalProperties = false; nested objects retain the source's open/closed behavior."
135
+
136
+ [compiler_limitations]
137
+ nested_constraints = "Primary keys remain direct entity properties. Nested scalar uniqueness and relationships are supported, but the compiler cannot enforce equality between a documented direct projection and its nested source."
138
+ uri_formats = "The compiler cannot carry GitHub's uri, uri-template, email, or int64 OpenAPI format annotations."
139
+ schema_valued_maps = "The compiler cannot constrain values of schema-valued additionalProperties maps."
140
+
141
+ [exclusions]
142
+ "other OpenAPI components" = "The bundle intentionally has eight state entities from the connector brief; comments, milestones, teams, apps, deployments, check suites and other GitHub resources are retained when nested but are not independently keyed entities."
143
+ "GraphQL object model" = "Only PullRequestReviewState is used. Importing the full parallel GraphQL graph would duplicate REST resources and is outside this eight-entity base scope."
144
+
145
+ [sandbox]
146
+ requirement = "Free test organization plus the Gateway GitHub App."
147
+ status = "not provisioned or not available to this reconstruction"
148
+ round_trip = "skipped"
149
+ goldens = "skipped; no customer or production payloads are included"
150
+
151
+ [fidelity]
152
+ shape = "base"
153
+ label = "subset"
154
+ mimic_blockers = [
155
+ "No sandbox/test-organization round trip.",
156
+ "No syntheticized golden replay.",
157
+ "Several vendor formats and one schema-valued map constraint are outside the compiler dialect.",
158
+ ]