@agent-native/core 0.187.0 → 0.187.1-nightly-20260924193134

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 (46) hide show
  1. package/dist/agent/engine/builder-engine.js +11 -0
  2. package/dist/agent/engine/types.d.ts +1 -0
  3. package/dist/agent/production-agent.d.ts +2 -0
  4. package/dist/agent/production-agent.js +28 -1
  5. package/dist/agent/run-loop-with-resume.js +6 -0
  6. package/dist/automation/index.d.ts +1 -1
  7. package/dist/client/error-format.js +4 -4
  8. package/dist/client/settings/UsageSection.js +105 -17
  9. package/dist/collab/routes.d.ts +1 -1
  10. package/dist/feature-flags/index.d.ts +1 -1
  11. package/dist/feature-flags/index.js +1 -1
  12. package/dist/feature-flags/registry.d.ts +1 -0
  13. package/dist/feature-flags/registry.js +5 -0
  14. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +1 -1
  17. package/dist/integrations/webhook-handler.js +4 -1
  18. package/dist/jobs/background-automation-runner.js +6 -1
  19. package/dist/localization/core-messages/ar-SA.js +9 -1
  20. package/dist/localization/core-messages/de-DE.js +9 -1
  21. package/dist/localization/core-messages/en-US.d.ts +9 -1
  22. package/dist/localization/core-messages/en-US.js +9 -1
  23. package/dist/localization/core-messages/es-ES.js +9 -1
  24. package/dist/localization/core-messages/fr-FR.js +9 -1
  25. package/dist/localization/core-messages/hi-IN.js +9 -1
  26. package/dist/localization/core-messages/ja-JP.js +9 -1
  27. package/dist/localization/core-messages/ko-KR.js +9 -1
  28. package/dist/localization/core-messages/pt-BR.js +9 -1
  29. package/dist/localization/core-messages/zh-CN.js +9 -1
  30. package/dist/localization/core-messages/zh-TW.js +9 -1
  31. package/dist/localization/core-messages.d.ts +9 -1
  32. package/dist/notifications/routes.d.ts +3 -3
  33. package/dist/observability/routes.d.ts +3 -3
  34. package/dist/org/handlers.d.ts +1 -1
  35. package/dist/secrets/routes.d.ts +9 -9
  36. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  37. package/dist/server/agent-engine-ollama-models-route.d.ts +1 -1
  38. package/dist/server/agent-teams.js +4 -1
  39. package/dist/server/core-routes-plugin.d.ts +1 -1
  40. package/dist/server/core-routes-plugin.js +2 -0
  41. package/dist/usage/actions/get-usage-metrics.js +4 -1
  42. package/dist/usage/metrics-store.d.ts +19 -0
  43. package/dist/usage/metrics-store.js +106 -14
  44. package/dist/usage/store.d.ts +7 -2
  45. package/dist/usage/store.js +25 -4
  46. package/package.json +3 -3
