@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.
- package/dist/schemas/advisor.schema.d.ts +167 -0
- package/dist/schemas/advisor.schema.d.ts.map +1 -0
- package/dist/schemas/advisor.schema.js +76 -0
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -0
- package/dist/types/plan-limits.d.ts +8 -0
- package/dist/types/plan-limits.d.ts.map +1 -1
- package/dist/types/plan-limits.js +3 -0
- package/package.json +1 -1
|
@@ -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
|
+
});
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -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,
|
|
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,
|