observal-cli 1.2.0__tar.gz → 1.2.1__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.
- {observal_cli-1.2.0 → observal_cli-1.2.1}/CHANGELOG.md +12 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/PKG-INFO +1 -1
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/auth.py +13 -2
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/sessions.py +3 -2
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/pyproject.toml +1 -1
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/claude_code.py +2 -7
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/cursor.py +2 -7
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/helpers.py +2 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/kiro.py +2 -6
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/pi.py +2 -11
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/uv.lock +1 -1
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_auth.py +1 -1
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_pull.py +51 -31
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/version_check.py +2 -3
- {observal_cli-1.2.0 → observal_cli-1.2.1}/packages/pi-extension/package.json +1 -1
- {observal_cli-1.2.0 → observal_cli-1.2.1}/pyproject.toml +1 -1
- observal_cli-1.2.1/tests/test_sessions_api.py +33 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_version_check.py +29 -2
- {observal_cli-1.2.0 → observal_cli-1.2.1}/uv.lock +1 -1
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/package.json +1 -1
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(auth)/login/page.tsx +7 -14
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(registry)/components/[id]/page.tsx +2 -2
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/layouts/auth-guard.tsx +4 -3
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/layouts/role-guard.tsx +4 -3
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/api.ts +5 -1
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.clabot +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.clabot.license +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.dockerignore +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.editorconfig +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.env.example +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.gitattributes +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.gitbook.yaml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/ISSUE_TEMPLATE/bug_report_form.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/pull_request_template.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/badge-ghcr-pulls.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/ci.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/codeql.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/deploy.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/e2e-frontend.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/gitleaks.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/pr-labels.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/release-enterprise.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/release.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/sbom.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/stale.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/take-command.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/terraform.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.github/workflows/update-homebrew-tap.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.gitignore +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.gitleaks.toml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/.pre-commit-config.yaml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/AGENTS.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/AI_POLICY.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/CLA.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/CODE_OF_CONDUCT.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/CONTRIBUTING.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/LICENSE +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/LICENSES/AGPL-3.0-only.txt +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/LICENSES/LicenseRef-Observal-Enterprise.txt +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/LICENSES/OFL-1.1.txt +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/Makefile +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/REUSE.toml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/SECURITY.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/SETUP.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/cliff.toml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/codecov.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/Dockerfile.api +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/Dockerfile.web +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/clickhouse/config.d/memory.xml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/clickhouse/users.d/memory.xml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/docker-compose.dev.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/docker-compose.enterprise.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/docker-compose.production.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/docker-compose.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/entrypoint.sh +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/nginx.conf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/nginx.dev.conf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/nginx.production.conf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/server-package/docker-compose.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/server-package/env.template +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docker/server-package/setup.sh +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/DEVELOPMENT_GUIDE.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/INSIGHTS_V2_ROADMAP.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/SUMMARY.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/adding-an-ide.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/admin.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/agent.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/auth.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/component.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/config.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/doctor.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/migrate.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/models.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/ops.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/profile.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/prompt.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/pull.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/registry.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/scan.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/self.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/server.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/support.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/cli/uninstall.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/e2e-test-checklist-enterprise.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/e2e-test-checklist.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/getting-started/core-concepts.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/getting-started/installation.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/getting-started/quickstart.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/hooks.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/ObservalLogo-removebg-preview.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/agent-builder.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/agents-list.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/command-palette.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/components-list.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/dashboard.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/errors.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/leaderboard.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/login-local.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/registry-home.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/review.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/session-info-claude-code.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/settings.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/traces.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/images/users.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/audit_logging.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/builder.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/complete_capture_thinking_response.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/component_registry.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/insights.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/leaderboard.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/registry.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/review-diff.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/review.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/ses1.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/span.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/img/traces.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/logo-light.svg +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/logo.svg +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/reference/api-endpoints.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/reference/config-files.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/reference/environment-variables.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/reference/hooks-spec.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/sandboxes.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/screenshots/630-edit-form/01-edit-form-overview.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/screenshots/630-edit-form/02-components-picker.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/screenshots/630-edit-form/03-goal-template.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/screenshots/630-edit-form/04-dirty-state-actions.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/screenshots/630-edit-form/05-version-bump-dialog.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/screenshots/630-edit-form/06-discard-confirm-dialog.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/authentication.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/aws-terraform.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/backup-and-restore.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/configuration.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/databases.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/docker-compose.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/ports-and-volumes.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/releasing.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/requirements.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/telemetry-pipeline.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/troubleshooting.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-hosting/upgrades.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/self-observability.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/use-cases/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/use-cases/debug-agent-failures.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/use-cases/observe-mcp-traffic.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/use-cases/share-agent-configs.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/docs/use-cases/team-registry.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/AGENTS.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/LICENSE +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/docs/cli-sso.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/docs/cli.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/docs/oidc-setup.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/docs/saml-setup.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/docs/scim-setup.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/license.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_insights/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_insights/_deps.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_insights/batch.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_insights/facets.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_insights/generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_insights/html_export.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_insights/sections.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_insights/session_meta_extractor.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_insights/transcript.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/middleware/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/middleware/enterprise_guard.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/routes/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/routes/admin_sso.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/routes/audit.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/routes/exec_dashboard.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/routes/scim.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/routes/sso_saml.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/services/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/services/audit.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/services/config_validator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/services/saml.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/observal_server/services/scim_service.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/plugins/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/ee/scripts/generate_license.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/dashboards/agent-activity.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/dashboards/audit-log.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/dashboards/cost-tracking.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/dashboards/error-rates.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/dashboards/performance-resources.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/dashboards/self-observability.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/dashboards/session-overview.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/dashboards/token-usage.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/dashboards/tool-call-frequency.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/provisioning/dashboards/default.yaml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/provisioning/datasources/clickhouse.yaml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/grafana/provisioning/datasources/prometheus.yaml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/.gitignore +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/.tflint.hcl +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/alb.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/bootstrap/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/bootstrap/main.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/bootstrap/outputs.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/bootstrap/variables.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/bootstrap/versions.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/clickhouse.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/dns.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/ecs.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/examples/minimal/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/examples/minimal/main.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/examples/minimal/outputs.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/examples/minimal/terraform.tfvars.example +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/examples/minimal/variables.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/iam.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/locals.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/logs.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/outputs.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/postgresql.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/redis.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/s3.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/secrets.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/security.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/terraform.tfvars.example +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/user-data.sh.tftpl +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/variables.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/versions.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/infra/terraform/aws/vpc.tf +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/install-server.sh +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/install.sh +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/license-policy.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/alembic/README +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/alembic/env.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/alembic/script.py.mako +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/alembic/versions/.gitkeep +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/alembic/versions/002_drop_visibility.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/alembic/versions/003_skill_registry_direct.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/alembic/versions/004_co_authors.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/alembic/versions/v1_baseline.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/alembic.ini +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/deps.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/graphql.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/middleware/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/middleware/audit.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/middleware/content_type.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/middleware/request_id.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/middleware/trusted_proxy.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/ratelimit.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/admin/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/admin/_router.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/admin/enterprise_settings.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/admin/helpers.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/admin/org.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/admin/retention.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/admin/users.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/agent/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/agent/_router.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/agent/crud.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/agent/draft.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/agent/helpers.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/agent/install.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/agent_versions.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/alert.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/audit.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/bulk.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/co_authors.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/component_source.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/component_versions.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/dashboard.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/device_auth.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/feedback.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/hook.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/ingest.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/insights.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/jwks.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/mcp.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/preview.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/prompt.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/reconcile.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/registry_models.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/review.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/sandbox.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/skill.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/support.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/routes/telemetry.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/api/sanitize.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/data/model_registry_seed.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/database.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/jobs/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/jobs/catalog.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/jobs/maintenance.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/logging_config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/main.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/agent.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/agent_component.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/alert.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/alert_history.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/base.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/component_bundle.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/component_source.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/download.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/enterprise_config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/exec_config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/exporter_config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/feedback.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/hook.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/insight_meta_cache.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/insight_report.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/insight_session_facets.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/insight_session_meta.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/mcp.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/organization.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/password_reset_token.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/prompt.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/saml_config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/sandbox.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/scim_token.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/skill.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/submission.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/user.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/models/user_group.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/pyrightconfig.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/admin.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/agent.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/alert.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/auth.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/bulk.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/component_source.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/component_version.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/constants.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/dashboard.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/feedback.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/hook.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/ide_registry.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/insights.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/mcp.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/models.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/prompt.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/retention.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/sandbox.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/skill.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/schemas/telemetry.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/agent_builder.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/agent_lock_file.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/agent_registry_cache.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/agent_resolver.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/agent_snapshot.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/alert_evaluator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/anti_gaming.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/audit/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/audit/classification.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/audit/helpers.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/audit/setup.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/audit/sink.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/cache.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/clickhouse/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/clickhouse/client.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/clickhouse/insert.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/clickhouse/query.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/clickhouse/schema.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/component_version_extras.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/config/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/config/mcp_builder.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/config/skill_builder.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/config_generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/crypto.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/demo_accounts.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/download_tracker.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/dynamic_settings.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/editing_lock.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/events.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/git_mirror_service.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/hook_config_generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/hook_install_generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/codex.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/copilot.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/copilot_cli.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/gemini_cli.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/load_all.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide/opencode.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ide_feature_inference.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/insights/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/jwt_service.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/log_buffer.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/mcp_validator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/model_catalog.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/model_display.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/model_resolver.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/optic.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/redis.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/registry_telemetry.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/request_context.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/retention.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/sandbox_config_generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/sandbox_validator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/secrets_redactor.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/security_events.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/session_ingest.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/session_parsers/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/session_parsers/base.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/session_parsers/claude_code.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/session_parsers/cursor.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/session_parsers/ingest_classify.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/session_parsers/kiro.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/session_parsers/pi.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/shared/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/shared/ip_utils.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/shared/utils.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/skill_config_generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/skill_validator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/ssrf_guard.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/strategic_insights.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/username_generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/versioning.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/webhook_delivery.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/services/webhook_signer.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/conftest.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_agent_config_gen_versioned.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_agent_pull.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_agent_versions_api.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_anti_gaming.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_component_version_extras.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_component_versions_api.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_crypto.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_exec_dashboard.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_exec_formulas.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_ide_feature_inference.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_jwt.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_multi_tenancy.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_payload_protection.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_rbac.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/tests/test_security_events.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/version.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal-server/worker.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/__main__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/analyzer.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/audit.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/branding.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/client.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_agent.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_co_authors.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_component.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_doctor.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_hook.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_logs.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_mcp.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_migrate.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_models.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_ops.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_profile.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_prompt.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_reconcile.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_sandbox.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_scan.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_server.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_skill.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_support.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_tail_flush.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/cmd_uninstall.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/constants.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/features.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/hooks/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/hooks/_cursor_post_worker.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/hooks/cursor_session_push.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/hooks/kiro_session_push.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/hooks/session_push.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/base.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/claude_code.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/codex.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/copilot.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/copilot_cli.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/cursor.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/gemini_cli.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/kiro.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/load_all.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/opencode.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/pi.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide/protocol.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide_registry.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide_specs/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide_specs/claude_code_hooks_spec.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide_specs/kiro_hooks_spec.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/ide_specs/pi_hooks_spec.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/install_detector.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/main.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/model_catalog.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/optic.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/prompts.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/proxy.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/pyinstaller.spec +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/render.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/requirements.txt +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/sandbox_mcp.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/sandbox_runner.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/server/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/server/backup.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/server/config_gen.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/server/constants.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/server/deps.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/server/orchestrator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/server/updater.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/sessions/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/sessions/base.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/sessions/claude_code.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/sessions/cursor.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/sessions/kiro.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/settings_reconciler.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/shared/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/shared/utils.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/shim.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/skills/observal/SKILL.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/skills/observal/references/commands.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/skills/observal-admin/SKILL.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/skills/observal-advanced/SKILL.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/skills/observal-agents/SKILL.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/skills/observal-ops/SKILL.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/skills/observal-registry/SKILL.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/support/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/support/collectors.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/support/manifest.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/support/redaction.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/telemetry/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/telemetry_buffer.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/tests/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/tests/test_cmd_agent_versions.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/tests/test_cmd_component_versions.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/upgrade_executor.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/observal_cli/upgrade_lock.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/package.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/packages/pi-extension/LICENSE +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/packages/pi-extension/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/packages/pi-extension/extensions/observal.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/packages/pi-extension/package.json.license +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/plans/harness-versioning-draft.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/pnpm-lock.yaml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/pnpm-workspace.yaml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/prometheus.yml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/renovate.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/screenshots/01-review-queue.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/screenshots/02-detail-sheet-mcp.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/screenshots/03-after-bulk-approve.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/screenshots/04-rejection-reason-skills.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/add_spdx_headers.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/check_license_policy.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/check_migrations.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/check_secrets.sh +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/check_vulnerabilities.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/new_migration.sh +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/refresh_model_snapshot.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/seed_exec_dashboard.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/seed_test_skill.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/sync_features.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/sync_observal_skill.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/test_version_e2e.sh +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/test_xff_spoofing.sh +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/update_spdx_copyright.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/scripts/verify_exec_dashboard.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/test-agent.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/__init__.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/conftest.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/agent-edit-form.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/auth.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/component-edit-screenshots.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/components.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/frontend-flows.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/helpers.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/kiro-agent-compat.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/kiro-cli.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/kiro-hooks.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/kiro-lifecycle.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/kiro-live.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/kiro-otlp-logs.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/kiro-otlp-traces.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/kiro-web-agents.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/kiro-web-traces.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/package.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/real-edit-release.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/review-diff-screenshots.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/shim-merge.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/sso-login.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/unarchive-agent.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/e2e/visibility-removal-smoke.spec.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/fixtures/model_display_cases.json +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/fixtures/skills/refactor-guide/SKILL.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/fixtures/skills/security-auditor/SKILL.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/fixtures/skills/test-writer/SKILL.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/mock_mcp.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_agent_builder_skills.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_agent_composition.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_agent_config_generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_agent_name_lookup.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_agent_rbac.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_agent_review.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_agent_snapshot.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_alert_evaluator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_audit_logging.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_auth2_security.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_auth_redis_down.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_bulk.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_bundles.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_cli_errors.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_cli_ide_adapters.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_clickhouse_phase1.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_clickhouse_resource_tuning.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_clickhouse_retention.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_cmd_prompt.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_cmd_support.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_component_version_extras.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_config_generator_utils.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_constants_sync.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_cursor_session_push.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_demo_accounts.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_deployment_guards.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_device_auth.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_docker_detection.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_draft_workflow.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_encryption_fake_keys.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_endpoint_discovery.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_enterprise.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_env_detection_and_config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_events.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_features_sync.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_field_validation.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_git_mirror.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_graphql_phase6.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_health.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_hipaa_audit.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_ide_config_e2e.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_ide_refactor_baseline.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_ide_registry.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_ingest_phase2.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_install_detector.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_integration.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_listing_detail_access.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_mcp_config_parser.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_mcp_edit_submit.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_migrate.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_migrate_telemetry.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_model_display.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_model_registry.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_observal_skill.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_observal_skill_sync.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_optic.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_phase9_10.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_pi_session_parser.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_preview_config.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_proxy_phase4.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_pull_and_agent_cli.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_registry_types.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_resilience.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_retention.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_retention_api.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_retention_endpoints.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_retention_logic.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_retention_service.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_retention_simulation.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_review_queue.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_saml.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_saml_scim_integration.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sanitize.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_scan_kiro_home.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_schema_redesign.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_scim.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec001_002_004_auth_hardening.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec003_ratelimit.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec003_trusted_proxy_middleware.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec005_unsafe_defaults.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec006_password_policy.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec007_graphql_auth.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec009_component_source_ownership.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec009_org_scoping.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec010_agent_listing.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec015_openapi_flags.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec023_cache_isolation.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec024_tenant_scoping.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec027_registry_sc.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_sec028_sso_guards.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_secrets_redactor.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_self_commands.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_server_backup.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_server_upgrade.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_settings_reconciler.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_shim_error_handling.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_skill_config_generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_skill_validator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_ssrf_guard.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_support_bundle_wiring.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_support_collectors.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_support_endpoint.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_support_inspect.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_support_integration.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_support_manifest.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_support_pbt.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_support_redaction.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_telemetry_collection.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_uninstall.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_uninstall_windows.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_upgrade_lock.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_username_generator.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_version_negotiation.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_version_sync.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_versioning.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_webhook_delivery.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_webhook_signer.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_webhook_signer_properties.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tests/test_worker_phase5.py +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/tools/release.sh +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/.gitignore +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/AGENTS.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/README.md +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/eslint.config.mjs +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/next.config.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/playwright.config.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/pnpm-workspace.yaml +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/postcss.config.mjs +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/file.svg +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/fonts/albert-sans-latin-variable.woff2 +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/fonts/albert-sans-latin-variable.woff2.license +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/fonts/archivo-latin-variable.woff2 +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/fonts/archivo-latin-variable.woff2.license +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/fonts/jetbrains-mono-latin-variable.woff2 +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/fonts/jetbrains-mono-latin-variable.woff2.license +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/globe.svg +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/next.svg +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/observal-logo.svg +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/vercel.svg +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/public/window.svg +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/audit-log/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/dashboard/components/adoption-tab.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/dashboard/components/cost-tab.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/dashboard/components/departments-tab.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/dashboard/components/insights-tab.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/dashboard/components/investments-tab.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/dashboard/components/stat-card.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/dashboard/components/velocity-tab.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/dashboard/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/diagnostics/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/errors/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/insights/[reportId]/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/insights/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/layout.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/review/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/security-events/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/settings/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/sso/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(admin)/users/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(auth)/device/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(auth)/layout.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(registry)/agents/[id]/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(registry)/agents/builder/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(registry)/agents/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(registry)/components/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(registry)/layout.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(registry)/leaderboard/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(registry)/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(user)/account/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(user)/layout.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(user)/traces/[id]/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/(user)/traces/page.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/favicon.ico +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/globals.css +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/icon.png +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/layout.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/app/providers.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/account/avatar-upload.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/builder/model-picker.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/builder/preview-panel.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/builder/sortable-component-list.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/builder/validation-panel.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/bar-list.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/dashboard-card.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/dimension-radar.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/export-button.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/latency-heatmap.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/no-data.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/query-error.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/retention-widget.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/score-overview.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/stat-card.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/time-range-select.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/top-items-card.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dashboard/trend-chart.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/dynamic-title.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/layouts/admin-guard.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/layouts/dashboard-shell.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/layouts/page-header.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/nav/command-menu.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/nav/github-star-banner.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/nav/nav-user.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/nav/registry-sidebar.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/agent-card.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/agent-edit-form.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/co-author-input.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/component-card.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/component-edit-form.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/feedback-list.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/ide-badges.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/install-dialog.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/pull-command.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/registry-detail.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/registry-table.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/review-form.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/status-badge.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/submit-component-dialog.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/version-bump-dialog.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/registry/version-dropdown.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/review/review-detail-sheet.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/review/review-diff-sheet.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/review/validation-badges.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/review/yaml-diff-view.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/shared/empty-state.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/shared/error-state.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/shared/retention-warning-banner.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/shared/skeleton-layouts.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/shared/version-mismatch-banner.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/traces/span-tree.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/traces/trace-detail.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/traces/trace-list.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/avatar.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/badge.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/breadcrumb.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/button.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/card.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/checkbox.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/command.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/dialog.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/dropdown-menu.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/input.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/label.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/popover.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/progress.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/resizable.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/scroll-area.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/select.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/separator.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/sheet.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/sidebar.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/skeleton.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/sonner.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/switch.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/table.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/tabs.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/textarea.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/theme-switcher.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/components/ui/tooltip.tsx +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/hooks/use-admin-guard.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/hooks/use-api.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/hooks/use-auth.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/hooks/use-deployment-config.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/hooks/use-ides.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/hooks/use-mobile.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/hooks/use-role-guard.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/export.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/features.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/graphql-ws.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/ide-features.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/mcp-parser.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/model-display.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/query-client.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/types.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/lib/utils.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/src/middleware.ts +0 -0
- {observal_cli-1.2.0 → observal_cli-1.2.1}/web/tsconfig.json +0 -0
|
@@ -10,6 +10,18 @@
|
|
|
10
10
|
|
|
11
11
|
All notable changes to this project will be documented in this file.
|
|
12
12
|
|
|
13
|
+
## [1.2.1] - 2026-05-27
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- minimize login error handling fix (**web**) ([6819685](https://github.com/BlazeUp-AI/Observal/commit/68196858e305187825076c400d97179370aa6902))
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- prevent auth guard flicker on direct URL access (**web**) ([b7eb425](https://github.com/BlazeUp-AI/Observal/commit/b7eb4252f8dd167ff12067be30f3c1b7431833c1))
|
|
22
|
+
- SSO device flow, skill install, version check, UI (**auth,ide,cli,web**) ([5ef6a67](https://github.com/BlazeUp-AI/Observal/commit/5ef6a67269e31a14ab416b9a65ec6286e39ef9a4))
|
|
23
|
+
- 404 denied agent bind (**sessions**) ([a71ba58](https://github.com/BlazeUp-AI/Observal/commit/a71ba58e9a77df0aeb7b96dc5147c27e0abdc745))
|
|
24
|
+
- handle non-JSON login error responses (**web**) ([e0f79ff](https://github.com/BlazeUp-AI/Observal/commit/e0f79ff6f4fc7159744b8a182189ce637edd3675))
|
|
13
25
|
## [1.2.0] - 2026-05-26
|
|
14
26
|
|
|
15
27
|
### Added
|
|
@@ -13,6 +13,7 @@ import logging
|
|
|
13
13
|
import re
|
|
14
14
|
import secrets
|
|
15
15
|
from datetime import UTC, datetime
|
|
16
|
+
from urllib.parse import quote
|
|
16
17
|
|
|
17
18
|
import jwt as pyjwt
|
|
18
19
|
from authlib.integrations.starlette_client import OAuth
|
|
@@ -269,12 +270,17 @@ async def login(request: Request, req: LoginRequest, db: AsyncSession = Depends(
|
|
|
269
270
|
|
|
270
271
|
|
|
271
272
|
@router.get("/oauth/login")
|
|
272
|
-
async def oauth_login(request: Request):
|
|
273
|
+
async def oauth_login(request: Request, next: str | None = None):
|
|
273
274
|
"""Initiates the OAuth SSO flow"""
|
|
274
275
|
optic.debug("oauth_login called")
|
|
275
276
|
if not oauth.oidc:
|
|
276
277
|
raise HTTPException(status_code=500, detail="OAuth is not configured on the server")
|
|
277
278
|
|
|
279
|
+
# Preserve the post-login redirect target (e.g. /device?code=XXXX) across the
|
|
280
|
+
# OAuth round-trip so the user lands on the correct page after SSO completes.
|
|
281
|
+
if next and next.startswith("/") and not next.startswith("//") and "\\" not in next:
|
|
282
|
+
request.session["oauth_next"] = next
|
|
283
|
+
|
|
278
284
|
# Use FRONTEND_URL as the base so the redirect works through the Next.js proxy.
|
|
279
285
|
# This avoids Docker-internal hostnames (e.g. observal-api:8000) leaking into
|
|
280
286
|
# the redirect URI, which would fail Azure AD's redirect URI validation.
|
|
@@ -396,7 +402,12 @@ async def oauth_callback(request: Request, db: AsyncSession = Depends(get_db)):
|
|
|
396
402
|
user_agent=user_agent,
|
|
397
403
|
)
|
|
398
404
|
)
|
|
399
|
-
|
|
405
|
+
# Restore the post-login redirect target that was saved before the OAuth round-trip.
|
|
406
|
+
oauth_next = request.session.pop("oauth_next", None)
|
|
407
|
+
frontend_base = ds.get_sync("deployment.frontend_url", "http://localhost:3000")
|
|
408
|
+
frontend_redirect = f"{frontend_base}/login?code={code}"
|
|
409
|
+
if oauth_next and oauth_next.startswith("/") and not oauth_next.startswith("//") and "\\" not in oauth_next:
|
|
410
|
+
frontend_redirect += f"&next={quote(oauth_next, safe='')}"
|
|
400
411
|
return RedirectResponse(url=frontend_redirect)
|
|
401
412
|
|
|
402
413
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# SPDX-FileCopyrightText: 2026 Shreem Seth <shreemseth26@gmail.com>
|
|
7
7
|
# SPDX-FileCopyrightText: 2026 SrihariLegend <sriharilegend23@gmail.com>
|
|
8
8
|
# SPDX-FileCopyrightText: 2026 Vishnu Muthiah <vishnu.muthiah04@gmail.com>
|
|
9
|
+
# SPDX-FileCopyrightText: 2026 tsitu0 <tomsitu0102@gmail.com>
|
|
9
10
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
10
11
|
|
|
11
12
|
"""Session listing and detail endpoints - backed by session_events table.
|
|
@@ -19,7 +20,7 @@ import asyncio
|
|
|
19
20
|
import logging
|
|
20
21
|
import uuid as _uuid
|
|
21
22
|
|
|
22
|
-
from fastapi import APIRouter, Depends, Query
|
|
23
|
+
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
23
24
|
from fastapi_cache.decorator import cache
|
|
24
25
|
from loguru import logger as optic
|
|
25
26
|
from sqlalchemy import select
|
|
@@ -394,7 +395,7 @@ async def bind_session_agent(
|
|
|
394
395
|
params,
|
|
395
396
|
)
|
|
396
397
|
if not ownership:
|
|
397
|
-
|
|
398
|
+
raise HTTPException(status_code=404, detail="Session not found or access denied")
|
|
398
399
|
|
|
399
400
|
from redis.exceptions import RedisError
|
|
400
401
|
|
|
@@ -12,7 +12,6 @@ from services.ide import ConfigContext, register_adapter
|
|
|
12
12
|
from services.ide.helpers import (
|
|
13
13
|
_claude_code_hooks_frontmatter_lines,
|
|
14
14
|
_collect_hook_script_files,
|
|
15
|
-
_generate_skill_file,
|
|
16
15
|
_model_name_to_frontmatter,
|
|
17
16
|
)
|
|
18
17
|
|
|
@@ -77,18 +76,14 @@ class ClaudeCodeAdapter:
|
|
|
77
76
|
|
|
78
77
|
agent_path = IDE_REGISTRY["claude-code"]["rules_file"][scope].format(name=safe_name)
|
|
79
78
|
|
|
80
|
-
skill_files = [_generate_skill_file(s, "claude-code", scope) for s in skill_configs]
|
|
81
|
-
skill_files = [f for f in skill_files if f]
|
|
82
|
-
|
|
83
79
|
result: dict = {
|
|
84
80
|
"rules_file": {"path": agent_path, "content": agent_content},
|
|
85
81
|
"mcp_config": claude_mcps,
|
|
86
82
|
"mcp_setup_commands": setup_commands,
|
|
87
83
|
"scope": scope,
|
|
88
84
|
}
|
|
89
|
-
if
|
|
90
|
-
result["
|
|
91
|
-
result["skill_components"] = [s for s in skill_configs if s.get("git_url")]
|
|
85
|
+
if skill_configs:
|
|
86
|
+
result["skill_components"] = skill_configs
|
|
92
87
|
|
|
93
88
|
cc_hook_files = _collect_hook_script_files(hook_configs, ctx.hook_listings, "claude-code")
|
|
94
89
|
if cc_hook_files:
|
|
@@ -12,7 +12,6 @@ from services.ide import ConfigContext, register_adapter
|
|
|
12
12
|
from services.ide.helpers import (
|
|
13
13
|
_collect_hook_script_files,
|
|
14
14
|
_cursor_hooks_config,
|
|
15
|
-
_generate_skill_file,
|
|
16
15
|
_merge_hook_components_into_config,
|
|
17
16
|
)
|
|
18
17
|
|
|
@@ -42,9 +41,6 @@ class CursorAdapter:
|
|
|
42
41
|
mcp_paths = spec.get("mcp_config_path", {})
|
|
43
42
|
mcp_path = mcp_paths.get(ide_scope, next(iter(mcp_paths.values()), ".mcp.json"))
|
|
44
43
|
|
|
45
|
-
skill_files = [_generate_skill_file(s, "cursor", ide_scope) for s in skill_configs]
|
|
46
|
-
skill_files = [f for f in skill_files if f]
|
|
47
|
-
|
|
48
44
|
# Cursor uses .cursor/agents/<name>.md for subagent registration
|
|
49
45
|
# and .cursor/rules/<name>.mdc for context rules
|
|
50
46
|
desc_line = (ctx.agent.description or safe_name).replace("\n", " ").strip()[:200]
|
|
@@ -75,9 +71,8 @@ class CursorAdapter:
|
|
|
75
71
|
hook_files = _collect_hook_script_files(hook_configs, ctx.hook_listings, "cursor")
|
|
76
72
|
if hook_files:
|
|
77
73
|
result["hook_files"] = hook_files
|
|
78
|
-
if
|
|
79
|
-
result["
|
|
80
|
-
result["skill_components"] = [s for s in skill_configs if s.get("git_url")]
|
|
74
|
+
if skill_configs:
|
|
75
|
+
result["skill_components"] = skill_configs
|
|
81
76
|
if ctx.compatibility_warnings:
|
|
82
77
|
result["_warnings"] = ctx.compatibility_warnings
|
|
83
78
|
|
|
@@ -432,6 +432,8 @@ def _build_skill_configs(
|
|
|
432
432
|
"git_ref": getattr(listing, "git_ref", None) or "main",
|
|
433
433
|
"skill_path": getattr(listing, "skill_path", None) or "/",
|
|
434
434
|
"skill_md_content": getattr(listing, "skill_md_content", None),
|
|
435
|
+
"script_content": getattr(listing, "script_content", None),
|
|
436
|
+
"script_filename": getattr(listing, "script_filename", None),
|
|
435
437
|
}
|
|
436
438
|
)
|
|
437
439
|
|
|
@@ -12,7 +12,6 @@ from services.ide import ConfigContext, register_adapter
|
|
|
12
12
|
from services.ide.helpers import (
|
|
13
13
|
_KIRO_EVENT_MAP,
|
|
14
14
|
_collect_hook_script_files,
|
|
15
|
-
_generate_skill_file,
|
|
16
15
|
_wrap_kiro_prompt,
|
|
17
16
|
)
|
|
18
17
|
|
|
@@ -102,11 +101,8 @@ class KiroAdapter:
|
|
|
102
101
|
"scope": kiro_scope,
|
|
103
102
|
}
|
|
104
103
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if skill_files:
|
|
108
|
-
result["skill_files"] = skill_files
|
|
109
|
-
result["skill_components"] = [s for s in skill_configs if s.get("git_url")]
|
|
104
|
+
if skill_configs:
|
|
105
|
+
result["skill_components"] = skill_configs
|
|
110
106
|
|
|
111
107
|
kiro_hook_files = _collect_hook_script_files(hook_configs, ctx.hook_listings, "kiro")
|
|
112
108
|
if kiro_hook_files:
|
|
@@ -15,7 +15,6 @@ from loguru import logger
|
|
|
15
15
|
|
|
16
16
|
from schemas.ide_registry import IDE_REGISTRY
|
|
17
17
|
from services.ide import ConfigContext, register_adapter
|
|
18
|
-
from services.ide.helpers import _generate_skill_file
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
class PiAdapter:
|
|
@@ -60,16 +59,8 @@ class PiAdapter:
|
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
# ── Skills ──
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
entry = _generate_skill_file(skill, "pi")
|
|
66
|
-
if entry:
|
|
67
|
-
skill_files.append(entry)
|
|
68
|
-
if skill_files:
|
|
69
|
-
result["skill_files"] = skill_files
|
|
70
|
-
|
|
71
|
-
# Pi doesn't use command-based hooks - telemetry is via observal-pi
|
|
72
|
-
# No hook files to generate.
|
|
62
|
+
if ctx.skill_configs:
|
|
63
|
+
result["skill_components"] = ctx.skill_configs
|
|
73
64
|
|
|
74
65
|
return result
|
|
75
66
|
|
|
@@ -195,7 +195,7 @@ def login(
|
|
|
195
195
|
if sso_available:
|
|
196
196
|
rprint(" [2] SSO (opens browser)")
|
|
197
197
|
rprint(" [3] Sign in via browser")
|
|
198
|
-
choice = text_input("Login method"
|
|
198
|
+
choice = text_input("Login method")
|
|
199
199
|
if (choice == "2" and sso_available) or choice == "3":
|
|
200
200
|
sso_mode = True
|
|
201
201
|
|
|
@@ -553,44 +553,64 @@ def register_pull(app: typer.Typer):
|
|
|
553
553
|
os.chmod(p, 0o755)
|
|
554
554
|
written.append((str(p), "updated" if existed else "created"))
|
|
555
555
|
|
|
556
|
-
# ──
|
|
557
|
-
#
|
|
558
|
-
|
|
556
|
+
# ── Skills ────────────────────────────────────
|
|
557
|
+
# Two install modes:
|
|
558
|
+
# 1. git_url present → clone full skill directory from git
|
|
559
|
+
# 2. skill_md_content present (registry_direct) → write SKILL.md + optional script
|
|
560
|
+
from observal_cli.cmd_skill import _sanitize_name, install_skill_from_git, install_skill_registry_direct
|
|
559
561
|
|
|
560
562
|
skill_components = snippet.get("skill_components") or []
|
|
561
|
-
|
|
563
|
+
failed_skills: list[str] = []
|
|
562
564
|
scope_str = "user" if is_user_scope else "project"
|
|
563
565
|
for sc in skill_components:
|
|
566
|
+
sc_name = _sanitize_name(sc.get("name", "skill"))
|
|
567
|
+
git_url = sc.get("git_url")
|
|
568
|
+
|
|
564
569
|
if dry_run:
|
|
565
|
-
|
|
566
|
-
written.append((f"<skill:{sc_name}>",
|
|
567
|
-
cloned_skills.add(sc_name)
|
|
568
|
-
continue
|
|
569
|
-
result_path = install_skill_from_git(
|
|
570
|
-
name=sc.get("name", "skill"),
|
|
571
|
-
git_url=sc.get("git_url"),
|
|
572
|
-
skill_path=sc.get("skill_path", "/"),
|
|
573
|
-
git_ref=sc.get("git_ref", "main"),
|
|
574
|
-
ide=ide,
|
|
575
|
-
scope=scope_str,
|
|
576
|
-
skill_md_content=sc.get("skill_md_content"),
|
|
577
|
-
cwd=target_dir,
|
|
578
|
-
)
|
|
579
|
-
if result_path:
|
|
580
|
-
written.append((str(result_path), "cloned"))
|
|
581
|
-
cloned_skills.add(_sanitize_name(sc.get("name", "skill")))
|
|
582
|
-
|
|
583
|
-
# Only write skill_files for skills that weren't successfully installed
|
|
584
|
-
for sf in snippet.get("skill_files") or []:
|
|
585
|
-
sf_name = Path(sf["path"]).parent.name
|
|
586
|
-
if sf_name in cloned_skills:
|
|
570
|
+
mode = "would clone" if git_url else "would write"
|
|
571
|
+
written.append((f"<skill:{sc_name}>", mode))
|
|
587
572
|
continue
|
|
588
|
-
|
|
589
|
-
if
|
|
590
|
-
|
|
573
|
+
|
|
574
|
+
if git_url:
|
|
575
|
+
result_path = install_skill_from_git(
|
|
576
|
+
name=sc.get("name", "skill"),
|
|
577
|
+
git_url=git_url,
|
|
578
|
+
skill_path=sc.get("skill_path", "/"),
|
|
579
|
+
git_ref=sc.get("git_ref", "main"),
|
|
580
|
+
ide=ide,
|
|
581
|
+
scope=scope_str,
|
|
582
|
+
skill_md_content=sc.get("skill_md_content"),
|
|
583
|
+
cwd=target_dir,
|
|
584
|
+
)
|
|
585
|
+
if result_path:
|
|
586
|
+
written.append((str(result_path), "cloned"))
|
|
587
|
+
else:
|
|
588
|
+
failed_skills.append(sc_name)
|
|
589
|
+
rprint(f"[red]\u2717 Failed to install skill '{sc_name}'.[/red] Clone from {git_url} failed.")
|
|
591
590
|
else:
|
|
592
|
-
|
|
593
|
-
|
|
591
|
+
# Registry direct: SKILL.md content + optional script
|
|
592
|
+
result_path = install_skill_registry_direct(
|
|
593
|
+
name=sc.get("name", "skill"),
|
|
594
|
+
skill_md_content=sc.get("skill_md_content"),
|
|
595
|
+
script_content=sc.get("script_content"),
|
|
596
|
+
script_filename=sc.get("script_filename"),
|
|
597
|
+
ide=ide,
|
|
598
|
+
scope=scope_str,
|
|
599
|
+
cwd=target_dir,
|
|
600
|
+
)
|
|
601
|
+
if result_path:
|
|
602
|
+
written.append((str(result_path), "installed"))
|
|
603
|
+
else:
|
|
604
|
+
failed_skills.append(sc_name)
|
|
605
|
+
rprint(f"[red]\u2717 Failed to install skill '{sc_name}'.[/red] No content available.")
|
|
606
|
+
|
|
607
|
+
if failed_skills:
|
|
608
|
+
rprint()
|
|
609
|
+
rprint("[red]Skill installation failed.[/red] The following skills could not be installed:")
|
|
610
|
+
for fs in failed_skills:
|
|
611
|
+
rprint(f" [red]\u2022[/red] {fs}")
|
|
612
|
+
rprint()
|
|
613
|
+
raise typer.Exit(1)
|
|
594
614
|
|
|
595
615
|
# ── Agent marker (all IDEs) ─────────────────────────
|
|
596
616
|
# Write <target_dir>/.observal/agent so session_push hooks can attribute
|
|
@@ -567,13 +567,12 @@ def check_version_compatibility(server_url: str) -> None:
|
|
|
567
567
|
if cli_ver_str == "0.0.0":
|
|
568
568
|
return # dev install, skip check
|
|
569
569
|
|
|
570
|
-
#
|
|
570
|
+
# Use cache if fresh (< 60s), otherwise fetch live.
|
|
571
571
|
server_ver = None
|
|
572
572
|
cache = _read_cache()
|
|
573
|
-
if cache and cache.get("server_version") and cache.get("source") == "server":
|
|
573
|
+
if cache and cache.get("server_version") and cache.get("source") == "server" and not _should_check(cache, 60):
|
|
574
574
|
server_ver = cache["server_version"]
|
|
575
575
|
|
|
576
|
-
# Fall back to a fresh fetch if cache doesn't have it
|
|
577
576
|
if not server_ver:
|
|
578
577
|
try:
|
|
579
578
|
resp = httpx.get(f"{server_url.rstrip('/')}/api/v1/config/version", timeout=5)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 Hari Srinivasan <harisrini21@gmail.com>
|
|
2
|
+
# SPDX-FileCopyrightText: 2026 tsitu0 <tomsitu0102@gmail.com>
|
|
3
|
+
# SPDX-License-Identifier: AGPL-3.0-only
|
|
4
|
+
|
|
5
|
+
import uuid
|
|
6
|
+
from unittest.mock import AsyncMock, MagicMock, patch
|
|
7
|
+
|
|
8
|
+
import pytest
|
|
9
|
+
from fastapi import HTTPException
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _user(role="user"):
|
|
13
|
+
from models.user import User, UserRole
|
|
14
|
+
|
|
15
|
+
user = MagicMock(spec=User)
|
|
16
|
+
user.id = uuid.uuid4()
|
|
17
|
+
user.role = getattr(UserRole, role)
|
|
18
|
+
return user
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@pytest.mark.asyncio
|
|
22
|
+
async def test_bind_session_agent_denied_raises_404():
|
|
23
|
+
"""Mutation access failures should use HTTP errors, matching other ownership checks."""
|
|
24
|
+
from api.routes.sessions import bind_session_agent
|
|
25
|
+
|
|
26
|
+
with (
|
|
27
|
+
patch("api.routes.sessions._ch_json", new=AsyncMock(return_value=[])),
|
|
28
|
+
pytest.raises(HTTPException) as exc,
|
|
29
|
+
):
|
|
30
|
+
await bind_session_agent("session-123", agent_name="agent", current_user=_user())
|
|
31
|
+
|
|
32
|
+
assert exc.value.status_code == 404
|
|
33
|
+
assert exc.value.detail == "Session not found or access denied"
|
|
@@ -359,9 +359,17 @@ class TestCheckVersionCompatibility:
|
|
|
359
359
|
with pytest.raises(Exit):
|
|
360
360
|
version_check.check_version_compatibility("http://localhost:8000")
|
|
361
361
|
|
|
362
|
-
def
|
|
362
|
+
def test_uses_short_ttl_cache(self, monkeypatch):
|
|
363
|
+
"""Cache younger than 60s is trusted, skipping network."""
|
|
364
|
+
import time
|
|
365
|
+
|
|
363
366
|
monkeypatch.setattr(version_check, "get_current_version", lambda: "1.0.0")
|
|
364
|
-
|
|
367
|
+
fresh_cache = {
|
|
368
|
+
"server_version": "1.0.5",
|
|
369
|
+
"source": "server",
|
|
370
|
+
"last_checked": time.strftime("%Y-%m-%dT%H:%M:%S+00:00"),
|
|
371
|
+
}
|
|
372
|
+
monkeypatch.setattr(version_check, "_read_cache", lambda: fresh_cache)
|
|
365
373
|
network_called = {"hit": False}
|
|
366
374
|
|
|
367
375
|
def mock_get(*args, **kwargs):
|
|
@@ -372,6 +380,25 @@ class TestCheckVersionCompatibility:
|
|
|
372
380
|
version_check.check_version_compatibility("http://localhost:8000")
|
|
373
381
|
assert network_called["hit"] is False
|
|
374
382
|
|
|
383
|
+
def test_fetches_when_cache_stale(self, monkeypatch):
|
|
384
|
+
"""Cache older than 60s triggers a fresh fetch."""
|
|
385
|
+
monkeypatch.setattr(version_check, "get_current_version", lambda: "1.0.0")
|
|
386
|
+
stale_cache = {
|
|
387
|
+
"server_version": "1.0.5",
|
|
388
|
+
"source": "server",
|
|
389
|
+
"last_checked": "2020-01-01T00:00:00+00:00",
|
|
390
|
+
}
|
|
391
|
+
monkeypatch.setattr(version_check, "_read_cache", lambda: stale_cache)
|
|
392
|
+
network_called = {"hit": False}
|
|
393
|
+
|
|
394
|
+
def mock_get(*args, **kwargs):
|
|
395
|
+
network_called["hit"] = True
|
|
396
|
+
return httpx.Response(200, json={"server_version": "1.0.5"})
|
|
397
|
+
|
|
398
|
+
monkeypatch.setattr(httpx, "get", mock_get)
|
|
399
|
+
version_check.check_version_compatibility("http://localhost:8000")
|
|
400
|
+
assert network_called["hit"] is True
|
|
401
|
+
|
|
375
402
|
|
|
376
403
|
# ── Auto-update tests ───────────────────────────────────────────
|
|
377
404
|
|
|
@@ -48,19 +48,8 @@ function LoginContent() {
|
|
|
48
48
|
setLoading(true);
|
|
49
49
|
window.history.replaceState({}, "", "/login");
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
headers: { "Content-Type": "application/json" },
|
|
54
|
-
body: JSON.stringify({ code: ssoCode }),
|
|
55
|
-
})
|
|
56
|
-
.then(async (res) => {
|
|
57
|
-
if (!res.ok) {
|
|
58
|
-
const text = await res.text().catch(() => res.statusText);
|
|
59
|
-
throw new Error(text);
|
|
60
|
-
}
|
|
61
|
-
return res.json();
|
|
62
|
-
})
|
|
63
|
-
.then((data: { access_token: string; refresh_token: string; user: { role: string; name: string; email: string; username?: string; avatar_url?: string | null } }) => {
|
|
51
|
+
auth.exchangeCode({ code: ssoCode })
|
|
52
|
+
.then((data) => {
|
|
64
53
|
setTokens(data.access_token, data.refresh_token);
|
|
65
54
|
setUserRole(data.user.role);
|
|
66
55
|
setUserName(data.user.name);
|
|
@@ -159,7 +148,11 @@ function LoginContent() {
|
|
|
159
148
|
|
|
160
149
|
function handleSsoLogin() {
|
|
161
150
|
setSsoLoading(true);
|
|
162
|
-
|
|
151
|
+
const nextParam = searchParams.get("next");
|
|
152
|
+
const url = nextParam && nextParam.startsWith("/")
|
|
153
|
+
? `/api/v1/auth/oauth/login?next=${encodeURIComponent(nextParam)}`
|
|
154
|
+
: "/api/v1/auth/oauth/login";
|
|
155
|
+
window.location.href = url;
|
|
163
156
|
}
|
|
164
157
|
|
|
165
158
|
if (mustChangePassword) {
|
|
@@ -166,7 +166,7 @@ export default function ComponentDetailPage({ params }: { params: Promise<{ id:
|
|
|
166
166
|
{/* Grid: Main + Sidebar */}
|
|
167
167
|
<div className="grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-8 items-start">
|
|
168
168
|
{/* Tabs */}
|
|
169
|
-
<Tabs defaultValue="overview">
|
|
169
|
+
<Tabs defaultValue="overview" className="min-w-0">
|
|
170
170
|
<TabsList>
|
|
171
171
|
<TabsTrigger value="overview">Overview</TabsTrigger>
|
|
172
172
|
<TabsTrigger value="reviews">
|
|
@@ -518,7 +518,7 @@ function ComponentMetadata({ item }: { item: RegistryItem }) {
|
|
|
518
518
|
<h3 className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
519
519
|
{skillMd ? "Skill File" : "Prompt Template"}
|
|
520
520
|
</h3>
|
|
521
|
-
<div className="rounded-md border border-border bg-muted/20 p-4 overflow-y-auto max-h-[
|
|
521
|
+
<div className="rounded-md border border-border bg-muted/20 p-4 overflow-y-auto max-h-[360px]">
|
|
522
522
|
<div className="prose prose-sm dark:prose-invert max-w-none text-foreground/90 leading-relaxed">
|
|
523
523
|
<ReactMarkdown remarkPlugins={[remarkGfm]}>{markdownContent}</ReactMarkdown>
|
|
524
524
|
</div>
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
import { useAuthGuard, useOptionalAuth } from "@/hooks/use-auth";
|
|
7
7
|
|
|
8
8
|
export function AuthGuard({ children }: { children: React.ReactNode }) {
|
|
9
|
-
useAuthGuard();
|
|
10
|
-
//
|
|
11
|
-
//
|
|
9
|
+
const { ready } = useAuthGuard();
|
|
10
|
+
// Block rendering until auth state is confirmed to prevent flicker
|
|
11
|
+
// of protected content before redirect
|
|
12
|
+
if (!ready) return <div className="flex h-screen w-full items-center justify-center" />;
|
|
12
13
|
return <>{children}</>;
|
|
13
14
|
}
|
|
14
15
|
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
import { useRoleGuard, type Role } from "@/hooks/use-role-guard";
|
|
8
8
|
|
|
9
9
|
export function RoleGuard({ minRole, children }: { minRole: Role; children: React.ReactNode }) {
|
|
10
|
-
useRoleGuard(minRole);
|
|
11
|
-
//
|
|
12
|
-
//
|
|
10
|
+
const { ready } = useRoleGuard(minRole);
|
|
11
|
+
// Block rendering until role is confirmed to prevent flicker
|
|
12
|
+
// of protected content before redirect
|
|
13
|
+
if (!ready) return <div className="flex h-screen w-full items-center justify-center" />;
|
|
13
14
|
return <>{children}</>;
|
|
14
15
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
// SPDX-FileCopyrightText: 2026 Aryan Iyappan <aryaniyappan2006@gmail.com>
|
|
2
3
|
// SPDX-FileCopyrightText: 2026 Harishankar <harishankar0301@gmail.com>
|
|
3
4
|
// SPDX-FileCopyrightText: 2026 Hari Srinivasan <harisrini21@gmail.com>
|
|
@@ -263,7 +264,10 @@ async function request<T = unknown>(
|
|
|
263
264
|
: JSON.stringify(parsed.error);
|
|
264
265
|
}
|
|
265
266
|
} catch {
|
|
266
|
-
// not JSON, use raw text
|
|
267
|
+
// not JSON, use raw text unless it's HTML or a 5xx error
|
|
268
|
+
if (response.status >= 500 || text.trim().startsWith("<")) {
|
|
269
|
+
detail = "Unable to reach the server. Please try again later.";
|
|
270
|
+
}
|
|
267
271
|
}
|
|
268
272
|
const err = new Error(detail);
|
|
269
273
|
(err as Error & { status: number }).status = response.status;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|