@@ -417,7 +417,7 @@ declare const messages: {
417
417
  readonly "errorMessages.providerRateLimit": "The model provider is rate-limiting this chat right now. Wait a moment, then retry.";
418
418
  readonly "errorMessages.providerTransientRejection": "The AI provider temporarily refused this request. This usually clears within a minute — retry.";
419
419
  readonly "errorMessages.startNewChat": "Start new chat";
420
- readonly "errorMessages.upgradeAtBuilder": "Upgrade at Builder.io";
420
+ readonly "errorMessages.addCreditsInBuilder": "Add credits in Builder";
421
421
  readonly "feedback.inaccurate": "Inaccurate";
422
422
  readonly "feedback.keyboardHint": "{{shortcut}} Enter to send";
423
423
  readonly "feedback.notHelpful": "Not helpful";
@@ -725,5 +725,13 @@ declare const messages: {
725
725
  readonly "settings.emailChangeError": "Could not send confirmation.";
726
726
  readonly "settings.emailNewLabel": "New email";
727
727
  readonly "settings.emailNewPlaceholder": "Enter new email";
728
+ readonly "usage.builderCredits": "Builder credits";
729
+ readonly "usage.estimatedBuilderCredits": "~{{amount}} estimated credits";
730
+ readonly "usage.otherUsdSpend": "{{amount}} other USD";
731
+ readonly "usage.noBuilderCredits": "0 Builder credits";
732
+ readonly "usage.otherUnclassifiedSpend": "Other or unclassified USD spend";
733
+ readonly "usage.providerSpendDetail": "Provider or older calls outside Builder billing";
734
+ readonly "usage.providerSpendToday": "Other or unclassified usage: {{amount}} today";
735
+ readonly "usage.driverCreditsAndUsd": "Builder credits / USD";
728
736
  };
729
737
  export default messages;
@@ -417,7 +417,7 @@ const messages = {
417
417
  "errorMessages.providerRateLimit": "The model provider is rate-limiting this chat right now. Wait a moment, then retry.",
418
418
  "errorMessages.providerTransientRejection": "The AI provider temporarily refused this request. This usually clears within a minute — retry.",
419
419
  "errorMessages.startNewChat": "Start new chat",
420
- "errorMessages.upgradeAtBuilder": "Upgrade at Builder.io",
420
+ "errorMessages.addCreditsInBuilder": "Add credits in Builder",
421
421
  "feedback.inaccurate": "Inaccurate",
422
422
  "feedback.keyboardHint": "{{shortcut}} Enter to send",
423
423
  "feedback.notHelpful": "Not helpful",
@@ -725,5 +725,13 @@ const messages = {
725
725
  "settings.emailChangeError": "Could not send confirmation.",
726
726
  "settings.emailNewLabel": "New email",
727
727
  "settings.emailNewPlaceholder": "Enter new email",
728
+ "usage.builderCredits": "Builder credits",
729
+ "usage.estimatedBuilderCredits": "~{{amount}} estimated credits",
730
+ "usage.otherUsdSpend": "{{amount}} other USD",
731
+ "usage.noBuilderCredits": "0 Builder credits",
732
+ "usage.otherUnclassifiedSpend": "Other or unclassified USD spend",
733
+ "usage.providerSpendDetail": "Provider or older calls outside Builder billing",
734
+ "usage.providerSpendToday": "Other or unclassified usage: {{amount}} today",
735
+ "usage.driverCreditsAndUsd": "Builder credits / USD",
728
736
  };
729
737
  export default messages;
@@ -602,7 +602,7 @@ const messages = {
602
602
  "errorMessages.providerRateLimit": "El proveedor del modelo está limitando temporalmente este chat. Espera un momento y vuelve a intentarlo.",
603
603
  "errorMessages.providerTransientRejection": "El proveedor de IA rechazó temporalmente esta solicitud. Esto suele resolverse en menos de un minuto: vuelve a intentarlo.",
604
604
  "errorMessages.startNewChat": "Iniciar un chat nuevo",
605
- "errorMessages.upgradeAtBuilder": "Mejorar el plan en Builder.io",
605
+ "errorMessages.addCreditsInBuilder": "Añadir créditos en Builder",
606
606
  "feedback.inaccurate": "Impreciso",
607
607
  "feedback.keyboardHint": "{{shortcut}} Enter para enviar",
608
608
  "feedback.notHelpful": "Poco útil",
@@ -732,5 +732,13 @@ const messages = {
732
732
  "settings.emailChangeError": "No se pudo enviar la confirmación.",
733
733
  "settings.emailNewLabel": "Correo electrónico nuevo",
734
734
  "settings.emailNewPlaceholder": "Introduce un correo nuevo",
735
+ "usage.builderCredits": "Créditos de Builder",
736
+ "usage.estimatedBuilderCredits": "~{{amount}} créditos estimados",
737
+ "usage.otherUsdSpend": "{{amount}} USD adicional",
738
+ "usage.noBuilderCredits": "0 créditos de Builder",
739
+ "usage.otherUnclassifiedSpend": "Gasto en USD adicional o sin clasificar",
740
+ "usage.providerSpendDetail": "Uso de proveedores o llamadas antiguas fuera de la facturación de Builder",
741
+ "usage.providerSpendToday": "Uso adicional o sin clasificar hoy: {{amount}}",
742
+ "usage.driverCreditsAndUsd": "Créditos de Builder / USD",
735
743
  };
736
744
  export default messages;
@@ -602,7 +602,7 @@ const messages = {
602
602
  "errorMessages.providerRateLimit": "Le fournisseur du modèle limite temporairement cette discussion. Patientez un instant, puis réessayez.",
603
603
  "errorMessages.providerTransientRejection": "Le fournisseur d'IA a temporairement refusé cette demande. Cela se résout généralement en moins d'une minute : réessayez.",
604
604
  "errorMessages.startNewChat": "Démarrer une nouvelle discussion",
605
- "errorMessages.upgradeAtBuilder": "Mettre à niveau sur Builder.io",
605
+ "errorMessages.addCreditsInBuilder": "Ajouter des crédits dans Builder",
606
606
  "feedback.inaccurate": "Inexact",
607
607
  "feedback.keyboardHint": "{{shortcut}} Entrée pour envoyer",
608
608
  "feedback.notHelpful": "Peu utile",
@@ -732,5 +732,13 @@ const messages = {
732
732
  "settings.emailChangeError": "Impossible d’envoyer la confirmation.",
733
733
  "settings.emailNewLabel": "Nouvelle adresse e-mail",
734
734
  "settings.emailNewPlaceholder": "Saisissez une nouvelle adresse e-mail",
735
+ "usage.builderCredits": "Crédits Builder",
736
+ "usage.estimatedBuilderCredits": "~{{amount}} crédits estimés",
737
+ "usage.otherUsdSpend": "{{amount}} USD supplémentaires",
738
+ "usage.noBuilderCredits": "0 crédit Builder",
739
+ "usage.otherUnclassifiedSpend": "Dépenses USD autres ou non classées",
740
+ "usage.providerSpendDetail": "Utilisation du fournisseur ou anciens appels hors facturation Builder",
741
+ "usage.providerSpendToday": "Autre utilisation ou non classée aujourd’hui : {{amount}}",
742
+ "usage.driverCreditsAndUsd": "Crédits Builder / USD",
735
743
  };
736
744
  export default messages;
@@ -417,7 +417,7 @@ const messages = {
417
417
  "errorMessages.providerRateLimit": "मॉडल प्रदाता अभी इस चैट की अनुरोध दर सीमित कर रहा है। कुछ देर रुकें, फिर से प्रयास करें।",
418
418
  "errorMessages.providerTransientRejection": "AI प्रदाता ने इस अनुरोध को अस्थायी रूप से अस्वीकार कर दिया। यह आमतौर पर एक मिनट के भीतर ठीक हो जाता है — फिर से प्रयास करें।",
419
419
  "errorMessages.startNewChat": "नई चैट शुरू करें",
420
- "errorMessages.upgradeAtBuilder": "Builder.io पर अपग्रेड करें",
420
+ "errorMessages.addCreditsInBuilder": "Builder में क्रेडिट जोड़ें",
421
421
  "feedback.inaccurate": "गलत जानकारी",
422
422
  "feedback.keyboardHint": "भेजने के लिए {{shortcut}} Enter",
423
423
  "feedback.notHelpful": "उपयोगी नहीं",
@@ -725,5 +725,13 @@ const messages = {
725
725
  "settings.emailChangeError": "पुष्टिकरण नहीं भेजा जा सका।",
726
726
  "settings.emailNewLabel": "नया ईमेल",
727
727
  "settings.emailNewPlaceholder": "नया ईमेल दर्ज करें",
728
+ "usage.builderCredits": "Builder क्रेडिट",
729
+ "usage.estimatedBuilderCredits": "~{{amount}} अनुमानित क्रेडिट",
730
+ "usage.otherUsdSpend": "{{amount}} अन्य USD",
731
+ "usage.noBuilderCredits": "0 Builder क्रेडिट",
732
+ "usage.otherUnclassifiedSpend": "अन्य या अवर्गीकृत USD खर्च",
733
+ "usage.providerSpendDetail": "Builder बिलिंग से बाहर प्रदाता या पुराने कॉल",
734
+ "usage.providerSpendToday": "आज का अन्य या अवर्गीकृत उपयोग: {{amount}}",
735
+ "usage.driverCreditsAndUsd": "Builder क्रेडिट / USD",
728
736
  };
729
737
  export default messages;
@@ -415,7 +415,7 @@ const messages = {
415
415
  "errorMessages.providerRateLimit": "現在、モデルプロバイダーがこのチャットのリクエスト数を制限しています。少し待ってから再試行してください。",
416
416
  "errorMessages.providerTransientRejection": "AIプロバイダーがこのリクエストを一時的に拒否しました。通常は1分以内に解消するので、再試行してください。",
417
417
  "errorMessages.startNewChat": "新しいチャットを開始",
418
- "errorMessages.upgradeAtBuilder": "Builder.io でアップグレード",
418
+ "errorMessages.addCreditsInBuilder": "Builderでクレジットを追加",
419
419
  "feedback.inaccurate": "不正確",
420
420
  "feedback.keyboardHint": "{{shortcut}} Enter で送信",
421
421
  "feedback.notHelpful": "役に立たない",
@@ -718,5 +718,13 @@ const messages = {
718
718
  "settings.emailChangeError": "確認メールを送信できませんでした。",
719
719
  "settings.emailNewLabel": "新しいメールアドレス",
720
720
  "settings.emailNewPlaceholder": "新しいメールアドレスを入力",
721
+ "usage.builderCredits": "Builder クレジット",
722
+ "usage.estimatedBuilderCredits": "~{{amount}} 推定クレジット",
723
+ "usage.otherUsdSpend": "{{amount}} その他の USD",
724
+ "usage.noBuilderCredits": "Builder クレジット 0",
725
+ "usage.otherUnclassifiedSpend": "その他または未分類の USD 利用額",
726
+ "usage.providerSpendDetail": "Builder 請求対象外のプロバイダー利用または過去の呼び出し",
727
+ "usage.providerSpendToday": "本日のその他または未分類の利用額: {{amount}}",
728
+ "usage.driverCreditsAndUsd": "Builder クレジット / USD",
721
729
  };
722
730
  export default messages;
@@ -415,7 +415,7 @@ const messages = {
415
415
  "errorMessages.providerRateLimit": "현재 모델 제공업체가 이 채팅의 요청 속도를 제한하고 있습니다. 잠시 후 다시 시도하세요.",
416
416
  "errorMessages.providerTransientRejection": "AI 제공업체가 이 요청을 일시적으로 거부했습니다. 보통 1분 이내에 해결되니 다시 시도하세요.",
417
417
  "errorMessages.startNewChat": "새 채팅 시작",
418
- "errorMessages.upgradeAtBuilder": "Builder.io에서 업그레이드",
418
+ "errorMessages.addCreditsInBuilder": "Builder에서 크레딧 추가",
419
419
  "feedback.inaccurate": "부정확함",
420
420
  "feedback.keyboardHint": "보내려면 {{shortcut}} Enter",
421
421
  "feedback.notHelpful": "도움이 되지 않음",
@@ -718,5 +718,13 @@ const messages = {
718
718
  "settings.emailChangeError": "확인 메일을 보내지 못했습니다.",
719
719
  "settings.emailNewLabel": "새 이메일",
720
720
  "settings.emailNewPlaceholder": "새 이메일 입력",
721
+ "usage.builderCredits": "Builder 크레딧",
722
+ "usage.estimatedBuilderCredits": "~{{amount}} 예상 크레딧",
723
+ "usage.otherUsdSpend": "{{amount}} 기타 USD",
724
+ "usage.noBuilderCredits": "Builder 크레딧 0",
725
+ "usage.otherUnclassifiedSpend": "기타 또는 분류되지 않은 USD 사용액",
726
+ "usage.providerSpendDetail": "Builder 청구 외 제공업체 사용 또는 이전 호출",
727
+ "usage.providerSpendToday": "오늘 기타 또는 분류되지 않은 사용량: {{amount}}",
728
+ "usage.driverCreditsAndUsd": "Builder 크레딧 / USD",
721
729
  };
722
730
  export default messages;
@@ -602,7 +602,7 @@ const messages = {
602
602
  "errorMessages.providerRateLimit": "O provedor do modelo está limitando temporariamente este chat. Aguarde um momento e tente novamente.",
603
603
  "errorMessages.providerTransientRejection": "O provedor de IA recusou temporariamente esta solicitação. Isso costuma se resolver em menos de um minuto — tente novamente.",
604
604
  "errorMessages.startNewChat": "Iniciar novo chat",
605
- "errorMessages.upgradeAtBuilder": "Fazer upgrade no Builder.io",
605
+ "errorMessages.addCreditsInBuilder": "Adicionar créditos no Builder",
606
606
  "feedback.inaccurate": "Impreciso",
607
607
  "feedback.keyboardHint": "{{shortcut}} Enter para enviar",
608
608
  "feedback.notHelpful": "Pouco útil",
@@ -732,5 +732,13 @@ const messages = {
732
732
  "settings.emailChangeError": "Não foi possível enviar a confirmação.",
733
733
  "settings.emailNewLabel": "Novo e-mail",
734
734
  "settings.emailNewPlaceholder": "Digite o novo e-mail",
735
+ "usage.builderCredits": "Créditos do Builder",
736
+ "usage.estimatedBuilderCredits": "~{{amount}} créditos estimados",
737
+ "usage.otherUsdSpend": "{{amount}} USD adicional",
738
+ "usage.noBuilderCredits": "0 créditos do Builder",
739
+ "usage.otherUnclassifiedSpend": "Gastos em USD adicionais ou não classificados",
740
+ "usage.providerSpendDetail": "Uso do provedor ou chamadas antigas fora da cobrança do Builder",
741
+ "usage.providerSpendToday": "Uso adicional ou não classificado hoje: {{amount}}",
742
+ "usage.driverCreditsAndUsd": "Créditos do Builder / USD",
735
743
  };
736
744
  export default messages;
@@ -415,7 +415,7 @@ const messages = {
415
415
  "errorMessages.providerRateLimit": "模型提供商目前正在限制此聊天的请求频率。请稍等片刻后重试。",
416
416
  "errorMessages.providerTransientRejection": "AI 提供商暂时拒绝了此请求。这种情况通常在一分钟内自行恢复,请重试。",
417
417
  "errorMessages.startNewChat": "开始新聊天",
418
- "errorMessages.upgradeAtBuilder": "在 Builder.io 升级",
418
+ "errorMessages.addCreditsInBuilder": "在 Builder 中添加积分",
419
419
  "feedback.inaccurate": "不准确",
420
420
  "feedback.keyboardHint": "{{shortcut}} Enter 发送",
421
421
  "feedback.notHelpful": "没有帮助",
@@ -718,5 +718,13 @@ const messages = {
718
718
  "settings.emailChangeError": "无法发送确认邮件。",
719
719
  "settings.emailNewLabel": "新电子邮件",
720
720
  "settings.emailNewPlaceholder": "输入新电子邮件",
721
+ "usage.builderCredits": "Builder 积分",
722
+ "usage.estimatedBuilderCredits": "~{{amount}} 预估积分",
723
+ "usage.otherUsdSpend": "{{amount}} 其他 USD",
724
+ "usage.noBuilderCredits": "Builder 积分 0",
725
+ "usage.otherUnclassifiedSpend": "其他或未分类的 USD 支出",
726
+ "usage.providerSpendDetail": "Builder 计费之外的提供商使用量或旧调用",
727
+ "usage.providerSpendToday": "今日其他或未分类使用量:{{amount}}",
728
+ "usage.driverCreditsAndUsd": "Builder 积分 / USD",
721
729
  };
722
730
  export default messages;
@@ -415,7 +415,7 @@ const messages = {
415
415
  "errorMessages.providerRateLimit": "模型供應商目前正在限制這個聊天的要求頻率。請稍候再試。",
416
416
  "errorMessages.providerTransientRejection": "AI 供應商暫時拒絕了這個請求。這種情況通常會在一分鐘內恢復,請重試。",
417
417
  "errorMessages.startNewChat": "開始新聊天",
418
- "errorMessages.upgradeAtBuilder": "在 Builder.io 升級",
418
+ "errorMessages.addCreditsInBuilder": "在 Builder 中新增點數",
419
419
  "feedback.inaccurate": "不準確",
420
420
  "feedback.keyboardHint": "{{shortcut}} Enter 送出",
421
421
  "feedback.notHelpful": "沒有幫助",
@@ -718,5 +718,13 @@ const messages = {
718
718
  "settings.emailChangeError": "無法傳送確認信。",
719
719
  "settings.emailNewLabel": "新電子郵件",
720
720
  "settings.emailNewPlaceholder": "輸入新電子郵件",
721
+ "usage.builderCredits": "Builder 點數",
722
+ "usage.estimatedBuilderCredits": "~{{amount}} 預估點數",
723
+ "usage.otherUsdSpend": "{{amount}} 其他 USD",
724
+ "usage.noBuilderCredits": "Builder 點數 0",
725
+ "usage.otherUnclassifiedSpend": "其他或未分類的 USD 支出",
726
+ "usage.providerSpendDetail": "Builder 計費以外的供應商使用量或舊呼叫",
727
+ "usage.providerSpendToday": "今日其他或未分類的使用量:{{amount}}",
728
+ "usage.driverCreditsAndUsd": "Builder 點數 / USD",
721
729
  };
722
730
  export default messages;
@@ -419,7 +419,7 @@ export declare const englishAgentChatMessages: {
419
419
  readonly "errorMessages.providerRateLimit": "The model provider is rate-limiting this chat right now. Wait a moment, then retry.";
420
420
  readonly "errorMessages.providerTransientRejection": "The AI provider temporarily refused this request. This usually clears within a minute — retry.";
421
421
  readonly "errorMessages.startNewChat": "Start new chat";
422
- readonly "errorMessages.upgradeAtBuilder": "Upgrade at Builder.io";
422
+ readonly "errorMessages.addCreditsInBuilder": "Add credits in Builder";
423
423
  readonly "feedback.inaccurate": "Inaccurate";
424
424
  readonly "feedback.keyboardHint": "{{shortcut}} Enter to send";
425
425
  readonly "feedback.notHelpful": "Not helpful";
@@ -727,6 +727,14 @@ export declare const englishAgentChatMessages: {
727
727
  readonly "settings.emailChangeError": "Could not send confirmation.";
728
728
  readonly "settings.emailNewLabel": "New email";
729
729
  readonly "settings.emailNewPlaceholder": "Enter new email";
730
+ readonly "usage.builderCredits": "Builder credits";
731
+ readonly "usage.estimatedBuilderCredits": "~{{amount}} estimated credits";
732
+ readonly "usage.otherUsdSpend": "{{amount}} other USD";
733
+ readonly "usage.noBuilderCredits": "0 Builder credits";
734
+ readonly "usage.otherUnclassifiedSpend": "Other or unclassified USD spend";
735
+ readonly "usage.providerSpendDetail": "Provider or older calls outside Builder billing";
736
+ readonly "usage.providerSpendToday": "Other or unclassified usage: {{amount}} today";
737
+ readonly "usage.driverCreditsAndUsd": "Builder credits / USD";
730
738
  };
731
739
  type PluralSuffix = "zero" | "one" | "two" | "few" | "many" | "other";
732
740
  type RequiredAgentChatKey = Exclude<keyof typeof englishAgentChatMessages, `${string}_${PluralSuffix}`>;
@@ -11,14 +11,14 @@
11
11
  * DELETE /_agent-native/notifications/:id — delete
12
12
  */
13
13
  export declare function createNotificationsHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<"" | import("./types.js").Notification[] | {
14
- error?: undefined;
15
14
  count: number;
16
15
  updated?: undefined;
16
+ error?: undefined;
17
17
  ok?: undefined;
18
18
  } | {
19
- error?: undefined;
20
19
  count?: undefined;
21
20
  updated: number;
21
+ error?: undefined;
22
22
  ok?: undefined;
23
23
  } | {
24
24
  count?: undefined;
@@ -26,8 +26,8 @@ export declare function createNotificationsHandler(): import("h3").EventHandlerW
26
26
  error: string;
27
27
  ok?: undefined;
28
28
  } | {
29
- error?: undefined;
30
29
  count?: undefined;
31
30
  updated?: undefined;
31
+ error?: undefined;
32
32
  ok: boolean;
33
33
  }>>;
@@ -41,9 +41,9 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
41
41
  thumbsUpRate: number;
42
42
  avgEvalScore: number;
43
43
  } | {
44
- id?: undefined;
45
44
  summary: import("./types.js").TraceSummary;
46
45
  spans: import("./types.js").TraceSpan[];
46
+ id?: undefined;
47
47
  error?: undefined;
48
48
  ok?: undefined;
49
49
  } | {
@@ -53,15 +53,15 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
53
53
  error?: undefined;
54
54
  ok?: undefined;
55
55
  } | {
56
- id?: undefined;
57
56
  summary?: undefined;
58
57
  spans?: undefined;
58
+ id?: undefined;
59
59
  error: any;
60
60
  ok?: undefined;
61
61
  } | {
62
- id?: undefined;
63
62
  summary?: undefined;
64
63
  spans?: undefined;
64
+ id?: undefined;
65
65
  error?: undefined;
66
66
  ok: boolean;
67
67
  }>>;
@@ -53,9 +53,9 @@ export declare const setWorkspaceAppDefaultVisibilityHandler: import("h3").Event
53
53
  /** POST /_agent-native/org — create a new organization */
54
54
  export declare const createOrgHandler: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
55
55
  success: boolean;
56
- id?: undefined;
57
56
  name?: undefined;
58
57
  role?: undefined;
58
+ id?: undefined;
59
59
  } | {
60
60
  success?: undefined;
61
61
  id: string;
@@ -57,37 +57,37 @@ export declare function createListSecretsHandler(): import("h3").EventHandlerWit
57
57
  /** POST /_agent-native/secrets/:key — write a secret. */
58
58
  export declare function createWriteSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
59
59
  error: string;
60
- status?: undefined;
61
60
  ok?: undefined;
61
+ status?: undefined;
62
62
  } | {
63
+ error?: undefined;
63
64
  ok: boolean;
64
65
  status: string;
65
- error?: undefined;
66
66
  } | {
67
+ ok?: undefined;
67
68
  error: string;
68
69
  removed?: undefined;
69
- ok?: undefined;
70
70
  } | {
71
+ error?: undefined;
71
72
  ok: boolean;
72
73
  removed: boolean;
73
- error?: undefined;
74
74
  }>>;
75
75
  /**
76
76
  * POST /_agent-native/secrets/:key/test — validate an optional candidate value
77
77
  * or the current stored value without changing anything.
78
78
  */
79
79
  export declare function createTestSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
80
+ ok?: undefined;
80
81
  error: string;
81
82
  note?: undefined;
82
- ok?: undefined;
83
83
  } | {
84
+ error?: undefined;
84
85
  ok: boolean;
85
86
  note?: undefined;
86
- error?: undefined;
87
87
  } | {
88
+ error?: undefined;
88
89
  ok: boolean;
89
90
  note: string;
90
- error?: undefined;
91
91
  } | {
92
92
  note?: undefined;
93
93
  ok: boolean;
@@ -119,11 +119,11 @@ export interface AdHocSecretPayload {
119
119
  export declare function createAdHocSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<AdHocSecretPayload[] | {
120
120
  error: string;
121
121
  } | {
122
+ error?: undefined;
122
123
  ok: boolean;
123
124
  key: string;
124
- error?: undefined;
125
125
  } | {
126
+ error?: undefined;
126
127
  ok: boolean;
127
128
  removed: boolean;
128
- error?: undefined;
129
129
  }>>;
@@ -56,10 +56,10 @@ export declare function createAgentEngineApiKeyHandler(): import("h3").EventHand
56
56
  ok: boolean;
57
57
  error: string;
58
58
  } | {
59
+ error?: undefined;
59
60
  ok: boolean;
60
61
  key: string;
61
62
  baseUrlKey?: string;
62
63
  scope: AgentEngineApiKeyScope;
63
- error?: undefined;
64
64
  }>>;
65
65
  export {};
@@ -5,8 +5,8 @@
5
5
  * static suggestion list in `model-config.ts`.
6
6
  */
7
7
  export declare function createAgentEngineOllamaModelsHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
8
- error: string;
9
8
  ok?: undefined;
9
+ error: string;
10
10
  models?: undefined;
11
11
  } | {
12
12
  error?: undefined;
@@ -1419,7 +1419,8 @@ export async function processAgentTeamRun(opts) {
1419
1419
  if (u.inputTokens > 0 ||
1420
1420
  u.outputTokens > 0 ||
1421
1421
  u.cacheReadTokens > 0 ||
1422
- u.cacheWriteTokens > 0) {
1422
+ u.cacheWriteTokens > 0 ||
1423
+ u.builderCreditsUsed != null) {
1423
1424
  const { recordUsage } = await import("../usage/store.js");
1424
1425
  const label = payload.name
1425
1426
  ? `agent-team:${payload.name}`
@@ -1430,6 +1431,8 @@ export async function processAgentTeamRun(opts) {
1430
1431
  outputTokens: u.outputTokens,
1431
1432
  cacheReadTokens: u.cacheReadTokens,
1432
1433
  cacheWriteTokens: u.cacheWriteTokens,
1434
+ builderCreditsUsed: u.builderCreditsUsed,
1435
+ engineName: u.engineName ?? config.engine.name,
1433
1436
  model: u.model,
1434
1437
  label,
1435
1438
  });
@@ -419,8 +419,8 @@ export declare function createPublicRemoteAgentsHandler(discover?: PublicAgentDi
419
419
  error: string;
420
420
  agents?: undefined;
421
421
  } | {
422
- agents: Omit<import("./agent-discovery.js").DiscoveredAgent, "auth" | "kind">[];
423
422
  error?: undefined;
423
+ agents: Omit<import("./agent-discovery.js").DiscoveredAgent, "auth" | "kind">[];
424
424
  }>>;
425
425
  export declare function getBuilderConnectErrorDisposition(error: unknown, connectAttemptId: string | null): "correlated" | "legacy" | null;
426
426
  export declare function getBuilderConnectErrorKey(ownerEmail: string, connectAttemptId?: string | null): string;
@@ -13,6 +13,7 @@ import { mountDbAdminRoutes } from "../db-admin/routes.js";
13
13
  import { getDbExec, isProductionServerlessFunctionRuntime, } from "../db/client.js";
14
14
  import { getDatabaseRuntimeFingerprint, getEffectiveDatabaseEnvStatus, getRuntimeDebugFingerprint, runDatabaseSchemaHealthCheck, } from "../db/runtime-diagnostics.js";
15
15
  import { ssrfSafeFetch } from "../extensions/url-safety.js";
16
+ import { BUILDER_CREDIT_USAGE_REPORTING_FLAG, registerFeatureFlags, } from "../feature-flags/registry.js";
16
17
  import { uploadFile, getActiveFileUploadProviderForRequest, listFileUploadProviders, } from "../file-upload/index.js";
17
18
  import { ensureS3FileUploadProvider } from "../file-upload/s3.js";
18
19
  import { CHATGPT_SUBSCRIPTION_LAB } from "../labs/core-labs.js";
@@ -1298,6 +1299,7 @@ export function createCoreRoutesPlugin(options = {}) {
1298
1299
  const googleOAuthManagedConnection = options.googleOAuthManagedConnection ?? "unknown";
1299
1300
  return async (nitroApp) => {
1300
1301
  markDefaultPluginProvided(nitroApp, "core-routes");
1302
+ registerFeatureFlags([BUILDER_CREDIT_USAGE_REPORTING_FLAG]);
1301
1303
  registerLabs([CHATGPT_SUBSCRIPTION_LAB]);
1302
1304
  // No-op when called from inside the bootstrap (auto-mount path).
1303
1305
  // Otherwise wait so other default plugins finish mounting first.
@@ -1,5 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { defineAction } from "../../action.js";
3
+ import { BUILDER_CREDIT_USAGE_REPORTING_FLAG } from "../../feature-flags/registry.js";
4
+ import { isFeatureFlagEnabled } from "../../feature-flags/store.js";
3
5
  import { listAppUsageMetrics } from "../metrics-store.js";
4
6
  import { resolveUsageAppKey } from "../store.js";
5
7
  export default defineAction({
@@ -14,7 +16,8 @@ export default defineAction({
14
16
  run: async ({ sinceDays, scope, userEmail, appId }, ctx) => {
15
17
  if (!ctx?.userEmail)
16
18
  throw new Error("Not authenticated.");
17
- return listAppUsageMetrics({ sinceDays, scope, userEmail }, {
19
+ const builderCreditsEnabled = await isFeatureFlagEnabled(BUILDER_CREDIT_USAGE_REPORTING_FLAG, { userEmail: ctx.userEmail, orgId: ctx.orgId });
20
+ return listAppUsageMetrics({ sinceDays, scope, userEmail, builderCreditsEnabled }, {
18
21
  ownerEmail: ctx.userEmail,
19
22
  orgId: ctx.orgId,
20
23
  app: resolveUsageAppKey(appId),
@@ -9,6 +9,9 @@ export interface UsageMetricBucket {
9
9
  outputTokens: number;
10
10
  cacheReadTokens: number;
11
11
  cacheWriteTokens: number;
12
+ builderCredits?: number;
13
+ estimatedBuilderCredits?: number;
14
+ otherCostCents?: number;
12
15
  activeUsers: number;
13
16
  lastActiveAt: number | null;
14
17
  }
@@ -17,6 +20,10 @@ export interface UsageDailyMetric {
17
20
  costCents: number;
18
21
  calls: number;
19
22
  tokens: number;
23
+ builderCredits?: number;
24
+ estimatedBuilderCredits?: number;
25
+ otherCostCents?: number;
26
+ otherCalls?: number;
20
27
  }
21
28
  export interface UsageRecentMetric {
22
29
  id: number;
@@ -30,6 +37,10 @@ export interface UsageRecentMetric {
30
37
  cacheReadTokens: number;
31
38
  cacheWriteTokens: number;
32
39
  costCents: number;
40
+ builderCredits?: number;
41
+ estimatedBuilderCredits?: number;
42
+ otherCostCents?: number;
43
+ engineName?: string | null;
33
44
  prompt: string | null;
34
45
  promptSource: "thread" | "thread-preview" | "not-captured" | "unavailable";
35
46
  threadId: string | null;
@@ -64,10 +75,17 @@ export interface AppUsageMetrics {
64
75
  cacheReadTokens: number;
65
76
  cacheWriteTokens: number;
66
77
  activeUsers: number;
78
+ builderCredits?: number;
79
+ estimatedBuilderCredits?: number;
80
+ otherCostCents?: number;
81
+ otherCalls?: number;
67
82
  };
68
83
  currentDay: {
69
84
  costCents: number;
70
85
  credits: number;
86
+ estimatedBuilderCredits?: number;
87
+ otherCostCents?: number;
88
+ otherCalls?: number;
71
89
  calls: number;
72
90
  tokens: number;
73
91
  };
@@ -91,5 +109,6 @@ export declare function listAppUsageMetrics(input: {
91
109
  sinceDays?: number;
92
110
  scope?: UsageMetricsScope;
93
111
  userEmail?: string | null;
112
+ builderCreditsEnabled?: boolean;
94
113
  }, accessInput: UsageMetricsAccessInput): Promise<AppUsageMetrics>;
95
114
  export {};