@openspecui/core 3.11.0 → 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 (77) hide show
  1. package/dist/{document-translation-BrE402YR.mjs → document-translation-BTEG-uW_.mjs} +5 -1
  2. package/dist/{document-translation-BZ5QKjN0.d.mts → document-translation-EMIQf5dw.d.mts} +80 -30
  3. package/dist/document-translation.d.mts +2 -2
  4. package/dist/document-translation.mjs +2 -2
  5. package/dist/hosted-app.d.mts +1 -1
  6. package/dist/hosted-app.mjs +1 -1
  7. package/dist/index.d.mts +162 -61
  8. package/dist/index.mjs +337 -56
  9. package/dist/{local-download-profiles-BppI_PAq.mjs → local-download-profiles-CNDtMG2s.mjs} +7 -3
  10. package/dist/{local-download-profiles-BdHk_i54.d.mts → local-download-profiles-CSXKbamv.d.mts} +5 -1
  11. package/dist/local-download-profiles.d.mts +2 -2
  12. package/dist/local-download-profiles.mjs +1 -1
  13. package/dist/markdown-facts.d.mts +1 -1
  14. package/dist/markdown-facts.mjs +1 -1
  15. package/dist/{markdown-reading-DvLPaaY1.d.mts → markdown-reading-BaHZTf5f.d.mts} +1 -1
  16. package/dist/{markdown-reading-DYBp7qoI.mjs → markdown-reading-DSlcirYV.mjs} +1 -1
  17. package/dist/markdown-reading.d.mts +2 -2
  18. package/dist/markdown-reading.mjs +2 -2
  19. package/dist/{notifications-B4GiAnmn.d.mts → notifications-Ct6rtBwb.d.mts} +16 -16
  20. package/dist/{notifications-9vbSJQ8N.mjs → notifications-Xs9VPFWD.mjs} +2 -2
  21. package/dist/notifications.d.mts +2 -2
  22. package/dist/notifications.mjs +3 -3
  23. package/dist/{openspec-annotations-DVbFBz5J.d.mts → openspec-annotations-DYyP_HQh.d.mts} +2 -2
  24. package/dist/{openspec-annotations-BxBoWlyv.mjs → openspec-annotations-dNJentSE.mjs} +2 -2
  25. package/dist/openspec-annotations.d.mts +3 -3
  26. package/dist/openspec-annotations.mjs +3 -3
  27. package/dist/{openspec-projection-Df5C6CFv.d.mts → openspec-projection-DrTZ0P31.d.mts} +3 -3
  28. package/dist/{openspec-projection-Cd6oydiK.mjs → openspec-projection-yqwKIKnp.mjs} +2 -2
  29. package/dist/openspec-projection.d.mts +5 -5
  30. package/dist/openspec-projection.mjs +4 -4
  31. package/dist/opsx-display-path.d.mts +1 -1
  32. package/dist/opsx-display-path.mjs +1 -1
  33. package/dist/{opsx-entity-DHidvJcx.d.mts → opsx-entity-CIB-Wi0n.d.mts} +13 -13
  34. package/dist/opsx-entity.d.mts +2 -2
  35. package/dist/opsx-entity.mjs +1 -1
  36. package/dist/{opsx-schema-detail-VyCbvX1I.d.mts → opsx-schema-detail-Cjoesix_.d.mts} +1 -1
  37. package/dist/opsx-schema-detail.d.mts +3 -3
  38. package/dist/opsx-schema-detail.mjs +1 -1
  39. package/dist/{schemas-3VC51gAF.d.mts → schemas-DeEkRkAH.d.mts} +126 -126
  40. package/dist/{sounds-CQJ1eD1u.d.mts → sounds-BaxOUgWE.d.mts} +5 -5
  41. package/dist/sounds.d.mts +1 -1
  42. package/dist/sounds.mjs +1 -1
  43. package/dist/{terminal-audio-DVz0HA2H.mjs → terminal-audio-CUs0sqEO.mjs} +1 -1
  44. package/dist/{terminal-audio-BrmM5FX_.d.mts → terminal-audio-v3YSYJKq.d.mts} +2 -2
  45. package/dist/terminal-audio.d.mts +2 -2
  46. package/dist/terminal-audio.mjs +2 -2
  47. package/dist/terminal-control.d.mts +2 -2
  48. package/dist/terminal-control.mjs +1 -1
  49. package/dist/{terminal-invocation-Z0xbyZ1V.d.mts → terminal-invocation-C5gqne5H.d.mts} +51 -51
  50. package/dist/terminal-invocation.d.mts +1 -1
  51. package/dist/terminal-invocation.mjs +1 -1
  52. package/dist/terminal-theme.d.mts +1 -1
  53. package/dist/terminal-theme.mjs +1 -1
  54. package/dist/translation-language-pair-Cb4a0hG6.mjs +52 -0
  55. package/dist/translation-language-pair-DaSvW83F.d.mts +18 -0
  56. package/dist/translation-language-pair.d.mts +2 -0
  57. package/dist/translation-language-pair.mjs +3 -0
  58. package/dist/translator-BtbU7rjR.d.mts +2498 -0
  59. package/dist/translator-yHmEiuRX.mjs +375 -0
  60. package/dist/translator.d.mts +2 -2
  61. package/dist/translator.mjs +2 -2
  62. package/package.json +9 -3
  63. package/dist/translator-BSPMDjZy.d.mts +0 -780
  64. package/dist/translator-C3LT7PqW.mjs +0 -147
  65. /package/dist/{hosted-app-CxpQvD1s.mjs → hosted-app-CNZhVLM_.mjs} +0 -0
  66. /package/dist/{hosted-app-FuxG4-qA.d.mts → hosted-app-CegGJlNp.d.mts} +0 -0
  67. /package/dist/{markdown-facts-B5RvYPKF.mjs → markdown-facts-DbE1F2LD.mjs} +0 -0
  68. /package/dist/{markdown-facts-DUsbNcjh.d.mts → markdown-facts-DempqdIX.d.mts} +0 -0
  69. /package/dist/{opsx-display-path-Bf89ZyM5.mjs → opsx-display-path-Cw-5MTRg.mjs} +0 -0
  70. /package/dist/{opsx-display-path-CbO6K0Qq.d.mts → opsx-display-path-Ky9qnntM.d.mts} +0 -0
  71. /package/dist/{opsx-entity-BR_6djiM.mjs → opsx-entity-C_51ZEuP.mjs} +0 -0
  72. /package/dist/{opsx-schema-detail-5Wv1oWLT.mjs → opsx-schema-detail-Bu415_NB.mjs} +0 -0
  73. /package/dist/{sounds-CB_gpY-y.mjs → sounds-50cYk5b0.mjs} +0 -0
  74. /package/dist/{terminal-control-CNcEd9Rl.mjs → terminal-control-CYZhk7FM.mjs} +0 -0
  75. /package/dist/{terminal-invocation-wUmtJMPl.mjs → terminal-invocation-IopdwXKL.mjs} +0 -0
  76. /package/dist/{terminal-theme-CHkfTDk4.mjs → terminal-theme-BquTqZIO.mjs} +0 -0
  77. /package/dist/{terminal-theme-x_vAHvok.d.mts → terminal-theme-CH-VSrAq.d.mts} +0 -0
