@openspecui/web 3.11.1 → 3.11.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 (69) hide show
  1. package/dist/assets/CanvasRenderer-C0z1_uAq.js +1 -0
  2. package/dist/assets/WebGLRenderer-BgB0b-_m.js +1 -0
  3. package/dist/assets/WebGPURenderer-DUOyTSOY.js +1 -0
  4. package/dist/assets/browserAll-DrkY7ahm.js +1 -0
  5. package/dist/assets/{dist-B09y0Ph7.js → dist-B9Ltz3Au.js} +1 -1
  6. package/dist/assets/dist-BLzDSe4i.js +1 -0
  7. package/dist/assets/{dist-F0lgtwe2.js → dist-B_UFDOda.js} +1 -1
  8. package/dist/assets/{dist-DxmYOUGn.js → dist-BggZ7cyQ.js} +1 -1
  9. package/dist/assets/dist-C2tzK2BJ.js +1 -0
  10. package/dist/assets/{dist-C9BN4134.js → dist-DHhbIMeO.js} +1 -1
  11. package/dist/assets/{dist--JzlUmDP.js → dist-DRc-odji.js} +1 -1
  12. package/dist/assets/{dist-rGlPGEMw.js → dist-Drgp5ero.js} +1 -1
  13. package/dist/assets/{dist-Dx00xLFT.js → dist-HIi-Q3U-.js} +1 -1
  14. package/dist/assets/dist-LSzi3-xz.js +1 -0
  15. package/dist/assets/{dist-BttXL4wz.js → dist-j6cthCRX.js} +1 -1
  16. package/dist/assets/{dist-DdsOxRxJ.js → dist-wEqYYKag.js} +1 -1
  17. package/dist/assets/{init-C46YDZ2H.js → init-D41cyy2z.js} +1 -1
  18. package/dist/assets/main-DpM-T-Pk.js +1654 -0
  19. package/dist/assets/main-fCQ7khWW.css +1 -0
  20. package/dist/assets/trpc-lJhbxi32.js +1 -0
  21. package/dist/assets/webworkerAll-DXrA-UNG.js +1 -0
  22. package/dist/index.html +2 -2
  23. package/dist-ssg/client/.vite/ssr-manifest.json +15 -15
  24. package/dist-ssg/client/assets/CanvasRenderer-pScAgtDS.js +1 -0
  25. package/dist-ssg/client/assets/WebGLRenderer-BAJXWFrw.js +1 -0
  26. package/dist-ssg/client/assets/WebGPURenderer-BeNNGqxY.js +1 -0
  27. package/dist-ssg/client/assets/browserAll-CkiE7Jmg.js +1 -0
  28. package/dist-ssg/client/assets/{dist-D_7Z5apg.js → dist-BJ0zzLee.js} +1 -1
  29. package/dist-ssg/client/assets/dist-BJBQISim.js +1 -0
  30. package/dist-ssg/client/assets/dist-BPi1lJ-H.js +1 -0
  31. package/dist-ssg/client/assets/{dist-Dg-rGFsy.js → dist-BZ35ju6s.js} +1 -1
  32. package/dist-ssg/client/assets/{dist-DjZdWHNx.js → dist-Bg-C799P.js} +1 -1
  33. package/dist-ssg/client/assets/dist-CNPnfIVE.js +1 -0
  34. package/dist-ssg/client/assets/{dist-DOwxbW7B.js → dist-CrdkjkLH.js} +1 -1
  35. package/dist-ssg/client/assets/{dist-hWAvow10.js → dist-CuFabXJ8.js} +1 -1
  36. package/dist-ssg/client/assets/{dist-yriBIRgD.js → dist-CzScJNYz.js} +1 -1
  37. package/dist-ssg/client/assets/{dist-BRxWvz6j.js → dist-lNUMJW4A.js} +1 -1
  38. package/dist-ssg/client/assets/{dist-BPn14NhJ.js → dist-nDBVtvCj.js} +1 -1
  39. package/dist-ssg/client/assets/{dist-9ZjKnAh1.js → dist-xprslEpB.js} +1 -1
  40. package/dist-ssg/client/assets/{ghostty-web-BVM0FkWD.js → ghostty-web-D9IXftv-.js} +1 -1
  41. package/dist-ssg/client/assets/index-BtGAsAtP.css +1 -0
  42. package/dist-ssg/client/assets/{index.ssg-C4D0iHIp.js → index.ssg-L1BBuH-7.js} +146 -146
  43. package/dist-ssg/client/assets/{init-DBoYmUC7.js → init-C058TQcq.js} +1 -1
  44. package/dist-ssg/client/assets/trpc-BTuQHFNd.js +1 -0
  45. package/dist-ssg/client/assets/webworkerAll-ByOBLjhR.js +1 -0
  46. package/dist-ssg/client/index.ssg.html +2 -2
  47. package/dist-ssg/server/entry-server.js +192 -35
  48. package/package.json +3 -3
  49. package/dist/assets/CanvasRenderer-Bs7UxSWT.js +0 -1
  50. package/dist/assets/WebGLRenderer-l71uR9MI.js +0 -1
  51. package/dist/assets/WebGPURenderer-tjCbVxRm.js +0 -1
  52. package/dist/assets/browserAll-BDY91DxA.js +0 -1
  53. package/dist/assets/dist-CCD9CqTu.js +0 -1
  54. package/dist/assets/dist-DjM_Envn.js +0 -1
  55. package/dist/assets/dist-UpX5-9sH.js +0 -1
  56. package/dist/assets/main-B2c4pZCT.css +0 -1
  57. package/dist/assets/main-Wj4p5q80.js +0 -1654
  58. package/dist/assets/trpc-1XzKnuJv.js +0 -1
  59. package/dist/assets/webworkerAll-CitYd6ji.js +0 -1
  60. package/dist-ssg/client/assets/CanvasRenderer-FPbXzOhu.js +0 -1
  61. package/dist-ssg/client/assets/WebGLRenderer-DTbkQ-Tc.js +0 -1
  62. package/dist-ssg/client/assets/WebGPURenderer-jYEtkBkX.js +0 -1
  63. package/dist-ssg/client/assets/browserAll-D2rErTpO.js +0 -1
  64. package/dist-ssg/client/assets/dist-03Q-XuhL.js +0 -1
  65. package/dist-ssg/client/assets/dist-CNXuEBuZ.js +0 -1
  66. package/dist-ssg/client/assets/dist-Dj9a_D4b.js +0 -1
  67. package/dist-ssg/client/assets/index-5OettMZv.css +0 -1
  68. package/dist-ssg/client/assets/trpc-J2T_izXe.js +0 -1
  69. package/dist-ssg/client/assets/webworkerAll-CLzsuMst.js +0 -1
