@prave/shared 1.5.0 → 1.5.1

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.
@@ -0,0 +1,167 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Contextual Skill Advisor — prose recommendations behind a tiered
4
+ * freemium quota. See `apps/api/src/services/advisor.service.ts` for
5
+ * the orchestrator; the schemas below pin the request, response, and
6
+ * LLM-output shapes so a model drift on the Haiku side gets caught at
7
+ * the Zod boundary, not in the UI.
8
+ */
9
+ export declare const advisorModeSchema: z.ZodEnum<["manual", "auto"]>;
10
+ export type AdvisorMode = z.infer<typeof advisorModeSchema>;
11
+ export declare const advisorRequestSchema: z.ZodEffects<z.ZodObject<{
12
+ mode: z.ZodDefault<z.ZodEnum<["manual", "auto"]>>;
13
+ /**
14
+ * Task description for manual mode. Required when `mode === 'manual'`,
15
+ * ignored when `mode === 'auto'`. We cap at 1200 chars so a long
16
+ * paste can't blow the Haiku prompt window — the input field on the
17
+ * web side enforces the same limit.
18
+ */
19
+ task: z.ZodOptional<z.ZodString>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ mode: "manual" | "auto";
22
+ task?: string | undefined;
23
+ }, {
24
+ mode?: "manual" | "auto" | undefined;
25
+ task?: string | undefined;
26
+ }>, {
27
+ mode: "manual" | "auto";
28
+ task?: string | undefined;
29
+ }, {
30
+ mode?: "manual" | "auto" | undefined;
31
+ task?: string | undefined;
32
+ }>;
33
+ export type AdvisorRequest = z.infer<typeof advisorRequestSchema>;
34
+ /**
35
+ * One recommended skill in the advisor's response. `slug` is always a
36
+ * real catalogue slug — the service drops anything Haiku invented
37
+ * before the response leaves the API.
38
+ */
39
+ export declare const advisorRecommendationSchema: z.ZodObject<{
40
+ slug: z.ZodString;
41
+ reason: z.ZodString;
42
+ }, "strip", z.ZodTypeAny, {
43
+ slug: string;
44
+ reason: string;
45
+ }, {
46
+ slug: string;
47
+ reason: string;
48
+ }>;
49
+ export type AdvisorRecommendation = z.infer<typeof advisorRecommendationSchema>;
50
+ export declare const advisorResponseSchema: z.ZodObject<{
51
+ /**
52
+ * Prose paragraph the model writes. Calmly-cased, no markdown
53
+ * fences, no emoji. The web result block renders this verbatim.
54
+ */
55
+ prose: z.ZodString;
56
+ recommendations: z.ZodArray<z.ZodObject<{
57
+ slug: z.ZodString;
58
+ reason: z.ZodString;
59
+ }, "strip", z.ZodTypeAny, {
60
+ slug: string;
61
+ reason: string;
62
+ }, {
63
+ slug: string;
64
+ reason: string;
65
+ }>, "many">;
66
+ /**
67
+ * Echoed for telemetry + cache-bust debugging. The UI doesn't render
68
+ * this but the analytics layer does.
69
+ */
70
+ mode: z.ZodEnum<["manual", "auto"]>;
71
+ /**
72
+ * After-this-call quota snapshot — saves the web UI a round-trip
73
+ * back to `GET /advisor/quota` immediately after a success.
74
+ */
75
+ quota: z.ZodObject<{
76
+ plan: z.ZodEnum<["free", "pro", "max"]>;
77
+ limit: z.ZodNumber;
78
+ used: z.ZodNumber;
79
+ remaining: z.ZodNumber;
80
+ }, "strip", z.ZodTypeAny, {
81
+ limit: number;
82
+ plan: "free" | "pro" | "max";
83
+ used: number;
84
+ remaining: number;
85
+ }, {
86
+ limit: number;
87
+ plan: "free" | "pro" | "max";
88
+ used: number;
89
+ remaining: number;
90
+ }>;
91
+ }, "strip", z.ZodTypeAny, {
92
+ mode: "manual" | "auto";
93
+ prose: string;
94
+ recommendations: {
95
+ slug: string;
96
+ reason: string;
97
+ }[];
98
+ quota: {
99
+ limit: number;
100
+ plan: "free" | "pro" | "max";
101
+ used: number;
102
+ remaining: number;
103
+ };
104
+ }, {
105
+ mode: "manual" | "auto";
106
+ prose: string;
107
+ recommendations: {
108
+ slug: string;
109
+ reason: string;
110
+ }[];
111
+ quota: {
112
+ limit: number;
113
+ plan: "free" | "pro" | "max";
114
+ used: number;
115
+ remaining: number;
116
+ };
117
+ }>;
118
+ export type AdvisorResponse = z.infer<typeof advisorResponseSchema>;
119
+ export declare const advisorQuotaResponseSchema: z.ZodObject<{
120
+ plan: z.ZodEnum<["free", "pro", "max"]>;
121
+ limit: z.ZodNumber;
122
+ used: z.ZodNumber;
123
+ remaining: z.ZodNumber;
124
+ }, "strip", z.ZodTypeAny, {
125
+ limit: number;
126
+ plan: "free" | "pro" | "max";
127
+ used: number;
128
+ remaining: number;
129
+ }, {
130
+ limit: number;
131
+ plan: "free" | "pro" | "max";
132
+ used: number;
133
+ remaining: number;
134
+ }>;
135
+ export type AdvisorQuotaResponse = z.infer<typeof advisorQuotaResponseSchema>;
136
+ /**
137
+ * Raw Haiku JSON shape — what the model is told to produce. Validated
138
+ * inside the service; mismatches throw `HttpError.internal` so the
139
+ * caller gets a clean 500 rather than half-rendered garbage.
140
+ */
141
+ export declare const advisorLlmOutputSchema: z.ZodObject<{
142
+ prose: z.ZodString;
143
+ recommendations: z.ZodArray<z.ZodObject<{
144
+ slug: z.ZodString;
145
+ reason: z.ZodString;
146
+ }, "strip", z.ZodTypeAny, {
147
+ slug: string;
148
+ reason: string;
149
+ }, {
150
+ slug: string;
151
+ reason: string;
152
+ }>, "many">;
153
+ }, "strip", z.ZodTypeAny, {
154
+ prose: string;
155
+ recommendations: {
156
+ slug: string;
157
+ reason: string;
158
+ }[];
159
+ }, {
160
+ prose: string;
161
+ recommendations: {
162
+ slug: string;
163
+ reason: string;
164
+ }[];
165
+ }>;
166
+ export type AdvisorLlmOutput = z.infer<typeof advisorLlmOutputSchema>;
167
+ //# sourceMappingURL=advisor.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advisor.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/advisor.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;GAMG;AAEH,eAAO,MAAM,iBAAiB,+BAA6B,CAAA;AAC3D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,eAAO,MAAM,oBAAoB;;IAG7B;;;;;OAKG;;;;;;;;;;;;;;EAWH,CAAA;AACJ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE;;;;GAIG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;EAGtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE/E,eAAO,MAAM,qBAAqB;IAChC;;;OAGG;;;;;;;;;;;;IAGH;;;OAGG;;IAEH;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOH,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;EAAoC,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;EAUjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA"}
@@ -0,0 +1,76 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Contextual Skill Advisor — prose recommendations behind a tiered
4
+ * freemium quota. See `apps/api/src/services/advisor.service.ts` for
5
+ * the orchestrator; the schemas below pin the request, response, and
6
+ * LLM-output shapes so a model drift on the Haiku side gets caught at
7
+ * the Zod boundary, not in the UI.
8
+ */
9
+ export const advisorModeSchema = z.enum(['manual', 'auto']);
10
+ export const advisorRequestSchema = z
11
+ .object({
12
+ mode: advisorModeSchema.default('manual'),
13
+ /**
14
+ * Task description for manual mode. Required when `mode === 'manual'`,
15
+ * ignored when `mode === 'auto'`. We cap at 1200 chars so a long
16
+ * paste can't blow the Haiku prompt window — the input field on the
17
+ * web side enforces the same limit.
18
+ */
19
+ task: z.string().trim().min(8).max(1200).optional(),
20
+ })
21
+ .superRefine((val, ctx) => {
22
+ if (val.mode === 'manual' && (!val.task || val.task.length < 8)) {
23
+ ctx.addIssue({
24
+ code: z.ZodIssueCode.custom,
25
+ path: ['task'],
26
+ message: 'Manual mode needs at least 8 characters of task description.',
27
+ });
28
+ }
29
+ });
30
+ /**
31
+ * One recommended skill in the advisor's response. `slug` is always a
32
+ * real catalogue slug — the service drops anything Haiku invented
33
+ * before the response leaves the API.
34
+ */
35
+ export const advisorRecommendationSchema = z.object({
36
+ slug: z.string().min(1).max(120),
37
+ reason: z.string().min(1).max(400),
38
+ });
39
+ export const advisorResponseSchema = z.object({
40
+ /**
41
+ * Prose paragraph the model writes. Calmly-cased, no markdown
42
+ * fences, no emoji. The web result block renders this verbatim.
43
+ */
44
+ prose: z.string().min(1).max(2400),
45
+ recommendations: z.array(advisorRecommendationSchema).max(5),
46
+ /**
47
+ * Echoed for telemetry + cache-bust debugging. The UI doesn't render
48
+ * this but the analytics layer does.
49
+ */
50
+ mode: advisorModeSchema,
51
+ /**
52
+ * After-this-call quota snapshot — saves the web UI a round-trip
53
+ * back to `GET /advisor/quota` immediately after a success.
54
+ */
55
+ quota: z.object({
56
+ plan: z.enum(['free', 'pro', 'max']),
57
+ limit: z.number().int().nonnegative(),
58
+ used: z.number().int().nonnegative(),
59
+ remaining: z.number().int().nonnegative(),
60
+ }),
61
+ });
62
+ export const advisorQuotaResponseSchema = advisorResponseSchema.shape.quota;
63
+ /**
64
+ * Raw Haiku JSON shape — what the model is told to produce. Validated
65
+ * inside the service; mismatches throw `HttpError.internal` so the
66
+ * caller gets a clean 500 rather than half-rendered garbage.
67
+ */
68
+ export const advisorLlmOutputSchema = z.object({
69
+ prose: z.string().min(1).max(2400),
70
+ recommendations: z
71
+ .array(z.object({
72
+ slug: z.string().min(1).max(120),
73
+ reason: z.string().min(1).max(400),
74
+ }))
75
+ .max(8), // accept up to 8 so we can drop hallucinations before capping to 5
76
+ });
@@ -12,4 +12,5 @@ export * from './api-keys.schema.js';
12
12
  export * from './skill-report.schema.js';