package/dist/index.mjs CHANGED
@@ -1,26 +1,27 @@
1
- import { a as normalizeOpsxEntityPath, c as parseOpsxEntityMetadata, i as isOpsxGlobPattern, n as getOpsxEntityMetadataPath, o as opsxGlobToRegex, r as getOpsxEntityRootRelativePath, s as opsxPathMatchesPattern, t as buildOpsxEntityDetail } from "./opsx-entity-BR_6djiM.mjs";
2
- import { n as toMarkdownFactKind, t as parseMarkdownFacts } from "./markdown-facts-B5RvYPKF.mjs";
3
- import { a as getMarkdownAnnotation, c as getMarkdownHeadingEnd, d as trimMarkdownSlice, i as createMarkdownReadingDocumentFromFacts, l as getMarkdownHeadingFacts, n as buildMarkdownParentMap, o as getMarkdownAnnotationsForFact, r as createMarkdownReadingDocument, s as getMarkdownFactSpan, t as MarkdownReadingPluginRegistry, u as sortMarkdownReadingPlugins } from "./markdown-reading-DYBp7qoI.mjs";
4
- import { a as getOpenSpecAnnotationsForFact, i as getOpenSpecAnnotation, n as annotateOpenSpecMarkdown, o as openSpecAnnotationRules, r as builtinOpenSpecReadingPlugin, t as annotateOpenSpecFacts } from "./openspec-annotations-BxBoWlyv.mjs";
5
- import { a as getOpenSpecReadingSections, c as projectOpenSpecMarkdown, i as getOpenSpecProjectionAnnotation, n as OPEN_SPEC_SPEC_PROJECTION_ID, o as parseOpenSpecMarkdownToSpec, r as createOpenSpecReadingPlugin, s as projectAnnotatedOpenSpecToSpec, t as OPEN_SPEC_READING_SECTIONS_PROJECTION_ID } from "./openspec-projection-Cd6oydiK.mjs";
6
- import { _ as TranslationLocalSettingsSchema, a as LocalModelAssetPlanSnapshotSchema, c as SERVICE_TRANSLATION_ENGINE_IDS, d as TRANSLATION_ENGINE_MANIFESTS, f as TRANSLATOR_CONTRACT_VERSION, g as TranslationEngineIdSchema, h as TranslationEngineGlobalSettingsSchema, i as LocalModelAssetLogSchema, l as ServiceTranslationEngineIdSchema, m as TranslationDownloadGroupPlanSchema, n as BatchTranslateInputSchema, o as LocalModelAssetStateSchema, p as TranslationDownloadFilePlanSchema, r as DEFAULT_TRANSLATION_ENGINE_ID, s as LocalModelDownloadStatusSchema, t as BatchTranslateEventSchema, u as TRANSLATION_ENGINE_IDS, v as TranslationOpenAISettingsSchema, y as getTranslationEngineManifest } from "./translator-C3LT7PqW.mjs";
7
- import { a as MAX_TRANSLATION_CACHE_ENTRY_LIMIT, c as TranslationCacheEntrySchema, d as TranslationCacheStatsSchema, f as TranslationCacheWriteInputSchema, i as DocumentTranslationDisplayModeSchema, l as TranslationCacheReadInputSchema, n as DOCUMENT_TRANSLATION_DISPLAY_MODES, o as MIN_TRANSLATION_CACHE_ENTRY_LIMIT, p as TranslationEngineProjectSettingsSchema, r as DocumentTranslationConfigSchema, s as TRANSLATION_CACHE_POLICY_VERSION, t as DEFAULT_TRANSLATION_CACHE_ENTRY_LIMIT, u as TranslationCacheSettingsSchema } from "./document-translation-BrE402YR.mjs";
8
- import { _ as customHashFromSoundId, a as CustomSoundHashSchema, b as soundIdFromCustomHash, c as CustomSoundMetadataSchema, f as LEGACY_SOUND_ID_MAP, g as SoundVolumeSchema, h as SoundIdSchema, i as CUSTOM_SOUND_ADD_VALUE, l as DEFAULT_BELL_SOUND_ID, m as SoundConfigIdSchema, n as BUILTIN_SOUND_OPTIONS, o as CustomSoundIdSchema, p as SILENT_SOUND_ID, r as BuiltinSoundIdSchema, s as CustomSoundMetadataFileSchema, t as BUILTIN_SOUND_IDS, u as DEFAULT_NOTIFICATION_SOUND_ID, v as getBuiltinSoundUrl, y as normalizeLegacySoundId } from "./sounds-CB_gpY-y.mjs";
9
- import { n as terminalNotificationEventToPublishInput, t as TerminalControlParser } from "./terminal-control-CNcEd9Rl.mjs";
10
- import { a as NotificationPublishInputSchema, c as NotificationSoundSchema, h as groupNotifications, i as NotificationGroupKeySchema, l as NotificationSourceSchema, m as getNotificationGroupLabel, n as NOTIFICATION_SOUND_VALUES, o as NotificationRecordSchema, p as getNotificationGroupKey, r as NotificationActionSchema, s as NotificationSettingsSchema, t as NOTIFICATION_SOUND_OPTIONS, u as TerminalNotificationParser } from "./notifications-9vbSJQ8N.mjs";
11
- import { n as TERMINAL_BELL_SOUND_VALUES, r as TerminalBellSoundSchema, t as TERMINAL_BELL_SOUND_OPTIONS } from "./terminal-audio-DVz0HA2H.mjs";
12
- import { a as TERMINAL_THEME_VALUES, i as TERMINAL_THEME_MODE_VALUES, n as DEFAULT_TERMINAL_LIGHT_THEME, r as DEFAULT_TERMINAL_THEME_MODE, t as DEFAULT_TERMINAL_DARK_THEME } from "./terminal-theme-CHkfTDk4.mjs";
13
- import { i as selectLocalDownloadGroup, n as buildLocalDownloadPlanFromRepositoryFiles, r as buildLocalDownloadPlanFromRuntimeProfileFiles, t as LOCAL_MODEL_PROFILE_DEFINITIONS } from "./local-download-profiles-BppI_PAq.mjs";
14
- import { a as buildEmbeddedUiLaunchUrl, c as isHostedBackendHealthResponse, d as normalizeHostedAppBaseUrl, f as resolveHostedAppBaseUrl, i as buildBackendHealthPayload, l as isSupportedEmbeddedUiUrl, n as OFFICIAL_APP_BASE_URL, o as buildHostedLaunchUrl, r as OPENSPECUI_RUNTIME_CAPABILITIES, s as isBackendHealthRuntimeMetadata, t as HOSTED_SHELL_PROTOCOL_VERSION, u as normalizeEmbeddedUiUrl } from "./hosted-app-CxpQvD1s.mjs";
15
- import { n as toOpsxDisplayPath, t as VIRTUAL_PROJECT_DIRNAME } from "./opsx-display-path-Bf89ZyM5.mjs";
16
- import { a as TerminalInvocationSettingsSchema, c as TerminalSpawnCommandSchema, f as quoteTerminalShellArg, g as resolveTerminalShellDefaults, h as renderTerminalSpawnCommandLine, i as TerminalCommandFieldSchema, n as TERMINAL_COMMAND_FIELD_TYPE_VALUES, o as TerminalShellProfileSchema, p as renderTerminalCommandArgs, r as TERMINAL_SHELL_QUOTE_STYLE_VALUES, s as TerminalShellQuoteStyleSchema, t as BUILTIN_TERMINAL_SPAWN_COMMANDS, u as getTerminalCommandDefaultValues } from "./terminal-invocation-wUmtJMPl.mjs";
17
- import { t as parseOpsxSchemaDetail } from "./opsx-schema-detail-5Wv1oWLT.mjs";
1
+ import { a as normalizeOpsxEntityPath, c as parseOpsxEntityMetadata, i as isOpsxGlobPattern, n as getOpsxEntityMetadataPath, o as opsxGlobToRegex, r as getOpsxEntityRootRelativePath, s as opsxPathMatchesPattern, t as buildOpsxEntityDetail } from "./opsx-entity-C_51ZEuP.mjs";
2
+ import { n as toMarkdownFactKind, t as parseMarkdownFacts } from "./markdown-facts-DbE1F2LD.mjs";
3
+ import { a as getMarkdownAnnotation, c as getMarkdownHeadingEnd, d as trimMarkdownSlice, i as createMarkdownReadingDocumentFromFacts, l as getMarkdownHeadingFacts, n as buildMarkdownParentMap, o as getMarkdownAnnotationsForFact, r as createMarkdownReadingDocument, s as getMarkdownFactSpan, t as MarkdownReadingPluginRegistry, u as sortMarkdownReadingPlugins } from "./markdown-reading-DSlcirYV.mjs";
4
+ import { a as getOpenSpecAnnotationsForFact, i as getOpenSpecAnnotation, n as annotateOpenSpecMarkdown, o as openSpecAnnotationRules, r as builtinOpenSpecReadingPlugin, t as annotateOpenSpecFacts } from "./openspec-annotations-dNJentSE.mjs";
5
+ import { a as getOpenSpecReadingSections, c as projectOpenSpecMarkdown, i as getOpenSpecProjectionAnnotation, n as OPEN_SPEC_SPEC_PROJECTION_ID, o as parseOpenSpecMarkdownToSpec, r as createOpenSpecReadingPlugin, s as projectAnnotatedOpenSpecToSpec, t as OPEN_SPEC_READING_SECTIONS_PROJECTION_ID } from "./openspec-projection-yqwKIKnp.mjs";
6
+ import { A as TranslationEngineLifecycleEventSchema, B as getTranslationEngineManifest, C as TranslationEngineAssetStatusSchema, D as TranslationEngineIdSchema, E as TranslationEngineGlobalSettingsSchema, F as TranslationLocalSettingsSchema, H as isTranslationEngineDependencyReady, I as TranslationOpenAISettingsSchema, L as createTranslationEngineLifecycleStatus, M as TranslationEngineRuntimeStateSchema, N as TranslationEngineRuntimeStatusSchema, O as TranslationEngineInstallLogEventSchema, P as TranslationLocalCt2SettingsSchema, R as getManagedLocalTranslationEngineManifest, S as TranslationEngineAssetStateSchema, T as TranslationEngineDependencyStatusSchema, U as isTranslationEngineRuntimeReady, V as isManagedLocalTranslationEngineId, W as shouldShowTranslationEngineInstallGate, _ as TRANSLATION_ENGINE_IDS, a as LocalModelAssetPlanSnapshotSchema, b as TranslationDownloadFilePlanSchema, c as LocalModelLifecycleFileStateSchema, d as LocalModelProfileManifestFileSchema, f as LocalModelProfileManifestGroupSchema, g as ServiceTranslationEngineIdSchema, h as SERVICE_TRANSLATION_ENGINE_IDS, i as LocalModelAssetLogSchema, j as TranslationEngineLifecycleStatusSchema, k as TranslationEngineInstallLogStreamSchema, l as LocalModelLifecycleGroupStateSchema, m as LocalModelProfileStatusSchema, n as BatchTranslateInputSchema, o as LocalModelAssetStateSchema, p as LocalModelProfileManifestSchema, r as DEFAULT_TRANSLATION_ENGINE_ID, s as LocalModelDownloadStatusSchema, t as BatchTranslateEventSchema, u as LocalModelProfileLoadStateSchema, v as TRANSLATION_ENGINE_MANIFESTS, w as TranslationEngineDependencyStateSchema, x as TranslationDownloadGroupPlanSchema, y as TRANSLATOR_CONTRACT_VERSION, z as getTranslationEngineLifecycleMessage } from "./translator-yHmEiuRX.mjs";
7
+ import { a as MAX_TRANSLATION_CACHE_ENTRY_LIMIT, c as TranslationCacheEntrySchema, d as TranslationCacheStatsSchema, f as TranslationCacheWriteInputSchema, i as DocumentTranslationDisplayModeSchema, l as TranslationCacheReadInputSchema, n as DOCUMENT_TRANSLATION_DISPLAY_MODES, o as MIN_TRANSLATION_CACHE_ENTRY_LIMIT, p as TranslationEngineProjectSettingsSchema, r as DocumentTranslationConfigSchema, s as TRANSLATION_CACHE_POLICY_VERSION, t as DEFAULT_TRANSLATION_CACHE_ENTRY_LIMIT, u as TranslationCacheSettingsSchema } from "./document-translation-BTEG-uW_.mjs";
8
+ import { _ as customHashFromSoundId, a as CustomSoundHashSchema, b as soundIdFromCustomHash, c as CustomSoundMetadataSchema, f as LEGACY_SOUND_ID_MAP, g as SoundVolumeSchema, h as SoundIdSchema, i as CUSTOM_SOUND_ADD_VALUE, l as DEFAULT_BELL_SOUND_ID, m as SoundConfigIdSchema, n as BUILTIN_SOUND_OPTIONS, o as CustomSoundIdSchema, p as SILENT_SOUND_ID, r as BuiltinSoundIdSchema, s as CustomSoundMetadataFileSchema, t as BUILTIN_SOUND_IDS, u as DEFAULT_NOTIFICATION_SOUND_ID, v as getBuiltinSoundUrl, y as normalizeLegacySoundId } from "./sounds-50cYk5b0.mjs";
9
+ import { n as terminalNotificationEventToPublishInput, t as TerminalControlParser } from "./terminal-control-CYZhk7FM.mjs";
10
+ import { a as NotificationPublishInputSchema, c as NotificationSoundSchema, h as groupNotifications, i as NotificationGroupKeySchema, l as NotificationSourceSchema, m as getNotificationGroupLabel, n as NOTIFICATION_SOUND_VALUES, o as NotificationRecordSchema, p as getNotificationGroupKey, r as NotificationActionSchema, s as NotificationSettingsSchema, t as NOTIFICATION_SOUND_OPTIONS, u as TerminalNotificationParser } from "./notifications-Xs9VPFWD.mjs";
11
+ import { n as TERMINAL_BELL_SOUND_VALUES, r as TerminalBellSoundSchema, t as TERMINAL_BELL_SOUND_OPTIONS } from "./terminal-audio-CUs0sqEO.mjs";
12
+ import { a as TERMINAL_THEME_VALUES, i as TERMINAL_THEME_MODE_VALUES, n as DEFAULT_TERMINAL_LIGHT_THEME, r as DEFAULT_TERMINAL_THEME_MODE, t as DEFAULT_TERMINAL_DARK_THEME } from "./terminal-theme-BquTqZIO.mjs";
13
+ import { i as selectLocalDownloadGroup, n as buildLocalDownloadPlanFromRepositoryFiles, r as buildLocalDownloadPlanFromRuntimeProfileFiles, t as LOCAL_MODEL_PROFILE_DEFINITIONS } from "./local-download-profiles-CNDtMG2s.mjs";
14
+ import { n as inferLocalDirectionalModelLanguagePair, t as checkLocalDirectionalModelLanguagePair } from "./translation-language-pair-Cb4a0hG6.mjs";
15
+ import { a as buildEmbeddedUiLaunchUrl, c as isHostedBackendHealthResponse, d as normalizeHostedAppBaseUrl, f as resolveHostedAppBaseUrl, i as buildBackendHealthPayload, l as isSupportedEmbeddedUiUrl, n as OFFICIAL_APP_BASE_URL, o as buildHostedLaunchUrl, r as OPENSPECUI_RUNTIME_CAPABILITIES, s as isBackendHealthRuntimeMetadata, t as HOSTED_SHELL_PROTOCOL_VERSION, u as normalizeEmbeddedUiUrl } from "./hosted-app-CNZhVLM_.mjs";
16
+ import { n as toOpsxDisplayPath, t as VIRTUAL_PROJECT_DIRNAME } from "./opsx-display-path-Cw-5MTRg.mjs";
17
+ import { a as TerminalInvocationSettingsSchema, c as TerminalSpawnCommandSchema, f as quoteTerminalShellArg, g as resolveTerminalShellDefaults, h as renderTerminalSpawnCommandLine, i as TerminalCommandFieldSchema, n as TERMINAL_COMMAND_FIELD_TYPE_VALUES, o as TerminalShellProfileSchema, p as renderTerminalCommandArgs, r as TERMINAL_SHELL_QUOTE_STYLE_VALUES, s as TerminalShellQuoteStyleSchema, t as BUILTIN_TERMINAL_SPAWN_COMMANDS, u as getTerminalCommandDefaultValues } from "./terminal-invocation-IopdwXKL.mjs";
18
+ import { t as parseOpsxSchemaDetail } from "./opsx-schema-detail-Bu415_NB.mjs";
18
19
  import { mkdir, readFile, rename, writeFile } from "fs/promises";