@@ -1 +1 @@
1
- import{it as e}from"./Geometry-DYOOLchf.js";import{E as t,T as n}from"./index.ssg-C4D0iHIp.js";e.add(n),e.add(t);
1
+ import{it as e}from"./Geometry-DYOOLchf.js";import{E as t,T as n}from"./index.ssg-L1BBuH-7.js";e.add(n),e.add(t);
@@ -0,0 +1 @@
1
+ import{F as e}from"./index.ssg-L1BBuH-7.js";export{e as trpcClient};
@@ -0,0 +1 @@
1
+ import"./Geometry-DYOOLchf.js";import"./index.ssg-L1BBuH-7.js";import"./init-C058TQcq.js";
@@ -35,7 +35,7 @@
35
35
  document.head.append(preconnectApi, preconnectStatic, stylesheet)
36
36
  })()
37
37
  </script>
38
- <script type="module" crossorigin src="/assets/index.ssg-C4D0iHIp.js"></script>
38
+ <script type="module" crossorigin src="/assets/index.ssg-L1BBuH-7.js"></script>
39
39
  <link rel="modulepreload" crossorigin href="/assets/chunk-DECur_0Z.js">
40
40
  <link rel="modulepreload" crossorigin href="/assets/dist-UN0VvTJo.js">
41
41
  <link rel="modulepreload" crossorigin href="/assets/dist-DK_X22KS.js">
@@ -45,7 +45,7 @@
45
45
  <link rel="modulepreload" crossorigin href="/assets/getTextureBatchBindGroup-BZ3pD2UV.js">
46
46
  <link rel="modulepreload" crossorigin href="/assets/BufferResource-4Jl_6qej.js">
47
47
  <link rel="modulepreload" crossorigin href="/assets/ImageSource-_DLFcjTj.js">
48
- <link rel="stylesheet" crossorigin href="/assets/index-5OettMZv.css">
48
+ <link rel="stylesheet" crossorigin href="/assets/index-BtGAsAtP.css">
49
49
  </head>
50
50
  <body>
51
51
  <div id="root"><!--app-html--></div>
@@ -32295,10 +32295,18 @@ ZodPipeline.create;
32295
32295
  var TranslationEngineIdSchema = enumType([
32296
32296
  "browser",
32297
32297
  "local",
32298
+ "local-ct2",
32298
32299
  "openai"
32299
32300
  ]);
