opencami 1.8.9 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +4 -2
  2. package/dist/client/assets/{CSPContext-DI-5GAnQ.js → CSPContext-TfUptlEu.js} +1 -1
  3. package/dist/client/assets/{DirectionContext-CrIsc5n9.js → DirectionContext-CQMv7g2N.js} +1 -1
  4. package/dist/client/assets/_sessionKey-DYknvaDS.js +23 -0
  5. package/dist/client/assets/agents-DNywJUai.js +2 -0
  6. package/dist/client/assets/agents-screen-fSZJpRi_.js +1 -0
  7. package/dist/client/assets/bots-Bqjqhws8.js +2 -0
  8. package/dist/client/assets/{bots-screen-BTKCOohV.js → bots-screen-4yT-e3cM.js} +1 -1
  9. package/dist/client/assets/{button-8ab4wOwy.js → button-DqP4GZwZ.js} +1 -1
  10. package/dist/client/assets/{composite-B2qsrzf3.js → composite-BLgu_EOL.js} +1 -1
  11. package/dist/client/assets/{connect-B3_p7C4I.js → connect-CiqRvR6s.js} +1 -1
  12. package/dist/client/assets/{dashboard-BtClHYpn.js → dashboard-CyWDWpbj.js} +1 -1
  13. package/dist/client/assets/event-2_Dxdv7h.js +1 -0
  14. package/dist/client/assets/file-explorer-screen-CZ2QKk-0.js +1 -0
  15. package/dist/client/assets/files-Cbhud0J8.js +2 -0
  16. package/dist/client/assets/follow-up-suggestions-Bi3Ci2my.js +5 -0
  17. package/dist/client/assets/{index-BXiha-Vz.js → index-C_gsW9fo.js} +1 -1
  18. package/dist/client/assets/{index-CtlYu8Ug.js → index-ygitKeM-.js} +1 -1
  19. package/dist/client/assets/keyboard-shortcuts-dialog-z-amTZVi.js +1 -0
  20. package/dist/client/assets/main-ZBMVSJTF.js +212 -0
  21. package/dist/client/assets/markdown-CHUjmWcv.js +87 -0
  22. package/dist/client/assets/memory-BRa-0plj.js +2 -0
  23. package/dist/client/assets/memory-screen-C_ZNDGLd.js +1 -0
  24. package/dist/client/assets/menu-CB88T7R1.js +1 -0
  25. package/dist/client/assets/{opencami-logo-BSed2Wez.js → opencami-logo-C0Kj1DiT.js} +1 -1
  26. package/dist/client/assets/proxy-D-juuhw6.js +9 -0
  27. package/dist/client/assets/{react-WkSlhZJd.js → react-Akh4y69S.js} +1 -1
  28. package/dist/client/assets/search-dialog-BasfzCyM.js +1 -0
  29. package/dist/client/assets/{search-sources-badge-Du8KpUEb.js → search-sources-badge-DwFHWd7S.js} +1 -1
  30. package/dist/client/assets/session-export-dialog-CAl3iJnD.js +1 -0
  31. package/dist/client/assets/settings-dialog-C8OoRXwX.js +1 -0
  32. package/dist/client/assets/skills-Cx12984a.js +2 -0
  33. package/dist/client/assets/{skills-panel-CVh1I-7D.js → skills-panel-B7BRAofP.js} +1 -1
  34. package/dist/client/assets/styles-CXa-SiWC.css +1 -0
  35. package/dist/client/assets/switch-DYEbEgy5.js +1 -0
  36. package/dist/client/assets/tabs-eiBvL0H7.js +1 -0
  37. package/dist/client/assets/thinking-CariuioI.js +1 -0
  38. package/dist/client/assets/tooltip-CekkGEYG.js +1 -0
  39. package/dist/client/assets/use-file-explorer-state-Dfyh4GwR.js +12 -0
  40. package/dist/client/assets/{useBaseUiId-DiwX_3so.js → useBaseUiId-DLhdkHJl.js} +1 -1
  41. package/dist/client/assets/{useCompositeItem-UPIPwR9H.js → useCompositeItem-DTSTTR0Z.js} +1 -1
  42. package/dist/client/assets/{useControlled-CT2hRlcU.js → useControlled-CpliTEve.js} +1 -1
  43. package/dist/client/assets/{useMutation-rx8UH99I.js → useMutation-CpD2Pn0F.js} +1 -1
  44. package/dist/client/assets/useOnFirstRender-DsFYFJoB.js +1 -0
  45. package/dist/client/assets/{useQuery-Boaa6oF3.js → useQuery-DMTgpIql.js} +1 -1
  46. package/dist/server/assets/{_sessionKey-B6iYeyCS.js → _sessionKey-Bhksr7VP.js} +267 -156
  47. package/dist/server/assets/{_tanstack-start-manifest_v-C9chPgNH.js → _tanstack-start-manifest_v-D-5ReiD4.js} +1 -1
  48. package/dist/server/assets/{agents-CmQ4vvXm.js → agents-BuE0Yum3.js} +1 -1
  49. package/dist/server/assets/{agents-screen-bmrIyFbk.js → agents-screen-CEQhbEwf.js} +3 -3
  50. package/dist/server/assets/{bots-Byt6jv0a.js → bots-BDHeSvSQ.js} +1 -1
  51. package/dist/server/assets/{bots-screen-C2TGFv42.js → bots-screen-C0NRS526.js} +2 -2
  52. package/dist/server/assets/{button-CwY2OHFj.js → button-kI8fEIZQ.js} +1 -1
  53. package/dist/server/assets/{connect-BNabuqpW.js → connect-CTVBm0Vc.js} +2 -2
  54. package/dist/server/assets/{file-explorer-screen-DH4UFK03.js → file-explorer-screen-FU_NhZmS.js} +4 -4
  55. package/dist/server/assets/{files-DYdXlQDr.js → files-DLxqp-h5.js} +1 -1
  56. package/dist/server/assets/{follow-up-suggestions-mzRQIB0k.js → follow-up-suggestions-B3hol2KT.js} +8 -8
  57. package/dist/server/assets/{index-COElhwGA.js → index-4G_4vZNY.js} +1 -1
  58. package/dist/server/assets/{index-BEWnDAH6.js → index-B_F4DTUu.js} +1 -1
  59. package/dist/server/assets/{keyboard-shortcuts-dialog-Cr6fOqHz.js → keyboard-shortcuts-dialog-Cp3ECNNi.js} +2 -2
  60. package/dist/server/assets/{markdown-DoX5Q7qh.js → markdown-CFdYXCRQ.js} +3 -3
  61. package/dist/server/assets/{memory-Cxu7i8ej.js → memory-rBB015W-.js} +1 -1
  62. package/dist/server/assets/{memory-screen-B5l1NZRY.js → memory-screen-vqXczcVo.js} +4 -4
  63. package/dist/server/assets/{menu-D90CDTi2.js → menu-D8cKTpmN.js} +1 -1
  64. package/dist/server/assets/{router-BqLGFd4L.js → router-C9JRmWMm.js} +142 -103
  65. package/dist/server/assets/{search-dialog-CmI7naPN.js → search-dialog-CTJULPB8.js} +8 -8
  66. package/dist/server/assets/{search-sources-badge-B0rAEDs_.js → search-sources-badge-B0t8Qffy.js} +1 -1
  67. package/dist/server/assets/{session-export-dialog-C53RRAah.js → session-export-dialog-CgtlOnwf.js} +2 -2
  68. package/dist/server/assets/{settings-dialog-BZ67gr9N.js → settings-dialog-B5yR2pBy.js} +35 -18
  69. package/dist/server/assets/{skills-Cy8xclXY.js → skills-BXUivxuo.js} +1 -1
  70. package/dist/server/assets/{skills-panel-BnRNb7u9.js → skills-panel-CDUp4jvw.js} +2 -2
  71. package/dist/server/assets/{switch-BbkUeVDV.js → switch-BZzwkgAQ.js} +1 -1
  72. package/dist/server/assets/{tabs-DDFZob0m.js → tabs-CWbp3mT4.js} +1 -1
  73. package/dist/server/assets/{thinking-CA8PSwKJ.js → thinking-CHx4Oouj.js} +8 -8
  74. package/dist/server/assets/{tooltip-DgsSPocE.js → tooltip-DOvOrSSS.js} +1 -1
  75. package/dist/server/assets/{use-file-explorer-state-s7CS50ho.js → use-file-explorer-state-E6cUvMva.js} +1 -1
  76. package/dist/server/server.js +195 -38
  77. package/package.json +1 -1
  78. package/dist/client/assets/_sessionKey-B4NZmxf3.js +0 -21
  79. package/dist/client/assets/agents-bptidK8z.js +0 -2
  80. package/dist/client/assets/agents-screen-6qdnPmx2.js +0 -1
  81. package/dist/client/assets/bots-BWpbaQ-E.js +0 -2
  82. package/dist/client/assets/event-DG3RKJz8.js +0 -1
  83. package/dist/client/assets/file-explorer-screen-Djl8x-8P.js +0 -1
  84. package/dist/client/assets/files-CjbCJDgC.js +0 -2
  85. package/dist/client/assets/follow-up-suggestions-BSCMXRXh.js +0 -5
  86. package/dist/client/assets/keyboard-shortcuts-dialog-HAufCn9C.js +0 -1
  87. package/dist/client/assets/main-CQKtcNr3.js +0 -210
  88. package/dist/client/assets/markdown-DFJF-FsV.js +0 -87
  89. package/dist/client/assets/memory-DnJOmcwU.js +0 -2
  90. package/dist/client/assets/memory-screen-Bm4NMAnU.js +0 -1
  91. package/dist/client/assets/menu-D26Vmgxl.js +0 -1
  92. package/dist/client/assets/popupStateMapping-DkI2OCkW.js +0 -1
  93. package/dist/client/assets/proxy-CHQ-VCN1.js +0 -9
  94. package/dist/client/assets/search-dialog-CCl4d0Pi.js +0 -1
  95. package/dist/client/assets/session-export-dialog-io9FvLKq.js +0 -1
  96. package/dist/client/assets/settings-dialog-B93qswor.js +0 -1
  97. package/dist/client/assets/skills-BNDGnHwM.js +0 -2
  98. package/dist/client/assets/styles-Ce2xZzc4.css +0 -1
  99. package/dist/client/assets/switch-CSnzINDW.js +0 -1
  100. package/dist/client/assets/tabs-CWfn44FL.js +0 -1
  101. package/dist/client/assets/thinking-BmoLlbFC.js +0 -1
  102. package/dist/client/assets/tooltip-CSGMH2t4.js +0 -1
  103. package/dist/client/assets/use-file-explorer-state-BYVzjwPA.js +0 -12
