argus-code 0.5.1__tar.gz → 0.5.2__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.
- {argus_code-0.5.1 → argus_code-0.5.2}/.github/workflows/test.yml +74 -74
- argus_code-0.5.2/.xo/project.json +7 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/NOTICE +22 -22
- {argus_code-0.5.1 → argus_code-0.5.2}/PKG-INFO +3 -4
- {argus_code-0.5.1 → argus_code-0.5.2}/README.md +2 -3
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/.astro/content.d.ts +155 -155
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/.astro/types.d.ts +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/e2e/smoke.spec.ts +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/app/shell/CommandPalette.tsx +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/app/shell/Sidebar.tsx +2 -3
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/alerts/AlertsPage.tsx +2 -2
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routeTree.gen.ts +0 -21
- argus_code-0.5.2/dashboard-dist/assets/AlertsPage-4HlLKV-X.js +1 -0
- argus_code-0.5.1/dashboard-dist/assets/AreaLine-VUt7zZPY.js → argus_code-0.5.2/dashboard-dist/assets/AreaLine-BQsLuA8C.js +1 -1
- argus_code-0.5.2/dashboard-dist/assets/AttentionStrip-C1RqWKWe.js +1 -0
- argus_code-0.5.1/dashboard-dist/assets/Bars-gdNIlXNl.js → argus_code-0.5.2/dashboard-dist/assets/Bars-DMb_quIu.js +1 -1
- argus_code-0.5.2/dashboard-dist/assets/Button-CpS_v0eC.js +1 -0
- argus_code-0.5.1/dashboard-dist/assets/ChartTable-C2SF4hxC.js → argus_code-0.5.2/dashboard-dist/assets/ChartTable-BVgzTIE9.js +1 -1
- argus_code-0.5.1/dashboard-dist/assets/Chip-CSAZEvs5.js → argus_code-0.5.2/dashboard-dist/assets/Chip-CFh85KNf.js +1 -1
- argus_code-0.5.1/dashboard-dist/assets/ErrorPanel-YJvBzoti.js → argus_code-0.5.2/dashboard-dist/assets/ErrorPanel-CI3QUuQD.js +1 -1
- argus_code-0.5.1/dashboard-dist/assets/ModelsPage-CC5HgXSC.js → argus_code-0.5.2/dashboard-dist/assets/ModelsPage-B7cswqCK.js +1 -1
- argus_code-0.5.2/dashboard-dist/assets/MultiLine-m6Bb_pWg.js +1 -0
- argus_code-0.5.2/dashboard-dist/assets/OverviewPage-BJsuaA9A.js +1 -0
- argus_code-0.5.1/dashboard-dist/assets/Panel-C0lmkoau.js → argus_code-0.5.2/dashboard-dist/assets/Panel-CJXvZgtF.js +1 -1
- argus_code-0.5.2/dashboard-dist/assets/SearchPage-C9-thlw8.js +1 -0
- argus_code-0.5.1/dashboard-dist/assets/SessionPage-h4KU-Iel.js → argus_code-0.5.2/dashboard-dist/assets/SessionPage-D9AQ-1zV.js +2 -2
- argus_code-0.5.1/dashboard-dist/assets/SessionsPage-BQOKS0MJ.js → argus_code-0.5.2/dashboard-dist/assets/SessionsPage-DQuMS1ZJ.js +2 -2
- argus_code-0.5.2/dashboard-dist/assets/SettingsPage-ngGLbFIg.js +1 -0
- argus_code-0.5.1/dashboard-dist/assets/StackedColumns-D_Ewnsrg.js → argus_code-0.5.2/dashboard-dist/assets/StackedColumns-Dow8yAFe.js +1 -1
- argus_code-0.5.1/dashboard-dist/assets/Tile-kzNeIivi.js → argus_code-0.5.2/dashboard-dist/assets/Tile-5_GRUf2q.js +1 -1
- argus_code-0.5.2/dashboard-dist/assets/TimelineTab-DfQceFmu.js +1 -0
- argus_code-0.5.2/dashboard-dist/assets/ToolsPage-DrFNg1A7.js +1 -0
- argus_code-0.5.1/dashboard-dist/assets/TrendsPage-tRubbqz4.js → argus_code-0.5.2/dashboard-dist/assets/TrendsPage-CYu9wobK.js +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/cumulative-C3-3HW0n.js +1 -1
- argus_code-0.5.1/dashboard-dist/assets/index-CiLtq5Ja.js → argus_code-0.5.2/dashboard-dist/assets/index-9L00WNJR.js +7 -7
- argus_code-0.5.2/dashboard-dist/assets/index-CpQkAwD7.css +1 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/rollups-C1zMwbci.js +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/series-BjP-80tt.js +1 -1
- argus_code-0.5.1/dashboard-dist/assets/uplotTheme-dVdt58Jw.js → argus_code-0.5.2/dashboard-dist/assets/uplotTheme-CBSv2dtb.js +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/uplotTheme-D1GxaB_c.css +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/windows-7ctt19Z4.js +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/index.html +3 -3
- {argus_code-0.5.1 → argus_code-0.5.2}/pyproject.toml +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/__init__.py +1 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/collector/test_first_run_shutdown.py +87 -87
- {argus_code-0.5.1 → argus_code-0.5.2}/uv.lock +983 -983
- argus_code-0.5.1/dashboard/src/features/budgets/BudgetsPage.tsx +0 -26
- argus_code-0.5.1/dashboard/src/routes/budgets.tsx +0 -3
- argus_code-0.5.1/dashboard-dist/assets/AlertsPage-Cs8_bu24.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/AttentionStrip-uulCqq7B.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/BudgetsPage-DNk4EMLO.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/Button-BqHL1YGs.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/MultiLine-DaOioHM_.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/OverviewPage-DtYtpPeA.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/Pill-BaEMC6Uo.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/SearchPage-DENLda5C.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/SettingsPage-JyOusfCm.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/TimelineTab-D86rkM-N.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/ToolsPage-DAKkhNxC.js +0 -1
- argus_code-0.5.1/dashboard-dist/assets/index-DwJcAbKT.css +0 -1
- {argus_code-0.5.1 → argus_code-0.5.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/.github/pull_request_template.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/.gitignore +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/.npmrc +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/AGENTS.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/ARCHITECTURE.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/CLAUDE.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/CONTRIBUTING.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/LICENSE +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/PRD.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/SECURITY.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/TESTING.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/.astro/content-assets.mjs +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/.astro/content-modules.mjs +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/AGENTS.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/index.html +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/package-lock.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/package.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/playwright.config.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/scripts/size.mjs +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/App.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/app/queryClient.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/app/router.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/app/shell/CommandPalette.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/app/shell/Shell.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/app/shell/Sidebar.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/app/shell/TopBar.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/AlertStrip.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/AreaLine.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/AreaLine.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/Bars.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/Bars.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/CalendarHeatmap.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/CalendarHeatmap.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/ChartTable.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/GridHeatmap.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/Legend.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/Meter.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/Meter.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/Minimap.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/Minimap.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/MultiLine.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/README.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/Scatter.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/Sparkline.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/StackedColumns.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/UPlotChart.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/ramp.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/charts/uplotTheme.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Button.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Chip.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/CopyId.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/DataTable.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/EmptyState.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/ErrorPanel.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Icon.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Kbd.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Panel.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Pill.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Pill.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Seg.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Seg.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Skeleton.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Tile.test.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/components/ui/Tile.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/models/ModelsPage.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/overview/AttentionStrip.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/overview/OverviewPage.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/overview/TopSessions.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/overview/useOverviewModel.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/overview/useOverviewModel.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/search/SearchPage.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/search/cleanSnippet.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/search/cleanSnippet.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/session/OverviewTab.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/session/SessionPage.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/session/SubagentsTab.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/session/TimelineTab.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/session/model.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/session/model.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/sessions/AnalysisStrip.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/sessions/SessionsPage.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/sessions/SessionsTable.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/sessions/filters.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/sessions/filters.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/settings/SettingsPage.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/tools/ToolsPage.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/tools/toolsOverTime.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/tools/toolsOverTime.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/features/trends/TrendsPage.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/composition.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/composition.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/cumulative.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/cumulative.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/deltas.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/deltas.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/hourWeekday.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/hourWeekday.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/rollups.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/rollups.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/series.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/series.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/testutil.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/trendsMetrics.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/trendsMetrics.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/windows.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/analysis/windows.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/__fixtures__/alerts.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/__fixtures__/overview.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/__fixtures__/sessions.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/__fixtures__/timeline.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/__fixtures__/tools-overview.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/__fixtures__/trends.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/client.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/client.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/hooks.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/api/schemas.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/format/format.test.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/lib/format/format.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/main.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/__root.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/alerts.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/index.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/models.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/prompts.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/search.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/session.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/sessions.$id.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/sessions.index.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/settings.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/tools.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/routes/trends.tsx +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/src/styles.css +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/tsconfig.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/vite.config.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/vitest.config.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard/vitest.setup.ts +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/dashboard-dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/pricing/2026-05-02.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/pricing/2026-06-12.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/AGENTS.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/AGENTS.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/base.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/adapter.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/discover.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/extract_tool_calls.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/extract_transcript.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/extract_turns.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/history_jsonl.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/ingest_file.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/model.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/claude_code/schemas.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/adapters/registry.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/cli.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/collector/AGENTS.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/collector/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/collector/aggregate.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/collector/first_run.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/collector/pipeline.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/collector/rollup_subagents.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/collector/scheduler.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/collector/search_backfill.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/collector/watcher.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/core/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/core/runtime.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/daemon/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/daemon/logging.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/daemon/pidfile.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/daemon/process.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/daemon/service.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/detectors/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/detectors/base.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/detectors/registry.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/detectors/tool_error_rate_spike.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/pricing/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/pricing/compute.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/pricing/load.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/pricing/refresh.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/pricing/types.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/scaffold/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/scaffold/scaffolder.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/scaffold/snapshot.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/scaffold/storage.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/schema/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/schema/types.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/server/AGENTS.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/server/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/server/api.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/server/app.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/store/AGENTS.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/store/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/store/db.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/store/migrations/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/store/migrations/inline.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/python/argus/store/repository.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/agents/code-reviewer.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/agents/security-auditor.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/commands/commit.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/commands/deploy.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/commands/fix-issue.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/commands/pr.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/commands/review.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/rules/api-conventions.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/rules/code-style.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/rules/testing.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/settings.json +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/.claude/skills/example/SKILL.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/templates/default/CLAUDE.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/AGENTS.md +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_adapter.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_discover.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_extract_tool_calls.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_extract_transcript.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_extract_turns.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_history_jsonl.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_ingest_file.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_integration.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_model.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_path_containment.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/claude_code/test_schemas.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/adapters/test_registry.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/cli/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/cli/test_indexing_cli.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/collector/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/collector/test_aggregate.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/collector/test_first_run.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/collector/test_pipeline.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/collector/test_rollup_subagents.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/collector/test_scheduler.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/collector/test_watcher.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/conftest.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/core/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/core/test_runtime.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/daemon/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/daemon/test_logs.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/daemon/test_no_claude_dir.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/daemon/test_pidfile.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/daemon/test_process.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/daemon/test_service.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/daemon/test_spawn_safe_path.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/daemon/test_yield.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/dashboard/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/dashboard/test_no_raw_html.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/detectors/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/detectors/test_registry.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/detectors/test_tool_error_rate_spike.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/pricing/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/pricing/test_compute.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/pricing/test_load.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/pricing/test_refresh.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/scaffold/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/scaffold/test_bundled_template.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/scaffold/test_cli_claude.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/scaffold/test_scaffold_containment.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/scaffold/test_scaffolder.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/scaffold/test_snapshot.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/scaffold/test_snapshot_secrets.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/scaffold/test_storage.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/schema/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/schema/test_types.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/server/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/server/test_api.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/server/test_api_search.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/server/test_param_bounds.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/server/test_read_cache.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/server/test_server.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/server/test_spa_fallback.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/server/test_week_of.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/store/__init__.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/store/test_db.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/store/test_repository.py +0 -0
- {argus_code-0.5.1 → argus_code-0.5.2}/tests/test_e2e.py +0 -0
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
name: test
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main]
|
|
6
|
-
pull_request:
|
|
7
|
-
|
|
8
|
-
concurrency:
|
|
9
|
-
group: ${{ github.workflow }}-${{ github.ref }}
|
|
10
|
-
cancel-in-progress: true
|
|
11
|
-
|
|
12
|
-
jobs:
|
|
13
|
-
pytest:
|
|
14
|
-
name: pytest (${{ matrix.os }}, py${{ matrix.python-version }})
|
|
15
|
-
runs-on: ${{ matrix.os }}
|
|
16
|
-
strategy:
|
|
17
|
-
# Don't cancel the whole matrix on one platform's failure — path
|
|
18
|
-
# handling, symlink behaviour and signal delivery all differ per OS,
|
|
19
|
-
# and seeing which combination broke is the point.
|
|
20
|
-
fail-fast: false
|
|
21
|
-
matrix:
|
|
22
|
-
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
23
|
-
python-version: ["3.11", "3.12", "3.13"]
|
|
24
|
-
|
|
25
|
-
steps:
|
|
26
|
-
- uses: actions/checkout@v4
|
|
27
|
-
|
|
28
|
-
- name: Install uv
|
|
29
|
-
uses: astral-sh/setup-uv@v5
|
|
30
|
-
with:
|
|
31
|
-
enable-cache: true
|
|
32
|
-
|
|
33
|
-
- name: Install dependencies
|
|
34
|
-
run: uv sync --dev --python ${{ matrix.python-version }}
|
|
35
|
-
|
|
36
|
-
- name: Run tests
|
|
37
|
-
run: uv run pytest -q
|
|
38
|
-
|
|
39
|
-
dashboard:
|
|
40
|
-
name: dashboard build
|
|
41
|
-
runs-on: ubuntu-latest
|
|
42
|
-
steps:
|
|
43
|
-
- uses: actions/checkout@v4
|
|
44
|
-
|
|
45
|
-
- uses: actions/setup-node@v4
|
|
46
|
-
with:
|
|
47
|
-
node-version: "22"
|
|
48
|
-
cache: npm
|
|
49
|
-
cache-dependency-path: dashboard/package-lock.json
|
|
50
|
-
|
|
51
|
-
- name: Install and build
|
|
52
|
-
working-directory: dashboard
|
|
53
|
-
run: |
|
|
54
|
-
npm ci
|
|
55
|
-
npm run build
|
|
56
|
-
|
|
57
|
-
# The wheel ships dashboard-dist/, not dashboard/dist/. If a source edit
|
|
58
|
-
# is committed without refreshing the shipped copy, users get the old UI
|
|
59
|
-
# — including, historically, an unfixed XSS. Fail loudly on drift.
|
|
60
|
-
#
|
|
61
|
-
# Compare file *names*, not bytes: Astro content-hashes asset filenames,
|
|
62
|
-
# so any real source change renames the asset. Byte comparison would
|
|
63
|
-
# instead trip over line endings, since dashboard-dist/ is tracked (and
|
|
64
|
-
# so checked out CRLF on Windows) while dashboard/dist/ is a fresh LF
|
|
65
|
-
# build — a difference that says nothing about staleness.
|
|
66
|
-
- name: Check dashboard-dist is in sync with dashboard/src
|
|
67
|
-
run: |
|
|
68
|
-
(cd dashboard/dist && find . -type f | sort) > /tmp/built.txt
|
|
69
|
-
(cd dashboard-dist && find . -type f | sort) > /tmp/shipped.txt
|
|
70
|
-
if ! diff -u /tmp/shipped.txt /tmp/built.txt; then
|
|
71
|
-
echo "::error::dashboard-dist/ is stale. Rebuild and commit it — see dashboard/AGENTS.md."
|
|
72
|
-
exit 1
|
|
73
|
-
fi
|
|
74
|
-
echo "dashboard-dist matches the build."
|
|
1
|
+
name: test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
pytest:
|
|
14
|
+
name: pytest (${{ matrix.os }}, py${{ matrix.python-version }})
|
|
15
|
+
runs-on: ${{ matrix.os }}
|
|
16
|
+
strategy:
|
|
17
|
+
# Don't cancel the whole matrix on one platform's failure — path
|
|
18
|
+
# handling, symlink behaviour and signal delivery all differ per OS,
|
|
19
|
+
# and seeing which combination broke is the point.
|
|
20
|
+
fail-fast: false
|
|
21
|
+
matrix:
|
|
22
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
23
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
|
|
28
|
+
- name: Install uv
|
|
29
|
+
uses: astral-sh/setup-uv@v5
|
|
30
|
+
with:
|
|
31
|
+
enable-cache: true
|
|
32
|
+
|
|
33
|
+
- name: Install dependencies
|
|
34
|
+
run: uv sync --dev --python ${{ matrix.python-version }}
|
|
35
|
+
|
|
36
|
+
- name: Run tests
|
|
37
|
+
run: uv run pytest -q
|
|
38
|
+
|
|
39
|
+
dashboard:
|
|
40
|
+
name: dashboard build
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v4
|
|
44
|
+
|
|
45
|
+
- uses: actions/setup-node@v4
|
|
46
|
+
with:
|
|
47
|
+
node-version: "22"
|
|
48
|
+
cache: npm
|
|
49
|
+
cache-dependency-path: dashboard/package-lock.json
|
|
50
|
+
|
|
51
|
+
- name: Install and build
|
|
52
|
+
working-directory: dashboard
|
|
53
|
+
run: |
|
|
54
|
+
npm ci
|
|
55
|
+
npm run build
|
|
56
|
+
|
|
57
|
+
# The wheel ships dashboard-dist/, not dashboard/dist/. If a source edit
|
|
58
|
+
# is committed without refreshing the shipped copy, users get the old UI
|
|
59
|
+
# — including, historically, an unfixed XSS. Fail loudly on drift.
|
|
60
|
+
#
|
|
61
|
+
# Compare file *names*, not bytes: Astro content-hashes asset filenames,
|
|
62
|
+
# so any real source change renames the asset. Byte comparison would
|
|
63
|
+
# instead trip over line endings, since dashboard-dist/ is tracked (and
|
|
64
|
+
# so checked out CRLF on Windows) while dashboard/dist/ is a fresh LF
|
|
65
|
+
# build — a difference that says nothing about staleness.
|
|
66
|
+
- name: Check dashboard-dist is in sync with dashboard/src
|
|
67
|
+
run: |
|
|
68
|
+
(cd dashboard/dist && find . -type f | sort) > /tmp/built.txt
|
|
69
|
+
(cd dashboard-dist && find . -type f | sort) > /tmp/shipped.txt
|
|
70
|
+
if ! diff -u /tmp/shipped.txt /tmp/built.txt; then
|
|
71
|
+
echo "::error::dashboard-dist/ is stale. Rebuild and commit it — see dashboard/AGENTS.md."
|
|
72
|
+
exit 1
|
|
73
|
+
fi
|
|
74
|
+
echo "dashboard-dist matches the build."
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
Argus bundles project-scaffolding templates derived from Agent Anatomy
|
|
2
|
-
(https://github.com/agent-anatomy/claude), used under the MIT License.
|
|
3
|
-
|
|
4
|
-
Copyright (c) 2025 Agent Anatomy
|
|
5
|
-
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
-
in the Software without restriction, including without limitation the rights
|
|
9
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
-
furnished to do so, subject to the following conditions:
|
|
12
|
-
|
|
13
|
-
The above copyright notice and this permission notice shall be included in all
|
|
14
|
-
copies or substantial portions of the Software.
|
|
15
|
-
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
-
SOFTWARE.
|
|
1
|
+
Argus bundles project-scaffolding templates derived from Agent Anatomy
|
|
2
|
+
(https://github.com/agent-anatomy/claude), used under the MIT License.
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2025 Agent Anatomy
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: argus-code
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: Local-first dashboard for Claude Code cost, token, tool-usage, and full-text search analytics
|
|
5
5
|
Project-URL: Homepage, https://github.com/KrishBhimani/argus-code
|
|
6
6
|
Project-URL: Repository, https://github.com/KrishBhimani/argus-code.git
|
|
@@ -104,7 +104,7 @@ The dashboard is organised by the job you came to do.
|
|
|
104
104
|
| Page | What it answers |
|
|
105
105
|
|---|---|
|
|
106
106
|
| **Overview** | Four tiles — tokens, estimated cost, sessions, tool error rate — each with its **change vs. the previous window**. A "Needs attention" strip that is always visible (it says *all clear* when there's nothing). Tokens per day, stackable by model. A 90-day activity heatmap and a **weekday × hour** map of when you start sessions. Top sessions in the window. |
|
|
107
|
-
| **Alerts** | The inbox for detector findings, with unseen / all / severity filters and a 30-day strip. Today's detector flags any tool whose error rate doubled against its 4-week baseline; more
|
|
107
|
+
| **Alerts** | The inbox for detector findings, with unseen / all / severity filters and a 30-day strip. Today's detector flags any tool whose error rate doubled against its 4-week baseline; more are planned. |
|
|
108
108
|
|
|
109
109
|
### Analyze
|
|
110
110
|
|
|
@@ -125,8 +125,7 @@ deterministic, offline. Off by default; see [Privacy](#privacy--security).
|
|
|
125
125
|
|
|
126
126
|
### Govern
|
|
127
127
|
|
|
128
|
-
**Settings** (indexing toggle, pricing version, export, parse errors)
|
|
129
|
-
**Budgets** — monthly ceilings with threshold alerts — is the next slot.
|
|
128
|
+
**Settings** (indexing toggle, pricing version, export, parse errors).
|
|
130
129
|
|
|
131
130
|
Every chart follows a few house rules: one axis per chart, a legend whenever there's
|
|
132
131
|
more than one series, status colours always paired with an icon and a label, and a
|
|
@@ -52,7 +52,7 @@ The dashboard is organised by the job you came to do.
|
|
|
52
52
|
| Page | What it answers |
|
|
53
53
|
|---|---|
|
|
54
54
|
| **Overview** | Four tiles — tokens, estimated cost, sessions, tool error rate — each with its **change vs. the previous window**. A "Needs attention" strip that is always visible (it says *all clear* when there's nothing). Tokens per day, stackable by model. A 90-day activity heatmap and a **weekday × hour** map of when you start sessions. Top sessions in the window. |
|
|
55
|
-
| **Alerts** | The inbox for detector findings, with unseen / all / severity filters and a 30-day strip. Today's detector flags any tool whose error rate doubled against its 4-week baseline; more
|
|
55
|
+
| **Alerts** | The inbox for detector findings, with unseen / all / severity filters and a 30-day strip. Today's detector flags any tool whose error rate doubled against its 4-week baseline; more are planned. |
|
|
56
56
|
|
|
57
57
|
### Analyze
|
|
58
58
|
|
|
@@ -73,8 +73,7 @@ deterministic, offline. Off by default; see [Privacy](#privacy--security).
|
|
|
73
73
|
|
|
74
74
|
### Govern
|
|
75
75
|
|
|
76
|
-
**Settings** (indexing toggle, pricing version, export, parse errors)
|
|
77
|
-
**Budgets** — monthly ceilings with threshold alerts — is the next slot.
|
|
76
|
+
**Settings** (indexing toggle, pricing version, export, parse errors).
|
|
78
77
|
|
|
79
78
|
Every chart follows a few house rules: one axis per chart, a legend whenever there's
|
|
80
79
|
more than one series, status colours always paired with an icon and a label, and a
|
|
@@ -1,155 +1,155 @@
|
|
|
1
|
-
declare module 'astro:content' {
|
|
2
|
-
export interface RenderResult {
|
|
3
|
-
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
|
|
4
|
-
headings: import('astro').MarkdownHeading[];
|
|
5
|
-
remarkPluginFrontmatter: Record<string, any>;
|
|
6
|
-
}
|
|
7
|
-
interface Render {
|
|
8
|
-
'.md': Promise<RenderResult>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface RenderedContent {
|
|
12
|
-
html: string;
|
|
13
|
-
metadata?: {
|
|
14
|
-
imagePaths: Array<string>;
|
|
15
|
-
[key: string]: unknown;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
|
|
20
|
-
|
|
21
|
-
export type CollectionKey = keyof DataEntryMap;
|
|
22
|
-
export type CollectionEntry<C extends CollectionKey> = Flatten<DataEntryMap[C]>;
|
|
23
|
-
|
|
24
|
-
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
|
|
25
|
-
|
|
26
|
-
export type ReferenceDataEntry<
|
|
27
|
-
C extends CollectionKey,
|
|
28
|
-
E extends keyof DataEntryMap[C] = string,
|
|
29
|
-
> = {
|
|
30
|
-
collection: C;
|
|
31
|
-
id: E;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
|
|
35
|
-
collection: C;
|
|
36
|
-
id: string;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export function getCollection<C extends keyof DataEntryMap, E extends CollectionEntry<C>>(
|
|
40
|
-
collection: C,
|
|
41
|
-
filter?: (entry: CollectionEntry<C>) => entry is E,
|
|
42
|
-
): Promise<E[]>;
|
|
43
|
-
export function getCollection<C extends keyof DataEntryMap>(
|
|
44
|
-
collection: C,
|
|
45
|
-
filter?: (entry: CollectionEntry<C>) => unknown,
|
|
46
|
-
): Promise<CollectionEntry<C>[]>;
|
|
47
|
-
|
|
48
|
-
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
|
|
49
|
-
collection: C,
|
|
50
|
-
filter?: LiveLoaderCollectionFilterType<C>,
|
|
51
|
-
): Promise<
|
|
52
|
-
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
|
|
53
|
-
>;
|
|
54
|
-
|
|
55
|
-
export function getEntry<
|
|
56
|
-
C extends keyof DataEntryMap,
|
|
57
|
-
E extends keyof DataEntryMap[C] | (string & {}),
|
|
58
|
-
>(
|
|
59
|
-
entry: ReferenceDataEntry<C, E>,
|
|
60
|
-
): E extends keyof DataEntryMap[C]
|
|
61
|
-
? Promise<DataEntryMap[C][E]>
|
|
62
|
-
: Promise<CollectionEntry<C> | undefined>;
|
|
63
|
-
export function getEntry<
|
|
64
|
-
C extends keyof DataEntryMap,
|
|
65
|
-
E extends keyof DataEntryMap[C] | (string & {}),
|
|
66
|
-
>(
|
|
67
|
-
collection: C,
|
|
68
|
-
id: E,
|
|
69
|
-
): E extends keyof DataEntryMap[C]
|
|
70
|
-
? string extends keyof DataEntryMap[C]
|
|
71
|
-
? Promise<DataEntryMap[C][E]> | undefined
|
|
72
|
-
: Promise<DataEntryMap[C][E]>
|
|
73
|
-
: Promise<CollectionEntry<C> | undefined>;
|
|
74
|
-
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
|
|
75
|
-
collection: C,
|
|
76
|
-
filter: string | LiveLoaderEntryFilterType<C>,
|
|
77
|
-
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
|
|
78
|
-
|
|
79
|
-
/** Resolve an array of entry references from the same collection */
|
|
80
|
-
export function getEntries<C extends keyof DataEntryMap>(
|
|
81
|
-
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
|
|
82
|
-
): Promise<CollectionEntry<C>[]>;
|
|
83
|
-
|
|
84
|
-
export function render<C extends keyof DataEntryMap>(
|
|
85
|
-
entry: DataEntryMap[C][string],
|
|
86
|
-
): Promise<RenderResult>;
|
|
87
|
-
|
|
88
|
-
export function reference<
|
|
89
|
-
C extends
|
|
90
|
-
| keyof DataEntryMap
|
|
91
|
-
// Allow generic `string` to avoid excessive type errors in the config
|
|
92
|
-
// if `dev` is not running to update as you edit.
|
|
93
|
-
// Invalid collection names will be caught at build time.
|
|
94
|
-
| (string & {}),
|
|
95
|
-
>(
|
|
96
|
-
collection: C,
|
|
97
|
-
): import('astro/zod').ZodPipe<
|
|
98
|
-
import('astro/zod').ZodString,
|
|
99
|
-
import('astro/zod').ZodTransform<
|
|
100
|
-
C extends keyof DataEntryMap
|
|
101
|
-
? {
|
|
102
|
-
collection: C;
|
|
103
|
-
id: string;
|
|
104
|
-
}
|
|
105
|
-
: never,
|
|
106
|
-
string
|
|
107
|
-
>
|
|
108
|
-
>;
|
|
109
|
-
|
|
110
|
-
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
|
|
111
|
-
type InferEntrySchema<C extends keyof DataEntryMap> = import('astro/zod').infer<
|
|
112
|
-
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
|
|
113
|
-
>;
|
|
114
|
-
type ExtractLoaderConfig<T> = T extends { loader: infer L } ? L : never;
|
|
115
|
-
type InferLoaderSchema<
|
|
116
|
-
C extends keyof DataEntryMap,
|
|
117
|
-
L = ExtractLoaderConfig<ContentConfig['collections'][C]>,
|
|
118
|
-
> = L extends { schema: import('astro/zod').ZodSchema }
|
|
119
|
-
? import('astro/zod').infer<L['schema']>
|
|
120
|
-
: any;
|
|
121
|
-
|
|
122
|
-
type DataEntryMap = {
|
|
123
|
-
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
|
|
127
|
-
infer TData,
|
|
128
|
-
infer TEntryFilter,
|
|
129
|
-
infer TCollectionFilter,
|
|
130
|
-
infer TError
|
|
131
|
-
>
|
|
132
|
-
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
|
|
133
|
-
: { data: never; entryFilter: never; collectionFilter: never; error: never };
|
|
134
|
-
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
|
|
135
|
-
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
|
|
136
|
-
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
|
|
137
|
-
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
|
|
138
|
-
|
|
139
|
-
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
|
|
140
|
-
LiveContentConfig['collections'][C]['schema'] extends undefined
|
|
141
|
-
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
|
|
142
|
-
: import('astro/zod').infer<
|
|
143
|
-
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
|
|
144
|
-
>;
|
|
145
|
-
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
|
|
146
|
-
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
|
|
147
|
-
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
|
|
148
|
-
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
|
|
149
|
-
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
|
|
150
|
-
LiveContentConfig['collections'][C]['loader']
|
|
151
|
-
>;
|
|
152
|
-
|
|
153
|
-
export type ContentConfig = never;
|
|
154
|
-
export type LiveContentConfig = never;
|
|
155
|
-
}
|
|
1
|
+
declare module 'astro:content' {
|
|
2
|
+
export interface RenderResult {
|
|
3
|
+
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
|
|
4
|
+
headings: import('astro').MarkdownHeading[];
|
|
5
|
+
remarkPluginFrontmatter: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
interface Render {
|
|
8
|
+
'.md': Promise<RenderResult>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface RenderedContent {
|
|
12
|
+
html: string;
|
|
13
|
+
metadata?: {
|
|
14
|
+
imagePaths: Array<string>;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
|
|
20
|
+
|
|
21
|
+
export type CollectionKey = keyof DataEntryMap;
|
|
22
|
+
export type CollectionEntry<C extends CollectionKey> = Flatten<DataEntryMap[C]>;
|
|
23
|
+
|
|
24
|
+
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
|
|
25
|
+
|
|
26
|
+
export type ReferenceDataEntry<
|
|
27
|
+
C extends CollectionKey,
|
|
28
|
+
E extends keyof DataEntryMap[C] = string,
|
|
29
|
+
> = {
|
|
30
|
+
collection: C;
|
|
31
|
+
id: E;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
|
|
35
|
+
collection: C;
|
|
36
|
+
id: string;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export function getCollection<C extends keyof DataEntryMap, E extends CollectionEntry<C>>(
|
|
40
|
+
collection: C,
|
|
41
|
+
filter?: (entry: CollectionEntry<C>) => entry is E,
|
|
42
|
+
): Promise<E[]>;
|
|
43
|
+
export function getCollection<C extends keyof DataEntryMap>(
|
|
44
|
+
collection: C,
|
|
45
|
+
filter?: (entry: CollectionEntry<C>) => unknown,
|
|
46
|
+
): Promise<CollectionEntry<C>[]>;
|
|
47
|
+
|
|
48
|
+
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
|
|
49
|
+
collection: C,
|
|
50
|
+
filter?: LiveLoaderCollectionFilterType<C>,
|
|
51
|
+
): Promise<
|
|
52
|
+
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
|
|
53
|
+
>;
|
|
54
|
+
|
|
55
|
+
export function getEntry<
|
|
56
|
+
C extends keyof DataEntryMap,
|
|
57
|
+
E extends keyof DataEntryMap[C] | (string & {}),
|
|
58
|
+
>(
|
|
59
|
+
entry: ReferenceDataEntry<C, E>,
|
|
60
|
+
): E extends keyof DataEntryMap[C]
|
|
61
|
+
? Promise<DataEntryMap[C][E]>
|
|
62
|
+
: Promise<CollectionEntry<C> | undefined>;
|
|
63
|
+
export function getEntry<
|
|
64
|
+
C extends keyof DataEntryMap,
|
|
65
|
+
E extends keyof DataEntryMap[C] | (string & {}),
|
|
66
|
+
>(
|
|
67
|
+
collection: C,
|
|
68
|
+
id: E,
|
|
69
|
+
): E extends keyof DataEntryMap[C]
|
|
70
|
+
? string extends keyof DataEntryMap[C]
|
|
71
|
+
? Promise<DataEntryMap[C][E]> | undefined
|
|
72
|
+
: Promise<DataEntryMap[C][E]>
|
|
73
|
+
: Promise<CollectionEntry<C> | undefined>;
|
|
74
|
+
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
|
|
75
|
+
collection: C,
|
|
76
|
+
filter: string | LiveLoaderEntryFilterType<C>,
|
|
77
|
+
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
|
|
78
|
+
|
|
79
|
+
/** Resolve an array of entry references from the same collection */
|
|
80
|
+
export function getEntries<C extends keyof DataEntryMap>(
|
|
81
|
+
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
|
|
82
|
+
): Promise<CollectionEntry<C>[]>;
|
|
83
|
+
|
|
84
|
+
export function render<C extends keyof DataEntryMap>(
|
|
85
|
+
entry: DataEntryMap[C][string],
|
|
86
|
+
): Promise<RenderResult>;
|
|
87
|
+
|
|
88
|
+
export function reference<
|
|
89
|
+
C extends
|
|
90
|
+
| keyof DataEntryMap
|
|
91
|
+
// Allow generic `string` to avoid excessive type errors in the config
|
|
92
|
+
// if `dev` is not running to update as you edit.
|
|
93
|
+
// Invalid collection names will be caught at build time.
|
|
94
|
+
| (string & {}),
|
|
95
|
+
>(
|
|
96
|
+
collection: C,
|
|
97
|
+
): import('astro/zod').ZodPipe<
|
|
98
|
+
import('astro/zod').ZodString,
|
|
99
|
+
import('astro/zod').ZodTransform<
|
|
100
|
+
C extends keyof DataEntryMap
|
|
101
|
+
? {
|
|
102
|
+
collection: C;
|
|
103
|
+
id: string;
|
|
104
|
+
}
|
|
105
|
+
: never,
|
|
106
|
+
string
|
|
107
|
+
>
|
|
108
|
+
>;
|
|
109
|
+
|
|
110
|
+
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
|
|
111
|
+
type InferEntrySchema<C extends keyof DataEntryMap> = import('astro/zod').infer<
|
|
112
|
+
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
|
|
113
|
+
>;
|
|
114
|
+
type ExtractLoaderConfig<T> = T extends { loader: infer L } ? L : never;
|
|
115
|
+
type InferLoaderSchema<
|
|
116
|
+
C extends keyof DataEntryMap,
|
|
117
|
+
L = ExtractLoaderConfig<ContentConfig['collections'][C]>,
|
|
118
|
+
> = L extends { schema: import('astro/zod').ZodSchema }
|
|
119
|
+
? import('astro/zod').infer<L['schema']>
|
|
120
|
+
: any;
|
|
121
|
+
|
|
122
|
+
type DataEntryMap = {
|
|
123
|
+
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
|
|
127
|
+
infer TData,
|
|
128
|
+
infer TEntryFilter,
|
|
129
|
+
infer TCollectionFilter,
|
|
130
|
+
infer TError
|
|
131
|
+
>
|
|
132
|
+
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
|
|
133
|
+
: { data: never; entryFilter: never; collectionFilter: never; error: never };
|
|
134
|
+
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
|
|
135
|
+
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
|
|
136
|
+
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
|
|
137
|
+
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
|
|
138
|
+
|
|
139
|
+
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
|
|
140
|
+
LiveContentConfig['collections'][C]['schema'] extends undefined
|
|
141
|
+
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
|
|
142
|
+
: import('astro/zod').infer<
|
|
143
|
+
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
|
|
144
|
+
>;
|
|
145
|
+
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
|
|
146
|
+
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
|
|
147
|
+
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
|
|
148
|
+
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
|
|
149
|
+
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
|
|
150
|
+
LiveContentConfig['collections'][C]['loader']
|
|
151
|
+
>;
|
|
152
|
+
|
|
153
|
+
export type ContentConfig = never;
|
|
154
|
+
export type LiveContentConfig = never;
|
|
155
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/// <reference types="astro/client" />
|
|
1
|
+
/// <reference types="astro/client" />
|
|
2
2
|
/// <reference path="content.d.ts" />
|
|
@@ -2,7 +2,7 @@ import { test, expect } from '@playwright/test';
|
|
|
2
2
|
|
|
3
3
|
const routes: [string, string][] = [
|
|
4
4
|
['/', 'Overview'], ['/alerts', 'Alerts'], ['/sessions', 'Sessions'], ['/tools', 'Tools'], ['/models', 'Models'],
|
|
5
|
-
['/trends', 'Trends'], ['/search', 'Transcripts'], ['/
|
|
5
|
+
['/trends', 'Trends'], ['/search', 'Transcripts'], ['/settings', 'Settings'],
|
|
6
6
|
];
|
|
7
7
|
|
|
8
8
|
for (const [path, crumb] of routes) {
|
|
@@ -6,7 +6,7 @@ import { shortDate, shortPath } from '@/lib/format/format';
|
|
|
6
6
|
|
|
7
7
|
const PAGES = [
|
|
8
8
|
['Overview', '/'], ['Alerts', '/alerts'], ['Sessions', '/sessions'], ['Tools', '/tools'], ['Models', '/models'],
|
|
9
|
-
['Trends', '/trends'], ['Transcripts', '/search'], ['
|
|
9
|
+
['Trends', '/trends'], ['Transcripts', '/search'], ['Settings', '/settings'],
|
|
10
10
|
] as const;
|
|
11
11
|
const HEADING = '[&_[cmdk-group-heading]]:text-[10px] [&_[cmdk-group-heading]]:tracking-[0.12em] [&_[cmdk-group-heading]]:text-ink-2 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1';
|
|
12
12
|
const ITEM = 'px-2 h-8 flex items-center gap-3 rounded-md text-xs data-[selected=true]:bg-bg-3 cursor-pointer';
|
|
@@ -2,7 +2,7 @@ import { Link, useRouterState } from '@tanstack/react-router';
|
|
|
2
2
|
import { Icon, type IconName } from '@/components/ui/Icon';
|
|
3
3
|
import { useIngestStatus, usePricing, useUnseenAlerts } from '@/lib/api/hooks';
|
|
4
4
|
|
|
5
|
-
const GROUPS: { h: string; items: { to: string; label: string; icon: IconName
|
|
5
|
+
const GROUPS: { h: string; items: { to: string; label: string; icon: IconName }[] }[] = [
|
|
6
6
|
{ h: 'MONITOR', items: [{ to: '/', label: 'Overview', icon: 'grid' }, { to: '/alerts', label: 'Alerts', icon: 'bell' }] },
|
|
7
7
|
{
|
|
8
8
|
h: 'ANALYZE',
|
|
@@ -14,7 +14,7 @@ const GROUPS: { h: string; items: { to: string; label: string; icon: IconName; s
|
|
|
14
14
|
],
|
|
15
15
|
},
|
|
16
16
|
{ h: 'SEARCH', items: [{ to: '/search', label: 'Transcripts', icon: 'search' }] },
|
|
17
|
-
{ h: 'GOVERN', items: [{ to: '/
|
|
17
|
+
{ h: 'GOVERN', items: [{ to: '/settings', label: 'Settings', icon: 'gear' }] },
|
|
18
18
|
];
|
|
19
19
|
|
|
20
20
|
export function Sidebar() {
|
|
@@ -52,7 +52,6 @@ export function Sidebar() {
|
|
|
52
52
|
{it.label === 'Alerts' && unseen > 0 && (
|
|
53
53
|
<span className="ml-auto font-mono text-[10px] px-1.5 rounded-sm bg-warn/14 text-warn">{unseen}</span>
|
|
54
54
|
)}
|
|
55
|
-
{it.soon && <span className="ml-auto font-mono text-[10px] px-1.5 rounded-sm bg-bg-3 text-ink-2">soon</span>}
|
|
56
55
|
</Link>
|
|
57
56
|
))}
|
|
58
57
|
</div>
|
|
@@ -17,8 +17,8 @@ const Code = ({ children }: { children: string }) => <span className="font-mono
|
|
|
17
17
|
|
|
18
18
|
const DETECTORS = [
|
|
19
19
|
{ n: 'tool_error_rate_spike', on: true, note: '7d vs 28d' },
|
|
20
|
-
{ n: 'cost_spike', on: false, note: '
|
|
21
|
-
{ n: 'cache_hit_drop', on: false, note: '
|
|
20
|
+
{ n: 'cost_spike', on: false, note: 'planned' },
|
|
21
|
+
{ n: 'cache_hit_drop', on: false, note: 'planned' },
|
|
22
22
|
];
|
|
23
23
|
|
|
24
24
|
export default function AlertsPage() {
|