13
13
  export * from './security-audit.schema.js';
14
14
  export * from './hook.schema.js';
15
+ export * from './advisor.schema.js';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA"}
@@ -12,3 +12,4 @@ export * from './api-keys.schema.js';
12
12
  export * from './skill-report.schema.js';
13
13
  export * from './security-audit.schema.js';
14
14
  export * from './hook.schema.js';
15
+ export * from './advisor.schema.js';
@@ -99,6 +99,14 @@ export interface PlanLimits {
99
99
  usage_history_days: number | null;
100
100
  /** CSV export of usage history. */
101
101
  can_usage_export: boolean;
102
+ /**
103
+ * Daily call cap on the Contextual Skill Advisor (the prose-
104
+ * recommendation endpoint). Tiered freemium — every plan can call
105
+ * the advisor, but Free runs out fast (3) and Max gets the most
106
+ * (30). Quota lives in Redis fixed-window buckets; see
107
+ * `apps/api/src/config/rate-limit-buckets.ts`.
108
+ */
109
+ advisor_calls_per_day: number;
102
110
  /** Public profile page at `/u/<username>`. */
103
111
  can_public_profile: boolean;
104
112
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"plan-limits.d.ts","sourceRoot":"","sources":["../../src/types/plan-limits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE/D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAA;IACb,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAA;IACzB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAA;IACxB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAA;IAGlB,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAA;IACrB,8BAA8B;IAC9B,YAAY,EAAE,OAAO,CAAA;IACrB;;;;;;;;OAQG;IACH,mBAAmB,EAAE,OAAO,CAAA;IAG5B;;;OAGG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,4BAA4B;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,wDAAwD;IACxD,cAAc,EAAE,OAAO,CAAA;IACvB,yCAAyC;IACzC,sBAAsB,EAAE,OAAO,CAAA;IAG/B,0CAA0C;IAC1C,oBAAoB,EAAE,OAAO,CAAA;IAC7B,0CAA0C;IAC1C,qBAAqB,EAAE,OAAO,CAAA;IAC9B;;OAEG;IACH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,oDAAoD;IACpD,kBAAkB,EAAE,OAAO,CAAA;IAG3B,gDAAgD;IAChD,gBAAgB,EAAE,OAAO,CAAA;IACzB;;;;;OAKG;IACH,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC;;;;;;;;OAQG;IACH,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC;;;;;OAKG;IACH,yBAAyB,EAAE,OAAO,CAAA;IAClC,uDAAuD;IACvD,aAAa,EAAE,OAAO,CAAA;IACtB,qCAAqC;IACrC,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,mCAAmC;IACnC,gBAAgB,EAAE,OAAO,CAAA;IAGzB,8CAA8C;IAC9C,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;OAGG;IACH,oBAAoB,EAAE,OAAO,CAAA;IAC7B,oDAAoD;IACpD,kBAAkB,EAAE,OAAO,CAAA;IAC3B,mEAAmE;IACnE,kBAAkB,EAAE,OAAO,CAAA;IAG3B,6CAA6C;IAC7C,oBAAoB,EAAE,OAAO,CAAA;IAC7B,+CAA+C;IAC/C,gBAAgB,EAAE,OAAO,CAAA;IAGzB;;;;;OAKG;IACH,mBAAmB,EAAE,SAAS,SAAS,EAAE,CAAA;CAC1C;AAKD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,CAyJhD,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAI1C,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,SAAS,GAAI,QAAQ,IAAI,EAAE,UAAU,IAAI,KAAG,OACf,CAAA;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,UAAU,KAAG,IAAI,GAAG,IAU7D,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,KAAG,MAAiC,CAAA;AAExE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,EAAE,eAAe,MAAM,KAAG,MAAM,GAAG,IAI9E,CAAA"}
1
+ {"version":3,"file":"plan-limits.d.ts","sourceRoot":"","sources":["../../src/types/plan-limits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE/D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAA;IACb,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAA;IACzB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAA;IACxB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAA;IAGlB,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAA;IACrB,8BAA8B;IAC9B,YAAY,EAAE,OAAO,CAAA;IACrB;;;;;;;;OAQG;IACH,mBAAmB,EAAE,OAAO,CAAA;IAG5B;;;OAGG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,4BAA4B;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,wDAAwD;IACxD,cAAc,EAAE,OAAO,CAAA;IACvB,yCAAyC;IACzC,sBAAsB,EAAE,OAAO,CAAA;IAG/B,0CAA0C;IAC1C,oBAAoB,EAAE,OAAO,CAAA;IAC7B,0CAA0C;IAC1C,qBAAqB,EAAE,OAAO,CAAA;IAC9B;;OAEG;IACH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,oDAAoD;IACpD,kBAAkB,EAAE,OAAO,CAAA;IAG3B,gDAAgD;IAChD,gBAAgB,EAAE,OAAO,CAAA;IACzB;;;;;OAKG;IACH,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC;;;;;;;;OAQG;IACH,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC;;;;;OAKG;IACH,yBAAyB,EAAE,OAAO,CAAA;IAClC,uDAAuD;IACvD,aAAa,EAAE,OAAO,CAAA;IACtB,qCAAqC;IACrC,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,mCAAmC;IACnC,gBAAgB,EAAE,OAAO,CAAA;IAGzB;;;;;;OAMG;IACH,qBAAqB,EAAE,MAAM,CAAA;IAG7B,8CAA8C;IAC9C,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;OAGG;IACH,oBAAoB,EAAE,OAAO,CAAA;IAC7B,oDAAoD;IACpD,kBAAkB,EAAE,OAAO,CAAA;IAC3B,mEAAmE;IACnE,kBAAkB,EAAE,OAAO,CAAA;IAG3B,6CAA6C;IAC7C,oBAAoB,EAAE,OAAO,CAAA;IAC7B,+CAA+C;IAC/C,gBAAgB,EAAE,OAAO,CAAA;IAGzB;;;;;OAKG;IACH,mBAAmB,EAAE,SAAS,SAAS,EAAE,CAAA;CAC1C;AAKD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,CA+JhD,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAI1C,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,SAAS,GAAI,QAAQ,IAAI,EAAE,UAAU,IAAI,KAAG,OACf,CAAA;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,UAAU,KAAG,IAAI,GAAG,IAU7D,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,KAAG,MAAiC,CAAA;AAExE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,EAAE,eAAe,MAAM,KAAG,MAAM,GAAG,IAI9E,CAAA"}
@@ -37,6 +37,7 @@ export const PLAN_LIMITS = {
37
37
  can_usage_tracking: false,
38
38
  usage_history_days: 0,
39
39
  can_usage_export: false,
40
+ advisor_calls_per_day: 3,
40
41
  can_public_profile: false,
41
42
  can_magic_link_share: false,
42
43
  has_verified_badge: false,
@@ -80,6 +81,7 @@ export const PLAN_LIMITS = {
80
81
  can_usage_tracking: true,
81
82
  usage_history_days: 30,
82
83
  can_usage_export: false,
84
+ advisor_calls_per_day: 10,
83
85
  can_public_profile: true,
84
86
  can_magic_link_share: false,
85
87
  has_verified_badge: true,
@@ -121,6 +123,7 @@ export const PLAN_LIMITS = {
121
123
  can_usage_tracking: true,
122
124
  usage_history_days: null,
123
125
  can_usage_export: true,
126
+ advisor_calls_per_day: 30,
124
127
  can_public_profile: true,
125
128
  can_magic_link_share: true,
126
129
  has_verified_badge: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prave/shared",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"