specrails-desktop 2.20.0 → 2.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/client/dist/assets/{ActivityFeedPage-BgLjSsDn.js → ActivityFeedPage-3WSqRYVx.js} +1 -1
  2. package/client/dist/assets/{AgentBrowserCapture-R87DoreG.js → AgentBrowserCapture-BlGDZahz.js} +1 -1
  3. package/client/dist/assets/{AgentModeCodePane-CO8F0ttc.js → AgentModeCodePane-Cnsea6eZ.js} +2 -2
  4. package/client/dist/assets/{AgentModeJobsPane-BecN3lwS.js → AgentModeJobsPane-CyNR-9BO.js} +1 -1
  5. package/client/dist/assets/{AgentsPage-_-Q9plMs.js → AgentsPage-dNsEsY_x.js} +1 -1
  6. package/client/dist/assets/AnalyticsPage-BAxmR0HQ.js +1 -0
  7. package/client/dist/assets/{BarChart-DZlxRF5i.js → BarChart-C6If656N.js} +1 -1
  8. package/client/dist/assets/{CodePage-4eiDoOBX.js → CodePage-Crc4BBQN.js} +1 -1
  9. package/client/dist/assets/{DesktopAnalyticsPage-DyiCeq0h.js → DesktopAnalyticsPage-IXSnbCce.js} +1 -1
  10. package/client/dist/assets/{DocsDialog-CDZv0FMK.js → DocsDialog-Bc4hx7oW.js} +1 -1
  11. package/client/dist/assets/{DocsPage-BmwaXyUf.js → DocsPage-bEU4t9c6.js} +1 -1
  12. package/client/dist/assets/{ExportDropdown-CWafyruY.js → ExportDropdown-CezTK0EX.js} +1 -1
  13. package/client/dist/assets/{IntegrationsPage-CY2jfpeW.js → IntegrationsPage-wq2CezEL.js} +1 -1
  14. package/client/dist/assets/{JobDetailPage-p0lsbXRg.js → JobDetailPage-BBcPk3j8.js} +1 -1
  15. package/client/dist/assets/{JobsPage-GeKC3ckC.js → JobsPage-DXrSPlwa.js} +1 -1
  16. package/client/dist/assets/{LogViewer-Cz7jzyU2.js → LogViewer-BoYbwvbU.js} +1 -1
  17. package/client/dist/assets/{LoopBuilderPage-C_vv7AW2.js → LoopBuilderPage-CiUMAuWz.js} +1 -1
  18. package/client/dist/assets/{LoopsPage-CettzySP.js → LoopsPage-Xrp6W5XW.js} +1 -1
  19. package/client/dist/assets/{ProjectSettingsDialog-Xw30FTul.js → ProjectSettingsDialog-BU98L5JD.js} +1 -1
  20. package/client/dist/assets/analytics-B7bPj6u_2.js +1 -0
  21. package/client/dist/assets/analytics-BakymH7Z2.js +1 -0
  22. package/client/dist/assets/analytics-CBvaxOId.js +1 -0
  23. package/client/dist/assets/analytics-Ce-sPORu.js +1 -0
  24. package/client/dist/assets/analytics-DZ74aQ54.js +1 -0
  25. package/client/dist/assets/analytics-WF1I49ln.js +1 -0
  26. package/client/dist/assets/analytics-slx4X1mu2.js +1 -0
  27. package/client/dist/assets/analytics-uRNP6yAJ.js +1 -0
  28. package/client/dist/assets/{dist-js-DoZ1SVEs.js → dist-js-BAWSqVtr.js} +1 -1
  29. package/client/dist/assets/{dist-js-zlcAXgob.js → dist-js-BQn4yxaw.js} +1 -1
  30. package/client/dist/assets/index-BHPbzyg6.css +2 -0
  31. package/client/dist/assets/{index-CG4z4_Mq.js → index-n2PmJGF6.js} +47 -47
  32. package/client/dist/assets/jobs-BqF79kHz2.js +1 -0
  33. package/client/dist/assets/jobs-C1XM5urS.js +1 -0
  34. package/client/dist/assets/jobs-C5UjG0262.js +1 -0
  35. package/client/dist/assets/jobs-DBfaHTxC.js +1 -0
  36. package/client/dist/assets/jobs-DM4BDPdg.js +1 -0
  37. package/client/dist/assets/jobs-Da5OkZmf2.js +1 -0
  38. package/client/dist/assets/jobs-JJdnuQ03.js +1 -0
  39. package/client/dist/assets/{jobs---dwa4Nf.js → jobs-SI34ML8I.js} +1 -1
  40. package/client/dist/assets/{lib-zJbG81CY.js → lib-C-g8QbZl.js} +1 -1
  41. package/client/dist/assets/{upload-Cm4KWhcE.js → upload-CRtTj4Co.js} +1 -1
  42. package/client/dist/assets/{value-m3Q84dDF.js → value-D9aLbxw-.js} +1 -1
  43. package/client/dist/index.html +4 -4
  44. package/package.json +1 -1
  45. package/server/dist/agent-chat-manager.js +57 -4
  46. package/server/dist/agent-generator.js +110 -14
  47. package/server/dist/agent-refine-manager.js +51 -28
  48. package/server/dist/ai-invocations.js +14 -0
  49. package/server/dist/chat-manager.js +179 -38
  50. package/server/dist/db.js +30 -22
  51. package/server/dist/desktop-analytics.js +83 -31
  52. package/server/dist/desktop-db.js +62 -0
  53. package/server/dist/file-summary-generator.js +7 -2
  54. package/server/dist/interactive-job-session.js +126 -4
  55. package/server/dist/loop-executors.js +5 -0
  56. package/server/dist/loop-run-manager.js +7 -0
  57. package/server/dist/pricing.js +77 -17
  58. package/server/dist/profiles-router.js +12 -4
  59. package/server/dist/project-registry.js +7 -3
  60. package/server/dist/project-router-spending.js +46 -1
  61. package/server/dist/project-router-tickets.js +51 -5
  62. package/server/dist/proposal-manager.js +70 -3
  63. package/server/dist/providers/claude-adapter.js +67 -6
  64. package/server/dist/queue-manager.js +487 -81
  65. package/server/dist/rail-isolated-launch.js +10 -0
  66. package/server/dist/rail-merge-orchestrator.js +53 -2
  67. package/server/dist/result-event.js +20 -7
  68. package/server/dist/setup-manager.js +63 -3
  69. package/server/dist/smash-runner.js +73 -25
  70. package/server/dist/spec-launcher-manager.js +85 -2
  71. package/server/dist/spending.js +61 -16
  72. package/client/dist/assets/AnalyticsPage-Cqh5IGaF.js +0 -1
  73. package/client/dist/assets/analytics-B4FJ_pry.js +0 -1
  74. package/client/dist/assets/analytics-BBAfeB1o.js +0 -1
  75. package/client/dist/assets/analytics-BM1R5CEp2.js +0 -1
  76. package/client/dist/assets/analytics-BjLruoYS.js +0 -1
  77. package/client/dist/assets/analytics-CKwh2zUr.js +0 -1
  78. package/client/dist/assets/analytics-CpcjUkV72.js +0 -1
  79. package/client/dist/assets/analytics-DbXHdSlk2.js +0 -1
  80. package/client/dist/assets/analytics-Djzr1xUQ.js +0 -1
  81. package/client/dist/assets/index-5mbwBNQ-.css +0 -2
  82. package/client/dist/assets/jobs-Bvh_HiRo2.js +0 -1
  83. package/client/dist/assets/jobs-BzYX5VLd.js +0 -1
  84. package/client/dist/assets/jobs-DTfaTfzQ2.js +0 -1
  85. package/client/dist/assets/jobs-DrPyq5J2.js +0 -1
  86. package/client/dist/assets/jobs-Dty7cCdI2.js +0 -1
  87. package/client/dist/assets/jobs-Dv8MP-eE.js +0 -1
  88. package/client/dist/assets/jobs-DvkAoA8D.js +0 -1
