xorcise 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.
- xorcise-0.1.0/.env.example +34 -0
- xorcise-0.1.0/.github/CODEOWNERS +26 -0
- xorcise-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +126 -0
- xorcise-0.1.0/.github/ISSUE_TEMPLATE/config.yml +26 -0
- xorcise-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +85 -0
- xorcise-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +90 -0
- xorcise-0.1.0/.github/codeql/codeql-config.yml +11 -0
- xorcise-0.1.0/.github/dependabot.yml +101 -0
- xorcise-0.1.0/.github/release.yml +56 -0
- xorcise-0.1.0/.github/workflows/ci.yml +470 -0
- xorcise-0.1.0/.github/workflows/codeql.yml +58 -0
- xorcise-0.1.0/.github/workflows/nightly.yml +231 -0
- xorcise-0.1.0/.github/workflows/release.yml +300 -0
- xorcise-0.1.0/.gitignore +51 -0
- xorcise-0.1.0/.importlinter +91 -0
- xorcise-0.1.0/.pre-commit-config.yaml +32 -0
- xorcise-0.1.0/.python-version +1 -0
- xorcise-0.1.0/CHANGELOG.md +50 -0
- xorcise-0.1.0/CLAUDE.md +55 -0
- xorcise-0.1.0/CODE_OF_CONDUCT.md +132 -0
- xorcise-0.1.0/CONTRIBUTING.md +234 -0
- xorcise-0.1.0/Dockerfile +24 -0
- xorcise-0.1.0/LICENSE +196 -0
- xorcise-0.1.0/MAINTAINERS.md +43 -0
- xorcise-0.1.0/PKG-INFO +177 -0
- xorcise-0.1.0/README.md +129 -0
- xorcise-0.1.0/ROLE_MANIFEST.toml +60 -0
- xorcise-0.1.0/SECURITY.md +129 -0
- xorcise-0.1.0/alembic.ini +11 -0
- xorcise-0.1.0/assets/lockup-horizontal-amber.svg +20 -0
- xorcise-0.1.0/assets/mark-amber.svg +4 -0
- xorcise-0.1.0/assets/readme-banner.svg +51 -0
- xorcise-0.1.0/containers/README.md +11 -0
- xorcise-0.1.0/containers/mission-base/Dockerfile +19 -0
- xorcise-0.1.0/containers/mission-base/entrypoint.sh +48 -0
- xorcise-0.1.0/deploy/README.md +13 -0
- xorcise-0.1.0/deploy/compose/profiles/README.md +20 -0
- xorcise-0.1.0/deploy/compose/profiles/all.yaml +5 -0
- xorcise-0.1.0/deploy/compose/profiles/collector.yaml +5 -0
- xorcise-0.1.0/deploy/compose/profiles/control.yaml +5 -0
- xorcise-0.1.0/deploy/compose/profiles/headscale.yaml +5 -0
- xorcise-0.1.0/deploy/compose/profiles/runner.yaml +5 -0
- xorcise-0.1.0/frontend/.gitignore +6 -0
- xorcise-0.1.0/frontend/.nvmrc +1 -0
- xorcise-0.1.0/frontend/.typeaudit.mjs +61 -0
- xorcise-0.1.0/frontend/README.md +44 -0
- xorcise-0.1.0/frontend/e2e/.gitkeep +0 -0
- xorcise-0.1.0/frontend/e2e/core-flow.spec.ts +72 -0
- xorcise-0.1.0/frontend/e2e/server-unreachable.spec.ts +29 -0
- xorcise-0.1.0/frontend/next-env.d.ts +6 -0
- xorcise-0.1.0/frontend/next.config.ts +10 -0
- xorcise-0.1.0/frontend/openapi.json +6175 -0
- xorcise-0.1.0/frontend/package-lock.json +5716 -0
- xorcise-0.1.0/frontend/package.json +46 -0
- xorcise-0.1.0/frontend/playwright.config.ts +22 -0
- xorcise-0.1.0/frontend/postcss.config.mjs +7 -0
- xorcise-0.1.0/frontend/scripts/dump_openapi.py +27 -0
- xorcise-0.1.0/frontend/src/app/README.md +18 -0
- xorcise-0.1.0/frontend/src/app/agents/detail/agent-detail-from-query.tsx +11 -0
- xorcise-0.1.0/frontend/src/app/agents/detail/page.tsx +13 -0
- xorcise-0.1.0/frontend/src/app/agents/new/page.tsx +13 -0
- xorcise-0.1.0/frontend/src/app/agents/new/register-from-query.tsx +11 -0
- xorcise-0.1.0/frontend/src/app/agents/page.tsx +8 -0
- xorcise-0.1.0/frontend/src/app/dashboard.test.tsx +108 -0
- xorcise-0.1.0/frontend/src/app/globals.css +490 -0
- xorcise-0.1.0/frontend/src/app/home-router.tsx +34 -0
- xorcise-0.1.0/frontend/src/app/home-routing.test.tsx +84 -0
- xorcise-0.1.0/frontend/src/app/icon.svg +8 -0
- xorcise-0.1.0/frontend/src/app/layout.tsx +36 -0
- xorcise-0.1.0/frontend/src/app/missions/detail/mission-detail-from-query.tsx +11 -0
- xorcise-0.1.0/frontend/src/app/missions/detail/page.tsx +13 -0
- xorcise-0.1.0/frontend/src/app/missions/page.tsx +8 -0
- xorcise-0.1.0/frontend/src/app/not-found.tsx +7 -0
- xorcise-0.1.0/frontend/src/app/page.tsx +14 -0
- xorcise-0.1.0/frontend/src/app/providers.tsx +11 -0
- xorcise-0.1.0/frontend/src/app/results/page.tsx +10 -0
- xorcise-0.1.0/frontend/src/app/runs/live/page.tsx +13 -0
- xorcise-0.1.0/frontend/src/app/runs/live/run-live-from-query.tsx +11 -0
- xorcise-0.1.0/frontend/src/app/runs/new/new-run-from-query.tsx +18 -0
- xorcise-0.1.0/frontend/src/app/runs/new/page.tsx +13 -0
- xorcise-0.1.0/frontend/src/app/runs/page.tsx +8 -0
- xorcise-0.1.0/frontend/src/app/runs/result/page.tsx +13 -0
- xorcise-0.1.0/frontend/src/app/runs/result/result-from-query.tsx +11 -0
- xorcise-0.1.0/frontend/src/app/settings/page.tsx +8 -0
- xorcise-0.1.0/frontend/src/app/setup/page.tsx +10 -0
- xorcise-0.1.0/frontend/src/components/README.md +10 -0
- xorcise-0.1.0/frontend/src/components/layout/app-shell.test.tsx +73 -0
- xorcise-0.1.0/frontend/src/components/layout/app-shell.tsx +48 -0
- xorcise-0.1.0/frontend/src/components/layout/header.tsx +45 -0
- xorcise-0.1.0/frontend/src/components/layout/nav-items.ts +31 -0
- xorcise-0.1.0/frontend/src/components/layout/not-found-state.test.tsx +41 -0
- xorcise-0.1.0/frontend/src/components/layout/not-found-state.tsx +32 -0
- xorcise-0.1.0/frontend/src/components/layout/page.tsx +101 -0
- xorcise-0.1.0/frontend/src/components/layout/server-unreachable.tsx +19 -0
- xorcise-0.1.0/frontend/src/components/layout/sidebar.tsx +107 -0
- xorcise-0.1.0/frontend/src/components/layout/status-bar.tsx +70 -0
- xorcise-0.1.0/frontend/src/components/ui/badge.tsx +43 -0
- xorcise-0.1.0/frontend/src/components/ui/button.tsx +56 -0
- xorcise-0.1.0/frontend/src/components/ui/card.tsx +45 -0
- xorcise-0.1.0/frontend/src/components/ui/cn.test.ts +51 -0
- xorcise-0.1.0/frontend/src/components/ui/cn.ts +30 -0
- xorcise-0.1.0/frontend/src/components/ui/coming-soon.tsx +98 -0
- xorcise-0.1.0/frontend/src/components/ui/copy-button.test.tsx +21 -0
- xorcise-0.1.0/frontend/src/components/ui/copy-button.tsx +60 -0
- xorcise-0.1.0/frontend/src/components/ui/dialog.test.tsx +50 -0
- xorcise-0.1.0/frontend/src/components/ui/dialog.tsx +65 -0
- xorcise-0.1.0/frontend/src/components/ui/input.tsx +23 -0
- xorcise-0.1.0/frontend/src/components/ui/loading.tsx +23 -0
- xorcise-0.1.0/frontend/src/components/ui/new-primitives.test.tsx +45 -0
- xorcise-0.1.0/frontend/src/components/ui/primitives.test.tsx +38 -0
- xorcise-0.1.0/frontend/src/components/ui/progress.tsx +40 -0
- xorcise-0.1.0/frontend/src/components/ui/reveal.test.tsx +34 -0
- xorcise-0.1.0/frontend/src/components/ui/reveal.tsx +31 -0
- xorcise-0.1.0/frontend/src/components/ui/separator.tsx +25 -0
- xorcise-0.1.0/frontend/src/components/ui/skeleton.test.tsx +32 -0
- xorcise-0.1.0/frontend/src/components/ui/skeleton.tsx +70 -0
- xorcise-0.1.0/frontend/src/components/ui/slider.test.tsx +24 -0
- xorcise-0.1.0/frontend/src/components/ui/slider.tsx +41 -0
- xorcise-0.1.0/frontend/src/components/ui/switch.test.tsx +29 -0
- xorcise-0.1.0/frontend/src/components/ui/switch.tsx +41 -0
- xorcise-0.1.0/frontend/src/components/ui/table.tsx +38 -0
- xorcise-0.1.0/frontend/src/components/ui/tabs.tsx +121 -0
- xorcise-0.1.0/frontend/src/components/ui/toast.tsx +67 -0
- xorcise-0.1.0/frontend/src/components/ui/use-exit-transition.test.tsx +52 -0
- xorcise-0.1.0/frontend/src/components/ui/use-exit-transition.ts +32 -0
- xorcise-0.1.0/frontend/src/features/README.md +17 -0
- xorcise-0.1.0/frontend/src/features/agents/agent-detail.tsx +157 -0
- xorcise-0.1.0/frontend/src/features/agents/agent-list.tsx +340 -0
- xorcise-0.1.0/frontend/src/features/agents/agent-performance.test.ts +81 -0
- xorcise-0.1.0/frontend/src/features/agents/agent-performance.tsx +261 -0
- xorcise-0.1.0/frontend/src/features/agents/agent-run-history.test.tsx +130 -0
- xorcise-0.1.0/frontend/src/features/agents/agent-run-history.tsx +214 -0
- xorcise-0.1.0/frontend/src/features/agents/agents.test.tsx +368 -0
- xorcise-0.1.0/frontend/src/features/agents/delete-agent-dialog.tsx +50 -0
- xorcise-0.1.0/frontend/src/features/agents/delete-agent.test.tsx +28 -0
- xorcise-0.1.0/frontend/src/features/agents/harness-profile.tsx +382 -0
- xorcise-0.1.0/frontend/src/features/agents/harness-selector.test.tsx +88 -0
- xorcise-0.1.0/frontend/src/features/agents/harness-selector.tsx +128 -0
- xorcise-0.1.0/frontend/src/features/agents/harnesses.test.ts +30 -0
- xorcise-0.1.0/frontend/src/features/agents/harnesses.tsx +150 -0
- xorcise-0.1.0/frontend/src/features/agents/queries.test.tsx +157 -0
- xorcise-0.1.0/frontend/src/features/agents/queries.ts +89 -0
- xorcise-0.1.0/frontend/src/features/agents/register-agent-page.test.tsx +535 -0
- xorcise-0.1.0/frontend/src/features/agents/register-agent-page.tsx +791 -0
- xorcise-0.1.0/frontend/src/features/agents/use-harnesses.ts +16 -0
- xorcise-0.1.0/frontend/src/features/capabilities/capabilities.test.tsx +116 -0
- xorcise-0.1.0/frontend/src/features/capabilities/capability-dot.tsx +107 -0
- xorcise-0.1.0/frontend/src/features/capabilities/capability-gap-notes.test.tsx +72 -0
- xorcise-0.1.0/frontend/src/features/capabilities/capability-gap-notes.tsx +73 -0
- xorcise-0.1.0/frontend/src/features/capabilities/capability-groups.ts +59 -0
- xorcise-0.1.0/frontend/src/features/capabilities/capability-matrix.test.tsx +45 -0
- xorcise-0.1.0/frontend/src/features/capabilities/capability-matrix.tsx +154 -0
- xorcise-0.1.0/frontend/src/features/capabilities/use-capabilities.ts +25 -0
- xorcise-0.1.0/frontend/src/features/dashboard/charts.tsx +79 -0
- xorcise-0.1.0/frontend/src/features/dashboard/dashboard-fleet.test.tsx +150 -0
- xorcise-0.1.0/frontend/src/features/dashboard/dashboard-view.tsx +63 -0
- xorcise-0.1.0/frontend/src/features/dashboard/fleet-metrics.tsx +93 -0
- xorcise-0.1.0/frontend/src/features/dashboard/leaderboards.tsx +188 -0
- xorcise-0.1.0/frontend/src/features/dashboard/overview.test.tsx +58 -0
- xorcise-0.1.0/frontend/src/features/dashboard/overview.tsx +159 -0
- xorcise-0.1.0/frontend/src/features/dashboard/recent-runs.tsx +146 -0
- xorcise-0.1.0/frontend/src/features/dashboard/use-fleet-performance.ts +137 -0
- xorcise-0.1.0/frontend/src/features/file-browser/file-browser.test.tsx +157 -0
- xorcise-0.1.0/frontend/src/features/file-browser/file-browser.tsx +220 -0
- xorcise-0.1.0/frontend/src/features/file-browser/queries.ts +18 -0
- xorcise-0.1.0/frontend/src/features/live-trace/environment-chip.test.tsx +59 -0
- xorcise-0.1.0/frontend/src/features/live-trace/live.test.tsx +455 -0
- xorcise-0.1.0/frontend/src/features/live-trace/run-agent-name.test.tsx +48 -0
- xorcise-0.1.0/frontend/src/features/live-trace/run-live.tsx +607 -0
- xorcise-0.1.0/frontend/src/features/live-trace/run-phase.test.ts +128 -0
- xorcise-0.1.0/frontend/src/features/live-trace/run-phase.ts +139 -0
- xorcise-0.1.0/frontend/src/features/live-trace/run-prompt-card.test.tsx +286 -0
- xorcise-0.1.0/frontend/src/features/live-trace/run-prompt-card.tsx +337 -0
- xorcise-0.1.0/frontend/src/features/live-trace/run-status.test.tsx +80 -0
- xorcise-0.1.0/frontend/src/features/live-trace/run-status.tsx +190 -0
- xorcise-0.1.0/frontend/src/features/live-trace/terminate-run.test.tsx +67 -0
- xorcise-0.1.0/frontend/src/features/live-trace/terrain-colors.test.ts +96 -0
- xorcise-0.1.0/frontend/src/features/live-trace/terrain-colors.ts +85 -0
- xorcise-0.1.0/frontend/src/features/live-trace/terrain-fold.test.ts +336 -0
- xorcise-0.1.0/frontend/src/features/live-trace/terrain-fold.ts +333 -0
- xorcise-0.1.0/frontend/src/features/live-trace/terrain-layout.test.ts +272 -0
- xorcise-0.1.0/frontend/src/features/live-trace/terrain-layout.ts +175 -0
- xorcise-0.1.0/frontend/src/features/live-trace/terrain-map.test.tsx +1059 -0
- xorcise-0.1.0/frontend/src/features/live-trace/terrain-map.tsx +961 -0
- xorcise-0.1.0/frontend/src/features/live-trace/timeline-waterfall.test.tsx +352 -0
- xorcise-0.1.0/frontend/src/features/live-trace/timeline-waterfall.tsx +285 -0
- xorcise-0.1.0/frontend/src/features/live-trace/use-run-terrain.test.ts +67 -0
- xorcise-0.1.0/frontend/src/features/live-trace/use-run-terrain.ts +35 -0
- xorcise-0.1.0/frontend/src/features/missions/catalog.tsx +343 -0
- xorcise-0.1.0/frontend/src/features/missions/difficulty-badge.tsx +44 -0
- xorcise-0.1.0/frontend/src/features/missions/facet-select.tsx +143 -0
- xorcise-0.1.0/frontend/src/features/missions/filter-bar.test.tsx +141 -0
- xorcise-0.1.0/frontend/src/features/missions/filter-bar.tsx +132 -0
- xorcise-0.1.0/frontend/src/features/missions/filter-missions.test.ts +142 -0
- xorcise-0.1.0/frontend/src/features/missions/filter-missions.ts +125 -0
- xorcise-0.1.0/frontend/src/features/missions/ingest-button.tsx +57 -0
- xorcise-0.1.0/frontend/src/features/missions/ingest.test.tsx +43 -0
- xorcise-0.1.0/frontend/src/features/missions/labels.test.ts +77 -0
- xorcise-0.1.0/frontend/src/features/missions/labels.ts +101 -0
- xorcise-0.1.0/frontend/src/features/missions/library-stats.tsx +208 -0
- xorcise-0.1.0/frontend/src/features/missions/mission-card.tsx +290 -0
- xorcise-0.1.0/frontend/src/features/missions/mission-detail.test.tsx +165 -0
- xorcise-0.1.0/frontend/src/features/missions/mission-detail.tsx +825 -0
- xorcise-0.1.0/frontend/src/features/missions/mission-picker.test.tsx +100 -0
- xorcise-0.1.0/frontend/src/features/missions/mission-picker.tsx +161 -0
- xorcise-0.1.0/frontend/src/features/missions/missions.test.tsx +265 -0
- xorcise-0.1.0/frontend/src/features/missions/pull-mission.test.tsx +185 -0
- xorcise-0.1.0/frontend/src/features/missions/queries.ts +278 -0
- xorcise-0.1.0/frontend/src/features/replay/event-card.test.tsx +262 -0
- xorcise-0.1.0/frontend/src/features/replay/event-card.tsx +493 -0
- xorcise-0.1.0/frontend/src/features/replay/kind-meta.test.ts +82 -0
- xorcise-0.1.0/frontend/src/features/replay/kind-meta.ts +300 -0
- xorcise-0.1.0/frontend/src/features/replay/raw-drilldown-modal.test.tsx +134 -0
- xorcise-0.1.0/frontend/src/features/replay/raw-drilldown-modal.tsx +78 -0
- xorcise-0.1.0/frontend/src/features/replay/replay-timeline.test.tsx +716 -0
- xorcise-0.1.0/frontend/src/features/replay/replay-timeline.tsx +600 -0
- xorcise-0.1.0/frontend/src/features/replay/syntax.test.tsx +99 -0
- xorcise-0.1.0/frontend/src/features/replay/syntax.tsx +275 -0
- xorcise-0.1.0/frontend/src/features/replay/use-run-events.test.tsx +210 -0
- xorcise-0.1.0/frontend/src/features/replay/use-run-events.ts +92 -0
- xorcise-0.1.0/frontend/src/features/results/artifacts-section.tsx +56 -0
- xorcise-0.1.0/frontend/src/features/results/completed-runs.test.tsx +119 -0
- xorcise-0.1.0/frontend/src/features/results/completed-runs.tsx +182 -0
- xorcise-0.1.0/frontend/src/features/results/conditions-card.test.tsx +49 -0
- xorcise-0.1.0/frontend/src/features/results/conditions-card.tsx +50 -0
- xorcise-0.1.0/frontend/src/features/results/cross-run-context.test.tsx +42 -0
- xorcise-0.1.0/frontend/src/features/results/cross-run-context.tsx +121 -0
- xorcise-0.1.0/frontend/src/features/results/download-report.test.tsx +36 -0
- xorcise-0.1.0/frontend/src/features/results/download-report.tsx +47 -0
- xorcise-0.1.0/frontend/src/features/results/grading-detail.test.tsx +234 -0
- xorcise-0.1.0/frontend/src/features/results/grading-detail.tsx +399 -0
- xorcise-0.1.0/frontend/src/features/results/judge-deeplink.test.tsx +60 -0
- xorcise-0.1.0/frontend/src/features/results/kpi-strip.test.tsx +124 -0
- xorcise-0.1.0/frontend/src/features/results/kpi-strip.tsx +89 -0
- xorcise-0.1.0/frontend/src/features/results/loading-cards.tsx +27 -0
- xorcise-0.1.0/frontend/src/features/results/performance-summary.test.tsx +113 -0
- xorcise-0.1.0/frontend/src/features/results/performance-summary.tsx +188 -0
- xorcise-0.1.0/frontend/src/features/results/queries.test.ts +22 -0
- xorcise-0.1.0/frontend/src/features/results/queries.ts +109 -0
- xorcise-0.1.0/frontend/src/features/results/results-all-runs.tsx +256 -0
- xorcise-0.1.0/frontend/src/features/results/results-missions.tsx +136 -0
- xorcise-0.1.0/frontend/src/features/results/results-tabs.test.tsx +145 -0
- xorcise-0.1.0/frontend/src/features/results/results-tabs.tsx +61 -0
- xorcise-0.1.0/frontend/src/features/results/results-view.tsx +337 -0
- xorcise-0.1.0/frontend/src/features/results/results.test.tsx +409 -0
- xorcise-0.1.0/frontend/src/features/results/run-activity.test.tsx +70 -0
- xorcise-0.1.0/frontend/src/features/results/run-activity.tsx +94 -0
- xorcise-0.1.0/frontend/src/features/results/scorecard.test.tsx +36 -0
- xorcise-0.1.0/frontend/src/features/results/scorecard.tsx +152 -0
- xorcise-0.1.0/frontend/src/features/results/summarize-assist.test.ts +47 -0
- xorcise-0.1.0/frontend/src/features/results/summarize-assist.ts +50 -0
- xorcise-0.1.0/frontend/src/features/results/summarize-missions.ts +79 -0
- xorcise-0.1.0/frontend/src/features/results/summarize-runs.ts +115 -0
- xorcise-0.1.0/frontend/src/features/results/verdict.tsx +86 -0
- xorcise-0.1.0/frontend/src/features/runs/budget-slider.tsx +67 -0
- xorcise-0.1.0/frontend/src/features/runs/delete-run-dialog.tsx +92 -0
- xorcise-0.1.0/frontend/src/features/runs/delete-run-inline.tsx +110 -0
- xorcise-0.1.0/frontend/src/features/runs/delete-run.test.tsx +65 -0
- xorcise-0.1.0/frontend/src/features/runs/graceful.test.tsx +52 -0
- xorcise-0.1.0/frontend/src/features/runs/new-run-form.tsx +926 -0
- xorcise-0.1.0/frontend/src/features/runs/new-run-preselect.test.tsx +148 -0
- xorcise-0.1.0/frontend/src/features/runs/new-run-pull.test.tsx +372 -0
- xorcise-0.1.0/frontend/src/features/runs/queries.ts +149 -0
- xorcise-0.1.0/frontend/src/features/runs/run-card.test.tsx +155 -0
- xorcise-0.1.0/frontend/src/features/runs/run-card.tsx +223 -0
- xorcise-0.1.0/frontend/src/features/runs/run-filters.tsx +197 -0
- xorcise-0.1.0/frontend/src/features/runs/run-list.tsx +140 -0
- xorcise-0.1.0/frontend/src/features/runs/run-notifications.test.tsx +268 -0
- xorcise-0.1.0/frontend/src/features/runs/run-notifications.tsx +122 -0
- xorcise-0.1.0/frontend/src/features/runs/run-state.test.ts +62 -0
- xorcise-0.1.0/frontend/src/features/runs/run-state.ts +111 -0
- xorcise-0.1.0/frontend/src/features/runs/runs.test.tsx +538 -0
- xorcise-0.1.0/frontend/src/features/runs/stall.test.ts +21 -0
- xorcise-0.1.0/frontend/src/features/runs/stall.ts +31 -0
- xorcise-0.1.0/frontend/src/features/settings/catalog-switch.test.tsx +63 -0
- xorcise-0.1.0/frontend/src/features/settings/connection-status.tsx +62 -0
- xorcise-0.1.0/frontend/src/features/settings/module-groups.ts +156 -0
- xorcise-0.1.0/frontend/src/features/settings/module-roles.test.tsx +260 -0
- xorcise-0.1.0/frontend/src/features/settings/queries.ts +178 -0
- xorcise-0.1.0/frontend/src/features/settings/settings-view.tsx +966 -0
- xorcise-0.1.0/frontend/src/features/settings/settings.test.tsx +624 -0
- xorcise-0.1.0/frontend/src/features/settings/system-modules.test.tsx +115 -0
- xorcise-0.1.0/frontend/src/features/settings/token-limit-slider.tsx +52 -0
- xorcise-0.1.0/frontend/src/features/setup/checklist.test.tsx +103 -0
- xorcise-0.1.0/frontend/src/features/setup/checklist.tsx +306 -0
- xorcise-0.1.0/frontend/src/features/setup/queries.test.tsx +28 -0
- xorcise-0.1.0/frontend/src/features/setup/queries.ts +16 -0
- xorcise-0.1.0/frontend/src/features/setup/quick-start.test.tsx +38 -0
- xorcise-0.1.0/frontend/src/features/setup/quick-start.tsx +105 -0
- xorcise-0.1.0/frontend/src/features/setup/readiness.test.tsx +111 -0
- xorcise-0.1.0/frontend/src/features/setup/readiness.ts +58 -0
- xorcise-0.1.0/frontend/src/features/setup/welcome.test.tsx +105 -0
- xorcise-0.1.0/frontend/src/features/setup/welcome.tsx +156 -0
- xorcise-0.1.0/frontend/src/hooks/.gitkeep +0 -0
- xorcise-0.1.0/frontend/src/lib/README.md +18 -0
- xorcise-0.1.0/frontend/src/lib/api/client.test.ts +50 -0
- xorcise-0.1.0/frontend/src/lib/api/client.ts +67 -0
- xorcise-0.1.0/frontend/src/lib/api/format.test.ts +27 -0
- xorcise-0.1.0/frontend/src/lib/api/format.ts +41 -0
- xorcise-0.1.0/frontend/src/lib/api/location-transparency.test.ts +21 -0
- xorcise-0.1.0/frontend/src/lib/api/query-client.ts +14 -0
- xorcise-0.1.0/frontend/src/lib/api/runtime-config.test.ts +23 -0
- xorcise-0.1.0/frontend/src/lib/api/runtime-config.ts +27 -0
- xorcise-0.1.0/frontend/src/lib/api/schema.ts +4380 -0
- xorcise-0.1.0/frontend/src/lib/api/types.ts +63 -0
- xorcise-0.1.0/frontend/src/stores/.gitkeep +0 -0
- xorcise-0.1.0/frontend/src/stores/toasts.test.ts +35 -0
- xorcise-0.1.0/frontend/src/stores/toasts.ts +72 -0
- xorcise-0.1.0/frontend/src/stores/ui.test.ts +24 -0
- xorcise-0.1.0/frontend/src/stores/ui.ts +31 -0
- xorcise-0.1.0/frontend/src/styles/.gitkeep +0 -0
- xorcise-0.1.0/frontend/src/test/.gitkeep +0 -0
- xorcise-0.1.0/frontend/src/test/fixtures.ts +52 -0
- xorcise-0.1.0/frontend/src/test/msw/handlers.ts +276 -0
- xorcise-0.1.0/frontend/src/test/msw/server.ts +4 -0
- xorcise-0.1.0/frontend/src/test/render.tsx +37 -0
- xorcise-0.1.0/frontend/src/test/setup.ts +35 -0
- xorcise-0.1.0/frontend/tsconfig.json +40 -0
- xorcise-0.1.0/frontend/vitest.config.ts +21 -0
- xorcise-0.1.0/hatch_build.py +74 -0
- xorcise-0.1.0/pyproject.toml +157 -0
- xorcise-0.1.0/scripts/check_release_metadata.py +143 -0
- xorcise-0.1.0/scripts/check_single_distribution.py +43 -0
- xorcise-0.1.0/scripts/check_wheel_contents.py +138 -0
- xorcise-0.1.0/scripts/reset.py +12 -0
- xorcise-0.1.0/src/xorcise/__init__.py +17 -0
- xorcise-0.1.0/src/xorcise/__main__.py +6 -0
- xorcise-0.1.0/src/xorcise/core/__init__.py +6 -0
- xorcise-0.1.0/src/xorcise/core/agents/__init__.py +28 -0
- xorcise-0.1.0/src/xorcise/core/agents/models.py +33 -0
- xorcise-0.1.0/src/xorcise/core/agents/registry.py +148 -0
- xorcise-0.1.0/src/xorcise/core/catalog/__init__.py +25 -0
- xorcise-0.1.0/src/xorcise/core/catalog/_fixture.py +75 -0
- xorcise-0.1.0/src/xorcise/core/catalog/http.py +117 -0
- xorcise-0.1.0/src/xorcise/core/catalog/source.py +116 -0
- xorcise-0.1.0/src/xorcise/core/cli/__init__.py +5 -0
- xorcise-0.1.0/src/xorcise/core/cli/_diagnostics.py +285 -0
- xorcise-0.1.0/src/xorcise/core/cli/_errors.py +318 -0
- xorcise-0.1.0/src/xorcise/core/cli/_frontend.py +245 -0
- xorcise-0.1.0/src/xorcise/core/cli/_preflight.py +105 -0
- xorcise-0.1.0/src/xorcise/core/cli/_resolve.py +142 -0
- xorcise-0.1.0/src/xorcise/core/cli/_shared.py +81 -0
- xorcise-0.1.0/src/xorcise/core/cli/_update.py +133 -0
- xorcise-0.1.0/src/xorcise/core/cli/_ux.py +367 -0
- xorcise-0.1.0/src/xorcise/core/cli/app.py +115 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/__init__.py +1 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/agent.py +278 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/auth.py +18 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/catalog.py +156 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/config.py +350 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/db.py +30 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/lifecycle.py +890 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/mission.py +392 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/remote.py +27 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/results.py +148 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/role.py +160 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/run.py +573 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/serve.py +164 -0
- xorcise-0.1.0/src/xorcise/core/cli/commands/system.py +84 -0
- xorcise-0.1.0/src/xorcise/core/cli/rest_client.py +224 -0
- xorcise-0.1.0/src/xorcise/core/code/__init__.py +4 -0
- xorcise-0.1.0/src/xorcise/core/config/__init__.py +228 -0
- xorcise-0.1.0/src/xorcise/core/contracts/__init__.py +5 -0
- xorcise-0.1.0/src/xorcise/core/contracts/agent.py +61 -0
- xorcise-0.1.0/src/xorcise/core/contracts/agent_event.py +183 -0
- xorcise-0.1.0/src/xorcise/core/contracts/catalog.py +40 -0
- xorcise-0.1.0/src/xorcise/core/contracts/catalog_v1.py +3 -0
- xorcise-0.1.0/src/xorcise/core/contracts/config.py +170 -0
- xorcise-0.1.0/src/xorcise/core/contracts/connect.py +114 -0
- xorcise-0.1.0/src/xorcise/core/contracts/control.py +98 -0
- xorcise-0.1.0/src/xorcise/core/contracts/errors.py +46 -0
- xorcise-0.1.0/src/xorcise/core/contracts/evidence.py +33 -0
- xorcise-0.1.0/src/xorcise/core/contracts/fs.py +21 -0
- xorcise-0.1.0/src/xorcise/core/contracts/grading.py +104 -0
- xorcise-0.1.0/src/xorcise/core/contracts/mission.py +256 -0
- xorcise-0.1.0/src/xorcise/core/contracts/otlp.py +31 -0
- xorcise-0.1.0/src/xorcise/core/contracts/premium_v1.py +3 -0
- xorcise-0.1.0/src/xorcise/core/contracts/reporting.py +87 -0
- xorcise-0.1.0/src/xorcise/core/contracts/rest.py +3 -0
- xorcise-0.1.0/src/xorcise/core/contracts/roles.py +3 -0
- xorcise-0.1.0/src/xorcise/core/contracts/run.py +81 -0
- xorcise-0.1.0/src/xorcise/core/contracts/runcontrol.py +59 -0
- xorcise-0.1.0/src/xorcise/core/contracts/telemetry.py +44 -0
- xorcise-0.1.0/src/xorcise/core/contracts/terrain.py +113 -0
- xorcise-0.1.0/src/xorcise/core/db/__init__.py +20 -0
- xorcise-0.1.0/src/xorcise/core/db/base.py +9 -0
- xorcise-0.1.0/src/xorcise/core/db/engine.py +34 -0
- xorcise-0.1.0/src/xorcise/core/db/migrate.py +60 -0
- xorcise-0.1.0/src/xorcise/core/db/migrations/__init__.py +1 -0
- xorcise-0.1.0/src/xorcise/core/db/migrations/env.py +39 -0
- xorcise-0.1.0/src/xorcise/core/db/migrations/script.py.mako +24 -0
- xorcise-0.1.0/src/xorcise/core/db/migrations/versions/0001_initial.py +320 -0
- xorcise-0.1.0/src/xorcise/core/eval/__init__.py +7 -0
- xorcise-0.1.0/src/xorcise/core/eval/checks.py +63 -0
- xorcise-0.1.0/src/xorcise/core/eval/deterministic.py +68 -0
- xorcise-0.1.0/src/xorcise/core/eval/grade.py +62 -0
- xorcise-0.1.0/src/xorcise/core/eval/judge.py +409 -0
- xorcise-0.1.0/src/xorcise/core/eval/operations.py +43 -0
- xorcise-0.1.0/src/xorcise/core/eval/resolvers.py +30 -0
- xorcise-0.1.0/src/xorcise/core/frontend/__init__.py +4 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/__init__.py +50 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/claude_code/__init__.py +0 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/claude_code/launch.py +58 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/claude_code/otel.py +496 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/claude_code/telemetry.py +59 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/codex/__init__.py +0 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/codex/launch.py +71 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/codex/otel.py +468 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/codex/telemetry.py +43 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/openhands/__init__.py +0 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/openhands/launch.py +42 -0
- xorcise-0.1.0/src/xorcise/core/harness_adapters/openhands/otel.py +336 -0
- xorcise-0.1.0/src/xorcise/core/headscale/__init__.py +32 -0
- xorcise-0.1.0/src/xorcise/core/headscale/cidr.py +59 -0
- xorcise-0.1.0/src/xorcise/core/headscale/cli.py +301 -0
- xorcise-0.1.0/src/xorcise/core/headscale/controller.py +167 -0
- xorcise-0.1.0/src/xorcise/core/headscale/policy.py +112 -0
- xorcise-0.1.0/src/xorcise/core/headscale/provision.py +621 -0
- xorcise-0.1.0/src/xorcise/core/home/__init__.py +149 -0
- xorcise-0.1.0/src/xorcise/core/missions/__init__.py +32 -0
- xorcise-0.1.0/src/xorcise/core/missions/builder.py +34 -0
- xorcise-0.1.0/src/xorcise/core/missions/errors.py +18 -0
- xorcise-0.1.0/src/xorcise/core/missions/ingest.py +160 -0
- xorcise-0.1.0/src/xorcise/core/missions/preflight.py +64 -0
- xorcise-0.1.0/src/xorcise/core/missions/runtime.py +144 -0
- xorcise-0.1.0/src/xorcise/core/observability/__init__.py +4 -0
- xorcise-0.1.0/src/xorcise/core/orchestration/__init__.py +5 -0
- xorcise-0.1.0/src/xorcise/core/orchestration/clients/__init__.py +1 -0
- xorcise-0.1.0/src/xorcise/core/orchestration/clients/control.py +104 -0
- xorcise-0.1.0/src/xorcise/core/orchestration/clients/grading.py +70 -0
- xorcise-0.1.0/src/xorcise/core/orchestration/clients/headscale_client.py +27 -0
- xorcise-0.1.0/src/xorcise/core/orchestration/clients/judge_model.py +131 -0
- xorcise-0.1.0/src/xorcise/core/orchestration/clients/token_counter.py +36 -0
- xorcise-0.1.0/src/xorcise/core/orchestration/ports.py +90 -0
- xorcise-0.1.0/src/xorcise/core/otel/__init__.py +5 -0
- xorcise-0.1.0/src/xorcise/core/otel/adapters/__init__.py +208 -0
- xorcise-0.1.0/src/xorcise/core/otel/adapters/base.py +67 -0
- xorcise-0.1.0/src/xorcise/core/otel/adapters/genai.py +209 -0
- xorcise-0.1.0/src/xorcise/core/otel/adapters/generic.py +142 -0
- xorcise-0.1.0/src/xorcise/core/otel/adapters/registry.py +67 -0
- xorcise-0.1.0/src/xorcise/core/otel/decode.py +170 -0
- xorcise-0.1.0/src/xorcise/core/otel/distill.py +219 -0
- xorcise-0.1.0/src/xorcise/core/otel/flatten.py +204 -0
- xorcise-0.1.0/src/xorcise/core/otel/ingest/__init__.py +29 -0
- xorcise-0.1.0/src/xorcise/core/otel/ingest/embedded.py +164 -0
- xorcise-0.1.0/src/xorcise/core/otel/mirror.py +36 -0
- xorcise-0.1.0/src/xorcise/core/otel/ports.py +53 -0
- xorcise-0.1.0/src/xorcise/core/otel/run_stats.py +110 -0
- xorcise-0.1.0/src/xorcise/core/otel/stats.py +17 -0
- xorcise-0.1.0/src/xorcise/core/otel/store/__init__.py +40 -0
- xorcise-0.1.0/src/xorcise/core/otel/store/agent_events.py +224 -0
- xorcise-0.1.0/src/xorcise/core/otel/store/models.py +116 -0
- xorcise-0.1.0/src/xorcise/core/otel/store/seal.py +44 -0
- xorcise-0.1.0/src/xorcise/core/otel/store/sqlite.py +146 -0
- xorcise-0.1.0/src/xorcise/core/premium/__init__.py +4 -0
- xorcise-0.1.0/src/xorcise/core/reporting/__init__.py +41 -0
- xorcise-0.1.0/src/xorcise/core/reporting/models.py +52 -0
- xorcise-0.1.0/src/xorcise/core/reporting/render.py +981 -0
- xorcise-0.1.0/src/xorcise/core/reporting/repository.py +160 -0
- xorcise-0.1.0/src/xorcise/core/rest/__init__.py +4 -0
- xorcise-0.1.0/src/xorcise/core/rest/app.py +84 -0
- xorcise-0.1.0/src/xorcise/core/rest/budget_watchdog.py +53 -0
- xorcise-0.1.0/src/xorcise/core/rest/catalog_view.py +126 -0
- xorcise-0.1.0/src/xorcise/core/rest/config_view.py +227 -0
- xorcise-0.1.0/src/xorcise/core/rest/events_export.py +59 -0
- xorcise-0.1.0/src/xorcise/core/rest/events_view.py +196 -0
- xorcise-0.1.0/src/xorcise/core/rest/fs_browse.py +53 -0
- xorcise-0.1.0/src/xorcise/core/rest/grade_assembly.py +161 -0
- xorcise-0.1.0/src/xorcise/core/rest/ingest.py +97 -0
- xorcise-0.1.0/src/xorcise/core/rest/ingest_jobs.py +139 -0
- xorcise-0.1.0/src/xorcise/core/rest/join_reconcile.py +184 -0
- xorcise-0.1.0/src/xorcise/core/rest/mission_pull.py +299 -0
- xorcise-0.1.0/src/xorcise/core/rest/pull_jobs.py +212 -0
- xorcise-0.1.0/src/xorcise/core/rest/reap.py +31 -0
- xorcise-0.1.0/src/xorcise/core/rest/reconcile.py +196 -0
- xorcise-0.1.0/src/xorcise/core/rest/report_assembly.py +212 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/__init__.py +1 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/agents.py +92 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/catalog.py +17 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/config.py +82 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/fs.py +19 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/harnesses.py +73 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/health.py +12 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/missions.py +347 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/runcontrol.py +391 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/runs.py +694 -0
- xorcise-0.1.0/src/xorcise/core/rest/routers/system.py +16 -0
- xorcise-0.1.0/src/xorcise/core/rest/run_create.py +834 -0
- xorcise-0.1.0/src/xorcise/core/rest/run_readiness.py +221 -0
- xorcise-0.1.0/src/xorcise/core/rest/run_teardown.py +29 -0
- xorcise-0.1.0/src/xorcise/core/rest/run_terminate.py +287 -0
- xorcise-0.1.0/src/xorcise/core/rest/system_view.py +259 -0
- xorcise-0.1.0/src/xorcise/core/rest/terrain_catchup_v2.py +207 -0
- xorcise-0.1.0/src/xorcise/core/roles/__init__.py +4 -0
- xorcise-0.1.0/src/xorcise/core/roles/activate.py +40 -0
- xorcise-0.1.0/src/xorcise/core/roles/boot/__init__.py +20 -0
- xorcise-0.1.0/src/xorcise/core/roles/boot/role_all.py +239 -0
- xorcise-0.1.0/src/xorcise/core/roles/boot/role_collector.py +17 -0
- xorcise-0.1.0/src/xorcise/core/roles/boot/role_control.py +17 -0
- xorcise-0.1.0/src/xorcise/core/roles/boot/role_headscale.py +23 -0
- xorcise-0.1.0/src/xorcise/core/roles/boot/role_runner.py +27 -0
- xorcise-0.1.0/src/xorcise/core/roles/compose.py +17 -0
- xorcise-0.1.0/src/xorcise/core/roles/registry.py +93 -0
- xorcise-0.1.0/src/xorcise/core/runcontrol/__init__.py +7 -0
- xorcise-0.1.0/src/xorcise/core/runcontrol/errors.py +15 -0
- xorcise-0.1.0/src/xorcise/core/runcontrol/intel_policy.py +31 -0
- xorcise-0.1.0/src/xorcise/core/runcontrol/models.py +23 -0
- xorcise-0.1.0/src/xorcise/core/runcontrol/service.py +123 -0
- xorcise-0.1.0/src/xorcise/core/runcontrol/signing.py +30 -0
- xorcise-0.1.0/src/xorcise/core/runcontrol/store.py +103 -0
- xorcise-0.1.0/src/xorcise/core/runner/__init__.py +4 -0
- xorcise-0.1.0/src/xorcise/core/runner/docker/__init__.py +256 -0
- xorcise-0.1.0/src/xorcise/core/runner/docker/build.py +156 -0
- xorcise-0.1.0/src/xorcise/core/runner/docker/driver.py +326 -0
- xorcise-0.1.0/src/xorcise/core/runner/netoverride.py +147 -0
- xorcise-0.1.0/src/xorcise/core/runner/service.py +182 -0
- xorcise-0.1.0/src/xorcise/core/runs/__init__.py +55 -0
- xorcise-0.1.0/src/xorcise/core/runs/join.py +438 -0
- xorcise-0.1.0/src/xorcise/core/runs/launch/__init__.py +1 -0
- xorcise-0.1.0/src/xorcise/core/runs/launch/base.py +70 -0
- xorcise-0.1.0/src/xorcise/core/runs/launch/generic.py +12 -0
- xorcise-0.1.0/src/xorcise/core/runs/launch/registry.py +32 -0
- xorcise-0.1.0/src/xorcise/core/runs/models.py +129 -0
- xorcise-0.1.0/src/xorcise/core/runs/observed.py +114 -0
- xorcise-0.1.0/src/xorcise/core/runs/prompt.py +246 -0
- xorcise-0.1.0/src/xorcise/core/runs/repository.py +331 -0
- xorcise-0.1.0/src/xorcise/core/runs/tailscale_dist.py +76 -0
- xorcise-0.1.0/src/xorcise/core/runs/telemetry/__init__.py +9 -0
- xorcise-0.1.0/src/xorcise/core/runs/telemetry/base.py +35 -0
- xorcise-0.1.0/src/xorcise/core/runs/telemetry/generic.py +23 -0
- xorcise-0.1.0/src/xorcise/core/runs/telemetry/registry.py +40 -0
- xorcise-0.1.0/src/xorcise/core/runs/terrain_attribution.py +25 -0
- xorcise-0.1.0/src/xorcise/core/runs/terrain_attribution_v2.py +376 -0
- xorcise-0.1.0/src/xorcise/core/runs/terrain_timeline.py +52 -0
- xorcise-0.1.0/src/xorcise/core/runs/terrain_update_store.py +188 -0
- xorcise-0.1.0/src/xorcise/core/runs/terrain_updates_infra.py +198 -0
- xorcise-0.1.0/src/xorcise/core/runs/terrain_v2.py +356 -0
- xorcise-0.1.0/src/xorcise/core/seams.py +7 -0
- xorcise-0.1.0/src/xorcise/core/targets/__init__.py +4 -0
- xorcise-0.1.0/src/xorcise/py.typed +0 -0
- xorcise-0.1.0/tests/__init__.py +0 -0
- xorcise-0.1.0/tests/_helpers.py +67 -0
- xorcise-0.1.0/tests/adapters/__init__.py +0 -0
- xorcise-0.1.0/tests/adapters/_contracts.py +148 -0
- xorcise-0.1.0/tests/adapters/test_agent_contract.py +38 -0
- xorcise-0.1.0/tests/adapters/test_control_real.py +13 -0
- xorcise-0.1.0/tests/adapters/test_control_stub.py +13 -0
- xorcise-0.1.0/tests/adapters/test_docker_driver_by_name.py +92 -0
- xorcise-0.1.0/tests/adapters/test_docker_driver_networks.py +67 -0
- xorcise-0.1.0/tests/adapters/test_docker_driver_pull_auth.py +170 -0
- xorcise-0.1.0/tests/adapters/test_docker_driver_real.py +83 -0
- xorcise-0.1.0/tests/adapters/test_docker_driver_state.py +97 -0
- xorcise-0.1.0/tests/adapters/test_docker_driver_teardown.py +154 -0
- xorcise-0.1.0/tests/adapters/test_docker_stub.py +29 -0
- xorcise-0.1.0/tests/adapters/test_eval_judge.py +78 -0
- xorcise-0.1.0/tests/adapters/test_grade_assembly.py +239 -0
- xorcise-0.1.0/tests/adapters/test_grading_stub.py +13 -0
- xorcise-0.1.0/tests/adapters/test_headscale_cli_parse.py +17 -0
- xorcise-0.1.0/tests/adapters/test_judge_model_client.py +196 -0
- xorcise-0.1.0/tests/adapters/test_observed_facts_store.py +41 -0
- xorcise-0.1.0/tests/adapters/test_otel_receiver.py +272 -0
- xorcise-0.1.0/tests/adapters/test_otel_seal_store_sqlite.py +16 -0
- xorcise-0.1.0/tests/adapters/test_otel_sqlite_store.py +37 -0
- xorcise-0.1.0/tests/adapters/test_otel_stub.py +20 -0
- xorcise-0.1.0/tests/adapters/test_reporting_contract.py +20 -0
- xorcise-0.1.0/tests/adapters/test_run_contract.py +22 -0
- xorcise-0.1.0/tests/adapters/test_runcontrol_attachments.py +114 -0
- xorcise-0.1.0/tests/adapters/test_runcontrol_rest.py +65 -0
- xorcise-0.1.0/tests/adapters/test_runcontrol_store_sqlite.py +28 -0
- xorcise-0.1.0/tests/adapters/test_runcontrol_terminal.py +43 -0
- xorcise-0.1.0/tests/conftest.py +233 -0
- xorcise-0.1.0/tests/e2e/__init__.py +0 -0
- xorcise-0.1.0/tests/e2e/test_run_isolation.py +355 -0
- xorcise-0.1.0/tests/e2e/test_run_real.py +85 -0
- xorcise-0.1.0/tests/e2e/test_scripted_agent.py +89 -0
- xorcise-0.1.0/tests/e2e/test_up_provisions_headscale.py +69 -0
- xorcise-0.1.0/tests/e2e/test_walking_skeleton.py +57 -0
- xorcise-0.1.0/tests/fixtures/__init__.py +1 -0
- xorcise-0.1.0/tests/fixtures/otlp/claude_code_events_golden.json +38 -0
- xorcise-0.1.0/tests/fixtures/otlp/claude_code_real_run.json +898 -0
- xorcise-0.1.0/tests/fixtures/otlp/codex_events_golden.json +74 -0
- xorcise-0.1.0/tests/fixtures/otlp/codex_real_run.json +3972 -0
- xorcise-0.1.0/tests/fixtures/otlp/openhands_events_golden.json +353 -0
- xorcise-0.1.0/tests/fixtures/otlp/openhands_real_run.json +4641 -0
- xorcise-0.1.0/tests/fixtures/scripted_agent.py +145 -0
- xorcise-0.1.0/tests/integration/__init__.py +0 -0
- xorcise-0.1.0/tests/integration/test_agent_history_compare.py +84 -0
- xorcise-0.1.0/tests/integration/test_config_live_update.py +40 -0
- xorcise-0.1.0/tests/integration/test_deterministic_grade.py +70 -0
- xorcise-0.1.0/tests/integration/test_fused_build.py +50 -0
- xorcise-0.1.0/tests/integration/test_observed_facts_stream.py +129 -0
- xorcise-0.1.0/tests/integration/test_otel_fanout_seal.py +108 -0
- xorcise-0.1.0/tests/integration/test_placeholder.py +11 -0
- xorcise-0.1.0/tests/integration/test_prompt_runcontrol_recipe.py +60 -0
- xorcise-0.1.0/tests/integration/test_run_create_loop.py +82 -0
- xorcise-0.1.0/tests/integration/test_run_terminate_grades.py +349 -0
- xorcise-0.1.0/tests/integration/test_runcontrol_e2e.py +115 -0
- xorcise-0.1.0/tests/integration/test_scripted_agent_runscope.py +34 -0
- xorcise-0.1.0/tests/integration/test_terminal_seal_e2e.py +62 -0
- xorcise-0.1.0/tests/topology/__init__.py +0 -0
- xorcise-0.1.0/tests/topology/test_parity.py +151 -0
- xorcise-0.1.0/tests/unit/__init__.py +0 -0
- xorcise-0.1.0/tests/unit/test_agent_events_cache.py +151 -0
- xorcise-0.1.0/tests/unit/test_agent_events_store.py +135 -0
- xorcise-0.1.0/tests/unit/test_agent_history_rest.py +60 -0
- xorcise-0.1.0/tests/unit/test_agents_registry.py +151 -0
- xorcise-0.1.0/tests/unit/test_agents_rest.py +140 -0
- xorcise-0.1.0/tests/unit/test_budget_watchdog.py +32 -0
- xorcise-0.1.0/tests/unit/test_build_pull_deps.py +21 -0
- xorcise-0.1.0/tests/unit/test_capability_profile.py +56 -0
- xorcise-0.1.0/tests/unit/test_capability_profiles_adapters.py +178 -0
- xorcise-0.1.0/tests/unit/test_catalog_config_rest.py +53 -0
- xorcise-0.1.0/tests/unit/test_catalog_contract.py +57 -0
- xorcise-0.1.0/tests/unit/test_catalog_source.py +46 -0
- xorcise-0.1.0/tests/unit/test_catalog_status_rest.py +49 -0
- xorcise-0.1.0/tests/unit/test_catalog_view.py +97 -0
- xorcise-0.1.0/tests/unit/test_check_contract_weights.py +174 -0
- xorcise-0.1.0/tests/unit/test_check_op_ingest_validation.py +134 -0
- xorcise-0.1.0/tests/unit/test_check_verdict_shape.py +34 -0
- xorcise-0.1.0/tests/unit/test_claude_code_adapter.py +486 -0
- xorcise-0.1.0/tests/unit/test_claude_code_launch_provider.py +60 -0
- xorcise-0.1.0/tests/unit/test_cli_catalog_ux.py +264 -0
- xorcise-0.1.0/tests/unit/test_cli_commands.py +1290 -0
- xorcise-0.1.0/tests/unit/test_cli_config.py +233 -0
- xorcise-0.1.0/tests/unit/test_cli_json_parity.py +72 -0
- xorcise-0.1.0/tests/unit/test_cli_parity.py +537 -0
- xorcise-0.1.0/tests/unit/test_cli_role_experimental.py +73 -0
- xorcise-0.1.0/tests/unit/test_cli_run.py +736 -0
- xorcise-0.1.0/tests/unit/test_cli_shell.py +30 -0
- xorcise-0.1.0/tests/unit/test_cli_ux.py +1339 -0
- xorcise-0.1.0/tests/unit/test_codex_adapter.py +252 -0
- xorcise-0.1.0/tests/unit/test_codex_launch_provider.py +91 -0
- xorcise-0.1.0/tests/unit/test_codex_telemetry_provider.py +52 -0
- xorcise-0.1.0/tests/unit/test_config.py +176 -0
- xorcise-0.1.0/tests/unit/test_config_headscale.py +19 -0
- xorcise-0.1.0/tests/unit/test_config_rest.py +99 -0
- xorcise-0.1.0/tests/unit/test_config_view.py +100 -0
- xorcise-0.1.0/tests/unit/test_connect_prompt.py +514 -0
- xorcise-0.1.0/tests/unit/test_container_reap.py +35 -0
- xorcise-0.1.0/tests/unit/test_containers_mission_base.py +31 -0
- xorcise-0.1.0/tests/unit/test_contracts_agent_event.py +69 -0
- xorcise-0.1.0/tests/unit/test_contracts_control.py +38 -0
- xorcise-0.1.0/tests/unit/test_contracts_errors.py +17 -0
- xorcise-0.1.0/tests/unit/test_contracts_grading.py +25 -0
- xorcise-0.1.0/tests/unit/test_contracts_leaf.py +30 -0
- xorcise-0.1.0/tests/unit/test_contracts_otlp.py +21 -0
- xorcise-0.1.0/tests/unit/test_contracts_runcontrol.py +51 -0
- xorcise-0.1.0/tests/unit/test_core_no_launch_provider_import.py +72 -0
- xorcise-0.1.0/tests/unit/test_core_no_openhands_import.py +79 -0
- xorcise-0.1.0/tests/unit/test_core_no_telemetry_provider_import.py +76 -0
- xorcise-0.1.0/tests/unit/test_criterion_score_shape.py +44 -0
- xorcise-0.1.0/tests/unit/test_db_engine.py +22 -0
- xorcise-0.1.0/tests/unit/test_db_migrate.py +107 -0
- xorcise-0.1.0/tests/unit/test_diagnostics.py +159 -0
- xorcise-0.1.0/tests/unit/test_distill_transcript.py +342 -0
- xorcise-0.1.0/tests/unit/test_endpoint_config_guard.py +37 -0
- xorcise-0.1.0/tests/unit/test_eval_checks.py +102 -0
- xorcise-0.1.0/tests/unit/test_eval_operations.py +43 -0
- xorcise-0.1.0/tests/unit/test_eval_resolvers.py +30 -0
- xorcise-0.1.0/tests/unit/test_events_export.py +127 -0
- xorcise-0.1.0/tests/unit/test_events_view.py +201 -0
- xorcise-0.1.0/tests/unit/test_favicon_rest.py +55 -0
- xorcise-0.1.0/tests/unit/test_flatten.py +190 -0
- xorcise-0.1.0/tests/unit/test_flatten_span_events.py +62 -0
- xorcise-0.1.0/tests/unit/test_frontend_build_status.py +130 -0
- xorcise-0.1.0/tests/unit/test_frontend_ensure.py +117 -0
- xorcise-0.1.0/tests/unit/test_frontend_progress.py +139 -0
- xorcise-0.1.0/tests/unit/test_fs_browse.py +69 -0
- xorcise-0.1.0/tests/unit/test_fused_builder_plan.py +85 -0
- xorcise-0.1.0/tests/unit/test_genai_extractor.py +191 -0
- xorcise-0.1.0/tests/unit/test_grade_assembly_telemetry_gaps.py +32 -0
- xorcise-0.1.0/tests/unit/test_grade_combine.py +114 -0
- xorcise-0.1.0/tests/unit/test_grade_deterministic.py +229 -0
- xorcise-0.1.0/tests/unit/test_grade_judge.py +569 -0
- xorcise-0.1.0/tests/unit/test_grader_isolation.py +81 -0
- xorcise-0.1.0/tests/unit/test_guards.py +17 -0
- xorcise-0.1.0/tests/unit/test_headscale_cidr.py +51 -0
- xorcise-0.1.0/tests/unit/test_headscale_cli_stub.py +53 -0
- xorcise-0.1.0/tests/unit/test_headscale_controller.py +277 -0
- xorcise-0.1.0/tests/unit/test_headscale_node_online.py +76 -0
- xorcise-0.1.0/tests/unit/test_headscale_policy.py +167 -0
- xorcise-0.1.0/tests/unit/test_headscale_provision.py +427 -0
- xorcise-0.1.0/tests/unit/test_headscale_public_api.py +17 -0
- xorcise-0.1.0/tests/unit/test_headscale_router_online.py +60 -0
- xorcise-0.1.0/tests/unit/test_home.py +76 -0
- xorcise-0.1.0/tests/unit/test_home_env_upsert.py +61 -0
- xorcise-0.1.0/tests/unit/test_http_catalog_source.py +226 -0
- xorcise-0.1.0/tests/unit/test_ingest_bundle.py +37 -0
- xorcise-0.1.0/tests/unit/test_ingest_jobs.py +96 -0
- xorcise-0.1.0/tests/unit/test_install_pulled.py +149 -0
- xorcise-0.1.0/tests/unit/test_installed_rubric_checks.py +34 -0
- xorcise-0.1.0/tests/unit/test_intel_policy.py +40 -0
- xorcise-0.1.0/tests/unit/test_join_reconcile.py +144 -0
- xorcise-0.1.0/tests/unit/test_join_script.py +283 -0
- xorcise-0.1.0/tests/unit/test_judge_live_test.py +51 -0
- xorcise-0.1.0/tests/unit/test_judge_timeout_config.py +54 -0
- xorcise-0.1.0/tests/unit/test_judge_transcript_config.py +152 -0
- xorcise-0.1.0/tests/unit/test_launch_registry.py +36 -0
- xorcise-0.1.0/tests/unit/test_lifecycle_await_exit.py +26 -0
- xorcise-0.1.0/tests/unit/test_lifecycle_bind_hosts.py +38 -0
- xorcise-0.1.0/tests/unit/test_lifecycle_headscale_plan.py +222 -0
- xorcise-0.1.0/tests/unit/test_lifecycle_polish.py +103 -0
- xorcise-0.1.0/tests/unit/test_mission_collision.py +176 -0
- xorcise-0.1.0/tests/unit/test_mission_contract.py +238 -0
- xorcise-0.1.0/tests/unit/test_mission_manifest_rest.py +62 -0
- xorcise-0.1.0/tests/unit/test_mission_pull.py +437 -0
- xorcise-0.1.0/tests/unit/test_missions_ingestion.py +341 -0
- xorcise-0.1.0/tests/unit/test_missions_rest.py +208 -0
- xorcise-0.1.0/tests/unit/test_network_config_rest.py +52 -0
- xorcise-0.1.0/tests/unit/test_network_facts.py +27 -0
- xorcise-0.1.0/tests/unit/test_network_fence_port.py +24 -0
- xorcise-0.1.0/tests/unit/test_no_hardcoded_localhost.py +24 -0
- xorcise-0.1.0/tests/unit/test_observed_fact_shape.py +42 -0
- xorcise-0.1.0/tests/unit/test_openhands_adapter.py +317 -0
- xorcise-0.1.0/tests/unit/test_openhands_launch_provider.py +51 -0
- xorcise-0.1.0/tests/unit/test_otel_adapters.py +469 -0
- xorcise-0.1.0/tests/unit/test_otel_boot_wiring.py +103 -0
- xorcise-0.1.0/tests/unit/test_otel_decode.py +199 -0
- xorcise-0.1.0/tests/unit/test_otel_mirror.py +30 -0
- xorcise-0.1.0/tests/unit/test_otel_seal_store.py +25 -0
- xorcise-0.1.0/tests/unit/test_otel_stats_projection.py +19 -0
- xorcise-0.1.0/tests/unit/test_otel_store_read_since.py +30 -0
- xorcise-0.1.0/tests/unit/test_otel_traces_migration.py +65 -0
- xorcise-0.1.0/tests/unit/test_package_root.py +25 -0
- xorcise-0.1.0/tests/unit/test_preflight.py +154 -0
- xorcise-0.1.0/tests/unit/test_pull_errors_location.py +22 -0
- xorcise-0.1.0/tests/unit/test_pull_jobs.py +302 -0
- xorcise-0.1.0/tests/unit/test_pull_jobs_rest.py +218 -0
- xorcise-0.1.0/tests/unit/test_real_by_default.py +344 -0
- xorcise-0.1.0/tests/unit/test_real_headscale_guard.py +41 -0
- xorcise-0.1.0/tests/unit/test_reconcile_on_startup.py +247 -0
- xorcise-0.1.0/tests/unit/test_ref_split.py +28 -0
- xorcise-0.1.0/tests/unit/test_report_terrain_objective_grade.py +104 -0
- xorcise-0.1.0/tests/unit/test_reporting_render.py +506 -0
- xorcise-0.1.0/tests/unit/test_reporting_repository.py +202 -0
- xorcise-0.1.0/tests/unit/test_rest_canned.py +52 -0
- xorcise-0.1.0/tests/unit/test_rest_harness_capabilities.py +57 -0
- xorcise-0.1.0/tests/unit/test_role_boot_bind.py +109 -0
- xorcise-0.1.0/tests/unit/test_roles_activate.py +62 -0
- xorcise-0.1.0/tests/unit/test_roles_boot.py +31 -0
- xorcise-0.1.0/tests/unit/test_roles_compose.py +13 -0
- xorcise-0.1.0/tests/unit/test_roles_registry.py +50 -0
- xorcise-0.1.0/tests/unit/test_run_budget.py +34 -0
- xorcise-0.1.0/tests/unit/test_run_control_facts.py +29 -0
- xorcise-0.1.0/tests/unit/test_run_create_preamble.py +112 -0
- xorcise-0.1.0/tests/unit/test_run_create_runcontrol_url.py +49 -0
- xorcise-0.1.0/tests/unit/test_run_create_spine.py +628 -0
- xorcise-0.1.0/tests/unit/test_run_create_static.py +133 -0
- xorcise-0.1.0/tests/unit/test_run_environment_rest.py +89 -0
- xorcise-0.1.0/tests/unit/test_run_readiness.py +176 -0
- xorcise-0.1.0/tests/unit/test_run_stats_fold.py +143 -0
- xorcise-0.1.0/tests/unit/test_run_teardown.py +67 -0
- xorcise-0.1.0/tests/unit/test_run_terminate.py +256 -0
- xorcise-0.1.0/tests/unit/test_runcontrol_attachment_fact.py +47 -0
- xorcise-0.1.0/tests/unit/test_runcontrol_connect.py +254 -0
- xorcise-0.1.0/tests/unit/test_runcontrol_mission_fact.py +40 -0
- xorcise-0.1.0/tests/unit/test_runcontrol_service.py +198 -0
- xorcise-0.1.0/tests/unit/test_runcontrol_signing.py +28 -0
- xorcise-0.1.0/tests/unit/test_runcontrol_store.py +40 -0
- xorcise-0.1.0/tests/unit/test_runner_netoverride.py +132 -0
- xorcise-0.1.0/tests/unit/test_runner_reap_orphans.py +49 -0
- xorcise-0.1.0/tests/unit/test_runner_service_readiness.py +104 -0
- xorcise-0.1.0/tests/unit/test_runner_service_stub.py +188 -0
- xorcise-0.1.0/tests/unit/test_runs_authenticate.py +25 -0
- xorcise-0.1.0/tests/unit/test_runs_events_rest.py +252 -0
- xorcise-0.1.0/tests/unit/test_runs_launch_profile_rest.py +128 -0
- xorcise-0.1.0/tests/unit/test_runs_repository.py +289 -0
- xorcise-0.1.0/tests/unit/test_runs_rest.py +711 -0
- xorcise-0.1.0/tests/unit/test_runs_stats_rest.py +78 -0
- xorcise-0.1.0/tests/unit/test_runs_terminal.py +54 -0
- xorcise-0.1.0/tests/unit/test_runs_terminate_rest.py +50 -0
- xorcise-0.1.0/tests/unit/test_runs_traces_rest.py +28 -0
- xorcise-0.1.0/tests/unit/test_scripted_agent_not_packaged.py +16 -0
- xorcise-0.1.0/tests/unit/test_scripted_agent_unit.py +29 -0
- xorcise-0.1.0/tests/unit/test_sealed_context_shape.py +26 -0
- xorcise-0.1.0/tests/unit/test_startup_tips.py +72 -0
- xorcise-0.1.0/tests/unit/test_startup_tips_and_preamble.py +36 -0
- xorcise-0.1.0/tests/unit/test_static_mission_contract.py +87 -0
- xorcise-0.1.0/tests/unit/test_static_mission_preflight_ingest.py +99 -0
- xorcise-0.1.0/tests/unit/test_stub_tree.py +60 -0
- xorcise-0.1.0/tests/unit/test_system_modules.py +196 -0
- xorcise-0.1.0/tests/unit/test_system_rest.py +25 -0
- xorcise-0.1.0/tests/unit/test_tailscale_dist.py +73 -0
- xorcise-0.1.0/tests/unit/test_telemetry_providers.py +111 -0
- xorcise-0.1.0/tests/unit/test_terrain_attribution.py +34 -0
- xorcise-0.1.0/tests/unit/test_terrain_attribution_v2.py +714 -0
- xorcise-0.1.0/tests/unit/test_terrain_catchup_v2.py +338 -0
- xorcise-0.1.0/tests/unit/test_terrain_live_test.py +74 -0
- xorcise-0.1.0/tests/unit/test_terrain_timeline.py +65 -0
- xorcise-0.1.0/tests/unit/test_terrain_update_store.py +126 -0
- xorcise-0.1.0/tests/unit/test_terrain_updates_infra.py +375 -0
- xorcise-0.1.0/tests/unit/test_terrain_v2_authored_graph.py +84 -0
- xorcise-0.1.0/tests/unit/test_terrain_v2_contract.py +60 -0
- xorcise-0.1.0/tests/unit/test_terrain_v2_known_ids.py +166 -0
- xorcise-0.1.0/tests/unit/test_terrain_v2_objective_reconcile.py +324 -0
- xorcise-0.1.0/tests/unit/test_terrain_v2_projector.py +123 -0
- xorcise-0.1.0/tests/unit/test_terrain_v2_rest.py +193 -0
- xorcise-0.1.0/tests/unit/test_token_counter.py +40 -0
- xorcise-0.1.0/tests/unit/test_trace_receipt_times.py +49 -0
- xorcise-0.1.0/tests/unit/test_up_builds_frontend.py +154 -0
- xorcise-0.1.0/tests/unit/test_up_prints_ui_url.py +31 -0
- xorcise-0.1.0/tests/unit/test_update_check.py +185 -0
- xorcise-0.1.0/uv.lock +2008 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Copy to ~/.xorcise/.env (chmod 0600). Real values are never committed.
|
|
2
|
+
#
|
|
3
|
+
# Every setting is the field name from xorcise.core.config.Settings prefixed with
|
|
4
|
+
# XORCISE_. Anything left unset falls back to the documented default, so the shortest
|
|
5
|
+
# working file is just the three model_* lines below.
|
|
6
|
+
|
|
7
|
+
# --- BYOM model (required for grading) ---------------------------------------
|
|
8
|
+
# XORCISE bundles no model. Point these at any OpenAI-compatible endpoint — a hosted
|
|
9
|
+
# provider, or something you serve yourself (vLLM, Ollama, LM Studio).
|
|
10
|
+
XORCISE_MODEL_KEY=
|
|
11
|
+
XORCISE_MODEL_BASE_URL=
|
|
12
|
+
XORCISE_MODEL_NAME=
|
|
13
|
+
# Raise this for slow or reasoning models — they can spend a while thinking before
|
|
14
|
+
# emitting a verdict. Seconds; default 120.
|
|
15
|
+
# XORCISE_MODEL_TIMEOUT_SECONDS=120
|
|
16
|
+
|
|
17
|
+
# --- Persistence -------------------------------------------------------------
|
|
18
|
+
# Defaults to sqlite:///<home>/xorcise.db, where <home> is ~/.xorcise unless
|
|
19
|
+
# XORCISE_HOME says otherwise. Set this only to move the database elsewhere; a
|
|
20
|
+
# server dialect additionally needs the matching extra (pip install "xorcise[postgres]").
|
|
21
|
+
# XORCISE_DATABASE_URL=sqlite:////absolute/path/to/xorcise.db
|
|
22
|
+
|
|
23
|
+
# --- Mission catalog ---------------------------------------------------------
|
|
24
|
+
# Defaults to the XORCISE.AI catalog, which is what a fresh install browses and pulls
|
|
25
|
+
# missions from. Point a dev build somewhere else here, or clear it to run fully
|
|
26
|
+
# offline — the bundled missions/ bundles need no catalog at all. The UI's
|
|
27
|
+
# connect/disconnect switch toggles access without discarding the endpoint.
|
|
28
|
+
# XORCISE_CATALOG_URL=
|
|
29
|
+
# XORCISE_CATALOG_KEY=
|
|
30
|
+
|
|
31
|
+
# --- Attachment link signing -------------------------------------------------
|
|
32
|
+
# A fresh random secret is generated per process when unset. Pin it only if you need
|
|
33
|
+
# signed attachment URLs to survive a restart or to be shared between processes.
|
|
34
|
+
# XORCISE_RUN_CONTROL_SIGNING_SECRET=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Code owners. With "Require review from Code Owners" in the branch ruleset, these paths
|
|
2
|
+
# cannot merge without a maintainer's approval. See MAINTAINERS.md.
|
|
3
|
+
#
|
|
4
|
+
# @guru-xorciseai Guru Hariharaun — author and maintainer
|
|
5
|
+
# @christo-xorciseai Christo Joby Antony — maintainer
|
|
6
|
+
#
|
|
7
|
+
# Both are on every rule so either can approve; a single owner would deadlock reviews.
|
|
8
|
+
#
|
|
9
|
+
# Two silent failure modes — neither reports an error at merge time:
|
|
10
|
+
# 1. an owner without WRITE access to the repo is ignored;
|
|
11
|
+
# 2. a handle that does not resolve is skipped, and the rule then protects nothing.
|
|
12
|
+
# Check for GitHub's warning banner on this file after pushing.
|
|
13
|
+
|
|
14
|
+
* @guru-xorciseai @christo-xorciseai
|
|
15
|
+
|
|
16
|
+
# Supply-chain critical: a bad change here compromises every release, not just one feature.
|
|
17
|
+
/.github/ @guru-xorciseai @christo-xorciseai
|
|
18
|
+
/.github/workflows/ @guru-xorciseai @christo-xorciseai
|
|
19
|
+
/.github/workflows/release.yml @guru-xorciseai @christo-xorciseai
|
|
20
|
+
/pyproject.toml @guru-xorciseai @christo-xorciseai
|
|
21
|
+
/hatch_build.py @guru-xorciseai @christo-xorciseai
|
|
22
|
+
/uv.lock @guru-xorciseai @christo-xorciseai
|
|
23
|
+
/scripts/ @guru-xorciseai @christo-xorciseai
|
|
24
|
+
/SECURITY.md @guru-xorciseai @christo-xorciseai
|
|
25
|
+
/CODE_OF_CONDUCT.md @guru-xorciseai @christo-xorciseai
|
|
26
|
+
/LICENSE @guru-xorciseai @christo-xorciseai
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Something in XORCISE does not work the way it should.
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels:
|
|
5
|
+
- bug
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Thanks for taking the time to file a bug.
|
|
11
|
+
|
|
12
|
+
**Security vulnerabilities do not belong here.** If you have found a security issue,
|
|
13
|
+
please report it privately — see [SECURITY.md](../blob/main/SECURITY.md). Public
|
|
14
|
+
issues are visible to everyone, including people who would exploit the flaw.
|
|
15
|
+
|
|
16
|
+
Note that missions are **deliberately vulnerable**; that is their purpose.
|
|
17
|
+
Vulnerabilities inside a mission bundle are not XORCISE bugs.
|
|
18
|
+
|
|
19
|
+
- type: checkboxes
|
|
20
|
+
id: preflight
|
|
21
|
+
attributes:
|
|
22
|
+
label: Before you file
|
|
23
|
+
options:
|
|
24
|
+
- label: I searched existing issues and this is not a duplicate.
|
|
25
|
+
required: true
|
|
26
|
+
- label: This is not a security vulnerability (those go to SECURITY.md).
|
|
27
|
+
required: true
|
|
28
|
+
|
|
29
|
+
- type: input
|
|
30
|
+
id: version
|
|
31
|
+
attributes:
|
|
32
|
+
label: XORCISE version
|
|
33
|
+
description: Output of `xorcise --version`.
|
|
34
|
+
placeholder: "0.1.0"
|
|
35
|
+
validations:
|
|
36
|
+
required: true
|
|
37
|
+
|
|
38
|
+
- type: dropdown
|
|
39
|
+
id: install-method
|
|
40
|
+
attributes:
|
|
41
|
+
label: How did you install XORCISE?
|
|
42
|
+
options:
|
|
43
|
+
- pip / uv from PyPI
|
|
44
|
+
- From a git checkout (editable install)
|
|
45
|
+
- From a built wheel
|
|
46
|
+
- Other (describe below)
|
|
47
|
+
validations:
|
|
48
|
+
required: true
|
|
49
|
+
|
|
50
|
+
- type: input
|
|
51
|
+
id: os
|
|
52
|
+
attributes:
|
|
53
|
+
label: Operating system
|
|
54
|
+
description: Include the version. On Linux, the distribution too.
|
|
55
|
+
placeholder: "Ubuntu 24.04 / macOS 15.1 / Windows 11 + WSL2"
|
|
56
|
+
validations:
|
|
57
|
+
required: true
|
|
58
|
+
|
|
59
|
+
- type: input
|
|
60
|
+
id: python-version
|
|
61
|
+
attributes:
|
|
62
|
+
label: Python version
|
|
63
|
+
description: Output of `python --version`. XORCISE requires 3.12 or newer.
|
|
64
|
+
placeholder: "3.12.3"
|
|
65
|
+
validations:
|
|
66
|
+
required: true
|
|
67
|
+
|
|
68
|
+
- type: input
|
|
69
|
+
id: docker-version
|
|
70
|
+
attributes:
|
|
71
|
+
label: Docker version
|
|
72
|
+
description: >-
|
|
73
|
+
Output of `docker --version`. Required if the bug involves running a mission,
|
|
74
|
+
`xorcise up`, the runner, or the control plane. Write "n/a" if unrelated.
|
|
75
|
+
placeholder: "Docker version 27.3.1"
|
|
76
|
+
validations:
|
|
77
|
+
required: true
|
|
78
|
+
|
|
79
|
+
- type: textarea
|
|
80
|
+
id: reproduction
|
|
81
|
+
attributes:
|
|
82
|
+
label: Steps to reproduce
|
|
83
|
+
description: >-
|
|
84
|
+
Exact commands, in order. A bug someone else can reproduce gets fixed; one that only
|
|
85
|
+
happens on your machine usually does not.
|
|
86
|
+
placeholder: |
|
|
87
|
+
1. xorcise up
|
|
88
|
+
2. xorcise mission pull <name>
|
|
89
|
+
3. xorcise run create --mission <name> --agent <agent>
|
|
90
|
+
4. ...
|
|
91
|
+
validations:
|
|
92
|
+
required: true
|
|
93
|
+
|
|
94
|
+
- type: textarea
|
|
95
|
+
id: expected
|
|
96
|
+
attributes:
|
|
97
|
+
label: Expected behaviour
|
|
98
|
+
validations:
|
|
99
|
+
required: true
|
|
100
|
+
|
|
101
|
+
- type: textarea
|
|
102
|
+
id: actual
|
|
103
|
+
attributes:
|
|
104
|
+
label: What actually happened
|
|
105
|
+
description: Include the full error message if there is one.
|
|
106
|
+
validations:
|
|
107
|
+
required: true
|
|
108
|
+
|
|
109
|
+
- type: textarea
|
|
110
|
+
id: logs
|
|
111
|
+
attributes:
|
|
112
|
+
label: Logs / output
|
|
113
|
+
description: >-
|
|
114
|
+
Relevant output. **Remove secrets first** — API keys, tokens, tailnet auth keys,
|
|
115
|
+
certificates, internal hostnames. This box renders as a code block automatically.
|
|
116
|
+
render: shell
|
|
117
|
+
validations:
|
|
118
|
+
required: false
|
|
119
|
+
|
|
120
|
+
- type: textarea
|
|
121
|
+
id: context
|
|
122
|
+
attributes:
|
|
123
|
+
label: Anything else
|
|
124
|
+
description: Screenshots, related issues, workarounds you have found.
|
|
125
|
+
validations:
|
|
126
|
+
required: false
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Issue-template chooser configuration.
|
|
2
|
+
#
|
|
3
|
+
# `blank_issues_enabled: false` forces every report through one of the structured forms. That
|
|
4
|
+
# is not bureaucracy: the single biggest cost in triage is going back and forth asking for a
|
|
5
|
+
# version number and a reproduction, and the forms collect both up front.
|
|
6
|
+
#
|
|
7
|
+
# The security link is the important one. It routes vulnerability reports to GitHub's private
|
|
8
|
+
# advisory flow BEFORE someone posts an exploitable flaw in a public issue.
|
|
9
|
+
blank_issues_enabled: false
|
|
10
|
+
|
|
11
|
+
contact_links:
|
|
12
|
+
- name: 🔒 Report a security vulnerability (private)
|
|
13
|
+
# PLACEHOLDER: xorcise-ai/xorcise — substitute the real GitHub org/repo.
|
|
14
|
+
# Requires "Private vulnerability reporting" to be enabled in repository settings.
|
|
15
|
+
url: https://github.com/xorcise-ai/xorcise/security/advisories/new
|
|
16
|
+
about: >-
|
|
17
|
+
Never report a vulnerability in a public issue. Use GitHub's private advisory form so the
|
|
18
|
+
problem can be fixed before it is disclosed. See SECURITY.md for scope and what to include.
|
|
19
|
+
|
|
20
|
+
- name: 💬 Questions and general discussion
|
|
21
|
+
# PLACEHOLDER: xorcise-ai/xorcise. If GitHub Discussions is not enabled, remove this entry
|
|
22
|
+
# rather than leaving a link that 404s.
|
|
23
|
+
url: https://github.com/xorcise-ai/xorcise/discussions
|
|
24
|
+
about: >-
|
|
25
|
+
Usage questions, ideas that are not yet a concrete feature request, and "am I doing this
|
|
26
|
+
right?" — these get better answers in Discussions than in the issue tracker.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Suggest a capability or improvement for XORCISE.
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels:
|
|
5
|
+
- feature
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Thanks for the suggestion. The most useful feature requests describe a **problem you
|
|
11
|
+
hit**, not just a solution you have in mind — that leaves room for a better design than
|
|
12
|
+
either of us had first.
|
|
13
|
+
|
|
14
|
+
- type: checkboxes
|
|
15
|
+
id: preflight
|
|
16
|
+
attributes:
|
|
17
|
+
label: Before you file
|
|
18
|
+
options:
|
|
19
|
+
- label: I searched existing issues and discussions and this is not a duplicate.
|
|
20
|
+
required: true
|
|
21
|
+
|
|
22
|
+
- type: textarea
|
|
23
|
+
id: problem
|
|
24
|
+
attributes:
|
|
25
|
+
label: What problem are you trying to solve?
|
|
26
|
+
description: >-
|
|
27
|
+
What are you trying to do, and what stops you today? Concrete beats abstract:
|
|
28
|
+
"I cannot compare two agents across the same mission set without exporting to CSV
|
|
29
|
+
by hand" is far more useful than "reporting should be better".
|
|
30
|
+
validations:
|
|
31
|
+
required: true
|
|
32
|
+
|
|
33
|
+
- type: textarea
|
|
34
|
+
id: proposal
|
|
35
|
+
attributes:
|
|
36
|
+
label: What would you like to happen?
|
|
37
|
+
description: Your proposed solution, if you have one. Sketch the CLI or UI if it helps.
|
|
38
|
+
validations:
|
|
39
|
+
required: true
|
|
40
|
+
|
|
41
|
+
- type: textarea
|
|
42
|
+
id: alternatives
|
|
43
|
+
attributes:
|
|
44
|
+
label: Alternatives you have considered
|
|
45
|
+
description: Including workarounds you are using now.
|
|
46
|
+
validations:
|
|
47
|
+
required: false
|
|
48
|
+
|
|
49
|
+
- type: dropdown
|
|
50
|
+
id: area
|
|
51
|
+
attributes:
|
|
52
|
+
label: Which part of XORCISE does this affect?
|
|
53
|
+
multiple: true
|
|
54
|
+
options:
|
|
55
|
+
- CLI
|
|
56
|
+
- Web UI / frontend
|
|
57
|
+
- Runner / mission execution
|
|
58
|
+
- Control plane / networking
|
|
59
|
+
- Agent harness adapters
|
|
60
|
+
- Mission format or schema
|
|
61
|
+
- Grading / evaluation
|
|
62
|
+
- Reporting
|
|
63
|
+
- Packaging / installation
|
|
64
|
+
- Documentation
|
|
65
|
+
- Not sure
|
|
66
|
+
validations:
|
|
67
|
+
required: false
|
|
68
|
+
|
|
69
|
+
- type: checkboxes
|
|
70
|
+
id: breaking
|
|
71
|
+
attributes:
|
|
72
|
+
label: Compatibility
|
|
73
|
+
options:
|
|
74
|
+
- label: >-
|
|
75
|
+
As far as I can tell, this would require a breaking change to an existing
|
|
76
|
+
interface (CLI options, config, mission schema, adapter contract, output format).
|
|
77
|
+
required: false
|
|
78
|
+
|
|
79
|
+
- type: checkboxes
|
|
80
|
+
id: contribution
|
|
81
|
+
attributes:
|
|
82
|
+
label: Contribution
|
|
83
|
+
options:
|
|
84
|
+
- label: I would be willing to work on this myself.
|
|
85
|
+
required: false
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Thanks for contributing to XORCISE.
|
|
3
|
+
|
|
4
|
+
Nothing here is busywork: each item below maps to a check a reviewer would otherwise have to
|
|
5
|
+
run by hand. Delete any section that genuinely does not apply, and say why.
|
|
6
|
+
-->
|
|
7
|
+
|
|
8
|
+
## What changed
|
|
9
|
+
|
|
10
|
+
<!-- The change itself, in a sentence or two. -->
|
|
11
|
+
|
|
12
|
+
## Why
|
|
13
|
+
|
|
14
|
+
<!-- The problem this solves. Link an issue with "Closes #123" if there is one. If this is a
|
|
15
|
+
behaviour change, say what a user could not do before and can do now. -->
|
|
16
|
+
|
|
17
|
+
## Testing
|
|
18
|
+
|
|
19
|
+
<!-- What you actually ran, and what it printed. "Tests pass" is not evidence; a command and
|
|
20
|
+
its result is. -->
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
# e.g. uv run pytest -m unit -n auto
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Test lanes affected** (tick every lane your change could plausibly break):
|
|
27
|
+
|
|
28
|
+
- [ ] `unit` — no Docker, fast
|
|
29
|
+
- [ ] `adapters` — port/adapter contracts
|
|
30
|
+
- [ ] `topology` — manifest / compose / import / extras parity
|
|
31
|
+
- [ ] `integration` — needs Docker or a live server process
|
|
32
|
+
- [ ] `e2e` — full `xorcise up` + scripted agent
|
|
33
|
+
- [ ] `frontend` — Next.js typecheck / vitest
|
|
34
|
+
|
|
35
|
+
> The `integration` and `e2e` lanes do **not** run on pull requests by default — they need a
|
|
36
|
+
> Docker daemon and bind fixed ports. If your change touches the runner, the control plane,
|
|
37
|
+
> networking, or `xorcise up`, ask a maintainer to add the **`full-ci`** label so those lanes
|
|
38
|
+
> run on this PR before it merges.
|
|
39
|
+
|
|
40
|
+
## User-facing impact
|
|
41
|
+
|
|
42
|
+
- [ ] No user-visible change (internal refactor, tests, docs only)
|
|
43
|
+
- [ ] Backwards-compatible addition (new command, new optional flag, new field)
|
|
44
|
+
- [ ] **Breaking change** — describe the break and the migration path below
|
|
45
|
+
|
|
46
|
+
<!-- Public interfaces include: CLI commands and options, configuration files, environment
|
|
47
|
+
variables, mission manifests and schema, agent/adapter contracts, documented Python
|
|
48
|
+
APIs, REST contracts, and machine-readable output formats. Changing any of these affects
|
|
49
|
+
the next version number — see CONTRIBUTING.md. -->
|
|
50
|
+
|
|
51
|
+
## Documentation
|
|
52
|
+
|
|
53
|
+
- [ ] No documentation change needed
|
|
54
|
+
- [ ] Documentation updated in this PR
|
|
55
|
+
- [ ] Documentation needed and tracked in a follow-up issue (link it)
|
|
56
|
+
|
|
57
|
+
## Dependencies
|
|
58
|
+
|
|
59
|
+
- [ ] No dependency changes
|
|
60
|
+
- [ ] Dependencies changed **and** the lockfile is committed
|
|
61
|
+
(`uv lock` for Python, `npm install` for `frontend/` — CI runs `uv sync --locked` and
|
|
62
|
+
`npm ci`, which fail if a manifest and its lockfile disagree)
|
|
63
|
+
|
|
64
|
+
## Checklist
|
|
65
|
+
|
|
66
|
+
- [ ] `uv run ruff check .` and `uv run ruff format --check .` pass
|
|
67
|
+
- [ ] `uv run mypy` passes (strict)
|
|
68
|
+
- [ ] `uv run lint-imports` passes (architecture layer rules)
|
|
69
|
+
- [ ] Relevant test lanes pass locally
|
|
70
|
+
- [ ] **No secrets, credentials, tokens, keys, internal hostnames or customer data** appear in
|
|
71
|
+
the diff — including in test fixtures, logs and comments
|
|
72
|
+
- [ ] No references to internal-only systems (private trackers, internal URLs, internal
|
|
73
|
+
process names) in code or documentation
|
|
74
|
+
|
|
75
|
+
## Release notes
|
|
76
|
+
|
|
77
|
+
<!-- Maintainers: apply ONE of these labels so this PR lands in the right section of the
|
|
78
|
+
generated release notes (.github/release.yml):
|
|
79
|
+
breaking-change · feature · enhancement · bug · security · documentation ·
|
|
80
|
+
dependencies · internal · skip-release-notes
|
|
81
|
+
-->
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
By opening this pull request you agree that your contribution is licensed under the
|
|
86
|
+
[Apache License 2.0](../LICENSE), and that you have read the
|
|
87
|
+
[Code of Conduct](../CODE_OF_CONDUCT.md).
|
|
88
|
+
|
|
89
|
+
**Found a security vulnerability?** Do not open a pull request or a public issue — follow
|
|
90
|
+
[SECURITY.md](../SECURITY.md) instead.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# CodeQL analysis config. Note this is not the workflow's `paths-ignore`, which only decides
|
|
2
|
+
# whether the workflow runs — this is what removes code from the database.
|
|
3
|
+
name: "XORCISE CodeQL config"
|
|
4
|
+
|
|
5
|
+
paths-ignore:
|
|
6
|
+
# Mission bundles are deliberately vulnerable: SQL injection, weak crypto and hardcoded flags
|
|
7
|
+
# are the content, not defects. Scanning them buries real findings under intentional ones.
|
|
8
|
+
# Harmless to keep if missions/ is later removed — an exclusion for a missing path is a no-op.
|
|
9
|
+
- missions
|
|
10
|
+
# Generated Next.js bundle. The authored sources under frontend/ are analysed instead.
|
|
11
|
+
- src/xorcise/core/frontend/_static
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Dependency updates.
|
|
2
|
+
#
|
|
3
|
+
# The `github-actions` ecosystem is the security-critical one: every `uses:` is pinned to a
|
|
4
|
+
# commit SHA, and Dependabot is what stops those pins going stale. `ignore` only suppresses
|
|
5
|
+
# version-bump PRs — security alerts and fixes still arrive.
|
|
6
|
+
version: 2
|
|
7
|
+
|
|
8
|
+
updates:
|
|
9
|
+
- package-ecosystem: uv
|
|
10
|
+
directory: /
|
|
11
|
+
schedule:
|
|
12
|
+
interval: weekly
|
|
13
|
+
day: monday
|
|
14
|
+
time: "06:00"
|
|
15
|
+
timezone: Etc/UTC
|
|
16
|
+
# Supply-chain maturity window: never adopt a release in its first 7 days.
|
|
17
|
+
#
|
|
18
|
+
# The attack this blocks is a compromised or hijacked package publishing a malicious
|
|
19
|
+
# version. Those are typically caught and yanked within hours-to-days, so the danger
|
|
20
|
+
# window is the release's infancy — precisely when an eager auto-bump would take it.
|
|
21
|
+
# Waiting lets the ecosystem find the problem for us; a version still standing after a
|
|
22
|
+
# week has been exercised by thousands of other installs.
|
|
23
|
+
#
|
|
24
|
+
# This deliberately applies to VERSION updates only. GitHub does not apply cooldown to
|
|
25
|
+
# Dependabot SECURITY updates, which is the behaviour we want: a fix for a known CVE
|
|
26
|
+
# must not sit in a queue for a week. Fast for fixes, patient for features.
|
|
27
|
+
cooldown:
|
|
28
|
+
default-days: 7
|
|
29
|
+
open-pull-requests-limit: 5
|
|
30
|
+
labels:
|
|
31
|
+
- dependencies
|
|
32
|
+
groups:
|
|
33
|
+
python-minor-patch:
|
|
34
|
+
update-types:
|
|
35
|
+
- minor
|
|
36
|
+
- patch
|
|
37
|
+
ignore:
|
|
38
|
+
# opentelemetry-proto is pinned exactly: it decodes the OTLP wire format, so a mismatch
|
|
39
|
+
# corrupts traces rather than raising an import error. Majors only — minor/patch still flow.
|
|
40
|
+
- dependency-name: opentelemetry-*
|
|
41
|
+
update-types: ["version-update:semver-major"]
|
|
42
|
+
|
|
43
|
+
- package-ecosystem: npm
|
|
44
|
+
directory: /frontend
|
|
45
|
+
schedule:
|
|
46
|
+
interval: weekly
|
|
47
|
+
day: monday
|
|
48
|
+
time: "06:00"
|
|
49
|
+
timezone: Etc/UTC
|
|
50
|
+
# Supply-chain maturity window: never adopt a release in its first 7 days.
|
|
51
|
+
#
|
|
52
|
+
# The attack this blocks is a compromised or hijacked package publishing a malicious
|
|
53
|
+
# version. Those are typically caught and yanked within hours-to-days, so the danger
|
|
54
|
+
# window is the release's infancy — precisely when an eager auto-bump would take it.
|
|
55
|
+
# Waiting lets the ecosystem find the problem for us; a version still standing after a
|
|
56
|
+
# week has been exercised by thousands of other installs.
|
|
57
|
+
#
|
|
58
|
+
# This deliberately applies to VERSION updates only. GitHub does not apply cooldown to
|
|
59
|
+
# Dependabot SECURITY updates, which is the behaviour we want: a fix for a known CVE
|
|
60
|
+
# must not sit in a queue for a week. Fast for fixes, patient for features.
|
|
61
|
+
cooldown:
|
|
62
|
+
default-days: 7
|
|
63
|
+
open-pull-requests-limit: 5
|
|
64
|
+
labels:
|
|
65
|
+
- dependencies
|
|
66
|
+
groups:
|
|
67
|
+
frontend-minor-patch:
|
|
68
|
+
update-types:
|
|
69
|
+
- minor
|
|
70
|
+
- patch
|
|
71
|
+
|
|
72
|
+
# Grouped into one PR: a single reviewable PR actually gets merged, which is what keeps the
|
|
73
|
+
# SHA pins current.
|
|
74
|
+
- package-ecosystem: github-actions
|
|
75
|
+
directory: /
|
|
76
|
+
schedule:
|
|
77
|
+
interval: weekly
|
|
78
|
+
day: monday
|
|
79
|
+
time: "06:00"
|
|
80
|
+
timezone: Etc/UTC
|
|
81
|
+
# Supply-chain maturity window: never adopt a release in its first 7 days.
|
|
82
|
+
#
|
|
83
|
+
# The attack this blocks is a compromised or hijacked package publishing a malicious
|
|
84
|
+
# version. Those are typically caught and yanked within hours-to-days, so the danger
|
|
85
|
+
# window is the release's infancy — precisely when an eager auto-bump would take it.
|
|
86
|
+
# Waiting lets the ecosystem find the problem for us; a version still standing after a
|
|
87
|
+
# week has been exercised by thousands of other installs.
|
|
88
|
+
#
|
|
89
|
+
# This deliberately applies to VERSION updates only. GitHub does not apply cooldown to
|
|
90
|
+
# Dependabot SECURITY updates, which is the behaviour we want: a fix for a known CVE
|
|
91
|
+
# must not sit in a queue for a week. Fast for fixes, patient for features.
|
|
92
|
+
cooldown:
|
|
93
|
+
default-days: 7
|
|
94
|
+
open-pull-requests-limit: 5
|
|
95
|
+
labels:
|
|
96
|
+
- dependencies
|
|
97
|
+
- internal
|
|
98
|
+
groups:
|
|
99
|
+
github-actions:
|
|
100
|
+
patterns:
|
|
101
|
+
- "*"
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Generated release-notes configuration.
|
|
2
|
+
#
|
|
3
|
+
# NOT a workflow. GitHub reads this file when `gh release create --generate-notes` runs (see
|
|
4
|
+
# .github/workflows/release.yml) and uses it to group merged pull requests into sections.
|
|
5
|
+
#
|
|
6
|
+
# This is what makes "merge ten PRs, release once" produce a readable changelog: each PR is
|
|
7
|
+
# filed by its label, so the notes for v0.2.0 arrive already sorted into breaking changes,
|
|
8
|
+
# features, fixes and so on — rather than a flat list of commit subjects.
|
|
9
|
+
#
|
|
10
|
+
# Labelling a PR is therefore part of reviewing it. An unlabelled PR still appears, under
|
|
11
|
+
# "Other changes".
|
|
12
|
+
changelog:
|
|
13
|
+
exclude:
|
|
14
|
+
labels:
|
|
15
|
+
# Routine noise that should not appear in user-facing notes.
|
|
16
|
+
- skip-release-notes
|
|
17
|
+
categories:
|
|
18
|
+
# Order matters — this is the order sections appear in the notes. Breaking changes go
|
|
19
|
+
# first because they are the only thing a user MUST read before upgrading.
|
|
20
|
+
- title: ⚠️ Breaking changes
|
|
21
|
+
labels:
|
|
22
|
+
- breaking-change
|
|
23
|
+
|
|
24
|
+
- title: 🚀 New features
|
|
25
|
+
labels:
|
|
26
|
+
- feature
|
|
27
|
+
|
|
28
|
+
- title: ✨ Enhancements
|
|
29
|
+
labels:
|
|
30
|
+
- enhancement
|
|
31
|
+
|
|
32
|
+
- title: 🐛 Bug fixes
|
|
33
|
+
labels:
|
|
34
|
+
- bug
|
|
35
|
+
|
|
36
|
+
- title: 🔒 Security
|
|
37
|
+
labels:
|
|
38
|
+
- security
|
|
39
|
+
|
|
40
|
+
- title: 📚 Documentation
|
|
41
|
+
labels:
|
|
42
|
+
- documentation
|
|
43
|
+
|
|
44
|
+
- title: 📦 Dependencies
|
|
45
|
+
labels:
|
|
46
|
+
- dependencies
|
|
47
|
+
|
|
48
|
+
- title: 🔧 Internal
|
|
49
|
+
labels:
|
|
50
|
+
- internal
|
|
51
|
+
|
|
52
|
+
# Catch-all. `*` matches any PR not already claimed by a category above, so nothing is
|
|
53
|
+
# ever silently dropped from the notes.
|
|
54
|
+
- title: Other changes
|
|
55
|
+
labels:
|
|
56
|
+
- "*"
|