@fayz-ai/core 0.8.1 → 0.8.3

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.
Files changed (123) hide show
  1. package/dist/access/denial.d.ts +21 -0
  2. package/dist/access/denial.d.ts.map +1 -0
  3. package/dist/access/engine.d.ts +63 -0
  4. package/dist/access/engine.d.ts.map +1 -0
  5. package/dist/access/index.cjs +60 -0
  6. package/dist/access/index.cjs.map +1 -0
  7. package/dist/access/index.d.ts +6 -0
  8. package/dist/access/index.d.ts.map +1 -0
  9. package/dist/access/index.js +51 -0
  10. package/dist/access/index.js.map +1 -0
  11. package/dist/access/limits.d.ts +10 -0
  12. package/dist/access/limits.d.ts.map +1 -0
  13. package/dist/address/index.d.ts +52 -0
  14. package/dist/address/index.d.ts.map +1 -0
  15. package/dist/{chunk-QR7U2URY.cjs → chunk-CATASHPK.cjs} +345 -4
  16. package/dist/chunk-CATASHPK.cjs.map +1 -0
  17. package/dist/{chunk-WKZVSKEU.js → chunk-CU64QI4A.js} +2 -2
  18. package/dist/chunk-CU64QI4A.js.map +1 -0
  19. package/dist/{chunk-KNIVT6XZ.js → chunk-DZALZ6Q6.js} +345 -4
  20. package/dist/chunk-DZALZ6Q6.js.map +1 -0
  21. package/dist/{chunk-54SRL7AJ.cjs → chunk-KSI2L3E4.cjs} +145 -86
  22. package/dist/chunk-KSI2L3E4.cjs.map +1 -0
  23. package/dist/{chunk-ZBIWYDAR.js → chunk-TYPVSWLG.js} +144 -87
  24. package/dist/chunk-TYPVSWLG.js.map +1 -0
  25. package/dist/{chunk-2NTHNWEH.cjs → chunk-UKU4RIWM.cjs} +2 -2
  26. package/dist/chunk-UKU4RIWM.cjs.map +1 -0
  27. package/dist/{chunk-CHGX6UYR.js → chunk-YH25Y4FW.js} +6 -3
  28. package/dist/chunk-YH25Y4FW.js.map +1 -0
  29. package/dist/{chunk-5X2VX3RQ.cjs → chunk-ZOPJB5FN.cjs} +6 -3
  30. package/dist/chunk-ZOPJB5FN.cjs.map +1 -0
  31. package/dist/data/archetype.d.ts.map +1 -1
  32. package/dist/data/count.d.ts +34 -0
  33. package/dist/data/count.d.ts.map +1 -0
  34. package/dist/data/index.cjs +18 -10
  35. package/dist/data/index.d.ts +2 -0
  36. package/dist/data/index.d.ts.map +1 -1
  37. package/dist/data/index.js +1 -1
  38. package/dist/data/refresh.d.ts +36 -0
  39. package/dist/data/refresh.d.ts.map +1 -0
  40. package/dist/data/resolve.d.ts.map +1 -1
  41. package/dist/data/supabase.d.ts.map +1 -1
  42. package/dist/data/types.d.ts +6 -0
  43. package/dist/data/types.d.ts.map +1 -1
  44. package/dist/entity/index.cjs +6 -6
  45. package/dist/entity/index.js +1 -1
  46. package/dist/entity/registry.d.ts +9 -0
  47. package/dist/entity/registry.d.ts.map +1 -1
  48. package/dist/i18n/index.cjs +10 -10
  49. package/dist/i18n/index.js +1 -1
  50. package/dist/i18n/shell-translations.d.ts.map +1 -1
  51. package/dist/index.cjs +1517 -180
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.d.ts +15 -5
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +1412 -110
  56. package/dist/index.js.map +1 -1
  57. package/dist/manifest/index.d.ts +109 -3
  58. package/dist/manifest/index.d.ts.map +1 -1
  59. package/dist/manifest/serialize.d.ts +14 -0
  60. package/dist/manifest/serialize.d.ts.map +1 -0
  61. package/dist/plugin/index.cjs +7 -7
  62. package/dist/plugin/index.js +1 -1
  63. package/dist/plugin/runtime.d.ts.map +1 -1
  64. package/dist/search/engine.d.ts +12 -0
  65. package/dist/search/engine.d.ts.map +1 -0
  66. package/dist/search/index.d.ts +5 -0
  67. package/dist/search/index.d.ts.map +1 -0
  68. package/dist/search/text.d.ts +37 -0
  69. package/dist/search/text.d.ts.map +1 -0
  70. package/dist/search/types.d.ts +72 -0
  71. package/dist/search/types.d.ts.map +1 -0
  72. package/dist/types/billing.d.ts +20 -0
  73. package/dist/types/billing.d.ts.map +1 -1
  74. package/dist/types/crud.d.ts +47 -1
  75. package/dist/types/crud.d.ts.map +1 -1
  76. package/dist/types/entitlements.d.ts +45 -0
  77. package/dist/types/entitlements.d.ts.map +1 -0
  78. package/dist/types/index.d.ts +4 -3
  79. package/dist/types/index.d.ts.map +1 -1
  80. package/dist/types/org.d.ts +28 -0
  81. package/dist/types/org.d.ts.map +1 -1
  82. package/dist/types/plugins.d.ts +88 -0
  83. package/dist/types/plugins.d.ts.map +1 -1
  84. package/package.json +14 -4
  85. package/src/access/denial.ts +33 -0
  86. package/src/access/engine.test.ts +48 -0
  87. package/src/access/engine.ts +121 -0
  88. package/src/access/index.ts +13 -0
  89. package/src/access/limits.ts +18 -0
  90. package/src/address/index.ts +188 -0
  91. package/src/data/archetype.ts +4 -2
  92. package/src/data/count.test.ts +152 -0
  93. package/src/data/count.ts +131 -0
  94. package/src/data/index.ts +2 -0
  95. package/src/data/refresh.ts +105 -0
  96. package/src/data/resolve.ts +7 -1
  97. package/src/data/supabase.ts +3 -1
  98. package/src/data/types.ts +6 -0
  99. package/src/entity/registry.ts +7 -0
  100. package/src/i18n/shell-translations.ts +345 -2
  101. package/src/index.ts +37 -4
  102. package/src/manifest/app-manifest.schema.json +618 -45
  103. package/src/manifest/index.ts +127 -3
  104. package/src/manifest/serialize.ts +52 -0
  105. package/src/plugin/runtime.ts +5 -1
  106. package/src/search/engine.ts +551 -0
  107. package/src/search/index.ts +25 -0
  108. package/src/search/text.ts +206 -0
  109. package/src/search/types.ts +75 -0
  110. package/src/types/billing.ts +22 -0
  111. package/src/types/crud.ts +48 -1
  112. package/src/types/entitlements.ts +45 -0
  113. package/src/types/index.ts +4 -3
  114. package/src/types/org.ts +29 -0
  115. package/src/types/plugins.ts +83 -0
  116. package/dist/chunk-2NTHNWEH.cjs.map +0 -1
  117. package/dist/chunk-54SRL7AJ.cjs.map +0 -1
  118. package/dist/chunk-5X2VX3RQ.cjs.map +0 -1
  119. package/dist/chunk-CHGX6UYR.js.map +0 -1
  120. package/dist/chunk-KNIVT6XZ.js.map +0 -1
  121. package/dist/chunk-QR7U2URY.cjs.map +0 -1
  122. package/dist/chunk-WKZVSKEU.js.map +0 -1
  123. package/dist/chunk-ZBIWYDAR.js.map +0 -1
