observal-cli 0.2.0__tar.gz → 0.3.3__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 (617) hide show
  1. {observal_cli-0.2.0 → observal_cli-0.3.3}/.env.example +20 -0
  2. observal_cli-0.3.3/.gitbook.yaml +11 -0
  3. {observal_cli-0.2.0 → observal_cli-0.3.3}/.github/workflows/ci.yml +1 -0
  4. observal_cli-0.3.3/.github/workflows/deploy.yml +62 -0
  5. observal_cli-0.3.3/.github/workflows/release.yml +383 -0
  6. {observal_cli-0.2.0 → observal_cli-0.3.3}/.gitignore +19 -7
  7. {observal_cli-0.2.0 → observal_cli-0.3.3}/.pre-commit-config.yaml +20 -0
  8. {observal_cli-0.2.0 → observal_cli-0.3.3}/AGENTS.md +118 -18
  9. observal_cli-0.3.3/CHANGELOG.md +772 -0
  10. {observal_cli-0.2.0 → observal_cli-0.3.3}/CONTRIBUTING.md +12 -8
  11. {observal_cli-0.2.0 → observal_cli-0.3.3}/Makefile +27 -5
  12. observal_cli-0.3.3/PKG-INFO +184 -0
  13. observal_cli-0.3.3/README.md +152 -0
  14. observal_cli-0.3.3/SETUP.md +16 -0
  15. observal_cli-0.3.3/cliff.toml +48 -0
  16. {observal_cli-0.2.0 → observal_cli-0.3.3}/docker/Dockerfile.api +2 -1
  17. observal_cli-0.3.3/docker/clickhouse/config.d/memory.xml +9 -0
  18. observal_cli-0.3.3/docker/clickhouse/users.d/memory.xml +22 -0
  19. observal_cli-0.3.3/docker/docker-compose.production.yml +12 -0
  20. {observal_cli-0.2.0 → observal_cli-0.3.3}/docker/docker-compose.yml +88 -20
  21. observal_cli-0.3.3/docker/entrypoint.sh +87 -0
  22. observal_cli-0.3.3/docker/nginx.conf +19 -0
  23. observal_cli-0.3.3/docker/nginx.production.conf +73 -0
  24. observal_cli-0.3.3/docker/server-package/env.template +44 -0
  25. observal_cli-0.3.3/docker/server-package/setup.sh +126 -0
  26. observal_cli-0.3.3/docs/README.md +52 -0
  27. observal_cli-0.3.3/docs/SUMMARY.md +72 -0
  28. observal_cli-0.3.3/docs/cli/README.md +82 -0
  29. observal_cli-0.3.3/docs/cli/admin.md +156 -0
  30. observal_cli-0.3.3/docs/cli/agent.md +120 -0
  31. observal_cli-0.3.3/docs/cli/auth.md +152 -0
  32. observal_cli-0.3.3/docs/cli/config.md +116 -0
  33. observal_cli-0.3.3/docs/cli/doctor.md +88 -0
  34. observal_cli-0.3.3/docs/cli/ops.md +155 -0
  35. observal_cli-0.3.3/docs/cli/profile.md +109 -0
  36. observal_cli-0.3.3/docs/cli/pull.md +108 -0
  37. observal_cli-0.3.3/docs/cli/registry.md +164 -0
  38. observal_cli-0.3.3/docs/cli/scan.md +93 -0
  39. observal_cli-0.3.3/docs/cli/self.md +53 -0
  40. observal_cli-0.3.3/docs/concepts/README.md +11 -0
  41. observal_cli-0.3.3/docs/concepts/data-model.md +101 -0
  42. observal_cli-0.3.3/docs/concepts/evaluation.md +191 -0
  43. observal_cli-0.3.3/docs/concepts/shim-vs-proxy.md +107 -0
  44. observal_cli-0.3.3/docs/e2e-test-checklist-enterprise.md +291 -0
  45. observal_cli-0.3.3/docs/e2e-test-checklist.md +158 -0
  46. observal_cli-0.3.3/docs/getting-started/core-concepts.md +133 -0
  47. observal_cli-0.3.3/docs/getting-started/installation.md +115 -0
  48. observal_cli-0.3.3/docs/getting-started/quickstart.md +168 -0
  49. observal_cli-0.3.3/docs/integrations/README.md +42 -0
  50. observal_cli-0.3.3/docs/integrations/claude-code.md +111 -0
  51. observal_cli-0.3.3/docs/integrations/codex-cli.md +31 -0
  52. observal_cli-0.3.3/docs/integrations/cursor.md +54 -0
  53. observal_cli-0.3.3/docs/integrations/gemini-cli.md +43 -0
  54. observal_cli-0.3.3/docs/integrations/kiro.md +200 -0
  55. observal_cli-0.3.3/docs/integrations/vscode.md +43 -0
  56. observal_cli-0.3.3/docs/reference/api-endpoints.md +154 -0
  57. observal_cli-0.3.3/docs/reference/config-files.md +117 -0
  58. observal_cli-0.3.3/docs/reference/environment-variables.md +136 -0
  59. observal_cli-0.3.3/docs/reference/hooks-spec.md +156 -0
  60. observal_cli-0.3.3/docs/self-hosting/README.md +71 -0
  61. observal_cli-0.3.3/docs/self-hosting/authentication.md +146 -0
  62. observal_cli-0.3.3/docs/self-hosting/backup-and-restore.md +151 -0
  63. observal_cli-0.3.3/docs/self-hosting/configuration.md +151 -0
  64. observal_cli-0.3.3/docs/self-hosting/databases.md +121 -0
  65. observal_cli-0.3.3/docs/self-hosting/docker-compose.md +134 -0
  66. observal_cli-0.3.3/docs/self-hosting/evaluation-engine.md +149 -0
  67. observal_cli-0.3.3/docs/self-hosting/ports-and-volumes.md +77 -0
  68. observal_cli-0.3.3/docs/self-hosting/releasing.md +140 -0
  69. observal_cli-0.3.3/docs/self-hosting/requirements.md +79 -0
  70. observal_cli-0.3.3/docs/self-hosting/telemetry-pipeline.md +111 -0
  71. observal_cli-0.3.3/docs/self-hosting/troubleshooting.md +209 -0
  72. observal_cli-0.3.3/docs/self-hosting/upgrades.md +96 -0
  73. observal_cli-0.3.3/docs/self-observability.md +82 -0
  74. observal_cli-0.3.3/docs/use-cases/README.md +25 -0
  75. observal_cli-0.3.3/docs/use-cases/debug-agent-failures.md +90 -0
  76. observal_cli-0.3.3/docs/use-cases/evaluate-agents.md +132 -0
  77. observal_cli-0.3.3/docs/use-cases/observe-mcp-traffic.md +93 -0
  78. observal_cli-0.3.3/docs/use-cases/share-agent-configs.md +109 -0
  79. observal_cli-0.3.3/docs/use-cases/team-registry.md +134 -0
  80. observal_cli-0.3.3/ee/AGENTS.md +105 -0
  81. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/__init__.py +18 -19
  82. observal_cli-0.3.3/ee/docs/cli-sso.md +164 -0
  83. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/docs/cli.md +40 -9
  84. observal_cli-0.3.3/ee/docs/oidc-setup.md +271 -0
  85. observal_cli-0.3.3/ee/docs/saml-setup.md +386 -0
  86. observal_cli-0.3.3/ee/docs/scim-setup.md +533 -0
  87. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/observal_server/routes/__init__.py +2 -0
  88. observal_cli-0.3.3/ee/observal_server/routes/admin_sso.py +357 -0
  89. observal_cli-0.3.3/ee/observal_server/routes/scim.py +585 -0
  90. observal_cli-0.3.3/ee/observal_server/routes/sso_saml.py +430 -0
  91. observal_cli-0.3.3/ee/observal_server/services/audit.py +271 -0
  92. observal_cli-0.3.3/ee/observal_server/services/config_validator.py +51 -0
  93. observal_cli-0.3.3/ee/observal_server/services/saml.py +176 -0
  94. observal_cli-0.3.3/ee/observal_server/services/scim_service.py +129 -0
  95. observal_cli-0.3.3/grafana/dashboards/self-observability.json +235 -0
  96. observal_cli-0.3.3/grafana/provisioning/datasources/prometheus.yaml +10 -0
  97. observal_cli-0.3.3/install-server.sh +71 -0
  98. observal_cli-0.3.3/install.sh +99 -0
  99. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/README.md +1 -1
  100. observal_cli-0.3.3/observal-server/alembic/versions/0017_add_org_trace_privacy.py +46 -0
  101. observal_cli-0.3.3/observal-server/alembic/versions/0018_add_saml_config_and_scim_token.py +88 -0
  102. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/deps.py +55 -4
  103. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/graphql.py +23 -8
  104. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/middleware/request_id.py +49 -42
  105. observal_cli-0.3.3/observal-server/api/ratelimit.py +23 -0
  106. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/admin.py +226 -17
  107. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/agent.py +94 -27
  108. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/alert.py +44 -2
  109. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/auth.py +107 -71
  110. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/bulk.py +9 -0
  111. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/component_source.py +34 -1
  112. observal_cli-0.3.3/observal-server/api/routes/config.py +62 -0
  113. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/dashboard.py +49 -15
  114. observal_cli-0.3.3/observal-server/api/routes/device_auth.py +227 -0
  115. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/eval.py +125 -7
  116. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/feedback.py +11 -1
  117. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/hook.py +58 -10
  118. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/mcp.py +66 -10
  119. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/otel_dashboard.py +454 -44
  120. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/otlp.py +2 -31
  121. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/prompt.py +68 -8
  122. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/review.py +361 -16
  123. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/sandbox.py +82 -10
  124. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/skill.py +70 -10
  125. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/config.py +42 -0
  126. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/database.py +2 -2
  127. observal_cli-0.3.3/observal-server/logging_config.py +54 -0
  128. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/main.py +71 -20
  129. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/__init__.py +4 -0
  130. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/organization.py +2 -1
  131. observal_cli-0.3.3/observal-server/models/saml_config.py +34 -0
  132. observal_cli-0.3.3/observal-server/models/scim_token.py +19 -0
  133. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/user.py +2 -0
  134. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/pyproject.toml +5 -2
  135. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/agent.py +1 -0
  136. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/auth.py +41 -21
  137. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/constants.py +4 -2
  138. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/dashboard.py +2 -2
  139. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/hook.py +1 -0
  140. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/mcp.py +1 -0
  141. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/prompt.py +1 -0
  142. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/sandbox.py +1 -0
  143. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/skill.py +1 -0
  144. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/agent_builder.py +90 -12
  145. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/agent_config_generator.py +38 -5
  146. observal_cli-0.3.3/observal-server/services/audit_helpers.py +43 -0
  147. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/clickhouse.py +123 -29
  148. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/codex_config_generator.py +1 -1
  149. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/config_generator.py +55 -8
  150. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/demo_accounts.py +7 -0
  151. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/adversarial_scorer.py +20 -11
  152. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/eval_engine.py +29 -14
  153. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/eval_service.py +15 -26
  154. observal_cli-0.3.3/observal-server/services/eval/kernel.py +1825 -0
  155. observal_cli-0.3.3/observal-server/services/eval/kernel_bridge.py +428 -0
  156. observal_cli-0.3.3/observal-server/services/eval/kernel_scorer.py +492 -0
  157. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/ragas_eval.py +5 -4
  158. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/sanitizer.py +20 -9
  159. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/score_aggregator.py +58 -13
  160. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/slm_scorer.py +4 -3
  161. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/structural_scorer.py +238 -94
  162. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/events.py +20 -0
  163. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/git_mirror_service.py +7 -2
  164. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/hook_materializer.py +5 -4
  165. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/redis.py +54 -11
  166. observal_cli-0.3.3/observal-server/services/request_context.py +44 -0
  167. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/tests/test_jwt.py +1 -1
  168. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/tests/test_multi_tenancy.py +1 -1
  169. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/uv.lock +214 -5
  170. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/worker.py +47 -23
  171. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/client.py +2 -0
  172. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_auth.py +567 -200
  173. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_doctor.py +290 -14
  174. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_hook.py +5 -1
  175. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_mcp.py +40 -17
  176. observal_cli-0.3.3/observal_cli/cmd_migrate.py +1635 -0
  177. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_ops.py +554 -31
  178. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_profile.py +16 -1
  179. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_prompt.py +5 -1
  180. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_pull.py +49 -12
  181. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_sandbox.py +5 -1
  182. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_scan.py +540 -116
  183. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_skill.py +5 -1
  184. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/config.py +4 -1
  185. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/constants.py +4 -2
  186. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/hooks/flush_buffer.py +20 -1
  187. observal_cli-0.3.3/observal_cli/hooks/gemini_hook.py +180 -0
  188. observal_cli-0.3.3/observal_cli/hooks/gemini_stop_hook.py +119 -0
  189. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/hooks/kiro_hook.py +17 -1
  190. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/hooks/kiro_stop_hook.py +17 -2
  191. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/hooks/observal-hook.sh +10 -1
  192. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/hooks/observal-stop-hook.sh +18 -7
  193. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/hooks_spec.py +8 -4
  194. observal_cli-0.3.3/observal_cli/pyinstaller.spec +85 -0
  195. {observal_cli-0.2.0 → observal_cli-0.3.3}/otel-collector-config.yaml +2 -2
  196. observal_cli-0.3.3/prometheus.yml +11 -0
  197. {observal_cli-0.2.0 → observal_cli-0.3.3}/pyproject.toml +7 -8
  198. observal_cli-0.3.3/screenshots/01-review-queue.png +0 -0
  199. observal_cli-0.3.3/screenshots/02-detail-sheet-mcp.png +0 -0
  200. observal_cli-0.3.3/screenshots/03-after-bulk-approve.png +0 -0
  201. observal_cli-0.3.3/screenshots/04-rejection-reason-skills.png +0 -0
  202. observal_cli-0.3.3/scripts/check_dco.sh +44 -0
  203. observal_cli-0.3.3/scripts/check_secrets.sh +51 -0
  204. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/README.md +1 -1
  205. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_eval_phase8.py +142 -0
  206. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_agent_composition.py +14 -3
  207. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_agent_config_generator.py +79 -5
  208. observal_cli-0.3.3/tests/test_agent_name_lookup.py +225 -0
  209. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_audit_logging.py +124 -132
  210. observal_cli-0.3.3/tests/test_auth2_security.py +568 -0
  211. observal_cli-0.3.3/tests/test_clickhouse_resource_tuning.py +427 -0
  212. observal_cli-0.3.3/tests/test_config_generator_utils.py +37 -0
  213. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_demo_accounts.py +17 -0
  214. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_deployment_guards.py +1 -2
  215. observal_cli-0.3.3/tests/test_device_auth.py +528 -0
  216. observal_cli-0.3.3/tests/test_endpoint_discovery.py +144 -0
  217. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_enterprise.py +73 -34
  218. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_env_detection_and_config.py +130 -0
  219. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_health.py +9 -2
  220. observal_cli-0.3.3/tests/test_ide_config_e2e.py +1727 -0
  221. observal_cli-0.3.3/tests/test_listing_detail_access.py +286 -0
  222. observal_cli-0.3.3/tests/test_migrate_telemetry.py +1279 -0
  223. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_review_queue.py +2 -1
  224. observal_cli-0.3.3/tests/test_saml.py +796 -0
  225. observal_cli-0.3.3/tests/test_saml_scim_integration.py +845 -0
  226. observal_cli-0.3.3/tests/test_scim.py +298 -0
  227. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_shim_phase3.py +10 -0
  228. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_telemetry_collection.py +22 -4
  229. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_worker_phase5.py +34 -15
  230. observal_cli-0.3.3/tools/release.sh +164 -0
  231. {observal_cli-0.2.0 → observal_cli-0.3.3}/uv.lock +60 -20
  232. observal_cli-0.3.3/web/AGENTS.md +101 -0
  233. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/package.json +1 -0
  234. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/pnpm-lock.yaml +8 -0
  235. observal_cli-0.3.3/web/src/app/(admin)/audit-log/page.tsx +260 -0
  236. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(admin)/dashboard/page.tsx +62 -4
  237. observal_cli-0.3.3/web/src/app/(admin)/diagnostics/page.tsx +169 -0
  238. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(admin)/errors/page.tsx +1 -1
  239. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(admin)/eval/[agentId]/page.tsx +16 -21
  240. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(admin)/eval/page.tsx +25 -14
  241. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(admin)/layout.tsx +1 -1
  242. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(admin)/review/page.tsx +43 -103
  243. observal_cli-0.3.3/web/src/app/(admin)/security-events/page.tsx +248 -0
  244. observal_cli-0.3.3/web/src/app/(admin)/settings/page.tsx +486 -0
  245. observal_cli-0.3.3/web/src/app/(admin)/sso/page.tsx +405 -0
  246. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(admin)/users/page.tsx +108 -12
  247. observal_cli-0.3.3/web/src/app/(auth)/device/page.tsx +161 -0
  248. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(auth)/login/page.tsx +147 -88
  249. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(registry)/agents/[id]/page.tsx +22 -15
  250. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(registry)/agents/builder/page.tsx +17 -5
  251. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(registry)/agents/page.tsx +28 -10
  252. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(registry)/components/[id]/page.tsx +3 -2
  253. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(registry)/components/page.tsx +52 -19
  254. observal_cli-0.3.3/web/src/app/(registry)/leaderboard/page.tsx +394 -0
  255. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(registry)/page.tsx +4 -3
  256. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(user)/traces/[id]/page.tsx +46 -15
  257. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(user)/traces/page.tsx +1 -1
  258. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/builder/preview-panel.tsx +56 -7
  259. observal_cli-0.3.3/web/src/components/dashboard/efficiency-metrics.tsx +213 -0
  260. observal_cli-0.3.3/web/src/components/dashboard/score-overview.tsx +160 -0
  261. observal_cli-0.3.3/web/src/components/dashboard/session-dag.tsx +627 -0
  262. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/nav/registry-sidebar.tsx +11 -3
  263. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/install-dialog.tsx +2 -1
  264. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/pull-command.tsx +2 -1
  265. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/submit-component-dialog.tsx +143 -50
  266. observal_cli-0.3.3/web/src/components/review/review-detail-sheet.tsx +708 -0
  267. observal_cli-0.3.3/web/src/components/review/validation-badges.tsx +90 -0
  268. observal_cli-0.3.3/web/src/components/ui/checkbox.tsx +28 -0
  269. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/hooks/use-api.ts +93 -3
  270. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/hooks/use-deployment-config.ts +1 -0
  271. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/lib/api.ts +50 -7
  272. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/lib/ide-features.ts +5 -2
  273. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/lib/types.ts +124 -7
  274. observal_cli-0.3.3/web/src/lib/utils.ts +46 -0
  275. observal_cli-0.2.0/.github/workflows/deploy.yml +0 -44
  276. observal_cli-0.2.0/.github/workflows/publish.yml +0 -48
  277. observal_cli-0.2.0/CHANGELOG.md +0 -337
  278. observal_cli-0.2.0/PKG-INFO +0 -528
  279. observal_cli-0.2.0/README.md +0 -492
  280. observal_cli-0.2.0/SETUP.md +0 -470
  281. observal_cli-0.2.0/docker/entrypoint.sh +0 -22
  282. observal_cli-0.2.0/docs/cli.md +0 -369
  283. observal_cli-0.2.0/docs/eval.md +0 -112
  284. observal_cli-0.2.0/docs/kiro-setup.md +0 -298
  285. observal_cli-0.2.0/docs/superpowers/specs/2026-04-19-unarchive-agent-design.md +0 -117
  286. observal_cli-0.2.0/ee/observal_server/routes/scim.py +0 -35
  287. observal_cli-0.2.0/ee/observal_server/routes/sso_saml.py +0 -23
  288. observal_cli-0.2.0/ee/observal_server/services/audit.py +0 -172
  289. observal_cli-0.2.0/ee/observal_server/services/config_validator.py +0 -34
  290. observal_cli-0.2.0/magic-agent.json +0 -28
  291. observal_cli-0.2.0/observal-server/api/ratelimit.py +0 -14
  292. observal_cli-0.2.0/observal-server/api/routes/config.py +0 -16
  293. observal_cli-0.2.0/observal-server/api/routes/scan.py +0 -219
  294. observal_cli-0.2.0/observal_cli/cmd_migrate.py +0 -764
  295. observal_cli-0.2.0/web/AGENTS.md +0 -5
  296. observal_cli-0.2.0/web/src/app/(admin)/settings/page.tsx +0 -273
  297. observal_cli-0.2.0/web/src/app/(registry)/agents/leaderboard/page.tsx +0 -249
  298. observal_cli-0.2.0/web/src/lib/utils.ts +0 -16
  299. {observal_cli-0.2.0 → observal_cli-0.3.3}/.dockerignore +0 -0
  300. {observal_cli-0.2.0 → observal_cli-0.3.3}/.editorconfig +0 -0
  301. {observal_cli-0.2.0 → observal_cli-0.3.3}/.gitattributes +0 -0
  302. {observal_cli-0.2.0 → observal_cli-0.3.3}/.github/ISSUE_TEMPLATE/bug_report_form.yml +0 -0
  303. {observal_cli-0.2.0 → observal_cli-0.3.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  304. {observal_cli-0.2.0 → observal_cli-0.3.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  305. {observal_cli-0.2.0 → observal_cli-0.3.3}/.github/pull_request_template.md +0 -0
  306. {observal_cli-0.2.0 → observal_cli-0.3.3}/.github/workflows/codeql.yml +0 -0
  307. {observal_cli-0.2.0 → observal_cli-0.3.3}/.github/workflows/dco.yml +0 -0
  308. {observal_cli-0.2.0 → observal_cli-0.3.3}/CODE_OF_CONDUCT.md +0 -0
  309. {observal_cli-0.2.0 → observal_cli-0.3.3}/LICENSE +0 -0
  310. {observal_cli-0.2.0 → observal_cli-0.3.3}/SECURITY.md +0 -0
  311. {observal_cli-0.2.0 → observal_cli-0.3.3}/demo/README.md +0 -0
  312. {observal_cli-0.2.0 → observal_cli-0.3.3}/demo/run_demo.sh +0 -0
  313. {observal_cli-0.2.0 → observal_cli-0.3.3}/demo/test_all_types.sh +0 -0
  314. {observal_cli-0.2.0 → observal_cli-0.3.3}/docker/Dockerfile.web +0 -0
  315. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/ObservalLogo-removebg-preview.png +0 -0
  316. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/agent-builder.png +0 -0
  317. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/agents-list.png +0 -0
  318. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/command-palette.png +0 -0
  319. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/components-list.png +0 -0
  320. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/dashboard.png +0 -0
  321. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/errors.png +0 -0
  322. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/eval-no-config.png +0 -0
  323. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/leaderboard.png +0 -0
  324. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/login-local.png +0 -0
  325. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/registry-home.png +0 -0
  326. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/review.png +0 -0
  327. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/session-info-claude-code.png +0 -0
  328. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/settings.png +0 -0
  329. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/traces.png +0 -0
  330. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/images/users.png +0 -0
  331. {observal_cli-0.2.0/docs → observal_cli-0.3.3/docs/internal}/kiro-compatibility-matrix.md +0 -0
  332. {observal_cli-0.2.0/docs → observal_cli-0.3.3/docs/internal}/kiro-research-notes.md +0 -0
  333. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/logo-light.svg +0 -0
  334. {observal_cli-0.2.0 → observal_cli-0.3.3}/docs/logo.svg +0 -0
  335. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/LICENSE +0 -0
  336. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/README.md +0 -0
  337. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/observal_server/__init__.py +0 -0
  338. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/observal_server/middleware/__init__.py +0 -0
  339. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/observal_server/middleware/enterprise_guard.py +0 -0
  340. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/observal_server/routes/audit.py +0 -0
  341. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/observal_server/services/__init__.py +0 -0
  342. {observal_cli-0.2.0 → observal_cli-0.3.3}/ee/plugins/__init__.py +0 -0
  343. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/dashboards/agent-activity.json +0 -0
  344. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/dashboards/audit-log.json +0 -0
  345. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/dashboards/cost-tracking.json +0 -0
  346. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/dashboards/error-rates.json +0 -0
  347. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/dashboards/performance-resources.json +0 -0
  348. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/dashboards/scores-eval.json +0 -0
  349. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/dashboards/session-overview.json +0 -0
  350. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/dashboards/token-usage.json +0 -0
  351. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/dashboards/tool-call-frequency.json +0 -0
  352. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/provisioning/dashboards/default.yaml +0 -0
  353. {observal_cli-0.2.0 → observal_cli-0.3.3}/grafana/provisioning/datasources/clickhouse.yaml +0 -0
  354. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/README +0 -0
  355. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/env.py +0 -0
  356. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/script.py.mako +0 -0
  357. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/.gitkeep +0 -0
  358. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0001_add_rbac_roles_and_is_demo.py +0 -0
  359. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0002_add_password_reset_tokens.py +0 -0
  360. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0003_add_api_keys_table.py +0 -0
  361. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0004_normalize_email_case.py +0 -0
  362. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0005_drop_password_reset_tokens.py +0 -0
  363. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0006_drop_api_keys_and_legacy_key_hash.py +0 -0
  364. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0007_add_alert_history.py +0 -0
  365. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0008_add_mcp_framework_column.py +0 -0
  366. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0009_add_docker_image_to_mcp_listings.py +0 -0
  367. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0010_add_agents_name_uniqueness.py +0 -0
  368. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0011_agent_review_and_bundles.py +0 -0
  369. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0012_add_username_to_users.py +0 -0
  370. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0013_add_mcp_command_args_url_headers.py +0 -0
  371. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0014_add_draft_to_listing_status.py +0 -0
  372. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0015_add_webhook_secret_to_alert_rules.py +0 -0
  373. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic/versions/0016_add_ide_feature_fields.py +0 -0
  374. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/alembic.ini +0 -0
  375. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/__init__.py +0 -0
  376. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/middleware/__init__.py +0 -0
  377. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/middleware/content_type.py +0 -0
  378. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/__init__.py +0 -0
  379. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/jwks.py +0 -0
  380. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/routes/telemetry.py +0 -0
  381. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/api/sanitize.py +0 -0
  382. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/agent.py +0 -0
  383. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/agent_component.py +0 -0
  384. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/alert.py +0 -0
  385. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/alert_history.py +0 -0
  386. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/base.py +0 -0
  387. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/component_bundle.py +0 -0
  388. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/component_source.py +0 -0
  389. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/download.py +0 -0
  390. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/enterprise_config.py +0 -0
  391. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/eval.py +0 -0
  392. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/exporter_config.py +0 -0
  393. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/feedback.py +0 -0
  394. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/hook.py +0 -0
  395. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/mcp.py +0 -0
  396. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/password_reset_token.py +0 -0
  397. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/prompt.py +0 -0
  398. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/sandbox.py +0 -0
  399. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/sanitization.py +0 -0
  400. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/scoring.py +0 -0
  401. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/skill.py +0 -0
  402. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/models/submission.py +0 -0
  403. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/__init__.py +0 -0
  404. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/admin.py +0 -0
  405. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/alert.py +0 -0
  406. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/bulk.py +0 -0
  407. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/component_source.py +0 -0
  408. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/eval.py +0 -0
  409. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/feedback.py +0 -0
  410. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/judge_output.py +0 -0
  411. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/schemas/telemetry.py +0 -0
  412. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/__init__.py +0 -0
  413. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/agent_resolver.py +0 -0
  414. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/alert_evaluator.py +0 -0
  415. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/cache.py +0 -0
  416. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/crypto.py +0 -0
  417. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/download_tracker.py +0 -0
  418. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/__init__.py +0 -0
  419. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/canary.py +0 -0
  420. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/eval/eval_watchdog.py +0 -0
  421. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/hook_config_generator.py +0 -0
  422. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/ide_feature_inference.py +0 -0
  423. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/jwt_service.py +0 -0
  424. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/mcp_validator.py +0 -0
  425. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/registry_telemetry.py +0 -0
  426. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/sandbox_config_generator.py +0 -0
  427. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/secrets_redactor.py +0 -0
  428. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/security_events.py +0 -0
  429. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/skill_config_generator.py +0 -0
  430. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/versioning.py +0 -0
  431. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/webhook_delivery.py +0 -0
  432. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/services/webhook_signer.py +0 -0
  433. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/tests/__init__.py +0 -0
  434. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/tests/conftest.py +0 -0
  435. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/tests/test_config.py +0 -0
  436. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/tests/test_crypto.py +0 -0
  437. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/tests/test_payload_protection.py +0 -0
  438. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/tests/test_rbac.py +0 -0
  439. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal-server/tests/test_security_events.py +0 -0
  440. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/README.md +0 -0
  441. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/__init__.py +0 -0
  442. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/analyzer.py +0 -0
  443. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/branding.py +0 -0
  444. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_agent.py +0 -0
  445. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/cmd_uninstall.py +0 -0
  446. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/hooks/__init__.py +0 -0
  447. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/hooks/buffer_event.py +0 -0
  448. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/hooks/payload_crypto.py +0 -0
  449. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/main.py +0 -0
  450. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/prompts.py +0 -0
  451. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/proxy.py +0 -0
  452. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/render.py +0 -0
  453. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/requirements.txt +0 -0
  454. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/sandbox_runner.py +0 -0
  455. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/settings_reconciler.py +0 -0
  456. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/shim.py +0 -0
  457. {observal_cli-0.2.0 → observal_cli-0.3.3}/observal_cli/telemetry_buffer.py +0 -0
  458. {observal_cli-0.2.0 → observal_cli-0.3.3}/renovate.json +0 -0
  459. {observal_cli-0.2.0 → observal_cli-0.3.3}/scripts/check_migrations.py +0 -0
  460. {observal_cli-0.2.0 → observal_cli-0.3.3}/scripts/new_migration.sh +0 -0
  461. {observal_cli-0.2.0 → observal_cli-0.3.3}/scripts/seed_test_skill.py +0 -0
  462. {observal_cli-0.2.0 → observal_cli-0.3.3}/test-agent.json +0 -0
  463. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/__init__.py +0 -0
  464. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/conftest.py +0 -0
  465. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/__init__.py +0 -0
  466. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_adversarial_self.py +0 -0
  467. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_eval_completeness.py +0 -0
  468. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_phase8a_sanitizer.py +0 -0
  469. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_phase8b_matching.py +0 -0
  470. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_phase8d_adversarial.py +0 -0
  471. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_phase8e_canary.py +0 -0
  472. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_phase8g_pipeline.py +0 -0
  473. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_ragas_eval.py +0 -0
  474. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_score_aggregator.py +0 -0
  475. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_slm_scorer.py +0 -0
  476. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/eval/test_structural_scorer.py +0 -0
  477. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/mock_mcp.py +0 -0
  478. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_agent_review.py +0 -0
  479. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_alert_evaluator.py +0 -0
  480. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_auth_redis_down.py +0 -0
  481. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_bulk.py +0 -0
  482. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_bundles.py +0 -0
  483. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_cli_errors.py +0 -0
  484. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_clickhouse_phase1.py +0 -0
  485. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_clickhouse_retention.py +0 -0
  486. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_constants_sync.py +0 -0
  487. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_docker_detection.py +0 -0
  488. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_draft_workflow.py +0 -0
  489. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_events.py +0 -0
  490. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_field_validation.py +0 -0
  491. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_git_mirror.py +0 -0
  492. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_graphql_phase6.py +0 -0
  493. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_ingest_phase2.py +0 -0
  494. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_migrate.py +0 -0
  495. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_payload_crypto.py +0 -0
  496. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_phase9_10.py +0 -0
  497. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_proxy_phase4.py +0 -0
  498. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_pull_and_agent_cli.py +0 -0
  499. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_registry_types.py +0 -0
  500. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_resilience.py +0 -0
  501. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_sanitize.py +0 -0
  502. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_scan_kiro_home.py +0 -0
  503. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_schema_redesign.py +0 -0
  504. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_secrets_redactor.py +0 -0
  505. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_settings_reconciler.py +0 -0
  506. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_skill_config_generator.py +0 -0
  507. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_uninstall.py +0 -0
  508. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_uninstall_windows.py +0 -0
  509. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_versioning.py +0 -0
  510. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_webhook_delivery.py +0 -0
  511. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_webhook_signer.py +0 -0
  512. {observal_cli-0.2.0 → observal_cli-0.3.3}/tests/test_webhook_signer_properties.py +0 -0
  513. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/.gitignore +0 -0
  514. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/README.md +0 -0
  515. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/helpers.ts +0 -0
  516. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/kiro-agent-compat.spec.ts +0 -0
  517. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/kiro-cli.spec.ts +0 -0
  518. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/kiro-hooks.spec.ts +0 -0
  519. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/kiro-lifecycle.spec.ts +0 -0
  520. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/kiro-live.spec.ts +0 -0
  521. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/kiro-otlp-logs.spec.ts +0 -0
  522. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/kiro-otlp-traces.spec.ts +0 -0
  523. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/kiro-web-agents.spec.ts +0 -0
  524. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/kiro-web-traces.spec.ts +0 -0
  525. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/shim-merge.spec.ts +0 -0
  526. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/sso-login.spec.ts +0 -0
  527. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/e2e/unarchive-agent.spec.ts +0 -0
  528. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/eslint.config.mjs +0 -0
  529. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/next.config.ts +0 -0
  530. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/playwright.config.ts +0 -0
  531. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/pnpm-workspace.yaml +0 -0
  532. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/postcss.config.mjs +0 -0
  533. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/public/file.svg +0 -0
  534. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/public/globe.svg +0 -0
  535. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/public/next.svg +0 -0
  536. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/public/vercel.svg +0 -0
  537. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/public/window.svg +0 -0
  538. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(auth)/layout.tsx +0 -0
  539. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(registry)/layout.tsx +0 -0
  540. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/(user)/layout.tsx +0 -0
  541. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/favicon.ico +0 -0
  542. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/globals.css +0 -0
  543. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/icon.png +0 -0
  544. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/layout.tsx +0 -0
  545. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/app/providers.tsx +0 -0
  546. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/builder/sortable-component-list.tsx +0 -0
  547. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/builder/validation-panel.tsx +0 -0
  548. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/agent-aggregate-chart.tsx +0 -0
  549. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/bar-list.tsx +0 -0
  550. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/dashboard-card.tsx +0 -0
  551. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/dimension-radar.tsx +0 -0
  552. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/export-button.tsx +0 -0
  553. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/latency-heatmap.tsx +0 -0
  554. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/no-data.tsx +0 -0
  555. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/penalty-accordion.tsx +0 -0
  556. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/query-error.tsx +0 -0
  557. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/stat-card.tsx +0 -0
  558. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/time-range-select.tsx +0 -0
  559. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/top-items-card.tsx +0 -0
  560. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/dashboard/trend-chart.tsx +0 -0
  561. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/layouts/admin-guard.tsx +0 -0
  562. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/layouts/auth-guard.tsx +0 -0
  563. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/layouts/dashboard-shell.tsx +0 -0
  564. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/layouts/page-header.tsx +0 -0
  565. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/layouts/role-guard.tsx +0 -0
  566. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/nav/command-menu.tsx +0 -0
  567. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/nav/github-star-banner.tsx +0 -0
  568. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/nav/nav-user.tsx +0 -0
  569. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/agent-card.tsx +0 -0
  570. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/component-card.tsx +0 -0
  571. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/feedback-list.tsx +0 -0
  572. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/ide-badges.tsx +0 -0
  573. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/metrics-panel.tsx +0 -0
  574. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/registry-detail.tsx +0 -0
  575. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/registry-table.tsx +0 -0
  576. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/review-form.tsx +0 -0
  577. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/registry/status-badge.tsx +0 -0
  578. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/shared/empty-state.tsx +0 -0
  579. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/shared/error-state.tsx +0 -0
  580. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/shared/skeleton-layouts.tsx +0 -0
  581. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/traces/span-tree.tsx +0 -0
  582. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/traces/trace-detail.tsx +0 -0
  583. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/traces/trace-list.tsx +0 -0
  584. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/avatar.tsx +0 -0
  585. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/badge.tsx +0 -0
  586. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/breadcrumb.tsx +0 -0
  587. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/button.tsx +0 -0
  588. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/card.tsx +0 -0
  589. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/command.tsx +0 -0
  590. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/dialog.tsx +0 -0
  591. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/dropdown-menu.tsx +0 -0
  592. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/input.tsx +0 -0
  593. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/label.tsx +0 -0
  594. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/popover.tsx +0 -0
  595. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/progress.tsx +0 -0
  596. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/resizable.tsx +0 -0
  597. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/scroll-area.tsx +0 -0
  598. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/select.tsx +0 -0
  599. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/separator.tsx +0 -0
  600. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/sheet.tsx +0 -0
  601. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/sidebar.tsx +0 -0
  602. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/skeleton.tsx +0 -0
  603. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/sonner.tsx +0 -0
  604. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/switch.tsx +0 -0
  605. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/table.tsx +0 -0
  606. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/tabs.tsx +0 -0
  607. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/textarea.tsx +0 -0
  608. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/theme-switcher.tsx +0 -0
  609. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/components/ui/tooltip.tsx +0 -0
  610. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/hooks/use-admin-guard.ts +0 -0
  611. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/hooks/use-auth.ts +0 -0
  612. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/hooks/use-mobile.ts +0 -0
  613. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/hooks/use-role-guard.ts +0 -0
  614. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/lib/export.ts +0 -0
  615. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/lib/graphql-ws.ts +0 -0
  616. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/src/lib/query-client.ts +0 -0
  617. {observal_cli-0.2.0 → observal_cli-0.3.3}/web/tsconfig.json +0 -0
@@ -20,6 +20,12 @@ EVAL_MODEL_API_KEY=
20
20
  EVAL_MODEL_NAME=
21
21
  EVAL_MODEL_PROVIDER=
22
22
 
23
+ # Moonshot / Kimi example (OpenAI-compatible). URL and Thinking-Mode toggle
24
+ # are handled automatically when PROVIDER=moonshot.
25
+ # EVAL_MODEL_PROVIDER=moonshot
26
+ # EVAL_MODEL_API_KEY=sk-...
27
+ # EVAL_MODEL_NAME=kimi-k2.5-preview
28
+
23
29
  # Optional: AWS credentials for Bedrock eval engine
24
30
  AWS_ACCESS_KEY_ID=
25
31
  AWS_SECRET_ACCESS_KEY=
@@ -51,6 +57,10 @@ DEMO_REVIEWER_PASSWORD=reviewer-changeme
51
57
  DEMO_USER_EMAIL=user@demo.example
52
58
  DEMO_USER_PASSWORD=user-changeme
53
59
 
60
+ # Resource limits (adjust based on your server's available RAM)
61
+ # CLICKHOUSE_MEMORY_LIMIT=2G
62
+ # OTEL_MEMORY_LIMIT=512M
63
+
54
64
  # Host port mappings (change these if defaults conflict with other services)
55
65
  # API_HOST_PORT=8000
56
66
  # POSTGRES_HOST_PORT=5432
@@ -60,3 +70,13 @@ DEMO_USER_PASSWORD=user-changeme
60
70
  # OTEL_GRPC_HOST_PORT=4317
61
71
  # OTEL_HTTP_HOST_PORT=4318
62
72
  # GRAFANA_HOST_PORT=3001
73
+
74
+ # Horizontal scaling (multi-instance deployments)
75
+ # API_REPLICAS=1
76
+ # WORKER_REPLICAS=1
77
+ # CLICKHOUSE_MEMORY_LIMIT=2G
78
+ # DB_POOL_SIZE=10
79
+ # DB_MAX_OVERFLOW=20
80
+ # REDIS_MAX_CONNECTIONS=50
81
+ # CLICKHOUSE_MAX_CONNECTIONS=20
82
+ # GIT_MIRROR_BASE_PATH=
@@ -0,0 +1,11 @@
1
+ root: ./docs/
2
+
3
+ structure:
4
+ readme: README.md
5
+ summary: SUMMARY.md
6
+
7
+ redirects:
8
+ cli: cli/README.md
9
+ eval: concepts/evaluation.md
10
+ kiro-setup: integrations/kiro.md
11
+ kiro-compatibility-matrix: integrations/kiro.md
@@ -142,6 +142,7 @@ jobs:
142
142
  --python ${{ matrix.python-version }} \
143
143
  --with asyncpg \
144
144
  --with hypothesis \
145
+ --with pyarrow \
145
146
  pytest ../tests/ -q
146
147
 
147
148
  # ── Job 3: Next.js lint + typecheck ───────────────────────────────────────────
@@ -0,0 +1,62 @@
1
+ name: Deploy to EC2
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ concurrency:
9
+ group: deploy-ec2
10
+ cancel-in-progress: false
11
+
12
+ jobs:
13
+ deploy:
14
+ runs-on: ubuntu-latest
15
+ timeout-minutes: 15
16
+ steps:
17
+ - name: Deploy to EC2
18
+ uses: appleboy/ssh-action@v1
19
+ with:
20
+ host: ${{ secrets.EC2_HOST }}
21
+ username: ubuntu
22
+ key: ${{ secrets.EC2_SSH_KEY }}
23
+ script: |
24
+ set -e
25
+ cd ~/Observal
26
+ git fetch origin main
27
+ git reset --hard origin/main
28
+
29
+ cd docker
30
+ docker compose -f docker-compose.yml -f docker-compose.production.yml up -d --build --remove-orphans
31
+
32
+ # Phase 1: Wait for API container to be alive (bypasses nginx).
33
+ # Uses direct container exec because curl through nginx fails
34
+ # when nginx caches a stale upstream IP from the old container.
35
+ echo "Waiting for API container to start..."
36
+ for i in $(seq 1 60); do
37
+ if docker compose exec -T observal-api python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/livez')" 2>/dev/null; then
38
+ echo "API process is alive"
39
+ break
40
+ fi
41
+ echo "Waiting for API process... ($i/60)"
42
+ sleep 5
43
+ done
44
+
45
+ # Nginx caches upstream container IPs — after rebuild the API
46
+ # gets a new IP but nginx still routes to the old one.
47
+ docker compose -f docker-compose.yml -f docker-compose.production.yml restart observal-lb
48
+ sleep 3
49
+
50
+ # Phase 2: Verify health through nginx (the path clients use)
51
+ for i in $(seq 1 30); do
52
+ if curl -sf https://localhost/health -k > /dev/null 2>&1; then
53
+ echo "API is healthy (full stack verified)"
54
+ exit 0
55
+ fi
56
+ echo "Waiting for health check... ($i/30)"
57
+ sleep 5
58
+ done
59
+
60
+ echo "API failed health check"
61
+ docker compose logs observal-api observal-init observal-lb observal-db observal-clickhouse --tail 20
62
+ exit 1
@@ -0,0 +1,383 @@
1
+ # Automated release pipeline for Observal.
2
+ #
3
+ # Triggered automatically when a release PR merges to main (detected by
4
+ # bump(release) commit), or manually via workflow_dispatch with a version input.
5
+ # Creates the git tag, then builds: CLI binaries (6 platforms), Docker images
6
+ # (GHCR), server tarball, PyPI package. All releases require approval.
7
+
8
+ name: Release
9
+
10
+ on:
11
+ push:
12
+ branches: [main]
13
+ workflow_dispatch:
14
+ inputs:
15
+ version:
16
+ description: "Version to release (e.g. 0.3.2). Leave empty to auto-detect from commit."
17
+ required: false
18
+ type: string
19
+
20
+ concurrency:
21
+ group: release
22
+ cancel-in-progress: false
23
+
24
+ permissions:
25
+ contents: write
26
+ packages: write
27
+ id-token: write
28
+ attestations: write
29
+
30
+ env:
31
+ REGISTRY: ghcr.io
32
+ IMAGE_PREFIX: ghcr.io/blazeup-ai/observal
33
+
34
+ jobs:
35
+ # ── Preflight: detect release commit and create tag ────────
36
+ preflight:
37
+ name: Preflight checks
38
+ runs-on: ubuntu-latest
39
+ outputs:
40
+ version: ${{ steps.version.outputs.version }}
41
+ bump_type: ${{ steps.version.outputs.bump_type }}
42
+ is_release: ${{ steps.version.outputs.is_release }}
43
+ steps:
44
+ - name: Generate release app token
45
+ id: app-token
46
+ uses: actions/create-github-app-token@v3
47
+ with:
48
+ client-id: ${{ vars.RELEASE_APP_CLIENT_ID }}
49
+ private-key: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
50
+
51
+ - uses: actions/checkout@v4
52
+ with:
53
+ fetch-depth: 0
54
+ token: ${{ steps.app-token.outputs.token }}
55
+
56
+ - name: Detect release version
57
+ id: version
58
+ run: |
59
+ # Manual dispatch with explicit version takes priority
60
+ if [ -n "${{ inputs.version }}" ]; then
61
+ VERSION="${{ inputs.version }}"
62
+ echo "is_release=true" >> "$GITHUB_OUTPUT"
63
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
64
+ else
65
+ COMMIT_MSG=$(git log -1 --pretty=%s)
66
+ if [[ "$COMMIT_MSG" =~ ^bump\(release\):\ v([0-9]+\.[0-9]+\.[0-9]+) ]]; then
67
+ VERSION="${BASH_REMATCH[1]}"
68
+ echo "is_release=true" >> "$GITHUB_OUTPUT"
69
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
70
+ else
71
+ echo "is_release=false" >> "$GITHUB_OUTPUT"
72
+ exit 0
73
+ fi
74
+ fi
75
+
76
+ # Validate version matches pyproject.toml
77
+ PKG_VERSION=$(python3 -c "import re, pathlib; m = re.search(r'^version\s*=\s*\"([^\"]+)\"', pathlib.Path('pyproject.toml').read_text(), re.M); print(m.group(1))")
78
+ if [ "$VERSION" != "$PKG_VERSION" ]; then
79
+ echo "::error::Release version v$VERSION does not match pyproject.toml ($PKG_VERSION)"
80
+ exit 1
81
+ fi
82
+
83
+ # Detect bump type by comparing to previous tag
84
+ PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "v0.0.0")
85
+ PREV="${PREV_TAG#v}"
86
+ IFS='.' read -r PM PMI PP <<< "$PREV"
87
+ IFS='.' read -r CM CMI CP <<< "$VERSION"
88
+ if [ "$CM" != "$PM" ]; then
89
+ echo "bump_type=major" >> "$GITHUB_OUTPUT"
90
+ elif [ "$CMI" != "$PMI" ]; then
91
+ echo "bump_type=feature" >> "$GITHUB_OUTPUT"
92
+ else
93
+ echo "bump_type=patch" >> "$GITHUB_OUTPUT"
94
+ fi
95
+
96
+ - name: Create release tag
97
+ if: steps.version.outputs.is_release == 'true'
98
+ run: |
99
+ VERSION="v${{ steps.version.outputs.version }}"
100
+ git config user.name "observal-release[bot]"
101
+ git config user.email "observal-release[bot]@users.noreply.github.com"
102
+ git tag -a "$VERSION" -m "Release $VERSION"
103
+ git push origin "$VERSION"
104
+
105
+ # ── Job 1: Build CLI binaries (5-platform matrix) ──────────
106
+ cli-binaries:
107
+ name: CLI (${{ matrix.os }}-${{ matrix.arch }})
108
+ needs: preflight
109
+ if: needs.preflight.outputs.is_release == 'true'
110
+ strategy:
111
+ fail-fast: false
112
+ matrix:
113
+ include:
114
+ - os: linux
115
+ arch: x64
116
+ runner: ubuntu-latest
117
+ artifact: observal-linux-x64
118
+ - os: linux
119
+ arch: arm64
120
+ runner: ubuntu-24.04-arm
121
+ artifact: observal-linux-arm64
122
+ - os: macos
123
+ arch: arm64
124
+ runner: macos-15
125
+ artifact: observal-macos-arm64
126
+ - os: windows
127
+ arch: x64
128
+ runner: windows-latest
129
+ artifact: observal-windows-x64.exe
130
+ - os: windows
131
+ arch: arm64
132
+ runner: windows-latest
133
+ artifact: observal-windows-arm64.exe
134
+ runs-on: ${{ matrix.runner }}
135
+ steps:
136
+ - uses: actions/checkout@v4
137
+
138
+ - uses: actions/setup-python@v5
139
+ with:
140
+ python-version: "3.12"
141
+ cache: pip
142
+
143
+ - name: Install dependencies
144
+ run: |
145
+ pip install pyinstaller
146
+ pip install -e .
147
+
148
+ - name: Build binary
149
+ run: |
150
+ pyinstaller observal_cli/pyinstaller.spec --noconfirm
151
+ env:
152
+ TARGET_ARCH: ${{ matrix.arch }}
153
+
154
+ - name: Rename artifact (Unix)
155
+ if: matrix.os != 'windows'
156
+ run: mv dist/observal dist/${{ matrix.artifact }}
157
+
158
+ - name: Rename artifact (Windows)
159
+ if: matrix.os == 'windows'
160
+ run: mv dist/observal.exe dist/${{ matrix.artifact }}
161
+
162
+ - uses: actions/upload-artifact@v4
163
+ with:
164
+ name: ${{ matrix.artifact }}
165
+ path: dist/${{ matrix.artifact }}
166
+
167
+ # ── Job 2: Docker images to GHCR (native per-arch builds) ──
168
+ docker-build:
169
+ name: Docker (${{ matrix.image }}-${{ matrix.arch }})
170
+ needs: preflight
171
+ if: needs.preflight.outputs.is_release == 'true'
172
+ strategy:
173
+ fail-fast: false
174
+ matrix:
175
+ image: [api, web]
176
+ arch: [amd64, arm64]
177
+ include:
178
+ - arch: amd64
179
+ runner: ubuntu-latest
180
+ platform: linux/amd64
181
+ - arch: arm64
182
+ runner: ubuntu-24.04-arm
183
+ platform: linux/arm64
184
+ runs-on: ${{ matrix.runner }}
185
+ steps:
186
+ - uses: actions/checkout@v4
187
+
188
+ - uses: docker/setup-buildx-action@v3
189
+
190
+ - uses: docker/login-action@v3
191
+ with:
192
+ registry: ${{ env.REGISTRY }}
193
+ username: ${{ github.actor }}
194
+ password: ${{ secrets.GITHUB_TOKEN }}
195
+
196
+ - name: Build and push by digest
197
+ id: build
198
+ uses: docker/build-push-action@v6
199
+ with:
200
+ context: .
201
+ file: docker/Dockerfile.${{ matrix.image }}
202
+ platforms: ${{ matrix.platform }}
203
+ provenance: false
204
+ outputs: type=image,name=${{ env.IMAGE_PREFIX }}-${{ matrix.image }},push-by-digest=true,name-canonical=true,push=true
205
+ cache-from: type=gha,scope=${{ matrix.image }}-${{ matrix.arch }}
206
+ cache-to: type=gha,scope=${{ matrix.image }}-${{ matrix.arch }},mode=max
207
+
208
+ - name: Export digest
209
+ run: |
210
+ mkdir -p /tmp/digests
211
+ digest="${{ steps.build.outputs.digest }}"
212
+ touch "/tmp/digests/${digest#sha256:}"
213
+
214
+ - uses: actions/upload-artifact@v4
215
+ with:
216
+ name: docker-digest-${{ matrix.image }}-${{ matrix.arch }}
217
+ path: /tmp/digests/*
218
+ if-no-files-found: error
219
+ retention-days: 1
220
+
221
+ docker-merge:
222
+ name: Docker manifest (${{ matrix.image }})
223
+ needs: [preflight, docker-build]
224
+ if: needs.preflight.outputs.is_release == 'true'
225
+ runs-on: ubuntu-latest
226
+ strategy:
227
+ matrix:
228
+ image: [api, web]
229
+ steps:
230
+ - name: Download digests
231
+ uses: actions/download-artifact@v4
232
+ with:
233
+ path: /tmp/digests
234
+ pattern: docker-digest-${{ matrix.image }}-*
235
+ merge-multiple: true
236
+
237
+ - uses: docker/setup-buildx-action@v3
238
+
239
+ - uses: docker/login-action@v3
240
+ with:
241
+ registry: ${{ env.REGISTRY }}
242
+ username: ${{ github.actor }}
243
+ password: ${{ secrets.GITHUB_TOKEN }}
244
+
245
+ - name: Create manifest list and push
246
+ run: |
247
+ IMAGE="${{ env.IMAGE_PREFIX }}-${{ matrix.image }}"
248
+ VERSION="${{ needs.preflight.outputs.version }}"
249
+ docker buildx imagetools create \
250
+ -t "$IMAGE:$VERSION" \
251
+ -t "$IMAGE:latest" \
252
+ $(printf "$IMAGE@sha256:%s " $(ls /tmp/digests/))
253
+
254
+ # ── Job 3: Server deployment tarball ───────────────────────
255
+ server-package:
256
+ name: Server package
257
+ needs: preflight
258
+ if: needs.preflight.outputs.is_release == 'true'
259
+ runs-on: ubuntu-latest
260
+ steps:
261
+ - uses: actions/checkout@v4
262
+
263
+ - name: Build server tarball
264
+ run: |
265
+ VERSION="${{ needs.preflight.outputs.version }}"
266
+ STAGING="observal-server-v${VERSION}"
267
+ mkdir -p "$STAGING/docker/server-package"
268
+ mkdir -p "$STAGING/docker/clickhouse"
269
+ mkdir -p "$STAGING/grafana"
270
+
271
+ # Docker Compose and configs
272
+ cp docker/docker-compose.yml "$STAGING/docker/"
273
+ cp docker/Dockerfile.api "$STAGING/docker/"
274
+ cp docker/Dockerfile.web "$STAGING/docker/"
275
+ cp docker/entrypoint.sh "$STAGING/docker/"
276
+ cp docker/nginx.conf "$STAGING/docker/"
277
+ cp -r docker/clickhouse/ "$STAGING/docker/clickhouse/"
278
+ cp -r docker/server-package/ "$STAGING/docker/server-package/"
279
+
280
+ # Application source
281
+ cp -r observal-server/ "$STAGING/observal-server/"
282
+ cp -r ee/ "$STAGING/ee/"
283
+ cp -r web/ "$STAGING/web/"
284
+ cp -r grafana/ "$STAGING/grafana/"
285
+ cp pyproject.toml "$STAGING/"
286
+ cp otel-collector-config.yaml "$STAGING/"
287
+ cp prometheus.yml "$STAGING/"
288
+ cp .env.example "$STAGING/"
289
+
290
+ tar -czf "observal-server-v${VERSION}.tar.gz" "$STAGING"
291
+
292
+ - uses: actions/upload-artifact@v4
293
+ with:
294
+ name: observal-server-v${{ needs.preflight.outputs.version }}.tar.gz
295
+ path: observal-server-v${{ needs.preflight.outputs.version }}.tar.gz
296
+
297
+ # ── Approval gate (all releases) ────────────────────────────
298
+ approve:
299
+ name: Approval gate
300
+ needs: [preflight, cli-binaries, docker-merge, server-package]
301
+ runs-on: ubuntu-latest
302
+ environment: production
303
+ steps:
304
+ - run: echo "${{ needs.preflight.outputs.bump_type }} release v${{ needs.preflight.outputs.version }} approved"
305
+
306
+ # ── Job 4: PyPI publish (after approval) ───────────────────
307
+ pypi:
308
+ name: Publish to PyPI
309
+ needs: [preflight, approve]
310
+ if: needs.approve.result == 'success'
311
+ runs-on: ubuntu-latest
312
+ environment: pypi
313
+ permissions:
314
+ id-token: write
315
+ steps:
316
+ - uses: actions/checkout@v4
317
+
318
+ - uses: astral-sh/setup-uv@v3
319
+ with:
320
+ enable-cache: true
321
+
322
+ - name: Build sdist and wheel
323
+ run: uv build
324
+
325
+ - name: Publish to PyPI
326
+ uses: pypa/gh-action-pypi-publish@release/v1
327
+
328
+ # ── Final: Create GitHub Release with all artifacts ────────
329
+ release:
330
+ name: GitHub Release
331
+ needs: [preflight, cli-binaries, docker-merge, server-package, pypi, approve]
332
+ if: needs.approve.result == 'success'
333
+ runs-on: ubuntu-latest
334
+ steps:
335
+ - uses: actions/checkout@v4
336
+ with:
337
+ fetch-depth: 0
338
+
339
+ - name: Download release artifacts
340
+ uses: actions/download-artifact@v4
341
+ with:
342
+ path: artifacts
343
+ pattern: observal-*
344
+
345
+ - name: Flatten artifacts
346
+ run: |
347
+ mkdir -p release
348
+ find artifacts -type f \( -name 'observal-*' -o -name '*.tar.gz' \) -exec cp {} release/ \;
349
+
350
+ - name: Generate checksums
351
+ run: |
352
+ cd release
353
+ sha256sum * > checksums.txt
354
+
355
+ - name: Generate release notes
356
+ run: |
357
+ pip install git-cliff
358
+ git-cliff --config cliff.toml --latest --strip header > release/RELEASE_NOTES.md
359
+
360
+ - name: Attest build provenance
361
+ uses: actions/attest-build-provenance@v2
362
+ with:
363
+ subject-path: "release/observal-*"
364
+
365
+ - name: Create GitHub Release
366
+ env:
367
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
368
+ run: |
369
+ VERSION="v${{ needs.preflight.outputs.version }}"
370
+
371
+ gh release create "$VERSION" \
372
+ --draft \
373
+ --title "Observal $VERSION" \
374
+ --notes-file release/RELEASE_NOTES.md \
375
+ --latest \
376
+ release/*
377
+
378
+ - name: Publish release (remove draft)
379
+ env:
380
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
381
+ run: |
382
+ VERSION="v${{ needs.preflight.outputs.version }}"
383
+ gh release edit "$VERSION" --draft=false
@@ -7,13 +7,27 @@ dist/
7
7
  build/
8
8
  .eggs/
9
9
 
10
- # IDE
10
+ # IDE / editor
11
11
  .vscode/
12
12
  .idea/
13
13
  *.swp
14
14
  *.swo
15
15
  *~
16
16
 
17
+ # AI agent / coding tool configs
18
+ .claude/
19
+ CLAUDE.md
20
+ .kiro/
21
+ .cursor/
22
+ .cursorignore
23
+ .cursorindexingignore
24
+ .gemini/
25
+ GEMINI.md
26
+ .opencode/
27
+ .github/copilot-instructions.md
28
+ .copilot/
29
+ .worktrees/
30
+
17
31
  # OS
18
32
  .DS_Store
19
33
  Thumbs.db
@@ -32,10 +46,8 @@ observal-web/dist/
32
46
 
33
47
  # Docker
34
48
  docker/data/
49
+ docker/clickhouse/users.d/default-user.xml
35
50
 
36
- # Local config
37
- .kiro/
38
- .claude/
39
- CLAUDE.md
40
- graphify-out/
41
- observal-web/tsconfig.tsbuildinfo
51
+ # Local / ephemeral
52
+ .playwright-mcp/
53
+ e2e-screenshots/
@@ -24,6 +24,15 @@ repos:
24
24
  - id: no-commit-to-branch
25
25
  args: [--branch, main]
26
26
 
27
+ # ── Secrets / .env guard ───────────────────────────────
28
+ - repo: local
29
+ hooks:
30
+ - id: check-secrets
31
+ name: check for secrets and .env files
32
+ entry: scripts/check_secrets.sh
33
+ language: script
34
+ pass_filenames: false
35
+
27
36
  # ── Alembic migrations ─────────────────────────────────
28
37
  - repo: local
29
38
  hooks:
@@ -34,6 +43,17 @@ repos:
34
43
  files: ^observal-server/alembic/versions/.*\.py$
35
44
  pass_filenames: false
36
45
 
46
+ # ── DCO sign-off (pre-push) ────────────────────────────
47
+ - repo: local
48
+ hooks:
49
+ - id: check-dco
50
+ name: check DCO sign-off on all commits
51
+ entry: scripts/check_dco.sh
52
+ language: script
53
+ always_run: true
54
+ pass_filenames: false
55
+ stages: [pre-push]
56
+
37
57
  # ── Docker ─────────────────────────────────────────────
38
58
  - repo: https://github.com/hadolint/hadolint
39
59
  rev: v2.12.0