@vibexp/api-client 0.59.0 → 0.60.0

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.
@@ -3732,6 +3732,184 @@ export type UpdateTeamFreshnessSettingsRequest = {
3732
3732
  interval_seconds: number;
3733
3733
  reversibility_enabled: boolean;
3734
3734
  };
3735
+ /**
3736
+ * The reporting window for a time-series metric. The options mirror the other analytics endpoints so one range selector drives every chart.
3737
+ *
3738
+ */
3739
+ export type FreshnessMetricsRange = '7d' | '14d' | '30d' | '60d' | '90d' | '180d';
3740
+ /**
3741
+ * One calendar day (UTC) of freshness activity, zero-filled: every day in the window is present even when nothing happened.
3742
+ *
3743
+ */
3744
+ export type FreshnessDailyStaleCount = {
3745
+ date: string;
3746
+ /**
3747
+ * Resources that became stale on this day.
3748
+ */
3749
+ marked: number;
3750
+ /**
3751
+ * Resources that stopped being stale on this day, for any reason.
3752
+ */
3753
+ cleared: number;
3754
+ /**
3755
+ * How many resources were stale at the END of this day — the level, not the flow. It is reconstructed by walking today's live count backwards through the recorded transitions, so it is exact only for the period the audit log covers; days before freshness evaluation first ran on this team read as the earliest known level rather than as zero. The most recent day reports the live count as of the request. The reconstruction is clamped at zero, so on a team whose rows were removed by a project or team deletion — which writes no audit entry — the series can flatten at 0 instead of satisfying stale_total[i] = stale_total[i-1] + marked[i] - cleared[i].
3756
+ *
3757
+ */
3758
+ stale_total: number;
3759
+ /**
3760
+ * The day's total ACTIVITY, marked + cleared — the sum of the two series, not the level. It is the field the shared time-series chart reads for its per-day total, which is why it is a flow rather than stale_total.
3761
+ *
3762
+ */
3763
+ total: number;
3764
+ };
3765
+ export type FreshnessOverTimeMetricsData = {
3766
+ range: FreshnessMetricsRange;
3767
+ /**
3768
+ * Resources marked stale across the whole window.
3769
+ */
3770
+ total_marked: number;
3771
+ /**
3772
+ * Resources cleared across the whole window.
3773
+ */
3774
+ total_cleared: number;
3775
+ /**
3776
+ * One entry per day in the window, oldest first. Serializes as `[]`, never `null`.
3777
+ */
3778
+ counts: Array<FreshnessDailyStaleCount>;
3779
+ };
3780
+ export type FreshnessOverTimeMetricsResponse = {
3781
+ status: string;
3782
+ message: string;
3783
+ data: FreshnessOverTimeMetricsData;
3784
+ };
3785
+ /**
3786
+ * How many of one resource type are stale right now.
3787
+ */
3788
+ export type FreshnessTypeCount = {
3789
+ resource_type: FreshnessRuleResourceType;
3790
+ count: number;
3791
+ };
3792
+ export type FreshnessByTypeMetricsData = {
3793
+ /**
3794
+ * Total stale resources in the team, across every type.
3795
+ */
3796
+ total_stale: number;
3797
+ /**
3798
+ * One entry per resource type, always all four, in a stable order — a type with nothing stale reports 0 rather than being omitted, so the chart's bars never move. Serializes as `[]`, never `null`.
3799
+ *
3800
+ */
3801
+ counts: Array<FreshnessTypeCount>;
3802
+ };
3803
+ export type FreshnessByTypeMetricsResponse = {
3804
+ status: string;
3805
+ message: string;
3806
+ data: FreshnessByTypeMetricsData;
3807
+ };
3808
+ /**
3809
+ * How many resources are stale right now in one project. `name` and `slug` are carried so the client can label and deep-link the bar without a second request.
3810
+ *
3811
+ */
3812
+ export type FreshnessProjectCount = {
3813
+ project_id: string;
3814
+ name: string;
3815
+ slug: string;
3816
+ count: number;
3817
+ };
3818
+ export type FreshnessByProjectMetricsData = {
3819
+ total_stale: number;
3820
+ /**
3821
+ * One entry per project in the team, including projects with nothing stale (0), ordered by count descending then name. Serializes as `[]`, never `null`.
3822
+ *
3823
+ */
3824
+ counts: Array<FreshnessProjectCount>;
3825
+ };
3826
+ export type FreshnessByProjectMetricsResponse = {
3827
+ status: string;
3828
+ message: string;
3829
+ data: FreshnessByProjectMetricsData;
3830
+ };
3831
+ /**
3832
+ * How many resources one rule currently marks. Rules have no name, so the defining fields travel with the count for the client to label the bar.
3833
+ *
3834
+ */
3835
+ export type FreshnessRuleImpact = {
3836
+ rule_id: string;
3837
+ /**
3838
+ * The project the rule is scoped to, or null for every project in the team.
3839
+ */
3840
+ project_id: string | null;
3841
+ resource_types: Array<FreshnessRuleResourceType>;
3842
+ threshold_days: number;
3843
+ /**
3844
+ * A disabled rule reports 0 — it is listed so its absence from the chart is not mistaken for deletion.
3845
+ */
3846
+ enabled: boolean;
3847
+ count: number;
3848
+ };
3849
+ export type FreshnessByRuleMetricsData = {
3850
+ /**
3851
+ * Distinct stale resources in the team. It is NOT the sum of the per-rule counts: a resource matched by two rules is counted once here and once under each rule, because staleness is a union across rules.
3852
+ *
3853
+ */
3854
+ total_stale: number;
3855
+ /**
3856
+ * One entry per rule the team has defined, including rules matching nothing, ordered by count descending then rule id. Serializes as `[]`, never `null`.
3857
+ *
3858
+ */
3859
+ counts: Array<FreshnessRuleImpact>;
3860
+ };
3861
+ export type FreshnessByRuleMetricsResponse = {
3862
+ status: string;
3863
+ message: string;
3864
+ data: FreshnessByRuleMetricsData;
3865
+ };
3866
+ /**
3867
+ * One recorded freshness transition. The log is append-only.
3868
+ */
3869
+ export type FreshnessAuditEntry = {
3870
+ id: string;
3871
+ resource_type: FreshnessRuleResourceType;
3872
+ resource_id: string;
3873
+ /**
3874
+ * The rule that caused the change, when exactly one did. Null for a reversal (caused by a read or an edit) and for a mark attributable to several rules at once — the resource's own state carries the full set.
3875
+ *
3876
+ */
3877
+ rule_id: string | null;
3878
+ /**
3879
+ * Whether the resource became stale or stopped being stale.
3880
+ */
3881
+ action: 'marked' | 'cleared';
3882
+ /**
3883
+ * What caused it — a scheduled evaluation, a read, or an edit.
3884
+ */
3885
+ reason: 'rule_run' | 'accessed' | 'edited';
3886
+ created_at: string;
3887
+ };
3888
+ /**
3889
+ * A page of the team's freshness audit log, newest first.
3890
+ */
3891
+ export type FreshnessAuditListResponse = {
3892
+ /**
3893
+ * Serializes as `[]` when the page is empty, never `null`.
3894
+ */
3895
+ entries: Array<FreshnessAuditEntry>;
3896
+ /**
3897
+ * Total entries in the team's log, ignoring pagination.
3898
+ */
3899
+ total_count: number;
3900
+ /**
3901
+ * Current page number (1-based)
3902
+ */
3903
+ page: number;
3904
+ /**
3905
+ * Number of entries per page
3906
+ */
3907
+ per_page: number;
3908
+ /**
3909
+ * Total number of pages
3910
+ */
3911
+ total_pages: number;
3912
+ };
3735
3913
  /**
3736
3914
  * The search ranking settings in effect for a team, with enough context for a client to render the whole settings surface from this one response: the effective values, where they came from, the instance defaults to preview a reset against, and the instance-owned candidate cap.
3737
3915
  *
@@ -12370,6 +12548,206 @@ export type UpdateTeamFreshnessSettingsResponses = {
12370
12548
  200: TeamFreshnessSettings;
12371
12549
  };
12372
12550
  export type UpdateTeamFreshnessSettingsResponse = UpdateTeamFreshnessSettingsResponses[keyof UpdateTeamFreshnessSettingsResponses];
12551
+ export type GetFreshnessOverTimeMetricsData = {
12552
+ body?: never;
12553
+ path: {
12554
+ /**
12555
+ * Team identifier
12556
+ */
12557
+ team_id: string;
12558
+ };
12559
+ query?: {
12560
+ /**
12561
+ * The reporting window. Defaults to 30d.
12562
+ */
12563
+ range?: FreshnessMetricsRange;
12564
+ };
12565
+ url: '/api/v1/{team_id}/freshness/metrics/over-time';
12566
+ };
12567
+ export type GetFreshnessOverTimeMetricsErrors = {
12568
+ /**
12569
+ * Invalid team_id or query parameter
12570
+ */
12571
+ 400: ErrorResponse;
12572
+ /**
12573
+ * Authentication required
12574
+ */
12575
+ 401: ErrorResponse;
12576
+ /**
12577
+ * Caller is not a member of the team
12578
+ */
12579
+ 403: ErrorResponse;
12580
+ /**
12581
+ * Failed to build the team's freshness over-time metrics
12582
+ */
12583
+ 500: ErrorResponse;
12584
+ };
12585
+ export type GetFreshnessOverTimeMetricsError = GetFreshnessOverTimeMetricsErrors[keyof GetFreshnessOverTimeMetricsErrors];
12586
+ export type GetFreshnessOverTimeMetricsResponses = {
12587
+ /**
12588
+ * Metrics retrieved successfully
12589
+ */
12590
+ 200: FreshnessOverTimeMetricsResponse;
12591
+ };
12592
+ export type GetFreshnessOverTimeMetricsResponse = GetFreshnessOverTimeMetricsResponses[keyof GetFreshnessOverTimeMetricsResponses];
12593
+ export type GetFreshnessByTypeMetricsData = {
12594
+ body?: never;
12595
+ path: {
12596
+ /**
12597
+ * Team identifier
12598
+ */
12599
+ team_id: string;
12600
+ };
12601
+ query?: never;
12602
+ url: '/api/v1/{team_id}/freshness/metrics/by-type';
12603
+ };
12604
+ export type GetFreshnessByTypeMetricsErrors = {
12605
+ /**
12606
+ * Invalid team_id or query parameter
12607
+ */
12608
+ 400: ErrorResponse;
12609
+ /**
12610
+ * Authentication required
12611
+ */
12612
+ 401: ErrorResponse;
12613
+ /**
12614
+ * Caller is not a member of the team
12615
+ */
12616
+ 403: ErrorResponse;
12617
+ /**
12618
+ * Failed to build the team's freshness by-type metrics
12619
+ */
12620
+ 500: ErrorResponse;
12621
+ };
12622
+ export type GetFreshnessByTypeMetricsError = GetFreshnessByTypeMetricsErrors[keyof GetFreshnessByTypeMetricsErrors];
12623
+ export type GetFreshnessByTypeMetricsResponses = {
12624
+ /**
12625
+ * Metrics retrieved successfully
12626
+ */
12627
+ 200: FreshnessByTypeMetricsResponse;
12628
+ };
12629
+ export type GetFreshnessByTypeMetricsResponse = GetFreshnessByTypeMetricsResponses[keyof GetFreshnessByTypeMetricsResponses];
12630
+ export type GetFreshnessByProjectMetricsData = {
12631
+ body?: never;
12632
+ path: {
12633
+ /**
12634
+ * Team identifier
12635
+ */
12636
+ team_id: string;
12637
+ };
12638
+ query?: never;
12639
+ url: '/api/v1/{team_id}/freshness/metrics/by-project';
12640
+ };
12641
+ export type GetFreshnessByProjectMetricsErrors = {
12642
+ /**
12643
+ * Invalid team_id or query parameter
12644
+ */
12645
+ 400: ErrorResponse;
12646
+ /**
12647
+ * Authentication required
12648
+ */
12649
+ 401: ErrorResponse;
12650
+ /**
12651
+ * Caller is not a member of the team
12652
+ */
12653
+ 403: ErrorResponse;
12654
+ /**
12655
+ * Failed to build the team's freshness by-project metrics
12656
+ */
12657
+ 500: ErrorResponse;
12658
+ };
12659
+ export type GetFreshnessByProjectMetricsError = GetFreshnessByProjectMetricsErrors[keyof GetFreshnessByProjectMetricsErrors];
12660
+ export type GetFreshnessByProjectMetricsResponses = {
12661
+ /**
12662
+ * Metrics retrieved successfully
12663
+ */
12664
+ 200: FreshnessByProjectMetricsResponse;
12665
+ };
12666
+ export type GetFreshnessByProjectMetricsResponse = GetFreshnessByProjectMetricsResponses[keyof GetFreshnessByProjectMetricsResponses];
12667
+ export type GetFreshnessByRuleMetricsData = {
12668
+ body?: never;
12669
+ path: {
12670
+ /**
12671
+ * Team identifier
12672
+ */
12673
+ team_id: string;
12674
+ };
12675
+ query?: never;
12676
+ url: '/api/v1/{team_id}/freshness/metrics/by-rule';
12677
+ };
12678
+ export type GetFreshnessByRuleMetricsErrors = {
12679
+ /**
12680
+ * Invalid team_id or query parameter
12681
+ */
12682
+ 400: ErrorResponse;
12683
+ /**
12684
+ * Authentication required
12685
+ */
12686
+ 401: ErrorResponse;
12687
+ /**
12688
+ * Caller is not a member of the team
12689
+ */
12690
+ 403: ErrorResponse;
12691
+ /**
12692
+ * Failed to build the team's freshness by-rule metrics
12693
+ */
12694
+ 500: ErrorResponse;
12695
+ };
12696
+ export type GetFreshnessByRuleMetricsError = GetFreshnessByRuleMetricsErrors[keyof GetFreshnessByRuleMetricsErrors];
12697
+ export type GetFreshnessByRuleMetricsResponses = {
12698
+ /**
12699
+ * Metrics retrieved successfully
12700
+ */
12701
+ 200: FreshnessByRuleMetricsResponse;
12702
+ };
12703
+ export type GetFreshnessByRuleMetricsResponse = GetFreshnessByRuleMetricsResponses[keyof GetFreshnessByRuleMetricsResponses];
12704
+ export type ListFreshnessAuditData = {
12705
+ body?: never;
12706
+ path: {
12707
+ /**
12708
+ * Team identifier
12709
+ */
12710
+ team_id: string;
12711
+ };
12712
+ query?: {
12713
+ /**
12714
+ * Page number (1-based). The upper bound is not a storage limit — it keeps page * limit inside the range the offset arithmetic can represent, so an absurd page is rejected rather than silently wrapping around to the first one.
12715
+ *
12716
+ */
12717
+ page?: number;
12718
+ /**
12719
+ * Entries per page
12720
+ */
12721
+ limit?: number;
12722
+ };
12723
+ url: '/api/v1/{team_id}/freshness/audit';
12724
+ };
12725
+ export type ListFreshnessAuditErrors = {
12726
+ /**
12727
+ * Invalid team_id or query parameter
12728
+ */
12729
+ 400: ErrorResponse;
12730
+ /**
12731
+ * Authentication required
12732
+ */
12733
+ 401: ErrorResponse;
12734
+ /**
12735
+ * Caller is not a member of the team
12736
+ */
12737
+ 403: ErrorResponse;
12738
+ /**
12739
+ * Failed to list the team's freshness audit log
12740
+ */
12741
+ 500: ErrorResponse;
12742
+ };
12743
+ export type ListFreshnessAuditError = ListFreshnessAuditErrors[keyof ListFreshnessAuditErrors];
12744
+ export type ListFreshnessAuditResponses = {
12745
+ /**
12746
+ * Audit log retrieved successfully
12747
+ */
12748
+ 200: FreshnessAuditListResponse;
12749
+ };
12750
+ export type ListFreshnessAuditResponse = ListFreshnessAuditResponses[keyof ListFreshnessAuditResponses];
12373
12751
  export type ListEmbeddingProvidersSettingsData = {
12374
12752
  body?: never;
12375
12753
  path: {