@recombine-ai/platform 0.9.1-test.0 → 0.9.1-test.2

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 (175) hide show
  1. package/build/bosun-app/frontend/client/_app/immutable/chunks/B3sRmUmR.js +1 -0
  2. package/build/bosun-app/frontend/client/_app/immutable/chunks/B3sRmUmR.js.br +0 -0
  3. package/build/bosun-app/frontend/client/_app/immutable/chunks/B3sRmUmR.js.gz +0 -0
  4. package/build/bosun-app/frontend/client/_app/immutable/chunks/BIYJrTTr.js +1 -0
  5. package/build/bosun-app/frontend/client/_app/immutable/chunks/BIYJrTTr.js.br +0 -0
  6. package/build/bosun-app/frontend/client/_app/immutable/chunks/{DdpjwoIh.js.gz → BIYJrTTr.js.gz} +0 -0
  7. package/build/bosun-app/frontend/client/_app/immutable/chunks/{YE72mAzG.js → COI2cH3y.js} +1 -1
  8. package/build/bosun-app/frontend/client/_app/immutable/chunks/COI2cH3y.js.br +3 -0
  9. package/build/bosun-app/frontend/client/_app/immutable/chunks/COI2cH3y.js.gz +0 -0
  10. package/build/bosun-app/frontend/client/_app/immutable/chunks/{7py9MbgR.js → CdiiHmb_.js} +1 -1
  11. package/build/bosun-app/frontend/client/_app/immutable/chunks/CdiiHmb_.js.br +0 -0
  12. package/build/bosun-app/frontend/client/_app/immutable/chunks/CdiiHmb_.js.gz +0 -0
  13. package/build/bosun-app/frontend/client/_app/immutable/chunks/YRWW-SW8.js +1 -0
  14. package/build/bosun-app/frontend/client/_app/immutable/chunks/YRWW-SW8.js.br +0 -0
  15. package/build/bosun-app/frontend/client/_app/immutable/chunks/YRWW-SW8.js.gz +0 -0
  16. package/build/bosun-app/frontend/client/_app/immutable/entry/{app.B0WyhTXQ.js → app.0r1adPhk.js} +2 -2
  17. package/build/bosun-app/frontend/client/_app/immutable/entry/app.0r1adPhk.js.br +0 -0
  18. package/build/bosun-app/frontend/client/_app/immutable/entry/app.0r1adPhk.js.gz +0 -0
  19. package/build/bosun-app/frontend/client/_app/immutable/entry/start.BNSaABB8.js +1 -0
  20. package/build/bosun-app/frontend/client/_app/immutable/entry/start.BNSaABB8.js.br +0 -0
  21. package/build/bosun-app/frontend/client/_app/immutable/entry/start.BNSaABB8.js.gz +0 -0
  22. package/build/bosun-app/frontend/client/_app/immutable/nodes/{0.B-xccOtn.js → 0.BCslgDHp.js} +1 -1
  23. package/build/bosun-app/frontend/client/_app/immutable/nodes/0.BCslgDHp.js.br +0 -0
  24. package/build/bosun-app/frontend/client/_app/immutable/nodes/0.BCslgDHp.js.gz +0 -0
  25. package/build/bosun-app/frontend/client/_app/immutable/nodes/{1.D3-4ehn_.js → 1.DfDHVqM0.js} +1 -1
  26. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.DfDHVqM0.js.br +0 -0
  27. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.DfDHVqM0.js.gz +0 -0
  28. package/build/bosun-app/frontend/client/_app/immutable/nodes/{10.DWK1AGJD.js → 10.BXbQQ1q5.js} +1 -1
  29. package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BXbQQ1q5.js.br +0 -0
  30. package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BXbQQ1q5.js.gz +0 -0
  31. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.DSps31HJ.js +3 -0
  32. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.DSps31HJ.js.br +0 -0
  33. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.DSps31HJ.js.gz +0 -0
  34. package/build/bosun-app/frontend/client/_app/immutable/nodes/{18.Bjr8I-7a.js → 18.8hAfbPPt.js} +1 -1
  35. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.8hAfbPPt.js.br +0 -0
  36. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.8hAfbPPt.js.gz +0 -0
  37. package/build/bosun-app/frontend/client/_app/immutable/nodes/{2.BDwIMjum.js → 2.DLZcnXo3.js} +1 -1
  38. package/build/bosun-app/frontend/client/_app/immutable/nodes/2.DLZcnXo3.js.br +0 -0
  39. package/build/bosun-app/frontend/client/_app/immutable/nodes/2.DLZcnXo3.js.gz +0 -0
  40. package/build/bosun-app/frontend/client/_app/immutable/nodes/{3.BX2jDq0d.js → 3.Dzl7FcjU.js} +1 -1
  41. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.Dzl7FcjU.js.br +0 -0
  42. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.Dzl7FcjU.js.gz +0 -0
  43. package/build/bosun-app/frontend/client/_app/immutable/nodes/{4.B0PTNAkY.js → 4.BlHeYRVW.js} +1 -1
  44. package/build/bosun-app/frontend/client/_app/immutable/nodes/4.BlHeYRVW.js.br +0 -0
  45. package/build/bosun-app/frontend/client/_app/immutable/nodes/4.BlHeYRVW.js.gz +0 -0
  46. package/build/bosun-app/frontend/client/_app/immutable/nodes/{5.DtXjhQi9.js → 5.DE3muGEs.js} +1 -1
  47. package/build/bosun-app/frontend/client/_app/immutable/nodes/5.DE3muGEs.js.br +0 -0
  48. package/build/bosun-app/frontend/client/_app/immutable/nodes/5.DE3muGEs.js.gz +0 -0
  49. package/build/bosun-app/frontend/client/_app/immutable/nodes/{6.CIpO8gDQ.js → 6.DauPUI6w.js} +1 -1
  50. package/build/bosun-app/frontend/client/_app/immutable/nodes/6.DauPUI6w.js.br +0 -0
  51. package/build/bosun-app/frontend/client/_app/immutable/nodes/6.DauPUI6w.js.gz +0 -0
  52. package/build/bosun-app/frontend/client/_app/immutable/nodes/{8.Dljnutoy.js → 8.DIwMEVk7.js} +1 -1
  53. package/build/bosun-app/frontend/client/_app/immutable/nodes/8.DIwMEVk7.js.br +0 -0
  54. package/build/bosun-app/frontend/client/_app/immutable/nodes/8.DIwMEVk7.js.gz +0 -0
  55. package/build/bosun-app/frontend/client/_app/immutable/nodes/{9.BQUquGeo.js → 9.BoyHpLCi.js} +1 -1
  56. package/build/bosun-app/frontend/client/_app/immutable/nodes/9.BoyHpLCi.js.br +0 -0
  57. package/build/bosun-app/frontend/client/_app/immutable/nodes/9.BoyHpLCi.js.gz +0 -0
  58. package/build/bosun-app/frontend/client/_app/version.json +1 -1
  59. package/build/bosun-app/frontend/client/_app/version.json.br +0 -0
  60. package/build/bosun-app/frontend/client/_app/version.json.gz +0 -0
  61. package/build/bosun-app/frontend/handler.js +4 -4
  62. package/build/bosun-app/frontend/index.js +4 -4
  63. package/build/bosun-app/frontend/server/chunks/chunks/{internal.js-BzUEmxtM.js → internal.js-Cr3b1H4k.js} +2 -2
  64. package/build/bosun-app/frontend/server/chunks/chunks/{internal.js-BzUEmxtM.js.map → internal.js-Cr3b1H4k.js.map} +1 -1
  65. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/latency/{_page.svelte.js-SjAtxtA0.js → _page.svelte.js-ib8_Fg04.js} +27 -2
  66. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/latency/_page.svelte.js-ib8_Fg04.js.map +1 -0
  67. package/build/bosun-app/frontend/server/chunks/{handler-CFjEFb1h.js → handler-DqsNau3u.js} +3 -3
  68. package/build/bosun-app/frontend/server/chunks/{handler-CFjEFb1h.js.map → handler-DqsNau3u.js.map} +1 -1
  69. package/build/bosun-app/frontend/server/chunks/{index.js-CxSWZHu3.js → index.js-DZUC5rml.js} +2 -2
  70. package/build/bosun-app/frontend/server/chunks/{index.js-CxSWZHu3.js.map → index.js-DZUC5rml.js.map} +1 -1
  71. package/build/bosun-app/frontend/server/chunks/{manifest.js-B77RWxaX.js → manifest.js-Ba8Iww95.js} +14 -14
  72. package/build/bosun-app/frontend/server/chunks/{manifest.js-B77RWxaX.js.map → manifest.js-Ba8Iww95.js.map} +1 -1
  73. package/build/bosun-app/frontend/server/chunks/nodes/{0.js-B7wbeJFl.js → 0.js-ErWLOg9o.js} +2 -2
  74. package/build/bosun-app/frontend/server/chunks/nodes/{0.js-B7wbeJFl.js.map → 0.js-ErWLOg9o.js.map} +1 -1
  75. package/build/bosun-app/frontend/server/chunks/nodes/{1.js-CNTEs79R.js → 1.js-BucIct8J.js} +2 -2
  76. package/build/bosun-app/frontend/server/chunks/nodes/{1.js-CNTEs79R.js.map → 1.js-BucIct8J.js.map} +1 -1
  77. package/build/bosun-app/frontend/server/chunks/nodes/{10.js-3vQy72mr.js → 10.js-CmuGuxqs.js} +2 -2
  78. package/build/bosun-app/frontend/server/chunks/nodes/{10.js-3vQy72mr.js.map → 10.js-CmuGuxqs.js.map} +1 -1
  79. package/build/bosun-app/frontend/server/chunks/nodes/{17.js-BQznQUjn.js → 17.js-R-YLRxxY.js} +3 -3
  80. package/build/bosun-app/frontend/server/chunks/nodes/{17.js-BQznQUjn.js.map → 17.js-R-YLRxxY.js.map} +1 -1
  81. package/build/bosun-app/frontend/server/chunks/nodes/{18.js-Bo2MexI0.js → 18.js-Bwqlseie.js} +2 -2
  82. package/build/bosun-app/frontend/server/chunks/nodes/{18.js-Bo2MexI0.js.map → 18.js-Bwqlseie.js.map} +1 -1
  83. package/build/bosun-app/frontend/server/chunks/nodes/{2.js-BosH410E.js → 2.js-DWsjBpYQ.js} +2 -2
  84. package/build/bosun-app/frontend/server/chunks/nodes/{2.js-BosH410E.js.map → 2.js-DWsjBpYQ.js.map} +1 -1
  85. package/build/bosun-app/frontend/server/chunks/nodes/{3.js-mn0WrcAG.js → 3.js-Bw_XtVfk.js} +2 -2
  86. package/build/bosun-app/frontend/server/chunks/nodes/{3.js-mn0WrcAG.js.map → 3.js-Bw_XtVfk.js.map} +1 -1
  87. package/build/bosun-app/frontend/server/chunks/nodes/{4.js-B8BFcPBH.js → 4.js-ZjhIMlzQ.js} +2 -2
  88. package/build/bosun-app/frontend/server/chunks/nodes/{4.js-B8BFcPBH.js.map → 4.js-ZjhIMlzQ.js.map} +1 -1
  89. package/build/bosun-app/frontend/server/chunks/nodes/{5.js-C7XaU1e9.js → 5.js-1hrIQeCi.js} +2 -2
  90. package/build/bosun-app/frontend/server/chunks/nodes/{5.js-C7XaU1e9.js.map → 5.js-1hrIQeCi.js.map} +1 -1
  91. package/build/bosun-app/frontend/server/chunks/nodes/{6.js-BeGnlxE4.js → 6.js-DqwEZ7GV.js} +2 -2
  92. package/build/bosun-app/frontend/server/chunks/nodes/{6.js-BeGnlxE4.js.map → 6.js-DqwEZ7GV.js.map} +1 -1
  93. package/build/bosun-app/frontend/server/chunks/nodes/{8.js-DFxb3iv1.js → 8.js-DN3WDIfO.js} +2 -2
  94. package/build/bosun-app/frontend/server/chunks/nodes/{8.js-DFxb3iv1.js.map → 8.js-DN3WDIfO.js.map} +1 -1
  95. package/build/bosun-app/frontend/server/chunks/nodes/{9.js-DjLvoBf2.js → 9.js-C_SjLW8b.js} +2 -2
  96. package/build/bosun-app/frontend/server/chunks/nodes/{9.js-DjLvoBf2.js.map → 9.js-C_SjLW8b.js.map} +1 -1
  97. package/build/engine/index.d.ts +6 -4
  98. package/build/engine/index.d.ts.map +1 -1
  99. package/build/engine/index.js +3 -2
  100. package/build/engine/interfaces/stream.d.ts +57 -2
  101. package/build/engine/interfaces/stream.d.ts.map +1 -1
  102. package/build/engine/interfaces/stream.js +8 -1
  103. package/build/engine/llm-adapters/index.d.ts +2 -0
  104. package/build/engine/llm-adapters/index.d.ts.map +1 -1
  105. package/build/engine/llm-adapters/index.js +1 -0
  106. package/build/engine/llm-adapters/provider.d.ts.map +1 -1
  107. package/build/engine/llm-adapters/provider.js +2 -0
  108. package/build/engine/llm-adapters/together.d.ts +8 -0
  109. package/build/engine/llm-adapters/together.d.ts.map +1 -0
  110. package/build/engine/llm-adapters/together.js +39 -0
  111. package/build/engine/stream/engine.d.ts +1 -1
  112. package/build/engine/stream/engine.d.ts.map +1 -1
  113. package/build/engine/stream/engine.js +2 -0
  114. package/build/engine/stream/get-client.d.ts +1 -0
  115. package/build/engine/stream/get-client.d.ts.map +1 -1
  116. package/build/engine/stream/get-client.js +1 -0
  117. package/build/engine/stream/index.d.ts +3 -1
  118. package/build/engine/stream/index.d.ts.map +1 -1
  119. package/build/engine/stream/index.js +2 -0
  120. package/build/engine/stream/jev-prediction-chooser.d.ts +11 -0
  121. package/build/engine/stream/jev-prediction-chooser.d.ts.map +1 -0
  122. package/build/engine/stream/jev-prediction-chooser.js +101 -0
  123. package/build/engine/stream/predictive-prompts.d.ts +3 -0
  124. package/build/engine/stream/predictive-prompts.d.ts.map +1 -0
  125. package/build/engine/stream/predictive-prompts.js +21 -0
  126. package/build/engine/stream/predictive-workflow.d.ts +4 -0
  127. package/build/engine/stream/predictive-workflow.d.ts.map +1 -0
  128. package/build/engine/stream/predictive-workflow.js +517 -0
  129. package/build/telescope/latency-events.d.ts +1 -1
  130. package/build/telescope/latency-events.d.ts.map +1 -1
  131. package/build/telescope/latency-events.js +2 -0
  132. package/package.json +2 -1
  133. package/build/bosun-app/frontend/client/_app/immutable/chunks/7py9MbgR.js.br +0 -0
  134. package/build/bosun-app/frontend/client/_app/immutable/chunks/7py9MbgR.js.gz +0 -0
  135. package/build/bosun-app/frontend/client/_app/immutable/chunks/B6DLXdp3.js +0 -1
  136. package/build/bosun-app/frontend/client/_app/immutable/chunks/B6DLXdp3.js.br +0 -0
  137. package/build/bosun-app/frontend/client/_app/immutable/chunks/B6DLXdp3.js.gz +0 -0
  138. package/build/bosun-app/frontend/client/_app/immutable/chunks/ByRLqhAV.js +0 -1
  139. package/build/bosun-app/frontend/client/_app/immutable/chunks/ByRLqhAV.js.br +0 -0
  140. package/build/bosun-app/frontend/client/_app/immutable/chunks/ByRLqhAV.js.gz +0 -0
  141. package/build/bosun-app/frontend/client/_app/immutable/chunks/DdpjwoIh.js +0 -1
  142. package/build/bosun-app/frontend/client/_app/immutable/chunks/DdpjwoIh.js.br +0 -0
  143. package/build/bosun-app/frontend/client/_app/immutable/chunks/YE72mAzG.js.br +0 -1
  144. package/build/bosun-app/frontend/client/_app/immutable/chunks/YE72mAzG.js.gz +0 -0
  145. package/build/bosun-app/frontend/client/_app/immutable/entry/app.B0WyhTXQ.js.br +0 -0
  146. package/build/bosun-app/frontend/client/_app/immutable/entry/app.B0WyhTXQ.js.gz +0 -0
  147. package/build/bosun-app/frontend/client/_app/immutable/entry/start.BPxqLgPa.js +0 -1
  148. package/build/bosun-app/frontend/client/_app/immutable/entry/start.BPxqLgPa.js.br +0 -0
  149. package/build/bosun-app/frontend/client/_app/immutable/entry/start.BPxqLgPa.js.gz +0 -0
  150. package/build/bosun-app/frontend/client/_app/immutable/nodes/0.B-xccOtn.js.br +0 -0
  151. package/build/bosun-app/frontend/client/_app/immutable/nodes/0.B-xccOtn.js.gz +0 -0
  152. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.D3-4ehn_.js.br +0 -0
  153. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.D3-4ehn_.js.gz +0 -0
  154. package/build/bosun-app/frontend/client/_app/immutable/nodes/10.DWK1AGJD.js.br +0 -0
  155. package/build/bosun-app/frontend/client/_app/immutable/nodes/10.DWK1AGJD.js.gz +0 -0
  156. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.Bs51j1UA.js +0 -3
  157. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.Bs51j1UA.js.br +0 -0
  158. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.Bs51j1UA.js.gz +0 -0
  159. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.Bjr8I-7a.js.br +0 -0
  160. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.Bjr8I-7a.js.gz +0 -0
  161. package/build/bosun-app/frontend/client/_app/immutable/nodes/2.BDwIMjum.js.br +0 -0
  162. package/build/bosun-app/frontend/client/_app/immutable/nodes/2.BDwIMjum.js.gz +0 -0
  163. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BX2jDq0d.js.br +0 -0
  164. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BX2jDq0d.js.gz +0 -0
  165. package/build/bosun-app/frontend/client/_app/immutable/nodes/4.B0PTNAkY.js.br +0 -0
  166. package/build/bosun-app/frontend/client/_app/immutable/nodes/4.B0PTNAkY.js.gz +0 -0
  167. package/build/bosun-app/frontend/client/_app/immutable/nodes/5.DtXjhQi9.js.br +0 -0
  168. package/build/bosun-app/frontend/client/_app/immutable/nodes/5.DtXjhQi9.js.gz +0 -0
  169. package/build/bosun-app/frontend/client/_app/immutable/nodes/6.CIpO8gDQ.js.br +0 -0
  170. package/build/bosun-app/frontend/client/_app/immutable/nodes/6.CIpO8gDQ.js.gz +0 -0
  171. package/build/bosun-app/frontend/client/_app/immutable/nodes/8.Dljnutoy.js.br +0 -0
  172. package/build/bosun-app/frontend/client/_app/immutable/nodes/8.Dljnutoy.js.gz +0 -0
  173. package/build/bosun-app/frontend/client/_app/immutable/nodes/9.BQUquGeo.js.br +0 -0
  174. package/build/bosun-app/frontend/client/_app/immutable/nodes/9.BQUquGeo.js.gz +0 -0
  175. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/latency/_page.svelte.js-SjAtxtA0.js.map +0 -1
