clousight-bench 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. clousight_bench-0.2.0/.dockerignore +37 -0
  2. clousight_bench-0.2.0/.github/CODEOWNERS +16 -0
  3. clousight_bench-0.2.0/.github/ISSUE_TEMPLATE/bug_report.yml +54 -0
  4. clousight_bench-0.2.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. clousight_bench-0.2.0/.github/ISSUE_TEMPLATE/feature_request.yml +40 -0
  6. clousight_bench-0.2.0/.github/PULL_REQUEST_TEMPLATE.md +26 -0
  7. clousight_bench-0.2.0/.github/dependabot.yml +25 -0
  8. clousight_bench-0.2.0/.github/workflows/ci.yml +216 -0
  9. clousight_bench-0.2.0/.github/workflows/codeql.yml +31 -0
  10. clousight_bench-0.2.0/.github/workflows/dependency-review.yml +21 -0
  11. clousight_bench-0.2.0/.github/workflows/docs.yml +52 -0
  12. clousight_bench-0.2.0/.github/workflows/release.yml +57 -0
  13. clousight_bench-0.2.0/.gitignore +31 -0
  14. clousight_bench-0.2.0/.gitsync.env.example +6 -0
  15. clousight_bench-0.2.0/AGENTS.md +10 -0
  16. clousight_bench-0.2.0/CHANGELOG.md +188 -0
  17. clousight_bench-0.2.0/CITATION.cff +25 -0
  18. clousight_bench-0.2.0/CODE_OF_CONDUCT.md +132 -0
  19. clousight_bench-0.2.0/CONTRIBUTING.md +101 -0
  20. clousight_bench-0.2.0/GOVERNANCE.md +55 -0
  21. clousight_bench-0.2.0/LICENSE +202 -0
  22. clousight_bench-0.2.0/MAINTAINERS.md +23 -0
  23. clousight_bench-0.2.0/NOTICE +13 -0
  24. clousight_bench-0.2.0/PKG-INFO +272 -0
  25. clousight_bench-0.2.0/README.md +206 -0
  26. clousight_bench-0.2.0/ROADMAP.md +81 -0
  27. clousight_bench-0.2.0/SECURITY.md +118 -0
  28. clousight_bench-0.2.0/SUPPORT.md +26 -0
  29. clousight_bench-0.2.0/configs/agent-runtime.aliyun.example.yaml +36 -0
  30. clousight_bench-0.2.0/configs/agent-runtime.huawei.example.yaml +11 -0
  31. clousight_bench-0.2.0/configs/agent-runtime.volcengine.example.yaml +13 -0
  32. clousight_bench-0.2.0/configs/aliyun-agentrun-full.plan.yaml +40 -0
  33. clousight_bench-0.2.0/configs/bigdata-emr.aws.example.yaml +18 -0
  34. clousight_bench-0.2.0/configs/local-sim.fail-fast.yaml +9 -0
  35. clousight_bench-0.2.0/docs/RELEASING.md +44 -0
  36. clousight_bench-0.2.0/docs/agentrun-integration-research.md +84 -0
  37. clousight_bench-0.2.0/docs/architecture.md +367 -0
  38. clousight_bench-0.2.0/docs/dataset-tiers.md +99 -0
  39. clousight_bench-0.2.0/docs/index.md +46 -0
  40. clousight_bench-0.2.0/docs/plans/2026-08-14-ecs-mode-orchestration-plan.md +287 -0
  41. clousight_bench-0.2.0/docs/plans/2026-08-16-report-echarts.md +830 -0
  42. clousight_bench-0.2.0/docs/plugins.md +99 -0
  43. clousight_bench-0.2.0/docs/probe-carrier.md +198 -0
  44. clousight_bench-0.2.0/docs/querying.md +124 -0
  45. clousight_bench-0.2.0/docs/reference.md +32 -0
  46. clousight_bench-0.2.0/docs/reporting.md +101 -0
  47. clousight_bench-0.2.0/docs/runbooks/prod-smoke.md +72 -0
  48. clousight_bench-0.2.0/docs/specs/2026-08-14-ecs-mode-orchestration-design.md +275 -0
  49. clousight_bench-0.2.0/docs/specs/2026-08-16-report-echarts-design.md +192 -0
  50. clousight_bench-0.2.0/docs/superpowers/specs/2026-07-27-phase1c-run-plans-and-statistics-design.md +167 -0
  51. clousight_bench-0.2.0/examples/README.md +49 -0
  52. clousight_bench-0.2.0/examples/asset-manifests/README.md +62 -0
  53. clousight_bench-0.2.0/examples/asset-manifests/agent-runtime.held-out-keys.private.yaml +26 -0
  54. clousight_bench-0.2.0/examples/asset-manifests/agent-runtime.swe-bench-lite.remote.yaml +28 -0
  55. clousight_bench-0.2.0/examples/asset-manifests/bigdata-emr.bundled.example.yaml +21 -0
  56. clousight_bench-0.2.0/examples/asset-manifests/bigdata-emr.nyc-taxi.remote.yaml +29 -0
  57. clousight_bench-0.2.0/examples/asset-manifests/retrieval.hotpotqa.remote.yaml +23 -0
  58. clousight_bench-0.2.0/examples/run-plan-example.yaml +20 -0
  59. clousight_bench-0.2.0/infra/agent-runtime-aliyun.local.yaml.example +14 -0
  60. clousight_bench-0.2.0/infra/mock-tools-fc/bootstrap +4 -0
  61. clousight_bench-0.2.0/infra/mock-tools-fc/data/prices.json +34 -0
  62. clousight_bench-0.2.0/infra/mock-tools-fc/data/resources.json +49 -0
  63. clousight_bench-0.2.0/infra/mock-tools-fc/entry.py +31 -0
  64. clousight_bench-0.2.0/infra/mock-tools-fc/mock_tools.py +291 -0
  65. clousight_bench-0.2.0/infra/terraform/README.md +28 -0
  66. clousight_bench-0.2.0/infra/terraform/aliyun-iam/.terraform.lock.hcl +63 -0
  67. clousight_bench-0.2.0/infra/terraform/aliyun-iam/README.md +126 -0
  68. clousight_bench-0.2.0/infra/terraform/aliyun-iam/controller.tf +215 -0
  69. clousight_bench-0.2.0/infra/terraform/aliyun-iam/main.tf +659 -0
  70. clousight_bench-0.2.0/infra/terraform/aliyun-iam/outputs.tf +124 -0
  71. clousight_bench-0.2.0/infra/terraform/aliyun-iam/policies/agentrun.json.tpl +33 -0
  72. clousight_bench-0.2.0/infra/terraform/aliyun-iam/set-arms-retention.sh +33 -0
  73. clousight_bench-0.2.0/infra/terraform/aliyun-iam/terraform.tfvars.example +32 -0
  74. clousight_bench-0.2.0/infra/terraform/aliyun-iam/variables.tf +190 -0
  75. clousight_bench-0.2.0/infra/terraform/aws-agentcore/.terraform.lock.hcl +67 -0
  76. clousight_bench-0.2.0/infra/terraform/aws-agentcore/main.tf +435 -0
  77. clousight_bench-0.2.0/infra/terraform/aws-agentcore/outputs.tf +92 -0
  78. clousight_bench-0.2.0/infra/terraform/aws-agentcore/variables.tf +100 -0
  79. clousight_bench-0.2.0/infra/terraform/aws-agentcore/versions.tf +28 -0
  80. clousight_bench-0.2.0/infra/terraform/aws-emr/iam.tf +63 -0
  81. clousight_bench-0.2.0/infra/terraform/aws-emr/main.tf +110 -0
  82. clousight_bench-0.2.0/infra/terraform/aws-emr/terraform.tfvars.example +8 -0
  83. clousight_bench-0.2.0/infra/terraform/mock-tools-lambda/handler.py +41 -0
  84. clousight_bench-0.2.0/mkdocs.yml +53 -0
  85. clousight_bench-0.2.0/pyproject.toml +171 -0
  86. clousight_bench-0.2.0/scripts/gen_docs.py +129 -0
  87. clousight_bench-0.2.0/scripts/gitsync.sh +147 -0
  88. clousight_bench-0.2.0/scripts/setup-labels.sh +58 -0
  89. clousight_bench-0.2.0/src/clousight_bench/__init__.py +18 -0
  90. clousight_bench-0.2.0/src/clousight_bench/cli.py +1260 -0
  91. clousight_bench-0.2.0/src/clousight_bench/core/__init__.py +6 -0
  92. clousight_bench-0.2.0/src/clousight_bench/core/analytics.py +271 -0
  93. clousight_bench-0.2.0/src/clousight_bench/core/assets.py +160 -0
  94. clousight_bench-0.2.0/src/clousight_bench/core/billing.py +69 -0
  95. clousight_bench-0.2.0/src/clousight_bench/core/campaign.py +206 -0
  96. clousight_bench-0.2.0/src/clousight_bench/core/campaign_spec.py +98 -0
  97. clousight_bench-0.2.0/src/clousight_bench/core/canonical.py +56 -0
  98. clousight_bench-0.2.0/src/clousight_bench/core/clients.py +178 -0
  99. clousight_bench-0.2.0/src/clousight_bench/core/conformance.py +110 -0
  100. clousight_bench-0.2.0/src/clousight_bench/core/controller.py +85 -0
  101. clousight_bench-0.2.0/src/clousight_bench/core/controller_main.py +315 -0
  102. clousight_bench-0.2.0/src/clousight_bench/core/cost_budget.py +70 -0
  103. clousight_bench-0.2.0/src/clousight_bench/core/cost_notice.py +43 -0
  104. clousight_bench-0.2.0/src/clousight_bench/core/credentials.py +175 -0
  105. clousight_bench-0.2.0/src/clousight_bench/core/endpoints.py +108 -0
  106. clousight_bench-0.2.0/src/clousight_bench/core/errors.py +21 -0
  107. clousight_bench-0.2.0/src/clousight_bench/core/fingerprints.py +94 -0
  108. clousight_bench-0.2.0/src/clousight_bench/core/inventory.py +66 -0
  109. clousight_bench-0.2.0/src/clousight_bench/core/live_guard.py +67 -0
  110. clousight_bench-0.2.0/src/clousight_bench/core/migrate.py +280 -0
  111. clousight_bench-0.2.0/src/clousight_bench/core/observation.py +158 -0
  112. clousight_bench-0.2.0/src/clousight_bench/core/orchestrator.py +1261 -0
  113. clousight_bench-0.2.0/src/clousight_bench/core/persistence.py +74 -0
  114. clousight_bench-0.2.0/src/clousight_bench/core/plugin.py +340 -0
  115. clousight_bench-0.2.0/src/clousight_bench/core/preflight.py +166 -0
  116. clousight_bench-0.2.0/src/clousight_bench/core/prod_submit.py +174 -0
  117. clousight_bench-0.2.0/src/clousight_bench/core/publish.py +376 -0
  118. clousight_bench-0.2.0/src/clousight_bench/core/reaper_base.py +73 -0
  119. clousight_bench-0.2.0/src/clousight_bench/core/record.py +288 -0
  120. clousight_bench-0.2.0/src/clousight_bench/core/redaction.py +160 -0
  121. clousight_bench-0.2.0/src/clousight_bench/core/registry.py +260 -0
  122. clousight_bench-0.2.0/src/clousight_bench/core/report.py +527 -0
  123. clousight_bench-0.2.0/src/clousight_bench/core/reporting/__init__.py +0 -0
  124. clousight_bench-0.2.0/src/clousight_bench/core/reporting/assets/__init__.py +0 -0
  125. clousight_bench-0.2.0/src/clousight_bench/core/reporting/assets/echarts.min.js +45 -0
  126. clousight_bench-0.2.0/src/clousight_bench/core/reporting/bundle.py +329 -0
  127. clousight_bench-0.2.0/src/clousight_bench/core/reporting/profiles/__init__.py +314 -0
  128. clousight_bench-0.2.0/src/clousight_bench/core/reporting/renderers/__init__.py +0 -0
  129. clousight_bench-0.2.0/src/clousight_bench/core/reporting/renderers/base.py +13 -0
  130. clousight_bench-0.2.0/src/clousight_bench/core/reporting/renderers/brand.py +70 -0
  131. clousight_bench-0.2.0/src/clousight_bench/core/reporting/renderers/charts_js.py +40 -0
  132. clousight_bench-0.2.0/src/clousight_bench/core/reporting/renderers/echarts.py +282 -0
  133. clousight_bench-0.2.0/src/clousight_bench/core/reporting/renderers/html.py +388 -0
  134. clousight_bench-0.2.0/src/clousight_bench/core/reporting/renderers/i18n.py +235 -0
  135. clousight_bench-0.2.0/src/clousight_bench/core/reporting/renderers/svg.py +148 -0
  136. clousight_bench-0.2.0/src/clousight_bench/core/resource_ledger.py +90 -0
  137. clousight_bench-0.2.0/src/clousight_bench/core/resource_reconcile.py +88 -0
  138. clousight_bench-0.2.0/src/clousight_bench/core/resource_tags.py +31 -0
  139. clousight_bench-0.2.0/src/clousight_bench/core/resources.py +18 -0
  140. clousight_bench-0.2.0/src/clousight_bench/core/rollup.py +47 -0
  141. clousight_bench-0.2.0/src/clousight_bench/core/runplan.py +321 -0
  142. clousight_bench-0.2.0/src/clousight_bench/core/sampling.py +31 -0
  143. clousight_bench-0.2.0/src/clousight_bench/core/sandbox.py +127 -0
  144. clousight_bench-0.2.0/src/clousight_bench/core/schema.py +45 -0
  145. clousight_bench-0.2.0/src/clousight_bench/core/schema_validate.py +65 -0
  146. clousight_bench-0.2.0/src/clousight_bench/core/statistics.py +171 -0
  147. clousight_bench-0.2.0/src/clousight_bench/core/stats.py +41 -0
  148. clousight_bench-0.2.0/src/clousight_bench/core/store.py +540 -0
  149. clousight_bench-0.2.0/src/clousight_bench/core/traceview.py +127 -0
  150. clousight_bench-0.2.0/src/clousight_bench/core/tracing.py +166 -0
  151. clousight_bench-0.2.0/src/clousight_bench/core/usage.py +53 -0
  152. clousight_bench-0.2.0/src/clousight_bench/core/validation.py +87 -0
  153. clousight_bench-0.2.0/src/clousight_bench/core/versioning.py +61 -0
  154. clousight_bench-0.2.0/src/clousight_bench/core/watchdog.py +60 -0
  155. clousight_bench-0.2.0/src/clousight_bench/core/workload.py +222 -0
  156. clousight_bench-0.2.0/src/clousight_bench/domains/__init__.py +1 -0
  157. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/__init__.py +121 -0
  158. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/adapters/__init__.py +1 -0
  159. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/adapters/aws_clouds.py +73 -0
  160. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/adapters/base.py +677 -0
  161. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/adapters/cn_clouds.py +123 -0
  162. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/adapters/local_sim.py +31 -0
  163. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/adapters/managed.py +317 -0
  164. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/adapters/transport.py +846 -0
  165. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/agent_bundle/README.md +46 -0
  166. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/agent_bundle/__init__.py +5 -0
  167. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/agent_bundle/agent.py +383 -0
  168. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/agent_bundle/lc_agent.py +339 -0
  169. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/aliyun.py +2118 -0
  170. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/artifact.py +237 -0
  171. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/aws/__init__.py +0 -0
  172. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/aws/campaign_probe.py +90 -0
  173. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/aws/carrier.py +251 -0
  174. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/aws/provider.py +42 -0
  175. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/aws/reaper.py +123 -0
  176. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/aws/transport.py +1231 -0
  177. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/campaign_probe_base.py +131 -0
  178. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/carrier_base.py +129 -0
  179. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/controller_reaper.py +63 -0
  180. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/data/prices.json +34 -0
  181. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/data/resources.json +49 -0
  182. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/dataplane_dispatch.py +326 -0
  183. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/dev_wheel.py +169 -0
  184. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/ecs_carrier.py +331 -0
  185. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/mock_tools.py +291 -0
  186. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/openinference.py +131 -0
  187. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/permissions.py +38 -0
  188. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/__init__.py +1 -0
  189. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/agent_loop.py +228 -0
  190. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/campaign_channel.py +129 -0
  191. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/client.py +72 -0
  192. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/dataplane.py +1410 -0
  193. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/invoke.py +315 -0
  194. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/jobs.py +137 -0
  195. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/oss_channel.py +295 -0
  196. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/oss_client.py +205 -0
  197. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/oss_dispatch_client.py +101 -0
  198. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/oss_sink.py +71 -0
  199. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/oss_sync.py +72 -0
  200. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/runner.py +74 -0
  201. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/s3_client.py +136 -0
  202. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/probe/server.py +134 -0
  203. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/protocol.py +103 -0
  204. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/reaper.py +244 -0
  205. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/session_memory.py +53 -0
  206. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/__init__.py +1 -0
  207. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t0_1_provision_latency.py +166 -0
  208. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t0_2_teardown_cleanliness.py +111 -0
  209. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_10_retry_storm.py +123 -0
  210. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_11_concurrent_writes.py +85 -0
  211. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_12_head_of_line.py +110 -0
  212. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_13_startup_curve.py +137 -0
  213. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_14_idle_timeout_honor.py +155 -0
  214. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_1_startup_latency.py +133 -0
  215. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_2_state_persistence.py +82 -0
  216. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_3_fault_recovery.py +117 -0
  217. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_4_sustained_load.py +162 -0
  218. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_5_warm_retention.py +139 -0
  219. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_6_soak.py +101 -0
  220. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_7_rate_limit.py +119 -0
  221. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_8_cancellation.py +104 -0
  222. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t1_9_ttft.py +118 -0
  223. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t2_1_tool_registration.py +90 -0
  224. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t4_1_trace_completeness.py +148 -0
  225. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t4_2_otel_export.py +132 -0
  226. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t4_3_signals.py +124 -0
  227. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t4_4_span_propagation.py +106 -0
  228. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t4_5_export_latency.py +98 -0
  229. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t5_1_cost_attribution.py +122 -0
  230. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t5_2_elasticity.py +122 -0
  231. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t5_3_idle_cost.py +113 -0
  232. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t5_4_concurrency_ceiling.py +65 -0
  233. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/tasks/t6_1_isolation.py +153 -0
  234. clousight_bench-0.2.0/src/clousight_bench/domains/agent_runtime/transport_base.py +61 -0
  235. clousight_bench-0.2.0/src/clousight_bench/domains/bigdata_emr/__init__.py +32 -0
  236. clousight_bench-0.2.0/src/clousight_bench/domains/bigdata_emr/adapters/__init__.py +1 -0
  237. clousight_bench-0.2.0/src/clousight_bench/domains/bigdata_emr/adapters/aws_emr.py +57 -0
  238. clousight_bench-0.2.0/src/clousight_bench/domains/bigdata_emr/adapters/base.py +32 -0
  239. clousight_bench-0.2.0/src/clousight_bench/domains/bigdata_emr/adapters/local_process.py +32 -0
  240. clousight_bench-0.2.0/src/clousight_bench/domains/bigdata_emr/tasks/__init__.py +1 -0
  241. clousight_bench-0.2.0/src/clousight_bench/domains/bigdata_emr/tasks/j1_1_wordcount.py +116 -0
  242. clousight_bench-0.2.0/src/clousight_bench/enrichers/__init__.py +6 -0
  243. clousight_bench-0.2.0/src/clousight_bench/enrichers/data/pricing.seed.json +94 -0
  244. clousight_bench-0.2.0/src/clousight_bench/enrichers/pricing.py +156 -0
  245. clousight_bench-0.2.0/src/clousight_bench/py.typed +0 -0
  246. clousight_bench-0.2.0/src/clousight_bench/resources/__init__.py +1 -0
  247. clousight_bench-0.2.0/src/clousight_bench/resources/brand/logo.png +0 -0
  248. clousight_bench-0.2.0/src/clousight_bench/resources/brand/providers/alibaba.svg +3 -0
  249. clousight_bench-0.2.0/src/clousight_bench/resources/brand/providers/aws.svg +6 -0
  250. clousight_bench-0.2.0/src/clousight_bench/resources/brand/providers/azure.svg +23 -0
  251. clousight_bench-0.2.0/src/clousight_bench/resources/brand/providers/gcp.svg +6 -0
  252. clousight_bench-0.2.0/src/clousight_bench/resources/brand/providers/huawei.svg +3 -0
  253. clousight_bench-0.2.0/src/clousight_bench/resources/brand/providers/ibm.svg +39 -0
  254. clousight_bench-0.2.0/src/clousight_bench/resources/brand/providers/oracle.svg +3 -0
  255. clousight_bench-0.2.0/src/clousight_bench/resources/brand/providers/ovh.svg +3 -0
  256. clousight_bench-0.2.0/src/clousight_bench/resources/brand/providers/tencent.svg +5 -0
  257. clousight_bench-0.2.0/src/clousight_bench/resources/schemas/result-record-0.2.schema.json +23 -0
  258. clousight_bench-0.2.0/src/clousight_bench/resources/schemas/runspec.schema.json +13 -0
  259. clousight_bench-0.2.0/src/clousight_bench/resources/schemas/workload-manifest.schema.json +14 -0
  260. clousight_bench-0.2.0/src/clousight_bench/resources/workloads/__init__.py +1 -0
  261. clousight_bench-0.2.0/src/clousight_bench/resources/workloads/gsm8k-stats/manifest.yaml +23 -0
  262. clousight_bench-0.2.0/src/clousight_bench/resources/workloads/gsm8k-stats/run.py +72 -0
  263. clousight_bench-0.2.0/src/clousight_bench/resources/workloads/synthetic-sampler/manifest.yaml +6 -0
  264. clousight_bench-0.2.0/src/clousight_bench/resources/workloads/synthetic-sampler/run.py +35 -0
  265. clousight_bench-0.2.0/src/clousight_bench/resources/workloads/wordcount-py/manifest.yaml +17 -0
  266. clousight_bench-0.2.0/src/clousight_bench/resources/workloads/wordcount-py/run.py +67 -0
  267. clousight_bench-0.2.0/src/clousight_bench/resources/workloads/ycsb-wrapper/manifest.yaml +24 -0
  268. clousight_bench-0.2.0/src/clousight_bench/resources/workloads/ycsb-wrapper/run.sh +76 -0
  269. clousight_bench-0.2.0/tests/__init__.py +0 -0
  270. clousight_bench-0.2.0/tests/conftest.py +138 -0
  271. clousight_bench-0.2.0/tests/test_agent_artifact.py +43 -0
  272. clousight_bench-0.2.0/tests/test_agent_build.py +12 -0
  273. clousight_bench-0.2.0/tests/test_agent_correlation_passthrough.py +29 -0
  274. clousight_bench-0.2.0/tests/test_agent_openai.py +33 -0
  275. clousight_bench-0.2.0/tests/test_agent_retry_policy.py +122 -0
  276. clousight_bench-0.2.0/tests/test_agent_runtime_cost_isolation.py +80 -0
  277. clousight_bench-0.2.0/tests/test_agent_runtime_dimensions.py +65 -0
  278. clousight_bench-0.2.0/tests/test_agent_runtime_dimensions_t5.py +118 -0
  279. clousight_bench-0.2.0/tests/test_agent_runtime_local.py +59 -0
  280. clousight_bench-0.2.0/tests/test_agent_runtime_observability.py +90 -0
  281. clousight_bench-0.2.0/tests/test_agent_runtime_provisioning.py +112 -0
  282. clousight_bench-0.2.0/tests/test_agent_runtime_reliability.py +94 -0
  283. clousight_bench-0.2.0/tests/test_agent_stub_retry.py +106 -0
  284. clousight_bench-0.2.0/tests/test_agent_vendor_cache.py +54 -0
  285. clousight_bench-0.2.0/tests/test_aliyun_campaign_default_carrier.py +121 -0
  286. clousight_bench-0.2.0/tests/test_aliyun_campaign_hook.py +39 -0
  287. clousight_bench-0.2.0/tests/test_aliyun_provider.py +83 -0
  288. clousight_bench-0.2.0/tests/test_aliyun_remote_probe_client.py +121 -0
  289. clousight_bench-0.2.0/tests/test_aliyun_run_data_plane_probe.py +76 -0
  290. clousight_bench-0.2.0/tests/test_analytics_export.py +27 -0
  291. clousight_bench-0.2.0/tests/test_analytics_flatten.py +143 -0
  292. clousight_bench-0.2.0/tests/test_analytics_iter.py +44 -0
  293. clousight_bench-0.2.0/tests/test_analytics_query.py +28 -0
  294. clousight_bench-0.2.0/tests/test_artifact.py +153 -0
  295. clousight_bench-0.2.0/tests/test_assets.py +135 -0
  296. clousight_bench-0.2.0/tests/test_assets_sandbox.py +31 -0
  297. clousight_bench-0.2.0/tests/test_aws_campaign_probe.py +224 -0
  298. clousight_bench-0.2.0/tests/test_aws_reaper.py +198 -0
  299. clousight_bench-0.2.0/tests/test_aws_transport.py +568 -0
  300. clousight_bench-0.2.0/tests/test_bigdata_workload.py +36 -0
  301. clousight_bench-0.2.0/tests/test_billing.py +52 -0
  302. clousight_bench-0.2.0/tests/test_brand_assets.py +9 -0
  303. clousight_bench-0.2.0/tests/test_campaign.py +107 -0
  304. clousight_bench-0.2.0/tests/test_campaign_carrier_lifecycle.py +281 -0
  305. clousight_bench-0.2.0/tests/test_campaign_channel.py +87 -0
  306. clousight_bench-0.2.0/tests/test_campaign_progress_fields.py +88 -0
  307. clousight_bench-0.2.0/tests/test_campaign_spec.py +49 -0
  308. clousight_bench-0.2.0/tests/test_canonical.py +46 -0
  309. clousight_bench-0.2.0/tests/test_cli_conformance.py +19 -0
  310. clousight_bench-0.2.0/tests/test_cli_dump_bundle.py +15 -0
  311. clousight_bench-0.2.0/tests/test_cli_failures.py +166 -0
  312. clousight_bench-0.2.0/tests/test_cli_init_doctor.py +67 -0
  313. clousight_bench-0.2.0/tests/test_cli_progress.py +75 -0
  314. clousight_bench-0.2.0/tests/test_cli_query.py +35 -0
  315. clousight_bench-0.2.0/tests/test_cli_report_html.py +39 -0
  316. clousight_bench-0.2.0/tests/test_cli_runplan.py +78 -0
  317. clousight_bench-0.2.0/tests/test_cli_surface.py +227 -0
  318. clousight_bench-0.2.0/tests/test_client_policy.py +67 -0
  319. clousight_bench-0.2.0/tests/test_cloud_scrub.py +55 -0
  320. clousight_bench-0.2.0/tests/test_cn_cloud_permissions.py +39 -0
  321. clousight_bench-0.2.0/tests/test_conformance.py +65 -0
  322. clousight_bench-0.2.0/tests/test_controller.py +71 -0
  323. clousight_bench-0.2.0/tests/test_controller_main.py +105 -0
  324. clousight_bench-0.2.0/tests/test_controller_reaper.py +50 -0
  325. clousight_bench-0.2.0/tests/test_controller_user_data.py +28 -0
  326. clousight_bench-0.2.0/tests/test_cost_budget.py +71 -0
  327. clousight_bench-0.2.0/tests/test_cost_notice.py +29 -0
  328. clousight_bench-0.2.0/tests/test_credentials.py +102 -0
  329. clousight_bench-0.2.0/tests/test_dataplane_dispatch.py +221 -0
  330. clousight_bench-0.2.0/tests/test_dataplane_invoke.py +76 -0
  331. clousight_bench-0.2.0/tests/test_dataplane_state_tools.py +40 -0
  332. clousight_bench-0.2.0/tests/test_dev_wheel.py +149 -0
  333. clousight_bench-0.2.0/tests/test_doc_references.py +21 -0
  334. clousight_bench-0.2.0/tests/test_docs_inventory.py +57 -0
  335. clousight_bench-0.2.0/tests/test_ec2_carrier.py +517 -0
  336. clousight_bench-0.2.0/tests/test_ecs_carrier.py +465 -0
  337. clousight_bench-0.2.0/tests/test_enricher.py +37 -0
  338. clousight_bench-0.2.0/tests/test_example_asset_manifests.py +42 -0
  339. clousight_bench-0.2.0/tests/test_execution_e2e.py +7 -0
  340. clousight_bench-0.2.0/tests/test_execution_field.py +35 -0
  341. clousight_bench-0.2.0/tests/test_execution_mode.py +16 -0
  342. clousight_bench-0.2.0/tests/test_extension_isolation.py +622 -0
  343. clousight_bench-0.2.0/tests/test_fingerprints.py +206 -0
  344. clousight_bench-0.2.0/tests/test_gitsync_identity.py +112 -0
  345. clousight_bench-0.2.0/tests/test_gsm8k_e2e.py +43 -0
  346. clousight_bench-0.2.0/tests/test_interrupt.py +61 -0
  347. clousight_bench-0.2.0/tests/test_lifecycle.py +211 -0
  348. clousight_bench-0.2.0/tests/test_lifecycle_failures.py +574 -0
  349. clousight_bench-0.2.0/tests/test_live_guard.py +78 -0
  350. clousight_bench-0.2.0/tests/test_manifest_schema.py +23 -0
  351. clousight_bench-0.2.0/tests/test_migrate.py +299 -0
  352. clousight_bench-0.2.0/tests/test_mock_tools_auth.py +66 -0
  353. clousight_bench-0.2.0/tests/test_mock_tools_correlation.py +54 -0
  354. clousight_bench-0.2.0/tests/test_mock_tools_fc_in_sync.py +17 -0
  355. clousight_bench-0.2.0/tests/test_mode_wiring.py +20 -0
  356. clousight_bench-0.2.0/tests/test_observation.py +116 -0
  357. clousight_bench-0.2.0/tests/test_orchestrator_series_bridge.py +59 -0
  358. clousight_bench-0.2.0/tests/test_oss_dispatch_client.py +241 -0
  359. clousight_bench-0.2.0/tests/test_packaged_resources.py +28 -0
  360. clousight_bench-0.2.0/tests/test_persist_schema_gate.py +65 -0
  361. clousight_bench-0.2.0/tests/test_persistence.py +101 -0
  362. clousight_bench-0.2.0/tests/test_plugin_registry.py +144 -0
  363. clousight_bench-0.2.0/tests/test_preflight.py +192 -0
  364. clousight_bench-0.2.0/tests/test_pricing_enricher.py +164 -0
  365. clousight_bench-0.2.0/tests/test_probe_agent_loop.py +389 -0
  366. clousight_bench-0.2.0/tests/test_probe_auth.py +65 -0
  367. clousight_bench-0.2.0/tests/test_probe_cancellation.py +105 -0
  368. clousight_bench-0.2.0/tests/test_probe_client_e2e.py +70 -0
  369. clousight_bench-0.2.0/tests/test_probe_control_plane_auth.py +135 -0
  370. clousight_bench-0.2.0/tests/test_probe_dataplane_ttft.py +154 -0
  371. clousight_bench-0.2.0/tests/test_probe_fault_and_storm.py +282 -0
  372. clousight_bench-0.2.0/tests/test_probe_hol.py +198 -0
  373. clousight_bench-0.2.0/tests/test_probe_idle_timeout_honor.py +105 -0
  374. clousight_bench-0.2.0/tests/test_probe_invoke.py +97 -0
  375. clousight_bench-0.2.0/tests/test_probe_jobs.py +56 -0
  376. clousight_bench-0.2.0/tests/test_probe_load_soak.py +108 -0
  377. clousight_bench-0.2.0/tests/test_probe_oss_artifacts.py +21 -0
  378. clousight_bench-0.2.0/tests/test_probe_oss_channel.py +322 -0
  379. clousight_bench-0.2.0/tests/test_probe_oss_client.py +96 -0
  380. clousight_bench-0.2.0/tests/test_probe_oss_sink.py +95 -0
  381. clousight_bench-0.2.0/tests/test_probe_oss_sync.py +69 -0
  382. clousight_bench-0.2.0/tests/test_probe_rate_and_ceiling.py +123 -0
  383. clousight_bench-0.2.0/tests/test_probe_registry.py +9 -0
  384. clousight_bench-0.2.0/tests/test_probe_runner.py +54 -0
  385. clousight_bench-0.2.0/tests/test_probe_scaling.py +99 -0
  386. clousight_bench-0.2.0/tests/test_probe_server.py +77 -0
  387. clousight_bench-0.2.0/tests/test_probe_sink_wired.py +93 -0
  388. clousight_bench-0.2.0/tests/test_probe_ssrf_guard.py +44 -0
  389. clousight_bench-0.2.0/tests/test_probe_startup_curve.py +111 -0
  390. clousight_bench-0.2.0/tests/test_probe_warm_retention.py +143 -0
  391. clousight_bench-0.2.0/tests/test_prod_e2e_inmemory.py +74 -0
  392. clousight_bench-0.2.0/tests/test_prod_readback.py +51 -0
  393. clousight_bench-0.2.0/tests/test_prod_submit.py +78 -0
  394. clousight_bench-0.2.0/tests/test_protocol.py +35 -0
  395. clousight_bench-0.2.0/tests/test_reaper.py +111 -0
  396. clousight_bench-0.2.0/tests/test_reaper_live_seams.py +85 -0
  397. clousight_bench-0.2.0/tests/test_reaper_safety_window.py +45 -0
  398. clousight_bench-0.2.0/tests/test_record.py +167 -0
  399. clousight_bench-0.2.0/tests/test_redaction.py +105 -0
  400. clousight_bench-0.2.0/tests/test_registry_conflicts.py +64 -0
  401. clousight_bench-0.2.0/tests/test_registry_versioning.py +49 -0
  402. clousight_bench-0.2.0/tests/test_reliability_fault_recovery.py +470 -0
  403. clousight_bench-0.2.0/tests/test_reliability_hol.py +386 -0
  404. clousight_bench-0.2.0/tests/test_reliability_retry_storm.py +432 -0
  405. clousight_bench-0.2.0/tests/test_report.py +136 -0
  406. clousight_bench-0.2.0/tests/test_report_aggregates.py +233 -0
  407. clousight_bench-0.2.0/tests/test_report_brand.py +16 -0
  408. clousight_bench-0.2.0/tests/test_report_bundle.py +109 -0
  409. clousight_bench-0.2.0/tests/test_report_echarts.py +62 -0
  410. clousight_bench-0.2.0/tests/test_report_html.py +72 -0
  411. clousight_bench-0.2.0/tests/test_report_i18n.py +21 -0
  412. clousight_bench-0.2.0/tests/test_report_profiles.py +112 -0
  413. clousight_bench-0.2.0/tests/test_report_robustness.py +246 -0
  414. clousight_bench-0.2.0/tests/test_report_stats.py +126 -0
  415. clousight_bench-0.2.0/tests/test_report_svg.py +39 -0
  416. clousight_bench-0.2.0/tests/test_resource_ledger.py +73 -0
  417. clousight_bench-0.2.0/tests/test_resource_sweep.py +89 -0
  418. clousight_bench-0.2.0/tests/test_resume.py +52 -0
  419. clousight_bench-0.2.0/tests/test_rollup.py +70 -0
  420. clousight_bench-0.2.0/tests/test_run_id_propagation.py +29 -0
  421. clousight_bench-0.2.0/tests/test_runplan.py +141 -0
  422. clousight_bench-0.2.0/tests/test_s3_client.py +292 -0
  423. clousight_bench-0.2.0/tests/test_sampling.py +22 -0
  424. clousight_bench-0.2.0/tests/test_sandbox.py +57 -0
  425. clousight_bench-0.2.0/tests/test_sandbox_limits.py +41 -0
  426. clousight_bench-0.2.0/tests/test_schema.py +29 -0
  427. clousight_bench-0.2.0/tests/test_schema_validate.py +54 -0
  428. clousight_bench-0.2.0/tests/test_stage_timings.py +36 -0
  429. clousight_bench-0.2.0/tests/test_statistics.py +116 -0
  430. clousight_bench-0.2.0/tests/test_store.py +180 -0
  431. clousight_bench-0.2.0/tests/test_store_failures.py +406 -0
  432. clousight_bench-0.2.0/tests/test_t1_13_startup_curve.py +74 -0
  433. clousight_bench-0.2.0/tests/test_t1_14_idle_timeout_honor.py +92 -0
  434. clousight_bench-0.2.0/tests/test_t5_1_usage_only.py +23 -0
  435. clousight_bench-0.2.0/tests/test_task_contract.py +109 -0
  436. clousight_bench-0.2.0/tests/test_task_contract_agent_runtime.py +258 -0
  437. clousight_bench-0.2.0/tests/test_task_contract_bigdata.py +63 -0
  438. clousight_bench-0.2.0/tests/test_teardown_reconcile.py +92 -0
  439. clousight_bench-0.2.0/tests/test_terraform_controller.py +29 -0
  440. clousight_bench-0.2.0/tests/test_timeout.py +48 -0
  441. clousight_bench-0.2.0/tests/test_trace_cli.py +52 -0
  442. clousight_bench-0.2.0/tests/test_tracing.py +93 -0
  443. clousight_bench-0.2.0/tests/test_usage.py +29 -0
  444. clousight_bench-0.2.0/tests/test_validation.py +105 -0
  445. clousight_bench-0.2.0/tests/test_verify_cmd.py +107 -0
  446. clousight_bench-0.2.0/tests/test_versioning.py +41 -0
  447. clousight_bench-0.2.0/tests/test_watchdog.py +45 -0
  448. clousight_bench-0.2.0/tests/test_workload_assets.py +67 -0
  449. clousight_bench-0.2.0/tests/test_workload_limits_integration.py +43 -0
  450. clousight_bench-0.2.0/tests/test_workload_protocol.py +49 -0
  451. clousight_bench-0.2.0/tests/test_workload_sandbox.py +51 -0
  452. clousight_bench-0.2.0/uv.lock +1526 -0
  453. clousight_bench-0.2.0/workloads/README.md +54 -0