19
20
  import { dirname, join } from "path";
20
21
  import { AsyncLocalStorage } from "node:async_hooks";
21
22
  import { mkdir as mkdir$1, readFile as readFile$1, readdir, stat, writeFile as writeFile$1 } from "node:fs/promises";
22
- import { dirname as dirname$1, join as join$1, matchesGlob, relative, resolve, sep } from "node:path";
23
- import { existsSync, lstatSync, realpathSync } from "node:fs";
23
+ import { basename, dirname as dirname$1, join as join$1, matchesGlob, relative, resolve, sep } from "node:path";
24
+ import { existsSync, lstatSync, readFileSync, realpathSync } from "node:fs";
24
25
  import { z } from "zod";
25
26
  import { EventEmitter } from "events";
26
27
  import { watch } from "fs";
@@ -564,6 +565,30 @@ var ReactiveContext = class {
564
565
  }
565
566
  };
566
567
 
568
+ //#endregion
569
+ //#region src/reactive-fs/path-realpath.ts
570
+ /**
571
+ * Resolve a filesystem path through the closest existing ancestor.
572
+ *
573
+ * Missing descendants still need the same realpath prefix as watcher events,
574
+ * otherwise symlinked roots such as `/var` -> `/private/var` stop matching
575
+ * once the path is created later.
576
+ */
577
+ function resolveRealPathThroughExistingAncestor(path) {
578
+ const absolutePath = resolve(path);
579
+ const missingSegments = [];
580
+ let currentPath = absolutePath;
581
+ while (true) try {
582
+ const realPath = realpathSync(currentPath);
583
+ return missingSegments.length === 0 ? realPath : join$1(realPath, ...missingSegments.reverse());
584
+ } catch {
585
+ const parentPath = dirname$1(currentPath);
586
+ if (parentPath === currentPath) return absolutePath;
587
+ missingSegments.push(basename(currentPath));
588
+ currentPath = parentPath;
589
+ }
590
+ }
591
+
567
592
  //#endregion
568
593
  //#region src/reactive-fs/project-watcher.ts
569
594
  /**
@@ -571,11 +596,7 @@ var ReactiveContext = class {
571
596
  * 在 macOS 上,/var 是 /private/var 的符号链接
572
597
  */
573
598
  function getRealPath$1(path) {
574
- try {
575
- return realpathSync(resolve(path));
576
- } catch {
577
- return resolve(path);
578
- }
599
+ return resolveRealPathThroughExistingAncestor(path);
579
600
  }
580
601
  /** 默认防抖时间 (ms) */
581
602
  const DEBOUNCE_MS$1 = 50;