@@ -0,0 +1,517 @@
1
+ import { z } from 'zod';
2
+ import { createStubStepTracer } from '../bosun/index.js';
3
+ import { defaultLogger } from '../default-logger.js';
4
+ import { reportProviderError } from '../monitoring/index.js';
5
+ import { stdPrompt } from '../step-registry.js';
6
+ import { chooserPrompt, predictorPrompt } from './predictive-prompts.js';
7
+ export function createPredictiveWorkflow(config, engineConfig, nunjucksEnv) {
8
+ const predictiveModels = engineConfig.predictive;
9
+ if (!predictiveModels) {
10
+ throw new Error('Predictive models are not configured.');
11
+ }
12
+ const { predictorModel, chooser } = predictiveModels;
13
+ if (!Number.isInteger(config.predictionCount) || config.predictionCount < 1) {
14
+ throw new Error('predictionCount must be a positive integer.');
15
+ }
16
+ validateSupplementalPredictions(config.prewarmPredictions);
17
+ validateSupplementalPredictions(config.normalFlowPredictions);
18
+ const logger = engineConfig.logger || defaultLogger();
19
+ const stepTracer = engineConfig.stepTracer || createStubStepTracer(logger);
20
+ const normalSchema = createPredictionSchema(config.predictionCount, config.normalFlowPredictions);
21
+ const prewarmSchema = createPredictionSchema(0, config.prewarmPredictions);
22
+ const states = new Map();
23
+ engineConfig.stepRegistry?.addStep({
24
+ type: 'streaming-response',
25
+ name: config.name,
26
+ prompt: stdPrompt(config.prompt),
27
+ });
28
+ engineConfig.stepRegistry?.addStep({
29
+ type: 'text',
30
+ name: 'predictor[normal]',
31
+ prompt: stdPrompt(predictorPrompt),
32
+ schema: normalSchema.schema,
33
+ });
34
+ engineConfig.stepRegistry?.addStep({
35
+ type: 'text',
36
+ name: 'predictor[prewarm]',
37
+ prompt: stdPrompt(predictorPrompt),
38
+ schema: prewarmSchema.schema,
39
+ });
40
+ engineConfig.stepRegistry?.addStep({
41
+ type: 'text',
42
+ name: 'chooser',
43
+ prompt: stdPrompt(chooserPrompt),
44
+ });
45
+ async function run(messages, ctx) {
46
+ const callId = getCallId(ctx);
47
+ const state = getOrCreateState(callId);
48
+ state.stopCurrent?.();
49
+ state.requestGeneration += 1;
50
+ const generation = state.requestGeneration;
51
+ const isUserTurn = messages.at(-1)?.sender === 'user';
52
+ const predictionSets = isUserTurn
53
+ ? [state.preparedPrewarm, state.preparedNormal].filter(isPreparedSet)
54
+ : [];
55
+ const predictions = predictionSets.flatMap((set) => set.pairs);
56
+ const template = typeof config.prompt === 'string' ? config.prompt : await config.prompt.content();
57
+ const renderedPrompt = nunjucksEnv.renderString(template, ctx || {});
58
+ const stringifiedConversation = stringifyMessages(messages);
59
+ const runId = crypto.randomUUID();
60
+ const mainTrace = {
61
+ workflowId: config.name,
62
+ workflowRunId: runId,
63
+ name: config.name,
64
+ model: JSON.stringify(config.model.getOptions()),
65
+ createdAt: Date.now(),
66
+ response: '',
67
+ receivedContext: ctx,
68
+ receivedPrompt: template,
69
+ renderedPrompt,
70
+ stringifiedConversation,
71
+ };
72
+ let active = true;
73
+ let output = '';
74
+ let outputStarted = false;
75
+ let finished = false;
76
+ let provisionalReader;
77
+ let publicController;
78
+ const provisionalStream = config.model
79
+ .generateStream(renderedPrompt, stringifiedConversation)
80
+ .catch((error) => {
81
+ throw createOperationError(error, config.model, mainTrace);
82
+ });
83
+ const firstProvisionalChunk = readFirstNonEmptyChunk(provisionalStream, mainTrace, config.model);
84
+ const chooserResult = predictions.length
85
+ ? choosePrediction(predictions, messages, ctx, runId, isCurrent)
86
+ : new Promise(() => undefined);
87
+ function isCurrent() {
88
+ return active && !state.closed && state.requestGeneration === generation;
89
+ }
90
+ function consumePredictions() {
91
+ for (const set of predictionSets) {
92
+ if (state.preparedPrewarm?.id === set.id) {
93
+ state.preparedPrewarm = undefined;
94
+ state.prewarmConsumed = true;
95
+ }
96
+ if (state.preparedNormal?.id === set.id) {
97
+ state.preparedNormal = undefined;
98
+ }
99
+ }
100
+ }
101
+ function publish(controller, delta) {
102
+ if (!isCurrent() || !delta)
103
+ return false;
104
+ if (!outputStarted) {
105
+ outputStarted = true;
106
+ consumePredictions();
107
+ logger.debug(`[MARK] Predictive workflow TTFT: ${config.name}`);
108
+ }
109
+ output += delta;
110
+ controller.enqueue({ role: 'agent', delta });
111
+ return true;
112
+ }
113
+ function finishSuccessfulResponse() {
114
+ if (finished || !outputStarted)
115
+ return;
116
+ finished = true;
117
+ if (state.stopCurrent === stop)
118
+ state.stopCurrent = undefined;
119
+ mainTrace.response = output;
120
+ void addAndFlushTrace(stepTracer, mainTrace, logger);
121
+ if (!state.closed) {
122
+ startNormalPrediction(messages, output, renderedPrompt, ctx, state, generation);
123
+ }
124
+ }
125
+ function stop() {
126
+ if (!active)
127
+ return;
128
+ active = false;
129
+ void provisionalReader?.cancel();
130
+ try {
131
+ publicController?.close();
132
+ }
133
+ catch {
134
+ }
135
+ finishSuccessfulResponse();
136
+ }
137
+ state.stopCurrent = stop;
138
+ async function fail(controller, failure) {
139
+ if (!isCurrent())
140
+ return;
141
+ active = false;
142
+ if (state.stopCurrent === stop)
143
+ state.stopCurrent = undefined;
144
+ const operation = isOperationError(failure) ? failure : undefined;
145
+ const error = operation?.cause ?? failure;
146
+ const trace = operation?.trace ?? mainTrace;
147
+ const model = operation?.model ?? config.model;
148
+ trace.response = trace === mainTrace ? output : trace.response;
149
+ trace.error = toError(error);
150
+ reportProviderError(error, {
151
+ logger,
152
+ eventTracer: engineConfig.eventTracer,
153
+ providerInfo: model.getProviderInfo?.(),
154
+ });
155
+ await addAndFlushTrace(stepTracer, trace, logger);
156
+ try {
157
+ await config.onError(toError(error), ctx);
158
+ }
159
+ catch (onErrorFailure) {
160
+ logger.error('Predictive workflow error handler failed', {
161
+ error: onErrorFailure,
162
+ });
163
+ }
164
+ controller.error(error);
165
+ }
166
+ async function orchestrate(controller) {
167
+ try {
168
+ const winner = await Promise.race([firstProvisionalChunk, chooserResult]);
169
+ if (!isCurrent())
170
+ return;
171
+ if (winner.kind === 'prediction') {
172
+ void firstProvisionalChunk
173
+ .then(({ reader }) => reader.cancel())
174
+ .catch(() => undefined);
175
+ publish(controller, winner.pair.agentResponse);
176
+ controller.close();
177
+ finishSuccessfulResponse();
178
+ return;
179
+ }
180
+ provisionalReader = winner.reader;
181
+ if (!publish(controller, winner.chunk))
182
+ return;
183
+ while (isCurrent()) {
184
+ try {
185
+ const next = await winner.reader.read();
186
+ if (next.done)
187
+ break;
188
+ if (!publish(controller, next.value))
189
+ return;
190
+ }
191
+ catch (error) {
192
+ throw createOperationError(error, config.model, mainTrace);
193
+ }
194
+ }
195
+ if (!isCurrent())
196
+ return;
197
+ controller.close();
198
+ finishSuccessfulResponse();
199
+ }
200
+ catch (error) {
201
+ await fail(controller, error);
202
+ }
203
+ }
204
+ return new ReadableStream({
205
+ start(controller) {
206
+ publicController = controller;
207
+ void orchestrate(controller);
208
+ },
209
+ cancel() {
210
+ stop();
211
+ },
212
+ });
213
+ }
214
+ function prewarmForUsersHello(ctx) {
215
+ if (config.prewarmPredictions.length === 0)
216
+ return;
217
+ const callId = getCallId(ctx);
218
+ const state = getOrCreateState(callId);
219
+ if (state.prewarmStarted || state.prewarmConsumed)
220
+ return;
221
+ state.prewarmStarted = true;
222
+ const generation = state.requestGeneration;
223
+ const task = (async () => {
224
+ const template = typeof config.prompt === 'string' ? config.prompt : await config.prompt.content();
225
+ const renderedPrompt = nunjucksEnv.renderString(template, ctx || {});
226
+ const prediction = await generatePredictions({
227
+ ctx,
228
+ renderedMainPrompt: renderedPrompt,
229
+ stringifiedConversation: '',
230
+ schema: prewarmSchema,
231
+ supplementalPredictions: config.prewarmPredictions,
232
+ traceName: 'predictor[prewarm]',
233
+ });
234
+ if (!state.closed && !state.prewarmConsumed && state.requestGeneration === generation) {
235
+ state.preparedPrewarm = { id: crypto.randomUUID(), pairs: prediction.pairs };
236
+ await addAndFlushTrace(stepTracer, prediction.trace, logger);
237
+ }
238
+ })();
239
+ trackPrediction(task, state, ctx, generation);
240
+ }
241
+ async function waitForPendingPrediction(callId) {
242
+ const state = states.get(callId);
243
+ if (!state)
244
+ return;
245
+ await Promise.all([...(state.pendingPredictions.get(state.requestGeneration) ?? [])]);
246
+ }
247
+ function clear(callId) {
248
+ const state = states.get(callId);
249
+ if (!state)
250
+ return;
251
+ state.closed = true;
252
+ state.stopCurrent?.();
253
+ state.requestGeneration += 1;
254
+ states.delete(callId);
255
+ }
256
+ function getOrCreateState(callId) {
257
+ const current = states.get(callId);
258
+ if (current)
259
+ return current;
260
+ const state = {
261
+ closed: false,
262
+ requestGeneration: 0,
263
+ prewarmStarted: false,
264
+ prewarmConsumed: false,
265
+ pendingPredictions: new Map(),
266
+ stopCurrent: undefined,
267
+ };
268
+ states.set(callId, state);
269
+ return state;
270
+ }
271
+ function startNormalPrediction(messages, agentResponse, renderedMainPrompt, ctx, state, generation) {
272
+ const conversationWithResponse = [
273
+ stringifyMessages(messages).trim(),
274
+ `Agent: ${agentResponse.trim()}`,
275
+ ]
276
+ .filter(Boolean)
277
+ .join('\n');
278
+ const task = generatePredictions({
279
+ ctx,
280
+ renderedMainPrompt,
281
+ stringifiedConversation: conversationWithResponse,
282
+ schema: normalSchema,
283
+ supplementalPredictions: config.normalFlowPredictions,
284
+ traceName: 'predictor[normal]',
285
+ }).then(async (prediction) => {
286
+ if (!state.closed && state.requestGeneration === generation) {
287
+ state.preparedNormal = { id: crypto.randomUUID(), pairs: prediction.pairs };
288
+ await addAndFlushTrace(stepTracer, prediction.trace, logger);
289
+ }
290
+ });
291
+ trackPrediction(task, state, ctx, generation);
292
+ }
293
+ function trackPrediction(task, state, ctx, generation) {
294
+ const handled = task.catch(async (error) => {
295
+ if (state.closed || state.requestGeneration !== generation)
296
+ return;
297
+ const operation = isOperationError(error) ? error : undefined;
298
+ const cause = operation?.cause ?? error;
299
+ const trace = operation?.trace;
300
+ const model = operation?.model ?? predictorModel;
301
+ reportProviderError(cause, {
302
+ logger,
303
+ eventTracer: engineConfig.eventTracer,
304
+ providerInfo: model.getProviderInfo?.(),
305
+ });
306
+ if (trace) {
307
+ trace.error = toError(cause);
308
+ await addAndFlushTrace(stepTracer, trace, logger);
309
+ }
310
+ try {
311
+ await config.onError(toError(cause), ctx);
312
+ }
313
+ catch (onErrorFailure) {
314
+ logger.error('Predictor error handler failed', { error: onErrorFailure });
315
+ }
316
+ });
317
+ const pendingForGeneration = state.pendingPredictions.get(generation) ?? new Set();
318
+ pendingForGeneration.add(handled);
319
+ state.pendingPredictions.set(generation, pendingForGeneration);
320
+ void handled.finally(() => {
321
+ pendingForGeneration.delete(handled);
322
+ if (pendingForGeneration.size === 0)
323
+ state.pendingPredictions.delete(generation);
324
+ });
325
+ }
326
+ async function generatePredictions(args) {
327
+ const renderedPredictorPrompt = nunjucksEnv.renderString(predictorPrompt, {
328
+ predictionCount: args.schema.totalCount - args.supplementalPredictions.length,
329
+ supplementalPredictions: args.supplementalPredictions,
330
+ });
331
+ const systemPrompt = `${renderedPredictorPrompt.trim()}\n${args.renderedMainPrompt}`;
332
+ const trace = {
333
+ workflowId: config.name,
334
+ workflowRunId: crypto.randomUUID(),
335
+ name: args.traceName,
336
+ model: JSON.stringify(predictorModel.getOptions()),
337
+ createdAt: Date.now(),
338
+ response: '',
339
+ receivedContext: args.ctx,
340
+ receivedPrompt: predictorPrompt,
341
+ renderedPrompt: systemPrompt,
342
+ stringifiedConversation: args.stringifiedConversation,
343
+ schema: args.schema.schema,
344
+ };
345
+ let raw;
346
+ try {
347
+ raw = await predictorModel.generateResponse(systemPrompt, args.stringifiedConversation, args.schema.schema);
348
+ }
349
+ catch (error) {
350
+ throw createOperationError(error, predictorModel, trace);
351
+ }
352
+ trace.response = raw;
353
+ let parsed;
354
+ try {
355
+ parsed = args.schema.schema.parse(JSON.parse(raw));
356
+ }
357
+ catch (error) {
358
+ throw createOperationError(error, predictorModel, trace);
359
+ }
360
+ const pairs = Array.from({ length: args.schema.totalCount }, (_, offset) => {
361
+ const index = offset + 1;
362
+ return {
363
+ userResponse: parsed[`predicted_reply_${index}`].trim(),
364
+ agentResponse: parsed[`response_to_predicted_reply_${index}`].trim(),
365
+ };
366
+ });
367
+ return { pairs, trace };
368
+ }
369
+ async function choosePrediction(pairs, messages, ctx, parentRunId, isActive) {
370
+ const actualUserResponse = messages.at(-1)?.text ?? '';
371
+ const history = messages.slice(0, -1);
372
+ const stringifiedHistory = stringifyMessages(history);
373
+ const input = { history, actualUserResponse, candidates: pairs };
374
+ const trace = {
375
+ workflowId: config.name,
376
+ workflowRunId: parentRunId,
377
+ name: 'chooser',
378
+ model: JSON.stringify(chooser.getOptions()),
379
+ createdAt: Date.now(),
380
+ response: '',
381
+ receivedContext: ctx,
382
+ receivedPrompt: chooserPrompt,
383
+ renderedPrompt: JSON.stringify(input),
384
+ stringifiedConversation: stringifiedHistory,
385
+ };
386
+ let result;
387
+ try {
388
+ result = await chooser.choose(input);
389
+ }
390
+ catch (error) {
391
+ throw createOperationError(error, chooser, trace);
392
+ }
393
+ if (!isActive())
394
+ return new Promise(() => undefined);
395
+ trace.response = JSON.stringify(result);
396
+ if (result.scores.length !== pairs.length) {
397
+ throw createOperationError(new Error('Chooser returned the wrong number of candidate scores.'), chooser, trace);
398
+ }
399
+ if (result.selectedIndex === undefined) {
400
+ void addAndFlushTrace(stepTracer, trace, logger);
401
+ return new Promise(() => undefined);
402
+ }
403
+ if (!Number.isInteger(result.selectedIndex) ||
404
+ result.selectedIndex < 0 ||
405
+ result.selectedIndex >= pairs.length) {
406
+ throw createOperationError(new Error('Chooser returned an invalid candidate index.'), chooser, trace);
407
+ }
408
+ void addAndFlushTrace(stepTracer, trace, logger);
409
+ return { kind: 'prediction', pair: pairs[result.selectedIndex] };
410
+ }
411
+ return { run, prewarmForUsersHello, waitForPendingPrediction, clear };
412
+ }
413
+ function createPredictionSchema(generatedCount, supplemental) {
414
+ const shape = {};
415
+ const totalCount = generatedCount + supplemental.length;
416
+ for (let offset = 0; offset < totalCount; offset += 1) {
417
+ const index = offset + 1;
418
+ const supplementalPrediction = supplemental[offset - generatedCount];
419
+ shape[`predicted_reply_${index}`] = supplementalPrediction
420
+ ? z.literal(supplementalPrediction.userResponse)
421
+ : z
422
+ .string()
423
+ .min(1)
424
+ .describe(`User's ${ordinal(index)} predicted reply`);
425
+ shape[`response_to_predicted_reply_${index}`] = supplementalPrediction?.agentResponse
426
+ ? z.literal(supplementalPrediction.agentResponse)
427
+ : z.string().min(1).describe(`Agent's response to predicted reply ${index}`);
428
+ }
429
+ return { schema: z.object(shape).strict(), totalCount };
430
+ }
431
+ async function readFirstNonEmptyChunk(streamPromise, trace, model) {
432
+ const stream = await streamPromise;
433
+ const reader = stream.getReader();
434
+ try {
435
+ while (true) {
436
+ const result = await reader.read();
437
+ if (result.done)
438
+ throw new Error('The provisional response was empty.');
439
+ if (result.value)
440
+ return { kind: 'provisional', reader, chunk: result.value };
441
+ }
442
+ }
443
+ catch (error) {
444
+ if (isOperationError(error))
445
+ throw error;
446
+ throw createOperationError(error, model, trace);
447
+ }
448
+ }
449
+ function stringifyMessages(messages) {
450
+ const names = {
451
+ agent: 'Agent',
452
+ user: 'User',
453
+ system: 'system',
454
+ };
455
+ return messages.map((message) => `${names[message.sender]}: ${message.text}`).join('\n');
456
+ }
457
+ function getCallId(ctx) {
458
+ if (typeof ctx !== 'object' ||
459
+ ctx === null ||
460
+ !('state' in ctx) ||
461
+ typeof ctx.state !== 'object' ||
462
+ ctx.state === null ||
463
+ !('callId' in ctx.state) ||
464
+ typeof ctx.state.callId !== 'string' ||
465
+ !ctx.state.callId) {
466
+ throw new Error('Predictive workflows require context.state.callId.');
467
+ }
468
+ return ctx.state.callId;
469
+ }
470
+ function validateSupplementalPredictions(predictions) {
471
+ for (const prediction of predictions) {
472
+ if (!prediction.userResponse.trim()) {
473
+ throw new Error('A supplemental user response cannot be empty.');
474
+ }
475
+ if (prediction.agentResponse !== undefined && !prediction.agentResponse.trim()) {
476
+ throw new Error('A supplemental agent response cannot be empty.');
477
+ }
478
+ }
479
+ }
480
+ function ordinal(value) {
481
+ const lastTwo = value % 100;
482
+ if (lastTwo >= 11 && lastTwo <= 13)
483
+ return `${value}th`;
484
+ if (value % 10 === 1)
485
+ return `${value}st`;
486
+ if (value % 10 === 2)
487
+ return `${value}nd`;
488
+ if (value % 10 === 3)
489
+ return `${value}rd`;
490
+ return `${value}th`;
491
+ }
492
+ function isPreparedSet(value) {
493
+ return value !== undefined;
494
+ }
495
+ function createOperationError(cause, model, trace) {
496
+ const error = new Error(toError(cause).message);
497
+ error.name = 'PredictiveOperationError';
498
+ error.cause = cause;
499
+ error.model = model;
500
+ error.trace = trace;
501
+ return error;
502
+ }
503
+ function isOperationError(value) {
504
+ return value instanceof Error && value.name === 'PredictiveOperationError' && 'trace' in value;
505
+ }
506
+ function toError(value) {
507
+ return value instanceof Error ? value : new Error(String(value));
508
+ }
509
+ async function addAndFlushTrace(stepTracer, trace, logger) {
510
+ stepTracer.addStepTrace(trace);
511
+ try {
512
+ await stepTracer.flush();
513
+ }
514
+ catch (error) {
515
+ logger.error('stepTracer.flush failed', { error });
516
+ }
517
+ }
@@ -1,5 +1,5 @@
1
1
  export declare const LATENCY_EVENT_SCHEMA: "latency.event.v1";