@@ -1,32 +1,32 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useState, useEffect } from "react";
3
- import { C as Collapsible, d as CollapsibleTrigger, e as CollapsiblePanel } from "./_sessionKey-B6iYeyCS.js";
3
+ import { C as Collapsible, d as CollapsibleTrigger, e as CollapsiblePanel } from "./_sessionKey-Bhksr7VP.js";
4
4
  import { HugeiconsIcon } from "@hugeicons/react";
5
5
  import { ArrowDown01Icon } from "@hugeicons/core-free-icons";
6
- import { B as Button } from "./button-CwY2OHFj.js";
6
+ import { B as Button } from "./button-kI8fEIZQ.js";
7
7
  import "@tanstack/react-router";
8
8
  import "@tanstack/react-query";
9
- import "./tooltip-DgsSPocE.js";
9
+ import "./tooltip-DOvOrSSS.js";
10
10
  import "@base-ui/react/tooltip";
11
11
  import "motion/react";
12
12
  import "@base-ui/react/alert-dialog";
13
- import "./use-file-explorer-state-s7CS50ho.js";
13
+ import "./use-file-explorer-state-E6cUvMva.js";
14
14
  import "@base-ui/react/dialog";
15
15
  import "zustand";
16
16
  import "@base-ui/react/collapsible";