@@ -137,6 +137,7 @@ export const shellTranslations: Record<string, Record<string, string>> = {
137
137
  "crud.import.rowNumber": "Row {{row}}:",
138
138
  "crud.import.toastSuccess": "{{count}} records imported",
139
139
  "crud.import.noConnection": "Not connected to the database. Import requires an active connection.",
140
+ "crud.import.limitExceeded": "This import exceeds your plan limit. Upgrade or import fewer rows.",
140
141
  "crud.export.action": "Export",
141
142
  "crud.export.noData": "No data to export.",
142
143
  "crud.export.toastSuccess": "{{count}} records exported",
@@ -199,6 +200,17 @@ export const shellTranslations: Record<string, Record<string, string>> = {
199
200
  "billing.title": "Billing",
200
201
  "billing.subtitle": "Manage your subscription and billing.",
201
202
  "billing.currentPlan": "Current Plan",
203
+ "billing.subscription.title": "Subscription",
204
+ "billing.subscription.subtitle": "Manage your plan and unlock more features.",
205
+ "billing.changeToPlan": "Switch to this plan",
206
+ "billing.featureMatrix": "Feature comparison",
207
+ "billing.changePlanConfirmTitle": "Change plan?",
208
+ "billing.changePlanConfirmBody": "You're switching to the {{plan}} plan.",
209
+ "billing.changePlanConfirm": "Switch plan",
210
+ "billing.planChanged": "You're now on the {{plan}} plan.",
211
+ "billing.planChangeFailed": "Couldn't change your plan. Please try again.",
212
+ "billing.noPlans": "No plans are configured.",
213
+ "billing.pro": "Pro",
202
214
  "billing.upgrade": "Upgrade",
203
215
  "billing.downgrade": "Downgrade",
204
216
  "billing.monthly": "Monthly",
@@ -259,11 +271,71 @@ export const shellTranslations: Record<string, Record<string, string>> = {
259
271
  "organization.onboarding.failedCreate": "Failed to create workspace",
260
272
  "settings.title": "Settings",
261
273
  "settings.subtitle": "Manage your account and organization preferences.",
274
+ "settings.backToHome": "Back to home",
275
+ "settings.navLinks": "Settings links",
262
276
  "settings.general": "General",
263
277
  "settings.properties": "Properties",
264
278
  "settings.profile": "Profile",
265
279
  "settings.branding": "Branding",
266
280
  "settings.security": "Security",
281
+ "settings.subscription": "Subscription",
282
+ "upgrade.title": 'Premium feature',
283
+ "upgrade.description": 'This feature is available on a higher plan. Upgrade to unlock it.',
284
+ "upgrade.descriptionFeature": 'The {feature} feature is available on a higher plan. Upgrade to unlock it.',
285
+ // ContactPicker — shared "find the person, or create them" flow.
286
+ "contactPicker.search": 'Search contact...',
287
+ "contactPicker.newContact": 'New contact',
288
+ "contactPicker.name": 'Name',
289
+ "contactPicker.phone": 'Phone',
290
+ "contactPicker.emailOptional": 'Email (optional)',
291
+ "contactPicker.create": 'Create',
292
+ "contactPicker.creating": 'Creating...',
293
+ "contactPicker.cancel": 'Cancel',
294
+ "contactPicker.clear": 'Clear contact',
295
+ "contactPicker.createFailed": 'Could not create the contact',
296
+ "contactPicker.addField": 'Add {label}',
297
+
298
+ "upgrade.includes": 'Includes {feature}',
299
+ "upgrade.cta": 'View plans',
300
+ "upgrade.badgeTooltip": 'Available on a higher plan',
301
+ "upgrade.unlock": 'Unlock {feature}',
302
+ "upgrade.currentPlan": 'Your plan: {plan}',
303
+ "upgrade.recommended": 'Recommended',
304
+ "upgrade.ctaUpgrade": 'Upgrade',
305
+ "upgrade.ctaUpgradeTo": 'Upgrade to {plan}',
306
+ "upgrade.compareAll": 'Compare all plans',
307
+ "upgrade.valueGeneric": 'Get everything you need to grow — included in the plans below.',
308
+ "upgrade.value.marketing": 'Campaigns, funnel and content to grow your client base.',
309
+ "upgrade.value.reports": 'Advanced reports and insights to make sharper decisions.',
310
+ "upgrade.value.fin_reconciliation": 'Reconcile payments and keep your cash flow under control.',
311
+ "upgrade.value.assistant": 'Your operations copilot — ask, analyze and act with AI.',
312
+ "upgrade.feature.assistant": 'AI Assistant',
313
+ "billing.unlimited": 'Unlimited',
314
+ "billing.upTo": 'Up to {count}',
315
+ "limit.label.clients": 'clients',
316
+ "limit.label.users": 'team members',
317
+ "limit.label.locations": 'locations',
318
+ "limit.label.bookings_month": 'monthly bookings',
319
+ "limit.label.products": 'products',
320
+ "limit.label.students": 'students',
321
+ "limit.label.courses": 'courses',
322
+ "limit.label.contacts": 'contacts',
323
+ "limit.label.deals": 'deals',
324
+ "limit.label.menu_items": 'menu items',
325
+ "limit.label.orders_month": 'monthly orders',
326
+ "limit.label.connected_banks": 'connected banks',
327
+ "limit.label.movements_month": 'monthly movements',
328
+ "limit.label.leads": 'leads',
329
+ "limit.label.quotes": 'quotes',
330
+ "limit.label.conversations_month": 'monthly conversations',
331
+ "limit.label.ai_credits_month": 'AI credits per month',
332
+ "limit.label.recipes": 'recipes',
333
+ "limit.label.form_templates": 'form templates',
334
+ "limit.label.documents_month": 'monthly documents',
335
+ "limit.label.content_posts_month": 'monthly content posts',
336
+ "limit.label.blog_posts": 'blog posts',
337
+ "limit.reached": 'Você atingiu o limite de {label} do plano {plan}.',
338
+ "banner.overLimit": 'Você excedeu o limite de {label} do seu plano — faça upgrade para continuar crescendo.',
267
339
  "settings.team": "Team",
268
340
  "settings.permissions": "Permissions",
269
341
  "settings.locations": "Locations",
@@ -303,6 +375,10 @@ export const shellTranslations: Record<string, Record<string, string>> = {
303
375
  "app.notFound.goToDashboard": "Go to Dashboard",
304
376
  "app.accessDenied.heading": "Access Denied",
305
377
  "app.accessDenied.message": "You don't have permission to view this page.",
378
+ "shell.accessDenied.title": "Access restricted",
379
+ "shell.accessDenied.message": "You don't have permission to view this page.",
380
+ "organization.workspaces": "Workspaces",
381
+ "organization.onlyWorkspace": "This is your only workspace.",
306
382
  "auth.login.enterCredentials": "Enter your credentials to access your account",
307
383
  "auth.login.failedDefault": "Failed to sign in. Please try again.",
308
384
  "auth.login.failedWithProvider": "Failed to sign in with {{provider}}.",
@@ -342,7 +418,73 @@ export const shellTranslations: Record<string, Record<string, string>> = {
342
418
  "chat.defaultTitle": "Assistant",
343
419
  "chat.tryAsking": "Try asking",
344
420
  "chat.fab.tryIt": "Try it",
345
- "chat.messagePlaceholder": "Message...",
421
+ "chat.fab.dismiss": "Don't show suggestions here",
422
+ "chat.fab.open": "Open assistant",
423
+ "chat.fab.close": "Close assistant",
424
+ "chat.messagePlaceholder": "How can I help?",
425
+ "chat.send": "Send message",
426
+ "chat.notConfigured": "Assistant not configured — set chat.apiEndpoint to enable conversations.",
427
+ "chat.unavailable": "Assistant unavailable",
428
+ "chat.greeting": "How can I help?",
429
+ "chat.greetingNamed": "Hi {{name}}, how can I help?",
430
+ "chat.greetingHint": "Ask in plain words, or tap the mic and just say it.",
431
+ "chat.status.ready": "Ready",
432
+ "chat.status.working": "Working on it...",
433
+ "chat.status.offline": "Not connected",
434
+ "chat.jumpToLatest": "Latest",
435
+ "chat.confirmAction.title": "Confirm this action?",
436
+ "chat.confirmAction.confirm": "Confirm",
437
+ "chat.confirmAction.cancel": "Cancel",
438
+ "chat.confirmAction.always": "Always allow",
439
+ "chat.confirmAction.alwaysSession": "Allow this session",
440
+ "chat.confirmAction.alwaysHint": "Stop asking before \"{{label}}\"",
441
+ "chat.confirmAction.autoApproved": "auto",
442
+ "chat.confirmAction.autoApprovedHint": "Ran without asking — you allowed this action",
443
+ "chat.confirmAction.blocked": "Respond to the confirmation above first",
444
+ "chat.confirmAction.showAll": "Add more fields ({{count}})",
445
+ "chat.confirmAction.showLess": "Show fewer fields",
446
+ // What a write ACTUALLY does, in the operator's words. The confirmation card
447
+ // looks up `chat.tool.<toolName>`; a tool with no entry falls back to its
448
+ // humanized name, never to the model-facing description.
449
+ "chat.tool.createAppointment": "Book an appointment",
450
+ "chat.tool.createRecord": "Create record",
451
+ "chat.tool.updateRecord": "Update record",
452
+ "chat.tool.deleteRecord": "Delete record",
453
+ "chat.tool.createOrder": "Create order",
454
+ "chat.tool.createInvoice": "Create invoice",
455
+ "chat.tool.markPaymentReceived": "Mark payment as received",
456
+ "chat.tool.createCampaign": "Create campaign",
457
+ "chat.tool.sendMessage": "Send message",
458
+ "chat.tool.seatGuests": "Seat guests",
459
+ "chat.tool.toggleMenuItemAvailability": "Change item availability",
460
+ "chat.autoApprovals.title": "Auto-approved actions",
461
+ "chat.autoApprovals.revoke": "Ask me again",
462
+ "chat.autoApprovals.revokeAll": "Ask for everything",
463
+ "chat.suggestions.show": "Show suggestions",
464
+ "chat.suggestions.hide": "Hide suggestions",
465
+ "chat.voice.start": "Speak",
466
+ "chat.voice.stop": "Stop recording",
467
+ "chat.voice.listening": "Listening — speak now",
468
+ "chat.voice.transcribing": "Transcribing...",
469
+ "chat.voice.denied": "Microphone blocked. Allow access in your browser settings.",
470
+ "chat.voice.network": "Could not reach the transcription service.",
471
+ "chat.voice.failed": "Could not hear that — try again.",
472
+ "chat.voice.speakOn": "Speak replies out loud",
473
+ "chat.voice.speakOff": "Mute spoken replies",
474
+ "chat.signingIn": "One moment — still confirming your session.",
475
+ "chat.history": "Previous conversations",
476
+ "chat.history.search": "Search conversations",
477
+ "chat.history.empty": "No conversations found.",
478
+ "chat.history.today": "Today",
479
+ "chat.history.yesterday": "Yesterday",
480
+ "chat.history.week": "Last 7 days",
481
+ "chat.history.older": "Earlier",
482
+ "chat.newConversation": "New conversation",
483
+ "chat.untitledConversation": "Untitled conversation",
484
+ "chat.recentConversations": "Recent",
485
+ "chat.backToConversations": "Back to conversations",
486
+ "chat.renameConversation": "Rename",
487
+ "chat.saveTitle": "Save title",
346
488
  "chat.toolsAvailable": "{{count}} tools available",
347
489
  "chat.suggestion.dashboard.kpi-summary.0": "How is my business doing today?",
348
490
  "chat.suggestion.dashboard.kpi-summary.1": "What's my revenue today?",
@@ -586,6 +728,38 @@ export const shellTranslations: Record<string, Record<string, string>> = {
586
728
  "crud.archetype.activity.description": "View a chronological log of all actions, changes, and events related to this person.",
587
729
  "crud.archetype.documents.title": "Documents",
588
730
  "crud.archetype.documents.description": "Attach and manage files, contracts, certifications, and other documents for this person.",
731
+ "crud.archetype.addresses.add": "Add address",
732
+ "crud.archetype.addresses.addTitle": "New address",
733
+ "crud.archetype.addresses.editTitle": "Edit address",
734
+ "crud.archetype.addresses.formDescription": "Postal code, street and city are required; everything else is optional.",
735
+ "crud.archetype.addresses.emptyTitle": "No address on file",
736
+ "crud.archetype.addresses.emptyDescription": "Add where this person is delivered to, collected from, or billed at.",
737
+ "crud.archetype.addresses.fallbackLabel": "Address",
738
+ "crud.archetype.addresses.labelPlaceholder": "Home, Work…",
739
+ "crud.archetype.addresses.default": "Default",
740
+ "crud.archetype.addresses.setDefault": "Use as the default address",
741
+ "crud.archetype.addresses.kind.both": "Shipping and billing",
742
+ "crud.archetype.addresses.kind.shipping": "Shipping",
743
+ "crud.archetype.addresses.kind.billing": "Billing",
744
+ "crud.archetype.addresses.field.label": "Label",
745
+ "crud.archetype.addresses.field.kind": "Use",
746
+ "crud.archetype.addresses.field.postalCode": "Postal code",
747
+ "crud.archetype.addresses.field.street": "Street",
748
+ "crud.archetype.addresses.field.number": "Number",
749
+ "crud.archetype.addresses.field.complement": "Complement",
750
+ "crud.archetype.addresses.field.district": "District",
751
+ "crud.archetype.addresses.field.city": "City",
752
+ "crud.archetype.addresses.field.state": "State",
753
+ "crud.archetype.addresses.field.recipient": "Recipient",
754
+ "crud.archetype.addresses.field.phone": "Phone",
755
+ "crud.archetype.addresses.created": "Address added",
756
+ "crud.archetype.addresses.updated": "Address updated",
757
+ "crud.archetype.addresses.deleted": "Address removed",
758
+ "crud.archetype.addresses.deleteTitle": "Remove this address?",
759
+ "crud.archetype.addresses.loadFailed": "Could not load the addresses.",
760
+ "crud.archetype.addresses.saveFailed": "Could not save the address.",
761
+ "crud.archetype.addresses.deleteFailed": "Could not remove the address.",
762
+ "crud.archetype.addresses.noTenant": "No active organization — reload the page and try again.",
589
763
  "crud.archetype.schedule.title": "Schedule",
590
764
  "crud.archetype.schedule.description": "View and manage appointments, shifts, and availability for this person.",
591
765
  "crud.archetype.inventory.title": "Inventory & Stock",
@@ -858,6 +1032,17 @@ export const shellTranslations: Record<string, Record<string, string>> = {
858
1032
  "billing.title": "Faturamento",
859
1033
  "billing.subtitle": "Gerencie sua assinatura e faturamento.",
860
1034
  "billing.currentPlan": "Plano Atual",
1035
+ "billing.subscription.title": "Assinatura",
1036
+ "billing.subscription.subtitle": "Gerencie seu plano e desbloqueie mais recursos.",
1037
+ "billing.changeToPlan": "Mudar para este plano",
1038
+ "billing.featureMatrix": "Comparativo de recursos",
1039
+ "billing.changePlanConfirmTitle": "Mudar de plano?",
1040
+ "billing.changePlanConfirmBody": "Você está mudando para o plano {{plan}}.",
1041
+ "billing.changePlanConfirm": "Mudar de plano",
1042
+ "billing.planChanged": "Agora você está no plano {{plan}}.",
1043
+ "billing.planChangeFailed": "Não foi possível mudar seu plano. Tente novamente.",
1044
+ "billing.noPlans": "Nenhum plano configurado.",
1045
+ "billing.pro": "Pro",
861
1046
  "billing.upgrade": "Fazer Upgrade",
862
1047
  "billing.downgrade": "Fazer Downgrade",
863
1048
  "billing.monthly": "Mensal",
@@ -915,11 +1100,69 @@ export const shellTranslations: Record<string, Record<string, string>> = {
915
1100
  "organization.onboarding.createWorkspace": "Criar Espaço de Trabalho",
916
1101
  "settings.title": "Configurações",
917
1102
  "settings.subtitle": "Gerencie sua conta e preferências da organização.",
1103
+ "settings.backToHome": "Voltar para o início",
1104
+ "settings.navLinks": "Links de configuração",
918
1105
  "settings.general": "Geral",
919
1106
  "settings.properties": "Propriedades",
920
1107
  "settings.profile": "Perfil",
921
1108
  "settings.branding": "Marca",
922
1109
  "settings.security": "Segurança",
1110
+ "settings.subscription": "Assinatura",
1111
+ "upgrade.title": 'Recurso premium',
1112
+ "upgrade.description": 'Este recurso está disponível em um plano superior. Faça upgrade para liberá-lo.',
1113
+ "upgrade.descriptionFeature": 'O recurso {feature} está disponível em um plano superior. Faça upgrade para liberá-lo.',
1114
+ // ContactPicker — busca-ou-cadastra compartilhado.
1115
+ "contactPicker.search": 'Buscar contato...',
1116
+ "contactPicker.newContact": 'Novo contato',
1117
+ "contactPicker.name": 'Nome',
1118
+ "contactPicker.phone": 'Telefone',
1119
+ "contactPicker.emailOptional": 'E-mail (opcional)',
1120
+ "contactPicker.create": 'Cadastrar',
1121
+ "contactPicker.creating": 'Cadastrando...',
1122
+ "contactPicker.cancel": 'Cancelar',
1123
+ "contactPicker.clear": 'Remover contato',
1124
+ "contactPicker.createFailed": 'Não foi possível cadastrar o contato',
1125
+ "contactPicker.addField": 'Adicionar {label}',
1126
+
1127
+ "upgrade.includes": 'Inclui {feature}',
1128
+ "upgrade.cta": 'Ver planos',
1129
+ "upgrade.badgeTooltip": 'Disponível em um plano superior',
1130
+ "upgrade.unlock": 'Desbloqueie {feature}',
1131
+ "upgrade.currentPlan": 'Seu plano: {plan}',
1132
+ "upgrade.recommended": 'Recomendado',
1133
+ "upgrade.ctaUpgrade": 'Fazer upgrade',
1134
+ "upgrade.ctaUpgradeTo": 'Fazer upgrade para {plan}',
1135
+ "upgrade.compareAll": 'Comparar todos os planos',
1136
+ "upgrade.valueGeneric": 'Tudo o que você precisa para crescer — incluso nos planos abaixo.',
1137
+ "upgrade.value.marketing": 'Campanhas, funil e conteúdo para crescer sua base de clientes.',
1138
+ "upgrade.value.reports": 'Relatórios avançados e insights para decidir com mais precisão.',
1139
+ "upgrade.value.fin_reconciliation": 'Concilie pagamentos e mantenha seu fluxo de caixa sob controle.',
1140
+ "upgrade.value.assistant": 'Seu copiloto de operações — pergunte, analise e aja com IA.',
1141
+ "upgrade.feature.assistant": 'Assistente de IA',
1142
+ "billing.unlimited": 'Ilimitado',
1143
+ "billing.upTo": 'Até {count}',
1144
+ "limit.label.clients": 'clientes',
1145
+ "limit.label.users": 'membros da equipe',
1146
+ "limit.label.locations": 'locais',
1147
+ "limit.label.bookings_month": 'agendamentos mensais',
1148
+ "limit.label.leads": 'leads',
1149
+ "limit.label.quotes": 'orçamentos',
1150
+ "limit.label.conversations_month": 'conversas mensais',
1151
+ "limit.label.ai_credits_month": 'créditos de IA por mês',
1152
+ "limit.label.recipes": 'receitas',
1153
+ "limit.label.form_templates": 'modelos de formulário',
1154
+ "limit.label.documents_month": 'documentos mensais',
1155
+ "limit.label.content_posts_month": 'posts de conteúdo mensais',
1156
+ "limit.label.blog_posts": 'posts de blog',
1157
+ "limit.label.products": 'produtos',
1158
+ "limit.label.students": 'alunos',
1159
+ "limit.label.courses": 'cursos',
1160
+ "limit.label.contacts": 'contatos',
1161
+ "limit.label.deals": 'negócios',
1162
+ "limit.label.menu_items": 'itens do cardápio',
1163
+ "limit.label.orders_month": 'pedidos mensais',
1164
+ "limit.label.connected_banks": 'bancos conectados',
1165
+ "limit.label.movements_month": 'movimentações mensais',
923
1166
  "settings.team": "Equipe",
924
1167
  "settings.permissions": "Permissões",
925
1168
  "settings.locations": "Locais",
@@ -952,6 +1195,10 @@ export const shellTranslations: Record<string, Record<string, string>> = {
952
1195
  "app.notFound.goToDashboard": "Ir para o Painel",
953
1196
  "app.accessDenied.heading": "Acesso Negado",
954
1197
  "app.accessDenied.message": "Você não tem permissão para acessar esta página.",
1198
+ "shell.accessDenied.title": "Acesso restrito",
1199
+ "shell.accessDenied.message": "Você não tem permissão para acessar esta página.",
1200
+ "organization.workspaces": "Áreas de trabalho",
1201
+ "organization.onlyWorkspace": "Esta é a sua única área de trabalho.",
955
1202
  "crud.form.requiredIndicator": "*",
956
1203
  "crud.form.createDescription": "Criar um(a) novo(a) {{entity}}.",
957
1204
  "crud.form.editDescription": "Atualizar detalhes de {{entity}}.",
@@ -993,6 +1240,7 @@ export const shellTranslations: Record<string, Record<string, string>> = {
993
1240
  "crud.import.rowNumber": "Linha {{row}}:",
994
1241
  "crud.import.toastSuccess": "{{count}} registros importados",
995
1242
  "crud.import.noConnection": "Sem conexão com o banco de dados. A importação requer uma conexão ativa.",
1243
+ "crud.import.limitExceeded": "Esta importação excede o limite do seu plano. Faça upgrade ou importe menos linhas.",
996
1244
  "crud.export.action": "Exportar",
997
1245
  "crud.export.noData": "Sem dados para exportar.",
998
1246
  "crud.export.toastSuccess": "{{count}} registros exportados",
@@ -1086,7 +1334,70 @@ export const shellTranslations: Record<string, Record<string, string>> = {
1086
1334
  "chat.defaultTitle": "Assistente",
1087
1335
  "chat.tryAsking": "Experimente perguntar",
1088
1336
  "chat.fab.tryIt": "Experimente",
1089
- "chat.messagePlaceholder": "Mensagem...",
1337
+ "chat.fab.dismiss": "Não mostrar sugestões aqui",
1338
+ "chat.fab.open": "Abrir assistente",
1339
+ "chat.fab.close": "Fechar assistente",
1340
+ "chat.messagePlaceholder": "Como posso ajudar?",
1341
+ "chat.send": "Enviar mensagem",
1342
+ "chat.notConfigured": "Assistente não configurado — defina chat.apiEndpoint para habilitar conversas.",
1343
+ "chat.unavailable": "Assistente indisponível",
1344
+ "chat.greeting": "Como posso ajudar?",
1345
+ "chat.greetingNamed": "Oi {{name}}, como posso ajudar?",
1346
+ "chat.greetingHint": "Peça com suas palavras, ou toque no microfone e fale.",
1347
+ "chat.status.ready": "Pronto",
1348
+ "chat.status.working": "Trabalhando nisso...",
1349
+ "chat.status.offline": "Sem conexão",
1350
+ "chat.jumpToLatest": "Ir para o fim",
1351
+ "chat.confirmAction.title": "Confirmar esta ação?",
1352
+ "chat.confirmAction.confirm": "Confirmar",
1353
+ "chat.confirmAction.cancel": "Cancelar",
1354
+ "chat.confirmAction.always": "Sempre permitir",
1355
+ "chat.confirmAction.alwaysSession": "Permitir nesta sessão",
1356
+ "chat.confirmAction.alwaysHint": "Parar de perguntar antes de \"{{label}}\"",
1357
+ "chat.confirmAction.autoApproved": "auto",
1358
+ "chat.confirmAction.autoApprovedHint": "Executado sem perguntar — você liberou esta ação",
1359
+ "chat.confirmAction.blocked": "Responda a confirmação acima primeiro",
1360
+ "chat.confirmAction.showAll": "Preencher mais campos ({{count}})",
1361
+ "chat.confirmAction.showLess": "Mostrar menos campos",
1362
+ "chat.tool.createAppointment": "Marcar horário",
1363
+ "chat.tool.createRecord": "Criar registro",
1364
+ "chat.tool.updateRecord": "Atualizar registro",
1365
+ "chat.tool.deleteRecord": "Excluir registro",
1366
+ "chat.tool.createOrder": "Criar pedido",
1367
+ "chat.tool.createInvoice": "Emitir cobrança",
1368
+ "chat.tool.markPaymentReceived": "Marcar pagamento como recebido",
1369
+ "chat.tool.createCampaign": "Criar campanha",
1370
+ "chat.tool.sendMessage": "Enviar mensagem",
1371
+ "chat.tool.seatGuests": "Acomodar clientes",
1372
+ "chat.tool.toggleMenuItemAvailability": "Alterar disponibilidade do item",
1373
+ "chat.autoApprovals.title": "Ações liberadas",
1374
+ "chat.autoApprovals.revoke": "Voltar a perguntar",
1375
+ "chat.autoApprovals.revokeAll": "Perguntar sempre",
1376
+ "chat.suggestions.show": "Mostrar sugestões",
1377
+ "chat.suggestions.hide": "Ocultar sugestões",
1378
+ "chat.voice.start": "Falar",
1379
+ "chat.voice.stop": "Parar gravação",
1380
+ "chat.voice.listening": "Ouvindo — pode falar",
1381
+ "chat.voice.transcribing": "Transcrevendo...",
1382
+ "chat.voice.denied": "Microfone bloqueado. Libere o acesso nas configurações do navegador.",
1383
+ "chat.voice.network": "Não consegui falar com o serviço de transcrição.",
1384
+ "chat.voice.failed": "Não consegui entender — tente de novo.",
1385
+ "chat.voice.speakOn": "Responder em voz alta",
1386
+ "chat.voice.speakOff": "Silenciar respostas faladas",
1387
+ "chat.signingIn": "Um instante — ainda estou confirmando sua sessão.",
1388
+ "chat.history": "Conversas anteriores",
1389
+ "chat.history.search": "Buscar conversas",
1390
+ "chat.history.empty": "Nenhuma conversa encontrada.",
1391
+ "chat.history.today": "Hoje",
1392
+ "chat.history.yesterday": "Ontem",
1393
+ "chat.history.week": "Últimos 7 dias",
1394
+ "chat.history.older": "Mais antigas",
1395
+ "chat.newConversation": "Nova conversa",
1396
+ "chat.untitledConversation": "Conversa sem título",
1397
+ "chat.recentConversations": "Recentes",
1398
+ "chat.backToConversations": "Voltar para as conversas",
1399
+ "chat.renameConversation": "Renomear",
1400
+ "chat.saveTitle": "Salvar título",
1090
1401
  "chat.toolsAvailable": "{{count}} ferramentas disponíveis",
1091
1402
  "chat.suggestion.dashboard.kpi-summary.0": "Como está meu negócio hoje?",
1092
1403
  "chat.suggestion.dashboard.kpi-summary.1": "Qual o faturamento de hoje?",
@@ -1286,6 +1597,38 @@ export const shellTranslations: Record<string, Record<string, string>> = {
1286
1597
  "crud.archetype.activity.description": "Veja um registro cronológico de todas as ações, alterações e eventos relacionados a esta pessoa.",
1287
1598
  "crud.archetype.documents.title": "Documentos",
1288
1599
  "crud.archetype.documents.description": "Anexe e gerencie arquivos, contratos, certificações e outros documentos desta pessoa.",
1600
+ "crud.archetype.addresses.add": "Adicionar endereço",
1601
+ "crud.archetype.addresses.addTitle": "Novo endereço",
1602
+ "crud.archetype.addresses.editTitle": "Editar endereço",
1603
+ "crud.archetype.addresses.formDescription": "CEP, rua e cidade são obrigatórios; o resto é opcional.",
1604
+ "crud.archetype.addresses.emptyTitle": "Nenhum endereço cadastrado",
1605
+ "crud.archetype.addresses.emptyDescription": "Cadastre onde esta pessoa recebe entregas, é coletada ou é cobrada.",
1606
+ "crud.archetype.addresses.fallbackLabel": "Endereço",
1607
+ "crud.archetype.addresses.labelPlaceholder": "Casa, Trabalho…",
1608
+ "crud.archetype.addresses.default": "Padrão",
1609
+ "crud.archetype.addresses.setDefault": "Usar como endereço padrão",
1610
+ "crud.archetype.addresses.kind.both": "Entrega e cobrança",
1611
+ "crud.archetype.addresses.kind.shipping": "Entrega",
1612
+ "crud.archetype.addresses.kind.billing": "Cobrança",
1613
+ "crud.archetype.addresses.field.label": "Identificação",
1614
+ "crud.archetype.addresses.field.kind": "Uso",
1615
+ "crud.archetype.addresses.field.postalCode": "CEP",
1616
+ "crud.archetype.addresses.field.street": "Rua",
1617
+ "crud.archetype.addresses.field.number": "Número",
1618
+ "crud.archetype.addresses.field.complement": "Complemento",
1619
+ "crud.archetype.addresses.field.district": "Bairro",
1620
+ "crud.archetype.addresses.field.city": "Cidade",
1621
+ "crud.archetype.addresses.field.state": "UF",
1622
+ "crud.archetype.addresses.field.recipient": "Quem recebe",
1623
+ "crud.archetype.addresses.field.phone": "Telefone",
1624
+ "crud.archetype.addresses.created": "Endereço adicionado",
1625
+ "crud.archetype.addresses.updated": "Endereço atualizado",
1626
+ "crud.archetype.addresses.deleted": "Endereço removido",
1627
+ "crud.archetype.addresses.deleteTitle": "Remover este endereço?",
1628
+ "crud.archetype.addresses.loadFailed": "Não foi possível carregar os endereços.",
1629
+ "crud.archetype.addresses.saveFailed": "Não foi possível salvar o endereço.",
1630
+ "crud.archetype.addresses.deleteFailed": "Não foi possível remover o endereço.",
1631
+ "crud.archetype.addresses.noTenant": "Nenhuma organização ativa — recarregue a página e tente de novo.",
1289
1632
  "crud.archetype.schedule.title": "Agenda",
1290
1633
  "crud.archetype.schedule.description": "Visualize e gerencie compromissos, turnos e disponibilidade desta pessoa.",
1291
1634
  "crud.archetype.inventory.title": "Estoque",
package/src/index.ts CHANGED
@@ -1,28 +1,44 @@
1
1
  // Types
2
2
  export type { EntityArchetype, BaseEntity, PersonEntity, ProductEntity, ServiceEntity, OrderEntity, TransactionEntity, LocationEntity, ScheduleEntity, CategoryEntity } from './types/entities'
3
- export type { EntityDef, FieldDef, FieldType, FieldRelation, FieldGroup, DetailTab, FormLayout, ComputedFieldValue } from './types/crud'
4
- export type { PluginManifest, PluginScope, PluginStatus, ResolvedPluginManifest, PluginRuntime, PluginRuntimeContext, PluginWidgetZone, PluginWidgetDefinition, PluginNavigationEntry, PluginSettingsTab, PluginRouteDefinition, PluginAITool, PluginRegistryDef, PluginMigration, PluginDiagnostic, VerticalId, ScaffoldType, TenantPluginBinding, DashboardWidgetDef, DashboardWidgetKind, DashboardSurface, DashboardLayoutConfig, ResolvedDashboardWidget } from './types/plugins'
3
+ export type { EntityDef, EntityImageConfig, FieldDef, FieldType, FieldRelation, FieldGroup, DetailTab, FormLayout, ComputedFieldValue } from './types/crud'
4
+ export type { PluginManifest, PluginScope, PluginStatus, ResolvedPluginManifest, PluginRuntime, PluginRuntimeContext, PluginWidgetZone, PluginWidgetDefinition, PluginNavigationEntry, PluginSettingsTab, PluginRouteDefinition, PluginAITool, AIToolMode, AIToolExecution, AgentRpcDeclaration, AIToolParameterProperty, AIToolParameters, AIToolSuggestion, PluginRegistryDef, PluginMigration, PluginDiagnostic, VerticalId, ScaffoldType, TenantPluginBinding, DashboardWidgetDef, DashboardWidgetKind, DashboardSurface, DashboardLayoutConfig, ResolvedDashboardWidget } from './types/plugins'
5
5
  export { WidgetZone } from './types/plugins'
6
6
  export type { AuthAdapter, AuthUser, AuthSession, AuthProvider } from './types/auth'
7
- export type { OrgAdapter, Organization, OrgMember, OrgMembership, Location, Invite, CreateOrgOptions } from './types/org'
7
+ export type { OrgAdapter, Organization, OrgMember, OrgMembership, TeamPerson, Location, Invite, CreateOrgOptions } from './types/org'
8
8
  export type { PermissionsConfig, FeatureDeclaration, PermissionAction, PermissionProfile, SystemPermission } from './types/permissions'
9
- export type { Plan, BillingConfig } from './types/billing'
9
+ export type { Plan, BillingConfig, BillingCheckoutFn } from './types/billing'
10
+ export type { PlanEntitlements, LimitDeclaration } from './types/entitlements'
10
11
  export type { ThemeBrand, ThemeRadius, ThemeMode } from './types/theme'
11
12
  export type { LocaleConfig } from './types/i18n'
12
13
 
13
14
  // Data providers
14
15
  export { createSupabaseProvider, setGlobalSupabaseClient, getSupabaseClientOptional } from './data/supabase'
16
+ export { countByTenant, invalidateCount } from './data/count'
17
+ export type { CountByTenantOptions } from './data/count'
15
18
  export { getFayzCloudClient, FAYZ_CLOUD_URL, FAYZ_CLOUD_PUBLISHABLE_KEY } from './data/cloud'
16
19
  export { createFayzApiProvider } from './data/platform-api'
17
20
  export { createMockProvider } from './data/mock'
18
21
  export { createArchetypeProvider } from './data/archetype'
19
22
  export { withCache } from './data/cached'
20
23
  export { resolveDataProvider } from './data/resolve'
24
+ export {
25
+ DATA_CHANGED_EVENT,
26
+ emitDataChanged,
27
+ matchesDataChange,
28
+ useDataChanged,
29
+ } from './data/refresh'
30
+ export type { DataChangedPayload, DataChangedMatch } from './data/refresh'
21
31
  export { createSafeDataProvider } from './plugin/createSafeDataProvider'
22
32
  export {
23
33
  COUNTRIES, DEFAULT_COUNTRY, getCountry, unmaskPhone, maskPhone, maskDigitCount,
24
34
  } from './phone'
25
35
  export type { CountryDef } from './phone'
36
+ export {
37
+ normalizePostalCode, formatPostalCode, isValidPostalCode,
38
+ createViaCepProvider, setPostalLookupProvider, getPostalLookupProvider,
39
+ lookupPostalCode, clearPostalCache,
40
+ } from './address'
41
+ export type { PostalAddress, PostalLookupProvider } from './address'
26
42
  export type {
27
43
  PaymentProvider, PaymentMethod, ChargeStatus, CreateChargeInput, PixCharge,
28
44
  } from './types/payment'
@@ -87,6 +103,17 @@ export type { EventBus, EventHandler } from './events'
87
103
  export { registerEntity, getEntityByKey, getAllEntities, clearEntityRegistry, deriveEntityKey } from './entity/registry'
88
104
  export type { RegisteredEntity } from './entity/registry'
89
105
 
106
+ // Global search (command palette + agent lookups share one engine)
107
+ export {
108
+ searchEverything, clearSearchCache, setSearchIndexAvailable, isSearchIndexAvailable,
109
+ MIN_QUERY_LENGTH, foldText, foldWithMap, digitsOf, normalizeQuery, similarity,
110
+ scoreCandidate, highlightRanges,
111
+ } from './search'
112
+ export type {
113
+ SearchTarget, SearchHit, SearchGroup, SearchPath, SearchOptions, GlobalSearchResult,
114
+ NormalizedQuery, RankCandidate,
115
+ } from './search'
116
+
90
117
  // Uniform registry (component / block / page / metric / scaffold / plugin)
91
118
  export {
92
119
  Registry,
@@ -148,7 +175,13 @@ export type {
148
175
  PageManifest,
149
176
  PluginRef,
150
177
  ManifestMigration,
178
+ AgentContract,
179
+ AgentDomainKnowledge,
180
+ EntityContract,
181
+ AIToolContract,
182
+ RpcContract,
151
183
  } from './manifest'
184
+ export { serializeManifest, computeContractHash, serializeManifestWithHash } from './manifest/serialize'
152
185
  export { default as appManifestSchema } from './manifest/app-manifest.schema.json'
153
186
 
154
187
  // App entry points (manifest → running app)