@@ -0,0 +1,37 @@
1
+ # Exclude large/irrelevant paths from the Docker build context.
2
+ # The cb-probe image needs: pyproject.toml, README.md, src/
3
+ # Everything else can be excluded to keep the context small.
4
+
5
+ .git
6
+ .venv
7
+ venv
8
+ __pycache__
9
+ *.pyc
10
+ *.pyo
11
+ .pytest_cache
12
+ .mypy_cache
13
+ .ruff_cache
14
+ .coverage
15
+ htmlcov/
16
+
17
+ # Benchmark results and run artifacts
18
+ results/
19
+ _vendor_cache/
20
+
21
+ # Tests (not needed for pip install)
22
+ tests/
23
+
24
+ # Superpowers / dev tooling
25
+ .superpowers/
26
+
27
+ # Deploy infra (not needed inside the image)
28
+ deploy/
29
+
30
+ # Docs
31
+ docs/
32
+ site/
33
+
34
+ # IDE / OS
35
+ .idea/
36
+ .vscode/
37
+ *.DS_Store
@@ -0,0 +1,16 @@
1
+ # Code owners for Clousight Bench.
2
+ # These owners are requested for review on every pull request that touches
3
+ # matching paths. See https://docs.github.com/articles/about-code-owners
4
+
5
+ # Default owner for everything in the repo.
6
+ * @clousight-dev
7
+
8
+ # Result schema, plugin API and lifecycle are the load-bearing contracts —
9
+ # changes here ripple into every plugin and into clousight-bench-pro.
10
+ /src/clousight_bench/core/schema.py @clousight-dev
11
+ /src/clousight_bench/core/plugin.py @clousight-dev
12
+ /src/clousight_bench/core/orchestrator.py @clousight-dev
13
+
14
+ # Packaging, CI and community health.
15
+ /pyproject.toml @clousight-dev
16
+ /.github/ @clousight-dev
@@ -0,0 +1,54 @@
1
+ name: Bug report
2
+ description: Report something that is broken or produces a wrong / non-reproducible result.
3
+ labels: ["bug"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for the report. For **security** issues, do not use this form —
9
+ see [SECURITY.md](https://github.com/clousight/clousight-bench/blob/main/SECURITY.md).
10
+ - type: textarea
11
+ id: what-happened
12
+ attributes:
13
+ label: What happened?
14
+ description: What did you expect, and what happened instead?
15
+ validations:
16
+ required: true
17
+ - type: textarea
18
+ id: repro
19
+ attributes:
20
+ label: Steps to reproduce
21
+ description: The exact `csbench` command(s) and any config. Redact secrets.
22
+ placeholder: |
23
+ csbench run --domain agent-runtime --task T1.3 --platform local-sim
24
+ render: shell
25
+ validations:
26
+ required: true
27
+ - type: input
28
+ id: version
29
+ attributes:
30
+ label: Version
31
+ description: Output of `csbench --version` (or the installed `clousight-bench` version).
32
+ validations:
33
+ required: true
34
+ - type: input
35
+ id: python
36
+ attributes:
37
+ label: Python version
38
+ placeholder: "3.12"
39
+ validations:
40
+ required: true
41
+ - type: input
42
+ id: platform-adapter
43
+ attributes:
44
+ label: Adapter / platform
45
+ description: e.g. local-sim, local-process, aliyun-agentrun (mock)
46
+ - type: textarea
47
+ id: result-record
48
+ attributes:
49
+ label: Result record / logs
50
+ description: >
51
+ If a run produced a wrong number, paste the relevant `ResultRecord`
52
+ JSON — especially `config_hash`, `runner_version`, `evidence_layer`.
53
+ Redact any secrets.
54
+ render: json
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Security vulnerability
4
+ url: https://github.com/clousight/clousight-bench/security/advisories/new
5
+ about: Do NOT open a public issue for security problems. Report privately via GitHub Security Advisories.
6
+ - name: Question / discussion
7
+ url: https://github.com/clousight/clousight-bench/discussions
8
+ about: Ask usage questions or discuss ideas here rather than opening an issue.
@@ -0,0 +1,40 @@
1
+ name: Feature request
2
+ description: Propose a new platform, dimension, domain pack, or capability.
3
+ labels: ["enhancement"]
4
+ body:
5
+ - type: dropdown
6
+ id: kind
7
+ attributes:
8
+ label: What kind of addition is this?
9
+ options:
10
+ - New platform (ProviderAdapter)
11
+ - New dimension (Task)
12
+ - New domain pack
13
+ - New workload / load generator
14
+ - Core capability
15
+ - Other
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: problem
20
+ attributes:
21
+ label: What problem does it solve?
22
+ description: What can't you measure or reproduce today?
23
+ validations:
24
+ required: true
25
+ - type: textarea
26
+ id: proposal
27
+ attributes:
28
+ label: Proposed approach
29
+ description: >
30
+ If it is a dimension, what does it measure and what evidence layer
31
+ (A/B/C/D) would it carry? If a platform, which cloud/service and what is
32
+ its own runtime behavior you want surfaced?
33
+ - type: checkboxes
34
+ id: principles
35
+ attributes:
36
+ label: Fits the project principles
37
+ options:
38
+ - label: Reports per-dimension (no blended score) and carries an evidence layer
39
+ - label: Does not require secrets in configs/results
40
+ - label: I'm willing to help implement / test it
@@ -0,0 +1,26 @@
1
+ <!-- Thanks for contributing to Clousight Bench! -->
2
+
3
+ ## What & why
4
+
5
+ <!-- What does this change do, and why? Link any related issue: Closes #123 -->
6
+
7
+ ## Type of change
8
+
9
+ - [ ] Bug fix
10
+ - [ ] New platform (one `ProviderAdapter` + one `configs/*.example.yaml`)
11
+ - [ ] New dimension (one `Task` with `config()`, scoring, declared `evidence_layer`)
12
+ - [ ] New domain pack / workload
13
+ - [ ] Docs / packaging / CI
14
+ - [ ] Other:
15
+
16
+ ## Checklist
17
+
18
+ - [ ] Commits are signed off (`git commit -s`) per the [DCO](https://developercertificate.org/)
19
+ - [ ] `ruff check src tests` passes
20
+ - [ ] `mypy src` passes
21
+ - [ ] `pytest -q` passes
22
+ - [ ] Ran the local no-cloud smoke (`csbench run --domain agent-runtime --task T1.3 --platform local-sim`)
23
+ - [ ] If packaging changed: built the wheel and ran the smoke **outside** the checkout
24
+ - [ ] New adapters declare a status (`reference` / `experimental` / `wired` / `skeleton`); no skeleton is presented as runnable
25
+ - [ ] Every result still carries `config_hash` + `runner_version` + `evidence_layer`; no blended scores; no secrets in configs/results
26
+ - [ ] Changing task/scoring for a **shipped** dimension: bumped the version and added a `CHANGELOG.md` entry
@@ -0,0 +1,25 @@
1
+ version: 2
2
+ updates:
3
+ # Python dependencies declared in pyproject.toml.
4
+ - package-ecosystem: "pip"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ groups:
9
+ python-deps:
10
+ patterns: ["*"]
11
+ labels: ["dependencies"]
12
+ commit-message:
13
+ prefix: "deps"
14
+
15
+ # GitHub Actions used by the CI / release workflows.
16
+ - package-ecosystem: "github-actions"
17
+ directory: "/"
18
+ schedule:
19
+ interval: "weekly"
20
+ groups:
21
+ actions:
22
+ patterns: ["*"]
23
+ labels: ["dependencies", "ci"]
24
+ commit-message:
25
+ prefix: "ci"
@@ -0,0 +1,216 @@
1
+ name: ci
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ # Cancel superseded runs on the same ref (e.g. a new push to an open PR) so we
9
+ # don't burn runners finishing a run whose result no longer matters.
10
+ concurrency:
11
+ group: ci-${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ test:
16
+ runs-on: ubuntu-latest
17
+ strategy:
18
+ # Don't cancel the whole matrix when one cell fails — a single flaky cell
19
+ # shouldn't hide the other versions' results or block the PR by itself.
20
+ # (The 4 cells run in parallel, so this costs no extra wall-clock.)
21
+ fail-fast: false
22
+ matrix:
23
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
24
+ steps:
25
+ - uses: actions/checkout@v7
26
+
27
+ - name: Set up Python ${{ matrix.python-version }}
28
+ uses: actions/setup-python@v7
29
+ with:
30
+ python-version: ${{ matrix.python-version }}
31
+ cache: pip
32
+ cache-dependency-path: pyproject.toml
33
+
34
+ - name: Install
35
+ run: |
36
+ python -m pip install --upgrade pip
37
+ pip install -e ".[dev,store,validate,probe,agent,aliyun]"
38
+
39
+ - name: Lint (ruff)
40
+ run: ruff check src tests
41
+
42
+ - name: Format check (ruff)
43
+ run: ruff format --check src tests
44
+
45
+ - name: Type-check (mypy)
46
+ run: mypy
47
+
48
+ - name: Docs inventory up to date
49
+ run: python scripts/gen_docs.py --check
50
+
51
+ - name: Test (pytest)
52
+ # --durations surfaces the slowest tests in the log so CI-time regressions
53
+ # (e.g. a test doing real network I/O with long timeouts) are easy to spot.
54
+ run: pytest -q --durations=15 --cov --cov-report=term-missing --cov-report=xml
55
+
56
+ - name: Upload coverage to Codecov
57
+ if: matrix.python-version == '3.12'
58
+ continue-on-error: true # coverage upload is best-effort; a Codecov token/outage must never gate merges
59
+ uses: codecov/codecov-action@v7
60
+ with:
61
+ files: coverage.xml
62
+ fail_ci_if_error: false
63
+
64
+ - name: Conformance smoke (built-in domains)
65
+ run: |
66
+ csbench conformance --domain agent-runtime --platform local-sim
67
+ csbench conformance --domain bigdata-emr --platform local-process
68
+
69
+ - name: Local baseline smoke (no cloud account)
70
+ run: |
71
+ csbench list --verbose
72
+ for task in T1.1 T1.2 T1.3 T2.1 T4.1 T4.2 T5.1 T5.2; do
73
+ csbench run --domain agent-runtime --task "$task" --platform local-sim
74
+ done
75
+ csbench run --domain agent-runtime --task T1.3 --platform local-sim \
76
+ --config configs/local-sim.fail-fast.yaml
77
+ csbench run --domain bigdata-emr --task J1.1 --platform local-process
78
+ csbench report
79
+
80
+ - name: Assert every emitted record is schema 0.2
81
+ run: |
82
+ python - <<'PY'
83
+ import json, pathlib
84
+ paths = [p for p in pathlib.Path("results").rglob("*.json")
85
+ if p.name not in {"comparison.json", "migration-manifest.json"}]
86
+ assert paths, "the smoke wrote no records"
87
+ for path in paths:
88
+ data = json.loads(path.read_text(encoding="utf-8"))
89
+ assert data["schema_version"] == "0.2", (path, data["schema_version"])
90
+ assert data["status"] in {"completed", "unsupported"}, (path, data["status"])
91
+ assert data["fingerprints"]["record_digest"].startswith("sha256:"), path
92
+ for gone in ("ok", "metrics", "evidence_layer", "config_hash"):
93
+ assert gone not in data, (path, gone)
94
+ print(f"{len(paths)} records verified at schema 0.2")
95
+ PY
96
+
97
+ - name: Migration round-trip from schema 1.0
98
+ run: |
99
+ rm -rf /tmp/legacy /tmp/migrated /tmp/migrated-again
100
+ mkdir -p /tmp/legacy/agent-runtime/local-sim
101
+ cat > /tmp/legacy/agent-runtime/local-sim/T1.3-run-legacy.json <<'JSON'
102
+ {"domain":"agent-runtime","task_id":"T1.3","platform":"local-sim",
103
+ "run_id":"run-legacy","started_at":"2026-01-01T00:00:00Z",
104
+ "finished_at":"2026-01-01T00:00:05Z","config_hash":"sha256:dead",
105
+ "evidence_layer":"C","metrics":{"recovery_mode":"fail-fast"},
106
+ "ok":true,"runner_version":"1.0.0","raw":{},"notes":"legacy",
107
+ "schema_version":"1.0","series":{},"artifacts":[],"error":null}
108
+ JSON
109
+ csbench migrate-results /tmp/legacy --output /tmp/migrated
110
+ csbench migrate-results /tmp/legacy --output /tmp/migrated-again
111
+ diff -r /tmp/migrated /tmp/migrated-again
112
+ csbench report --results /tmp/migrated
113
+ python - <<'PY'
114
+ import json, pathlib
115
+ data = json.loads(pathlib.Path(
116
+ "/tmp/migrated/agent-runtime/local-sim/T1.3-run-legacy.json"
117
+ ).read_text(encoding="utf-8"))
118
+ assert data["schema_version"] == "0.2"
119
+ assert data["fingerprints"]["benchmark"] == "unknown"
120
+ assert data["extensions"]["legacy"]["config_hash"] == "sha256:dead"
121
+ print("migration is deterministic and idempotent")
122
+ PY
123
+
124
+ - name: Run plan aggregates repeats and drops warmups
125
+ run: |
126
+ rm -rf /tmp/plan-results
127
+ csbench run --domain agent-runtime --task T1.3 --platform local-sim \
128
+ --results /tmp/plan-results --repeat 3 --warmup 1
129
+ python - <<'PY'
130
+ import json, pathlib
131
+ aggs = list(pathlib.Path("/tmp/plan-results/aggregates").rglob("*.json"))
132
+ assert len(aggs) == 1, aggs
133
+ data = json.loads(aggs[0].read_text(encoding="utf-8"))
134
+ assert data["kind"] == "run_plan_aggregate"
135
+ assert len(data["runs"]["measured"]) == 3, data["runs"]
136
+ assert len(data["runs"]["warmup"]) == 1, data["runs"]
137
+ assert data["measurements"]["observed_attempts"]["n"] == 3
138
+ assert data["digest"].startswith("sha256:")
139
+ # Four run records + one aggregate; warmups are excluded from the stats.
140
+ recs = [p for p in pathlib.Path("/tmp/plan-results").rglob("*.json")
141
+ if "aggregates" not in p.parts]
142
+ assert len(recs) == 4, recs
143
+ print("run plan: 4 records, 3 measured pooled, 1 warmup dropped")
144
+ PY
145
+
146
+ no-validate:
147
+ # Prove the hand-written validation floor still rejects bad input when the
148
+ # optional [validate] extra (jsonschema) is absent, so the fallback can't rot.
149
+ runs-on: ubuntu-latest
150
+ steps:
151
+ - uses: actions/checkout@v7
152
+ - uses: actions/setup-python@v7
153
+ with:
154
+ python-version: "3.12"
155
+ cache: pip
156
+ cache-dependency-path: pyproject.toml
157
+ - name: Install without [validate]
158
+ run: |
159
+ python -m pip install --upgrade pip
160
+ pip install -e ".[dev,store]"
161
+ - name: Assert jsonschema is not installed
162
+ run: |
163
+ python - <<'PY'
164
+ import importlib.util
165
+ assert importlib.util.find_spec("jsonschema") is None, "jsonschema must be absent here"
166
+ print("jsonschema absent: exercising the hand-written fallback")
167
+ PY
168
+ - name: Test (pytest, fallback path)
169
+ run: pytest -q
170
+
171
+ wheel-smoke:
172
+ runs-on: ubuntu-latest
173
+ steps:
174
+ - uses: actions/checkout@v7
175
+ - uses: actions/setup-python@v7
176
+ with:
177
+ python-version: "3.12"
178
+ cache: pip
179
+ cache-dependency-path: pyproject.toml
180
+ - name: Build wheel
181
+ run: |
182
+ python -m pip install --upgrade pip
183
+ python -m pip wheel . --wheel-dir dist --no-deps
184
+ - name: Install wheel into isolated environment
185
+ run: |
186
+ python -m venv /tmp/csbench-wheel
187
+ /tmp/csbench-wheel/bin/pip install dist/*.whl
188
+ - name: Smoke installed wheel outside checkout
189
+ working-directory: /tmp
190
+ run: |
191
+ /tmp/csbench-wheel/bin/python -c "import importlib.metadata as m, importlib.resources as r, clousight_bench as cb; assert cb.__version__ == m.version('clousight-bench'), (cb.__version__, m.version('clousight-bench')); assert cb.RESULT_SCHEMA_VERSION == '0.2', cb.RESULT_SCHEMA_VERSION; root = r.files('clousight_bench.resources.workloads'); reqs = [('wordcount-py', 'run.py'), ('gsm8k-stats', 'run.py'), ('ycsb-wrapper', 'run.sh')]; missing = [n for n, e in reqs if not (root.joinpath(n, 'manifest.yaml').is_file() and root.joinpath(n, e).is_file())]; assert not missing, missing; assert r.files('clousight_bench').joinpath('py.typed').is_file(), 'py.typed marker missing from wheel'; schemas = r.files('clousight_bench.resources').joinpath('schemas'); need = ['runspec.schema.json', 'workload-manifest.schema.json', 'result-record-0.2.schema.json']; smissing = [s for s in need if not schemas.joinpath(s).is_file()]; assert not smissing, smissing; print('wheel version + workloads + py.typed + schemas + schema 0.2 verified')"
192
+ /tmp/csbench-wheel/bin/csbench list --verbose
193
+ /tmp/csbench-wheel/bin/csbench run \
194
+ --domain agent-runtime --task T1.3 --platform local-sim \
195
+ --results /tmp/csbench-wheel-results
196
+ /tmp/csbench-wheel/bin/csbench run \
197
+ --domain bigdata-emr --task J1.1 --platform local-process \
198
+ --results /tmp/csbench-wheel-results
199
+ /tmp/csbench-wheel/bin/csbench report \
200
+ --results /tmp/csbench-wheel-results
201
+
202
+ docs:
203
+ runs-on: ubuntu-latest
204
+ steps:
205
+ - uses: actions/checkout@v7
206
+ - uses: actions/setup-python@v7
207
+ with:
208
+ python-version: "3.12"
209
+ cache: pip
210
+ cache-dependency-path: pyproject.toml
211
+ - name: Install docs dependencies
212
+ run: |
213
+ python -m pip install --upgrade pip
214
+ pip install -e ".[docs]"
215
+ - name: Build docs
216
+ run: mkdocs build --strict
@@ -0,0 +1,31 @@
1
+ name: codeql
2
+
3
+ # Static security analysis (CodeQL) for the Python source. Runs on pushes/PRs to
4
+ # main and on a weekly schedule so newly-published queries catch older code.
5
+
6
+ on:
7
+ push:
8
+ branches: [main]
9
+ pull_request:
10
+ branches: [main]
11
+ schedule:
12
+ - cron: "27 3 * * 1" # Mondays 03:27 UTC
13
+
14
+ permissions:
15
+ contents: read
16
+ security-events: write
17
+
18
+ jobs:
19
+ analyze:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v7
23
+ - name: Initialize CodeQL
24
+ uses: github/codeql-action/init@v3
25
+ with:
26
+ languages: python
27
+ queries: security-and-quality
28
+ - name: Perform CodeQL analysis
29
+ uses: github/codeql-action/analyze@v3
30
+ with:
31
+ category: "/language:python"
@@ -0,0 +1,21 @@
1
+ name: dependency-review
2
+
3
+ # Flag known-vulnerable or license-incompatible dependencies introduced by a PR,
4
+ # before they land on main. Complements Dependabot (which updates existing deps).
5
+
6
+ on:
7
+ pull_request:
8
+ branches: [main]
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ review:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v7
18
+ - name: Dependency review
19
+ uses: actions/dependency-review-action@v4
20
+ with:
21
+ fail-on-severity: high
@@ -0,0 +1,52 @@
1
+ name: docs-deploy
2
+
3
+ # Publish the MkDocs site to GitHub Pages on a version tag (the same trigger as
4
+ # the PyPI release), so the docs a release ships match the published package.
5
+ # CI already builds the docs with --strict on every PR (see ci.yml); this only
6
+ # deploys. One-time setup: repo Settings → Pages → Source = "GitHub Actions".
7
+
8
+ on:
9
+ push:
10
+ tags:
11
+ - "v*"
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: read
16
+ pages: write
17
+ id-token: write
18
+
19
+ # Only one concurrent deploy; don't cancel an in-progress one mid-publish.
20
+ concurrency:
21
+ group: pages
22
+ cancel-in-progress: false
23
+
24
+ jobs:
25
+ build:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v7
29
+ - uses: actions/setup-python@v7
30
+ with:
31
+ python-version: "3.12"
32
+ cache: pip
33
+ cache-dependency-path: pyproject.toml
34
+ - name: Install docs dependencies
35
+ run: |
36
+ python -m pip install --upgrade pip
37
+ pip install -e ".[docs]"
38
+ - name: Build docs (strict)
39
+ run: mkdocs build --strict --site-dir _site
40
+ - uses: actions/upload-pages-artifact@v3
41
+ with:
42
+ path: _site
43
+
44
+ deploy:
45
+ needs: build
46
+ runs-on: ubuntu-latest
47
+ environment:
48
+ name: github-pages
49
+ url: ${{ steps.deployment.outputs.page_url }}
50
+ steps:
51
+ - id: deployment
52
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,57 @@
1
+ name: release
2
+
3
+ # Publish to PyPI when a version tag is pushed (e.g. v0.2.0).
4
+ # Uses PyPI Trusted Publishing (OIDC) — no API token stored as a secret.
5
+ # One-time setup on PyPI: add this repo + workflow as a trusted publisher for
6
+ # the `clousight-bench` project. See docs/RELEASING.md.
7
+
8
+ on:
9
+ push:
10
+ tags:
11
+ - "v*"
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ build:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v7
21
+ - uses: actions/setup-python@v7
22
+ with:
23
+ python-version: "3.12"
24
+ - name: Verify tag matches package version
25
+ run: |
26
+ python -m pip install --upgrade pip
27
+ pip install -e .
28
+ TAG="${GITHUB_REF_NAME#v}"
29
+ PKG="$(python -c 'import importlib.metadata as m; print(m.version("clousight-bench"))')"
30
+ echo "tag=$TAG package=$PKG"
31
+ test "$TAG" = "$PKG" || { echo "::error::tag v$TAG != package version $PKG"; exit 1; }
32
+ - name: Build sdist + wheel
33
+ run: |
34
+ pip install build
35
+ python -m build
36
+ - name: Check metadata
37
+ run: |
38
+ pip install twine
39
+ twine check dist/*
40
+ - uses: actions/upload-artifact@v7
41
+ with:
42
+ name: dist
43
+ path: dist/
44
+
45
+ publish:
46
+ needs: build
47
+ runs-on: ubuntu-latest
48
+ environment: pypi
49
+ permissions:
50
+ id-token: write # required for Trusted Publishing (OIDC)
51
+ steps:
52
+ - uses: actions/download-artifact@v8
53
+ with:
54
+ name: dist
55
+ path: dist/
56
+ - name: Publish to PyPI
57
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,31 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ .eggs/
5
+ dist/
6
+ build/
7
+ .venv/
8
+ venv/
9
+ .pytest_cache/
10
+ .ruff_cache/
11
+ .mypy_cache/
12
+ results/
13
+ # Agent-bundle vendored deps (LangChain + OTel) — regenerated at build time, never commit
14
+ _vendor_cache/
15
+ .coverage
16
+ coverage.xml
17
+ htmlcov/
18
+ site/
19
+ *.local.yaml
20
+ .env
21
+ .gitsync.env
22
+ .DS_Store
23
+ .terraform/
24
+ *.tfstate
25
+ *.tfstate.backup
26
+ .worktrees/
27
+
28
+ # Terraform / infra build artifacts
29
+ *.tfvars
30
+ !*.tfvars.example
31
+ mock-tools-fc.zip
@@ -0,0 +1,6 @@
1
+ # Template for scripts/gitsync.sh. Copy to `.gitsync.env` (which is gitignored):
2
+ # cp .gitsync.env.example .gitsync.env
3
+ # The script reads $CSBENCH_REPO from the environment, or sources this file's
4
+ # copy, to know which GitHub repo to push/PR against. Auth uses your machine's
5
+ # `gh` config; no token is stored here.
6
+ CSBENCH_REPO=clousight/clousight-bench
@@ -0,0 +1,10 @@
1
+ # Clousight Bench — Agent 入口
2
+
3
+ 本仓库是 Clousight Bench 开源测评核心。开发与贡献约定见 `README.md`。
4
+
5
+ ## 仓库身份(强制)
6
+
7
+ - **GitHub 操作账号**:`clousight-dev`。`scripts/gitsync.sh` 会拒绝其它 `gh` 账号,并把本仓 `user.name` / `user.email` 写成 `Clousight` / `306954191+clousight-dev@users.noreply.github.com`(GitHub 按邮箱归属账号;个人 Gmail 会显示成个人 GitHub 用户)。
8
+ - 未走 gitsync 时,向 GitHub 提交、推送、创建 PR、Issue 或 Release 前先用 `gh auth status` 确认;不是该账号时执行 `gh auth switch --user clousight-dev`。
9
+ - 禁止直推 `main`。本地改动推到功能分支,`gitsync pr` 后 `gitsync merge`(默认 squash)。
10
+ - 提交继续遵守仓库 DCO 要求(`git commit -s`)。`gitsync commit` 会自动加 `-s`。