@vxil/cli 0.1.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.
@@ -0,0 +1,587 @@
1
+ import { type Static, type TSchema } from '@sinclair/typebox';
2
+ export * from './_vxil-feature-configs-hooks.js';
3
+ export * from './readmodels.js';
4
+ export declare const NotificationsConfigSchema: import("@sinclair/typebox").TObject<{
5
+ enabled: import("@sinclair/typebox").TBoolean;
6
+ fromEmail: import("@sinclair/typebox").TString;
7
+ fromName: import("@sinclair/typebox").TString;
8
+ replyTo: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
9
+ resendApiKeyRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
10
+ provider: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"resend">, import("@sinclair/typebox").TLiteral<"mock">]>;
11
+ defaultLocale: import("@sinclair/typebox").TString;
12
+ retry: import("@sinclair/typebox").TObject<{
13
+ maxAttempts: import("@sinclair/typebox").TInteger;
14
+ backoff: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"exponential">, import("@sinclair/typebox").TLiteral<"linear">]>;
15
+ }>;
16
+ suppression: import("@sinclair/typebox").TObject<{
17
+ softBounceThreshold: import("@sinclair/typebox").TInteger;
18
+ }>;
19
+ rateLimit: import("@sinclair/typebox").TObject<{
20
+ perDay: import("@sinclair/typebox").TInteger;
21
+ perTenantSec: import("@sinclair/typebox").TInteger;
22
+ }>;
23
+ templates: import("@sinclair/typebox").TObject<{
24
+ allowOverride: import("@sinclair/typebox").TBoolean;
25
+ }>;
26
+ /** in-app inbox channel (send with channel: 'inbox' | 'both') */
27
+ inboxEnabled: import("@sinclair/typebox").TBoolean;
28
+ }>;
29
+ export type NotificationsConfig = Static<typeof NotificationsConfigSchema>;
30
+ export declare const JobsConfigSchema: import("@sinclair/typebox").TObject<{
31
+ enabled: import("@sinclair/typebox").TBoolean;
32
+ retry: import("@sinclair/typebox").TObject<{
33
+ defaultMaxAttempts: import("@sinclair/typebox").TInteger;
34
+ }>;
35
+ retention: import("@sinclair/typebox").TObject<{
36
+ successfulRunDays: import("@sinclair/typebox").TInteger;
37
+ failedRunDays: import("@sinclair/typebox").TInteger;
38
+ }>;
39
+ /** Per-tenant daily dead-letter quota (0 = unlimited). Once the tenant has
40
+ * dead-lettered this many runs today, a further failing run skips its
41
+ * remaining retry budget and dead-letters immediately (audited as
42
+ * `job.dead_letter_quota_exceeded`) — bounds the retry/DLQ churn one
43
+ * pathological target (e.g. an always-throwing function) can generate. */
44
+ dlqDailyQuota: import("@sinclair/typebox").TInteger;
45
+ schedules: import("@sinclair/typebox").TObject<{
46
+ maxPerTenant: import("@sinclair/typebox").TInteger;
47
+ }>;
48
+ concurrency: import("@sinclair/typebox").TObject<{
49
+ maxConcurrent: import("@sinclair/typebox").TInteger;
50
+ }>;
51
+ generation: import("@sinclair/typebox").TObject<{
52
+ /** per-tenant in-flight generation cap (separate budget from queue jobs) */
53
+ maxConcurrent: import("@sinclair/typebox").TInteger;
54
+ /** default expiry/timeout when the descriptor omits one */
55
+ defaultTimeoutMs: import("@sinclair/typebox").TInteger;
56
+ /** hard ceiling a tenant-supplied timeout is clamped to */
57
+ maxTimeoutMs: import("@sinclair/typebox").TInteger;
58
+ /** poll-mode: how many poll cycles before giving up (→ terminal-fail) */
59
+ pollMaxAttempts: import("@sinclair/typebox").TInteger;
60
+ /** MANDATORY per-hold cap on a generation `reserve_credits.amount` (jobs.md
61
+ * §11.8). Every requested amount is CLAMPED to this (never rejected) — a
62
+ * conservative default so an untrusted deployed function that carries a
63
+ * reserve block can never hold more than a bounded amount per run without
64
+ * any tenant action. */
65
+ maxReserveCredits: import("@sinclair/typebox").TInteger;
66
+ /** MANDATORY per-tenant ceiling on the SUM of un-settled provisional
67
+ * reserve holds across all in-flight generation runs (jobs.md §11.8): a
68
+ * reserve whose amount would push the tenant's outstanding-holds total over
69
+ * this is rejected 429, so a runaway function cannot hold every user at
70
+ * once. Defaulted so no tenant action is required to be safe. */
71
+ maxOutstandingReserveCredits: import("@sinclair/typebox").TInteger;
72
+ }>;
73
+ }>;
74
+ export type JobsConfig = Static<typeof JobsConfigSchema>;
75
+ export declare const AuthConfigSchema: import("@sinclair/typebox").TObject<{
76
+ enabled: import("@sinclair/typebox").TBoolean;
77
+ methods: import("@sinclair/typebox").TObject<{
78
+ emailPassword: import("@sinclair/typebox").TBoolean;
79
+ magicLink: import("@sinclair/typebox").TBoolean;
80
+ google: import("@sinclair/typebox").TBoolean;
81
+ github: import("@sinclair/typebox").TBoolean;
82
+ apple: import("@sinclair/typebox").TBoolean;
83
+ facebook: import("@sinclair/typebox").TBoolean;
84
+ }>;
85
+ providers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
86
+ google: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
87
+ clientIdRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
88
+ clientSecretRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
89
+ audRefs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
90
+ }>>;
91
+ github: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
92
+ clientIdRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
93
+ clientSecretRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
94
+ audRefs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
95
+ }>>;
96
+ apple: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
97
+ servicesId: import("@sinclair/typebox").TString;
98
+ teamId: import("@sinclair/typebox").TString;
99
+ keyId: import("@sinclair/typebox").TString;
100
+ p8KeyRef: import("@sinclair/typebox").TString;
101
+ bundleIds: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
102
+ }>>;
103
+ facebook: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
104
+ clientIdRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
105
+ clientSecretRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
106
+ audRefs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
107
+ }>>;
108
+ }>>;
109
+ session: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
110
+ ttlMinutes: import("@sinclair/typebox").TInteger;
111
+ refreshTtlDays: import("@sinclair/typebox").TInteger;
112
+ }>>;
113
+ password: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
114
+ minLength: import("@sinclair/typebox").TInteger;
115
+ requireMixed: import("@sinclair/typebox").TBoolean;
116
+ }>>;
117
+ emailVerification: import("@sinclair/typebox").TObject<{
118
+ required: import("@sinclair/typebox").TBoolean;
119
+ }>;
120
+ magicLink: import("@sinclair/typebox").TObject<{
121
+ tokenTtlMinutes: import("@sinclair/typebox").TInteger;
122
+ }>;
123
+ otp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
124
+ enabled: import("@sinclair/typebox").TBoolean;
125
+ codeTtlMinutes: import("@sinclair/typebox").TInteger;
126
+ maxAttempts: import("@sinclair/typebox").TInteger;
127
+ resendCooldownSec: import("@sinclair/typebox").TInteger;
128
+ }>>;
129
+ anonymous: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
130
+ enabled: import("@sinclair/typebox").TBoolean;
131
+ }>>;
132
+ orgClaims: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
133
+ enabled: import("@sinclair/typebox").TBoolean;
134
+ }>>;
135
+ }>;
136
+ export type AuthConfig = Static<typeof AuthConfigSchema>;
137
+ export declare const RateLimitsConfigSchema: import("@sinclair/typebox").TObject<{
138
+ enabled: import("@sinclair/typebox").TBoolean;
139
+ defaults: import("@sinclair/typebox").TObject<{
140
+ perTenantSec: import("@sinclair/typebox").TInteger;
141
+ burstSize: import("@sinclair/typebox").TInteger;
142
+ }>;
143
+ }>;
144
+ export type RateLimitsConfig = Static<typeof RateLimitsConfigSchema>;
145
+ export declare const FilesConfigSchema: import("@sinclair/typebox").TObject<{
146
+ enabled: import("@sinclair/typebox").TBoolean;
147
+ bucketRef: import("@sinclair/typebox").TString;
148
+ uploadUrlTtl: import("@sinclair/typebox").TInteger;
149
+ downloadUrlTtl: import("@sinclair/typebox").TInteger;
150
+ quotas: import("@sinclair/typebox").TObject<{
151
+ maxObjectBytes: import("@sinclair/typebox").TInteger;
152
+ maxTotalBytes: import("@sinclair/typebox").TInteger;
153
+ maxObjectCount: import("@sinclair/typebox").TInteger;
154
+ }>;
155
+ allowedContentTypes: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
156
+ contentScan: import("@sinclair/typebox").TObject<{
157
+ enabled: import("@sinclair/typebox").TBoolean;
158
+ quarantineOnFail: import("@sinclair/typebox").TBoolean;
159
+ }>;
160
+ sharedLinks: import("@sinclair/typebox").TObject<{
161
+ enabled: import("@sinclair/typebox").TBoolean;
162
+ maxTtl: import("@sinclair/typebox").TInteger;
163
+ }>;
164
+ ttl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
165
+ enabled: import("@sinclair/typebox").TBoolean;
166
+ defaultExpiresInSeconds: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
167
+ sweepCron: import("@sinclair/typebox").TString;
168
+ }>>;
169
+ extractText: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
170
+ enabled: import("@sinclair/typebox").TBoolean;
171
+ provider: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"gcv">, import("@sinclair/typebox").TLiteral<"textract">, import("@sinclair/typebox").TLiteral<"azure-di">, import("@sinclair/typebox").TLiteral<"mock">]>;
172
+ keyRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
173
+ asyncOverJobs: import("@sinclair/typebox").TBoolean;
174
+ boundingBoxes: import("@sinclair/typebox").TBoolean;
175
+ }>>;
176
+ }>;
177
+ export type FilesConfig = Static<typeof FilesConfigSchema>;
178
+ export declare const WebhooksConfigSchema: import("@sinclair/typebox").TObject<{
179
+ enabled: import("@sinclair/typebox").TBoolean;
180
+ maxSubscriptions: import("@sinclair/typebox").TInteger;
181
+ maxSources: import("@sinclair/typebox").TInteger;
182
+ }>;
183
+ export type WebhooksConfig = Static<typeof WebhooksConfigSchema>;
184
+ export declare const CommentsConfigSchema: import("@sinclair/typebox").TObject<{
185
+ enabled: import("@sinclair/typebox").TBoolean;
186
+ maxBodyLength: import("@sinclair/typebox").TInteger;
187
+ reactionsEnabled: import("@sinclair/typebox").TBoolean;
188
+ /** Author edits allowed this long after posting; 0 disables editing. */
189
+ editWindowMinutes: import("@sinclair/typebox").TInteger;
190
+ }>;
191
+ export type CommentsConfig = Static<typeof CommentsConfigSchema>;
192
+ export declare const CmsConfigSchema: import("@sinclair/typebox").TObject<{
193
+ enabled: import("@sinclair/typebox").TBoolean;
194
+ draftPublish: import("@sinclair/typebox").TBoolean;
195
+ strictEndUserScope: import("@sinclair/typebox").TBoolean;
196
+ limits: import("@sinclair/typebox").TObject<{
197
+ maxCollections: import("@sinclair/typebox").TInteger;
198
+ maxFieldsPerCollection: import("@sinclair/typebox").TInteger;
199
+ maxItemBytes: import("@sinclair/typebox").TInteger;
200
+ maxItemsPerCollection: import("@sinclair/typebox").TInteger;
201
+ }>;
202
+ query: import("@sinclair/typebox").TObject<{
203
+ maxPageSize: import("@sinclair/typebox").TInteger;
204
+ defaultPageSize: import("@sinclair/typebox").TInteger;
205
+ }>;
206
+ relations: import("@sinclair/typebox").TObject<{
207
+ maxExpandDepth: import("@sinclair/typebox").TInteger;
208
+ maxExpandFields: import("@sinclair/typebox").TInteger;
209
+ maxComputedFieldsPerCollection: import("@sinclair/typebox").TInteger;
210
+ }>;
211
+ hooks: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
212
+ collection: import("@sinclair/typebox").TString;
213
+ event: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"beforeCreate">, import("@sinclair/typebox").TLiteral<"beforeUpdate">, import("@sinclair/typebox").TLiteral<"beforeWrite">, import("@sinclair/typebox").TLiteral<"beforeRead">, import("@sinclair/typebox").TLiteral<"afterRead">]>;
214
+ kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"validate">, import("@sinclair/typebox").TLiteral<"derive">, import("@sinclair/typebox").TLiteral<"redact">]>;
215
+ expr: import("@sinclair/typebox").TString;
216
+ field: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
217
+ message: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
218
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
219
+ }>>>;
220
+ readModels: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
221
+ collection: import("@sinclair/typebox").TString;
222
+ kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"aggregate">, import("@sinclair/typebox").TLiteral<"rank">]>;
223
+ spec: import("@sinclair/typebox").TUnknown;
224
+ materialize: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
225
+ cron: import("@sinclair/typebox").TString;
226
+ to: import("@sinclair/typebox").TString;
227
+ }>>;
228
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
229
+ }>>>;
230
+ cdc: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
231
+ collection: import("@sinclair/typebox").TString;
232
+ channel: import("@sinclair/typebox").TString;
233
+ events: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"created">, import("@sinclair/typebox").TLiteral<"updated">, import("@sinclair/typebox").TLiteral<"deleted">, import("@sinclair/typebox").TLiteral<"published">]>>>;
234
+ payload: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ids">, import("@sinclair/typebox").TLiteral<"full">]>>;
235
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
236
+ }>>>;
237
+ }>;
238
+ export type CmsConfig = Static<typeof CmsConfigSchema>;
239
+ export declare const McpConfigSchema: import("@sinclair/typebox").TObject<{
240
+ enabled: import("@sinclair/typebox").TBoolean;
241
+ exposureLevel: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"all">, import("@sinclair/typebox").TLiteral<"read-only">, import("@sinclair/typebox").TLiteral<"custom">]>;
242
+ allowToolList: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
243
+ scopedKey: import("@sinclair/typebox").TObject<{
244
+ perAgentKeys: import("@sinclair/typebox").TBoolean;
245
+ }>;
246
+ rateLimits: import("@sinclair/typebox").TObject<{
247
+ toolCallsPerMin: import("@sinclair/typebox").TInteger;
248
+ }>;
249
+ branding: import("@sinclair/typebox").TObject<{
250
+ serverName: import("@sinclair/typebox").TString;
251
+ serverInstructions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
252
+ }>;
253
+ customTools: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
254
+ description: import("@sinclair/typebox").TString;
255
+ url: import("@sinclair/typebox").TString;
256
+ inputSchema: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnknown>;
257
+ timeoutMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
258
+ }>>>;
259
+ prompts: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
260
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
261
+ template: import("@sinclair/typebox").TString;
262
+ arguments: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
263
+ name: import("@sinclair/typebox").TString;
264
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
265
+ required: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
266
+ }>>>;
267
+ }>>>;
268
+ }>;
269
+ export type McpConfig = Static<typeof McpConfigSchema>;
270
+ export declare const RealtimeConfigSchema: import("@sinclair/typebox").TObject<{
271
+ enabled: import("@sinclair/typebox").TBoolean;
272
+ maxConnectionsPerChannel: import("@sinclair/typebox").TInteger;
273
+ }>;
274
+ export type RealtimeConfig = Static<typeof RealtimeConfigSchema>;
275
+ export declare const PresenceConfigSchema: import("@sinclair/typebox").TObject<{
276
+ enabled: import("@sinclair/typebox").TBoolean;
277
+ }>;
278
+ export type PresenceConfig = Static<typeof PresenceConfigSchema>;
279
+ export declare const OrgsConfigSchema: import("@sinclair/typebox").TObject<{
280
+ enabled: import("@sinclair/typebox").TBoolean;
281
+ maxOrgsPerTenant: import("@sinclair/typebox").TInteger;
282
+ maxMembersPerOrg: import("@sinclair/typebox").TInteger;
283
+ invitationTtlHours: import("@sinclair/typebox").TInteger;
284
+ }>;
285
+ export type OrgsConfig = Static<typeof OrgsConfigSchema>;
286
+ export declare const ActivityFeedConfigSchema: import("@sinclair/typebox").TObject<{
287
+ enabled: import("@sinclair/typebox").TBoolean;
288
+ feedGroups: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
289
+ type: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"flat">, import("@sinclair/typebox").TLiteral<"aggregated">, import("@sinclair/typebox").TLiteral<"notification">]>;
290
+ aggregation: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
291
+ ranking: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
292
+ }>>;
293
+ fanout: import("@sinclair/typebox").TObject<{
294
+ celebrityThreshold: import("@sinclair/typebox").TInteger;
295
+ maxFanoutPerJob: import("@sinclair/typebox").TInteger;
296
+ maxConcurrentTasks: import("@sinclair/typebox").TInteger;
297
+ pendingCeiling: import("@sinclair/typebox").TInteger;
298
+ }>;
299
+ follow: import("@sinclair/typebox").TObject<{
300
+ copyLimit: import("@sinclair/typebox").TInteger;
301
+ maxFollowing: import("@sinclair/typebox").TInteger;
302
+ }>;
303
+ aggregation: import("@sinclair/typebox").TObject<{
304
+ maxGroupActivities: import("@sinclair/typebox").TInteger;
305
+ }>;
306
+ realtime: import("@sinclair/typebox").TObject<{
307
+ enabled: import("@sinclair/typebox").TBoolean;
308
+ }>;
309
+ crossChannel: import("@sinclair/typebox").TObject<{
310
+ enabled: import("@sinclair/typebox").TBoolean;
311
+ digestCadence: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"off">, import("@sinclair/typebox").TLiteral<"hourly">, import("@sinclair/typebox").TLiteral<"daily">]>;
312
+ }>;
313
+ rateLimit: import("@sinclair/typebox").TObject<{
314
+ addPerSec: import("@sinclair/typebox").TInteger;
315
+ }>;
316
+ }>;
317
+ export type ActivityFeedConfig = Static<typeof ActivityFeedConfigSchema>;
318
+ export declare const VectorSearchConfigSchema: import("@sinclair/typebox").TObject<{
319
+ enabled: import("@sinclair/typebox").TBoolean;
320
+ backend: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<"lakebase">, import("@sinclair/typebox").TLiteral<"pgvector">]>;
321
+ embed: import("@sinclair/typebox").TObject<{
322
+ provider: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"byov">, import("@sinclair/typebox").TLiteral<"mock">, import("@sinclair/typebox").TLiteral<"openai">, import("@sinclair/typebox").TLiteral<"cohere">]>;
323
+ model: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
324
+ apiKeyRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
325
+ dimensions: import("@sinclair/typebox").TInteger;
326
+ }>;
327
+ chunking: import("@sinclair/typebox").TObject<{
328
+ maxTokens: import("@sinclair/typebox").TInteger;
329
+ overlap: import("@sinclair/typebox").TInteger;
330
+ }>;
331
+ hybrid: import("@sinclair/typebox").TObject<{
332
+ defaultMode: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"hybrid">, import("@sinclair/typebox").TLiteral<"vector">, import("@sinclair/typebox").TLiteral<"keyword">]>;
333
+ rrfK: import("@sinclair/typebox").TInteger;
334
+ }>;
335
+ limits: import("@sinclair/typebox").TObject<{
336
+ maxDocsPerCollection: import("@sinclair/typebox").TInteger;
337
+ maxChunksPerDoc: import("@sinclair/typebox").TInteger;
338
+ }>;
339
+ rerank: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
340
+ provider: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"mock">, import("@sinclair/typebox").TLiteral<"cohere">, import("@sinclair/typebox").TLiteral<"voyage">]>;
341
+ model: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
342
+ topN: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
343
+ apiKeyRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
344
+ }>>;
345
+ sync: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
346
+ source: import("@sinclair/typebox").TLiteral<"cms">;
347
+ cmsCollection: import("@sinclair/typebox").TString;
348
+ collection: import("@sinclair/typebox").TString;
349
+ fields: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
350
+ template: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
351
+ metadataFields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
352
+ statusFilter: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"published">, import("@sinclair/typebox").TLiteral<"all">]>>;
353
+ cron: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
354
+ }>>>;
355
+ }>;
356
+ export type VectorSearchConfig = Static<typeof VectorSearchConfigSchema>;
357
+ export declare const AiConfigSchema: import("@sinclair/typebox").TObject<{
358
+ enabled: import("@sinclair/typebox").TBoolean;
359
+ defaultProvider: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"mock">, import("@sinclair/typebox").TLiteral<"openai">, import("@sinclair/typebox").TLiteral<"anthropic">, import("@sinclair/typebox").TLiteral<"gemini">, import("@sinclair/typebox").TLiteral<"azure">, import("@sinclair/typebox").TLiteral<"openrouter">]>;
360
+ providers: import("@sinclair/typebox").TObject<{
361
+ openaiKeyRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
362
+ anthropicKeyRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
363
+ geminiKeyRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
364
+ compat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
365
+ openrouterKeyRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
366
+ openaiBaseUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
367
+ }>>;
368
+ }>;
369
+ defaults: import("@sinclair/typebox").TObject<{
370
+ model: import("@sinclair/typebox").TString;
371
+ maxTokens: import("@sinclair/typebox").TInteger;
372
+ temperature: import("@sinclair/typebox").TNumber;
373
+ }>;
374
+ cache: import("@sinclair/typebox").TObject<{
375
+ ttlSeconds: import("@sinclair/typebox").TInteger;
376
+ }>;
377
+ limits: import("@sinclair/typebox").TObject<{
378
+ tokensPerUserPerDay: import("@sinclair/typebox").TInteger;
379
+ consumeCredits: import("@sinclair/typebox").TBoolean;
380
+ }>;
381
+ streaming: import("@sinclair/typebox").TObject<{
382
+ enabled: import("@sinclair/typebox").TBoolean;
383
+ replayBufferFrames: import("@sinclair/typebox").TInteger;
384
+ flushMs: import("@sinclair/typebox").TInteger;
385
+ }>;
386
+ }>;
387
+ export type AiConfig = Static<typeof AiConfigSchema>;
388
+ export declare const RagConfigSchema: import("@sinclair/typebox").TObject<{
389
+ enabled: import("@sinclair/typebox").TBoolean;
390
+ defaultCollection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
391
+ retrieval: import("@sinclair/typebox").TObject<{
392
+ topK: import("@sinclair/typebox").TInteger;
393
+ mode: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"hybrid">, import("@sinclair/typebox").TLiteral<"vector">, import("@sinclair/typebox").TLiteral<"keyword">]>;
394
+ minScore: import("@sinclair/typebox").TNumber;
395
+ rerank: import("@sinclair/typebox").TBoolean;
396
+ }>;
397
+ boosts: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
398
+ kind: import("@sinclair/typebox").TLiteral<"recency">;
399
+ halfLifeDays: import("@sinclair/typebox").TNumber;
400
+ weight: import("@sinclair/typebox").TNumber;
401
+ }>, import("@sinclair/typebox").TObject<{
402
+ kind: import("@sinclair/typebox").TLiteral<"value">;
403
+ weights: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber>;
404
+ }>]>>;
405
+ context: import("@sinclair/typebox").TObject<{
406
+ maxTokens: import("@sinclair/typebox").TInteger;
407
+ strategy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"topk">, import("@sinclair/typebox").TLiteral<"mmr">]>;
408
+ tokenizer: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"provider">, import("@sinclair/typebox").TLiteral<"heuristic">]>;
409
+ }>;
410
+ defaultTemplate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
411
+ citations: import("@sinclair/typebox").TBoolean;
412
+ streaming: import("@sinclair/typebox").TBoolean;
413
+ }>;
414
+ export type RagConfig = Static<typeof RagConfigSchema>;
415
+ export declare const PaymentsConfigSchema: import("@sinclair/typebox").TObject<{
416
+ enabled: import("@sinclair/typebox").TBoolean;
417
+ provider: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"mock">, import("@sinclair/typebox").TLiteral<"stripe">, import("@sinclair/typebox").TLiteral<"paddle">, import("@sinclair/typebox").TLiteral<"revenuecat">, import("@sinclair/typebox").TLiteral<"paypal">]>;
418
+ stripe: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
419
+ secretKeyRef: import("@sinclair/typebox").TString;
420
+ webhookSecretRef: import("@sinclair/typebox").TString;
421
+ taxEnabled: import("@sinclair/typebox").TBoolean;
422
+ }>>;
423
+ paddle: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
424
+ apiKeyRef: import("@sinclair/typebox").TString;
425
+ webhookSecretRef: import("@sinclair/typebox").TString;
426
+ sandbox: import("@sinclair/typebox").TBoolean;
427
+ }>>;
428
+ revenuecat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
429
+ projectId: import("@sinclair/typebox").TString;
430
+ publicSdkKey: import("@sinclair/typebox").TString;
431
+ secretApiKeyRef: import("@sinclair/typebox").TString;
432
+ webhookSecretRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
433
+ }>>;
434
+ paypal: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
435
+ clientIdRef: import("@sinclair/typebox").TString;
436
+ secretRef: import("@sinclair/typebox").TString;
437
+ webhookId: import("@sinclair/typebox").TString;
438
+ sandbox: import("@sinclair/typebox").TBoolean;
439
+ }>>;
440
+ returnUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
441
+ prices: import("@sinclair/typebox").TObject<{
442
+ catalogRef: import("@sinclair/typebox").TString;
443
+ }>;
444
+ defaults: import("@sinclair/typebox").TObject<{
445
+ currency: import("@sinclair/typebox").TString;
446
+ trialDays: import("@sinclair/typebox").TInteger;
447
+ }>;
448
+ ledger: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
449
+ productMap: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
450
+ creditType: import("@sinclair/typebox").TString;
451
+ amount: import("@sinclair/typebox").TInteger;
452
+ period: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"once">, import("@sinclair/typebox").TLiteral<"monthly">, import("@sinclair/typebox").TLiteral<"annual">]>;
453
+ }>>;
454
+ tierMap: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
455
+ entitlements: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
456
+ quotas: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TInteger>;
457
+ rank: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
458
+ grants: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
459
+ creditType: import("@sinclair/typebox").TString;
460
+ amount: import("@sinclair/typebox").TInteger;
461
+ period: import("@sinclair/typebox").TString;
462
+ }>>>;
463
+ }>>;
464
+ priceMap: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>>;
465
+ autoRefundOnJobFailure: import("@sinclair/typebox").TBoolean;
466
+ }>>;
467
+ webhooks: import("@sinclair/typebox").TObject<{
468
+ forwardToTenantUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
469
+ }>;
470
+ }>;
471
+ export type PaymentsConfig = Static<typeof PaymentsConfigSchema>;
472
+ export declare const FunctionsConfigSchema: import("@sinclair/typebox").TObject<{
473
+ enabled: import("@sinclair/typebox").TBoolean;
474
+ runtime: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"isolate">, import("@sinclair/typebox").TLiteral<"container">]>;
475
+ defaultLimits: import("@sinclair/typebox").TObject<{
476
+ cpuMs: import("@sinclair/typebox").TInteger;
477
+ timeoutMs: import("@sinclair/typebox").TInteger;
478
+ memoryMb: import("@sinclair/typebox").TInteger;
479
+ }>;
480
+ metering: import("@sinclair/typebox").TObject<{
481
+ enabled: import("@sinclair/typebox").TBoolean;
482
+ }>;
483
+ functions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
484
+ bindings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
485
+ kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"http">, import("@sinclair/typebox").TLiteral<"queue">, import("@sinclair/typebox").TLiteral<"cron">, import("@sinclair/typebox").TLiteral<"webhook">, import("@sinclair/typebox").TLiteral<"cmsHook">, import("@sinclair/typebox").TLiteral<"authHook">]>;
486
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
487
+ schedule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
488
+ source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
489
+ collection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
490
+ event: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
491
+ }>>>;
492
+ scriptRef: import("@sinclair/typebox").TString;
493
+ scopes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
494
+ secrets: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
495
+ egressAllow: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
496
+ limits: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
497
+ cpuMs: import("@sinclair/typebox").TInteger;
498
+ timeoutMs: import("@sinclair/typebox").TInteger;
499
+ memoryMb: import("@sinclair/typebox").TInteger;
500
+ }>>;
501
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
502
+ signature: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
503
+ input: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnknown>;
504
+ output: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnknown>;
505
+ }>>;
506
+ }>>>;
507
+ }>;
508
+ export type FunctionsConfig = Static<typeof FunctionsConfigSchema>;
509
+ export declare const CopilotConfigSchema: import("@sinclair/typebox").TObject<{
510
+ enabled: import("@sinclair/typebox").TBoolean;
511
+ agents: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
512
+ name: import("@sinclair/typebox").TString;
513
+ directiveRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
514
+ tone: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
515
+ greeting: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
516
+ locale: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
517
+ knowledge: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
518
+ collections: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
519
+ useRag: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
520
+ ragTemplateRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
521
+ topKOverride: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
522
+ }>>;
523
+ citations: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
524
+ grounding: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"strict">, import("@sinclair/typebox").TLiteral<"blended">]>>;
525
+ actions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
526
+ mode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"off">, import("@sinclair/typebox").TLiteral<"readonly">, import("@sinclair/typebox").TLiteral<"actions">]>>;
527
+ allow: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
528
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
529
+ requireConfirm: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
530
+ minScope: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
531
+ }>>>;
532
+ }>>;
533
+ guardrails: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
534
+ maxTurnsPerSession: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
535
+ rateLimitPerUserPerDay: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
536
+ maxInputChars: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
537
+ refusalMessage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
538
+ allowGuest: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
539
+ guestToolAllow: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
540
+ }>>;
541
+ }>>;
542
+ escalation: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
543
+ enabled: import("@sinclair/typebox").TBoolean;
544
+ handler: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"comments">, import("@sinclair/typebox").TLiteral<"notifications">]>;
545
+ notifyTemplate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
546
+ }>>;
547
+ limits: import("@sinclair/typebox").TObject<{
548
+ consumeCredits: import("@sinclair/typebox").TBoolean;
549
+ tokensPerUserPerDay: import("@sinclair/typebox").TInteger;
550
+ }>;
551
+ widget: import("@sinclair/typebox").TObject<{
552
+ enabled: import("@sinclair/typebox").TBoolean;
553
+ requireAuth: import("@sinclair/typebox").TBoolean;
554
+ allowedOrigins: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
555
+ theme: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
556
+ }>;
557
+ }>;
558
+ export type CopilotConfig = Static<typeof CopilotConfigSchema>;
559
+ export declare const FEATURE_SCHEMAS: Record<string, TSchema>;
560
+ export declare const CONFIG_FLAG_CAP = 15;
561
+ /** Counts leaf flags in a TypeBox object schema (architecture §6).
562
+ * Per features/auth.md §4: an OPTIONAL object (e.g. a provider credential
563
+ * block) counts as ONE flag — the tenant's decision is "configure it or
564
+ * not", not each inner ref. */
565
+ export declare function countLeaves(schema: TSchema): number;
566
+ export interface ConfigValidation {
567
+ ok: boolean;
568
+ errors: string[];
569
+ /** value with TypeBox defaults applied (only when ok) */
570
+ value?: unknown;
571
+ }
572
+ export declare function setKnownMcpTools(names: readonly string[]): void;
573
+ export declare const MCP_MAX_CUSTOM_TOOLS = 32;
574
+ export declare const MCP_MAX_PROMPTS = 32;
575
+ /** Scopes a FUNCTION may NEVER carry (the deploy clamp + the config-write gate).
576
+ * NARROWER than the appgen public-page deny-list — a function is authenticated,
577
+ * per-function-scoped, tier-walled, egress-guarded tenant code, so the owner may
578
+ * grant it business scopes (payments:write / notifications:send / users:*) that an
579
+ * anonymous appgen page never gets. Only CROSS-TENANT escalation (admin/*) and
580
+ * SELF-INTEGRITY rewrites stay forbidden: features:write (config rewrite outside
581
+ * the versioned pipeline), functions:write (redeploy/modify the tenant's functions
582
+ * at runtime — a persistence vector; function code ships via the CLI/dashboard,
583
+ * not another function), and secrets:write (secret mutation). functions:invoke
584
+ * stays ALLOWED (fn→fn composition). Source of truth for both the config-write
585
+ * validation below and the control-plane deploy clamp. */
586
+ export declare const DENY_FUNCTION_SCOPES: Set<string>;
587
+ export declare function validateFeatureConfig(feature: string, raw: unknown): ConfigValidation;