17
17
  import "@base-ui/react/scroll-area";
18
- import "./menu-D90CDTi2.js";
18
+ import "./menu-D8cKTpmN.js";
19
19
  import "@base-ui/react/menu";
20
20
  import "./opencami-logo-C-43FL3R.js";
21
- import "./markdown-DoX5Q7qh.js";
21
+ import "./markdown-CFdYXCRQ.js";
22
22
  import "marked";
23
23
  import "react-markdown";
24
24
  import "remark-breaks";
25
25
  import "remark-gfm";
26
- import "./index-BEWnDAH6.js";
26
+ import "./index-B_F4DTUu.js";
27
27
  import "zustand/middleware";
28
28
  import "react-dom";
29
- import "./router-BqLGFd4L.js";
29
+ import "./router-C9JRmWMm.js";
30
30
  import "node:crypto";
31
31
  import "node:fs";
32
32
  import "node:os";
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { Tooltip } from "@base-ui/react/tooltip";
3
- import { c as cn } from "./button-CwY2OHFj.js";
3
+ import { c as cn } from "./button-kI8fEIZQ.js";
4
4
  const defaultChatUiState = {
5
5
  isSidebarCollapsed: false
6
6
  };
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Dialog } from "@base-ui/react/dialog";
3
- import { c as cn, B as Button } from "./button-CwY2OHFj.js";
3
+ import { c as cn, B as Button } from "./button-kI8fEIZQ.js";
4
4
  import { create } from "zustand";