2
- export declare const LATENCY_EVENT_TYPES: readonly ["call.started", "call.ended", "vad.activated", "vad.deactivated", "stt.started", "stt.interim", "stt.final", "speech.created", "reply.pending.started", "reply.pending.completed", "llm.wait.started", "llm.wait.completed", "llm.stream.started", "llm.stream.completed", "llm.requested", "llm.connect_tcp.started", "llm.connect_tcp.completed", "llm.connect_tcp.failed", "llm.start_tls.started", "llm.start_tls.completed", "llm.start_tls.failed", "llm.first_token", "llm.completed", "tts.text.first_sent", "tts.text.completed", "tts.provider.started", "tts.provider.completed", "tts.provider.flush_sent", "tts.provider.close_sent", "tts.provider.turn_boundary_received", "tts.provider.final_received", "tts.audio.first_received", "tts.audio.frame_received", "tts.audio.last_received", "tts.decode.started", "tts.decode.completed", "audio.output.wait.started", "audio.output.wait.completed", "interruption.detected", "audio.playback.started", "audio.playback.stopped", "audio.playback.ended", "audio.playback.interrupted"];
2
+ export declare const LATENCY_EVENT_TYPES: readonly ["call.started", "call.ended", "vad.activated", "vad.deactivated", "user.speaking.started", "user.speaking.completed", "stt.started", "stt.interim", "stt.final", "speech.created", "reply.pending.started", "reply.pending.completed", "llm.wait.started", "llm.wait.completed", "llm.stream.started", "llm.stream.completed", "llm.requested", "llm.connect_tcp.started", "llm.connect_tcp.completed", "llm.connect_tcp.failed", "llm.start_tls.started", "llm.start_tls.completed", "llm.start_tls.failed", "llm.first_token", "llm.completed", "tts.text.first_sent", "tts.text.completed", "tts.provider.started", "tts.provider.completed", "tts.provider.flush_sent", "tts.provider.close_sent", "tts.provider.turn_boundary_received", "tts.provider.final_received", "tts.audio.first_received", "tts.audio.frame_received", "tts.audio.last_received", "tts.decode.started", "tts.decode.completed", "audio.output.wait.started", "audio.output.wait.completed", "interruption.detected", "audio.playback.started", "audio.playback.stopped", "audio.playback.ended", "audio.playback.interrupted"];
3
3
  export type LatencyEventType = (typeof LATENCY_EVENT_TYPES)[number];