@@ -1003,11 +1024,7 @@ async function closeAllProjectWatchers() {
1003
1024
  * 获取路径的真实路径(解析符号链接)
1004
1025
  */
1005
1026
  function getRealPath(path) {
1006
- try {
1007
- return realpathSync(resolve(path));
1008
- } catch {
1009
- return resolve(path);
1010
- }
1027
+ return resolveRealPathThroughExistingAncestor(path);
1011
1028
  }
1012
1029
  /**
1013
1030
  * 全局 ProjectWatcher 实例
@@ -1191,6 +1208,24 @@ function subscribeWatcherRuntimeStatus(listener, options = {}) {
1191
1208
  const stateCache$1 = /* @__PURE__ */ new Map();
1192
1209
  /** 监听器释放函数缓存 */
1193
1210
  const releaseCache$1 = /* @__PURE__ */ new Map();
1211
+ /** 缺失路径重校验定时器缓存 */
1212
+ const missingPathPollCache = /* @__PURE__ */ new Map();
1213
+ /** Native watcher can miss a create event on some CI filesystems; missing paths get a low-frequency fallback. */
1214
+ const MISSING_PATH_POLL_MS = 1e3;
1215
+ function stopMissingPathPoll(key) {
1216
+ const timer = missingPathPollCache.get(key);
1217
+ if (!timer) return;
1218
+ clearInterval(timer);
1219
+ missingPathPollCache.delete(key);
1220
+ }
1221
+ function ensureMissingPathPoll(key, poll) {
1222
+ if (!isWatcherPoolInitialized() || missingPathPollCache.has(key)) return;
1223
+ const timer = setInterval(() => {
1224
+ poll();
1225
+ }, MISSING_PATH_POLL_MS);
1226
+ timer.unref?.();
1227
+ missingPathPollCache.set(key, timer);
1228
+ }
1194
1229
  /**
1195
1230
  * 响应式读取文件内容
1196
1231
  *
@@ -1215,12 +1250,18 @@ async function reactiveReadFile(filepath) {
1215
1250
  };
1216
1251
  let state = stateCache$1.get(key);
1217
1252
  if (!state) {
1218
- state = new ReactiveState(await getValue());
1253
+ const initialValue = await getValue();
1254
+ state = new ReactiveState(initialValue);
1219
1255
  stateCache$1.set(key, state);
1220
- const release = acquireWatcher(dirname$1(normalizedPath), async () => {
1256
+ const refresh = async () => {
1221
1257
  const newValue = await getValue();
1222
1258
  state.set(newValue);
1223
- }, { onError: () => {
1259
+ if (newValue === null) ensureMissingPathPoll(key, refresh);
1260
+ else stopMissingPathPoll(key);
1261
+ };
1262
+ if (initialValue === null) ensureMissingPathPoll(key, refresh);
1263
+ const release = acquireWatcher(dirname$1(normalizedPath), refresh, { onError: () => {
1264
+ stopMissingPathPoll(key);
1224
1265
  stateCache$1.delete(key);
1225
1266
  releaseCache$1.delete(key);
1226
1267
  } });
@@ -1303,12 +1344,18 @@ async function reactiveExists(path) {
1303
1344
  };
1304
1345
  let state = stateCache$1.get(key);
1305
1346
  if (!state) {
1306
- state = new ReactiveState(await getValue());
1347
+ const initialValue = await getValue();
1348
+ state = new ReactiveState(initialValue);
1307
1349
  stateCache$1.set(key, state);
1308
- const release = acquireWatcher(dirname$1(normalizedPath), async () => {
1350
+ const refresh = async () => {
1309
1351
  const newValue = await getValue();
1310
1352
  state.set(newValue);
1311
- }, { onError: () => {
1353
+ if (newValue) stopMissingPathPoll(key);
1354
+ else ensureMissingPathPoll(key, refresh);
1355
+ };
1356
+ if (!initialValue) ensureMissingPathPoll(key, refresh);
1357
+ const release = acquireWatcher(dirname$1(normalizedPath), refresh, { onError: () => {
1358
+ stopMissingPathPoll(key);
1312
1359
  stateCache$1.delete(key);
1313
1360
  releaseCache$1.delete(key);
1314
1361
  } });
@@ -1340,16 +1387,22 @@ async function reactiveStat(path) {
1340
1387
  };
1341
1388
  let state = stateCache$1.get(key);
1342
1389
  if (!state) {
1343
- state = new ReactiveState(await getValue(), { equals: (a, b) => {
1390
+ const initialValue = await getValue();
1391
+ state = new ReactiveState(initialValue, { equals: (a, b) => {
1344
1392
  if (a === null && b === null) return true;
1345
1393
  if (a === null || b === null) return false;
1346
1394
  return a.isDirectory === b.isDirectory && a.isFile === b.isFile && a.mtime === b.mtime && a.birthtime === b.birthtime;
1347
1395
  } });
1348
1396
  stateCache$1.set(key, state);
1349
- const release = acquireWatcher(dirname$1(normalizedPath), async () => {
1397
+ const refresh = async () => {
1350
1398
  const newValue = await getValue();
1351
1399
  state.set(newValue);
1352
- }, { onError: () => {
1400
+ if (newValue === null) ensureMissingPathPoll(key, refresh);
1401
+ else stopMissingPathPoll(key);
1402
+ };
1403
+ if (initialValue === null) ensureMissingPathPoll(key, refresh);
1404
+ const release = acquireWatcher(dirname$1(normalizedPath), refresh, { onError: () => {
1405
+ stopMissingPathPoll(key);
1353
1406
  stateCache$1.delete(key);
1354
1407
  releaseCache$1.delete(key);
1355
1408
  } });
@@ -1365,12 +1418,15 @@ function clearCache(path) {
1365
1418
  const normalizedPath = resolve(path);
1366
1419
  for (const [key, release] of releaseCache$1) if (key.includes(normalizedPath)) {
1367
1420
  release();
1421
+ stopMissingPathPoll(key);
1368
1422
  releaseCache$1.delete(key);
1369
1423
  stateCache$1.delete(key);
1370
1424
  }
1371
1425
  } else {
1372
1426
  for (const release of releaseCache$1.values()) release();
1373
1427
  releaseCache$1.clear();
1428
+ for (const timer of missingPathPollCache.values()) clearInterval(timer);
1429
+ missingPathPollCache.clear();
1374
1430
  stateCache$1.clear();
1375
1431
  }
1376
1432
  }
@@ -2819,6 +2875,15 @@ const PERSISTED_CONFIG_SANITIZE_RULES = [
2819
2875
  ],
2820
2876
  fallback: {}
2821
2877
  },
2878
+ {
2879
+ kind: "object",
2880
+ path: [
2881
+ "translation",
2882
+ "engines",
2883
+ "localCt2"
2884
+ ],
2885
+ fallback: {}
2886
+ },
2822
2887
  {
2823
2888
  kind: "object",
2824
2889
  path: [
@@ -2862,6 +2927,13 @@ function pruneNullish$1(value) {
2862
2927
  function hasOwnEntries$1(value) {
2863
2928
  return Object.keys(value).length > 0;
2864
2929
  }
2930
+ function mergeNullablePatch$1(current, patch) {
2931
+ const next = { ...current };
2932
+ if (!patch) return next;
2933
+ for (const [key, value] of Object.entries(patch)) if (value === null) delete next[key];
2934
+ else if (value !== void 0) next[key] = value;
2935
+ return next;
2936
+ }
2865
2937
  function toPersistedConfig(config, options = {}) {
2866
2938
  const persisted = {};
2867
2939
  const command = config.cli.command?.trim();
@@ -2917,6 +2989,10 @@ function toPersistedConfig(config, options = {}) {
2917
2989
  if (config.translation.engines.local.model !== DEFAULT_CONFIG.translation.engines.local.model) localEngine.model = config.translation.engines.local.model;
2918
2990
  if (config.translation.engines.local.selectedGroupId !== DEFAULT_CONFIG.translation.engines.local.selectedGroupId) localEngine.selectedGroupId = config.translation.engines.local.selectedGroupId;
2919
2991
  if (localEngine && hasOwnEntries$1(localEngine)) translationEngines.local = localEngine;
2992
+ const localCt2Engine = {};
2993
+ if (config.translation.engines.localCt2.model !== DEFAULT_CONFIG.translation.engines.localCt2.model) localCt2Engine.model = config.translation.engines.localCt2.model;
2994
+ if (config.translation.engines.localCt2.selectedGroupId !== DEFAULT_CONFIG.translation.engines.localCt2.selectedGroupId) localCt2Engine.selectedGroupId = config.translation.engines.localCt2.selectedGroupId;
2995
+ if (localCt2Engine && hasOwnEntries$1(localCt2Engine)) translationEngines.localCt2 = localCt2Engine;
2920
2996
  if (config.translation.engines.openai.model !== DEFAULT_CONFIG.translation.engines.openai.model) translationEngines.openai = { model: config.translation.engines.openai.model };
2921
2997
  if (hasOwnEntries$1(translationEngines)) translation.engines = translationEngines;
2922
2998
  if (hasOwnEntries$1(translation)) persisted.translation = translation;
@@ -3023,14 +3099,9 @@ var ConfigManager = class {
3023
3099
  ...current.translation,
3024
3100
  ...config.translation,
3025
3101
  engines: {
3026
- local: {
3027
- ...current.translation.engines.local,
3028
- ...config.translation?.engines?.local
3029
- },
3030
- openai: {
3031
- ...current.translation.engines.openai,
3032
- ...config.translation?.engines?.openai
3033
- }
3102
+ local: mergeNullablePatch$1(current.translation.engines.local, config.translation?.engines?.local),
3103
+ localCt2: mergeNullablePatch$1(current.translation.engines.localCt2, config.translation?.engines?.localCt2),
3104
+ openai: mergeNullablePatch$1(current.translation.engines.openai, config.translation?.engines?.openai)
3034
3105
  }
3035
3106
  }
3036
3107
  });
@@ -3183,6 +3254,11 @@ const PERSISTED_GLOBAL_SETTINGS_SANITIZE_RULES = [
3183
3254
  kind: "object",
3184
3255
  path: ["translationEngines", "local"],
3185
3256
  fallback: {}
3257
+ },
3258
+ {
3259
+ kind: "object",
3260
+ path: ["translationEngines", "localCt2"],
3261
+ fallback: {}
3186
3262
  }
3187
3263
  ];
3188
3264
  function getDefaultGlobalSettingsPath() {
@@ -3200,6 +3276,13 @@ function pruneNullish(value) {
3200
3276
  function hasOwnEntries(value) {
3201
3277
  return Object.keys(value).length > 0;
3202
3278
  }
3279
+ function mergeNullablePatch(current, patch) {
3280
+ const next = { ...current };
3281
+ if (!patch) return next;
3282
+ for (const [key, value] of Object.entries(patch)) if (value === null) delete next[key];
3283
+ else if (value !== void 0) next[key] = value;
3284
+ return next;
3285
+ }
3203
3286
  function toPersistedGlobalSettings(settings) {
3204
3287
  const persisted = {};
3205
3288
  const translationCache = {};
@@ -3217,6 +3300,11 @@ function toPersistedGlobalSettings(settings) {
3217
3300
  if (settings.translationEngines.local.selectedGroupId !== defaultTranslationEngines.local.selectedGroupId) local.selectedGroupId = settings.translationEngines.local.selectedGroupId;
3218
3301
  if (settings.translationEngines.local.hfEndpoint !== defaultTranslationEngines.local.hfEndpoint) local.hfEndpoint = settings.translationEngines.local.hfEndpoint;
3219
3302
  if (hasOwnEntries(local)) translationEngines.local = local;
3303
+ const localCt2 = {};
3304
+ if (settings.translationEngines.localCt2.model !== defaultTranslationEngines.localCt2.model) localCt2.model = settings.translationEngines.localCt2.model;
3305
+ if (settings.translationEngines.localCt2.selectedGroupId !== defaultTranslationEngines.localCt2.selectedGroupId) localCt2.selectedGroupId = settings.translationEngines.localCt2.selectedGroupId;
3306
+ if (settings.translationEngines.localCt2.hfEndpoint !== defaultTranslationEngines.localCt2.hfEndpoint) localCt2.hfEndpoint = settings.translationEngines.localCt2.hfEndpoint;
3307
+ if (hasOwnEntries(localCt2)) translationEngines.localCt2 = localCt2;
3220
3308
  if (hasOwnEntries(translationEngines)) persisted.translationEngines = translationEngines;
3221
3309
  return persisted;
3222
3310
  }
@@ -3266,14 +3354,9 @@ var GlobalSettingsManager = class {
3266
3354
  },
3267
3355
  translationEngines: {
3268
3356
  ...current.translationEngines,
3269
- openai: {
3270
- ...current.translationEngines.openai,
3271
- ...update.translationEngines?.openai
3272
- },
3273
- local: {
3274
- ...current.translationEngines.local,
3275
- ...update.translationEngines?.local
3276
- }
3357
+ openai: mergeNullablePatch(current.translationEngines.openai, update.translationEngines?.openai),
3358
+ local: mergeNullablePatch(current.translationEngines.local, update.translationEngines?.local),
3359
+ localCt2: mergeNullablePatch(current.translationEngines.localCt2, update.translationEngines?.localCt2)
3277
3360
  }
3278
3361
  }));
3279
3362
  if (isPersistedGlobalSettingsEmpty(persisted) && !fileExists) return;
@@ -3285,6 +3368,204 @@ var GlobalSettingsManager = class {
3285
3368
  }
3286
3369
  };
3287
3370
 
3371
+ //#endregion
3372
+ //#region src/runtime-package-manager.ts
3373
+ const LOCKFILE_PACKAGE_MANAGERS = [
3374
+ {
3375
+ filenames: ["deno.lock"],
3376
+ id: "deno"
3377
+ },
3378
+ {
3379
+ filenames: ["bun.lockb", "bun.lock"],
3380
+ id: "bun"
3381
+ },
3382
+ {
3383
+ filenames: ["pnpm-lock.yaml"],
3384
+ id: "pnpm"
3385
+ },
3386
+ {
3387
+ filenames: ["yarn.lock"],
3388
+ id: "yarn"
3389
+ },
3390
+ {
3391
+ filenames: ["package-lock.json", "npm-shrinkwrap.json"],
3392
+ id: "npm"
3393
+ }
3394
+ ];
3395
+ function parseUserAgentPackageManager(userAgent) {
3396
+ const token = userAgent?.trim().split(/\s+/u)[0];
3397
+ if (!token) return null;
3398
+ const slashIndex = token.indexOf("/");
3399
+ return (slashIndex === -1 ? token : token.slice(0, slashIndex)).trim() || null;
3400
+ }
3401
+ function parseExecPathPackageManager(execPath) {
3402
+ if (!execPath) return null;
3403
+ const normalized = execPath.replaceAll("\\", "/").toLowerCase();
3404
+ if (normalized.includes("vite-plus")) return "vp";
3405
+ if (normalized.includes("pnpm")) return "pnpm";
3406
+ if (normalized.includes("yarn")) return "yarn";
3407
+ if (normalized.includes("bun")) return "bun";
3408
+ if (normalized.includes("deno")) return "deno";
3409
+ if (normalized.includes("npm")) return "npm";
3410
+ return null;
3411
+ }
3412
+ function parsePackageManagerField(packageManager) {
3413
+ const trimmed = packageManager?.trim();
3414
+ if (!trimmed) return null;
3415
+ if (trimmed.startsWith("@")) {
3416
+ const separatorIndex$1 = trimmed.lastIndexOf("@");
3417
+ if (separatorIndex$1 > 0) return trimmed.slice(0, separatorIndex$1);
3418
+ return trimmed;
3419
+ }
3420
+ const separatorIndex = trimmed.indexOf("@");
3421
+ return (separatorIndex === -1 ? trimmed : trimmed.slice(0, separatorIndex)).trim() || null;
3422
+ }
3423
+ function detectPackageManagerFromPackageJson(currentDir) {
3424
+ const packageJsonPath = join$1(currentDir, "package.json");
3425
+ if (!existsSync(packageJsonPath)) return null;
3426
+ try {
3427
+ const raw = readFileSync(packageJsonPath, "utf8");
3428
+ return parsePackageManagerField(JSON.parse(raw).packageManager);
3429
+ } catch {
3430
+ return null;
3431
+ }
3432
+ }
3433
+ function detectPackageManagerFromLockfile(currentDir) {
3434
+ for (const entry of LOCKFILE_PACKAGE_MANAGERS) if (entry.filenames.some((filename) => existsSync(join$1(currentDir, filename)))) return entry.id;
3435
+ return null;
3436
+ }
3437
+ function detectRuntimePackageManager(options) {
3438
+ const env = options.env ?? process.env;
3439
+ if (env.DENO_VERSION) return {
3440
+ id: "deno",
3441
+ source: "deno-env"
3442
+ };
3443
+ const fromUserAgent = parseUserAgentPackageManager(env.npm_config_user_agent);
3444
+ if (fromUserAgent) return {
3445
+ id: fromUserAgent,
3446
+ source: "user-agent"
3447
+ };
3448
+ const fromExecPath = parseExecPathPackageManager(env.npm_execpath);
3449
+ if (fromExecPath) return {
3450
+ id: fromExecPath,
3451
+ source: "exec-path"
3452
+ };
3453
+ let currentDir = options.startDir;
3454
+ while (true) {
3455
+ const fromPackageManagerField = detectPackageManagerFromPackageJson(currentDir);
3456
+ if (fromPackageManagerField) return {
3457
+ id: fromPackageManagerField,
3458
+ source: "package-manager-field"
3459
+ };
3460
+ const fromLockfile = detectPackageManagerFromLockfile(currentDir);
3461
+ if (fromLockfile) return {
3462
+ id: fromLockfile,
3463
+ source: "lockfile"
3464
+ };
3465
+ const parentDir = dirname$1(currentDir);
3466
+ if (parentDir === currentDir) break;
3467
+ currentDir = parentDir;
3468
+ }
3469
+ return {
3470
+ id: "npm",
3471
+ source: "fallback"
3472
+ };
3473
+ }
3474
+ function buildCommand(cmd, args) {
3475
+ return {
3476
+ cmd,
3477
+ args,
3478
+ displayCommand: `${cmd} ${args.join(" ")}`
3479
+ };
3480
+ }
3481
+ function appendOptionalDependencyFlag(args, field) {
3482
+ if (field !== "optionalDependencies") return;
3483
+ args.push("--save-optional");
3484
+ }
3485
+ function appendAllowBuildFlags(args, packages) {
3486
+ for (const packageName of packages) args.push("--allow-build", packageName);
3487
+ }
3488
+ const RUNTIME_PACKAGE_INSTALL_STRATEGIES = [
3489
+ {
3490
+ id: "npm",
3491
+ preservesDependencyField: true,
3492
+ buildCommand(input) {
3493
+ const args = ["install"];
3494
+ if (input.ignoreWorkspace) args.push("--ignore-workspace");
3495
+ appendOptionalDependencyFlag(args, input.dependencyField ?? "dependencies");
3496
+ args.push(...input.packages);
3497
+ return buildCommand("npm", args);
3498
+ }
3499
+ },
3500
+ {
3501
+ id: "pnpm",
3502
+ preservesDependencyField: true,
3503
+ buildCommand(input) {
3504
+ const args = ["add"];
3505
+ appendOptionalDependencyFlag(args, input.dependencyField ?? "dependencies");
3506
+ appendAllowBuildFlags(args, input.allowBuildPackages ?? []);
3507
+ args.push(...input.packages);
3508
+ return buildCommand("pnpm", args);
3509
+ }
3510
+ },
3511
+ {
3512
+ id: "yarn",
3513
+ preservesDependencyField: true,
3514
+ buildCommand(input) {
3515
+ const args = ["add"];
3516
+ if ((input.dependencyField ?? "dependencies") === "optionalDependencies") args.push("--optional");
3517
+ args.push(...input.packages);
3518
+ return buildCommand("yarn", args);
3519
+ }
3520
+ },
3521
+ {
3522
+ id: "bun",
3523
+ preservesDependencyField: true,
3524
+ buildCommand(input) {
3525
+ const args = ["add"];
3526
+ if ((input.dependencyField ?? "dependencies") === "optionalDependencies") args.push("--optional");
3527
+ args.push(...input.packages);
3528
+ return buildCommand("bun", args);
3529
+ }
3530
+ },
3531
+ {
3532
+ id: "vp",
3533
+ preservesDependencyField: true,
3534
+ buildCommand(input) {
3535
+ const args = ["add"];
3536
+ appendOptionalDependencyFlag(args, input.dependencyField ?? "dependencies");
3537
+ appendAllowBuildFlags(args, input.allowBuildPackages ?? []);
3538
+ args.push(...input.packages);
3539
+ return buildCommand("vp", args);
3540
+ }
3541
+ },
3542
+ {
3543
+ id: "deno",
3544
+ preservesDependencyField: false,
3545
+ buildCommand(input) {
3546
+ const args = [
3547
+ "add",
3548
+ "--npm",
3549
+ "--node-modules-dir=auto"
3550
+ ];
3551
+ if ((input.allowBuildPackages?.length ?? 0) > 0) args.push(`--allow-scripts=${input.allowBuildPackages.join(",")}`);
3552
+ args.push(...input.packages.map((packageSpec) => packageSpec.startsWith("npm:") ? packageSpec : `npm:${packageSpec}`));
3553
+ return buildCommand("deno", args);
3554
+ }
3555
+ }
3556
+ ];
3557
+ function resolveRuntimePackageInstallStrategy(packageManager) {
3558
+ return RUNTIME_PACKAGE_INSTALL_STRATEGIES.find((strategy) => strategy.id === packageManager) ?? null;
3559
+ }
3560
+ function buildRuntimePackageInstallCommand(input) {
3561
+ return resolveRuntimePackageInstallStrategy(input.packageManager)?.buildCommand({
3562
+ packages: [...input.packages],
3563
+ dependencyField: input.dependencyField,
3564
+ ignoreWorkspace: input.ignoreWorkspace,
3565
+ allowBuildPackages: input.allowBuildPackages
3566
+ }) ?? null;
3567
+ }
3568
+
3288
3569
  //#endregion
3289
3570
  //#region src/cli-executor.ts
3290
3571
  /**
@@ -4409,7 +4690,7 @@ async function touchDirectoryPathDeps(rootDir, relativePath) {
4409
4690
  let currentPath = rootDir;
4410
4691
  for (const segment of splitRelativePathSegments(relativePath)) {
4411
4692
  currentPath = join$1(currentPath, segment);
4412
- await reactiveExists(currentPath);
4693
+ await reactiveStat(currentPath);
4413
4694
  }
4414
4695
  }
4415
4696
  async function touchDirectoryTree(rootDir) {
@@ -5126,4 +5407,4 @@ const PtyServerMessageSchema = z.discriminatedUnion("type", [
5126
5407
  ]);
5127
5408
 
5128
5409
  //#endregion
5129
- export { AI_TOOLS, ApplyInstructionsContextFilesSchema, ApplyInstructionsSchema, ApplyTaskSchema, ArtifactInstructionsSchema, ArtifactStatusSchema, BUILTIN_SOUND_IDS, BUILTIN_SOUND_OPTIONS, BUILTIN_TERMINAL_SPAWN_COMMANDS, BatchTranslateEventSchema, BatchTranslateInputSchema, BuiltinSoundIdSchema, CODE_EDITOR_THEME_VALUES, CUSTOM_SOUND_ADD_VALUE, ChangeFileSchema, ChangeSchema, ChangeStatusSchema, CliExecutor, CodeEditorThemeSchema, ConfigManager, CustomSoundHashSchema, CustomSoundIdSchema, CustomSoundMetadataFileSchema, CustomSoundMetadataSchema, DASHBOARD_METRIC_KEYS, DEFAULT_BELL_SOUND_ID, DEFAULT_CONFIG, DEFAULT_GIT_DIFF_EAGER_LINE_BUDGET, DEFAULT_GLOBAL_SETTINGS, DEFAULT_NOTIFICATION_SOUND_ID, DEFAULT_TERMINAL_DARK_THEME, DEFAULT_TERMINAL_LIGHT_THEME, DEFAULT_TERMINAL_THEME_MODE, DEFAULT_TRANSLATION_CACHE_ENTRY_LIMIT, DEFAULT_TRANSLATION_ENGINE_ID, DOCUMENT_TRANSLATION_DISPLAY_MODES, DashboardConfigSchema, DeltaOperationType, DeltaSchema, DeltaSpecSchema, DependencyInfoSchema, DocumentTranslationConfigSchema, DocumentTranslationDisplayModeSchema, FILE_PREVIEW_KINDS, GitConfigSchema, GlobalSettingsManager, HOSTED_SHELL_PROTOCOL_VERSION, LEGACY_SOUND_ID_MAP, LOCAL_MODEL_PROFILE_DEFINITIONS, LocalModelAssetLogSchema, LocalModelAssetPlanSnapshotSchema, LocalModelAssetStateSchema, LocalModelDownloadStatusSchema, MAX_TRANSLATION_CACHE_ENTRY_LIMIT, MIN_TRANSLATION_CACHE_ENTRY_LIMIT, MarkdownParser, MarkdownReadingPluginRegistry, NOTIFICATION_SOUND_OPTIONS, NOTIFICATION_SOUND_VALUES, NotificationActionSchema, NotificationGroupKeySchema, NotificationPublishInputSchema, NotificationRecordSchema, NotificationSettingsSchema, NotificationSoundSchema, NotificationSourceSchema, OFFICIAL_APP_BASE_URL, OPENSPECUI_HOOKS_VERSION, OPENSPECUI_RUNTIME_CAPABILITIES, OPEN_SPEC_READING_SECTIONS_PROJECTION_ID, OPEN_SPEC_SPEC_PROJECTION_ID, OPSX_AGENT_INVOCATION_MODE_VALUES, OpenSpecAdapter, OpenSpecUIConfigSchema, OpenSpecUIGlobalSettingsSchema, OpenSpecWatcher, OpsxAgentInvocationModeSchema, OpsxConfigSchema, OpsxKernel, ProjectWatcher, PtyAttachMessageSchema, PtyBellResponseSchema, PtyBufferResponseSchema, PtyClientMessageSchema, PtyCloseMessageSchema, PtyCreateMessageSchema, PtyCreatedResponseSchema, PtyErrorCodeSchema, PtyErrorResponseSchema, PtyExitResponseSchema, PtyInputMessageSchema, PtyListMessageSchema, PtyListResponseSchema, PtyOutputResponseSchema, PtyPlatformSchema, PtyProcessTitleResponseSchema, PtyResizeMessageSchema, PtyServerMessageSchema, PtyTitleResponseSchema, ReactiveContext, ReactiveState, RequirementSchema, SERVICE_TRANSLATION_ENGINE_IDS, SILENT_SOUND_ID, ScenarioStepKeywordSchema, ScenarioStepSchema, SchemaArtifactSchema, SchemaDetailSchema, SchemaInfoSchema, SchemaResolutionSchema, ServiceTranslationEngineIdSchema, SoundConfigIdSchema, SoundIdSchema, SpecSchema, TERMINAL_BELL_SOUND_OPTIONS, TERMINAL_BELL_SOUND_VALUES, TERMINAL_COMMAND_FIELD_TYPE_VALUES, TERMINAL_SHELL_QUOTE_STYLE_VALUES, TERMINAL_THEME_MODE_VALUES, TERMINAL_THEME_VALUES, TOOL_WORKFLOW_TO_SKILL_DIR, TRANSLATION_CACHE_POLICY_VERSION, TRANSLATION_ENGINE_IDS, TRANSLATION_ENGINE_MANIFESTS, TRANSLATOR_CONTRACT_VERSION, TaskSchema, TemplatesSchema, TerminalBellSoundSchema, TerminalCommandFieldSchema, TerminalConfigSchema, TerminalControlParser, TerminalInvocationSettingsSchema, TerminalNotificationParser, TerminalRendererEngineSchema, TerminalShellProfileSchema, TerminalShellQuoteStyleSchema, TerminalSpawnCommandSchema, TerminalThemeModeSchema, TerminalThemeSchema, TranslationCacheEntrySchema, TranslationCacheReadInputSchema, TranslationCacheSettingsSchema, TranslationCacheStatsSchema, TranslationCacheWriteInputSchema, TranslationDownloadFilePlanSchema, TranslationDownloadGroupPlanSchema, TranslationEngineGlobalSettingsSchema, TranslationEngineIdSchema, TranslationEngineProjectSettingsSchema, TranslationLocalSettingsSchema, TranslationOpenAISettingsSchema, VIRTUAL_PROJECT_DIRNAME, Validator, acquireWatcher, annotateOpenSpecFacts, annotateOpenSpecMarkdown, buildBackendHealthPayload, buildCliRunnerCandidates, buildEmbeddedUiLaunchUrl, buildHostedLaunchUrl, buildLocalDownloadPlanFromRepositoryFiles, buildLocalDownloadPlanFromRuntimeProfileFiles, buildMarkdownParentMap, buildOpsxEntityDetail, builtinOpenSpecReadingPlugin, clearCache, closeAllProjectWatchers, closeAllWatchers, contextStorage, createCleanCliEnv, createFileChangeObservable, createMarkdownReadingDocument, createMarkdownReadingDocumentFromFacts, createOpenSpecReadingPlugin, customHashFromSoundId, getActiveWatcherCount, getAllToolIds, getAllTools, getAvailableToolIds, getAvailableTools, getBuiltinSoundUrl, getCacheSize, getConfiguredTools, getDefaultCliCommand, getDefaultCliCommandString, getDefaultGlobalSettingsPath, getDetectedProjectTools, getMarkdownAnnotation, getMarkdownAnnotationsForFact, getMarkdownFactSpan, getMarkdownHeadingEnd, getMarkdownHeadingFacts, getNotificationGroupKey, getNotificationGroupLabel, getOpenSpecAnnotation, getOpenSpecAnnotationsForFact, getOpenSpecProjectionAnnotation, getOpenSpecReadingSections, getOpsxEntityMetadataPath, getOpsxEntityRootRelativePath, getProjectWatcher, getTerminalCommandDefaultValues, getToolById, getToolInitStates, getTranslationEngineManifest, getWatchedProjectDir, getWatcherRuntimeStatus, groupNotifications, inferFileMime, inferFilePreviewKind, initWatcherPool, isBackendHealthRuntimeMetadata, isGlobPattern, isHostedBackendHealthResponse, isOpsxGlobPattern, isPreviewableFile, isSupportedEmbeddedUiUrl, isTerminalRendererEngine, isTextLikeFile, isTextLikeMime, isToolConfigured, isWatcherPoolInitialized, normalizeEmbeddedUiUrl, normalizeHostedAppBaseUrl, normalizeLegacySoundId, normalizeOpsxEntityPath, openSpecAnnotationRules, opsxGlobToRegex, opsxPathMatchesPattern, parseCliCommand, parseMarkdownFacts, parseOpenSpecMarkdownToSpec, parseOpsxEntityMetadata, parseOpsxSchemaDetail, projectAnnotatedOpenSpecToSpec, projectOpenSpecMarkdown, quoteTerminalShellArg, reactiveExists, reactiveReadDir, reactiveReadFile, reactiveStat, renderTerminalCommandArgs, renderTerminalSpawnCommandLine, resolveHostedAppBaseUrl, resolveTerminalShellDefaults, selectLocalDownloadGroup, sniffGlobalCli, sortMarkdownReadingPlugins, soundIdFromCustomHash, subscribeWatcherRuntimeStatus, terminalNotificationEventToPublishInput, toMarkdownFactKind, toOpsxDisplayPath, toPersistedGlobalSettings, trimMarkdownSlice };
5410
+ export { AI_TOOLS, ApplyInstructionsContextFilesSchema, ApplyInstructionsSchema, ApplyTaskSchema, ArtifactInstructionsSchema, ArtifactStatusSchema, BUILTIN_SOUND_IDS, BUILTIN_SOUND_OPTIONS, BUILTIN_TERMINAL_SPAWN_COMMANDS, BatchTranslateEventSchema, BatchTranslateInputSchema, BuiltinSoundIdSchema, CODE_EDITOR_THEME_VALUES, CUSTOM_SOUND_ADD_VALUE, ChangeFileSchema, ChangeSchema, ChangeStatusSchema, CliExecutor, CodeEditorThemeSchema, ConfigManager, CustomSoundHashSchema, CustomSoundIdSchema, CustomSoundMetadataFileSchema, CustomSoundMetadataSchema, DASHBOARD_METRIC_KEYS, DEFAULT_BELL_SOUND_ID, DEFAULT_CONFIG, DEFAULT_GIT_DIFF_EAGER_LINE_BUDGET, DEFAULT_GLOBAL_SETTINGS, DEFAULT_NOTIFICATION_SOUND_ID, DEFAULT_TERMINAL_DARK_THEME, DEFAULT_TERMINAL_LIGHT_THEME, DEFAULT_TERMINAL_THEME_MODE, DEFAULT_TRANSLATION_CACHE_ENTRY_LIMIT, DEFAULT_TRANSLATION_ENGINE_ID, DOCUMENT_TRANSLATION_DISPLAY_MODES, DashboardConfigSchema, DeltaOperationType, DeltaSchema, DeltaSpecSchema, DependencyInfoSchema, DocumentTranslationConfigSchema, DocumentTranslationDisplayModeSchema, FILE_PREVIEW_KINDS, GitConfigSchema, GlobalSettingsManager, HOSTED_SHELL_PROTOCOL_VERSION, LEGACY_SOUND_ID_MAP, LOCAL_MODEL_PROFILE_DEFINITIONS, LocalModelAssetLogSchema, LocalModelAssetPlanSnapshotSchema, LocalModelAssetStateSchema, LocalModelDownloadStatusSchema, LocalModelLifecycleFileStateSchema, LocalModelLifecycleGroupStateSchema, LocalModelProfileLoadStateSchema, LocalModelProfileManifestFileSchema, LocalModelProfileManifestGroupSchema, LocalModelProfileManifestSchema, LocalModelProfileStatusSchema, MAX_TRANSLATION_CACHE_ENTRY_LIMIT, MIN_TRANSLATION_CACHE_ENTRY_LIMIT, MarkdownParser, MarkdownReadingPluginRegistry, NOTIFICATION_SOUND_OPTIONS, NOTIFICATION_SOUND_VALUES, NotificationActionSchema, NotificationGroupKeySchema, NotificationPublishInputSchema, NotificationRecordSchema, NotificationSettingsSchema, NotificationSoundSchema, NotificationSourceSchema, OFFICIAL_APP_BASE_URL, OPENSPECUI_HOOKS_VERSION, OPENSPECUI_RUNTIME_CAPABILITIES, OPEN_SPEC_READING_SECTIONS_PROJECTION_ID, OPEN_SPEC_SPEC_PROJECTION_ID, OPSX_AGENT_INVOCATION_MODE_VALUES, OpenSpecAdapter, OpenSpecUIConfigSchema, OpenSpecUIGlobalSettingsSchema, OpenSpecWatcher, OpsxAgentInvocationModeSchema, OpsxConfigSchema, OpsxKernel, ProjectWatcher, PtyAttachMessageSchema, PtyBellResponseSchema, PtyBufferResponseSchema, PtyClientMessageSchema, PtyCloseMessageSchema, PtyCreateMessageSchema, PtyCreatedResponseSchema, PtyErrorCodeSchema, PtyErrorResponseSchema, PtyExitResponseSchema, PtyInputMessageSchema, PtyListMessageSchema, PtyListResponseSchema, PtyOutputResponseSchema, PtyPlatformSchema, PtyProcessTitleResponseSchema, PtyResizeMessageSchema, PtyServerMessageSchema, PtyTitleResponseSchema, ReactiveContext, ReactiveState, RequirementSchema, SERVICE_TRANSLATION_ENGINE_IDS, SILENT_SOUND_ID, ScenarioStepKeywordSchema, ScenarioStepSchema, SchemaArtifactSchema, SchemaDetailSchema, SchemaInfoSchema, SchemaResolutionSchema, ServiceTranslationEngineIdSchema, SoundConfigIdSchema, SoundIdSchema, SpecSchema, TERMINAL_BELL_SOUND_OPTIONS, TERMINAL_BELL_SOUND_VALUES, TERMINAL_COMMAND_FIELD_TYPE_VALUES, TERMINAL_SHELL_QUOTE_STYLE_VALUES, TERMINAL_THEME_MODE_VALUES, TERMINAL_THEME_VALUES, TOOL_WORKFLOW_TO_SKILL_DIR, TRANSLATION_CACHE_POLICY_VERSION, TRANSLATION_ENGINE_IDS, TRANSLATION_ENGINE_MANIFESTS, TRANSLATOR_CONTRACT_VERSION, TaskSchema, TemplatesSchema, TerminalBellSoundSchema, TerminalCommandFieldSchema, TerminalConfigSchema, TerminalControlParser, TerminalInvocationSettingsSchema, TerminalNotificationParser, TerminalRendererEngineSchema, TerminalShellProfileSchema, TerminalShellQuoteStyleSchema, TerminalSpawnCommandSchema, TerminalThemeModeSchema, TerminalThemeSchema, TranslationCacheEntrySchema, TranslationCacheReadInputSchema, TranslationCacheSettingsSchema, TranslationCacheStatsSchema, TranslationCacheWriteInputSchema, TranslationDownloadFilePlanSchema, TranslationDownloadGroupPlanSchema, TranslationEngineAssetStateSchema, TranslationEngineAssetStatusSchema, TranslationEngineDependencyStateSchema, TranslationEngineDependencyStatusSchema, TranslationEngineGlobalSettingsSchema, TranslationEngineIdSchema, TranslationEngineInstallLogEventSchema, TranslationEngineInstallLogStreamSchema, TranslationEngineLifecycleEventSchema, TranslationEngineLifecycleStatusSchema, TranslationEngineProjectSettingsSchema, TranslationEngineRuntimeStateSchema, TranslationEngineRuntimeStatusSchema, TranslationLocalCt2SettingsSchema, TranslationLocalSettingsSchema, TranslationOpenAISettingsSchema, VIRTUAL_PROJECT_DIRNAME, Validator, acquireWatcher, annotateOpenSpecFacts, annotateOpenSpecMarkdown, buildBackendHealthPayload, buildCliRunnerCandidates, buildEmbeddedUiLaunchUrl, buildHostedLaunchUrl, buildLocalDownloadPlanFromRepositoryFiles, buildLocalDownloadPlanFromRuntimeProfileFiles, buildMarkdownParentMap, buildOpsxEntityDetail, buildRuntimePackageInstallCommand, builtinOpenSpecReadingPlugin, checkLocalDirectionalModelLanguagePair, clearCache, closeAllProjectWatchers, closeAllWatchers, contextStorage, createCleanCliEnv, createFileChangeObservable, createMarkdownReadingDocument, createMarkdownReadingDocumentFromFacts, createOpenSpecReadingPlugin, createTranslationEngineLifecycleStatus, customHashFromSoundId, detectRuntimePackageManager, getActiveWatcherCount, getAllToolIds, getAllTools, getAvailableToolIds, getAvailableTools, getBuiltinSoundUrl, getCacheSize, getConfiguredTools, getDefaultCliCommand, getDefaultCliCommandString, getDefaultGlobalSettingsPath, getDetectedProjectTools, getManagedLocalTranslationEngineManifest, getMarkdownAnnotation, getMarkdownAnnotationsForFact, getMarkdownFactSpan, getMarkdownHeadingEnd, getMarkdownHeadingFacts, getNotificationGroupKey, getNotificationGroupLabel, getOpenSpecAnnotation, getOpenSpecAnnotationsForFact, getOpenSpecProjectionAnnotation, getOpenSpecReadingSections, getOpsxEntityMetadataPath, getOpsxEntityRootRelativePath, getProjectWatcher, getTerminalCommandDefaultValues, getToolById, getToolInitStates, getTranslationEngineLifecycleMessage, getTranslationEngineManifest, getWatchedProjectDir, getWatcherRuntimeStatus, groupNotifications, inferFileMime, inferFilePreviewKind, inferLocalDirectionalModelLanguagePair, initWatcherPool, isBackendHealthRuntimeMetadata, isGlobPattern, isHostedBackendHealthResponse, isManagedLocalTranslationEngineId, isOpsxGlobPattern, isPreviewableFile, isSupportedEmbeddedUiUrl, isTerminalRendererEngine, isTextLikeFile, isTextLikeMime, isToolConfigured, isTranslationEngineDependencyReady, isTranslationEngineRuntimeReady, isWatcherPoolInitialized, normalizeEmbeddedUiUrl, normalizeHostedAppBaseUrl, normalizeLegacySoundId, normalizeOpsxEntityPath, openSpecAnnotationRules, opsxGlobToRegex, opsxPathMatchesPattern, parseCliCommand, parseMarkdownFacts, parseOpenSpecMarkdownToSpec, parseOpsxEntityMetadata, parseOpsxSchemaDetail, projectAnnotatedOpenSpecToSpec, projectOpenSpecMarkdown, quoteTerminalShellArg, reactiveExists, reactiveReadDir, reactiveReadFile, reactiveStat, renderTerminalCommandArgs, renderTerminalSpawnCommandLine, resolveHostedAppBaseUrl, resolveRuntimePackageInstallStrategy, resolveTerminalShellDefaults, selectLocalDownloadGroup, shouldShowTranslationEngineInstallGate, sniffGlobalCli, sortMarkdownReadingPlugins, soundIdFromCustomHash, subscribeWatcherRuntimeStatus, terminalNotificationEventToPublishInput, toMarkdownFactKind, toOpsxDisplayPath, toPersistedGlobalSettings, trimMarkdownSlice };
@@ -149,7 +149,7 @@ function buildLocalDownloadPlanFromRuntimeProfileFiles(input) {
149
149
  }
150
150
  function selectLocalDownloadGroup(plan, selectedGroupId) {
151
151
  if (!plan?.groups?.length) return null;
152
- return (selectedGroupId ? plan.groups.find((group) => group.id === selectedGroupId && group.selectable) : void 0) ?? plan.groups.find((group) => group.selected) ?? selectSmallestSelectableGroup(plan.groups);
152
+ return (selectedGroupId ? plan.groups.find((group) => group.selectable && (group.id === selectedGroupId || group.baseGroupId === selectedGroupId)) : void 0) ?? plan.groups.find((group) => group.selected) ?? selectSmallestSelectableGroup(plan.groups);
153
153
  }
154
154
  function buildPlanFromGroups(input) {
155
155
  if (input.groups.length === 0) return null;
@@ -170,7 +170,7 @@ function buildPlanFromGroups(input) {
170
170
  }
171
171
  function selectRequestedGroup(groups, selectedGroupId) {
172
172
  if (!selectedGroupId) return null;
173
- return groups.find((group) => group.id === selectedGroupId && group.selectable) ?? null;
173
+ return groups.find((group) => group.selectable && (group.id === selectedGroupId || group.baseGroupId === selectedGroupId)) ?? null;
174
174
  }
175
175
  function selectSmallestSelectableGroup(groups) {
176
176
  return groups.filter((group) => group.selectable && group.estimatedTotalBytes !== void 0).sort((left, right) => (left.estimatedTotalBytes ?? 0) - (right.estimatedTotalBytes ?? 0))[0] ?? null;
@@ -179,7 +179,11 @@ function createDownloadGroup(input) {
179
179
  const files = dedupeFiles(input.files).map((file) => ({
180
180
  path: file.path,
181
181
  sizeBytes: file.sizeBytes,
182
- required: true
182
+ required: true,
183
+ etag: file.etag,
184
+ revision: file.revision,
185
+ sourceUrl: file.sourceUrl,
186
+ raw: file.raw
183
187
  }));
184
188
  const estimatedTotalBytes = files.reduce((total, file) => total + (file.sizeBytes ?? 0), 0);
185
189
  const hasConcreteSizes = files.length > 0 && files.every((file) => file.sizeBytes !== void 0);
@@ -1,4 +1,4 @@
1
- import { D as TranslationDownloadGroupPlan, z as TranslationModelDownloadPlan } from "./translator-BSPMDjZy.mjs";
1
+ import { H as TranslationDownloadGroupPlan, kt as TranslationModelDownloadPlan } from "./translator-BtbU7rjR.mjs";
2
2
 
3
3
  //#region src/local-download-profiles.d.ts
4
4
  declare const LOCAL_MODEL_PROFILE_DEFINITIONS: readonly [{
@@ -78,6 +78,10 @@ type LocalModelProfileId = (typeof LOCAL_MODEL_PROFILE_DEFINITIONS)[number]['id'
78
78
  interface LocalRepositoryFile {
79
79
  path: string;
80
80
  sizeBytes?: number;
81
+ etag?: string;
82
+ revision?: string;
83
+ sourceUrl?: string;
84
+ raw?: unknown;
81
85
  }
82
86
  interface LocalRuntimeProfileFiles {
83
87
  profile: LocalModelProfileId;
@@ -1,3 +1,3 @@
1
- import "./translator-BSPMDjZy.mjs";
2
- import { a as buildLocalDownloadPlanFromRepositoryFiles, i as LocalRuntimeProfileFiles, n as LocalModelProfileId, o as buildLocalDownloadPlanFromRuntimeProfileFiles, r as LocalRepositoryFile, s as selectLocalDownloadGroup, t as LOCAL_MODEL_PROFILE_DEFINITIONS } from "./local-download-profiles-BdHk_i54.mjs";
1
+ import "./translator-BtbU7rjR.mjs";
2
+ import { a as buildLocalDownloadPlanFromRepositoryFiles, i as LocalRuntimeProfileFiles, n as LocalModelProfileId, o as buildLocalDownloadPlanFromRuntimeProfileFiles, r as LocalRepositoryFile, s as selectLocalDownloadGroup, t as LOCAL_MODEL_PROFILE_DEFINITIONS } from "./local-download-profiles-CSXKbamv.mjs";
3
3
  export { LOCAL_MODEL_PROFILE_DEFINITIONS, LocalModelProfileId, LocalRepositoryFile, LocalRuntimeProfileFiles, buildLocalDownloadPlanFromRepositoryFiles, buildLocalDownloadPlanFromRuntimeProfileFiles, selectLocalDownloadGroup };
@@ -1,3 +1,3 @@
1
- import { i as selectLocalDownloadGroup, n as buildLocalDownloadPlanFromRepositoryFiles, r as buildLocalDownloadPlanFromRuntimeProfileFiles, t as LOCAL_MODEL_PROFILE_DEFINITIONS } from "./local-download-profiles-BppI_PAq.mjs";
1
+ import { i as selectLocalDownloadGroup, n as buildLocalDownloadPlanFromRepositoryFiles, r as buildLocalDownloadPlanFromRuntimeProfileFiles, t as LOCAL_MODEL_PROFILE_DEFINITIONS } from "./local-download-profiles-CNDtMG2s.mjs";
2
2
 
3
3
  export { LOCAL_MODEL_PROFILE_DEFINITIONS, buildLocalDownloadPlanFromRepositoryFiles, buildLocalDownloadPlanFromRuntimeProfileFiles, selectLocalDownloadGroup };
@@ -1,2 +1,2 @@
1
- import { a as MarkdownSourceRange, i as MarkdownSourcePoint, n as MarkdownFactKind, o as parseMarkdownFacts, r as MarkdownFactsDocument, s as toMarkdownFactKind, t as MarkdownFact } from "./markdown-facts-DUsbNcjh.mjs";
1
+ import { a as MarkdownSourceRange, i as MarkdownSourcePoint, n as MarkdownFactKind, o as parseMarkdownFacts, r as MarkdownFactsDocument, s as toMarkdownFactKind, t as MarkdownFact } from "./markdown-facts-DempqdIX.mjs";
2
2
  export { MarkdownFact, MarkdownFactKind, MarkdownFactsDocument, MarkdownSourcePoint, MarkdownSourceRange, parseMarkdownFacts, toMarkdownFactKind };