5
5
  function DialogRoot({ children, ...props }) {
6
6
  return /* @__PURE__ */ jsx(Dialog.Root, { ...props, children });
@@ -184,19 +184,11 @@ function getResponse() {
184
184
  return event.res;
185
185
  }
186
186
  async function getStartManifest(matchedRoutes) {
187
- const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-C9chPgNH.js");
187
+ const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-D-5ReiD4.js");
188
188
  const startManifest = tsrStartManifest();
189
189
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
190
190
  rootRoute.assets = rootRoute.assets || [];
191
- let script = `import('${startManifest.clientEntry}')`;
192
- rootRoute.assets.push({
193
- tag: "script",
194
- attrs: {
195
- type: "module",
196
- async: true
197
- },
198
- children: script
199
- });
191
+ let injectedHeadScripts;
200
192
  const manifest2 = {
201
193
  routes: Object.fromEntries(
202
194
  Object.entries(startManifest.routes).flatMap(([k, v]) => {
@@ -217,7 +209,11 @@ async function getStartManifest(matchedRoutes) {
217
209
  })
218
210
  )
219
211
  };
220
- return manifest2;
212
+ return {
213
+ manifest: manifest2,
214
+ clientEntry: startManifest.clientEntry,
215
+ injectedHeadScripts
216
+ };
221
217
  }
222
218
  const textEncoder$1 = new TextEncoder();
223
219
  const EMPTY_PAYLOAD = new Uint8Array(0);
@@ -375,10 +371,6 @@ const handleServerAction = async ({
375
371
  context,
376
372
  serverFnId
377
373
  }) => {
378
- const controller = new AbortController();
379
- const signal = controller.signal;
380
- const abort = () => controller.abort();
381
- request.signal.addEventListener("abort", abort);
382
374
  const method = request.method;
383
375
  const methodUpper = method.toUpperCase();
384
376
  const methodLower = method.toLowerCase();
@@ -446,17 +438,17 @@ const handleServerAction = async ({
446
438
  }
447
439
  if (rawStreams.size > 0) {
448
440
  const jsonStream = new ReadableStream({
449
- start(controller2) {
441
+ start(controller) {
450
442
  callbacks.onParse = (value) => {
451
- controller2.enqueue(JSON.stringify(value) + "\n");
443
+ controller.enqueue(JSON.stringify(value) + "\n");
452
444
  };
453
445
  callbacks.onDone = () => {
454
446
  try {
455
- controller2.close();
447
+ controller.close();
456
448
  } catch {
457
449
  }
458
450
  };
459
- callbacks.onError = (error) => controller2.error(error);
451
+ callbacks.onError = (error) => controller.error(error);
460
452
  if (nonStreamingBody !== void 0) {
461
453
  callbacks.onParse(nonStreamingBody);
462
454
  }
@@ -476,18 +468,18 @@ const handleServerAction = async ({
476
468
  });
477
469
  }
478
470
  const stream = new ReadableStream({
479
- start(controller2) {
480
- callbacks.onParse = (value) => controller2.enqueue(
471
+ start(controller) {
472
+ callbacks.onParse = (value) => controller.enqueue(
481
473
  textEncoder.encode(JSON.stringify(value) + "\n")
482
474
  );
483
475
  callbacks.onDone = () => {
484
476
  try {
485
- controller2.close();
477
+ controller.close();
486
478
  } catch (error) {
487
- controller2.error(error);
479
+ controller.error(error);
488
480
  }
489
481
  };
490
- callbacks.onError = (error) => controller2.error(error);
482
+ callbacks.onError = (error) => controller.error(error);
491
483
  if (nonStreamingBody !== void 0) {
492
484
  callbacks.onParse(nonStreamingBody);
493
485
  }
@@ -539,7 +531,7 @@ const handleServerAction = async ({
539
531
  if (false) ;
540
532
  }
541
533
  }
542
- return await action(params, signal);
534
+ return await action(params);
543
535
  }
544
536
  if (methodLower === "get") {
545
537
  const payloadParam = url.searchParams.get("payload");
@@ -549,7 +541,7 @@ const handleServerAction = async ({
549
541
  const payload2 = payloadParam ? parsePayload(JSON.parse(payloadParam)) : {};
550
542
  payload2.context = safeObjectMerge(context, payload2.context);
551
543
  payload2.method = methodUpper;
552
- return await action(payload2, signal);
544
+ return await action(payload2);
553
545
  }
554
546
  if (methodLower !== "post") {
555
547
  throw new Error("expected POST method");
@@ -561,7 +553,7 @@ const handleServerAction = async ({
561
553
  const payload = jsonPayload ? parsePayload(jsonPayload) : {};
562
554
  payload.context = safeObjectMerge(payload.context, context);
563
555
  payload.method = methodUpper;
564
- return await action(payload, signal);
556
+ return await action(payload);
565
557
  })();
566
558
  const unwrapped = res.result || res.error;
567
559
  if (isNotFound(res)) {
@@ -609,7 +601,6 @@ const handleServerAction = async ({
609
601
  });
610
602
  }
611
603
  })();
612
- request.signal.removeEventListener("abort", abort);
613
604
  return response;
614
605
  };
615
606
  function isNotFoundResponse(error) {
@@ -622,6 +613,111 @@ function isNotFoundResponse(error) {
622
613
  }
623
614
  });
624
615
  }
616
+ function resolveTransformConfig(transform) {
617
+ if (typeof transform === "string") {
618
+ const prefix = transform;
619
+ return {
620
+ type: "transform",
621
+ transformFn: ({ url }) => `${prefix}${url}`,
622
+ cache: true
623
+ };
624
+ }
625
+ if (typeof transform === "function") {
626
+ return {
627
+ type: "transform",
628
+ transformFn: transform,
629
+ cache: true
630
+ };
631
+ }
632
+ if ("createTransform" in transform && transform.createTransform) {
633
+ return {
634
+ type: "createTransform",
635
+ createTransform: transform.createTransform,
636
+ cache: transform.cache !== false
637
+ };
638
+ }
639
+ const transformFn = typeof transform.transform === "string" ? (({ url }) => `${transform.transform}${url}`) : transform.transform;
640
+ return {
641
+ type: "transform",
642
+ transformFn,
643
+ cache: transform.cache !== false
644
+ };
645
+ }
646
+ function buildClientEntryScriptTag(clientEntry, injectedHeadScripts) {
647
+ const clientEntryLiteral = JSON.stringify(clientEntry);
648
+ let script = `import(${clientEntryLiteral})`;
649
+ if (injectedHeadScripts) {
650
+ script = `${injectedHeadScripts};${script}`;
651
+ }
652
+ return {
653
+ tag: "script",
654
+ attrs: {
655
+ type: "module",
656
+ async: true
657
+ },
658
+ children: script
659
+ };
660
+ }
661
+ function transformManifestUrls(source, transformFn, opts) {
662
+ return (async () => {
663
+ const manifest2 = opts?.clone ? structuredClone(source.manifest) : source.manifest;
664
+ for (const route of Object.values(manifest2.routes)) {
665
+ if (route.preloads) {
666
+ route.preloads = await Promise.all(
667
+ route.preloads.map(
668
+ (url) => Promise.resolve(transformFn({ url, type: "modulepreload" }))
669
+ )
670
+ );
671
+ }
672
+ if (route.assets) {
673
+ for (const asset of route.assets) {
674
+ if (asset.tag === "link" && asset.attrs?.href) {
675
+ asset.attrs.href = await Promise.resolve(
676
+ transformFn({
677
+ url: asset.attrs.href,
678
+ type: "stylesheet"
679
+ })
680
+ );
681
+ }
682
+ }
683
+ }
684
+ }
685
+ const transformedClientEntry = await Promise.resolve(
686
+ transformFn({
687
+ url: source.clientEntry,
688
+ type: "clientEntry"
689
+ })
690
+ );
691
+ const rootRoute = manifest2.routes[rootRouteId];
692
+ if (rootRoute) {
693
+ rootRoute.assets = rootRoute.assets || [];
694
+ rootRoute.assets.push(
695
+ buildClientEntryScriptTag(
696
+ transformedClientEntry,
697
+ source.injectedHeadScripts
698
+ )
699
+ );
700
+ }
701
+ return manifest2;
702
+ })();
703
+ }
704
+ function buildManifestWithClientEntry(source) {
705
+ const scriptTag = buildClientEntryScriptTag(
706
+ source.clientEntry,
707
+ source.injectedHeadScripts
708
+ );
709
+ const baseRootRoute = source.manifest.routes[rootRouteId];
710
+ const routes = {
711
+ ...source.manifest.routes,
712
+ ...baseRootRoute ? {
713
+ [rootRouteId]: {
714
+ ...baseRootRoute,
715
+ assets: [...baseRootRoute.assets || [], scriptTag]
716
+ }
717
+ } : {}
718
+ };
719
+ return { routes };
720
+ }
625
721
  const HEADERS = {
626
722
  TSS_SHELL: "X-TSS_SHELL"
627
723
  };
@@ -654,9 +750,10 @@ function getStartResponseHeaders(opts) {
654
750
  return headers;
655
751
  }
656
752
  let entriesPromise;
657
- let manifestPromise;
753
+ let baseManifestPromise;
754
+ let cachedFinalManifestPromise;
658
755
  async function loadEntries() {
659
- const routerEntry = await import("./assets/router-BqLGFd4L.js").then((n) => n.r);
756
+ const routerEntry = await import("./assets/router-C9JRmWMm.js").then((n) => n.r);
660
757
  const startEntry = await import("./assets/start-HYkvq4Ni.js");
661
758
  return { startEntry, routerEntry };
662
759
  }
@@ -666,11 +763,24 @@ function getEntries() {
666
763
  }
667
764
  return entriesPromise;
668
765
  }
669
- function getManifest(matchedRoutes) {
670
- if (!manifestPromise) {
671
- manifestPromise = getStartManifest();
766
+ function getBaseManifest(matchedRoutes) {
767
+ if (!baseManifestPromise) {
768
+ baseManifestPromise = getStartManifest();
672
769
  }
673
- return manifestPromise;
770
+ return baseManifestPromise;
771
+ }
772
+ async function resolveManifest(matchedRoutes, transformFn, cache) {
773
+ const base = await getBaseManifest();
774
+ const computeFinalManifest = async () => {
775
+ return transformFn ? await transformManifestUrls(base, transformFn, { clone: !cache }) : buildManifestWithClientEntry(base);
776
+ };
777
+ if (!transformFn || cache) {
778
+ if (!cachedFinalManifestPromise) {
779
+ cachedFinalManifestPromise = computeFinalManifest();
780
+ }
781
+ return cachedFinalManifestPromise;
782
+ }
783
+ return computeFinalManifest();
674
784
  }
675
785
  const ROUTER_BASEPATH = "/";
676
786
  const SERVER_FN_BASE = "/_serverFn/";
@@ -744,14 +854,52 @@ function handlerToMiddleware(handler, mayDefer = false) {
744
854
  return response;
745
855
  };
746
856
  }
747
- function createStartHandler(cb) {
857
+ function createStartHandler(cbOrOptions) {
858
+ const cb = typeof cbOrOptions === "function" ? cbOrOptions : cbOrOptions.handler;
859
+ const transformAssetUrlsOption = typeof cbOrOptions === "function" ? void 0 : cbOrOptions.transformAssetUrls;
860
+ const warmupTransformManifest = !!transformAssetUrlsOption && typeof transformAssetUrlsOption === "object" && transformAssetUrlsOption.warmup === true;
861
+ const resolvedTransformConfig = transformAssetUrlsOption ? resolveTransformConfig(transformAssetUrlsOption) : void 0;
862
+ const cache = resolvedTransformConfig ? resolvedTransformConfig.cache : true;
863
+ let cachedCreateTransformPromise;
864
+ const getTransformFn = async (opts) => {
865
+ if (!resolvedTransformConfig) return void 0;
866
+ if (resolvedTransformConfig.type === "createTransform") {
867
+ if (cache) {
868
+ if (!cachedCreateTransformPromise) {
869
+ cachedCreateTransformPromise = Promise.resolve(
870
+ resolvedTransformConfig.createTransform(opts)
871
+ );
872
+ }
873
+ return cachedCreateTransformPromise;
874
+ }
875
+ return resolvedTransformConfig.createTransform(opts);
876
+ }
877
+ return resolvedTransformConfig.transformFn;
878
+ };
879
+ if (warmupTransformManifest && cache && true && !cachedFinalManifestPromise) {
880
+ const warmupPromise = (async () => {
881
+ const base = await getBaseManifest();
882
+ const transformFn = await getTransformFn({ warmup: true });
883
+ return transformFn ? await transformManifestUrls(base, transformFn, { clone: false }) : buildManifestWithClientEntry(base);
884
+ })();
885
+ cachedFinalManifestPromise = warmupPromise;
886
+ warmupPromise.catch(() => {
887
+ if (cachedFinalManifestPromise === warmupPromise) {
888
+ cachedFinalManifestPromise = void 0;
889
+ }
890
+ cachedCreateTransformPromise = void 0;
891
+ });
892
+ }
748
893
  const startRequestResolver = async (request, requestOpts) => {
749
894
  let router = null;
750
895
  let cbWillCleanup = false;
751
896
  try {
752
- const url = getNormalizedURL(request.url);
897
+ const { url, handledProtocolRelativeURL } = getNormalizedURL(request.url);
753
898
  const href = url.pathname + url.search + url.hash;
754
899
  const origin = getOrigin(request);
900
+ if (handledProtocolRelativeURL) {
901
+ return Response.redirect(url, 308);
902
+ }
755
903
  const entries = await getEntries();
756
904
  const startOptions = await entries.startEntry.startInstance?.getOptions() || {};
757
905
  const serializationAdapters = [
@@ -818,6 +966,7 @@ function createStartHandler(cb) {
818
966
  );
819
967
  const ctx2 = await executeMiddleware([...middlewares2, serverFnHandler], {
820
968
  request,
969
+ pathname: url.pathname,
821
970
  context: createNullProtoObject(requestOpts?.context)
822
971
  });
823
972
  return handleRedirectResponse(ctx2.response, request, getRouter);
@@ -835,7 +984,11 @@ function createStartHandler(cb) {
835
984
  { status: 500 }
836
985
  );
837
986
  }
838
- const manifest2 = await getManifest(matchedRoutes);
987
+ const manifest2 = await resolveManifest(
988
+ matchedRoutes,
989
+ await getTransformFn({ warmup: false, request }),
990
+ cache
991
+ );
839
992
  const routerInstance = await getRouter();
840
993
  attachRouterServerSsrUtils({
841
994
  router: routerInstance,
@@ -890,7 +1043,11 @@ function createStartHandler(cb) {
890
1043
  );
891
1044
  const ctx = await executeMiddleware(
892
1045
  [...middlewares, requestHandlerMiddleware],
893
- { request, context: createNullProtoObject(requestOpts?.context) }
1046
+ {
1047
+ request,
1048
+ pathname: url.pathname,
1049
+ context: createNullProtoObject(requestOpts?.context)
1050
+ }
894
1051
  );
895
1052
  return handleRedirectResponse(ctx.response, request, getRouter);
896
1053
  } finally {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencami",
3
- "version": "1.8.9",
3
+ "version": "1.9.0",
4
4
  "type": "module",
5
5
  "description": "OpenCami - A beautiful web client for OpenClaw",
6
6
  "bin": {