4
4
  export type LatencyEventPayload = Record<string, unknown>;
5
5
  export type LatencyEvent = {
@@ -1 +1 @@
1
- {"version":3,"file":"latency-events.d.ts","sourceRoot":"","sources":["../../src/telescope/latency-events.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oBAAoB,EAAG,kBAA2B,CAAA;AAE/D,eAAO,MAAM,mBAAmB,ogCA4CtB,CAAA;AAEV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEzD,MAAM,MAAM,YAAY,GAAG;IACvB,MAAM,EAAE,OAAO,oBAAoB,CAAA;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,gBAAgB,CAAA;IAC3B,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA"}
1
+ {"version":3,"file":"latency-events.d.ts","sourceRoot":"","sources":["../../src/telescope/latency-events.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oBAAoB,EAAG,kBAA2B,CAAA;AAE/D,eAAO,MAAM,mBAAmB,wjCA8CtB,CAAA;AAEV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEzD,MAAM,MAAM,YAAY,GAAG;IACvB,MAAM,EAAE,OAAO,oBAAoB,CAAA;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,gBAAgB,CAAA;IAC3B,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA"}
@@ -4,6 +4,8 @@ export const LATENCY_EVENT_TYPES = [
4
4
  'call.ended',
5
5
  'vad.activated',
6
6
  'vad.deactivated',
7
+ 'user.speaking.started',
8
+ 'user.speaking.completed',
7
9
  'stt.started',
8
10
  'stt.interim',
9
11
  'stt.final',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@recombine-ai/platform",
3
3
  "type": "module",
4
- "version": "0.9.1-test.0",
4
+ "version": "0.9.1-test.2",
5
5
  "description": "The Recombine platform: engine, telescope, dockyard, call control, the voice agent API, and the Bosun bindings in one package",
6
6
  "license": "EULA",
7
7
  "author": "recombine.ai",
@@ -42,6 +42,7 @@
42
42
  "registry": "https://registry.npmjs.org"
43
43
  },
44
44
  "dependencies": {
45
+ "@typesafe-ai/sdk": "0.6.0",
45
46
  "dotenv": "17.4.2",
46
47
  "esbuild": "0.27.3",
47
48
  "fast-xml-parser": "5.7.3",
@@ -1 +0,0 @@
1
- import{T as tt,h as fe,bx as ue}from"./CR-uVjxM.js";import{w as de}from"./DNvczHUR.js";import{H as kt,S as St,R as xt}from"./-UyI9lYi.js";import{r as ft,o as Bt,H as j,N as F,n as T,i as Rt,b as L,s as $,a as wt,f as Vt,g as vt,c as et,d as mt,S as Lt,P as Yt,p as R,e as he,m as pe,h as me,u as zt,j as ge,k as Nt,l as B,q as _e,t as Gt,v as we,w as ve,x as Wt}from"./ByRLqhAV.js";import"./B0XwC4Ot.js";const ye=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,be=/^\/\((?:[^)]+)\)$/;function Ee(t){const n=[];return{pattern:t==="/"||be.test(t)?/^\/$/:new RegExp(`^${Se(t).map(o=>{const a=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(o);if(a)return n.push({name:a[1],matcher:a[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(o);if(s)return n.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!o)return;const r=o.split(/\[(.+?)\](?!\])/);return"/"+r.map((l,c)=>{if(c%2){if(l.startsWith("x+"))return gt(String.fromCharCode(parseInt(l.slice(2),16)));if(l.startsWith("u+"))return gt(String.fromCharCode(...l.slice(2).split("-").map(f=>parseInt(f,16))));const u=ye.exec(l),[,p,_,d,m]=u;return n.push({name:d,matcher:m,optional:!!p,rest:!!_,chained:_?c===1&&r[0]==="":!1}),_?"([^]*?)":p?"([^/]*)?":"([^/]+?)"}return gt(l)}).join("")}).join("")}/?$`),params:n}}function ke(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function Se(t){return t.slice(1).split("/").filter(ke)}function xe(t,n,e){const o={},a=t.slice(1),s=a.filter(i=>i!==void 0);let r=0;for(let i=0;i<n.length;i+=1){const l=n[i];let c=a[i-r];if(l.chained&&l.rest&&r&&(c=a.slice(i-r,i+1).filter(u=>u).join("/"),r=0),c===void 0)if(l.rest)c="";else continue;if(!l.matcher||e[l.matcher](c)){o[l.name]=c;const u=n[i+1],p=a[i+1];u&&!u.rest&&u.optional&&p&&l.chained&&(r=0),!u&&!p&&Object.keys(o).length===s.length&&(r=0);continue}if(l.optional&&l.chained){r++;continue}return}if(!r)return o}function gt(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Re({nodes:t,server_loads:n,dictionary:e,matchers:o}){const a=new Set(n);return Object.entries(e).map(([i,[l,c,u]])=>{const{pattern:p,params:_}=Ee(i),d={id:i,exec:m=>{const f=p.exec(m);if(f)return xe(f,_,o)},errors:[1,...u||[]].map(m=>t[m]),layouts:[0,...c||[]].map(r),leaf:s(l)};return d.errors.length=d.layouts.length=Math.max(d.errors.length,d.layouts.length),d});function s(i){const l=i<0;return l&&(i=~i),[l,t[i]]}function r(i){return i===void 0?i:[a.has(i),t[i]]}}function Jt(t,n=JSON.parse){try{return n(sessionStorage[t])}catch{}}function Dt(t,n,e=JSON.stringify){const o=e(n);try{sessionStorage[t]=o}catch{}}function Le(t){return t.filter(n=>n!=null)}function Q(t,n){return t+"/"+n}function Pt(t){return t instanceof kt||t instanceof St?t.status:500}function Pe(t){return t instanceof St?t.text:"Internal Error"}const qt={spanContext(){return Ae},setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},Ae={traceId:"",spanId:"",traceFlags:0},Ue=fe??(t=>t()),Te=new Set(["icon","shortcut icon","apple-touch-icon"]);let V=null;const C=Jt(Wt)??{},G=Jt(Gt)??{},I={url:Nt({}),page:Nt({}),navigating:de(null),updated:ge()};function At(t){C[t]=$()}function Ie(t,n){let e=t+1;for(;C[e];)delete C[e],e+=1;for(e=n+1;G[e];)delete G[e],e+=1}function W(t,n=!1){return n?location.replace(t.href):location.href=t.href,new Promise(T)}async function Xt(){if("serviceWorker"in navigator){const t=await navigator.serviceWorker.getRegistration(L||"/");t&&await t.update()}}let Ut,yt,nt,P,bt,b;const at=[],rt=[];let v=null;function ot(){var t;(t=v==null?void 0:v.fork)==null||t.then(n=>n==null?void 0:n.discard()),v=null,D={element:void 0,href:void 0}}const Z=new Map,Qt=new Set,Ce=new Set,z=new Set;let w={branch:[],error:null,url:null},Zt=!1,it=!1,Ft=!0,J=!1,Y=!1,te=!1,Tt=!1,It,E,x,U;const st=new Set,Ht=new Map,Kt=new Map;async function tn(t,n,e){var s,r,i,l;if(globalThis.__sveltekit_wbvdp0.data){const{q:c={},p:u={},l:p={},f:_={}}=globalThis.__sveltekit_wbvdp0.data;for(const d in c)c[d];for(const d in p)p[d];for(const d in _)_[d];for(const d in u)u[d]}document.URL!==location.href&&(location.href=location.href),b=t,await((r=(s=t.hooks).init)==null?void 0:r.call(s)),Ut=Re(t),P=document.documentElement,bt=n,yt=t.nodes[0],nt=t.nodes[1],yt(),nt(),E=(i=history.state)==null?void 0:i[j],x=(l=history.state)==null?void 0:l[F],E||(E=x=Date.now(),history.replaceState({...history.state,[j]:E,[F]:x},""));const o=C[E];function a(){o&&(history.scrollRestoration="manual",scrollTo(o.x,o.y))}e?(a(),await Ve(bt,e)):(await q({type:"enter",url:ft(b.hash?Ge(new URL(location.href)):location.href),replace_state:!0}),a()),Be()}function Oe(){at.length=0,Tt=!1}function ee(t){rt.some(n=>n==null?void 0:n.snapshot)&&(G[t]=rt.map(n=>{var e;return(e=n==null?void 0:n.snapshot)==null?void 0:e.capture()}))}function ne(t){var n;(n=G[t])==null||n.forEach((e,o)=>{var a,s;(s=(a=rt[o])==null?void 0:a.snapshot)==null||s.restore(e)})}function Mt(){At(E),Dt(Wt,C),ee(x),Dt(Gt,G)}async function ae(t,n,e,o){let a,s;n.invalidateAll&&ot(),await q({type:"goto",url:ft(t),keepfocus:n.keepFocus,noscroll:n.noScroll,replace_state:n.replaceState,state:n.state,redirect_count:e,nav_token:o,accept:()=>{var r;if(n.invalidateAll){Tt=!0,a=new Set;for(const[i,l]of Ht)for(const[c,u]of l)(r=u.resource)==null||r.reset(),a.add(Q(i,c));s=new Set;for(const[i,l]of Kt)for(const c of l.keys())s.add(Q(i,c))}n.invalidate&&n.invalidate.forEach(Me)}}),n.invalidateAll&&tt().then(tt).then(()=>{for(const[r,i]of Ht)for(const[l,{resource:c}]of i)a!=null&&a.has(Q(r,l))&&c.start();for(const[r,i]of Kt)for(const[l,{resource:c}]of i)s!=null&&s.has(Q(r,l))&&c.reconnect()})}async function je(t){if(t.id!==(v==null?void 0:v.id)){ot();const n={};st.add(n),v={id:t.id,token:n,promise:ie({...t,preload:n}).then(e=>(st.delete(n),e.type==="loaded"&&e.state.error&&ot(),e)),fork:null}}return v.promise}async function _t(t){var e;const n=(e=await ut(t,!1))==null?void 0:e.route;n&&await Promise.all([...n.layouts,n.leaf].filter(Boolean).map(o=>o[1]()))}async function re(t,n,e){var a;const o={params:w.params,route:{id:((a=w.route)==null?void 0:a.id)??null},url:new URL(location.href)};if(w={...t.state,nav:o},zt(t.props.page),It=new b.root({target:n,props:{...t.props,stores:I,components:rt},hydrate:e,sync:!1,transformError:void 0}),await Promise.resolve(),e){const s={from:null,to:{...o,scroll:C[E]??$()},willUnload:!1,type:"enter",complete:Promise.resolve()};z.forEach(r=>r(s))}ne(x),it=!0}async function lt({url:t,params:n,branch:e,errors:o,status:a,error:s,route:r,form:i}){let l="never";if(L&&(t.pathname===L||t.pathname===L+"/"))l="always";else for(const m of e)(m==null?void 0:m.slash)!==void 0&&(l=m.slash);t.pathname=me(t.pathname,l),t.search=t.search;const c={type:"loaded",state:{url:t,params:n,branch:e,error:s,route:r},props:{constructors:Le(e).map(m=>m.node.component),page:dt(R)}};i!==void 0&&(c.props.form=i);let u={},p=!R,_=0;for(let m=0;m<Math.max(e.length,w.branch.length);m+=1){const f=e[m],h=w.branch[m];(f==null?void 0:f.data)!==(h==null?void 0:h.data)&&(p=!0),f&&(u={...u,...f.data},p&&(c.props[`data_${_}`]=u),_+=1)}return(!w.url||t.href!==w.url.href||w.error!==s||i!==void 0&&i!==R.form||p)&&(c.props.page={error:s,params:n,route:{id:(r==null?void 0:r.id)??null},state:{},status:a,url:new URL(t),form:i??null,data:p?u:R.data}),c}async function Ct({loader:t,parent:n,url:e,params:o,route:a,server_data_node:s}){var u,p,_;let r=null,i=!0;const l={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},c=await t();if((u=c.universal)!=null&&u.load){let d=function(...f){for(const h of f){const{href:g}=new URL(h,e);l.dependencies.add(g)}};const m={tracing:{enabled:!1,root:qt,current:qt},route:new Proxy(a,{get:(f,h)=>(i&&(l.route=!0),f[h])}),params:new Proxy(o,{get:(f,h)=>(i&&l.params.add(h),f[h])}),data:(s==null?void 0:s.data)??null,url:pe(e,()=>{i&&(l.url=!0)},f=>{i&&l.search_params.add(f)},b.hash),async fetch(f,h){f instanceof Request&&(h={body:f.method==="GET"||f.method==="HEAD"?void 0:await f.blob(),cache:f.cache,credentials:f.credentials,headers:[...f.headers].length>0?f==null?void 0:f.headers:void 0,integrity:f.integrity,keepalive:f.keepalive,method:f.method,mode:f.mode,redirect:f.redirect,referrer:f.referrer,referrerPolicy:f.referrerPolicy,signal:f.signal,...h});const{resolved:g,promise:y}=oe(f,h,e);return i&&d(g.href),y},setHeaders:T,depends:d,parent(){return i&&(l.parent=!0),n()},untrack(f){i=!1;try{return f()}finally{i=!0}}};r=await c.universal.load.call(null,m)??null}return{node:c,loader:t,server:s,universal:(p=c.universal)!=null&&p.load?{type:"data",data:r,uses:l}:null,data:r??(s==null?void 0:s.data)??null,slash:((_=c.universal)==null?void 0:_.trailingSlash)??(s==null?void 0:s.slash)}}function oe(t,n,e){let o=t instanceof Request?t.url:t;const a=new URL(o,e);a.origin===e.origin&&(o=a.href.slice(e.origin.length));const s=it?we(o,a.href,n):ve(o,n);return{resolved:a,promise:s}}function $e(t,n,e,o,a,s){if(Tt)return!0;if(!a)return!1;if(a.parent&&t||a.route&&n||a.url&&e)return!0;for(const r of a.search_params)if(o.has(r))return!0;for(const r of a.params)if(s[r]!==w.params[r])return!0;for(const r of a.dependencies)if(at.some(i=>i(new URL(r))))return!0;return!1}function Ot(t,n){return(t==null?void 0:t.type)==="data"?t:(t==null?void 0:t.type)==="skip"?n??null:null}function Ne(t,n){if(!t)return new Set(n.searchParams.keys());const e=new Set([...t.searchParams.keys(),...n.searchParams.keys()]);for(const o of e){const a=t.searchParams.getAll(o),s=n.searchParams.getAll(o);a.every(r=>s.includes(r))&&s.every(r=>a.includes(r))&&e.delete(o)}return e}function De({error:t,url:n,route:e,params:o}){return{type:"loaded",state:{error:t,url:n,route:e,params:o,branch:[]},props:{page:dt(R),constructors:[]}}}async function ie({id:t,invalidating:n,url:e,params:o,route:a,preload:s}){if((v==null?void 0:v.id)===t)return st.delete(v.token),v.promise;const{errors:r,layouts:i,leaf:l}=a,c=[...i,l];r.forEach(h=>h==null?void 0:h().catch(T)),c.forEach(h=>h==null?void 0:h[1]().catch(T));const u=w.url?t!==ct(w.url):!1,p=w.route?a.id!==w.route.id:!1,_=Ne(w.url,e);let d=!1;const m=c.map(async(h,g)=>{var A;if(!h)return;const y=w.branch[g];return h[1]===(y==null?void 0:y.loader)&&!$e(d,p,u,_,(A=y.universal)==null?void 0:A.uses,o)?y:(d=!0,Ct({loader:h[1],url:e,params:o,route:a,parent:async()=>{var X;const O={};for(let N=0;N<g;N+=1)Object.assign(O,(X=await m[N])==null?void 0:X.data);return O},server_data_node:Ot(h[0]?{type:"skip"}:null,h[0]?y==null?void 0:y.server:void 0)}))});for(const h of m)h.catch(T);const f=[];for(let h=0;h<c.length;h+=1)if(c[h])try{f.push(await m[h])}catch(g){if(g instanceof xt)return{type:"redirect",location:g.location};if(s&&st.has(s))return De({error:await H(g,{params:o,url:e,route:{id:a.id}}),url:e,params:o,route:a});let y=Pt(g),S;if(g instanceof kt)S=g.body;else{if(await I.updated.check())return await Xt(),await W(e);S=await H(g,{params:o,url:e,route:{id:a.id}})}const A=await qe(h,f,r);return A?lt({url:e,params:o,branch:f.slice(0,A.idx).concat(A.node),errors:r,status:y,error:S,route:a}):await le(e,{id:a.id},S,y)}else f.push(void 0);return lt({url:e,params:o,branch:f,errors:r,status:200,error:null,route:a,form:n?void 0:null})}async function qe(t,n,e){for(;t--;)if(e[t]){let o=t;for(;!n[o];)o-=1;try{return{idx:o+1,node:{node:await e[t](),loader:e[t],data:{},server:null,universal:null}}}catch{continue}}}async function jt({status:t,error:n,url:e,route:o}){const a={};let s=null;try{const r=await Ct({loader:yt,url:e,params:a,route:o,parent:()=>Promise.resolve({}),server_data_node:Ot(s)}),i={node:await nt(),loader:nt,universal:null,server:null,data:null};return lt({url:e,params:a,branch:[r,i],status:t,error:n,errors:[],route:null})}catch(r){if(r instanceof xt){await ae(new URL(r.location,location.href),{},0);return}const i=await b.get_error_template(),l=await H(r,{url:e,params:a,route:o}),c=String((l==null?void 0:l.message)??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),u=i({status:t,message:c}),p=new DOMParser().parseFromString(u,"text/html");throw document.documentElement.replaceChild(document.adoptNode(p.head),document.head),document.documentElement.replaceChild(document.adoptNode(p.body),document.body),r}}async function Fe(t){const n=t.href;if(Z.has(n))return Z.get(n);let e;try{const o=(async()=>{let a=await b.hooks.reroute({url:new URL(t),fetch:async(s,r)=>oe(s,r,t).promise})??t;if(typeof a=="string"){const s=new URL(t);b.hash?s.hash=a:s.pathname=a,a=s}return a})();Z.set(n,o),e=await o}catch{Z.delete(n);return}return e}async function ut(t,n){if(t&&!Rt(t,L,b.hash)){const e=await Fe(t);if(!e)return;const o=He(e);for(const a of Ut){const s=a.exec(o);if(s)return{id:ct(t),invalidating:n,route:a,params:he(s),url:t}}}}function He(t){return _e(b.hash?t.hash.replace(/^#/,"").replace(/[?#].+/,""):t.pathname.slice(L.length))||"/"}function ct(t){return(b.hash?t.hash.replace(/^#/,""):t.pathname)+t.search}function se({url:t,type:n,intent:e,delta:o,event:a,scroll:s}){let r=!1;const i=$t(w,e,t,n,s??null);o!==void 0&&(i.navigation.delta=o),a!==void 0&&(i.navigation.event=a);const l={...i.navigation,cancel:()=>{r=!0,i.reject(new Error("navigation cancelled"))}};return J||Qt.forEach(c=>c(l)),r?null:i}async function q({type:t,url:n,popped:e,keepfocus:o,noscroll:a,replace_state:s,state:r={},redirect_count:i=0,nav_token:l={},accept:c=T,block:u=T,event:p}){var N;const _=U;U=l;const d=await ut(n,!1),m=t==="enter"?$t(w,d,n,t):se({url:n,type:t,delta:e==null?void 0:e.delta,intent:d,scroll:e==null?void 0:e.scroll,event:p});if(!m){u(),U===l&&(U=_);return}const f=E,h=x;c(),J=!0,it&&m.navigation.type!=="enter"&&I.navigating.set(wt.current=m.navigation);let g=d&&await ie(d);if(!g){if(Rt(n,L,b.hash))return await W(n,s);g=await le(n,{id:null},await H(new St(404,"Not Found",`Not found: ${n.pathname}`),{url:n,params:{},route:{id:null}}),404,s)}if(n=(d==null?void 0:d.url)||n,U!==l){m.reject(new Error("navigation aborted"));return}if(!g)return;if(g.type==="redirect"){if(i<20){await q({type:t,url:new URL(g.location,n),popped:e,keepfocus:o,noscroll:a,replace_state:s,state:r,redirect_count:i+1,nav_token:l}),m.fulfil(void 0);return}if(g=await jt({status:500,error:await H(new Error("Redirect loop"),{url:n,params:{},route:{id:null}}),url:n,route:{id:null}}),!g)return}else if(g.props.page.status>=400&&await I.updated.check())return await Xt(),await W(n,s);if(Oe(),At(f),ee(h),g.props.page.url.pathname!==n.pathname&&(n.pathname=g.props.page.url.pathname),r=e?e.state:r,!e){const k=s?0:1,K={[j]:E+=k,[F]:x+=k,[Lt]:r};(s?history.replaceState:history.pushState).call(history,K,"",n),s||Ie(E,x)}const y=d&&(v==null?void 0:v.id)===d.id?v.fork:null;v!=null&&v.fork&&!y?ot():(v=null,D={element:void 0,href:void 0}),g.props.page.state=r;let S;if(it){const k=(await Promise.all(Array.from(Ce,M=>M(m.navigation)))).filter(M=>typeof M=="function");if(k.length>0){let M=function(){k.forEach(pt=>{z.delete(pt)})};k.push(M),k.forEach(pt=>{z.add(pt)})}const K=m.navigation.to;w={...g.state,nav:{params:K.params,route:K.route,url:K.url}},g.props.page&&(g.props.page.url=n),!o&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&document.activeElement.blur();const ht=y&&await y;ht?S=ht.commit():(V=null,It.$set(g.props),V&&Object.assign(g.props.page,V),zt(g.props.page),S=(N=ue)==null?void 0:N()),te=!0}else await re(g,bt,!1);const{activeElement:A}=document;if(await S,await tt(),await tt(),U!==l){m.reject(new Error("navigation aborted"));return}g.props.page&&V&&Object.assign(g.props.page,V);let O=null;if(Ft){const k=e?e.scroll:a?$():null;k?scrollTo(k.x,k.y):(O=n.hash&&document.getElementById(ce(n)))?O.scrollIntoView():scrollTo(0,0)}const X=document.activeElement!==A&&document.activeElement!==document.body;!o&&!X&&ze(n,!O),Ft=!0,J=!1,m.fulfil(void 0),m.navigation.to&&(m.navigation.to.scroll=$()),z.forEach(k=>k(m.navigation)),t==="popstate"&&ne(x),I.navigating.set(wt.current=null)}async function le(t,n,e,o,a){return t.origin===Bt&&t.pathname===location.pathname&&!Zt?await jt({status:o,error:e,url:t,route:n}):await W(t,a)}let D={element:void 0,href:void 0};function Ke(){let t,n;P.addEventListener("mousemove",r=>{const i=r.target;clearTimeout(t),t=setTimeout(()=>{a(i,B.hover)},20)});function e(r){r.defaultPrevented||a(r.composedPath()[0],B.tap)}P.addEventListener("mousedown",e),P.addEventListener("touchstart",e,{passive:!0});const o=new IntersectionObserver(r=>{for(const i of r)i.isIntersecting&&(_t(new URL(i.target.href)),o.unobserve(i.target))},{threshold:0});async function a(r,i){const l=Vt(r,P),c=l===D.element&&(l==null?void 0:l.href)===D.href&&i>=n;if(!l||c)return;const{url:u,external:p,download:_}=vt(l,L,b.hash);if(p||_)return;const d=et(l),m=u&&ct(w.url)===ct(u);if(!(d.reload||m))if(i<=d.preload_data){D={element:l,href:l.href},n=B.tap;const f=await ut(u,!1);if(!f)return;je(f)}else i<=d.preload_code&&(D={element:l,href:l.href},n=i,_t(u))}function s(){o.disconnect();for(const r of P.querySelectorAll("a")){const{url:i,external:l,download:c}=vt(r,L,b.hash);if(l||c)continue;const u=et(r);u.reload||(u.preload_code===B.viewport&&o.observe(r),u.preload_code===B.eager&&_t(i))}}z.add(s),s()}function H(t,n){if(t instanceof kt)return t.body;const e=Pt(t),o=Pe(t);return b.hooks.handleError({error:t,event:n,status:e,message:o})??{message:o}}function en(t,n={}){return t=new URL(ft(t)),t.origin!==Bt?Promise.reject(new Error("goto: invalid URL")):ae(t,n,0)}function Me(t){if(typeof t=="function")at.push(t);else{const{href:n}=new URL(t,location.href);at.push(e=>e.href===n)}}function nn(t,n){const e={[j]:E,[F]:x,[Yt]:R.url.href,[Lt]:n};history.replaceState(e,"",ft(t)),R.state=n,It.$set({page:Ue(()=>dt(R))})}function Be(){var n;history.scrollRestoration="manual",addEventListener("beforeunload",e=>{let o=!1;if(Mt(),!J){const a=$t(w,void 0,null,"leave"),s={...a.navigation,cancel:()=>{o=!0,a.reject(new Error("navigation cancelled"))}};Qt.forEach(r=>r(s))}o?(e.preventDefault(),e.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&Mt()}),(n=navigator.connection)!=null&&n.saveData||Ke(),P.addEventListener("click",async e=>{if(e.button||e.which!==1||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.defaultPrevented)return;const o=Vt(e.composedPath()[0],P);if(!o)return;const{url:a,external:s,target:r,download:i}=vt(o,L,b.hash);if(!a)return;if(r==="_parent"||r==="_top"){if(window.parent!==window)return}else if(r&&r!=="_self")return;const l=et(o);if(!(o instanceof SVGAElement)&&a.protocol!==location.protocol&&!(a.protocol==="https:"||a.protocol==="http:")||i)return;const[u,p]=(b.hash?a.hash.replace(/^#/,""):a.href).split("#"),_=u===mt(location);if(s||l.reload&&(!_||!p)){se({url:a,type:"link",event:e})?J=!0:e.preventDefault();return}if(p!==void 0&&_){const[,d]=w.url.href.split("#");if(d===p){if(e.preventDefault(),p===""||p==="top"&&o.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const m=o.ownerDocument.getElementById(decodeURIComponent(p));m&&(m.scrollIntoView(),m.focus())}return}if(Y=!0,At(E),t(a),!l.replace_state)return;Y=!1}e.preventDefault(),await new Promise(d=>{requestAnimationFrame(()=>{setTimeout(d,0)}),setTimeout(d,100)}),await q({type:"link",url:a,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??a.href===location.href,event:e})}),P.addEventListener("submit",e=>{if(e.defaultPrevented)return;const o=HTMLFormElement.prototype.cloneNode.call(e.target),a=e.submitter;if(((a==null?void 0:a.formTarget)||o.target)==="_blank"||((a==null?void 0:a.formMethod)||o.method)!=="get")return;const i=new URL((a==null?void 0:a.hasAttribute("formaction"))&&(a==null?void 0:a.formAction)||o.action);if(Rt(i,L,!1))return;const l=e.target,c=et(l);if(c.reload)return;e.preventDefault(),e.stopPropagation();const u=new FormData(l,a);i.search=new URLSearchParams(u).toString(),q({type:"form",url:i,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??i.href===location.href,event:e})}),addEventListener("popstate",async e=>{var o;if(!Et){if((o=e.state)!=null&&o[j]){const a=e.state[j];if(U={},a===E)return;const s=C[a],r=e.state[Lt]??{},i=new URL(e.state[Yt]??location.href),l=e.state[F],c=w.url?mt(location)===mt(w.url):!1;if(l===x&&(te||c)){r!==R.state&&(R.state=r),t(i),C[E]=$(),s&&scrollTo(s.x,s.y),E=a;return}const p=a-E;await q({type:"popstate",url:i,popped:{state:r,scroll:s,delta:p},accept:()=>{E=a,x=l},block:()=>{history.go(-p)},nav_token:U,event:e})}else if(!Y){const a=new URL(location.href);t(a),b.hash&&location.reload()}}}),addEventListener("hashchange",()=>{Y&&(Y=!1,history.replaceState({...history.state,[j]:++E,[F]:x},"",location.href))});for(const e of document.querySelectorAll("link"))Te.has(e.rel)&&(e.href=e.href);addEventListener("pageshow",e=>{e.persisted&&I.navigating.set(wt.current=null)});function t(e){w.url=R.url=e,I.page.set(dt(R)),I.page.notify()}}async function Ve(t,{status:n=200,error:e,node_ids:o,params:a,route:s,server_route:r,data:i,form:l}){Zt=!0;const c=new URL(location.href);let u;({params:a={},route:s={id:null}}=await ut(c,!1)||{}),u=Ut.find(({id:d})=>d===s.id);let p,_=!0;try{const d=o.map(async(f,h)=>{const g=i[h];return g!=null&&g.uses&&(g.uses=Ye(g.uses)),Ct({loader:b.nodes[f],url:c,params:a,route:s,parent:async()=>{const y={};for(let S=0;S<h;S+=1)Object.assign(y,(await d[S]).data);return y},server_data_node:Ot(g)})}),m=await Promise.all(d);if(u){const f=u.layouts;for(let h=0;h<f.length;h++)f[h]||m.splice(h,0,void 0)}p=await lt({url:c,params:a,branch:m,status:n,error:e,errors:u==null?void 0:u.errors,form:l,route:u??null})}catch(d){if(d instanceof xt)return await W(new URL(d.location,location.href));p=await jt({status:Pt(d),error:await H(d,{url:c,params:a,route:s}),url:c,route:s}),t.textContent="",_=!1}p&&(p.props.page&&(p.props.page.state={}),await re(p,t,_))}function Ye(t){return{dependencies:new Set((t==null?void 0:t.dependencies)??[]),params:new Set((t==null?void 0:t.params)??[]),parent:!!(t!=null&&t.parent),route:!!(t!=null&&t.route),url:!!(t!=null&&t.url),search_params:new Set((t==null?void 0:t.search_params)??[])}}let Et=!1;function ze(t,n=!0){const e=document.querySelector("[autofocus]");if(e)e.focus();else{const o=ce(t);if(o&&document.getElementById(o)){const{x:s,y:r}=$();setTimeout(()=>{const i=history.state;Et=!0,location.replace(new URL(`#${o}`,location.href)),history.replaceState(i,"",t),n&&scrollTo(s,r),Et=!1})}else{const s=document.body,r=s.getAttribute("tabindex");s.tabIndex=-1,s.focus({preventScroll:!0,focusVisible:!1}),r!==null?s.setAttribute("tabindex",r):s.removeAttribute("tabindex")}const a=getSelection();if(a&&a.type!=="None"){const s=[];for(let r=0;r<a.rangeCount;r+=1)s.push(a.getRangeAt(r));setTimeout(()=>{if(a.rangeCount===s.length){for(let r=0;r<a.rangeCount;r+=1){const i=s[r],l=a.getRangeAt(r);if(i.commonAncestorContainer!==l.commonAncestorContainer||i.startContainer!==l.startContainer||i.endContainer!==l.endContainer||i.startOffset!==l.startOffset||i.endOffset!==l.endOffset)return}a.removeAllRanges()}})}}}function $t(t,n,e,o,a=null){var c,u;let s,r;const i=new Promise((p,_)=>{s=p,r=_});return i.catch(T),{navigation:{from:{params:t.params,route:{id:((c=t.route)==null?void 0:c.id)??null},url:t.url,scroll:$()},to:e&&{params:(n==null?void 0:n.params)??null,route:{id:((u=n==null?void 0:n.route)==null?void 0:u.id)??null},url:e,scroll:a},willUnload:!n,type:o,complete:i},fulfil:s,reject:r}}function dt(t){return{data:t.data,error:t.error,form:t.form,params:t.params,route:t.route,state:t.state,status:t.status,url:t.url}}function Ge(t){const n=new URL(t);return n.hash=decodeURIComponent(t.hash),n}function ce(t){let n;if(b.hash){const[,,e]=t.hash.split("#",3);n=e??""}else n=t.hash.slice(1);return decodeURIComponent(n)}export{tn as a,en as g,nn as r,I as s};
@@ -1 +0,0 @@
1
- var N=t=>{throw TypeError(t)};var W=(t,e,n)=>e.has(t)||N("Cannot "+n);var i=(t,e,n)=>(W(t,e,"read from private field"),n?n.call(t):e.get(t)),u=(t,e,n)=>e.has(t)?N("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n);import{o as I}from"./DnMQeiTY.js";import{w as f,j as d,y as h}from"./CR-uVjxM.js";import{w as q}from"./DNvczHUR.js";import{b as X}from"./B0XwC4Ot.js";const z="1789488998291";var j;const M=((j=globalThis.__sveltekit_wbvdp0)==null?void 0:j.base)??"";var V;const F=((V=globalThis.__sveltekit_wbvdp0)==null?void 0:V.assets)??M??"";new URL("sveltekit-internal://");function ce(t,e){return t==="/"||e==="ignore"?t:e==="never"?t.endsWith("/")?t.slice(0,-1):t:e==="always"&&!t.endsWith("/")?t+"/":t}function ue(t){return t.split("%25").map(decodeURI).join("%25")}function fe(t){for(const e in t)t[e]=decodeURIComponent(t[e]);return t}function de({href:t}){return t.split("#")[0]}function he(t,e,n,r=!1){const s=new URL(t);Object.defineProperty(s,"searchParams",{value:new Proxy(s.searchParams,{get(o,a){if(a==="get"||a==="getAll"||a==="has")return(E,...J)=>(n(E),o[a](E,...J));e();const c=Reflect.get(o,a);return typeof c=="function"?c.bind(o):c}}),enumerable:!0,configurable:!0});const l=["href","pathname","search","toString","toJSON"];r&&l.push("hash");for(const o of l)Object.defineProperty(s,o,{get(){return e(),t[o]},enumerable:!0,configurable:!0});return s}function Q(){}function Z(...t){let e=5381;for(const n of t)if(typeof n=="string"){let r=n.length;for(;r;)e=e*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let s=r.length;for(;s;)e=e*33^r[--s]}else throw new TypeError("value must be a string or TypedArray");return(e>>>0).toString(36)}const ee=window.fetch;window.fetch=(t,e)=>((t instanceof Request?t.method:(e==null?void 0:e.method)||"GET")!=="GET"&&b.delete(O(t)),ee(t,e));const b=new Map;function ge(t,e){const n=O(t,e),r=document.querySelector(n);if(r!=null&&r.textContent){r.remove();let{body:s,...l}=JSON.parse(r.textContent);r.getAttribute("data-b64")!==null&&(s=X(s));const a=r.getAttribute("data-ttl");return a&&b.set(n,{body:s,init:l,ttl:1e3*Number(a)}),Promise.resolve(new Response(s,l))}return window.fetch(t,e)}function be(t,e,n){if(b.size>0){const r=O(t,n),s=b.get(r);if(s){if(performance.now()<s.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(s.body,s.init);b.delete(r)}}return window.fetch(e,n)}function O(t,e){let r=`script[data-sveltekit-fetched][data-url=${JSON.stringify(t instanceof Request?t.url:t)}]`;if(e!=null&&e.headers||e!=null&&e.body){const s=[];e.headers&&s.push([...new Headers(e.headers)].join(",")),e.body&&(typeof e.body=="string"||ArrayBuffer.isView(e.body))&&s.push(e.body),r+=`[data-hash="${Z(...s)}"]`}return r}const _e="sveltekit:snapshot",pe="sveltekit:scroll",we="sveltekit:states",me="sveltekit:pageurl",ve="sveltekit:history",ye="sveltekit:navigation",L={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},H=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...H];const te=new Set([...H]);[...te];const K=location.origin;function Re(t){if(t instanceof URL)return t;let e=document.baseURI;if(!e){const n=document.getElementsByTagName("base");e=n.length?n[0].href:document.URL}return new URL(t,e)}function Se(){return{x:pageXOffset,y:pageYOffset}}function g(t,e){return t.getAttribute(`data-sveltekit-${e}`)}const P={...L,"":L.hover};function B(t){let e=t.assignedSlot??t.parentNode;return(e==null?void 0:e.nodeType)===11&&(e=e.host),e}function Ae(t,e){for(;t&&t!==e;){if(t.nodeName.toUpperCase()==="A"&&t.hasAttribute("href"))return t;t=B(t)}}function ke(t,e,n){let r;try{if(r=new URL(t instanceof SVGAElement?t.href.baseVal:t.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const a=location.hash.split("#")[1]||"/";r.hash=`#${a}${r.hash}`}}catch{}const s=t instanceof SVGAElement?t.target.baseVal:t.target,l=!r||!!s||ne(r,e,n)||(t.getAttribute("rel")||"").split(/\s+/).includes("external"),o=(r==null?void 0:r.origin)===K&&t.hasAttribute("download");return{url:r,external:l,target:s,download:o}}function Ee(t){let e=null,n=null,r=null,s=null,l=null,o=null,a=t;for(;a&&a!==document.documentElement;)r===null&&(r=g(a,"preload-code")),s===null&&(s=g(a,"preload-data")),e===null&&(e=g(a,"keepfocus")),n===null&&(n=g(a,"noscroll")),l===null&&(l=g(a,"reload")),o===null&&(o=g(a,"replacestate")),a=B(a);function c(E){switch(E){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:P[r??"off"],preload_data:P[s??"off"],keepfocus:c(e),noscroll:c(n),reload:c(l),replace_state:c(o)}}function Te(t){const e=q(t);let n=!0;function r(){n=!0,e.update(o=>o)}function s(o){n=!1,e.set(o)}function l(o){let a;return e.subscribe(c=>{(a===void 0||n&&c!==a)&&o(a=c)})}return{notify:r,set:s,subscribe:l}}const D={v:Q};function Ue(){const{set:t,subscribe:e}=q(!1);let n;async function r(){clearTimeout(n);try{const s=await fetch(`${F}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!s.ok)return!1;const o=(await s.json()).version!==z;return o&&(t(!0),D.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:e,check:r}}function ne(t,e,n){return t.origin!==K||!t.pathname.startsWith(e)?!0:n?t.pathname!==location.pathname:!1}function Oe(t){}let U,x,T;const re=I.toString().includes("$$")||/function \w+\(\) \{\}/.test(I.toString()),$="a:";var _,p,w,m,v,y,R,S,C,A,G,k,Y;re?(U={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL($)},x={current:null},T={current:!1}):(U=new(C=class{constructor(){u(this,_,f({}));u(this,p,f(null));u(this,w,f(null));u(this,m,f({}));u(this,v,f({id:null}));u(this,y,f({}));u(this,R,f(-1));u(this,S,f(new URL($)))}get data(){return d(i(this,_))}set data(e){h(i(this,_),e)}get form(){return d(i(this,p))}set form(e){h(i(this,p),e)}get error(){return d(i(this,w))}set error(e){h(i(this,w),e)}get params(){return d(i(this,m))}set params(e){h(i(this,m),e)}get route(){return d(i(this,v))}set route(e){h(i(this,v),e)}get state(){return d(i(this,y))}set state(e){h(i(this,y),e)}get status(){return d(i(this,R))}set status(e){h(i(this,R),e)}get url(){return d(i(this,S))}set url(e){h(i(this,S),e)}},_=new WeakMap,p=new WeakMap,w=new WeakMap,m=new WeakMap,v=new WeakMap,y=new WeakMap,R=new WeakMap,S=new WeakMap,C),x=new(G=class{constructor(){u(this,A,f(null))}get current(){return d(i(this,A))}set current(e){h(i(this,A),e)}},A=new WeakMap,G),T=new(Y=class{constructor(){u(this,k,f(!1))}get current(){return d(i(this,k))}set current(e){h(i(this,k),e)}},k=new WeakMap,Y),D.v=()=>T.current=!0);function Pe(t){Object.assign(U,t)}export{ve as H,ye as N,me as P,we as S,x as a,M as b,Ee as c,de as d,fe as e,Ae as f,ke as g,ce as h,ne as i,Ue as j,Te as k,L as l,he as m,Q as n,K as o,U as p,ue as q,Re as r,Se as s,_e as t,Pe as u,be as v,ge as w,pe as x,Oe as y};