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,1039 @@
1
+ {
2
+ "format": "gateway-slack-capabilities/2",
3
+ "package_version": "2.1.1",
4
+ "domain_version": "2.0.0",
5
+ "mapping_version": "1",
6
+ "interface": "Gateway hosted mock-tools with Slack method names",
7
+ "capture_methods": [
8
+ "auth.test",
9
+ "team.info",
10
+ "users.list",
11
+ "conversations.info",
12
+ "conversations.members",
13
+ "conversations.history",
14
+ "conversations.replies"
15
+ ],
16
+ "defaults": {
17
+ "entities": {
18
+ "verification": [
19
+ "tests/environment/test_schema_slack.py::test_every_natural_key_is_unique_and_nonmutable",
20
+ "tests/environment/test_schema_slack.py::test_every_entity_requires_its_identity_and_closes_its_root",
21
+ "tests/environment/test_schema_slack.py::test_complete_child_first_graph_scope_and_observations"
22
+ ],
23
+ "unsupported": [
24
+ "No live-fidelity replay has been executed."
25
+ ]
26
+ },
27
+ "operations": {
28
+ "interface": "hosted mock-tools",
29
+ "canonical_store": "gateway_env.store",
30
+ "live_verification": {
31
+ "status": "skipped",
32
+ "score": null
33
+ },
34
+ "scope_policy": "Scopes describe upstream Slack capabilities, not credentials required by isolated local world execution.",
35
+ "source": "canonical observed or synthetic records; no live calls",
36
+ "normalization": "Slack-shaped projection over canonical associations; exact string timestamps; snapshot counts preserved.",
37
+ "unsupported": [
38
+ "Transport auth, rate limits and real Slack writes are not part of hosted world tools."
39
+ ]
40
+ }
41
+ },
42
+ "entities": {
43
+ "slack_workspaces": {
44
+ "canonical": {
45
+ "entity": "slack_workspaces",
46
+ "primary_key": [
47
+ "id"
48
+ ]
49
+ },
50
+ "capture_source": "team.info / auth.test context",
51
+ "required_scopes": [
52
+ "team:read"
53
+ ],
54
+ "behavior": "snapshot",
55
+ "normalization": "Containing workspace identity is captured explicitly; enterprise/home-team IDs are observations.",
56
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
57
+ "platform_capture": "collected"
58
+ },
59
+ "slack_users": {
60
+ "canonical": {
61
+ "entity": "slack_users",
62
+ "primary_key": [
63
+ "workspace_id",
64
+ "id"
65
+ ]
66
+ },
67
+ "capture_source": "users.list / users.info",
68
+ "required_scopes": [
69
+ "users:read",
70
+ "users:read.email (optional)"
71
+ ],
72
+ "behavior": "executable",
73
+ "normalization": "Historical authors may remain unresolved; profile null/absence and observed fields remain distinct.",
74
+ "synthetic_source": "synthetic_slack_evidence()",
75
+ "platform_capture": "collected"
76
+ },
77
+ "slack_user_profile_fields": {
78
+ "canonical": {
79
+ "entity": "slack_user_profile_fields",
80
+ "primary_key": [
81
+ "workspace_id",
82
+ "user_id",
83
+ "field_id"
84
+ ]
85
+ },
86
+ "capture_source": "users.list / users.info profile.fields",
87
+ "required_scopes": [
88
+ "users:read"
89
+ ],
90
+ "behavior": "executable",
91
+ "normalization": "Profile field map becomes keyed rows; missing/null/present marker retained.",
92
+ "synthetic_source": "synthetic_slack_evidence()",
93
+ "platform_capture": "not_collected_by_connector_pipeline"
94
+ },
95
+ "slack_presence": {
96
+ "canonical": {
97
+ "entity": "slack_presence",
98
+ "primary_key": [
99
+ "workspace_id",
100
+ "user_id"
101
+ ]
102
+ },
103
+ "capture_source": "users.getPresence (optional capture)",
104
+ "required_scopes": [
105
+ "users:read"
106
+ ],
107
+ "behavior": "snapshot-read",
108
+ "normalization": "Observed presence only; no clock-driven updates or presence mutations.",
109
+ "synthetic_source": "synthetic_slack_evidence()",
110
+ "platform_capture": "not_collected_by_connector_pipeline"
111
+ },
112
+ "slack_bots": {
113
+ "canonical": {
114
+ "entity": "slack_bots",
115
+ "primary_key": [
116
+ "workspace_id",
117
+ "id"
118
+ ]
119
+ },
120
+ "capture_source": "embedded bot identity; dedicated bot metadata unavailable",
121
+ "required_scopes": [],
122
+ "behavior": "snapshot-only",
123
+ "normalization": "Bots can author messages without fabricated local bot rows.",
124
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
125
+ "platform_capture": "not_collected_by_connector_pipeline"
126
+ },
127
+ "slack_apps": {
128
+ "canonical": {
129
+ "entity": "slack_apps",
130
+ "primary_key": [
131
+ "workspace_id",
132
+ "id"
133
+ ]
134
+ },
135
+ "capture_source": "dedicated app metadata unavailable",
136
+ "required_scopes": [],
137
+ "behavior": "snapshot-only",
138
+ "normalization": "Safe identity only; no installation or credential lifecycle.",
139
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
140
+ "platform_capture": "not_collected_by_connector_pipeline"
141
+ },
142
+ "slack_channels": {
143
+ "canonical": {
144
+ "entity": "slack_channels",
145
+ "primary_key": [
146
+ "workspace_id",
147
+ "id"
148
+ ]
149
+ },
150
+ "capture_source": "conversations.list / conversations.info",
151
+ "required_scopes": [
152
+ "channels:read",
153
+ "groups:read",
154
+ "im:read",
155
+ "mpim:read"
156
+ ],
157
+ "behavior": "executable",
158
+ "normalization": "Viewer-specific fields normalized separately; access restricted by bound principal.",
159
+ "synthetic_source": "synthetic_slack_evidence()",
160
+ "platform_capture": "collected"
161
+ },
162
+ "slack_memberships": {
163
+ "canonical": {
164
+ "entity": "slack_memberships",
165
+ "primary_key": [
166
+ "workspace_id",
167
+ "channel_id",
168
+ "user_id"
169
+ ]
170
+ },
171
+ "capture_source": "conversations.members / observed is_member",
172
+ "required_scopes": [
173
+ "channels:read",
174
+ "groups:read",
175
+ "im:read",
176
+ "mpim:read"
177
+ ],
178
+ "behavior": "executable",
179
+ "normalization": "Structural users must be captured; membership samples do not redefine observed member counts.",
180
+ "synthetic_source": "synthetic_slack_evidence()",
181
+ "platform_capture": "collected"
182
+ },
183
+ "slack_conversation_states": {
184
+ "canonical": {
185
+ "entity": "slack_conversation_states",
186
+ "primary_key": [
187
+ "workspace_id",
188
+ "channel_id",
189
+ "user_id"
190
+ ]
191
+ },
192
+ "capture_source": "conversations.info viewer fields",
193
+ "required_scopes": [
194
+ "channels:read",
195
+ "groups:read",
196
+ "im:read",
197
+ "mpim:read"
198
+ ],
199
+ "behavior": "executable",
200
+ "normalization": "Bound actor owns viewer fields; no unread count simulation.",
201
+ "synthetic_source": "synthetic_slack_evidence()",
202
+ "platform_capture": "derived"
203
+ },
204
+ "slack_messages": {
205
+ "canonical": {
206
+ "entity": "slack_messages",
207
+ "primary_key": [
208
+ "workspace_id",
209
+ "channel_id",
210
+ "ts"
211
+ ]
212
+ },
213
+ "capture_source": "conversations.history / conversations.replies",
214
+ "required_scopes": [
215
+ "channels:history",
216
+ "groups:history",
217
+ "im:history",
218
+ "mpim:history"
219
+ ],
220
+ "behavior": "executable",
221
+ "normalization": "Exact timestamp strings; immutable workspace/channel/ts; rich content preserved within finite contract.",
222
+ "synthetic_source": "synthetic_slack_evidence()",
223
+ "platform_capture": "collected"
224
+ },
225
+ "slack_message_threads": {
226
+ "canonical": {
227
+ "entity": "slack_message_threads",
228
+ "primary_key": [
229
+ "workspace_id",
230
+ "channel_id",
231
+ "reply_ts"
232
+ ]
233
+ },
234
+ "capture_source": "message.thread_ts",
235
+ "required_scopes": [
236
+ "channels:history",
237
+ "groups:history",
238
+ "im:history",
239
+ "mpim:history"
240
+ ],
241
+ "behavior": "executable",
242
+ "normalization": "Single canonical reply-to-parent relation; root self marker inferred from observed replies.",
243
+ "synthetic_source": "synthetic_slack_evidence()",
244
+ "platform_capture": "derived"
245
+ },
246
+ "slack_reaction_summaries": {
247
+ "canonical": {
248
+ "entity": "slack_reaction_summaries",
249
+ "primary_key": [
250
+ "workspace_id",
251
+ "channel_id",
252
+ "message_ts",
253
+ "name"
254
+ ]
255
+ },
256
+ "capture_source": "message.reactions",
257
+ "required_scopes": [
258
+ "reactions:read"
259
+ ],
260
+ "behavior": "executable",
261
+ "normalization": "Observed counts retained independently of sampled users; local actor transitions increment/decrement.",
262
+ "synthetic_source": "synthetic_slack_evidence()",
263
+ "platform_capture": "derived"
264
+ },
265
+ "slack_reaction_users": {
266
+ "canonical": {
267
+ "entity": "slack_reaction_users",
268
+ "primary_key": [
269
+ "workspace_id",
270
+ "channel_id",
271
+ "message_ts",
272
+ "name",
273
+ "user_id"
274
+ ]
275
+ },
276
+ "capture_source": "message.reactions.users",
277
+ "required_scopes": [
278
+ "reactions:read"
279
+ ],
280
+ "behavior": "executable",
281
+ "normalization": "Historical actor IDs may be unresolved; duplicate local adds reject.",
282
+ "synthetic_source": "synthetic_slack_evidence()",
283
+ "platform_capture": "derived"
284
+ },
285
+ "slack_message_user_states": {
286
+ "canonical": {
287
+ "entity": "slack_message_user_states",
288
+ "primary_key": [
289
+ "workspace_id",
290
+ "channel_id",
291
+ "message_ts",
292
+ "user_id"
293
+ ]
294
+ },
295
+ "capture_source": "message.is_starred",
296
+ "required_scopes": [
297
+ "stars:read (optional)"
298
+ ],
299
+ "behavior": "snapshot-only",
300
+ "normalization": "Viewer observation, no stars mutation endpoint.",
301
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
302
+ "platform_capture": "not_collected_by_connector_pipeline"
303
+ },
304
+ "slack_scheduled_messages": {
305
+ "canonical": {
306
+ "entity": "slack_scheduled_messages",
307
+ "primary_key": [
308
+ "workspace_id",
309
+ "channel_id",
310
+ "id"
311
+ ]
312
+ },
313
+ "capture_source": "not captured",
314
+ "required_scopes": [],
315
+ "behavior": "snapshot-only",
316
+ "normalization": "No scheduler, delivery, or schedule/edit/delete API.",
317
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
318
+ "platform_capture": "not_collected_by_connector_pipeline"
319
+ },
320
+ "slack_scheduled_message_threads": {
321
+ "canonical": {
322
+ "entity": "slack_scheduled_message_threads",
323
+ "primary_key": [
324
+ "workspace_id",
325
+ "channel_id",
326
+ "scheduled_message_id"
327
+ ]
328
+ },
329
+ "capture_source": "not captured",
330
+ "required_scopes": [],
331
+ "behavior": "snapshot-only",
332
+ "normalization": "Association only; no scheduled delivery.",
333
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
334
+ "platform_capture": "not_collected_by_connector_pipeline"
335
+ },
336
+ "slack_ephemeral_messages": {
337
+ "canonical": {
338
+ "entity": "slack_ephemeral_messages",
339
+ "primary_key": [
340
+ "workspace_id",
341
+ "channel_id",
342
+ "ts",
343
+ "recipient_user_id"
344
+ ]
345
+ },
346
+ "capture_source": "not captured",
347
+ "required_scopes": [],
348
+ "behavior": "snapshot-only",
349
+ "normalization": "No delivery, presence guarantee, or persistent history projection.",
350
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
351
+ "platform_capture": "not_collected_by_connector_pipeline"
352
+ },
353
+ "slack_ephemeral_message_threads": {
354
+ "canonical": {
355
+ "entity": "slack_ephemeral_message_threads",
356
+ "primary_key": [
357
+ "workspace_id",
358
+ "channel_id",
359
+ "message_ts",
360
+ "recipient_user_id"
361
+ ]
362
+ },
363
+ "capture_source": "not captured",
364
+ "required_scopes": [],
365
+ "behavior": "snapshot-only",
366
+ "normalization": "Association only, not ordinary thread history.",
367
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
368
+ "platform_capture": "not_collected_by_connector_pipeline"
369
+ },
370
+ "slack_files": {
371
+ "canonical": {
372
+ "entity": "slack_files",
373
+ "primary_key": [
374
+ "workspace_id",
375
+ "id"
376
+ ]
377
+ },
378
+ "capture_source": "embedded files / files.info",
379
+ "required_scopes": [
380
+ "files:read"
381
+ ],
382
+ "behavior": "executable-read",
383
+ "normalization": "Only full metadata shape accepted; URL bytes/downloads are not fetched; access follows observed associations.",
384
+ "synthetic_source": "synthetic_slack_evidence()",
385
+ "platform_capture": "derived"
386
+ },
387
+ "slack_message_files": {
388
+ "canonical": {
389
+ "entity": "slack_message_files",
390
+ "primary_key": [
391
+ "workspace_id",
392
+ "channel_id",
393
+ "message_ts",
394
+ "file_id"
395
+ ]
396
+ },
397
+ "capture_source": "message.files",
398
+ "required_scopes": [
399
+ "files:read"
400
+ ],
401
+ "behavior": "executable-read",
402
+ "normalization": "Attachment occurrences normalize to file identity plus position; no upload endpoint.",
403
+ "synthetic_source": "synthetic_slack_evidence()",
404
+ "platform_capture": "derived"
405
+ },
406
+ "slack_unavailable_message_files": {
407
+ "canonical": {
408
+ "entity": "slack_unavailable_message_files",
409
+ "primary_key": [
410
+ "workspace_id",
411
+ "channel_id",
412
+ "message_ts",
413
+ "file_id"
414
+ ]
415
+ },
416
+ "capture_source": "message.files access discriminator",
417
+ "required_scopes": [
418
+ "files:read"
419
+ ],
420
+ "behavior": "executable-read",
421
+ "normalization": "Explicit unavailable discriminator retained; missing full metadata is never invented.",
422
+ "synthetic_source": "synthetic_slack_evidence()",
423
+ "platform_capture": "derived"
424
+ },
425
+ "slack_ephemeral_message_files": {
426
+ "canonical": {
427
+ "entity": "slack_ephemeral_message_files",
428
+ "primary_key": [
429
+ "workspace_id",
430
+ "channel_id",
431
+ "message_ts",
432
+ "recipient_user_id",
433
+ "file_id"
434
+ ]
435
+ },
436
+ "capture_source": "not captured",
437
+ "required_scopes": [],
438
+ "behavior": "snapshot-only",
439
+ "normalization": "No ephemeral delivery or upload simulation.",
440
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
441
+ "platform_capture": "not_collected_by_connector_pipeline"
442
+ },
443
+ "slack_file_shares": {
444
+ "canonical": {
445
+ "entity": "slack_file_shares",
446
+ "primary_key": [
447
+ "workspace_id",
448
+ "channel_id",
449
+ "message_ts",
450
+ "file_id"
451
+ ]
452
+ },
453
+ "capture_source": "embedded file.shares",
454
+ "required_scopes": [
455
+ "files:read"
456
+ ],
457
+ "behavior": "executable-read",
458
+ "normalization": "Only shares backed by observed message occurrences are mapped; counts remain observations.",
459
+ "synthetic_source": "synthetic_slack_evidence()",
460
+ "platform_capture": "not_collected_by_connector_pipeline"
461
+ },
462
+ "slack_file_channel_observations": {
463
+ "canonical": {
464
+ "entity": "slack_file_channel_observations",
465
+ "primary_key": [
466
+ "workspace_id",
467
+ "file_id",
468
+ "channel_id",
469
+ "kind"
470
+ ]
471
+ },
472
+ "capture_source": "embedded files channels/groups/ims",
473
+ "required_scopes": [
474
+ "files:read"
475
+ ],
476
+ "behavior": "snapshot-only",
477
+ "normalization": "Lists are observations, not invented message/file shares; referenced channels must exist.",
478
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
479
+ "platform_capture": "derived"
480
+ },
481
+ "slack_file_user_states": {
482
+ "canonical": {
483
+ "entity": "slack_file_user_states",
484
+ "primary_key": [
485
+ "workspace_id",
486
+ "file_id",
487
+ "user_id"
488
+ ]
489
+ },
490
+ "capture_source": "not captured",
491
+ "required_scopes": [],
492
+ "behavior": "snapshot-only",
493
+ "normalization": "No file-star/read state operations.",
494
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
495
+ "platform_capture": "not_collected_by_connector_pipeline"
496
+ },
497
+ "slack_file_reaction_summaries": {
498
+ "canonical": {
499
+ "entity": "slack_file_reaction_summaries",
500
+ "primary_key": [
501
+ "workspace_id",
502
+ "file_id",
503
+ "name"
504
+ ]
505
+ },
506
+ "capture_source": "not captured",
507
+ "required_scopes": [],
508
+ "behavior": "snapshot-only",
509
+ "normalization": "Legacy file reactions not exposed as modern message reaction operations.",
510
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
511
+ "platform_capture": "not_collected_by_connector_pipeline"
512
+ },
513
+ "slack_file_reaction_users": {
514
+ "canonical": {
515
+ "entity": "slack_file_reaction_users",
516
+ "primary_key": [
517
+ "workspace_id",
518
+ "file_id",
519
+ "name",
520
+ "user_id"
521
+ ]
522
+ },
523
+ "capture_source": "not captured",
524
+ "required_scopes": [],
525
+ "behavior": "snapshot-only",
526
+ "normalization": "Legacy actor observations only.",
527
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
528
+ "platform_capture": "not_collected_by_connector_pipeline"
529
+ },
530
+ "slack_pins": {
531
+ "canonical": {
532
+ "entity": "slack_pins",
533
+ "primary_key": [
534
+ "workspace_id",
535
+ "channel_id",
536
+ "message_ts"
537
+ ]
538
+ },
539
+ "capture_source": "pins.list (optional capture)",
540
+ "required_scopes": [
541
+ "pins:read",
542
+ "pins:write (local operation semantics)"
543
+ ],
544
+ "behavior": "executable",
545
+ "normalization": "Message pins only; files and legacy comments excluded.",
546
+ "synthetic_source": "synthetic_slack_evidence()",
547
+ "platform_capture": "not_collected_by_connector_pipeline"
548
+ },
549
+ "slack_bookmarks": {
550
+ "canonical": {
551
+ "entity": "slack_bookmarks",
552
+ "primary_key": [
553
+ "workspace_id",
554
+ "channel_id",
555
+ "id"
556
+ ]
557
+ },
558
+ "capture_source": "bookmarks.list (optional capture)",
559
+ "required_scopes": [
560
+ "bookmarks:read"
561
+ ],
562
+ "behavior": "snapshot-read",
563
+ "normalization": "Read observed bookmarks; create/update/delete not exposed.",
564
+ "synthetic_source": "synthetic_slack_evidence()",
565
+ "platform_capture": "not_collected_by_connector_pipeline"
566
+ },
567
+ "slack_usergroups": {
568
+ "canonical": {
569
+ "entity": "slack_usergroups",
570
+ "primary_key": [
571
+ "workspace_id",
572
+ "id"
573
+ ]
574
+ },
575
+ "capture_source": "usergroups.list (optional capture)",
576
+ "required_scopes": [
577
+ "usergroups:read"
578
+ ],
579
+ "behavior": "snapshot-read",
580
+ "normalization": "Observed groups only; no group membership administration.",
581
+ "synthetic_source": "synthetic_slack_evidence()",
582
+ "platform_capture": "not_collected_by_connector_pipeline"
583
+ },
584
+ "slack_usergroup_memberships": {
585
+ "canonical": {
586
+ "entity": "slack_usergroup_memberships",
587
+ "primary_key": [
588
+ "workspace_id",
589
+ "usergroup_id",
590
+ "user_id"
591
+ ]
592
+ },
593
+ "capture_source": "usergroups.list include_users",
594
+ "required_scopes": [
595
+ "usergroups:read"
596
+ ],
597
+ "behavior": "snapshot-read",
598
+ "normalization": "Explicit observed members; no completeness inference from samples.",
599
+ "synthetic_source": "synthetic_slack_evidence()",
600
+ "platform_capture": "not_collected_by_connector_pipeline"
601
+ },
602
+ "slack_usergroup_channels": {
603
+ "canonical": {
604
+ "entity": "slack_usergroup_channels",
605
+ "primary_key": [
606
+ "workspace_id",
607
+ "usergroup_id",
608
+ "channel_id",
609
+ "kind"
610
+ ]
611
+ },
612
+ "capture_source": "not captured",
613
+ "required_scopes": [],
614
+ "behavior": "snapshot-only",
615
+ "normalization": "Stored preference links only; no default-channel enforcement.",
616
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
617
+ "platform_capture": "not_collected_by_connector_pipeline"
618
+ },
619
+ "slack_views": {
620
+ "canonical": {
621
+ "entity": "slack_views",
622
+ "primary_key": [
623
+ "workspace_id",
624
+ "id"
625
+ ]
626
+ },
627
+ "capture_source": "not captured",
628
+ "required_scopes": [],
629
+ "behavior": "snapshot-only",
630
+ "normalization": "No modal stack, trigger expiry, hash concurrency, submission or UI rendering.",
631
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
632
+ "platform_capture": "not_collected_by_connector_pipeline"
633
+ },
634
+ "slack_view_state_entries": {
635
+ "canonical": {
636
+ "entity": "slack_view_state_entries",
637
+ "primary_key": [
638
+ "workspace_id",
639
+ "view_id",
640
+ "block_id",
641
+ "action_id"
642
+ ]
643
+ },
644
+ "capture_source": "not captured",
645
+ "required_scopes": [],
646
+ "behavior": "snapshot-only",
647
+ "normalization": "Stored action values only; no interactive view execution.",
648
+ "synthetic_source": "samples/schema-worlds/slack/data/records.json (separate exhaustive fixtures)",
649
+ "platform_capture": "not_collected_by_connector_pipeline"
650
+ }
651
+ },
652
+ "operations": {
653
+ "list_channels": {
654
+ "behavior": "fixture helper",
655
+ "vendor_reference": null,
656
+ "required_scopes": [],
657
+ "unsupported": [
658
+ "Transport auth, rate limits and real Slack writes are not part of hosted world tools.",
659
+ "Compatibility fixture helper; access constrained to the bound principal on executable builds."
660
+ ],
661
+ "canonical_entities": [
662
+ "slack_channels"
663
+ ],
664
+ "synthetic_verification": "tests/environment/test_schema_slack.py::test_world_helpers_exact_order_snapshot_reopen_reset_and_branch_isolation"
665
+ },
666
+ "list_messages": {
667
+ "behavior": "fixture helper",
668
+ "vendor_reference": null,
669
+ "required_scopes": [],
670
+ "unsupported": [
671
+ "Transport auth, rate limits and real Slack writes are not part of hosted world tools.",
672
+ "Compatibility fixture helper; access constrained to the bound principal on executable builds."
673
+ ],
674
+ "canonical_entities": [
675
+ "slack_messages"
676
+ ],
677
+ "synthetic_verification": "tests/environment/test_schema_slack.py::test_world_helpers_exact_order_snapshot_reopen_reset_and_branch_isolation"
678
+ },
679
+ "post_message": {
680
+ "behavior": "fixture helper",
681
+ "vendor_reference": null,
682
+ "required_scopes": [],
683
+ "unsupported": [
684
+ "Transport auth, rate limits and real Slack writes are not part of hosted world tools.",
685
+ "Compatibility fixture helper; access constrained to the bound principal on executable builds."
686
+ ],
687
+ "canonical_entities": [
688
+ "slack_messages"
689
+ ],
690
+ "synthetic_verification": "tests/environment/test_schema_slack.py::test_world_helpers_exact_order_snapshot_reopen_reset_and_branch_isolation"
691
+ },
692
+ "users.list": {
693
+ "behavior": "read projection",
694
+ "vendor_reference": "https://docs.slack.dev/reference/methods/users.list/",
695
+ "required_scopes": [
696
+ "users:read"
697
+ ],
698
+ "canonical_entities": [
699
+ "slack_users",
700
+ "slack_user_profile_fields"
701
+ ],
702
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_discovery_pagination_visibility_and_exact_history"
703
+ },
704
+ "users.info": {
705
+ "behavior": "read projection",
706
+ "vendor_reference": "https://docs.slack.dev/reference/methods/users.info/",
707
+ "required_scopes": [
708
+ "users:read"
709
+ ],
710
+ "canonical_entities": [
711
+ "slack_users",
712
+ "slack_user_profile_fields"
713
+ ],
714
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_synthetic_golden_read_projection"
715
+ },
716
+ "conversations.list": {
717
+ "behavior": "read projection",
718
+ "vendor_reference": "https://docs.slack.dev/reference/methods/conversations.list/",
719
+ "required_scopes": [
720
+ "channels:read",
721
+ "groups:read",
722
+ "im:read",
723
+ "mpim:read"
724
+ ],
725
+ "canonical_entities": [
726
+ "slack_channels",
727
+ "slack_memberships",
728
+ "slack_conversation_states"
729
+ ],
730
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_discovery_pagination_visibility_and_exact_history"
731
+ },
732
+ "conversations.info": {
733
+ "behavior": "read projection",
734
+ "vendor_reference": "https://docs.slack.dev/reference/methods/conversations.info/",
735
+ "required_scopes": [
736
+ "channels:read",
737
+ "groups:read",
738
+ "im:read",
739
+ "mpim:read"
740
+ ],
741
+ "canonical_entities": [
742
+ "slack_channels",
743
+ "slack_memberships",
744
+ "slack_conversation_states"
745
+ ],
746
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_discovery_pagination_visibility_and_exact_history"
747
+ },
748
+ "conversations.members": {
749
+ "behavior": "read projection",
750
+ "vendor_reference": "https://docs.slack.dev/reference/methods/conversations.members/",
751
+ "required_scopes": [
752
+ "channels:read",
753
+ "groups:read",
754
+ "im:read",
755
+ "mpim:read"
756
+ ],
757
+ "canonical_entities": [
758
+ "slack_channels",
759
+ "slack_memberships",
760
+ "slack_conversation_states"
761
+ ],
762
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_synthetic_golden_read_projection"
763
+ },
764
+ "conversations.history": {
765
+ "behavior": "read projection",
766
+ "vendor_reference": "https://docs.slack.dev/reference/methods/conversations.history/",
767
+ "required_scopes": [
768
+ "channels:history",
769
+ "groups:history",
770
+ "im:history",
771
+ "mpim:history"
772
+ ],
773
+ "canonical_entities": [
774
+ "slack_channels",
775
+ "slack_memberships",
776
+ "slack_conversation_states",
777
+ "slack_messages",
778
+ "slack_message_threads",
779
+ "slack_reaction_summaries",
780
+ "slack_reaction_users",
781
+ "slack_message_files",
782
+ "slack_unavailable_message_files"
783
+ ],
784
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_discovery_pagination_visibility_and_exact_history"
785
+ },
786
+ "conversations.replies": {
787
+ "behavior": "read projection",
788
+ "vendor_reference": "https://docs.slack.dev/reference/methods/conversations.replies/",
789
+ "required_scopes": [
790
+ "channels:history",
791
+ "groups:history",
792
+ "im:history",
793
+ "mpim:history"
794
+ ],
795
+ "canonical_entities": [
796
+ "slack_channels",
797
+ "slack_memberships",
798
+ "slack_conversation_states",
799
+ "slack_messages",
800
+ "slack_message_threads",
801
+ "slack_reaction_summaries",
802
+ "slack_reaction_users",
803
+ "slack_message_files",
804
+ "slack_unavailable_message_files"
805
+ ],
806
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_discovery_pagination_visibility_and_exact_history"
807
+ },
808
+ "conversations.join": {
809
+ "behavior": "executable",
810
+ "vendor_reference": "https://docs.slack.dev/reference/methods/conversations.join/",
811
+ "required_scopes": [
812
+ "channels:join or channels:write (token type dependent)",
813
+ "groups:write / im:write / mpim:write (leave by conversation type)"
814
+ ],
815
+ "canonical_entities": [
816
+ "slack_channels",
817
+ "slack_memberships",
818
+ "slack_conversation_states"
819
+ ],
820
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_join_leave_pins_and_timestamp_windows"
821
+ },
822
+ "conversations.leave": {
823
+ "behavior": "executable",
824
+ "vendor_reference": "https://docs.slack.dev/reference/methods/conversations.leave/",
825
+ "required_scopes": [
826
+ "channels:join or channels:write (token type dependent)",
827
+ "groups:write / im:write / mpim:write (leave by conversation type)"
828
+ ],
829
+ "canonical_entities": [
830
+ "slack_channels",
831
+ "slack_memberships",
832
+ "slack_conversation_states"
833
+ ],
834
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_join_leave_pins_and_timestamp_windows"
835
+ },
836
+ "chat.postMessage": {
837
+ "behavior": "executable",
838
+ "vendor_reference": "https://docs.slack.dev/reference/methods/chat.postMessage/",
839
+ "required_scopes": [
840
+ "chat:write"
841
+ ],
842
+ "canonical_entities": [
843
+ "slack_messages",
844
+ "slack_message_threads"
845
+ ],
846
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_mutations_permissions_reactions_and_rich_update"
847
+ },
848
+ "chat.update": {
849
+ "behavior": "executable",
850
+ "vendor_reference": "https://docs.slack.dev/reference/methods/chat.update/",
851
+ "required_scopes": [
852
+ "chat:write"
853
+ ],
854
+ "canonical_entities": [
855
+ "slack_messages",
856
+ "slack_message_threads"
857
+ ],
858
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_mutations_permissions_reactions_and_rich_update"
859
+ },
860
+ "chat.delete": {
861
+ "behavior": "executable",
862
+ "vendor_reference": "https://docs.slack.dev/reference/methods/chat.delete/",
863
+ "required_scopes": [
864
+ "chat:write"
865
+ ],
866
+ "unsupported": [
867
+ "Transport auth, rate limits and real Slack writes are not part of hosted world tools.",
868
+ "Thread-root deletion with dependent replies returns unsupported_thread_root_delete."
869
+ ],
870
+ "canonical_entities": [
871
+ "slack_messages",
872
+ "slack_message_threads"
873
+ ],
874
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_mutations_permissions_reactions_and_rich_update"
875
+ },
876
+ "reactions.add": {
877
+ "behavior": "executable",
878
+ "vendor_reference": "https://docs.slack.dev/reference/methods/reactions.add/",
879
+ "required_scopes": [
880
+ "reactions:write"
881
+ ],
882
+ "canonical_entities": [
883
+ "slack_reaction_summaries",
884
+ "slack_reaction_users",
885
+ "slack_messages"
886
+ ],
887
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_mutations_permissions_reactions_and_rich_update"
888
+ },
889
+ "reactions.remove": {
890
+ "behavior": "executable",
891
+ "vendor_reference": "https://docs.slack.dev/reference/methods/reactions.remove/",
892
+ "required_scopes": [
893
+ "reactions:write"
894
+ ],
895
+ "canonical_entities": [
896
+ "slack_reaction_summaries",
897
+ "slack_reaction_users",
898
+ "slack_messages"
899
+ ],
900
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_mutations_permissions_reactions_and_rich_update"
901
+ },
902
+ "reactions.get": {
903
+ "behavior": "executable",
904
+ "vendor_reference": "https://docs.slack.dev/reference/methods/reactions.get/",
905
+ "required_scopes": [
906
+ "reactions:read"
907
+ ],
908
+ "canonical_entities": [
909
+ "slack_reaction_summaries",
910
+ "slack_reaction_users",
911
+ "slack_messages"
912
+ ],
913
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_mutations_permissions_reactions_and_rich_update"
914
+ },
915
+ "files.info": {
916
+ "behavior": "read projection",
917
+ "vendor_reference": "https://docs.slack.dev/reference/methods/files.info/",
918
+ "required_scopes": [
919
+ "files:read"
920
+ ],
921
+ "canonical_entities": [
922
+ "slack_files",
923
+ "slack_message_files"
924
+ ],
925
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_synthetic_golden_read_projection"
926
+ },
927
+ "files.list": {
928
+ "behavior": "read projection",
929
+ "vendor_reference": "https://docs.slack.dev/reference/methods/files.list/",
930
+ "required_scopes": [
931
+ "files:read"
932
+ ],
933
+ "canonical_entities": [
934
+ "slack_files",
935
+ "slack_message_files"
936
+ ],
937
+ "synthetic_verification": "tests/environment/test_schema_slack_scale.py::test_files_page_reuses_associations_and_preserves_totals"
938
+ },
939
+ "pins.list": {
940
+ "behavior": "executable",
941
+ "vendor_reference": "https://docs.slack.dev/reference/methods/pins.list/",
942
+ "required_scopes": [
943
+ "pins:read"
944
+ ],
945
+ "canonical_entities": [
946
+ "slack_pins",
947
+ "slack_messages"
948
+ ],
949
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_join_leave_pins_and_timestamp_windows"
950
+ },
951
+ "pins.add": {
952
+ "behavior": "executable",
953
+ "vendor_reference": "https://docs.slack.dev/reference/methods/pins.add/",
954
+ "required_scopes": [
955
+ "pins:write"
956
+ ],
957
+ "canonical_entities": [
958
+ "slack_pins",
959
+ "slack_messages"
960
+ ],
961
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_join_leave_pins_and_timestamp_windows"
962
+ },
963
+ "pins.remove": {
964
+ "behavior": "executable",
965
+ "vendor_reference": "https://docs.slack.dev/reference/methods/pins.remove/",
966
+ "required_scopes": [
967
+ "pins:write"
968
+ ],
969
+ "canonical_entities": [
970
+ "slack_pins",
971
+ "slack_messages"
972
+ ],
973
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_join_leave_pins_and_timestamp_windows"
974
+ },
975
+ "bookmarks.list": {
976
+ "behavior": "read projection",
977
+ "vendor_reference": "https://docs.slack.dev/reference/methods/bookmarks.list/",
978
+ "required_scopes": [
979
+ "bookmarks:read"
980
+ ],
981
+ "canonical_entities": [
982
+ "slack_bookmarks"
983
+ ],
984
+ "synthetic_verification": "tests/environment/test_schema_slack_optional.py::test_bookmarks_preserve_visibility_and_observed_payload"
985
+ },
986
+ "usergroups.list": {
987
+ "behavior": "read projection",
988
+ "vendor_reference": "https://docs.slack.dev/reference/methods/usergroups.list/",
989
+ "required_scopes": [
990
+ "usergroups:read"
991
+ ],
992
+ "canonical_entities": [
993
+ "slack_usergroups",
994
+ "slack_usergroup_memberships"
995
+ ],
996
+ "synthetic_verification": "tests/environment/test_schema_slack_optional.py::test_usergroups_keep_disabled_filter_and_membership_snapshot"
997
+ },
998
+ "usergroups.users.list": {
999
+ "behavior": "read projection",
1000
+ "vendor_reference": "https://docs.slack.dev/reference/methods/usergroups.users.list/",
1001
+ "required_scopes": [
1002
+ "usergroups:read"
1003
+ ],
1004
+ "canonical_entities": [
1005
+ "slack_usergroups",
1006
+ "slack_usergroup_memberships"
1007
+ ],
1008
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_synthetic_golden_read_projection"
1009
+ },
1010
+ "users.getPresence": {
1011
+ "behavior": "read projection",
1012
+ "vendor_reference": "https://docs.slack.dev/reference/methods/users.getPresence/",
1013
+ "required_scopes": [
1014
+ "users:read"
1015
+ ],
1016
+ "unsupported": [
1017
+ "Transport auth, rate limits and real Slack writes are not part of hosted world tools.",
1018
+ "Unobserved presence returns presence_not_observed; no live presence calculation."
1019
+ ],
1020
+ "canonical_entities": [
1021
+ "slack_presence"
1022
+ ],
1023
+ "synthetic_verification": "tests/environment/test_schema_slack_executable.py::test_synthetic_golden_read_projection"
1024
+ }
1025
+ },
1026
+ "limitations": [
1027
+ "Synthetic tests establish local behavior, not live fidelity; captured worlds are subset until measured replay.",
1028
+ "Fixed principal is bundle-owned; no caller-supplied workspace or actor impersonation on executable bundles.",
1029
+ "Contract language does not implement all Block Kit conditional rules or Slack permissions/scopes.",
1030
+ "History is a bounded observed subset; omitted/deleted/inaccessible records are not inferred from absence.",
1031
+ "Refresh recursively preserves missing projected fields and applies observed fields; it does not merge running session mutations into version snapshots.",
1032
+ "Explicit deletions require message.deleted evidence; root deletion with dependent threads is unsupported and rejects atomically.",
1033
+ "chat.delete cannot delete thread roots with children; unsupported_thread_root_delete is a Gateway subset error.",
1034
+ "Cursors are deterministic query-bound offset cursors; no Slack cursor encoding compatibility or snapshot isolation across mutations.",
1035
+ "New message timestamps use a deterministic logical clock rather than real Slack server time.",
1036
+ "No uploads, file downloads, scheduling, ephemeral delivery, modal execution, enterprise administration, Slack events or live writes.",
1037
+ "Imported counts can exceed captured actors/replies; local operations preserve those observations rather than recomputing completeness."
1038
+ ]
1039
+ }