runport 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- runport-0.1.0/.dockerignore +23 -0
- runport-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +28 -0
- runport-0.1.0/.github/ISSUE_TEMPLATE/connector_request.md +27 -0
- runport-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- runport-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +12 -0
- runport-0.1.0/.github/dependabot.yml +19 -0
- runport-0.1.0/.github/workflows/ci.yml +164 -0
- runport-0.1.0/.github/workflows/pages.yml +56 -0
- runport-0.1.0/.github/workflows/release.yml +165 -0
- runport-0.1.0/.gitignore +81 -0
- runport-0.1.0/.gitleaksignore +9 -0
- runport-0.1.0/.pre-commit-config.yaml +27 -0
- runport-0.1.0/AGENTS.md +114 -0
- runport-0.1.0/CHANGELOG.md +20 -0
- runport-0.1.0/CODE_OF_CONDUCT.md +126 -0
- runport-0.1.0/CONTRIBUTING.md +74 -0
- runport-0.1.0/Dockerfile +55 -0
- runport-0.1.0/LICENSE +202 -0
- runport-0.1.0/NOTICE +6 -0
- runport-0.1.0/PKG-INFO +342 -0
- runport-0.1.0/README.md +288 -0
- runport-0.1.0/SECURITY.md +39 -0
- runport-0.1.0/assets/readme/architecture-dark.png +0 -0
- runport-0.1.0/assets/readme/architecture-light.png +0 -0
- runport-0.1.0/assets/readme/terminal-dashboard.png +0 -0
- runport-0.1.0/assets/readme/terminal-welcome.png +0 -0
- runport-0.1.0/assets/readme/web-approval.png +0 -0
- runport-0.1.0/assets/readme/web-budget-light.png +0 -0
- runport-0.1.0/assets/readme/web-plan.png +0 -0
- runport-0.1.0/assets/readme/web-results.png +0 -0
- runport-0.1.0/assets/runport-logo-black.png +0 -0
- runport-0.1.0/assets/runport-logo-white.png +0 -0
- runport-0.1.0/assets/runport_logo_ascii.txt +12 -0
- runport-0.1.0/assets/runport_logo_ascii_solid.txt +12 -0
- runport-0.1.0/data/evaluation/synthetic_seed_eval.jsonl +6 -0
- runport-0.1.0/data/evaluation/verified_rag_benchmark.jsonl +16 -0
- runport-0.1.0/data/traces/synthetic_langfuse_traces.csv +5 -0
- runport-0.1.0/data/traces/synthetic_langfuse_traces.json +125 -0
- runport-0.1.0/docs/ARCHITECTURE.md +90 -0
- runport-0.1.0/docs/CANONICAL_TRACE_SCHEMA.md +169 -0
- runport-0.1.0/docs/DECISIONS.md +69 -0
- runport-0.1.0/docs/GLOBAL_PRODUCT_READINESS_AUDIT.md +325 -0
- runport-0.1.0/docs/INVARIANT_TESTS.md +27 -0
- runport-0.1.0/docs/MCP_ARCHITECTURE.md +77 -0
- runport-0.1.0/docs/MULTI_USER_SECURITY_MODEL.md +97 -0
- runport-0.1.0/docs/README.md +38 -0
- runport-0.1.0/docs/ROADMAP_IMPLEMENTATION_AUDIT.md +268 -0
- runport-0.1.0/docs/ROADMAP_RELEASE_PLAN.md +69 -0
- runport-0.1.0/docs/SDK_API_CONTRACT.md +96 -0
- runport-0.1.0/docs/UNIVERSAL_EXECUTION_ARCHITECTURE.md +115 -0
- runport-0.1.0/docs/cli.md +147 -0
- runport-0.1.0/docs/competitive-positioning.md +262 -0
- runport-0.1.0/docs/concepts.md +60 -0
- runport-0.1.0/docs/config-reference.md +124 -0
- runport-0.1.0/docs/connectors/README.md +116 -0
- runport-0.1.0/docs/connectors/dify.md +101 -0
- runport-0.1.0/docs/connectors.md +200 -0
- runport-0.1.0/docs/design/universal-platform-spec.md +302 -0
- runport-0.1.0/docs/faq.md +33 -0
- runport-0.1.0/docs/index.md +37 -0
- runport-0.1.0/docs/metrics.md +174 -0
- runport-0.1.0/docs/quickstart.md +138 -0
- runport-0.1.0/docs/safety.md +131 -0
- runport-0.1.0/docs/web-ui.md +56 -0
- runport-0.1.0/examples/__init__.py +0 -0
- runport-0.1.0/examples/classification/README.md +19 -0
- runport-0.1.0/examples/classification/run.py +78 -0
- runport-0.1.0/examples/classification/synthetic_data.jsonl +5 -0
- runport-0.1.0/examples/dify-workflow/README.md +18 -0
- runport-0.1.0/examples/dify-workflow/run.py +71 -0
- runport-0.1.0/examples/http-workflow/README.md +18 -0
- runport-0.1.0/examples/http-workflow/run.py +62 -0
- runport-0.1.0/examples/knowledge_base/synthetic_kb.md +52 -0
- runport-0.1.0/examples/plugins/__init__.py +0 -0
- runport-0.1.0/examples/plugins/jev_decisions_api/__init__.py +0 -0
- runport-0.1.0/examples/plugins/jev_decisions_api/jev_adapter.py +293 -0
- runport-0.1.0/examples/plugins/jev_decisions_api/jev_payloads.py +171 -0
- runport-0.1.0/examples/plugins/jev_decisions_api/models.py +83 -0
- runport-0.1.0/examples/plugins/jev_decisions_api/tests/test_jev_payloads.py +187 -0
- runport-0.1.0/examples/plugins/kb_audit/__init__.py +0 -0
- runport-0.1.0/examples/plugins/kb_audit/audit/__init__.py +27 -0
- runport-0.1.0/examples/plugins/kb_audit/audit/models.py +121 -0
- runport-0.1.0/examples/plugins/kb_audit/audit/parser.py +290 -0
- runport-0.1.0/examples/plugins/kb_audit/audit/reporter.py +224 -0
- runport-0.1.0/examples/plugins/kb_audit/audit/validator.py +604 -0
- runport-0.1.0/examples/plugins/kb_audit/cli.py +224 -0
- runport-0.1.0/examples/plugins/kb_audit/remediation/__init__.py +19 -0
- runport-0.1.0/examples/plugins/kb_audit/remediation/engine.py +136 -0
- runport-0.1.0/examples/plugins/kb_audit/remediation/models.py +66 -0
- runport-0.1.0/examples/plugins/kb_audit/remediation/registry.py +150 -0
- runport-0.1.0/examples/plugins/kb_audit/tests/conftest.py +10 -0
- runport-0.1.0/examples/plugins/kb_audit/tests/fixtures/synthetic_programmes_kb.md +17 -0
- runport-0.1.0/examples/plugins/kb_audit/tests/test_audit.py +419 -0
- runport-0.1.0/examples/plugins/kb_audit/tests/test_remediation.py +85 -0
- runport-0.1.0/examples/python-callable/README.md +18 -0
- runport-0.1.0/examples/python-callable/eval.jsonl +2 -0
- runport-0.1.0/examples/python-callable/run.py +58 -0
- runport-0.1.0/examples/rag/README.md +20 -0
- runport-0.1.0/examples/rag/documents.jsonl +3 -0
- runport-0.1.0/examples/rag/eval.jsonl +3 -0
- runport-0.1.0/examples/rag/run.py +39 -0
- runport-0.1.0/examples/replay-demo/README.md +19 -0
- runport-0.1.0/examples/replay-demo/fixtures.jsonl +3 -0
- runport-0.1.0/examples/replay-demo/run.py +31 -0
- runport-0.1.0/mkdocs.yml +70 -0
- runport-0.1.0/pyproject.toml +124 -0
- runport-0.1.0/scripts/generate_landing_art.py +315 -0
- runport-0.1.0/scripts/make_ascii_logo.py +77 -0
- runport-0.1.0/src/runport/__init__.py +11 -0
- runport-0.1.0/src/runport/_web/apple-touch-icon.png +0 -0
- runport-0.1.0/src/runport/_web/assets/index-CJJA1jJ3.js +170 -0
- runport-0.1.0/src/runport/_web/assets/index-DDIDJwyV.css +1 -0
- runport-0.1.0/src/runport/_web/favicon-32.png +0 -0
- runport-0.1.0/src/runport/_web/favicon-512.png +0 -0
- runport-0.1.0/src/runport/_web/index.html +20 -0
- runport-0.1.0/src/runport/_web/runport-emblem.png +0 -0
- runport-0.1.0/src/runport/api/__init__.py +5 -0
- runport-0.1.0/src/runport/api/app.py +161 -0
- runport-0.1.0/src/runport/api/routes/budget.py +75 -0
- runport-0.1.0/src/runport/api/routes/datasets.py +130 -0
- runport-0.1.0/src/runport/api/routes/events.py +47 -0
- runport-0.1.0/src/runport/api/routes/models.py +64 -0
- runport-0.1.0/src/runport/api/routes/plan.py +45 -0
- runport-0.1.0/src/runport/api/routes/reports.py +243 -0
- runport-0.1.0/src/runport/api/routes/runs.py +199 -0
- runport-0.1.0/src/runport/api/routes/setup.py +88 -0
- runport-0.1.0/src/runport/api/routes/targets.py +215 -0
- runport-0.1.0/src/runport/catalog/__init__.py +6 -0
- runport-0.1.0/src/runport/catalog/models.py +23 -0
- runport-0.1.0/src/runport/catalog/openrouter.py +171 -0
- runport-0.1.0/src/runport/classification/__init__.py +65 -0
- runport-0.1.0/src/runport/classification/contracts.py +102 -0
- runport-0.1.0/src/runport/classification/metrics.py +236 -0
- runport-0.1.0/src/runport/classification/records.py +157 -0
- runport-0.1.0/src/runport/classification/runner.py +145 -0
- runport-0.1.0/src/runport/classification/splits.py +79 -0
- runport-0.1.0/src/runport/classification/threshold.py +200 -0
- runport-0.1.0/src/runport/classification/validators.py +49 -0
- runport-0.1.0/src/runport/cli/__init__.py +6 -0
- runport-0.1.0/src/runport/cli/commands/__init__.py +5 -0
- runport-0.1.0/src/runport/cli/commands/benchmarks.py +677 -0
- runport-0.1.0/src/runport/cli/commands/budget.py +221 -0
- runport-0.1.0/src/runport/cli/commands/datasets.py +159 -0
- runport-0.1.0/src/runport/cli/commands/init.py +49 -0
- runport-0.1.0/src/runport/cli/commands/models.py +40 -0
- runport-0.1.0/src/runport/cli/commands/plans.py +53 -0
- runport-0.1.0/src/runport/cli/commands/traces.py +180 -0
- runport-0.1.0/src/runport/cli/commands/ui.py +96 -0
- runport-0.1.0/src/runport/cli/main.py +169 -0
- runport-0.1.0/src/runport/connectors/__init__.py +29 -0
- runport-0.1.0/src/runport/connectors/dify.py +422 -0
- runport-0.1.0/src/runport/connectors/flowise.py +50 -0
- runport-0.1.0/src/runport/connectors/http_workflow.py +205 -0
- runport-0.1.0/src/runport/connectors/langflow.py +52 -0
- runport-0.1.0/src/runport/connectors/langgraph.py +48 -0
- runport-0.1.0/src/runport/connectors/mcp.py +920 -0
- runport-0.1.0/src/runport/connectors/n8n.py +44 -0
- runport-0.1.0/src/runport/connectors/ollama.py +156 -0
- runport-0.1.0/src/runport/connectors/openai_compat.py +176 -0
- runport-0.1.0/src/runport/connectors/openrouter.py +110 -0
- runport-0.1.0/src/runport/connectors/python_target.py +167 -0
- runport-0.1.0/src/runport/connectors/registry.py +530 -0
- runport-0.1.0/src/runport/core/__init__.py +1 -0
- runport-0.1.0/src/runport/core/approvers.py +177 -0
- runport-0.1.0/src/runport/core/budget.py +238 -0
- runport-0.1.0/src/runport/core/budget_policy.py +134 -0
- runport-0.1.0/src/runport/core/config.py +177 -0
- runport-0.1.0/src/runport/core/live_guard.py +80 -0
- runport-0.1.0/src/runport/core/plugins.py +43 -0
- runport-0.1.0/src/runport/core/security.py +137 -0
- runport-0.1.0/src/runport/core/workspace.py +359 -0
- runport-0.1.0/src/runport/dataset/__init__.py +18 -0
- runport-0.1.0/src/runport/dataset/leakage.py +150 -0
- runport-0.1.0/src/runport/dataset/manager.py +178 -0
- runport-0.1.0/src/runport/datasets/__init__.py +1 -0
- runport-0.1.0/src/runport/datasets/redaction.py +71 -0
- runport-0.1.0/src/runport/evaluation/__init__.py +10 -0
- runport-0.1.0/src/runport/evaluation/evaluator.py +77 -0
- runport-0.1.0/src/runport/evaluation/replay_scoring.py +97 -0
- runport-0.1.0/src/runport/evaluation/runner.py +128 -0
- runport-0.1.0/src/runport/mcp_server/__init__.py +1 -0
- runport-0.1.0/src/runport/mcp_server/server.py +444 -0
- runport-0.1.0/src/runport/models/__init__.py +1 -0
- runport-0.1.0/src/runport/models/catalog.py +115 -0
- runport-0.1.0/src/runport/models/registry.py +354 -0
- runport-0.1.0/src/runport/observability/__init__.py +1 -0
- runport-0.1.0/src/runport/observability/aggregate.py +262 -0
- runport-0.1.0/src/runport/observability/analysis.py +478 -0
- runport-0.1.0/src/runport/observability/annotation_templates.py +35 -0
- runport-0.1.0/src/runport/observability/budget_audit.py +157 -0
- runport-0.1.0/src/runport/observability/bundle_verify.py +161 -0
- runport-0.1.0/src/runport/observability/events.py +132 -0
- runport-0.1.0/src/runport/observability/export.py +1012 -0
- runport-0.1.0/src/runport/observability/labels.py +84 -0
- runport-0.1.0/src/runport/observability/monitor.py +160 -0
- runport-0.1.0/src/runport/providers/__init__.py +31 -0
- runport-0.1.0/src/runport/providers/base.py +195 -0
- runport-0.1.0/src/runport/providers/http.py +133 -0
- runport-0.1.0/src/runport/providers/openrouter.py +243 -0
- runport-0.1.0/src/runport/rag/__init__.py +23 -0
- runport-0.1.0/src/runport/rag/evaluator.py +79 -0
- runport-0.1.0/src/runport/rag/models.py +99 -0
- runport-0.1.0/src/runport/rag/retriever.py +215 -0
- runport-0.1.0/src/runport/rag/runner.py +311 -0
- runport-0.1.0/src/runport/rag/target.py +76 -0
- runport-0.1.0/src/runport/reports/__init__.py +5 -0
- runport-0.1.0/src/runport/reports/generator.py +207 -0
- runport-0.1.0/src/runport/runs/__init__.py +5 -0
- runport-0.1.0/src/runport/runs/executor.py +352 -0
- runport-0.1.0/src/runport/runs/planner.py +90 -0
- runport-0.1.0/src/runport/runs/replay.py +177 -0
- runport-0.1.0/src/runport/schemas/__init__.py +23 -0
- runport-0.1.0/src/runport/schemas/evaluation.py +114 -0
- runport-0.1.0/src/runport/schemas/execution.py +23 -0
- runport-0.1.0/src/runport/schemas/scoring.py +33 -0
- runport-0.1.0/src/runport/scorers/__init__.py +39 -0
- runport-0.1.0/src/runport/scorers/base.py +41 -0
- runport-0.1.0/src/runport/scorers/classification.py +224 -0
- runport-0.1.0/src/runport/scorers/extraction.py +100 -0
- runport-0.1.0/src/runport/scorers/generation.py +90 -0
- runport-0.1.0/src/runport/scorers/llm_judge.py +143 -0
- runport-0.1.0/src/runport/scorers/match.py +111 -0
- runport-0.1.0/src/runport/scorers/performance.py +136 -0
- runport-0.1.0/src/runport/scorers/stats.py +96 -0
- runport-0.1.0/src/runport/sdk.py +149 -0
- runport-0.1.0/src/runport/services/__init__.py +1 -0
- runport-0.1.0/src/runport/services/approvals.py +174 -0
- runport-0.1.0/src/runport/services/execution.py +322 -0
- runport-0.1.0/src/runport/storage/__init__.py +1 -0
- runport-0.1.0/src/runport/storage/db.py +635 -0
- runport-0.1.0/src/runport/targets/__init__.py +25 -0
- runport-0.1.0/src/runport/targets/base.py +185 -0
- runport-0.1.0/src/runport/traces/__init__.py +23 -0
- runport-0.1.0/src/runport/traces/analyzer.py +276 -0
- runport-0.1.0/src/runport/traces/importer.py +252 -0
- runport-0.1.0/src/runport/traces/models.py +76 -0
- runport-0.1.0/src/runport/traces/reporter.py +98 -0
- runport-0.1.0/src/runport/tui/__init__.py +5 -0
- runport-0.1.0/src/runport/tui/app.py +1000 -0
- runport-0.1.0/src/runport/tui/banner.py +22 -0
- runport-0.1.0/src/runport/tui/components.py +428 -0
- runport-0.1.0/src/runport/tui/health.py +184 -0
- runport-0.1.0/src/runport/tui/input.py +111 -0
- runport-0.1.0/src/runport/tui/live_views.py +991 -0
- runport-0.1.0/src/runport/tui/logo_ascii.py +79 -0
- runport-0.1.0/src/runport/tui/onboarding.py +204 -0
- runport-0.1.0/src/runport/tui/screens.py +1592 -0
- runport-0.1.0/src/runport/tui/telemetry.py +178 -0
- runport-0.1.0/src/runport/tui/theme.py +131 -0
- runport-0.1.0/src/runport/tui/welcome.py +376 -0
- runport-0.1.0/src/runport/workloads/__init__.py +34 -0
- runport-0.1.0/src/runport/workloads/base.py +29 -0
- runport-0.1.0/src/runport/workloads/classification.py +36 -0
- runport-0.1.0/src/runport/workloads/extraction.py +47 -0
- runport-0.1.0/src/runport/workloads/generation.py +32 -0
- runport-0.1.0/src/runport/workloads/rag.py +32 -0
- runport-0.1.0/tests/conftest.py +97 -0
- runport-0.1.0/tests/fixtures/mcp_fixture_server.py +110 -0
- runport-0.1.0/tests/fixtures/mcp_local_target.py +5 -0
- runport-0.1.0/tests/fixtures/openrouter_models_fixture.json +35 -0
- runport-0.1.0/tests/live_fakes.py +70 -0
- runport-0.1.0/tests/obs_helpers.py +136 -0
- runport-0.1.0/tests/registry_helpers.py +13 -0
- runport-0.1.0/tests/test_api_hardened.py +212 -0
- runport-0.1.0/tests/test_approvers.py +63 -0
- runport-0.1.0/tests/test_budget.py +221 -0
- runport-0.1.0/tests/test_budget_policy.py +142 -0
- runport-0.1.0/tests/test_budget_reservations.py +164 -0
- runport-0.1.0/tests/test_capability_registry.py +114 -0
- runport-0.1.0/tests/test_catalog_openrouter.py +100 -0
- runport-0.1.0/tests/test_classification.py +315 -0
- runport-0.1.0/tests/test_cli_execution.py +190 -0
- runport-0.1.0/tests/test_connector_contracts.py +263 -0
- runport-0.1.0/tests/test_connectors.py +266 -0
- runport-0.1.0/tests/test_core_invariants.py +263 -0
- runport-0.1.0/tests/test_dashboard_live.py +359 -0
- runport-0.1.0/tests/test_dataset.py +158 -0
- runport-0.1.0/tests/test_dify_connector.py +69 -0
- runport-0.1.0/tests/test_e2e_generic_runner.py +160 -0
- runport-0.1.0/tests/test_env_config.py +107 -0
- runport-0.1.0/tests/test_honest_scoring.py +221 -0
- runport-0.1.0/tests/test_integrity_security.py +282 -0
- runport-0.1.0/tests/test_key_reader_pty.py +63 -0
- runport-0.1.0/tests/test_landing_connectors.py +39 -0
- runport-0.1.0/tests/test_launcher_pty.py +145 -0
- runport-0.1.0/tests/test_ledger_simulated.py +152 -0
- runport-0.1.0/tests/test_live_safety.py +808 -0
- runport-0.1.0/tests/test_logo_ascii.py +141 -0
- runport-0.1.0/tests/test_mcp_connector.py +291 -0
- runport-0.1.0/tests/test_mcp_server.py +155 -0
- runport-0.1.0/tests/test_model_registry.py +118 -0
- runport-0.1.0/tests/test_observability_analysis.py +176 -0
- runport-0.1.0/tests/test_observability_events.py +130 -0
- runport-0.1.0/tests/test_offline_examples.py +34 -0
- runport-0.1.0/tests/test_onboarding.py +344 -0
- runport-0.1.0/tests/test_plugins.py +18 -0
- runport-0.1.0/tests/test_providers.py +211 -0
- runport-0.1.0/tests/test_rag_benchmark.py +287 -0
- runport-0.1.0/tests/test_redaction.py +35 -0
- runport-0.1.0/tests/test_replay.py +96 -0
- runport-0.1.0/tests/test_runs_engine.py +137 -0
- runport-0.1.0/tests/test_schemas.py +111 -0
- runport-0.1.0/tests/test_scorers_recompute.py +124 -0
- runport-0.1.0/tests/test_scorers_stats.py +71 -0
- runport-0.1.0/tests/test_sdk.py +63 -0
- runport-0.1.0/tests/test_ssrf_security.py +50 -0
- runport-0.1.0/tests/test_trace_export.py +576 -0
- runport-0.1.0/tests/test_traces.py +229 -0
- runport-0.1.0/tests/test_tui.py +940 -0
- runport-0.1.0/tests/test_unresolved_spend.py +88 -0
- runport-0.1.0/tests/test_web_api.py +361 -0
- runport-0.1.0/tests/test_workloads_and_scorers.py +159 -0
- runport-0.1.0/tests/test_workspace.py +73 -0
- runport-0.1.0/uv.lock +2959 -0
- runport-0.1.0/web/docs/app/Article.tsx +209 -0
- runport-0.1.0/web/docs/app/DocsApp.tsx +83 -0
- runport-0.1.0/web/docs/app/Home.tsx +92 -0
- runport-0.1.0/web/docs/app/Layout.tsx +82 -0
- runport-0.1.0/web/docs/app/SearchDialog.tsx +136 -0
- runport-0.1.0/web/docs/app/Sidebar.tsx +122 -0
- runport-0.1.0/web/docs/app/content.ts +144 -0
- runport-0.1.0/web/docs/app/docs.css +273 -0
- runport-0.1.0/web/docs/app/markdown.ts +213 -0
- runport-0.1.0/web/docs/app/router.ts +31 -0
- runport-0.1.0/web/docs/app/site.ts +10 -0
- runport-0.1.0/web/docs/content/approval-policies.md +46 -0
- runport-0.1.0/web/docs/content/architecture.md +46 -0
- runport-0.1.0/web/docs/content/benchmarks.md +30 -0
- runport-0.1.0/web/docs/content/budget-guardrails.md +54 -0
- runport-0.1.0/web/docs/content/classification.md +59 -0
- runport-0.1.0/web/docs/content/cli-budget.md +64 -0
- runport-0.1.0/web/docs/content/cli-commands.md +144 -0
- runport-0.1.0/web/docs/content/cli-examples.md +66 -0
- runport-0.1.0/web/docs/content/cli-overview.md +50 -0
- runport-0.1.0/web/docs/content/common-errors.md +52 -0
- runport-0.1.0/web/docs/content/comparing-runs.md +38 -0
- runport-0.1.0/web/docs/content/contribution-guidelines.md +28 -0
- runport-0.1.0/web/docs/content/cost-analysis.md +65 -0
- runport-0.1.0/web/docs/content/creating-benchmarks.md +100 -0
- runport-0.1.0/web/docs/content/custom-http.md +55 -0
- runport-0.1.0/web/docs/content/dashboards.md +50 -0
- runport-0.1.0/web/docs/content/datasets.md +65 -0
- runport-0.1.0/web/docs/content/development-setup.md +51 -0
- runport-0.1.0/web/docs/content/dify.md +54 -0
- runport-0.1.0/web/docs/content/environment-variables.md +27 -0
- runport-0.1.0/web/docs/content/executing-runs.md +71 -0
- runport-0.1.0/web/docs/content/exporting-traces.md +47 -0
- runport-0.1.0/web/docs/content/extraction.md +36 -0
- runport-0.1.0/web/docs/content/faq.md +44 -0
- runport-0.1.0/web/docs/content/flowise.md +33 -0
- runport-0.1.0/web/docs/content/generation.md +42 -0
- runport-0.1.0/web/docs/content/ground-truth.md +35 -0
- runport-0.1.0/web/docs/content/installation.md +70 -0
- runport-0.1.0/web/docs/content/integrating-projects.md +82 -0
- runport-0.1.0/web/docs/content/introduction.md +40 -0
- runport-0.1.0/web/docs/content/invariants.md +53 -0
- runport-0.1.0/web/docs/content/langflow.md +33 -0
- runport-0.1.0/web/docs/content/langgraph.md +40 -0
- runport-0.1.0/web/docs/content/latency.md +40 -0
- runport-0.1.0/web/docs/content/mcp.md +108 -0
- runport-0.1.0/web/docs/content/n8n.md +38 -0
- runport-0.1.0/web/docs/content/ollama.md +38 -0
- runport-0.1.0/web/docs/content/openai-compatible.md +54 -0
- runport-0.1.0/web/docs/content/openrouter.md +50 -0
- runport-0.1.0/web/docs/content/plugins.md +50 -0
- runport-0.1.0/web/docs/content/provider-configuration.md +33 -0
- runport-0.1.0/web/docs/content/provider-errors.md +46 -0
- runport-0.1.0/web/docs/content/python-integrations.md +49 -0
- runport-0.1.0/web/docs/content/quality-metrics.md +60 -0
- runport-0.1.0/web/docs/content/quickstart.md +68 -0
- runport-0.1.0/web/docs/content/rag-benchmarks.md +41 -0
- runport-0.1.0/web/docs/content/rag-evaluation.md +50 -0
- runport-0.1.0/web/docs/content/reproducibility.md +44 -0
- runport-0.1.0/web/docs/content/running-tests.md +34 -0
- runport-0.1.0/web/docs/content/runs-and-plans.md +64 -0
- runport-0.1.0/web/docs/content/scorers.md +58 -0
- runport-0.1.0/web/docs/content/token-usage.md +28 -0
- runport-0.1.0/web/docs/content/understanding-results.md +57 -0
- runport-0.1.0/web/docs/content/vllm.md +30 -0
- runport-0.1.0/web/docs/content/workspace-file.md +86 -0
- runport-0.1.0/web/docs/index.html +24 -0
- runport-0.1.0/web/docs/main.tsx +12 -0
- runport-0.1.0/web/docs/public/apple-touch-icon.png +0 -0
- runport-0.1.0/web/docs/public/emblem.png +0 -0
- runport-0.1.0/web/docs/public/favicon-32.png +0 -0
- runport-0.1.0/web/docs/public/favicon-512.png +0 -0
- runport-0.1.0/web/docs/public/logo.svg +6 -0
- runport-0.1.0/web/docs/vite-env.d.ts +1 -0
- runport-0.1.0/web/index.html +19 -0
- runport-0.1.0/web/landing/index.html +29 -0
- runport-0.1.0/web/landing/main.tsx +11 -0
- runport-0.1.0/web/landing/public/apple-touch-icon.png +0 -0
- runport-0.1.0/web/landing/public/assets/landing/hero-bg.png +0 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/anthropic.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/crewai.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/deepinfra.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/deepseek.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/dify.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/docker.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/fireworks.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/flowise.png +0 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/gemini.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/githubactions.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/groq.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/huggingface.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/langchain.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/langflow.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/langfuse.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/langgraph.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/llamaindex.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/lmstudio.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/meta.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/mistral.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/n8n.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/ollama.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/openai.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/openrouter.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/python.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/sqlite.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/together.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/logos/vllm.svg +1 -0
- runport-0.1.0/web/landing/public/assets/landing/pricing-1.jpg +0 -0
- runport-0.1.0/web/landing/public/assets/landing/pricing-2.png +0 -0
- runport-0.1.0/web/landing/public/assets/landing/pricing-3.jpg +0 -0
- runport-0.1.0/web/landing/public/assets/landing/runport-emblem.png +0 -0
- runport-0.1.0/web/landing/public/assets/landing/runport-logo-black.png +0 -0
- runport-0.1.0/web/landing/public/assets/landing/runport-logo-white.png +0 -0
- runport-0.1.0/web/landing/public/assets/landing/testimonial-bg.jpg +0 -0
- runport-0.1.0/web/landing/public/favicon-32.png +0 -0
- runport-0.1.0/web/landing/public/favicon-512.png +0 -0
- runport-0.1.0/web/landing/public/logo.svg +6 -0
- runport-0.1.0/web/landing/public/robots.txt +2 -0
- runport-0.1.0/web/package-lock.json +1068 -0
- runport-0.1.0/web/package.json +32 -0
- runport-0.1.0/web/public/apple-touch-icon.png +0 -0
- runport-0.1.0/web/public/favicon-32.png +0 -0
- runport-0.1.0/web/public/favicon-512.png +0 -0
- runport-0.1.0/web/public/runport-emblem.png +0 -0
- runport-0.1.0/web/src/App.tsx +2201 -0
- runport-0.1.0/web/src/components/landing/BenchmarkFlow.tsx +260 -0
- runport-0.1.0/web/src/components/landing/BentoSection.tsx +77 -0
- runport-0.1.0/web/src/components/landing/FAQSection.tsx +67 -0
- runport-0.1.0/web/src/components/landing/FinalCTA.tsx +25 -0
- runport-0.1.0/web/src/components/landing/Footer.tsx +47 -0
- runport-0.1.0/web/src/components/landing/HeroSection.tsx +75 -0
- runport-0.1.0/web/src/components/landing/LandingPage.tsx +45 -0
- runport-0.1.0/web/src/components/landing/MetricsSection.tsx +51 -0
- runport-0.1.0/web/src/components/landing/Navigation.tsx +81 -0
- runport-0.1.0/web/src/components/landing/Pillars.tsx +267 -0
- runport-0.1.0/web/src/components/landing/PlatformSection.tsx +45 -0
- runport-0.1.0/web/src/components/landing/PricingSection.tsx +90 -0
- runport-0.1.0/web/src/components/landing/ProductReveal.tsx +23 -0
- runport-0.1.0/web/src/components/landing/ProductShowcase.tsx +130 -0
- runport-0.1.0/web/src/components/landing/RunAnywhere.tsx +81 -0
- runport-0.1.0/web/src/components/landing/RunIllustrations.tsx +106 -0
- runport-0.1.0/web/src/components/landing/RunportMockups.tsx +312 -0
- runport-0.1.0/web/src/components/landing/SampleChip.tsx +6 -0
- runport-0.1.0/web/src/components/landing/StackCards.tsx +300 -0
- runport-0.1.0/web/src/components/landing/StatementBanner.tsx +41 -0
- runport-0.1.0/web/src/components/landing/graphics/PlanApproval.tsx +44 -0
- runport-0.1.0/web/src/components/landing/graphics/ProductWindow.tsx +258 -0
- runport-0.1.0/web/src/components/landing/graphics/ResultsPanel.tsx +124 -0
- runport-0.1.0/web/src/components/landing/graphics/SpendGuard.tsx +55 -0
- runport-0.1.0/web/src/components/landing/graphics/TargetsOrbit.tsx +109 -0
- runport-0.1.0/web/src/components/landing/graphics/frames.ts +169 -0
- runport-0.1.0/web/src/components/landing/motion.tsx +83 -0
- runport-0.1.0/web/src/components/landing/motionKit.tsx +187 -0
- runport-0.1.0/web/src/data/connectors.ts +69 -0
- runport-0.1.0/web/src/data/ecosystem.ts +133 -0
- runport-0.1.0/web/src/data/landingContent.ts +495 -0
- runport-0.1.0/web/src/data/sampleRun.ts +257 -0
- runport-0.1.0/web/src/index.css +874 -0
- runport-0.1.0/web/src/main.tsx +11 -0
- runport-0.1.0/web/src/styles/bento.css +239 -0
- runport-0.1.0/web/src/styles/landing.css +821 -0
- runport-0.1.0/web/tests/e2e/bento-layout.e2e.mjs +167 -0
- runport-0.1.0/web/tests/frames.test.ts +137 -0
- runport-0.1.0/web/tests/sampleRun.test.ts +80 -0
- runport-0.1.0/web/tsconfig.json +26 -0
- runport-0.1.0/web/tsconfig.node.json +11 -0
- runport-0.1.0/web/vite.config.ts +21 -0
- runport-0.1.0/web/vite.docs.config.ts +19 -0
- runport-0.1.0/web/vite.landing.config.ts +37 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
__pycache__
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*$py.class
|
|
4
|
+
*.so
|
|
5
|
+
.venv
|
|
6
|
+
venv
|
|
7
|
+
env
|
|
8
|
+
.pytest_cache
|
|
9
|
+
.coverage
|
|
10
|
+
htmlcov
|
|
11
|
+
.mypy_cache
|
|
12
|
+
.ruff_cache
|
|
13
|
+
.DS_Store
|
|
14
|
+
.git
|
|
15
|
+
.github
|
|
16
|
+
data/*.db*
|
|
17
|
+
data/*.sqlite*
|
|
18
|
+
/reports
|
|
19
|
+
scratch
|
|
20
|
+
node_modules
|
|
21
|
+
web/node_modules
|
|
22
|
+
web/dist
|
|
23
|
+
docs/PROGRESS*.md
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: Create a report to help us improve Runport
|
|
4
|
+
title: "[BUG] "
|
|
5
|
+
labels: ["bug"]
|
|
6
|
+
assignees: []
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
**Describe the bug**
|
|
10
|
+
A clear and concise description of what the bug is.
|
|
11
|
+
|
|
12
|
+
**To Reproduce**
|
|
13
|
+
Steps to reproduce the behavior:
|
|
14
|
+
1. Run command: `runport ...`
|
|
15
|
+
2. With configuration / dataset: `...`
|
|
16
|
+
3. See error output: `...`
|
|
17
|
+
|
|
18
|
+
**Expected behavior**
|
|
19
|
+
A clear and concise description of what you expected to happen.
|
|
20
|
+
|
|
21
|
+
**Environment details:**
|
|
22
|
+
- OS: [e.g. macOS 14.5, Ubuntu 22.04, Windows 11]
|
|
23
|
+
- Python version: [e.g. 3.11.7, 3.12.3]
|
|
24
|
+
- Runport version: [e.g. 0.1.0]
|
|
25
|
+
- Terminal / Shell: [e.g. zsh, bash, PowerShell]
|
|
26
|
+
|
|
27
|
+
**Additional context**
|
|
28
|
+
Add any other context about the problem here (remember: NEVER include live API keys, bearer tokens, or private dataset records).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Connector Request
|
|
3
|
+
about: Propose support for a new LLM provider, workflow engine, or API protocol
|
|
4
|
+
title: "[CONNECTOR] "
|
|
5
|
+
labels: ["connector", "enhancement"]
|
|
6
|
+
assignees: []
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
**Target System or Service**
|
|
10
|
+
- Name: [e.g. LangGraph Studio, vLLM, Bedrock, Mistral API]
|
|
11
|
+
- Documentation URL:
|
|
12
|
+
- Protocol: [REST / SSE streaming / WebSocket / gRPC / Python library]
|
|
13
|
+
|
|
14
|
+
**Capabilities Supported**
|
|
15
|
+
- [ ] Non-streaming completion
|
|
16
|
+
- [ ] Server-Sent Events (SSE) streaming
|
|
17
|
+
- [ ] Token usage telemetry (prompt / completion tokens)
|
|
18
|
+
- [ ] Native cost reporting
|
|
19
|
+
- [ ] Logprobs / Confidence scores
|
|
20
|
+
- [ ] Structured JSON output schema enforcement
|
|
21
|
+
|
|
22
|
+
**Authentication & Network Security**
|
|
23
|
+
How are credentials provided? (e.g. Header `Authorization: Bearer $ENV_VAR`, query parameter).
|
|
24
|
+
Does the target service support local offline emulation or mock servers?
|
|
25
|
+
|
|
26
|
+
**Reference Implementation or API Snippet**
|
|
27
|
+
Provide a curl command or minimal Python snippet demonstrating request and response payloads.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature Request
|
|
3
|
+
about: Suggest an idea or enhancement for Runport
|
|
4
|
+
title: "[FEATURE] "
|
|
5
|
+
labels: ["enhancement"]
|
|
6
|
+
assignees: []
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
**Is your feature request related to a problem? Please describe.**
|
|
10
|
+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
11
|
+
|
|
12
|
+
**Describe the solution you'd like**
|
|
13
|
+
A clear and concise description of what you want to happen.
|
|
14
|
+
|
|
15
|
+
**Describe alternatives you've considered**
|
|
16
|
+
A clear and concise description of any alternative solutions or features you've considered.
|
|
17
|
+
|
|
18
|
+
**Safety & Invariant Considerations**
|
|
19
|
+
Does this feature interact with budget caps, telemetry privacy, ground-truth annotations, or approval models?
|
|
20
|
+
- [ ] Preserves fail-closed spend caps
|
|
21
|
+
- [ ] Preserves zero-leakage secret scrubbing
|
|
22
|
+
- [ ] Maintains honest provenance (`ACTUAL`, `ESTIMATED`, `UNRESOLVED`, `UNAVAILABLE`)
|
|
23
|
+
- [ ] Offline testable
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
Briefly describe the purpose of this change and link relevant issues.
|
|
3
|
+
|
|
4
|
+
## Checklist
|
|
5
|
+
- [ ] Conforms to repository invariants in `AGENTS.md` and `docs/DECISIONS.md`.
|
|
6
|
+
- [ ] No fabricated telemetry (missing values remain `None` / `UNAVAILABLE`).
|
|
7
|
+
- [ ] Spend limits and preflight plan approvals preserved.
|
|
8
|
+
- [ ] Secrets and API keys are automatically scrubbed from request logs and exports.
|
|
9
|
+
- [ ] Offline tests added under `tests/` with simulated transports.
|
|
10
|
+
- [ ] All tests pass: `uv run pytest` and `uv run pytest examples/plugins`.
|
|
11
|
+
- [ ] Linting and type checking pass: `uv run ruff check` and `uv run mypy`.
|
|
12
|
+
- [ ] No personal paths, usernames, or live credentials committed.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "pip"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "weekly"
|
|
7
|
+
open-pull-requests-limit: 10
|
|
8
|
+
|
|
9
|
+
- package-ecosystem: "npm"
|
|
10
|
+
directory: "/web"
|
|
11
|
+
schedule:
|
|
12
|
+
interval: "weekly"
|
|
13
|
+
open-pull-requests-limit: 10
|
|
14
|
+
|
|
15
|
+
- package-ecosystem: "github-actions"
|
|
16
|
+
directory: "/"
|
|
17
|
+
schedule:
|
|
18
|
+
interval: "weekly"
|
|
19
|
+
open-pull-requests-limit: 10
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
lint:
|
|
15
|
+
name: Lint & Code Style
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout repository
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Set up uv
|
|
22
|
+
uses: astral-sh/setup-uv@v5
|
|
23
|
+
with:
|
|
24
|
+
enable-cache: true
|
|
25
|
+
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: uv sync --extra dev
|
|
28
|
+
|
|
29
|
+
- name: Run Ruff Linter
|
|
30
|
+
run: uv run ruff check
|
|
31
|
+
|
|
32
|
+
- name: Run Ruff Formatter Check
|
|
33
|
+
run: uv run ruff format --check
|
|
34
|
+
|
|
35
|
+
type-check:
|
|
36
|
+
name: Type Check (mypy)
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
steps:
|
|
39
|
+
- name: Checkout repository
|
|
40
|
+
uses: actions/checkout@v4
|
|
41
|
+
|
|
42
|
+
- name: Set up uv
|
|
43
|
+
uses: astral-sh/setup-uv@v5
|
|
44
|
+
with:
|
|
45
|
+
enable-cache: true
|
|
46
|
+
|
|
47
|
+
- name: Install dependencies
|
|
48
|
+
run: uv sync --extra dev
|
|
49
|
+
|
|
50
|
+
- name: Run mypy
|
|
51
|
+
run: uv run mypy
|
|
52
|
+
|
|
53
|
+
security-and-scan:
|
|
54
|
+
name: Security & Legacy Scans
|
|
55
|
+
runs-on: ubuntu-latest
|
|
56
|
+
steps:
|
|
57
|
+
- name: Checkout repository
|
|
58
|
+
uses: actions/checkout@v4
|
|
59
|
+
with:
|
|
60
|
+
fetch-depth: 0
|
|
61
|
+
|
|
62
|
+
- name: Run Gitleaks Scan
|
|
63
|
+
uses: gitleaks/gitleaks-action@v2
|
|
64
|
+
env:
|
|
65
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
66
|
+
|
|
67
|
+
- name: Run Legacy Pattern Scan
|
|
68
|
+
run: |
|
|
69
|
+
echo "Verifying zero legacy tokens outside approved exceptions..."
|
|
70
|
+
# Legacy identifiers from the project's earlier domain. Generic English words ("lead", "intent") were removed:
|
|
71
|
+
# they matched ordinary prose and UI text, so the scan could never pass. References to the approved
|
|
72
|
+
# jev_decisions_api example plugin are allowed wherever they appear.
|
|
73
|
+
MATCHES=$(git ls-files -z | grep -zv -e package-lock -e uv.lock | xargs -0 grep -niIE "msu|jev|admission|whatsapp|user4|counsellor|/Users/" | grep -v -E "(LICENSE:|examples/plugins/jev_decisions_api/|docs/INVARIANT_TESTS.md:|CODE_OF_CONDUCT.md:|jev_decisions_api)" || true)
|
|
74
|
+
if [ -n "$MATCHES" ]; then
|
|
75
|
+
echo "Legacy scan failed! Forbidden patterns found:"
|
|
76
|
+
echo "$MATCHES"
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
echo "Legacy scan passed cleanly."
|
|
80
|
+
|
|
81
|
+
test:
|
|
82
|
+
name: Test (Python ${{ matrix.python-version }} on ${{ matrix.os }})
|
|
83
|
+
runs-on: ${{ matrix.os }}
|
|
84
|
+
strategy:
|
|
85
|
+
fail-fast: false
|
|
86
|
+
matrix:
|
|
87
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
88
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
89
|
+
|
|
90
|
+
steps:
|
|
91
|
+
- name: Checkout repository
|
|
92
|
+
uses: actions/checkout@v4
|
|
93
|
+
|
|
94
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
95
|
+
uses: actions/setup-python@v5
|
|
96
|
+
with:
|
|
97
|
+
python-version: ${{ matrix.python-version }}
|
|
98
|
+
|
|
99
|
+
- name: Set up uv
|
|
100
|
+
uses: astral-sh/setup-uv@v5
|
|
101
|
+
with:
|
|
102
|
+
enable-cache: true
|
|
103
|
+
|
|
104
|
+
- name: Install dependencies
|
|
105
|
+
run: uv sync --extra dev --extra report
|
|
106
|
+
|
|
107
|
+
- name: Run Core Test Suite
|
|
108
|
+
run: uv run pytest -v
|
|
109
|
+
|
|
110
|
+
- name: Run Plugin Test Suite
|
|
111
|
+
run: uv run pytest -v examples/plugins
|
|
112
|
+
|
|
113
|
+
wheel-and-smoke:
|
|
114
|
+
name: Web Build & Wheel Smoke Test
|
|
115
|
+
runs-on: ubuntu-latest
|
|
116
|
+
steps:
|
|
117
|
+
- name: Checkout repository
|
|
118
|
+
uses: actions/checkout@v4
|
|
119
|
+
|
|
120
|
+
- name: Set up Node.js 20
|
|
121
|
+
uses: actions/setup-node@v4
|
|
122
|
+
with:
|
|
123
|
+
node-version: 20
|
|
124
|
+
|
|
125
|
+
- name: Build Web Dashboard
|
|
126
|
+
working-directory: web
|
|
127
|
+
run: |
|
|
128
|
+
npm ci
|
|
129
|
+
# the lockfile was generated on macOS; add Rollup's Linux binary (npm/cli#4828)
|
|
130
|
+
npm install --no-save @rollup/rollup-linux-x64-gnu
|
|
131
|
+
npm run build
|
|
132
|
+
mkdir -p ../src/runport/_web
|
|
133
|
+
cp -r dist/* ../src/runport/_web/
|
|
134
|
+
|
|
135
|
+
- name: Set up Python
|
|
136
|
+
uses: actions/setup-python@v5
|
|
137
|
+
with:
|
|
138
|
+
python-version: "3.11"
|
|
139
|
+
|
|
140
|
+
- name: Set up uv
|
|
141
|
+
uses: astral-sh/setup-uv@v5
|
|
142
|
+
with:
|
|
143
|
+
enable-cache: true
|
|
144
|
+
|
|
145
|
+
- name: Build Wheel
|
|
146
|
+
run: uv build
|
|
147
|
+
|
|
148
|
+
- name: Install Wheel in Isolated Environment
|
|
149
|
+
run: |
|
|
150
|
+
uv venv test-env
|
|
151
|
+
uv pip install --python test-env/bin/python dist/*.whl
|
|
152
|
+
|
|
153
|
+
- name: Smoke Test Wheel CLI & Server
|
|
154
|
+
run: |
|
|
155
|
+
test-env/bin/runport --help
|
|
156
|
+
# Without OPENROUTER_API_KEY the preflight must fail closed (exit 1); CI never has a key.
|
|
157
|
+
if test-env/bin/runport api-preflight; then echo "api-preflight should exit 1 without a key"; exit 1; fi
|
|
158
|
+
test-env/bin/runport budget status
|
|
159
|
+
# Launch background web service and check health
|
|
160
|
+
test-env/bin/runport web --port 8000 &
|
|
161
|
+
PID=$!
|
|
162
|
+
sleep 3
|
|
163
|
+
curl -sf http://127.0.0.1:8000/api/health || (kill $PID && exit 1)
|
|
164
|
+
kill $PID
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Deploy landing page
|
|
2
|
+
|
|
3
|
+
# Builds the public landing page and the docs portal (web/, `npm run build:site`)
|
|
4
|
+
# and publishes them to GitHub Pages at https://<owner>.github.io/Runport/.
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
paths:
|
|
9
|
+
- 'web/**'
|
|
10
|
+
- '.github/workflows/pages.yml'
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
pages: write
|
|
16
|
+
id-token: write
|
|
17
|
+
|
|
18
|
+
concurrency:
|
|
19
|
+
group: pages
|
|
20
|
+
cancel-in-progress: true
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
build:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
defaults:
|
|
26
|
+
run:
|
|
27
|
+
working-directory: web
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
- uses: actions/setup-node@v4
|
|
31
|
+
with:
|
|
32
|
+
node-version: 22
|
|
33
|
+
cache: npm
|
|
34
|
+
cache-dependency-path: web/package-lock.json
|
|
35
|
+
- run: npm ci
|
|
36
|
+
# the lockfile was generated on macOS; add Rollup's Linux binary (npm/cli#4828)
|
|
37
|
+
- run: npm install --no-save @rollup/rollup-linux-x64-gnu
|
|
38
|
+
- run: npm test
|
|
39
|
+
- name: Build landing page and docs
|
|
40
|
+
run: npm run build:site
|
|
41
|
+
env:
|
|
42
|
+
LANDING_BASE: /${{ github.event.repository.name }}/
|
|
43
|
+
VITE_SITE_URL: /${{ github.event.repository.name }}/
|
|
44
|
+
- uses: actions/upload-pages-artifact@v3
|
|
45
|
+
with:
|
|
46
|
+
path: web/dist-landing
|
|
47
|
+
|
|
48
|
+
deploy:
|
|
49
|
+
needs: build
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
environment:
|
|
52
|
+
name: github-pages
|
|
53
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
54
|
+
steps:
|
|
55
|
+
- id: deployment
|
|
56
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
name: Build Distributions & Web Dashboard
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout repository
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 0
|
|
19
|
+
|
|
20
|
+
- name: Set up Node.js 20
|
|
21
|
+
uses: actions/setup-node@v4
|
|
22
|
+
with:
|
|
23
|
+
node-version: 20
|
|
24
|
+
|
|
25
|
+
- name: Build Web Dashboard
|
|
26
|
+
working-directory: web
|
|
27
|
+
run: |
|
|
28
|
+
npm ci
|
|
29
|
+
# The lockfile was generated on macOS; add Rollup's Linux binary (npm/cli#4828)
|
|
30
|
+
npm install --no-save @rollup/rollup-linux-x64-gnu
|
|
31
|
+
npm run build
|
|
32
|
+
mkdir -p ../src/runport/_web
|
|
33
|
+
cp -r dist/* ../src/runport/_web/
|
|
34
|
+
|
|
35
|
+
- name: Set up uv
|
|
36
|
+
uses: astral-sh/setup-uv@v5
|
|
37
|
+
with:
|
|
38
|
+
enable-cache: true
|
|
39
|
+
|
|
40
|
+
- name: Build Distributions (sdist and wheel)
|
|
41
|
+
run: uv build
|
|
42
|
+
|
|
43
|
+
- name: Upload Distribution Artifacts
|
|
44
|
+
uses: actions/upload-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: packages
|
|
47
|
+
path: dist/
|
|
48
|
+
retention-days: 7
|
|
49
|
+
|
|
50
|
+
verify:
|
|
51
|
+
name: Verify Wheel Clean Install (${{ matrix.os }})
|
|
52
|
+
needs: build
|
|
53
|
+
runs-on: ${{ matrix.os }}
|
|
54
|
+
strategy:
|
|
55
|
+
fail-fast: false
|
|
56
|
+
matrix:
|
|
57
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
58
|
+
permissions:
|
|
59
|
+
contents: read
|
|
60
|
+
env:
|
|
61
|
+
PYTHONIOENCODING: utf-8
|
|
62
|
+
PYTHONUTF8: '1'
|
|
63
|
+
steps:
|
|
64
|
+
- name: Set up Python 3.11
|
|
65
|
+
uses: actions/setup-python@v5
|
|
66
|
+
with:
|
|
67
|
+
python-version: '3.11'
|
|
68
|
+
|
|
69
|
+
- name: Download Distribution Artifacts
|
|
70
|
+
uses: actions/download-artifact@v4
|
|
71
|
+
with:
|
|
72
|
+
name: packages
|
|
73
|
+
path: dist/
|
|
74
|
+
|
|
75
|
+
- name: Install Wheel in Isolated Environment
|
|
76
|
+
run: |
|
|
77
|
+
python -m pip install --upgrade pip
|
|
78
|
+
python -c "import glob, subprocess, sys; whl = glob.glob('dist/*.whl')[0]; subprocess.check_call([sys.executable, '-m', 'pip', 'install', whl])"
|
|
79
|
+
|
|
80
|
+
- name: Run CLI Smoke Checks
|
|
81
|
+
run: |
|
|
82
|
+
runport --help
|
|
83
|
+
runport --version
|
|
84
|
+
|
|
85
|
+
- name: Test Workspace Init
|
|
86
|
+
run: |
|
|
87
|
+
python -c "import subprocess, tempfile, os; d = tempfile.mkdtemp(); subprocess.check_call(['runport', 'init'], cwd=d)"
|
|
88
|
+
|
|
89
|
+
- name: Verify Bundled Web Assets
|
|
90
|
+
run: |
|
|
91
|
+
python -c "import runport; from pathlib import Path; p = Path(runport.__file__).parent / '_web' / 'index.html'; assert p.exists(), f'Missing web asset: {p}'; print('Web assets verified.')"
|
|
92
|
+
|
|
93
|
+
publish-pypi:
|
|
94
|
+
name: Publish to PyPI (Trusted Publishing)
|
|
95
|
+
needs: [build, verify]
|
|
96
|
+
runs-on: ubuntu-latest
|
|
97
|
+
environment:
|
|
98
|
+
name: pypi
|
|
99
|
+
url: https://pypi.org/p/runport
|
|
100
|
+
permissions:
|
|
101
|
+
id-token: write # Mandatory for PyPI Trusted Publishing OIDC
|
|
102
|
+
contents: read
|
|
103
|
+
steps:
|
|
104
|
+
- name: Download Distribution Artifacts
|
|
105
|
+
uses: actions/download-artifact@v4
|
|
106
|
+
with:
|
|
107
|
+
name: packages
|
|
108
|
+
path: dist/
|
|
109
|
+
|
|
110
|
+
- name: Publish Package to PyPI
|
|
111
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
112
|
+
with:
|
|
113
|
+
packages-dir: dist/
|
|
114
|
+
|
|
115
|
+
github-release:
|
|
116
|
+
name: Create GitHub Release
|
|
117
|
+
needs: [build, verify, publish-pypi]
|
|
118
|
+
runs-on: ubuntu-latest
|
|
119
|
+
permissions:
|
|
120
|
+
contents: write
|
|
121
|
+
steps:
|
|
122
|
+
- name: Checkout repository
|
|
123
|
+
uses: actions/checkout@v4
|
|
124
|
+
|
|
125
|
+
- name: Download Distribution Artifacts
|
|
126
|
+
uses: actions/download-artifact@v4
|
|
127
|
+
with:
|
|
128
|
+
name: packages
|
|
129
|
+
path: dist/
|
|
130
|
+
|
|
131
|
+
- name: Extract Release Notes & Prerelease Status
|
|
132
|
+
id: release_info
|
|
133
|
+
env:
|
|
134
|
+
TAG: ${{ github.ref_name }}
|
|
135
|
+
run: |
|
|
136
|
+
VERSION=${TAG#v}
|
|
137
|
+
echo "Extracting release notes for version $VERSION..."
|
|
138
|
+
python3 -c "
|
|
139
|
+
import os, re
|
|
140
|
+
tag = os.environ.get('TAG', '')
|
|
141
|
+
ver = tag.lstrip('v')
|
|
142
|
+
base_ver = ver.split('-')[0].split('+')[0]
|
|
143
|
+
content = open('CHANGELOG.md').read() if os.path.exists('CHANGELOG.md') else ''
|
|
144
|
+
pattern = r'## \[' + re.escape(ver) + r'\].*?\n(.*?)(?=\n## \[|\Z)'
|
|
145
|
+
match = re.search(pattern, content, re.DOTALL)
|
|
146
|
+
if not match and base_ver != ver:
|
|
147
|
+
fallback_pattern = r'## \[' + re.escape(base_ver) + r'\].*?\n(.*?)(?=\n## \[|\Z)'
|
|
148
|
+
match = re.search(fallback_pattern, content, re.DOTALL)
|
|
149
|
+
notes = match.group(1).strip() + '\n' if match else f'Release {tag}\n'
|
|
150
|
+
with open('RELEASE_NOTES.md', 'w') as f:
|
|
151
|
+
f.write(notes)
|
|
152
|
+
|
|
153
|
+
is_pre = 'true' if re.search(r'[-_\.]?(alpha|beta|rc|dev|preview|a\d|b\d)', tag, re.I) else 'false'
|
|
154
|
+
print(f'is_prerelease={is_pre}')
|
|
155
|
+
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
|
|
156
|
+
f.write(f'is_prerelease={is_pre}\n')
|
|
157
|
+
"
|
|
158
|
+
|
|
159
|
+
- name: Create GitHub Release
|
|
160
|
+
uses: softprops/action-gh-release@v2
|
|
161
|
+
with:
|
|
162
|
+
body_path: RELEASE_NOTES.md
|
|
163
|
+
files: dist/*
|
|
164
|
+
draft: false
|
|
165
|
+
prerelease: ${{ steps.release_info.outputs.is_prerelease == 'true' }}
|
runport-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Bytecode and build artifacts
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
build/
|
|
7
|
+
dist/
|
|
8
|
+
site/
|
|
9
|
+
*.egg-info/
|
|
10
|
+
*.egg
|
|
11
|
+
|
|
12
|
+
# Virtual environments
|
|
13
|
+
.venv/
|
|
14
|
+
venv/
|
|
15
|
+
env/
|
|
16
|
+
|
|
17
|
+
# Test and coverage caches
|
|
18
|
+
.pytest_cache/
|
|
19
|
+
.coverage
|
|
20
|
+
htmlcov/
|
|
21
|
+
.mypy_cache/
|
|
22
|
+
.ruff_cache/
|
|
23
|
+
|
|
24
|
+
# OS and Editor artifacts
|
|
25
|
+
.DS_Store
|
|
26
|
+
.AppleDouble
|
|
27
|
+
.LSOverride
|
|
28
|
+
Icon
|
|
29
|
+
._*
|
|
30
|
+
.Spotlight-V100
|
|
31
|
+
.Trashes
|
|
32
|
+
.idea/
|
|
33
|
+
.vscode/
|
|
34
|
+
*.swp
|
|
35
|
+
*.swo
|
|
36
|
+
|
|
37
|
+
# Environment and secrets (NEVER COMMIT)
|
|
38
|
+
.env
|
|
39
|
+
.env.*
|
|
40
|
+
*.pem
|
|
41
|
+
*.key
|
|
42
|
+
*.cert
|
|
43
|
+
secrets.json
|
|
44
|
+
|
|
45
|
+
# Local runtime databases, telemetry, and execution outputs (LOCAL ONLY)
|
|
46
|
+
data/*.db
|
|
47
|
+
data/*.db-wal
|
|
48
|
+
data/*.db-shm
|
|
49
|
+
data/*.sqlite*
|
|
50
|
+
data/*.json
|
|
51
|
+
!data/evaluation/
|
|
52
|
+
!data/traces/
|
|
53
|
+
data/classification_prep/
|
|
54
|
+
data/telemetry/
|
|
55
|
+
data/db/
|
|
56
|
+
data/cache/
|
|
57
|
+
/reports/
|
|
58
|
+
|
|
59
|
+
# Scratch and obsolete experiment directories
|
|
60
|
+
scratch/
|
|
61
|
+
experiments/
|
|
62
|
+
|
|
63
|
+
# Node.js and web frontend dependencies
|
|
64
|
+
node_modules/
|
|
65
|
+
web/node_modules/
|
|
66
|
+
web/dist/
|
|
67
|
+
web/dist-landing/
|
|
68
|
+
web/dist-docs/
|
|
69
|
+
|
|
70
|
+
# Progress and local scratch docs
|
|
71
|
+
docs/PROGRESS.md
|
|
72
|
+
docs/SCAN_NOTES.md
|
|
73
|
+
docs/PROGRESS_LOGO.md
|
|
74
|
+
docs/PROGRESS_FINISH.md
|
|
75
|
+
docs/PROGRESS_LANDING.md
|
|
76
|
+
|
|
77
|
+
# Landing-page audit screenshots (third-party reference captures; keep local)
|
|
78
|
+
artifacts/
|
|
79
|
+
|
|
80
|
+
# landing site build output
|
|
81
|
+
web/dist-landing/
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
b2eee1d72bb1e2d282d539f1f13ea7550311540c:examples/plugins/kb_audit/tests/test_audit.py:generic-api-key:398
|
|
2
|
+
c9a351004cd49eb404dfdc998c9a1be9ad1dc8a4:tests/test_env_config.py:generic-api-key:20
|
|
3
|
+
7c2e2ec1afd475226228a0f1c2a602739b42d888:tests/classification/test_dataprep_hardening.py:generic-api-key:156
|
|
4
|
+
60bcfc611a276c980b770c47d1717d52cb30d501:examples/plugins/kb_audit/tests/test_audit.py:generic-api-key:398
|
|
5
|
+
f995bdfdf148294bf95e2a3955376e19d6026f1e:tests/classification/test_real_benchmark.py:generic-api-key:28
|
|
6
|
+
# Placeholder values in docs examples and the landing-page animation (not secrets)
|
|
7
|
+
1179841f06fe5713770e7493f4dd5fe6ad18ebd4:docs/SDK_API_CONTRACT.md:generic-api-key:53
|
|
8
|
+
1179841f06fe5713770e7493f4dd5fe6ad18ebd4:docs/SDK_API_CONTRACT.md:generic-api-key:61
|
|
9
|
+
40abbf0263875dff0f61f22ca0f3f8e229e5b94b:web/src/components/landing/FeatureBento.tsx:generic-api-key:141
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v4.6.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: trailing-whitespace
|
|
6
|
+
exclude: ^web/package-lock\.json$
|
|
7
|
+
- id: end-of-file-fixer
|
|
8
|
+
exclude: ^web/package-lock\.json$
|
|
9
|
+
- id: check-yaml
|
|
10
|
+
args: [--unsafe]
|
|
11
|
+
exclude: ^mkdocs\.yml$
|
|
12
|
+
- id: check-json
|
|
13
|
+
exclude: ^web/package-lock\.json$
|
|
14
|
+
- id: check-added-large-files
|
|
15
|
+
args: [--maxkb=2000]
|
|
16
|
+
|
|
17
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
18
|
+
rev: v0.4.10
|
|
19
|
+
hooks:
|
|
20
|
+
- id: ruff
|
|
21
|
+
args: [--fix]
|
|
22
|
+
- id: ruff-format
|
|
23
|
+
|
|
24
|
+
- repo: https://github.com/gitleaks/gitleaks
|
|
25
|
+
rev: v8.18.4
|
|
26
|
+
hooks:
|
|
27
|
+
- id: gitleaks
|