32300
32301
  var DEFAULT_TRANSLATION_ENGINE_ID = "browser";
32301
- enumType(["local", "openai"]);
32302
+ function isManagedLocalTranslationEngineId(engineId) {
32303
+ return engineId === "local" || engineId === "local-ct2";
32304
+ }
32305
+ enumType([
32306
+ "local",
32307
+ "local-ct2",
32308
+ "openai"
32309
+ ]);
32302
32310
  var LocalModelDownloadStatusSchema = enumType([
32303
32311
  "not-downloaded",
32304
32312
  "queued",
@@ -32411,7 +32419,7 @@ var LocalModelProfileLoadStateSchema = objectType({
32411
32419
  updatedAt: numberType().int().nonnegative().optional()
32412
32420
  });
32413
32421
  objectType({
32414
- engineId: literalType("local"),
32422
+ engineId: enumType(["local", "local-ct2"]),
32415
32423
  modelId: stringType().min(1),
32416
32424
  selectedGroupId: stringType().min(1).optional(),
32417
32425
  groupId: stringType().min(1).optional(),
@@ -32460,6 +32468,72 @@ objectType({
32460
32468
  downloadedBytes: numberType().int().nonnegative().optional()
32461
32469
  })).default([])
32462
32470
  });
32471
+ var TranslationEngineDependencyStateSchema = enumType([
32472
+ "installed",
32473
+ "installing",
32474
+ "missing",
32475
+ "error",
32476
+ "not-applicable"
32477
+ ]);
32478
+ var TranslationEngineRuntimeStateSchema = enumType([
32479
+ "ready",
32480
+ "probing",
32481
+ "failed",
32482
+ "error",
32483
+ "not-applicable"
32484
+ ]);
32485
+ var TranslationEngineAssetStateSchema = enumType([
32486
+ "ready",
32487
+ "missing",
32488
+ "downloading",
32489
+ "error",
32490
+ "not-applicable"
32491
+ ]);
32492
+ var TranslationEngineLifecyclePhaseMetaSchema = objectType({
32493
+ message: stringType().optional(),
32494
+ progress: numberType().min(0).max(1).optional(),
32495
+ error: stringType().optional()
32496
+ });
32497
+ var TranslationEngineLifecycleStatusSchema = objectType({
32498
+ dependency: TranslationEngineLifecyclePhaseMetaSchema.extend({ state: TranslationEngineDependencyStateSchema }),
32499
+ runtime: TranslationEngineLifecyclePhaseMetaSchema.extend({ state: TranslationEngineRuntimeStateSchema }),
32500
+ assets: TranslationEngineLifecyclePhaseMetaSchema.extend({ state: TranslationEngineAssetStateSchema }),
32501
+ summary: stringType().optional()
32502
+ });
32503
+ function isTranslationEngineDependencyReady(status) {
32504
+ return status.dependency.state === "installed" || status.dependency.state === "not-applicable";
32505
+ }
32506
+ function isTranslationEngineRuntimeReady(status) {
32507
+ return status.runtime.state === "ready" || status.runtime.state === "not-applicable";
32508
+ }
32509
+ function shouldShowTranslationEngineInstallGate(status) {
32510
+ if (!status) return false;
32511
+ return !isTranslationEngineDependencyReady(status) || !isTranslationEngineRuntimeReady(status);
32512
+ }
32513
+ function getTranslationEngineLifecycleMessage(status) {
32514
+ if (!status) return void 0;
32515
+ return status.summary ?? status.runtime.error ?? status.runtime.message ?? status.dependency.error ?? status.dependency.message ?? status.assets.error ?? status.assets.message;
32516
+ }
32517
+ var TranslationEngineInstallLogStreamSchema = enumType(["stdout", "stderr"]);
32518
+ objectType({
32519
+ stream: TranslationEngineInstallLogStreamSchema,
32520
+ text: stringType()
32521
+ });
32522
+ discriminatedUnionType("type", [
32523
+ objectType({
32524
+ type: literalType("status"),
32525
+ lifecycle: TranslationEngineLifecycleStatusSchema
32526
+ }),
32527
+ objectType({
32528
+ type: literalType("log"),
32529
+ stream: TranslationEngineInstallLogStreamSchema,
32530
+ text: stringType()
32531
+ }),
32532
+ objectType({
32533
+ type: literalType("exit"),
32534
+ lifecycle: TranslationEngineLifecycleStatusSchema
32535
+ })
32536
+ ]);
32463
32537
  var TranslationOpenAISettingsSchema = objectType({
32464
32538
  baseUrl: stringType().default(""),
32465
32539
  token: stringType().default(""),
@@ -32470,9 +32544,15 @@ var TranslationLocalSettingsSchema = objectType({
32470
32544
  selectedGroupId: stringType().optional(),
32471
32545
  hfEndpoint: stringType().default("")
32472
32546
  });
32547
+ var TranslationLocalCt2SettingsSchema = objectType({
32548
+ model: stringType().default("ooeoeo/opus-mt-en-zh-ct2-float16"),
32549
+ selectedGroupId: stringType().optional(),
32550
+ hfEndpoint: stringType().default("")
32551
+ });
32473
32552
  objectType({
32474
32553
  openai: TranslationOpenAISettingsSchema.default(TranslationOpenAISettingsSchema.parse({})),
32475
- local: TranslationLocalSettingsSchema.default(TranslationLocalSettingsSchema.parse({}))
32554
+ local: TranslationLocalSettingsSchema.default(TranslationLocalSettingsSchema.parse({})),
32555
+ localCt2: TranslationLocalCt2SettingsSchema.default(TranslationLocalCt2SettingsSchema.parse({}))
32476
32556
  });
32477
32557
  objectType({
32478
32558
  engineId: TranslationEngineIdSchema,
@@ -32494,6 +32574,10 @@ var TranslationEngineProjectSettingsSchema = objectType({
32494
32574
  model: stringType().min(1).optional(),
32495
32575
  selectedGroupId: stringType().min(1).optional()
32496
32576
  }).default({}),
32577
+ localCt2: objectType({
32578
+ model: stringType().min(1).optional(),
32579
+ selectedGroupId: stringType().min(1).optional()
32580
+ }).default({}),
32497
32581
  openai: objectType({ model: stringType().min(1).optional() }).default({})
32498
32582
  }).default({});
32499
32583
  var DocumentTranslationConfigSchema = objectType({
@@ -114653,10 +114737,13 @@ function useDocumentTranslationActivation() {
114653
114737
  function resolveDocumentTranslationConfig(translationConfig, globalSettings) {
114654
114738
  if (!translationConfig) return void 0;
114655
114739
  const local = translationConfig.engines?.local ?? {};
114740
+ const localCt2 = translationConfig.engines?.localCt2 ?? {};
114656
114741
  const openai = translationConfig.engines?.openai ?? {};
114657
- const resolvedLocalModel = local.model ?? globalSettings?.translationEngines.local.model;
114658
- const resolvedLocalSelectedGroupId = local.selectedGroupId ?? globalSettings?.translationEngines.local.selectedGroupId;
114659
- const resolvedOpenAIModel = openai.model ?? globalSettings?.translationEngines.openai.model;
114742
+ const resolvedLocalModel = local.model ?? globalSettings?.translationEngines.local?.model;
114743
+ const resolvedLocalSelectedGroupId = local.selectedGroupId ?? globalSettings?.translationEngines.local?.selectedGroupId;
114744
+ const resolvedLocalCt2Model = localCt2.model ?? globalSettings?.translationEngines.localCt2?.model;
114745
+ const resolvedLocalCt2SelectedGroupId = localCt2.selectedGroupId ?? globalSettings?.translationEngines.localCt2?.selectedGroupId;
114746
+ const resolvedOpenAIModel = openai.model ?? globalSettings?.translationEngines.openai?.model;
114660
114747
  return {
114661
114748
  ...translationConfig,
114662
114749
  engines: {
@@ -114665,6 +114752,11 @@ function resolveDocumentTranslationConfig(translationConfig, globalSettings) {
114665
114752
  ...resolvedLocalModel ? { model: resolvedLocalModel } : {},
114666
114753
  ...resolvedLocalSelectedGroupId ? { selectedGroupId: resolvedLocalSelectedGroupId } : {}
114667
114754
  },
114755
+ localCt2: {
114756
+ ...localCt2,
114757
+ ...resolvedLocalCt2Model ? { model: resolvedLocalCt2Model } : {},
114758
+ ...resolvedLocalCt2SelectedGroupId ? { selectedGroupId: resolvedLocalCt2SelectedGroupId } : {}
114759
+ },
114668
114760
  openai: {
114669
114761
  ...openai,
114670
114762
  ...resolvedOpenAIModel ? { model: resolvedOpenAIModel } : {}
@@ -131358,8 +131450,9 @@ function createProjectionContext(lookup, annotations, projections) {
131358
131450
  //#endregion
131359
131451
  //#region ../core/src/translation-language-pair.ts
131360
131452
  var OPUS_MT_DIRECTION_PATTERN = /^opus-mt-([a-z]{2,3})-([a-z]{2,3})$/i;
131453
+ var OPUS_MT_CT2_SUFFIX_PATTERN = /-(?:ct2|ctranslate2)(?:-[a-z0-9]+)*$/i;
131361
131454
  function inferLocalDirectionalModelLanguagePair(model) {
131362
- const modelName = model?.trim().split("/").pop();
131455
+ const modelName = model?.trim().split("/").pop()?.replace(OPUS_MT_CT2_SUFFIX_PATTERN, "");
131363
131456
  if (!modelName) return null;
131364
131457
  const match = OPUS_MT_DIRECTION_PATTERN.exec(modelName);
131365
131458
  if (!match) return null;
@@ -136420,7 +136513,7 @@ function createBrowserTranslationExecution() {
136420
136513
  factory: createBrowserTranslatorFactory(),
136421
136514
  cacheIdentity: {
136422
136515
  engineId: DEFAULT_TRANSLATION_ENGINE_ID,
136423
- translatorContractVersion: 2
136516
+ translatorContractVersion: 3
136424
136517
  }
136425
136518
  };
136426
136519
  }
@@ -136908,7 +137001,7 @@ async function translatePendingJobsBySourceLanguage(input) {
136908
137001
  while (workerPromises.size > 0) await Promise.race(workerPromises);
136909
137002
  }
136910
137003
  function getUnsupportedEngineLanguagePairMessage(input) {
136911
- if (input.engine.cacheIdentity.engineId !== "local") return null;
137004
+ if (!isManagedLocalTranslationEngineId(input.engine.cacheIdentity.engineId)) return null;
136912
137005
  const directionCheck = checkLocalDirectionalModelLanguagePair({
136913
137006
  model: input.engine.cacheIdentity.model,
136914
137007
  sourceLanguage: input.sourceLanguage,
@@ -137531,25 +137624,37 @@ function projectTranslateServiceStatus(input) {
137531
137624
  };
137532
137625
  }
137533
137626
  }
137534
- if (input.engineId === "local") {
137627
+ if (input.engineLifecycleLoading || input.engineLifecycle !== void 0) {
137628
+ if (input.engineLifecycleLoading || !input.engineLifecycle) return {
137629
+ state: "checking",
137630
+ engineId: input.engineId,
137631
+ message: "Checking translation engine runtime."
137632
+ };
137633
+ if (shouldShowTranslationEngineInstallGate(input.engineLifecycle)) return {
137634
+ state: "unavailable",
137635
+ engineId: input.engineId,
137636
+ message: getTranslationEngineLifecycleMessage(input.engineLifecycle) ?? "Translation engine runtime is not ready."
137637
+ };
137638
+ }
137639
+ if (isManagedLocalTranslationEngineId(input.engineId)) {
137535
137640
  if (!input.localModel?.trim()) return {
137536
137641
  state: "unavailable",
137537
- engineId: "local",
137538
- message: "Select a local model before translating."
137642
+ engineId: input.engineId,
137643
+ message: "Select a model before translating."
137539
137644
  };
137540
137645
  if (input.localAssetLoading || !input.localAsset) return {
137541
137646
  state: "checking",
137542
- engineId: "local",
137647
+ engineId: input.engineId,
137543
137648
  message: "Checking local model files."
137544
137649
  };
137545
137650
  if (isLocalAssetReady(input.localAsset, input.localSelectedGroupId)) return {
137546
137651
  state: "ready",
137547
- engineId: "local",
137652
+ engineId: input.engineId,
137548
137653
  message: "Selected local model files are ready."
137549
137654
  };
137550
137655
  return {
137551
137656
  state: "unavailable",
137552
- engineId: "local",
137657
+ engineId: input.engineId,
137553
137658
  message: "Selected local model files are not installed locally."
137554
137659
  };
137555
137660
  }
@@ -137579,14 +137684,40 @@ async function resolveTranslateServiceState(input) {
137579
137684
  hasSource: input.hasSource,
137580
137685
  engineId: config?.engineId ?? "browser"
137581
137686
  }) });
137582
- if (config.engineId === "local") {
137583
- const model = config.engines.local.model?.trim();
137687
+ let engineLifecycle = null;
137688
+ if (config.engineId !== "browser") {
137689
+ input.onUpdate?.(createTranslateServiceState({ status: projectTranslateServiceStatus({
137690
+ enabled: config.enabled,
137691
+ hasSource: input.hasSource,
137692
+ engineId: config.engineId,
137693
+ engineLifecycleLoading: true
137694
+ }) }));
137695
+ try {
137696
+ engineLifecycle = await trpcClient.translationEngines.getLifecycle.query({ engineId: config.engineId });
137697
+ } catch (lifecycleError) {
137698
+ return createTranslateServiceState({ status: {
137699
+ state: "unavailable",
137700
+ engineId: config.engineId,
137701
+ message: lifecycleError instanceof Error ? lifecycleError.message : "Unable to check translation engine runtime."
137702
+ } });
137703
+ }
137704
+ if (shouldShowTranslationEngineInstallGate(engineLifecycle)) return createTranslateServiceState({ status: projectTranslateServiceStatus({
137705
+ enabled: config.enabled,
137706
+ hasSource: input.hasSource,
137707
+ engineId: config.engineId,
137708
+ engineLifecycle
137709
+ }) });
137710
+ }
137711
+ if (isManagedLocalTranslationEngineId(config.engineId)) {
137712
+ const localEngineConfig = getManagedLocalEngineConfig(config);
137713
+ const model = localEngineConfig.model?.trim();
137584
137714
  if (!model) return emitTranslateServiceState(input.onUpdate, { status: projectTranslateServiceStatus({
137585
137715
  enabled: config.enabled,
137586
137716
  hasSource: input.hasSource,
137587
- engineId: "local",
137717
+ engineId: config.engineId,
137718
+ engineLifecycle,
137588
137719
  localModel: model,
137589
- localSelectedGroupId: config.engines.local.selectedGroupId
137720
+ localSelectedGroupId: localEngineConfig.selectedGroupId
137590
137721
  }) });
137591
137722
  const directionCheck = checkLocalDirectionalModelLanguagePair({
137592
137723
  model,
@@ -137594,27 +137725,29 @@ async function resolveTranslateServiceState(input) {
137594
137725
  });
137595
137726
  if (!directionCheck.supported) return emitTranslateServiceState(input.onUpdate, { status: {
137596
137727
  state: "unavailable",
137597
- engineId: "local",
137728
+ engineId: config.engineId,
137598
137729
  message: directionCheck.message ?? "Selected local model does not support the configured target language."
137599
137730
  } });
137600
137731
  input.onUpdate?.(createTranslateServiceState({ status: projectTranslateServiceStatus({
137601
137732
  enabled: config.enabled,
137602
137733
  hasSource: input.hasSource,
137603
- engineId: "local",
137734
+ engineId: config.engineId,
137735
+ engineLifecycle,
137604
137736
  localModel: model,
137605
- localSelectedGroupId: config.engines.local.selectedGroupId,
137737
+ localSelectedGroupId: localEngineConfig.selectedGroupId,
137606
137738
  localAssetLoading: true
137607
137739
  }) }));
137608
137740
  try {
137609
- const panelState = await trpcClient.localModels.panelState.query({
137741
+ const panelState = await queryManagedLocalPanelState(config.engineId, {
137610
137742
  modelId: model,
137611
- selectedGroupId: config.engines.local.selectedGroupId
137743
+ selectedGroupId: localEngineConfig.selectedGroupId
137612
137744
  });
137613
- const selectedGroupId = panelState.selectedGroupId ?? config.engines.local.selectedGroupId;
137745
+ const selectedGroupId = panelState.selectedGroupId ?? localEngineConfig.selectedGroupId;
137614
137746
  return createTranslateServiceState({ status: projectTranslateServiceStatus({
137615
137747
  enabled: config.enabled,
137616
137748
  hasSource: input.hasSource,
137617
- engineId: "local",
137749
+ engineId: config.engineId,
137750
+ engineLifecycle,
137618
137751
  localModel: model,
137619
137752
  localSelectedGroupId: selectedGroupId,
137620
137753
  localAsset: panelState.asset
@@ -137622,7 +137755,7 @@ async function resolveTranslateServiceState(input) {
137622
137755
  } catch (assetError) {
137623
137756
  return createTranslateServiceState({ status: {
137624
137757
  state: "unavailable",
137625
- engineId: "local",
137758
+ engineId: config.engineId,
137626
137759
  message: assetError instanceof Error ? assetError.message : "Unable to check local model files."
137627
137760
  } });
137628
137761
  }
@@ -137630,7 +137763,8 @@ async function resolveTranslateServiceState(input) {
137630
137763
  if (config.engineId === "openai") return emitTranslateServiceState(input.onUpdate, { status: projectTranslateServiceStatus({
137631
137764
  enabled: config.enabled,
137632
137765
  hasSource: input.hasSource,
137633
- engineId: "openai"
137766
+ engineId: "openai",
137767
+ engineLifecycle
137634
137768
  }) });
137635
137769
  const cachedTable = getBrowserSupportTableState(config.targetLanguage);
137636
137770
  if (cachedTable) return emitTranslateServiceState(input.onUpdate, {
@@ -137732,14 +137866,14 @@ function prepareTranslateServiceRun(input) {
137732
137866
  }
137733
137867
  function createTranslationEngineExecution(config) {
137734
137868
  if (config.engineId === "browser" || isStaticMode()) return createBrowserTranslationExecution();
137735
- const model = config.engineId === "openai" ? config.engines.openai.model : config.engines.local.model;
137869
+ const model = config.engineId === "openai" ? config.engines.openai.model : getManagedLocalEngineConfig(config).model;
137736
137870
  return {
137737
- factory: new TrpcTranslatorFactory(config.engineId, model, config.engineId === "local" ? config.engines.local.selectedGroupId : void 0),
137871
+ factory: new TrpcTranslatorFactory(config.engineId, model, isManagedLocalTranslationEngineId(config.engineId) ? getManagedLocalEngineConfig(config).selectedGroupId : void 0),
137738
137872
  cacheIdentity: {
137739
137873
  engineId: config.engineId,
137740
137874
  model,
137741
- selectedGroupId: config.engineId === "local" ? config.engines.local.selectedGroupId : void 0,
137742
- translatorContractVersion: 2
137875
+ selectedGroupId: isManagedLocalTranslationEngineId(config.engineId) ? getManagedLocalEngineConfig(config).selectedGroupId : void 0,
137876
+ translatorContractVersion: 3
137743
137877
  }
137744
137878
  };
137745
137879
  }
@@ -137755,10 +137889,22 @@ var TrpcTranslatorFactory = class {
137755
137889
  sourceLanguage: options.sourceLanguage,
137756
137890
  targetLanguage: options.targetLanguage,
137757
137891
  model: options.model ?? this.model,
137758
- selectedGroupId: this.engineId === "local" ? this.selectedGroupId : void 0
137892
+ selectedGroupId: isManagedLocalTranslationEngineId(this.engineId) ? this.selectedGroupId : void 0
137759
137893
  });
137760
137894
  }
137761
137895
  };
137896
+ function getManagedLocalEngineConfig(config) {
137897
+ return config.engineId === "local-ct2" ? {
137898
+ model: config.engines.localCt2.model,
137899
+ selectedGroupId: config.engines.localCt2.selectedGroupId
137900
+ } : {
137901
+ model: config.engines.local.model,
137902
+ selectedGroupId: config.engines.local.selectedGroupId
137903
+ };
137904
+ }
137905
+ async function queryManagedLocalPanelState(engineId, input) {
137906
+ return engineId === "local" ? trpcClient.localModels.panelState.query(input) : trpcClient.localCt2Models.panelState.query(input);
137907
+ }
137762
137908
  var TrpcTranslator = class {
137763
137909
  constructor(options) {
137764
137910
  this.options = options;
@@ -137864,6 +138010,8 @@ function useDocumentTranslation(markdown, config) {
137864
138010
  config?.engineId,
137865
138011
  config?.engines.local.model,
137866
138012
  config?.engines.local.selectedGroupId,
138013
+ config?.engines.localCt2.model,
138014
+ config?.engines.localCt2.selectedGroupId,
137867
138015
  config?.engines.openai.model,
137868
138016
  config?.targetLanguage
137869
138017
  ]);
@@ -137904,6 +138052,8 @@ function useDocumentTranslation(markdown, config) {
137904
138052
  config?.engineId,
137905
138053
  config?.engines.local.model,
137906
138054
  config?.engines.local.selectedGroupId,
138055
+ config?.engines.localCt2.model,
138056
+ config?.engines.localCt2.selectedGroupId,
137907
138057
  config?.targetLanguage,
137908
138058
  markdown.length
137909
138059
  ]);
@@ -137986,6 +138136,8 @@ function useDocumentTranslation(markdown, config) {
137986
138136
  config?.engines.openai.model,
137987
138137
  config?.engines.local.model,
137988
138138
  config?.engines.local.selectedGroupId,
138139
+ config?.engines.localCt2.model,
138140
+ config?.engines.localCt2.selectedGroupId,
137989
138141
  markdown,
137990
138142
  serviceStatus
137991
138143
  ]);
@@ -138024,7 +138176,7 @@ function getDocumentTranslationFailureMessage(result) {
138024
138176
  return errors[0] ?? "Translation failed.";
138025
138177
  }
138026
138178
  function applyDocumentTranslationPatch(current, patch, fallback) {
138027
- const segments = [...current?.segments ?? []];
138179
+ const segments = current?.segments.slice() ?? [];
138028
138180
  segments[patch.segmentIndex] = patch.segment;
138029
138181
  return {
138030
138182
  displayMode: current?.displayMode ?? fallback.displayMode,
@@ -148832,6 +148984,8 @@ function useDocumentTranslationRenderPlugin({ markdown, translationConfig }) {
148832
148984
  resolvedTranslationConfig?.engineId,
148833
148985
  resolvedTranslationConfig?.engines.local.model ?? "no-local-model",
148834
148986
  resolvedTranslationConfig?.engines.local.selectedGroupId ?? "no-local-group",
148987
+ resolvedTranslationConfig?.engines.localCt2.model ?? "no-local-ct2-model",
148988
+ resolvedTranslationConfig?.engines.localCt2.selectedGroupId ?? "no-local-ct2-group",
148835
148989
  session.capability?.availability ?? "unknown",
148836
148990
  session.capability?.message ?? "no-message",
148837
148991
  session.serviceStatus.state,
@@ -148882,7 +149036,7 @@ function hashString(value) {
148882
149036
  }
148883
149037
  function createTranslationProjection(result) {
148884
149038
  if (!result) return { blockAnnotations: [] };
148885
- const segments = Array.isArray(result.segments) ? result.segments : [];
149039
+ const segments = getRenderableTranslationSegments(result);
148886
149040
  const segmentByOffset = new Map(segments.filter((segment) => segment.target).map((segment) => [segment.sourceStartOffset, segment]));
148887
149041
  return {
148888
149042
  headingProcessor: {
@@ -148926,6 +149080,9 @@ function createTranslationProjection(result) {
148926
149080
  }))
148927
149081
  };
148928
149082
  }
149083
+ function getRenderableTranslationSegments(result) {
149084
+ return (Array.isArray(result.segments) ? result.segments : []).filter((segment) => segment !== void 0);
149085
+ }
148929
149086
  function createTranslatedHeadingTransform(input, segment, displayMode) {
148930
149087
  const projectedTarget = segment.target ?? "";
148931
149088
  const openSpecHeading = createTranslatedOpenSpecHeadingProjection(input, segment, displayMode);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openspecui/web",
3
- "version": "3.11.1",
3
+ "version": "3.11.2",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "openspecui-ssg": "./dist-ssg/ssg-cli.mjs"
@@ -39,8 +39,8 @@
39
39
  "@codemirror/view": "^6.38.8",
40
40
  "@lezer/common": "^1.4.0",
41
41
  "@lezer/highlight": "^1.2.3",
42
- "@openspecui/search": "3.11.1",
43
- "@openspecui/server": "3.11.1",
42
+ "@openspecui/search": "3.11.2",
43
+ "@openspecui/server": "3.11.2",
44
44
  "@storybook/addon-vitest": "^10.2.19",
45
45
  "@storybook/web-components": "^10.2.19",
46
46
  "@storybook/web-components-vite": "^10.2.19",
@@ -1 +0,0 @@
1
- import"./Geometry-Dr8DqqDe.js";import{w as e}from"./main-Wj4p5q80.js";export{e as CanvasRenderer};
@@ -1 +0,0 @@
1
- import"./Geometry-Dr8DqqDe.js";import{C as e}from"./main-Wj4p5q80.js";export{e as WebGLRenderer};
@@ -1 +0,0 @@
1
- import"./Geometry-Dr8DqqDe.js";import{S as e}from"./main-Wj4p5q80.js";export{e as WebGPURenderer};
@@ -1 +0,0 @@
1
- import{it as e,x as t}from"./Geometry-Dr8DqqDe.js";import{A as n,D as r,O as i,k as a}from"./main-Wj4p5q80.js";import"./init-C46YDZ2H.js";e.add(n),e.mixin(t,a),e.add(i),e.mixin(t,r);
@@ -1 +0,0 @@
1
- import"./dist-vqrjFRzf.js";import{b as e}from"./main-Wj4p5q80.js";export{e as json};
@@ -1 +0,0 @@
1
- import"./dist-vqrjFRzf.js";import{g as e}from"./main-Wj4p5q80.js";export{e as css};
@@ -1 +0,0 @@
1
- import"./dist-vqrjFRzf.js";import{t as e}from"./main-Wj4p5q80.js";export{e as yaml};