@@ -0,0 +1 @@
1
+ var e={job:`ジョブ`,quickSpec:`クイック`,exploreSpec:`Explore`,aiEdit:`リファイン`,smash:`SMASH`,fileSummary:`ファイル要約`,loop:`Loops`,chatSidebar:`チャット`,specLauncher:`スペックランチャー`,proposal:`提案`,agentStudio:`エージェントスタジオ`,setup:`セットアップ`},t={d7:`7日`,d30:`30日`,d90:`90日`,all:`すべて`,custom:`カスタム`,startDate:`開始日`,endDate:`終了日`,to:`〜`},n=`{{count}} 回の実行`,r=`{{count}} 回の実行`,i={title:`アナリティクス`,all:`すべて`,engine:`エンジン`,ticketChip:`チケット #{{id}} · ✕`,failedToLoad:`読み込みに失敗しました: {{error}}`,modelChip:`モデル:{{model}}`,clearModelFilter:`モデルフィルターをクリア`},a={spending:`支出`,vsPrev:`前期間比 {{pct}}%`,invocations_one:`{{count}} 回の呼び出し`,invocations_other:`{{count}} 回の呼び出し`,tokens:`· {{tokens}} トークン`,tokensTooltip:`合計トークン = この期間の全呼び出しにおける新規入力 + 出力 + キャッシュ読み取り + キャッシュ作成の合計。`,includesEstimated:`· 約 {{amount}} の推定値を含む`,includesEstimatedTooltip:`ネイティブのコストフィールドを持たないプロバイダーからの推定コスト {{amount}} を含みます(例: ローカル料金表で算出する codex)。`,trackingStarted:`トラッキング開始: {{date}}`,trackingStartedFallback:`最初の呼び出しからトラッキングを開始`,emptyState:`このフィルター期間の呼び出しはまだありません。`,segmentTitle:`{{label}}: {{value}}`},o={title:`プロバイダー別`,description:`このプロジェクトの AI CLI 間でのコストの内訳。<tilde>~</tilde> プレフィックスは、コストがローカル料金表からの推定値である行を示します(プロバイダーがネイティブに報告しない場合)。`,noCost:`この期間に記録されたコストはまだありません。`,segmentTitle:`{{label}}: {{value}} ({{count}})`,costUnavailable:`コスト利用不可`,costUnavailableTooltip:`このプロバイダーは実行されましたが、そのモデルが料金表にないため、コストを計算できませんでした。`},s={title:`日次タイムライン`,subtitle:`サーフェス別の積み上げ`,empty:`この期間の支出はありません。`},c={title:`クイック vs Explore`,quick:`クイック`,explore:`Explore`,sparseCta:`より充実したスペックには Explore をお試しください`,runsSoFar_one:`これまで {{count}} 回実行`,runsSoFar_other:`これまで {{count}} 回実行`,perSpec:`スペックあたり`,createdRuns:`<strong>{{created}}</strong> 件作成 · {{runs}} 回実行`,avgDuration:`平均 {{duration}}`,ratio:`スペックあたり {{ratio}}× 多い`,estimatedTooltip:`推定コスト(codex/gemini の料金表フォールバック、プロバイダー請求ではありません)`,estimatedFootnote:`~ 推定コストを含みます(codex/gemini)`},l={title:`モデル`,empty:`記録されたモデルはありません。`,estimatedTooltip:`ローカルの料金表からの推定値 — このプロバイダーはコストをネイティブに報告しません。`,others:`その他`},u={title:`コスト vs ターン`,empty:`プロットする呼び出しがありません。`,turnsLabel:`ターン`,costLabel:`コスト`,truncated:`{{total}} 件中 {{shown}} 件を表示 — 最もコストの高いポイントは保持されますが、それ以前のポイントは非表示になります`},d={title:`上位チケット`,empty:`この期間のチケットアクティビティはありません。`,breakdownItem:`{{n}} {{label}}`,unattributed:`未割り当て`,deletedTicket:`削除済みチケット #{{id}}`},f={title:`すべての呼び出し`,statusFilterAria:`ステータスフィルター`,minCostFilterAria:`最小コストフィルター`,minCostPlaceholder:`≥ $0.00`,allStatus:`すべてのステータス`,success:`成功`,failed:`失敗`,aborted:`中断`,empty:`現在のフィルターに一致する呼び出しはありません。`,colSurface:`サーフェス`,colTicket:`チケット`,colCost:`コスト`,colTurns:`ターン`,colTokens:`トークン`,colModel:`モデル`,colStatus:`ステータス`,colStarted:`開始`,contractLayer:`Contract Layer`,contractLayerRefinement:`Contract Layer の改良`,deleted:`(削除済み)`,provisionalTitleTooltip:`暫定の Explore タイトル — まだコミットされていません`,estimatedCostTooltip:`ローカル料金表からの推定値 — このプロバイダーはコストをネイティブに報告しません。`,inferred:`推定`,statusValue:{success:`成功`,failed:`失敗`,aborted:`中断`},truncated:`一致する {{total}} 行のうち最初の {{shown}} 行を表示しています。`,colProvider:`プロバイダー`,sortLabel:`並べ替え`,sortRecency:`最近`,sortCost:`コスト`},p={title:`Desktop アナリティクス`,refreshAria:`アナリティクスを更新`,failedToLoad:`アナリティクスの読み込みに失敗しました: {{error}}`,totalCost:`合計コスト`,costToday:`本日 {{value}}`,totalJobs:`合計ジョブ数`,jobsToday:`本日 {{n}} 件`,successRate:`成功率`,acrossAllProjects:`全プロジェクト`,avgCostPerJob:`ジョブあたり平均コスト`,periodAverage:`期間平均`,costOverTime:`プロジェクト横断のコスト推移`,noCostData:`この期間のコストデータはありません`,projectComparison:`プロジェクト比較`,noProjects:`登録されたプロジェクトはありません。`,jobsCount_one:`{{count}} 件のジョブ`,jobsCount_other:`{{count}} 件のジョブ`,successPct:`成功率 {{pct}}%`,costByProject:`プロジェクト別コスト`,includesEstimated:`~{{amount}} 推定`,includesEstimatedTooltip:`料金表による推定コスト {{amount}} を含みます(codex/gemini)。プロバイダー請求ではありません。`,includesEstimatedShort:`推定含む`,timelineEstimatedTooltip:`一部の日には ~ で示された料金表による推定コスト(codex/gemini)が含まれます。`,estimatedBadge:`推定`,projectEstimatedTooltip:`このプロジェクトのコストのうち {{amount}} は料金表による推定値です(codex/gemini)。プロバイダー請求ではありません。`,statusBarEstimatedTooltip:`料金表による推定コスト(codex/gemini)を含みます。プロバイダー請求ではありません。`},m={"7d":`過去 7 日間`,"30d":`過去 30 日間`,"90d":`過去 90 日間`,all:`全期間`,custom:`カスタム範囲`},h={surfaces:e,periods:t,runs_one:n,runs_other:r,page:i,hero:a,providerCard:o,timeline:s,quickVsExplore:c,models:l,scatter:u,topTickets:d,table:f,export:{summaryCsv:`サマリー CSV`,rawCsv:`生データ CSV`,summaryJson:`サマリー JSON`,rawJson:`生データ JSON`,downloading:`ダウンロード中…`,noData:`現在のフィルターにデータがありません`,failed:`エクスポートに失敗しました`},desktop:p,windowLabels:m};export{h as default,p as desktop,a as hero,l as models,i as page,t as periods,o as providerCard,c as quickVsExplore,n as runs_one,r as runs_other,u as scatter,e as surfaces,f as table,s as timeline,d as topTickets,m as windowLabels};
@@ -0,0 +1 @@
1
+ var e={job:`Jobs`,quickSpec:`Quick`,exploreSpec:`Explore`,aiEdit:`Refinado`,smash:`SMASH`,fileSummary:`Resúmenes de archivo`,loop:`Loops`,chatSidebar:`Chat`,specLauncher:`Lanzador de specs`,proposal:`Propuesta`,agentStudio:`Agent Studio`,setup:`Configuración`},t={d7:`7d`,d30:`30d`,d90:`90d`,all:`Todo`,custom:`Personalizado`,startDate:`Fecha de inicio`,endDate:`Fecha de fin`,to:`a`},n=`{{count}} ejecución`,r=`{{count}} ejecuciones`,i={title:`Analíticas`,all:`Todo`,engine:`Motor`,ticketChip:`ticket #{{id}} · ✕`,failedToLoad:`Error al cargar: {{error}}`,modelChip:`Modelo: {{model}}`,clearModelFilter:`Quitar filtro de modelo`},a={spending:`Gasto`,vsPrev:`{{pct}}% vs anterior`,invocations_one:`{{count}} invocación`,invocations_other:`{{count}} invocaciones`,tokens:`· {{tokens}} tokens`,tokensTooltip:`Tokens totales = entrada nueva + salida + lectura de caché + creación de caché en todas las invocaciones de esta ventana.`,includesEstimated:`· incluye ~{{amount}} estimado`,includesEstimatedTooltip:`Incluye {{amount}} de coste estimado de proveedores sin campo de coste nativo (p. ej. codex mediante la tabla de precios local).`,trackingStarted:`Seguimiento iniciado el {{date}}`,trackingStartedFallback:`El seguimiento empieza con la primera invocación`,emptyState:`Aún no hay invocaciones para esta ventana de filtros.`,segmentTitle:`{{label}}: {{value}}`},o={title:`Por proveedor`,description:`Cómo se reparte el coste entre las CLI de IA de este proyecto. El prefijo <tilde>~</tilde> marca las filas cuyo coste se estima con la tabla de precios local (el proveedor no lo informa de forma nativa).`,noCost:`Aún no hay coste registrado en esta ventana.`,segmentTitle:`{{label}}: {{value}} ({{count}})`,costUnavailable:`coste no disponible`,costUnavailableTooltip:`Este proveedor se ejecutó pero su modelo no está en la tabla de precios, así que no se pudo calcular ningún coste.`},s={title:`Cronología diaria`,subtitle:`apilada por superficie`,empty:`Sin gasto en este periodo.`},c={title:`Quick vs Explore`,quick:`Quick`,explore:`Explore`,sparseCta:`Prueba Explore para conseguir specs más completas`,runsSoFar_one:`{{count}} ejecución hasta ahora`,runsSoFar_other:`{{count}} ejecuciones hasta ahora`,perSpec:`por spec`,createdRuns:`<strong>{{created}}</strong> creadas · {{runs}} ejecuciones`,avgDuration:`{{duration}} de media`,ratio:`{{ratio}}× más por spec`,estimatedTooltip:`Coste estimado (estimación con tabla de precios para codex/gemini, no facturado por el proveedor)`,estimatedFootnote:`~ Incluye costes estimados (codex/gemini)`},l={title:`Modelos`,empty:`No hay modelos registrados.`,estimatedTooltip:`Estimado a partir de la tabla de precios local — este proveedor no informa el coste de forma nativa.`,others:`Otros`},u={title:`Coste vs turnos`,empty:`No hay invocaciones que representar.`,turnsLabel:`turnos`,costLabel:`coste`,truncated:`Mostrando {{shown}} de {{total}} — se conserva el punto más costoso, pero se ocultan los anteriores`},d={title:`Tickets principales`,empty:`Sin actividad de tickets en este periodo.`,breakdownItem:`{{n}} {{label}}`,unattributed:`Sin atribuir`,deletedTicket:`ticket eliminado #{{id}}`},f={title:`Todas las invocaciones`,statusFilterAria:`Filtro de estado`,minCostFilterAria:`Filtro de coste mínimo`,minCostPlaceholder:`≥ $0.00`,allStatus:`Todos los estados`,success:`Éxito`,failed:`Fallido`,aborted:`Abortado`,empty:`Ninguna invocación coincide con los filtros actuales.`,colSurface:`Superficie`,colTicket:`Ticket`,colCost:`Coste`,colTurns:`Turnos`,colTokens:`Tokens`,colModel:`Modelo`,colStatus:`Estado`,colStarted:`Inicio`,contractLayer:`Contract Layer`,contractLayerRefinement:`Refinamiento de Contract Layer`,deleted:`(eliminado)`,provisionalTitleTooltip:`Título provisional de Explore — aún sin confirmar`,estimatedCostTooltip:`Estimado con la tabla de precios local — este proveedor no informa el coste de forma nativa.`,inferred:`inferido`,statusValue:{success:`éxito`,failed:`fallido`,aborted:`abortado`},truncated:`Mostrando las primeras {{shown}} de {{total}} filas coincidentes.`,colProvider:`Proveedor`,sortLabel:`Ordenar`,sortRecency:`Reciente`,sortCost:`Coste`},p={title:`Analíticas de Desktop`,refreshAria:`Actualizar analíticas`,failedToLoad:`No se pudieron cargar las analíticas: {{error}}`,totalCost:`Coste total`,costToday:`{{value}} hoy`,totalJobs:`Jobs totales`,jobsToday:`{{n}} hoy`,successRate:`Tasa de éxito`,acrossAllProjects:`en todos los proyectos`,avgCostPerJob:`Coste medio / job`,periodAverage:`media del periodo`,costOverTime:`Coste entre proyectos a lo largo del tiempo`,noCostData:`Sin datos de coste para este periodo`,projectComparison:`Comparación de proyectos`,noProjects:`No hay proyectos registrados.`,jobsCount_one:`{{count}} job`,jobsCount_other:`{{count}} jobs`,successPct:`{{pct}}% de éxito`,costByProject:`Coste por proyecto`,includesEstimated:`~{{amount}} estimado`,includesEstimatedTooltip:`Incluye {{amount}} de coste estimado por tabla de precios (codex/gemini), no facturado por el proveedor.`,includesEstimatedShort:`incl. estimado`,timelineEstimatedTooltip:`Algunos días incluyen coste estimado por tabla de precios (codex/gemini) marcado con ~.`,estimatedBadge:`est.`,projectEstimatedTooltip:`{{amount}} del coste de este proyecto es una estimación por tabla de precios (codex/gemini), no facturado por el proveedor.`,statusBarEstimatedTooltip:`Incluye coste estimado por tabla de precios (codex/gemini), no facturado por el proveedor.`},m={"7d":`Últimos 7 días`,"30d":`Últimos 30 días`,"90d":`Últimos 90 días`,all:`Todo el tiempo`,custom:`Rango personalizado`},h={surfaces:e,periods:t,runs_one:n,runs_other:r,page:i,hero:a,providerCard:o,timeline:s,quickVsExplore:c,models:l,scatter:u,topTickets:d,table:f,export:{summaryCsv:`CSV resumen`,rawCsv:`CSV en bruto`,summaryJson:`JSON resumen`,rawJson:`JSON en bruto`,downloading:`Descargando…`,noData:`Sin datos para los filtros actuales`,failed:`Error al exportar`},desktop:p,windowLabels:m};export{h as default,p as desktop,a as hero,l as models,i as page,t as periods,o as providerCard,c as quickVsExplore,n as runs_one,r as runs_other,u as scatter,e as surfaces,f as table,s as timeline,d as topTickets,m as windowLabels};
@@ -0,0 +1 @@
1
+ var e={job:`Job`,quickSpec:`Quick`,exploreSpec:`Explore`,aiEdit:`Raffinamento`,smash:`SMASH`,fileSummary:`Riepiloghi file`,loop:`Loops`,chatSidebar:`Chat`,specLauncher:`Avvio spec`,proposal:`Proposta`,agentStudio:`Agent Studio`,setup:`Configurazione`},t={d7:`7d`,d30:`30d`,d90:`90d`,all:`Tutto`,custom:`Personalizzato`,startDate:`Data di inizio`,endDate:`Data di fine`,to:`a`},n=`{{count}} esecuzione`,r=`{{count}} esecuzioni`,i={title:`Analytics`,all:`Tutti`,engine:`Engine`,ticketChip:`ticket #{{id}} · ✕`,failedToLoad:`Caricamento non riuscito: {{error}}`,modelChip:`Modello: {{model}}`,clearModelFilter:`Rimuovi filtro modello`},a={spending:`Spesa`,vsPrev:`{{pct}}% vs prec.`,invocations_one:`{{count}} invocazione`,invocations_other:`{{count}} invocazioni`,tokens:`· {{tokens}} token`,tokensTooltip:`Token totali = input nuovo + output + lettura cache + creazione cache su tutte le invocazioni in questa finestra.`,includesEstimated:`· include ~{{amount}} stimati`,includesEstimatedTooltip:`Include {{amount}} di costo stimato da provider senza un campo di costo nativo (es. codex tramite la tabella prezzi locale).`,trackingStarted:`Tracciamento iniziato il {{date}}`,trackingStartedFallback:`Il tracciamento inizia alla prima invocazione`,emptyState:`Ancora nessuna invocazione per questa finestra di filtri.`,segmentTitle:`{{label}}: {{value}}`},o={title:`Per provider`,description:`Come si ripartisce il costo tra le CLI AI di questo progetto. Il prefisso <tilde>~</tilde> indica le righe in cui il costo è stimato dalla tabella prezzi locale (il provider non lo riporta nativamente).`,noCost:`Ancora nessun costo registrato in questa finestra.`,segmentTitle:`{{label}}: {{value}} ({{count}})`,costUnavailable:`costo non disponibile`,costUnavailableTooltip:`Questo provider è stato eseguito ma il suo modello non è nella tabella prezzi, quindi non è stato possibile calcolare alcun costo.`},s={title:`Timeline giornaliera`,subtitle:`impilata per origine`,empty:`Nessuna spesa in questo periodo.`},c={title:`Quick vs Explore`,quick:`Quick`,explore:`Explore`,sparseCta:`Prova Explore per spec più ricche`,runsSoFar_one:`{{count}} esecuzione finora`,runsSoFar_other:`{{count}} esecuzioni finora`,perSpec:`per spec`,createdRuns:`<strong>{{created}}</strong> create · {{runs}} esecuzioni`,avgDuration:`{{duration}} in media`,ratio:`{{ratio}}× in più per spec`,estimatedTooltip:`Costo stimato (stima da tabella prezzi per codex/gemini, non fatturato dal provider)`,estimatedFootnote:`~ Include costi stimati (codex/gemini)`},l={title:`Modelli`,empty:`Nessun modello registrato.`,estimatedTooltip:`Stimato dalla tabella prezzi locale — questo provider non riporta il costo in modo nativo.`,others:`Altri`},u={title:`Costo vs Turni`,empty:`Nessuna invocazione da rappresentare.`,turnsLabel:`turni`,costLabel:`costo`,truncated:`Visualizzati {{shown}} di {{total}} — il punto più costoso viene mantenuto, ma i punti precedenti sono nascosti`},d={title:`Top ticket`,empty:`Nessuna attività sui ticket in questo periodo.`,breakdownItem:`{{n}} {{label}}`,unattributed:`Non attribuito`,deletedTicket:`ticket eliminato #{{id}}`},f={title:`Tutte le invocazioni`,statusFilterAria:`Filtro stato`,minCostFilterAria:`Filtro costo minimo`,minCostPlaceholder:`≥ $0.00`,allStatus:`Tutti gli stati`,success:`Riuscita`,failed:`Fallita`,aborted:`Interrotta`,empty:`Nessuna invocazione corrisponde ai filtri attuali.`,colSurface:`Origine`,colTicket:`Ticket`,colCost:`Costo`,colTurns:`Turni`,colTokens:`Token`,colModel:`Modello`,colStatus:`Stato`,colStarted:`Avvio`,contractLayer:`Contract Layer`,contractLayerRefinement:`Raffinamento Contract Layer`,deleted:`(eliminato)`,provisionalTitleTooltip:`Titolo Explore provvisorio — non ancora confermato`,estimatedCostTooltip:`Stimato dalla tabella prezzi locale — questo provider non riporta il costo nativamente.`,inferred:`dedotto`,statusValue:{success:`riuscita`,failed:`fallita`,aborted:`interrotta`},truncated:`Mostrate le prime {{shown}} di {{total}} righe corrispondenti.`,colProvider:`Provider`,sortLabel:`Ordina`,sortRecency:`Recenti`,sortCost:`Costo`},p={title:`Analytics di Desktop`,refreshAria:`Aggiorna le analytics`,failedToLoad:`Impossibile caricare le analytics: {{error}}`,totalCost:`Costo totale`,costToday:`{{value}} oggi`,totalJobs:`Job totali`,jobsToday:`{{n}} oggi`,successRate:`Tasso di successo`,acrossAllProjects:`su tutti i progetti`,avgCostPerJob:`Costo medio / job`,periodAverage:`media del periodo`,costOverTime:`Costo nel tempo tra i progetti`,noCostData:`Nessun dato di costo per questo periodo`,projectComparison:`Confronto progetti`,noProjects:`Nessun progetto registrato.`,jobsCount_one:`{{count}} job`,jobsCount_other:`{{count}} job`,successPct:`{{pct}}% di successo`,costByProject:`Costo per progetto`,includesEstimated:`~{{amount}} stimato`,includesEstimatedTooltip:`Include {{amount}} di costo stimato da tabella prezzi (codex/gemini), non fatturato dal provider.`,includesEstimatedShort:`incl. stimato`,timelineEstimatedTooltip:`Alcuni giorni includono un costo stimato da tabella prezzi (codex/gemini) contrassegnato con ~.`,estimatedBadge:`stim.`,projectEstimatedTooltip:`{{amount}} del costo di questo progetto è una stima da tabella prezzi (codex/gemini), non fatturato dal provider.`,statusBarEstimatedTooltip:`Include un costo stimato da tabella prezzi (codex/gemini), non fatturato dal provider.`},m={"7d":`Ultimi 7 giorni`,"30d":`Ultimi 30 giorni`,"90d":`Ultimi 90 giorni`,all:`Sempre`,custom:`Intervallo personalizzato`},h={surfaces:e,periods:t,runs_one:n,runs_other:r,page:i,hero:a,providerCard:o,timeline:s,quickVsExplore:c,models:l,scatter:u,topTickets:d,table:f,export:{summaryCsv:`CSV riepilogo`,rawCsv:`CSV raw`,summaryJson:`JSON riepilogo`,rawJson:`JSON raw`,downloading:`Download in corso…`,noData:`Nessun dato per i filtri attuali`,failed:`Esportazione non riuscita`},desktop:p,windowLabels:m};export{h as default,p as desktop,a as hero,l as models,i as page,t as periods,o as providerCard,c as quickVsExplore,n as runs_one,r as runs_other,u as scatter,e as surfaces,f as table,s as timeline,d as topTickets,m as windowLabels};
@@ -0,0 +1 @@
1
+ import{r as e}from"./chunk-BNv3lrIs.js";var t=e({default:()=>_,desktop:()=>h,hero:()=>s,models:()=>d,page:()=>o,periods:()=>r,providerCard:()=>c,quickVsExplore:()=>u,runs_one:()=>i,runs_other:()=>a,scatter:()=>f,surfaces:()=>n,table:()=>m,timeline:()=>l,topTickets:()=>p,windowLabels:()=>g}),n={job:`Jobs`,quickSpec:`Quick`,exploreSpec:`Explore`,aiEdit:`Refine`,smash:`SMASH`,fileSummary:`File summaries`,loop:`Loops`,chatSidebar:`Chat`,specLauncher:`Spec launcher`,proposal:`Proposal`,agentStudio:`Agent Studio`,setup:`Setup`},r={d7:`7d`,d30:`30d`,d90:`90d`,all:`All`,custom:`Custom`,startDate:`Start date`,endDate:`End date`,to:`to`},i=`{{count}} run`,a=`{{count}} runs`,o={title:`Analytics`,all:`All`,engine:`Engine`,ticketChip:`ticket #{{id}} · ✕`,failedToLoad:`Failed to load: {{error}}`,modelChip:`Model: {{model}}`,clearModelFilter:`Clear model filter`},s={spending:`Spending`,vsPrev:`{{pct}}% vs prev`,invocations_one:`{{count}} invocation`,invocations_other:`{{count}} invocations`,tokens:`· {{tokens}} tokens`,tokensTooltip:`Total tokens = fresh input + output + cache-read + cache-create across all invocations in this window.`,includesEstimated:`· includes ~{{amount}} estimated`,includesEstimatedTooltip:`Includes {{amount}} of estimated cost from providers without a native cost field (e.g. codex via the local pricing table).`,trackingStarted:`Tracking started {{date}}`,trackingStartedFallback:`Tracking started on first invocation`,emptyState:`No invocations yet for this filter window.`,segmentTitle:`{{label}}: {{value}}`},c={title:`By provider`,description:`How cost splits across the AI CLIs in this project. The <tilde>~</tilde> prefix marks rows where cost is estimated from the local pricing table (the provider does not report it natively).`,noCost:`No cost recorded yet in this window.`,segmentTitle:`{{label}}: {{value}} ({{count}})`,costUnavailable:`cost unavailable`,costUnavailableTooltip:`This provider ran but its model is not in the pricing table, so no cost could be computed.`},l={title:`Daily timeline`,subtitle:`stacked by surface`,empty:`No spend in this period.`},u={title:`Quick vs Explore`,quick:`Quick`,explore:`Explore`,sparseCta:`Try Explore for richer specs`,runsSoFar_one:`{{count}} run so far`,runsSoFar_other:`{{count}} runs so far`,perSpec:`per spec`,createdRuns:`<strong>{{created}}</strong> created · {{runs}} runs`,avgDuration:`{{duration}} avg`,ratio:`{{ratio}}× more per spec`,estimatedTooltip:`Estimated cost (codex/gemini pricing-table fallback, not provider-billed)`,estimatedFootnote:`~ Includes estimated costs (codex/gemini)`},d={title:`Models`,empty:`No models recorded.`,estimatedTooltip:`Estimated from the local pricing table — this provider does not report cost natively.`,others:`Others`},f={title:`Cost vs Turns`,empty:`No invocations to plot.`,turnsLabel:`turns`,costLabel:`cost`,truncated:`Showing {{shown}} of {{total}} — the costliest point is kept, but earlier points are hidden`},p={title:`Top tickets`,empty:`No ticket activity in this period.`,breakdownItem:`{{n}} {{label}}`,unattributed:`Unattributed`,deletedTicket:`deleted ticket #{{id}}`},m={title:`All invocations`,statusFilterAria:`Status filter`,minCostFilterAria:`Minimum cost filter`,minCostPlaceholder:`≥ $0.00`,allStatus:`All status`,success:`Success`,failed:`Failed`,aborted:`Aborted`,empty:`No invocations match the current filters.`,colSurface:`Surface`,colTicket:`Ticket`,colCost:`Cost`,colTurns:`Turns`,colTokens:`Tokens`,colModel:`Model`,colStatus:`Status`,colStarted:`Started`,contractLayer:`Contract Layer`,contractLayerRefinement:`Contract Layer refinement`,deleted:`(deleted)`,provisionalTitleTooltip:`Provisional Explore title — not yet committed`,estimatedCostTooltip:`Estimated from local pricing table — this provider does not report cost natively.`,inferred:`inferred`,statusValue:{success:`success`,failed:`failed`,aborted:`aborted`},truncated:`Showing first {{shown}} of {{total}} matching rows.`,colProvider:`Provider`,sortLabel:`Sort`,sortRecency:`Recent`,sortCost:`Cost`},h={title:`Desktop Analytics`,refreshAria:`Refresh analytics`,failedToLoad:`Failed to load analytics: {{error}}`,totalCost:`Total Cost`,costToday:`{{value}} today`,totalJobs:`Total Jobs`,jobsToday:`{{n}} today`,successRate:`Success Rate`,acrossAllProjects:`across all projects`,avgCostPerJob:`Avg Cost / Job`,periodAverage:`period average`,costOverTime:`Cross-Project Cost Over Time`,noCostData:`No cost data for this period`,projectComparison:`Project Comparison`,noProjects:`No projects registered.`,jobsCount_one:`{{count}} job`,jobsCount_other:`{{count}} jobs`,successPct:`{{pct}}% success`,costByProject:`Cost by Project`,includesEstimated:`~{{amount}} estimated`,includesEstimatedTooltip:`Includes {{amount}} of rate-card estimated cost (codex/gemini), not provider-billed.`,includesEstimatedShort:`incl. estimated`,timelineEstimatedTooltip:`Some days include rate-card estimated cost (codex/gemini) marked with ~.`,estimatedBadge:`est.`,projectEstimatedTooltip:`{{amount}} of this project's cost is a rate-card estimate (codex/gemini), not provider-billed.`,statusBarEstimatedTooltip:`Includes rate-card estimated cost (codex/gemini), not provider-billed.`},g={"7d":`Last 7 days`,"30d":`Last 30 days`,"90d":`Last 90 days`,all:`All time`,custom:`Custom range`},_={surfaces:n,periods:r,runs_one:i,runs_other:a,page:o,hero:s,providerCard:c,timeline:l,quickVsExplore:u,models:d,scatter:f,topTickets:p,table:m,export:{summaryCsv:`Summary CSV`,rawCsv:`Raw CSV`,summaryJson:`Summary JSON`,rawJson:`Raw JSON`,downloading:`Downloading…`,noData:`No data for current filters`,failed:`Export failed`},desktop:h,windowLabels:g};export{t};
@@ -0,0 +1 @@
1
+ var e={job:`Jobs`,quickSpec:`Quick`,exploreSpec:`Explore`,aiEdit:`Refinamento`,smash:`SMASH`,fileSummary:`Resumos de ficheiros`,loop:`Loops`,chatSidebar:`Chat`,specLauncher:`Lançador de specs`,proposal:`Proposta`,agentStudio:`Agent Studio`,setup:`Configuração`},t={d7:`7d`,d30:`30d`,d90:`90d`,all:`Tudo`,custom:`Personalizado`,startDate:`Data de início`,endDate:`Data de fim`,to:`até`},n=`{{count}} execução`,r=`{{count}} execuções`,i={title:`Analytics`,all:`Tudo`,engine:`Motor`,ticketChip:`ticket #{{id}} · ✕`,failedToLoad:`Falha ao carregar: {{error}}`,modelChip:`Modelo: {{model}}`,clearModelFilter:`Limpar filtro de modelo`},a={spending:`Gastos`,vsPrev:`{{pct}}% vs anterior`,invocations_one:`{{count}} invocação`,invocations_other:`{{count}} invocações`,tokens:`· {{tokens}} tokens`,tokensTooltip:`Total de tokens = input novo + output + leitura de cache + criação de cache em todas as invocações desta janela.`,includesEstimated:`· inclui ~{{amount}} estimado`,includesEstimatedTooltip:`Inclui {{amount}} de custo estimado de fornecedores sem campo de custo nativo (p. ex. codex através da tabela de preços local).`,trackingStarted:`Registo iniciado em {{date}}`,trackingStartedFallback:`O registo começa na primeira invocação`,emptyState:`Ainda não há invocações para esta janela de filtros.`,segmentTitle:`{{label}}: {{value}}`},o={title:`Por fornecedor`,description:`Como o custo se divide entre as CLIs de IA deste projeto. O prefixo <tilde>~</tilde> assinala as linhas em que o custo é estimado a partir da tabela de preços local (o fornecedor não o reporta nativamente).`,noCost:`Ainda não há custo registado nesta janela.`,segmentTitle:`{{label}}: {{value}} ({{count}})`,costUnavailable:`custo indisponível`,costUnavailableTooltip:`Este provedor foi executado, mas seu modelo não está na tabela de preços, portanto nenhum custo pôde ser calculado.`},s={title:`Cronologia diária`,subtitle:`empilhada por superfície`,empty:`Sem gastos neste período.`},c={title:`Quick vs Explore`,quick:`Quick`,explore:`Explore`,sparseCta:`Experimente o Explore para specs mais ricas`,runsSoFar_one:`{{count}} execução até agora`,runsSoFar_other:`{{count}} execuções até agora`,perSpec:`por spec`,createdRuns:`<strong>{{created}}</strong> criadas · {{runs}} execuções`,avgDuration:`{{duration}} em média`,ratio:`{{ratio}}× mais por spec`,estimatedTooltip:`Custo estimado (estimativa pela tabela de preços para codex/gemini, não faturado pelo provedor)`,estimatedFootnote:`~ Inclui custos estimados (codex/gemini)`},l={title:`Modelos`,empty:`Nenhum modelo registado.`,estimatedTooltip:`Estimado a partir da tabela de preços local — este provedor não informa o custo nativamente.`,others:`Outros`},u={title:`Custo vs Turnos`,empty:`Sem invocações para representar.`,turnsLabel:`turnos`,costLabel:`custo`,truncated:`Mostrando {{shown}} de {{total}} — o ponto mais caro é mantido, mas os pontos anteriores ficam ocultos`},d={title:`Top tickets`,empty:`Sem atividade de tickets neste período.`,breakdownItem:`{{n}} {{label}}`,unattributed:`Sem atribuição`,deletedTicket:`ticket eliminado #{{id}}`},f={title:`Todas as invocações`,statusFilterAria:`Filtro de estado`,minCostFilterAria:`Filtro de custo mínimo`,minCostPlaceholder:`≥ $0.00`,allStatus:`Todos os estados`,success:`Sucesso`,failed:`Falhadas`,aborted:`Abortadas`,empty:`Nenhuma invocação corresponde aos filtros atuais.`,colSurface:`Superfície`,colTicket:`Ticket`,colCost:`Custo`,colTurns:`Turnos`,colTokens:`Tokens`,colModel:`Modelo`,colStatus:`Estado`,colStarted:`Início`,contractLayer:`Contract Layer`,contractLayerRefinement:`Refinamento do Contract Layer`,deleted:`(eliminado)`,provisionalTitleTooltip:`Título provisório do Explore — ainda não confirmado`,estimatedCostTooltip:`Estimado a partir da tabela de preços local — este fornecedor não reporta o custo nativamente.`,inferred:`inferido`,statusValue:{success:`sucesso`,failed:`falhada`,aborted:`abortada`},truncated:`A mostrar as primeiras {{shown}} de {{total}} linhas correspondentes.`,colProvider:`Provedor`,sortLabel:`Ordenar`,sortRecency:`Recente`,sortCost:`Custo`},p={title:`Analytics do Desktop`,refreshAria:`Atualizar analytics`,failedToLoad:`Falha ao carregar as analytics: {{error}}`,totalCost:`Custo total`,costToday:`{{value}} hoje`,totalJobs:`Total de jobs`,jobsToday:`{{n}} hoje`,successRate:`Taxa de sucesso`,acrossAllProjects:`em todos os projetos`,avgCostPerJob:`Custo médio / job`,periodAverage:`média do período`,costOverTime:`Custo entre projetos ao longo do tempo`,noCostData:`Sem dados de custo para este período`,projectComparison:`Comparação de projetos`,noProjects:`Nenhum projeto registado.`,jobsCount_one:`{{count}} job`,jobsCount_other:`{{count}} jobs`,successPct:`{{pct}}% de sucesso`,costByProject:`Custo por projeto`,includesEstimated:`~{{amount}} estimado`,includesEstimatedTooltip:`Inclui {{amount}} de custo estimado pela tabela de preços (codex/gemini), não faturado pelo provedor.`,includesEstimatedShort:`incl. estimado`,timelineEstimatedTooltip:`Alguns dias incluem custo estimado pela tabela de preços (codex/gemini) marcado com ~.`,estimatedBadge:`est.`,projectEstimatedTooltip:`{{amount}} do custo deste projeto é uma estimativa pela tabela de preços (codex/gemini), não faturado pelo provedor.`,statusBarEstimatedTooltip:`Inclui custo estimado pela tabela de preços (codex/gemini), não faturado pelo provedor.`},m={"7d":`Últimos 7 dias`,"30d":`Últimos 30 dias`,"90d":`Últimos 90 dias`,all:`Todo o período`,custom:`Intervalo personalizado`},h={surfaces:e,periods:t,runs_one:n,runs_other:r,page:i,hero:a,providerCard:o,timeline:s,quickVsExplore:c,models:l,scatter:u,topTickets:d,table:f,export:{summaryCsv:`CSV de resumo`,rawCsv:`CSV em bruto`,summaryJson:`JSON de resumo`,rawJson:`JSON em bruto`,downloading:`A transferir…`,noData:`Sem dados para os filtros atuais`,failed:`Falha na exportação`},desktop:p,windowLabels:m};export{h as default,p as desktop,a as hero,l as models,i as page,t as periods,o as providerCard,c as quickVsExplore,n as runs_one,r as runs_other,u as scatter,e as surfaces,f as table,s as timeline,d as topTickets,m as windowLabels};
@@ -0,0 +1 @@
1
+ var e={job:`Jobs`,quickSpec:`Quick`,exploreSpec:`Explore`,aiEdit:`Affinage`,smash:`SMASH`,fileSummary:`Résumés de fichiers`,loop:`Loops`,chatSidebar:`Chat`,specLauncher:`Lanceur de spec`,proposal:`Proposition`,agentStudio:`Agent Studio`,setup:`Configuration`},t={d7:`7j`,d30:`30j`,d90:`90j`,all:`Tout`,custom:`Personnalisé`,startDate:`Date de début`,endDate:`Date de fin`,to:`au`},n=`{{count}} exécution`,r=`{{count}} exécutions`,i={title:`Analytics`,all:`Tout`,engine:`Moteur`,ticketChip:`ticket #{{id}} · ✕`,failedToLoad:`Échec du chargement : {{error}}`,modelChip:`Modèle : {{model}}`,clearModelFilter:`Effacer le filtre de modèle`},a={spending:`Dépenses`,vsPrev:`{{pct}} % vs préc.`,invocations_one:`{{count}} invocation`,invocations_other:`{{count}} invocations`,tokens:`· {{tokens}} tokens`,tokensTooltip:`Total des tokens = entrée fraîche + sortie + lecture cache + création cache, sur toutes les invocations de cette période.`,includesEstimated:`· inclut ~{{amount}} estimés`,includesEstimatedTooltip:`Inclut {{amount}} de coût estimé pour les fournisseurs sans champ de coût natif (ex. codex via la table de tarifs locale).`,trackingStarted:`Suivi démarré le {{date}}`,trackingStartedFallback:`Le suivi démarre à la première invocation`,emptyState:`Aucune invocation pour cette période de filtrage.`,segmentTitle:`{{label}} : {{value}}`},o={title:`Par fournisseur`,description:`Répartition du coût entre les CLI IA de ce projet. Le préfixe <tilde>~</tilde> marque les lignes dont le coût est estimé à partir de la table de tarifs locale (le fournisseur ne le rapporte pas nativement).`,noCost:`Aucun coût enregistré sur cette période.`,segmentTitle:`{{label}} : {{value}} ({{count}})`,costUnavailable:`coût indisponible`,costUnavailableTooltip:`Ce fournisseur s'est exécuté mais son modèle n'est pas dans la table de tarifs, donc aucun coût n'a pu être calculé.`},s={title:`Chronologie quotidienne`,subtitle:`empilée par surface`,empty:`Aucune dépense sur cette période.`},c={title:`Quick vs Explore`,quick:`Quick`,explore:`Explore`,sparseCta:`Essayez Explore pour des specs plus riches`,runsSoFar_one:`{{count}} exécution pour l'instant`,runsSoFar_other:`{{count}} exécutions pour l'instant`,perSpec:`par spec`,createdRuns:`<strong>{{created}}</strong> créées · {{runs}} exécutions`,avgDuration:`{{duration}} en moyenne`,ratio:`{{ratio}}× de plus par spec`,estimatedTooltip:`Coût estimé (repli sur la table de tarifs codex/gemini, non facturé par le fournisseur)`,estimatedFootnote:`~ Inclut des coûts estimés (codex/gemini)`},l={title:`Modèles`,empty:`Aucun modèle enregistré.`,estimatedTooltip:`Estimé à partir de la table de tarifs locale — ce fournisseur ne signale pas le coût de manière native.`,others:`Autres`},u={title:`Coût vs tours`,empty:`Aucune invocation à tracer.`,turnsLabel:`tours`,costLabel:`coût`,truncated:`Affichage de {{shown}} sur {{total}} — le point le plus coûteux est conservé, mais les points précédents sont masqués`},d={title:`Top tickets`,empty:`Aucune activité de ticket sur cette période.`,breakdownItem:`{{n}} {{label}}`,unattributed:`Non attribué`,deletedTicket:`ticket supprimé #{{id}}`},f={title:`Toutes les invocations`,statusFilterAria:`Filtre de statut`,minCostFilterAria:`Filtre de coût minimum`,minCostPlaceholder:`≥ $0.00`,allStatus:`Tous les statuts`,success:`Succès`,failed:`Échec`,aborted:`Interrompu`,empty:`Aucune invocation ne correspond aux filtres actuels.`,colSurface:`Surface`,colTicket:`Ticket`,colCost:`Coût`,colTurns:`Tours`,colTokens:`Tokens`,colModel:`Modèle`,colStatus:`Statut`,colStarted:`Démarré`,contractLayer:`Contract Layer`,contractLayerRefinement:`Affinage Contract Layer`,deleted:`(supprimé)`,provisionalTitleTooltip:`Titre Explore provisoire — pas encore validé`,estimatedCostTooltip:`Estimé à partir de la table de tarifs locale — ce fournisseur ne rapporte pas le coût nativement.`,inferred:`inféré`,statusValue:{success:`succès`,failed:`échec`,aborted:`interrompu`},truncated:`Affichage des {{shown}} premières lignes sur {{total}} correspondantes.`,colProvider:`Fournisseur`,sortLabel:`Trier`,sortRecency:`Récent`,sortCost:`Coût`},p={title:`Analytics de Desktop`,refreshAria:`Actualiser les analytics`,failedToLoad:`Échec du chargement des analytics : {{error}}`,totalCost:`Coût total`,costToday:`{{value}} aujourd'hui`,totalJobs:`Total des jobs`,jobsToday:`{{n}} aujourd'hui`,successRate:`Taux de réussite`,acrossAllProjects:`sur tous les projets`,avgCostPerJob:`Coût moyen / job`,periodAverage:`moyenne de la période`,costOverTime:`Coût inter-projets dans le temps`,noCostData:`Aucune donnée de coût pour cette période`,projectComparison:`Comparaison des projets`,noProjects:`Aucun projet enregistré.`,jobsCount_one:`{{count}} job`,jobsCount_other:`{{count}} jobs`,successPct:`{{pct}} % de réussite`,costByProject:`Coût par projet`,includesEstimated:`~{{amount}} estimé`,includesEstimatedTooltip:`Inclut {{amount}} de coût estimé par la table de tarifs (codex/gemini), non facturé par le fournisseur.`,includesEstimatedShort:`incl. estimé`,timelineEstimatedTooltip:`Certains jours incluent un coût estimé par la table de tarifs (codex/gemini) marqué d'un ~.`,estimatedBadge:`est.`,projectEstimatedTooltip:`{{amount}} du coût de ce projet est une estimation par table de tarifs (codex/gemini), non facturé par le fournisseur.`,statusBarEstimatedTooltip:`Inclut un coût estimé par la table de tarifs (codex/gemini), non facturé par le fournisseur.`},m={"7d":`7 derniers jours`,"30d":`30 derniers jours`,"90d":`90 derniers jours`,all:`Tout l'historique`,custom:`Plage personnalisée`},h={surfaces:e,periods:t,runs_one:n,runs_other:r,page:i,hero:a,providerCard:o,timeline:s,quickVsExplore:c,models:l,scatter:u,topTickets:d,table:f,export:{summaryCsv:`CSV résumé`,rawCsv:`CSV brut`,summaryJson:`JSON résumé`,rawJson:`JSON brut`,downloading:`Téléchargement…`,noData:`Aucune donnée pour les filtres actuels`,failed:`Échec de l'export`},desktop:p,windowLabels:m};export{h as default,p as desktop,a as hero,l as models,i as page,t as periods,o as providerCard,c as quickVsExplore,n as runs_one,r as runs_other,u as scatter,e as surfaces,f as table,s as timeline,d as topTickets,m as windowLabels};
@@ -0,0 +1 @@
1
+ var e={job:`任务`,quickSpec:`Quick`,exploreSpec:`Explore`,aiEdit:`AI 编辑`,smash:`SMASH`,fileSummary:`文件摘要`,loop:`Loops`,chatSidebar:`对话`,specLauncher:`规格启动器`,proposal:`提案`,agentStudio:`Agent Studio`,setup:`设置`},t={d7:`7天`,d30:`30天`,d90:`90天`,all:`全部`,custom:`自定义`,startDate:`开始日期`,endDate:`结束日期`,to:`至`},n=`{{count}} 次运行`,r=`{{count}} 次运行`,i={title:`分析`,all:`全部`,engine:`引擎`,ticketChip:`工单 #{{id}} · ✕`,failedToLoad:`加载失败:{{error}}`,modelChip:`模型:{{model}}`,clearModelFilter:`清除模型筛选`},a={spending:`支出`,vsPrev:`较上期 {{pct}}%`,invocations_one:`{{count}} 次调用`,invocations_other:`{{count}} 次调用`,tokens:`· {{tokens}} token`,tokensTooltip:`总 token 数 = 此时间窗口内所有调用的新输入 + 输出 + 缓存读取 + 缓存创建之和。`,includesEstimated:`· 含约 {{amount}} 估算值`,includesEstimatedTooltip:`包含 {{amount}} 的估算成本,来自不原生上报成本的提供方(例如 codex,按本地价格表估算)。`,trackingStarted:`追踪始于 {{date}}`,trackingStartedFallback:`首次调用后开始追踪`,emptyState:`当前筛选窗口内暂无调用。`,segmentTitle:`{{label}}:{{value}}`},o={title:`按提供方`,description:`此项目中各 AI CLI 的成本分布。<tilde>~</tilde> 前缀表示该行成本由本地价格表估算(提供方不原生上报)。`,noCost:`此时间窗口内暂无成本记录。`,segmentTitle:`{{label}}:{{value}}({{count}})`,costUnavailable:`成本不可用`,costUnavailableTooltip:`此提供商已运行,但其模型不在价格表中,因此无法计算成本。`},s={title:`每日时间线`,subtitle:`按来源堆叠`,empty:`此期间没有支出。`},c={title:`Quick vs Explore`,quick:`Quick`,explore:`Explore`,sparseCta:`试试 Explore,获得更丰富的 spec`,runsSoFar_one:`目前 {{count}} 次运行`,runsSoFar_other:`目前 {{count}} 次运行`,perSpec:`每个 spec`,createdRuns:`已创建 <strong>{{created}}</strong> · {{runs}} 次运行`,avgDuration:`平均 {{duration}}`,ratio:`每个 spec 多 {{ratio}}×`,estimatedTooltip:`估算成本(codex/gemini 价格表回退,非提供商计费)`,estimatedFootnote:`~ 包含估算成本(codex/gemini)`},l={title:`模型`,empty:`暂无模型记录。`,estimatedTooltip:`根据本地价格表估算 — 此提供商不原生报告成本。`,others:`其他`},u={title:`成本 vs 轮次`,empty:`暂无可绘制的调用。`,turnsLabel:`轮次`,costLabel:`成本`,truncated:`显示 {{total}} 中的 {{shown}} 个 — 保留成本最高的点,但隐藏较早的点`},d={title:`热门工单`,empty:`此期间没有工单活动。`,breakdownItem:`{{n}} {{label}}`,unattributed:`未归属`,deletedTicket:`已删除工单 #{{id}}`},f={title:`全部调用`,statusFilterAria:`状态筛选`,minCostFilterAria:`最低成本筛选`,minCostPlaceholder:`≥ $0.00`,allStatus:`全部状态`,success:`成功`,failed:`失败`,aborted:`已中止`,empty:`没有符合当前筛选条件的调用。`,colSurface:`来源`,colTicket:`工单`,colCost:`成本`,colTurns:`轮次`,colTokens:`Token`,colModel:`模型`,colStatus:`状态`,colStarted:`开始时间`,contractLayer:`Contract Layer`,contractLayerRefinement:`Contract Layer 增强`,deleted:`(已删除)`,provisionalTitleTooltip:`Explore 临时标题——尚未提交`,estimatedCostTooltip:`按本地价格表估算——此提供方不原生上报成本。`,inferred:`推断`,statusValue:{success:`成功`,failed:`失败`,aborted:`已中止`},truncated:`显示前 {{shown}} 条,共 {{total}} 条匹配记录。`,colProvider:`提供商`,sortLabel:`排序`,sortRecency:`最近`,sortCost:`成本`},p={title:`Desktop 分析`,refreshAria:`刷新分析数据`,failedToLoad:`加载分析数据失败:{{error}}`,totalCost:`总成本`,costToday:`今日 {{value}}`,totalJobs:`任务总数`,jobsToday:`今日 {{n}} 个`,successRate:`成功率`,acrossAllProjects:`所有项目汇总`,avgCostPerJob:`平均成本 / 任务`,periodAverage:`期间平均`,costOverTime:`跨项目成本走势`,noCostData:`此期间无成本数据`,projectComparison:`项目对比`,noProjects:`尚未注册任何项目。`,jobsCount_one:`{{count}} 个任务`,jobsCount_other:`{{count}} 个任务`,successPct:`成功率 {{pct}}%`,costByProject:`按项目统计成本`,includesEstimated:`~{{amount}} 估算`,includesEstimatedTooltip:`包含 {{amount}} 的价格表估算成本(codex/gemini),非提供商计费。`,includesEstimatedShort:`含估算`,timelineEstimatedTooltip:`某些天包含以 ~ 标记的价格表估算成本(codex/gemini)。`,estimatedBadge:`估算`,projectEstimatedTooltip:`此项目成本中的 {{amount}} 为价格表估算(codex/gemini),非提供商计费。`,statusBarEstimatedTooltip:`包含价格表估算成本(codex/gemini),非提供商计费。`},m={"7d":`最近 7 天`,"30d":`最近 30 天`,"90d":`最近 90 天`,all:`全部时间`,custom:`自定义范围`},h={surfaces:e,periods:t,runs_one:n,runs_other:r,page:i,hero:a,providerCard:o,timeline:s,quickVsExplore:c,models:l,scatter:u,topTickets:d,table:f,export:{summaryCsv:`摘要 CSV`,rawCsv:`原始 CSV`,summaryJson:`摘要 JSON`,rawJson:`原始 JSON`,downloading:`正在下载…`,noData:`当前筛选条件下无数据`,failed:`导出失败`},desktop:p,windowLabels:m};export{h as default,p as desktop,a as hero,l as models,i as page,t as periods,o as providerCard,c as quickVsExplore,n as runs_one,r as runs_other,u as scatter,e as surfaces,f as table,s as timeline,d as topTickets,m as windowLabels};
@@ -0,0 +1 @@
1
+ var e={job:`Jobs`,quickSpec:`Quick`,exploreSpec:`Explore`,aiEdit:`Verfeinern`,smash:`SMASH`,fileSummary:`Dateizusammenfassungen`,loop:`Loops`,chatSidebar:`Chat`,specLauncher:`Spec-Starter`,proposal:`Vorschlag`,agentStudio:`Agent Studio`,setup:`Einrichtung`},t={d7:`7d`,d30:`30d`,d90:`90d`,all:`Alle`,custom:`Benutzerdefiniert`,startDate:`Startdatum`,endDate:`Enddatum`,to:`bis`},n=`{{count}} Lauf`,r=`{{count}} Läufe`,i={title:`Analytics`,all:`Alle`,engine:`Engine`,ticketChip:`Ticket #{{id}} · ✕`,failedToLoad:`Laden fehlgeschlagen: {{error}}`,modelChip:`Modell: {{model}}`,clearModelFilter:`Modellfilter zurücksetzen`},a={spending:`Ausgaben`,vsPrev:`{{pct}} % ggü. Vorperiode`,invocations_one:`{{count}} Aufruf`,invocations_other:`{{count}} Aufrufe`,tokens:`· {{tokens}} Tokens`,tokensTooltip:`Tokens gesamt = neue Eingabe + Ausgabe + Cache-Read + Cache-Create über alle Aufrufe in diesem Zeitraum.`,includesEstimated:`· enthält ~{{amount}} geschätzt`,includesEstimatedTooltip:`Enthält {{amount}} geschätzte Kosten von Providern ohne natives Kostenfeld (z. B. codex über die lokale Preistabelle).`,trackingStarted:`Tracking gestartet am {{date}}`,trackingStartedFallback:`Tracking beginnt mit dem ersten Aufruf`,emptyState:`Noch keine Aufrufe für diesen Filterzeitraum.`,segmentTitle:`{{label}}: {{value}}`},o={title:`Nach Provider`,description:`So verteilen sich die Kosten auf die KI-CLIs in diesem Projekt. Das Präfix <tilde>~</tilde> markiert Zeilen, deren Kosten über die lokale Preistabelle geschätzt sind (der Provider meldet sie nicht nativ).`,noCost:`Noch keine Kosten in diesem Zeitraum erfasst.`,segmentTitle:`{{label}}: {{value}} ({{count}})`,costUnavailable:`Kosten nicht verfügbar`,costUnavailableTooltip:`Dieser Anbieter lief, aber sein Modell ist nicht in der Preistabelle, daher konnten keine Kosten berechnet werden.`},s={title:`Täglicher Verlauf`,subtitle:`gestapelt nach Surface`,empty:`Keine Ausgaben in diesem Zeitraum.`},c={title:`Quick vs. Explore`,quick:`Quick`,explore:`Explore`,sparseCta:`Probiere Explore für reichhaltigere Specs`,runsSoFar_one:`bisher {{count}} Lauf`,runsSoFar_other:`bisher {{count}} Läufe`,perSpec:`pro Spec`,createdRuns:`<strong>{{created}}</strong> erstellt · {{runs}} Läufe`,avgDuration:`Ø {{duration}}`,ratio:`{{ratio}}× mehr pro Spec`,estimatedTooltip:`Geschätzte Kosten (Rückgriff auf Preistabelle für codex/gemini, nicht vom Anbieter abgerechnet)`,estimatedFootnote:`~ Enthält geschätzte Kosten (codex/gemini)`},l={title:`Modelle`,empty:`Keine Modelle erfasst.`,estimatedTooltip:`Geschätzt aus der lokalen Preistabelle — dieser Anbieter meldet die Kosten nicht nativ.`,others:`Andere`},u={title:`Kosten vs. Turns`,empty:`Keine Aufrufe zum Darstellen.`,turnsLabel:`Turns`,costLabel:`Kosten`,truncated:`Zeige {{shown}} von {{total}} — der teuerste Punkt bleibt erhalten, frühere Punkte werden ausgeblendet`},d={title:`Top-Tickets`,empty:`Keine Ticket-Aktivität in diesem Zeitraum.`,breakdownItem:`{{n}} {{label}}`,unattributed:`Nicht zugeordnet`,deletedTicket:`gelöschtes Ticket #{{id}}`},f={title:`Alle Aufrufe`,statusFilterAria:`Statusfilter`,minCostFilterAria:`Mindestkosten-Filter`,minCostPlaceholder:`≥ $0.00`,allStatus:`Alle Status`,success:`Erfolgreich`,failed:`Fehlgeschlagen`,aborted:`Abgebrochen`,empty:`Keine Aufrufe entsprechen den aktuellen Filtern.`,colSurface:`Surface`,colTicket:`Ticket`,colCost:`Kosten`,colTurns:`Turns`,colTokens:`Tokens`,colModel:`Modell`,colStatus:`Status`,colStarted:`Gestartet`,contractLayer:`Contract Layer`,contractLayerRefinement:`Contract-Layer-Verfeinerung`,deleted:`(gelöscht)`,provisionalTitleTooltip:`Vorläufiger Explore-Titel – noch nicht committet`,estimatedCostTooltip:`Geschätzt anhand der lokalen Preistabelle – dieser Provider meldet Kosten nicht nativ.`,inferred:`abgeleitet`,statusValue:{success:`erfolgreich`,failed:`fehlgeschlagen`,aborted:`abgebrochen`},truncated:`Zeige die ersten {{shown}} von {{total}} passenden Zeilen.`,colProvider:`Anbieter`,sortLabel:`Sortieren`,sortRecency:`Neueste`,sortCost:`Kosten`},p={title:`Desktop-Analytics`,refreshAria:`Analytics aktualisieren`,failedToLoad:`Analytics konnten nicht geladen werden: {{error}}`,totalCost:`Gesamtkosten`,costToday:`{{value}} heute`,totalJobs:`Jobs gesamt`,jobsToday:`{{n}} heute`,successRate:`Erfolgsquote`,acrossAllProjects:`über alle Projekte`,avgCostPerJob:`Ø Kosten / Job`,periodAverage:`Durchschnitt im Zeitraum`,costOverTime:`Projektübergreifende Kosten im Zeitverlauf`,noCostData:`Keine Kostendaten für diesen Zeitraum`,projectComparison:`Projektvergleich`,noProjects:`Keine Projekte registriert.`,jobsCount_one:`{{count}} Job`,jobsCount_other:`{{count}} Jobs`,successPct:`{{pct}} % Erfolg`,costByProject:`Kosten nach Projekt`,includesEstimated:`~{{amount}} geschätzt`,includesEstimatedTooltip:`Enthält {{amount}} geschätzte Kosten aus der Preistabelle (codex/gemini), nicht vom Anbieter abgerechnet.`,includesEstimatedShort:`inkl. geschätzt`,timelineEstimatedTooltip:`Einige Tage enthalten geschätzte Kosten aus der Preistabelle (codex/gemini), markiert mit ~.`,estimatedBadge:`gesch.`,projectEstimatedTooltip:`{{amount}} der Kosten dieses Projekts sind eine Schätzung aus der Preistabelle (codex/gemini), nicht vom Anbieter abgerechnet.`,statusBarEstimatedTooltip:`Enthält geschätzte Kosten aus der Preistabelle (codex/gemini), nicht vom Anbieter abgerechnet.`},m={"7d":`Letzte 7 Tage`,"30d":`Letzte 30 Tage`,"90d":`Letzte 90 Tage`,all:`Gesamter Zeitraum`,custom:`Benutzerdefiniert`},h={surfaces:e,periods:t,runs_one:n,runs_other:r,page:i,hero:a,providerCard:o,timeline:s,quickVsExplore:c,models:l,scatter:u,topTickets:d,table:f,export:{summaryCsv:`Zusammenfassung (CSV)`,rawCsv:`Rohdaten (CSV)`,summaryJson:`Zusammenfassung (JSON)`,rawJson:`Rohdaten (JSON)`,downloading:`Wird heruntergeladen…`,noData:`Keine Daten für aktuelle Filter`,failed:`Export fehlgeschlagen`},desktop:p,windowLabels:m};export{h as default,p as desktop,a as hero,l as models,i as page,t as periods,o as providerCard,c as quickVsExplore,n as runs_one,r as runs_other,u as scatter,e as surfaces,f as table,s as timeline,d as topTickets,m as windowLabels};
@@ -1 +1 @@
1
- import{a as e,o as t}from"./index-CG4z4_Mq.js";var n=class{constructor(){this.eventListeners=Object.create(null)}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}on(e,t){return e in this.eventListeners?this.eventListeners[e].push(t):this.eventListeners[e]=[t],this}once(e,t){let n=r=>{this.removeListener(e,n),t(r)};return this.addListener(e,n)}off(e,t){return e in this.eventListeners&&(this.eventListeners[e]=this.eventListeners[e].filter(e=>e!==t)),this}removeAllListeners(e){return e?delete this.eventListeners[e]:this.eventListeners=Object.create(null),this}emit(e,t){if(e in this.eventListeners){let n=this.eventListeners[e];for(let e of n)e(t);return!0}return!1}listenerCount(e){return e in this.eventListeners?this.eventListeners[e].length:0}prependListener(e,t){return e in this.eventListeners?this.eventListeners[e].unshift(t):this.eventListeners[e]=[t],this}prependOnceListener(e,t){let n=r=>{this.removeListener(e,n),t(r)};return this.prependListener(e,n)}},r=class{constructor(e){this.pid=e}async write(e){await t(`plugin:shell|stdin_write`,{pid:this.pid,buffer:e})}async kill(){await t(`plugin:shell|kill`,{cmd:`killChild`,pid:this.pid})}},i=class i extends n{constructor(e,t=[],r){super(),this.stdout=new n,this.stderr=new n,this.program=e,this.args=typeof t==`string`?[t]:t,this.options=r??{}}static create(e,t=[],n){return new i(e,t,n)}static sidecar(e,t=[],n){let r=new i(e,t,n);return r.options.sidecar=!0,r}async spawn(){let n=this.program,i=this.args,a=this.options;typeof i==`object`&&Object.freeze(i);let o=new e;return o.onmessage=e=>{switch(e.event){case`Error`:this.emit(`error`,e.payload);break;case`Terminated`:this.emit(`close`,e.payload);break;case`Stdout`:this.stdout.emit(`data`,e.payload);break;case`Stderr`:this.stderr.emit(`data`,e.payload);break}},await t(`plugin:shell|spawn`,{program:n,args:i,options:a,onEvent:o}).then(e=>new r(e))}async execute(){let e=this.program,n=this.args,r=this.options;return typeof n==`object`&&Object.freeze(n),await t(`plugin:shell|execute`,{program:e,args:n,options:r})}};async function a(e,n){await t(`plugin:shell|open`,{path:e,with:n})}export{r as Child,i as Command,n as EventEmitter,a as open};
1
+ import{a as e,o as t}from"./index-n2PmJGF6.js";var n=class{constructor(){this.eventListeners=Object.create(null)}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}on(e,t){return e in this.eventListeners?this.eventListeners[e].push(t):this.eventListeners[e]=[t],this}once(e,t){let n=r=>{this.removeListener(e,n),t(r)};return this.addListener(e,n)}off(e,t){return e in this.eventListeners&&(this.eventListeners[e]=this.eventListeners[e].filter(e=>e!==t)),this}removeAllListeners(e){return e?delete this.eventListeners[e]:this.eventListeners=Object.create(null),this}emit(e,t){if(e in this.eventListeners){let n=this.eventListeners[e];for(let e of n)e(t);return!0}return!1}listenerCount(e){return e in this.eventListeners?this.eventListeners[e].length:0}prependListener(e,t){return e in this.eventListeners?this.eventListeners[e].unshift(t):this.eventListeners[e]=[t],this}prependOnceListener(e,t){let n=r=>{this.removeListener(e,n),t(r)};return this.prependListener(e,n)}},r=class{constructor(e){this.pid=e}async write(e){await t(`plugin:shell|stdin_write`,{pid:this.pid,buffer:e})}async kill(){await t(`plugin:shell|kill`,{cmd:`killChild`,pid:this.pid})}},i=class i extends n{constructor(e,t=[],r){super(),this.stdout=new n,this.stderr=new n,this.program=e,this.args=typeof t==`string`?[t]:t,this.options=r??{}}static create(e,t=[],n){return new i(e,t,n)}static sidecar(e,t=[],n){let r=new i(e,t,n);return r.options.sidecar=!0,r}async spawn(){let n=this.program,i=this.args,a=this.options;typeof i==`object`&&Object.freeze(i);let o=new e;return o.onmessage=e=>{switch(e.event){case`Error`:this.emit(`error`,e.payload);break;case`Terminated`:this.emit(`close`,e.payload);break;case`Stdout`:this.stdout.emit(`data`,e.payload);break;case`Stderr`:this.stderr.emit(`data`,e.payload);break}},await t(`plugin:shell|spawn`,{program:n,args:i,options:a,onEvent:o}).then(e=>new r(e))}async execute(){let e=this.program,n=this.args,r=this.options;return typeof n==`object`&&Object.freeze(n),await t(`plugin:shell|execute`,{program:e,args:n,options:r})}};async function a(e,n){await t(`plugin:shell|open`,{path:e,with:n})}export{r as Child,i as Command,n as EventEmitter,a as open};
@@ -1 +1 @@
1
- import{o as e}from"./index-CG4z4_Mq.js";function t(e){if(e!==void 0){if(typeof e==`string`)return e;if(`ok`in e&&`cancel`in e)return{OkCancelCustom:[e.ok,e.cancel]};if(`yes`in e&&`no`in e&&`cancel`in e)return{YesNoCancelCustom:[e.yes,e.no,e.cancel]};if(`ok`in e)return{OkCustom:e.ok}}}async function n(t={}){return typeof t==`object`&&Object.freeze(t),await e(`plugin:dialog|open`,{options:t})}async function r(t={}){return typeof t==`object`&&Object.freeze(t),await e(`plugin:dialog|save`,{options:t})}async function i(n,r){return await e(`plugin:dialog|message`,{message:n,title:r?.title,kind:r?.kind,buttons:t(r?.buttons)})}async function a(e,t){let n=typeof t==`string`?{title:t}:t;return n&&!n.buttons&&n.okLabel&&(n.buttons={ok:n.okLabel}),i(e,n)}async function o(e,t){let n=typeof t==`string`?{title:t}:t,r=n?.okLabel||n?.cancelLabel,a=n?.okLabel??`Yes`;return await i(e,{title:n?.title,kind:n?.kind,buttons:r?{ok:a,cancel:n.cancelLabel??`No`}:`YesNo`})===a}async function s(e,t){let n=typeof t==`string`?{title:t}:t,r=n?.okLabel||n?.cancelLabel,a=n?.okLabel??`Ok`;return await i(e,{title:n?.title,kind:n?.kind,buttons:r?{ok:a,cancel:n.cancelLabel??`Cancel`}:`OkCancel`})===a}export{o as ask,s as confirm,a as message,n as open,r as save};
1
+ import{o as e}from"./index-n2PmJGF6.js";function t(e){if(e!==void 0){if(typeof e==`string`)return e;if(`ok`in e&&`cancel`in e)return{OkCancelCustom:[e.ok,e.cancel]};if(`yes`in e&&`no`in e&&`cancel`in e)return{YesNoCancelCustom:[e.yes,e.no,e.cancel]};if(`ok`in e)return{OkCustom:e.ok}}}async function n(t={}){return typeof t==`object`&&Object.freeze(t),await e(`plugin:dialog|open`,{options:t})}async function r(t={}){return typeof t==`object`&&Object.freeze(t),await e(`plugin:dialog|save`,{options:t})}async function i(n,r){return await e(`plugin:dialog|message`,{message:n,title:r?.title,kind:r?.kind,buttons:t(r?.buttons)})}async function a(e,t){let n=typeof t==`string`?{title:t}:t;return n&&!n.buttons&&n.okLabel&&(n.buttons={ok:n.okLabel}),i(e,n)}async function o(e,t){let n=typeof t==`string`?{title:t}:t,r=n?.okLabel||n?.cancelLabel,a=n?.okLabel??`Yes`;return await i(e,{title:n?.title,kind:n?.kind,buttons:r?{ok:a,cancel:n.cancelLabel??`No`}:`YesNo`})===a}async function s(e,t){let n=typeof t==`string`?{title:t}:t,r=n?.okLabel||n?.cancelLabel,a=n?.okLabel??`Ok`;return await i(e,{title:n?.title,kind:n?.kind,buttons:r?{ok:a,cancel:n.cancelLabel??`Cancel`}:`OkCancel`})===a}export{o as ask,s as confirm,a as message,n as open,r as save};