@openspecui/core 3.7.0 → 3.7.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 (30) hide show
  1. package/dist/document-translation-CvUxMOPl.mjs +44 -0
  2. package/dist/document-translation-D_ryOn9u.d.mts +140 -0
  3. package/dist/document-translation.d.mts +2 -2
  4. package/dist/document-translation.mjs +2 -2
  5. package/dist/hosted-app-BqJw9WgW.d.mts +43 -0
  6. package/dist/{hosted-app-Bl5W6LWQ.mjs → hosted-app-Du65UHRo.mjs} +24 -3
  7. package/dist/hosted-app.d.mts +2 -2
  8. package/dist/hosted-app.mjs +2 -2
  9. package/dist/index.d.mts +70 -22
  10. package/dist/index.mjs +98 -17
  11. package/dist/{notifications-CbKmEdCU.d.mts → notifications-C9NFber0.d.mts} +9 -9
  12. package/dist/notifications.d.mts +2 -2
  13. package/dist/{openspec-projection-Co3CUAHe.d.mts → openspec-projection-Cv9_trD5.d.mts} +1 -1
  14. package/dist/openspec-projection.d.mts +2 -2
  15. package/dist/{opsx-entity-Cz89hbt3.d.mts → opsx-entity-FVK74l1t.d.mts} +13 -13
  16. package/dist/opsx-entity.d.mts +2 -2
  17. package/dist/{opsx-schema-detail-CuDl2xjZ.d.mts → opsx-schema-detail-COXlZ7Gm.d.mts} +1 -1
  18. package/dist/opsx-schema-detail.d.mts +3 -3
  19. package/dist/{schemas-q7tGvvxx.d.mts → schemas-CFIuaIAS.d.mts} +66 -66
  20. package/dist/{sounds-BORGLPIt.d.mts → sounds-Dz-aToh_.d.mts} +4 -4
  21. package/dist/sounds.d.mts +1 -1
  22. package/dist/{terminal-audio-Dmi6lR7o.d.mts → terminal-audio-Btx-il9w.d.mts} +1 -1
  23. package/dist/terminal-audio.d.mts +2 -2
  24. package/dist/terminal-control.d.mts +2 -2
  25. package/dist/{terminal-invocation-C733ofmf.d.mts → terminal-invocation-42mkV55p.d.mts} +90 -90
  26. package/dist/terminal-invocation.d.mts +1 -1
  27. package/package.json +37 -1
  28. package/dist/document-translation-CEI09yZe.mjs +0 -13
  29. package/dist/document-translation-CuCbRCNb.d.mts +0 -22
  30. package/dist/hosted-app-DHrXW3jc.d.mts +0 -31
package/dist/index.mjs CHANGED
@@ -3,20 +3,20 @@ import { n as toMarkdownFactKind, t as parseMarkdownFacts } from "./markdown-fac
3
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-CsL1q84q.mjs";
4
4
  import { a as getOpenSpecAnnotationsForFact, i as getOpenSpecAnnotation, n as annotateOpenSpecMarkdown, o as openSpecAnnotationRules, r as builtinOpenSpecReadingPlugin, t as annotateOpenSpecFacts } from "./openspec-annotations-D_xQqQOB.mjs";
5
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-DLGD1JFD.mjs";
6
- import { n as DocumentTranslationConfigSchema, r as DocumentTranslationDisplayModeSchema, t as DOCUMENT_TRANSLATION_DISPLAY_MODES } from "./document-translation-CEI09yZe.mjs";
6
+ 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, r as DocumentTranslationConfigSchema, s as TRANSLATION_CACHE_POLICY_VERSION, t as DEFAULT_TRANSLATION_CACHE_ENTRY_LIMIT, u as TranslationCacheSettingsSchema } from "./document-translation-CvUxMOPl.mjs";
7
7
  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-Ctm3QEtf.mjs";
8
8
  import { n as terminalNotificationEventToPublishInput, t as TerminalControlParser } from "./terminal-control-CMkG-o9C.mjs";
9
9
  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-DXOoOJ3m.mjs";
10
10
  import { n as TERMINAL_BELL_SOUND_VALUES, r as TerminalBellSoundSchema, t as TERMINAL_BELL_SOUND_OPTIONS } from "./terminal-audio-BiQ9qJJW.mjs";
11
11
  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-BOGPIiVm.mjs";
12
- import { a as isHostedBackendHealthResponse, c as normalizeHostedAppBaseUrl, i as buildHostedLaunchUrl, l as resolveHostedAppBaseUrl, n as OFFICIAL_APP_BASE_URL, o as isSupportedEmbeddedUiUrl, r as buildEmbeddedUiLaunchUrl, s as normalizeEmbeddedUiUrl, t as HOSTED_SHELL_PROTOCOL_VERSION } from "./hosted-app-Bl5W6LWQ.mjs";
12
+ 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-Du65UHRo.mjs";
13
13
  import { n as toOpsxDisplayPath, t as VIRTUAL_PROJECT_DIRNAME } from "./opsx-display-path-BHEPZsJx.mjs";
14
14
  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-CX1LDM89.mjs";
15
15
  import { t as parseOpsxSchemaDetail } from "./opsx-schema-detail-Bh-aNaSk.mjs";
16
16
  import { mkdir, readFile, rename, writeFile } from "fs/promises";
17
17
  import { dirname, join } from "path";
18
18
  import { AsyncLocalStorage } from "node:async_hooks";
19
- import { readFile as readFile$1, readdir, stat } from "node:fs/promises";
19
+ import { mkdir as mkdir$1, readFile as readFile$1, readdir, stat, writeFile as writeFile$1 } from "node:fs/promises";
20
20
  import { dirname as dirname$1, join as join$1, matchesGlob, relative, resolve, sep } from "node:path";
21
21
  import { existsSync, lstatSync, realpathSync } from "node:fs";
22
22
  import { z } from "zod";
@@ -2549,19 +2549,19 @@ function areStringArraysEqual(left, right) {
2549
2549
  if (left.length !== right.length) return false;
2550
2550
  return left.every((value, index) => value === right[index]);
2551
2551
  }
2552
- function pruneNullish(value) {
2552
+ function pruneNullish$1(value) {
2553
2553
  if (value === null || value === void 0) return;
2554
- if (Array.isArray(value)) return value.map((entry) => pruneNullish(entry)).filter((entry) => entry !== void 0);
2554
+ if (Array.isArray(value)) return value.map((entry) => pruneNullish$1(entry)).filter((entry) => entry !== void 0);
2555
2555
  if (typeof value === "object") {
2556
2556
  const normalizedEntries = Object.entries(value).flatMap(([key, entryValue]) => {
2557
- const nextValue = pruneNullish(entryValue);
2557
+ const nextValue = pruneNullish$1(entryValue);
2558
2558
  return nextValue === void 0 ? [] : [[key, nextValue]];
2559
2559
  });
2560
2560
  return Object.fromEntries(normalizedEntries);
2561
2561
  }
2562
2562
  return value;
2563
2563
  }
2564
- function hasOwnEntries(value) {
2564
+ function hasOwnEntries$1(value) {
2565
2565
  return Object.keys(value).length > 0;
2566
2566
  }
2567
2567
  function toPersistedConfig(config, options = {}) {
@@ -2579,11 +2579,11 @@ function toPersistedConfig(config, options = {}) {
2579
2579
  if (config.theme !== DEFAULT_CONFIG.theme) persisted.theme = config.theme;
2580
2580
  const codeEditor = {};
2581
2581
  if (config.codeEditor.theme !== DEFAULT_CONFIG.codeEditor.theme) codeEditor.theme = config.codeEditor.theme;
2582
- if (hasOwnEntries(codeEditor)) persisted.codeEditor = codeEditor;
2582
+ if (hasOwnEntries$1(codeEditor)) persisted.codeEditor = codeEditor;
2583
2583
  if (config.appBaseUrl !== DEFAULT_CONFIG.appBaseUrl) persisted.appBaseUrl = config.appBaseUrl;
2584
2584
  const opsx = {};
2585
2585
  if (config.opsx.agentInvocationMode !== DEFAULT_CONFIG.opsx.agentInvocationMode) opsx.agentInvocationMode = config.opsx.agentInvocationMode;
2586
- if (hasOwnEntries(opsx)) persisted.opsx = opsx;
2586
+ if (hasOwnEntries$1(opsx)) persisted.opsx = opsx;
2587
2587
  const terminal = {};
2588
2588
  if (config.terminal.fontSize !== DEFAULT_CONFIG.terminal.fontSize) terminal.fontSize = config.terminal.fontSize;
2589
2589
  if (config.terminal.fontFamily !== DEFAULT_CONFIG.terminal.fontFamily) terminal.fontFamily = config.terminal.fontFamily;
@@ -2596,27 +2596,28 @@ function toPersistedConfig(config, options = {}) {
2596
2596
  if (config.terminal.rendererEngine !== DEFAULT_CONFIG.terminal.rendererEngine) terminal.rendererEngine = config.terminal.rendererEngine;
2597
2597
  if (config.terminal.bellSound !== DEFAULT_CONFIG.terminal.bellSound) terminal.bellSound = config.terminal.bellSound;
2598
2598
  if (config.terminal.bellVolume !== DEFAULT_CONFIG.terminal.bellVolume) terminal.bellVolume = config.terminal.bellVolume;
2599
- if (hasOwnEntries(terminal)) persisted.terminal = terminal;
2599
+ if (hasOwnEntries$1(terminal)) persisted.terminal = terminal;
2600
2600
  const dashboard = {};
2601
2601
  if (config.dashboard.trendPointLimit !== DEFAULT_CONFIG.dashboard.trendPointLimit) dashboard.trendPointLimit = config.dashboard.trendPointLimit;
2602
- if (hasOwnEntries(dashboard)) persisted.dashboard = dashboard;
2602
+ if (hasOwnEntries$1(dashboard)) persisted.dashboard = dashboard;
2603
2603
  const git = {};
2604
2604
  if (config.git.diffEagerLineBudget !== DEFAULT_CONFIG.git.diffEagerLineBudget) git.diffEagerLineBudget = config.git.diffEagerLineBudget;
2605
- if (hasOwnEntries(git)) persisted.git = git;
2605
+ if (hasOwnEntries$1(git)) persisted.git = git;
2606
2606
  const notifications = {};
2607
2607
  if (config.notifications.sound !== DEFAULT_CONFIG.notifications.sound) notifications.sound = config.notifications.sound;
2608
2608
  if (config.notifications.volume !== DEFAULT_CONFIG.notifications.volume) notifications.volume = config.notifications.volume;
2609
2609
  if (config.notifications.systemNotificationsEnabled !== DEFAULT_CONFIG.notifications.systemNotificationsEnabled) notifications.systemNotificationsEnabled = config.notifications.systemNotificationsEnabled;
2610
- if (hasOwnEntries(notifications)) persisted.notifications = notifications;
2610
+ if (hasOwnEntries$1(notifications)) persisted.notifications = notifications;
2611
2611
  const translation = {};
2612
2612
  if (config.translation.enabled !== DEFAULT_CONFIG.translation.enabled) translation.enabled = config.translation.enabled;
2613
2613
  if (config.translation.targetLanguage !== DEFAULT_CONFIG.translation.targetLanguage) translation.targetLanguage = config.translation.targetLanguage;
2614
2614
  if (config.translation.displayMode !== DEFAULT_CONFIG.translation.displayMode) translation.displayMode = config.translation.displayMode;
2615
- if (hasOwnEntries(translation)) persisted.translation = translation;
2615
+ if (config.translation.cacheEnabled !== DEFAULT_CONFIG.translation.cacheEnabled) translation.cacheEnabled = config.translation.cacheEnabled;
2616
+ if (hasOwnEntries$1(translation)) persisted.translation = translation;
2616
2617
  return persisted;
2617
2618
  }
2618
2619
  function isPersistedConfigEmpty(config) {
2619
- return !hasOwnEntries(config);
2620
+ return !hasOwnEntries$1(config);
2620
2621
  }
2621
2622
  /**
2622
2623
  * 配置管理器
@@ -2639,7 +2640,7 @@ var ConfigManager = class {
2639
2640
  parseConfigContent(content) {
2640
2641
  if (!content) return DEFAULT_CONFIG;
2641
2642
  try {
2642
- const normalized = pruneNullish(JSON.parse(content)) ?? {};
2643
+ const normalized = pruneNullish$1(JSON.parse(content)) ?? {};
2643
2644
  const result = OpenSpecUIConfigSchema.safeParse(normalized);
2644
2645
  if (result.success) return result.data;
2645
2646
  console.warn("Invalid config format, using defaults:", result.error.message);
@@ -2839,6 +2840,86 @@ var ConfigManager = class {
2839
2840
  }
2840
2841
  };
2841
2842
 
2843
+ //#endregion
2844
+ //#region src/global-settings.ts
2845
+ const OpenSpecUIGlobalSettingsSchema = z.object({ translationCache: TranslationCacheSettingsSchema.default(TranslationCacheSettingsSchema.parse({})) });
2846
+ const DEFAULT_GLOBAL_SETTINGS = OpenSpecUIGlobalSettingsSchema.parse({});
2847
+ function getDefaultGlobalSettingsPath() {
2848
+ return join$1(homedir(), ".openspecui", "settings.json");
2849
+ }
2850
+ function pruneNullish(value) {
2851
+ if (value === null || value === void 0) return void 0;
2852
+ if (Array.isArray(value)) return value.map((entry) => pruneNullish(entry)).filter((entry) => entry !== void 0);
2853
+ if (typeof value === "object") return Object.fromEntries(Object.entries(value).flatMap(([key, entryValue]) => {
2854
+ const nextValue = pruneNullish(entryValue);
2855
+ return nextValue === void 0 ? [] : [[key, nextValue]];
2856
+ }));
2857
+ return value;
2858
+ }
2859
+ function hasOwnEntries(value) {
2860
+ return Object.keys(value).length > 0;
2861
+ }
2862
+ function toPersistedGlobalSettings(settings) {
2863
+ const persisted = {};
2864
+ const translationCache = {};
2865
+ if (settings.translationCache.entryLimit !== DEFAULT_GLOBAL_SETTINGS.translationCache.entryLimit) translationCache.entryLimit = settings.translationCache.entryLimit;
2866
+ if (hasOwnEntries(translationCache)) persisted.translationCache = translationCache;
2867
+ return persisted;
2868
+ }
2869
+ function isPersistedGlobalSettingsEmpty(settings) {
2870
+ return !hasOwnEntries(settings);
2871
+ }
2872
+ /**
2873
+ * User-level OpenSpecUI settings stored outside project worktrees.
2874
+ *
2875
+ * This manager owns cross-project policy only; project opt-in remains in
2876
+ * `openspec/.openspecui.json`.
2877
+ */
2878
+ var GlobalSettingsManager = class {
2879
+ settingsPath;
2880
+ constructor(settingsPath = getDefaultGlobalSettingsPath()) {
2881
+ this.settingsPath = settingsPath;
2882
+ }
2883
+ getSettingsPath() {
2884
+ return this.settingsPath;
2885
+ }
2886
+ parseSettingsContent(content) {
2887
+ if (!content) return DEFAULT_GLOBAL_SETTINGS;
2888
+ try {
2889
+ const normalized = pruneNullish(JSON.parse(content)) ?? {};
2890
+ const result = OpenSpecUIGlobalSettingsSchema.safeParse(normalized);
2891
+ if (result.success) return result.data;
2892
+ console.warn("Invalid global settings format, using defaults:", result.error.message);
2893
+ return DEFAULT_GLOBAL_SETTINGS;
2894
+ } catch (error) {
2895
+ console.warn("Failed to parse global settings, using defaults:", error);
2896
+ return DEFAULT_GLOBAL_SETTINGS;
2897
+ }
2898
+ }
2899
+ async readSettings() {
2900
+ const content = await reactiveReadFile(this.settingsPath);
2901
+ return this.parseSettingsContent(content);
2902
+ }
2903
+ async writeSettings(update) {
2904
+ const currentContent = await reactiveReadFile(this.settingsPath);
2905
+ const fileExists = currentContent !== null;
2906
+ const current = this.parseSettingsContent(currentContent);
2907
+ const persisted = toPersistedGlobalSettings(OpenSpecUIGlobalSettingsSchema.parse({
2908
+ ...current,
2909
+ translationCache: {
2910
+ ...current.translationCache,
2911
+ ...update.translationCache
2912
+ }
2913
+ }));
2914
+ if (isPersistedGlobalSettingsEmpty(persisted) && !fileExists) return;
2915
+ const serialized = isPersistedGlobalSettingsEmpty(persisted) ? "{}" : JSON.stringify(persisted, null, 2);
2916
+ if (currentContent === serialized) return;
2917
+ await mkdir$1(dirname$1(this.settingsPath), { recursive: true });
2918
+ await writeFile$1(this.settingsPath, serialized, "utf-8");
2919
+ updateReactiveFileCache(this.settingsPath, serialized);
2920
+ }
2921
+ };
2922
+
2842
2923
  //#endregion
2843
2924
  //#region src/cli-executor.ts
2844
2925
  /**
@@ -4675,4 +4756,4 @@ const PtyServerMessageSchema = z.discriminatedUnion("type", [
4675
4756
  ]);
4676
4757
 
4677
4758
  //#endregion
4678
- export { AI_TOOLS, ApplyInstructionsContextFilesSchema, ApplyInstructionsSchema, ApplyTaskSchema, ArtifactInstructionsSchema, ArtifactStatusSchema, BUILTIN_SOUND_IDS, BUILTIN_SOUND_OPTIONS, BUILTIN_TERMINAL_SPAWN_COMMANDS, 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_NOTIFICATION_SOUND_ID, DEFAULT_TERMINAL_DARK_THEME, DEFAULT_TERMINAL_LIGHT_THEME, DEFAULT_TERMINAL_THEME_MODE, DOCUMENT_TRANSLATION_DISPLAY_MODES, DashboardConfigSchema, DeltaOperationType, DeltaSchema, DeltaSpecSchema, DependencyInfoSchema, DocumentTranslationConfigSchema, DocumentTranslationDisplayModeSchema, GitConfigSchema, HOSTED_SHELL_PROTOCOL_VERSION, LEGACY_SOUND_ID_MAP, MarkdownParser, MarkdownReadingPluginRegistry, NOTIFICATION_SOUND_OPTIONS, NOTIFICATION_SOUND_VALUES, NotificationActionSchema, NotificationGroupKeySchema, NotificationPublishInputSchema, NotificationRecordSchema, NotificationSettingsSchema, NotificationSoundSchema, NotificationSourceSchema, OFFICIAL_APP_BASE_URL, OPENSPECUI_HOOKS_VERSION, OPEN_SPEC_READING_SECTIONS_PROJECTION_ID, OPEN_SPEC_SPEC_PROJECTION_ID, OPSX_AGENT_INVOCATION_MODE_VALUES, OpenSpecAdapter, OpenSpecUIConfigSchema, 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, SILENT_SOUND_ID, ScenarioStepKeywordSchema, ScenarioStepSchema, SchemaArtifactSchema, SchemaDetailSchema, SchemaInfoSchema, SchemaResolutionSchema, 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, TaskSchema, TemplatesSchema, TerminalBellSoundSchema, TerminalCommandFieldSchema, TerminalConfigSchema, TerminalControlParser, TerminalInvocationSettingsSchema, TerminalNotificationParser, TerminalRendererEngineSchema, TerminalShellProfileSchema, TerminalShellQuoteStyleSchema, TerminalSpawnCommandSchema, TerminalThemeModeSchema, TerminalThemeSchema, VIRTUAL_PROJECT_DIRNAME, Validator, acquireWatcher, annotateOpenSpecFacts, annotateOpenSpecMarkdown, buildCliRunnerCandidates, buildEmbeddedUiLaunchUrl, buildHostedLaunchUrl, buildMarkdownParentMap, buildOpsxEntityDetail, builtinOpenSpecReadingPlugin, clearCache, closeAllProjectWatchers, closeAllWatchers, contextStorage, createCleanCliEnv, createFileChangeObservable, createMarkdownReadingDocument, createMarkdownReadingDocumentFromFacts, createOpenSpecReadingPlugin, customHashFromSoundId, getActiveWatcherCount, getAllToolIds, getAllTools, getAvailableToolIds, getAvailableTools, getBuiltinSoundUrl, getCacheSize, getConfiguredTools, getDefaultCliCommand, getDefaultCliCommandString, getDetectedProjectTools, getMarkdownAnnotation, getMarkdownAnnotationsForFact, getMarkdownFactSpan, getMarkdownHeadingEnd, getMarkdownHeadingFacts, getNotificationGroupKey, getNotificationGroupLabel, getOpenSpecAnnotation, getOpenSpecAnnotationsForFact, getOpenSpecProjectionAnnotation, getOpenSpecReadingSections, getOpsxEntityMetadataPath, getOpsxEntityRootRelativePath, getProjectWatcher, getTerminalCommandDefaultValues, getToolById, getToolInitStates, getWatchedProjectDir, getWatcherRuntimeStatus, groupNotifications, initWatcherPool, isGlobPattern, isHostedBackendHealthResponse, isOpsxGlobPattern, isSupportedEmbeddedUiUrl, isTerminalRendererEngine, 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, sniffGlobalCli, sortMarkdownReadingPlugins, soundIdFromCustomHash, subscribeWatcherRuntimeStatus, terminalNotificationEventToPublishInput, toMarkdownFactKind, toOpsxDisplayPath, trimMarkdownSlice };
4759
+ export { AI_TOOLS, ApplyInstructionsContextFilesSchema, ApplyInstructionsSchema, ApplyTaskSchema, ArtifactInstructionsSchema, ArtifactStatusSchema, BUILTIN_SOUND_IDS, BUILTIN_SOUND_OPTIONS, BUILTIN_TERMINAL_SPAWN_COMMANDS, 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, DOCUMENT_TRANSLATION_DISPLAY_MODES, DashboardConfigSchema, DeltaOperationType, DeltaSchema, DeltaSpecSchema, DependencyInfoSchema, DocumentTranslationConfigSchema, DocumentTranslationDisplayModeSchema, GitConfigSchema, GlobalSettingsManager, HOSTED_SHELL_PROTOCOL_VERSION, LEGACY_SOUND_ID_MAP, 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, SILENT_SOUND_ID, ScenarioStepKeywordSchema, ScenarioStepSchema, SchemaArtifactSchema, SchemaDetailSchema, SchemaInfoSchema, SchemaResolutionSchema, 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, TaskSchema, TemplatesSchema, TerminalBellSoundSchema, TerminalCommandFieldSchema, TerminalConfigSchema, TerminalControlParser, TerminalInvocationSettingsSchema, TerminalNotificationParser, TerminalRendererEngineSchema, TerminalShellProfileSchema, TerminalShellQuoteStyleSchema, TerminalSpawnCommandSchema, TerminalThemeModeSchema, TerminalThemeSchema, TranslationCacheEntrySchema, TranslationCacheReadInputSchema, TranslationCacheSettingsSchema, TranslationCacheStatsSchema, TranslationCacheWriteInputSchema, VIRTUAL_PROJECT_DIRNAME, Validator, acquireWatcher, annotateOpenSpecFacts, annotateOpenSpecMarkdown, buildBackendHealthPayload, buildCliRunnerCandidates, buildEmbeddedUiLaunchUrl, buildHostedLaunchUrl, 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, getWatchedProjectDir, getWatcherRuntimeStatus, groupNotifications, initWatcherPool, isBackendHealthRuntimeMetadata, isGlobPattern, isHostedBackendHealthResponse, isOpsxGlobPattern, isSupportedEmbeddedUiUrl, isTerminalRendererEngine, 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, sniffGlobalCli, sortMarkdownReadingPlugins, soundIdFromCustomHash, subscribeWatcherRuntimeStatus, terminalNotificationEventToPublishInput, toMarkdownFactKind, toOpsxDisplayPath, toPersistedGlobalSettings, trimMarkdownSlice };
@@ -1,4 +1,4 @@
1
- import { x as SoundId } from "./sounds-BORGLPIt.mjs";
1
+ import { x as SoundId } from "./sounds-Dz-aToh_.mjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/terminal-control.d.ts
@@ -272,8 +272,6 @@ declare const NotificationPublishInputSchema: z.ZodObject<{
272
272
  level: z.ZodDefault<z.ZodEnum<["info", "success", "warning", "error"]>>;
273
273
  createdAt: z.ZodOptional<z.ZodNumber>;
274
274
  }, "strip", z.ZodTypeAny, {
275
- title: string;
276
- body: string;
277
275
  source: {
278
276
  type: "terminal";
279
277
  sessionId: string;
@@ -291,6 +289,8 @@ declare const NotificationPublishInputSchema: z.ZodObject<{
291
289
  groupId: string;
292
290
  title?: string | undefined;
293
291
  };
292
+ title: string;
293
+ body: string;
294
294
  actions: ({
295
295
  type: "terminal.focus";
296
296
  label: string;
@@ -307,7 +307,6 @@ declare const NotificationPublishInputSchema: z.ZodObject<{
307
307
  level: "info" | "success" | "warning" | "error";
308
308
  createdAt?: number | undefined;
309
309
  }, {
310
- title: string;
311
310
  source: {
312
311
  type: "terminal";
313
312
  sessionId: string;
@@ -325,6 +324,7 @@ declare const NotificationPublishInputSchema: z.ZodObject<{
325
324
  groupId: string;
326
325
  title?: string | undefined;
327
326
  };
327
+ title: string;
328
328
  body?: string | undefined;
329
329
  actions?: ({
330
330
  type: "terminal.focus";
@@ -446,8 +446,7 @@ declare const NotificationRecordSchema: z.ZodObject<{
446
446
  createdAt: z.ZodNumber;
447
447
  groupKey: z.ZodString;
448
448
  }, "strip", z.ZodTypeAny, {
449
- title: string;
450
- body: string;
449
+ id: string;
451
450
  source: {
452
451
  type: "terminal";
453
452
  sessionId: string;
@@ -465,6 +464,8 @@ declare const NotificationRecordSchema: z.ZodObject<{
465
464
  groupId: string;
466
465
  title?: string | undefined;
467
466
  };
467
+ title: string;
468
+ body: string;
468
469
  actions: ({
469
470
  type: "terminal.focus";
470
471
  label: string;
@@ -480,10 +481,9 @@ declare const NotificationRecordSchema: z.ZodObject<{
480
481
  })[];
481
482
  level: "info" | "success" | "warning" | "error";
482
483
  createdAt: number;
483
- id: string;
484
484
  groupKey: string;
485
485
  }, {
486
- title: string;
486
+ id: string;
487
487
  source: {
488
488
  type: "terminal";
489
489
  sessionId: string;
@@ -501,8 +501,8 @@ declare const NotificationRecordSchema: z.ZodObject<{
501
501
  groupId: string;
502
502
  title?: string | undefined;
503
503
  };
504
+ title: string;
504
505
  createdAt: number;
505
- id: string;
506
506
  groupKey: string;
507
507
  body?: string | undefined;
508
508
  actions?: ({
@@ -1,3 +1,3 @@
1
- import "./sounds-BORGLPIt.mjs";
2
- import { C as getNotificationAggregateKey, E as groupNotifications, P as terminalNotificationEventToPublishInput, S as aggregateNotifications, T as getNotificationGroupLabel, _ as NotificationSource, a as NotificationAggregate, b as TerminalNotificationParseResult, c as NotificationGroupKeySchema, d as NotificationRecord, f as NotificationRecordSchema, g as NotificationSoundSchema, h as NotificationSound, i as NotificationActionSchema, k as TerminalControlParser, l as NotificationPublishInput, m as NotificationSettingsSchema, n as NOTIFICATION_SOUND_VALUES, o as NotificationGroup, p as NotificationSettings, r as NotificationAction, s as NotificationGroupKey, t as NOTIFICATION_SOUND_OPTIONS, u as NotificationPublishInputSchema, v as NotificationSourceSchema, w as getNotificationGroupKey, x as TerminalNotificationParser, y as TerminalNotificationEvent } from "./notifications-CbKmEdCU.mjs";
1
+ import "./sounds-Dz-aToh_.mjs";
2
+ import { C as getNotificationAggregateKey, E as groupNotifications, P as terminalNotificationEventToPublishInput, S as aggregateNotifications, T as getNotificationGroupLabel, _ as NotificationSource, a as NotificationAggregate, b as TerminalNotificationParseResult, c as NotificationGroupKeySchema, d as NotificationRecord, f as NotificationRecordSchema, g as NotificationSoundSchema, h as NotificationSound, i as NotificationActionSchema, k as TerminalControlParser, l as NotificationPublishInput, m as NotificationSettingsSchema, n as NOTIFICATION_SOUND_VALUES, o as NotificationGroup, p as NotificationSettings, r as NotificationAction, s as NotificationGroupKey, t as NOTIFICATION_SOUND_OPTIONS, u as NotificationPublishInputSchema, v as NotificationSourceSchema, w as getNotificationGroupKey, x as TerminalNotificationParser, y as TerminalNotificationEvent } from "./notifications-C9NFber0.mjs";
3
3
  export { NOTIFICATION_SOUND_OPTIONS, NOTIFICATION_SOUND_VALUES, NotificationAction, NotificationActionSchema, NotificationAggregate, NotificationGroup, NotificationGroupKey, NotificationGroupKeySchema, NotificationPublishInput, NotificationPublishInputSchema, NotificationRecord, NotificationRecordSchema, NotificationSettings, NotificationSettingsSchema, NotificationSound, NotificationSoundSchema, NotificationSource, NotificationSourceSchema, TerminalControlParser, TerminalNotificationEvent, TerminalNotificationParseResult, TerminalNotificationParser, aggregateNotifications, getNotificationAggregateKey, getNotificationGroupKey, getNotificationGroupLabel, groupNotifications, terminalNotificationEventToPublishInput };
@@ -1,4 +1,4 @@
1
- import { g as Spec } from "./schemas-q7tGvvxx.mjs";
1
+ import { g as Spec } from "./schemas-CFIuaIAS.mjs";
2
2
  import { d as MarkdownReadingPlugin, l as MarkdownReadingDocument } from "./markdown-reading-BC6uFgx0.mjs";
3
3
  import { n as OpenSpecAnnotation, t as AnnotatedOpenSpecDocument } from "./openspec-annotations-DKP1Uuho.mjs";
4
4
 
@@ -1,6 +1,6 @@
1
- import "./schemas-q7tGvvxx.mjs";
1
+ import "./schemas-CFIuaIAS.mjs";
2
2
  import "./markdown-facts-DxElzSsp.mjs";
3
3
  import "./markdown-reading-BC6uFgx0.mjs";
4
4
  import "./openspec-annotations-DKP1Uuho.mjs";
5
- import { a as OpenSpecReadingSectionsProjection, c as ProjectedOpenSpecDocument, d as getOpenSpecReadingSections, f as parseOpenSpecMarkdownToSpec, i as OpenSpecProjectionOptions, l as createOpenSpecReadingPlugin, m as projectOpenSpecMarkdown, n as OPEN_SPEC_SPEC_PROJECTION_ID, o as OpenSpecRequirementBlock, p as projectAnnotatedOpenSpecToSpec, r as OpenSpecHeadingSection, s as OpenSpecScenarioBlock, t as OPEN_SPEC_READING_SECTIONS_PROJECTION_ID, u as getOpenSpecProjectionAnnotation } from "./openspec-projection-Co3CUAHe.mjs";
5
+ import { a as OpenSpecReadingSectionsProjection, c as ProjectedOpenSpecDocument, d as getOpenSpecReadingSections, f as parseOpenSpecMarkdownToSpec, i as OpenSpecProjectionOptions, l as createOpenSpecReadingPlugin, m as projectOpenSpecMarkdown, n as OPEN_SPEC_SPEC_PROJECTION_ID, o as OpenSpecRequirementBlock, p as projectAnnotatedOpenSpecToSpec, r as OpenSpecHeadingSection, s as OpenSpecScenarioBlock, t as OPEN_SPEC_READING_SECTIONS_PROJECTION_ID, u as getOpenSpecProjectionAnnotation } from "./openspec-projection-Cv9_trD5.mjs";
6
6
  export { OPEN_SPEC_READING_SECTIONS_PROJECTION_ID, OPEN_SPEC_SPEC_PROJECTION_ID, OpenSpecHeadingSection, OpenSpecProjectionOptions, OpenSpecReadingSectionsProjection, OpenSpecRequirementBlock, OpenSpecScenarioBlock, ProjectedOpenSpecDocument, createOpenSpecReadingPlugin, getOpenSpecProjectionAnnotation, getOpenSpecReadingSections, parseOpenSpecMarkdownToSpec, projectAnnotatedOpenSpecToSpec, projectOpenSpecMarkdown };
@@ -1,4 +1,4 @@
1
- import { n as ChangeFile } from "./schemas-q7tGvvxx.mjs";
1
+ import { n as ChangeFile } from "./schemas-CFIuaIAS.mjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/opsx-types.d.ts
@@ -141,39 +141,39 @@ declare const ApplyInstructionsSchema: z.ZodObject<{
141
141
  missingArtifacts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
142
142
  instruction: z.ZodString;
143
143
  }, "strip", z.ZodTypeAny, {
144
- progress: {
145
- total: number;
146
- complete: number;
147
- remaining: number;
148
- };
149
- state: "ready" | "blocked" | "all_done";
150
144
  tasks: {
151
145
  id: string;
152
146
  description: string;
153
147
  done: boolean;
154
148
  }[];
149
+ progress: {
150
+ total: number;
151
+ complete: number;
152
+ remaining: number;
153
+ };
155
154
  changeName: string;
156
155
  schemaName: string;
157
156
  changeDir: string;
158
157
  contextFiles: Record<string, string[]>;
158
+ state: "ready" | "blocked" | "all_done";
159
159
  instruction: string;
160
160
  missingArtifacts?: string[] | undefined;
161
161
  }, {
162
- progress: {
163
- total: number;
164
- complete: number;
165
- remaining: number;
166
- };
167
- state: "ready" | "blocked" | "all_done";
168
162
  tasks: {
169
163
  id: string;
170
164
  description: string;
171
165
  done: boolean;
172
166
  }[];
167
+ progress: {
168
+ total: number;
169
+ complete: number;
170
+ remaining: number;
171
+ };
173
172
  changeName: string;
174
173
  schemaName: string;
175
174
  changeDir: string;
176
175
  contextFiles: Record<string, string | string[]>;
176
+ state: "ready" | "blocked" | "all_done";
177
177
  instruction: string;
178
178
  missingArtifacts?: string[] | undefined;
179
179
  }>;
@@ -1,3 +1,3 @@
1
- import { a as OpsxEntityFile, c as buildOpsxEntityDetail, d as isOpsxGlobPattern, f as normalizeOpsxEntityPath, h as parseOpsxEntityMetadata, i as OpsxEntityDiagnostic, l as getOpsxEntityMetadataPath, m as opsxPathMatchesPattern, n as OpsxEntityArtifactFile, o as OpsxEntityReadOptions, p as opsxGlobToRegex, r as OpsxEntityDetail, s as OpsxEntityStage, t as OpsxEntityArtifact, u as getOpsxEntityRootRelativePath } from "./opsx-entity-Cz89hbt3.mjs";
2
- import "./schemas-q7tGvvxx.mjs";
1
+ import { a as OpsxEntityFile, c as buildOpsxEntityDetail, d as isOpsxGlobPattern, f as normalizeOpsxEntityPath, h as parseOpsxEntityMetadata, i as OpsxEntityDiagnostic, l as getOpsxEntityMetadataPath, m as opsxPathMatchesPattern, n as OpsxEntityArtifactFile, o as OpsxEntityReadOptions, p as opsxGlobToRegex, r as OpsxEntityDetail, s as OpsxEntityStage, t as OpsxEntityArtifact, u as getOpsxEntityRootRelativePath } from "./opsx-entity-FVK74l1t.mjs";
2
+ import "./schemas-CFIuaIAS.mjs";
3
3
  export { OpsxEntityArtifact, OpsxEntityArtifactFile, OpsxEntityDetail, OpsxEntityDiagnostic, OpsxEntityFile, OpsxEntityReadOptions, OpsxEntityStage, buildOpsxEntityDetail, getOpsxEntityMetadataPath, getOpsxEntityRootRelativePath, isOpsxGlobPattern, normalizeOpsxEntityPath, opsxGlobToRegex, opsxPathMatchesPattern, parseOpsxEntityMetadata };
@@ -1,4 +1,4 @@
1
- import { i as OpsxEntityDiagnostic, j as SchemaDetail } from "./opsx-entity-Cz89hbt3.mjs";
1
+ import { i as OpsxEntityDiagnostic, j as SchemaDetail } from "./opsx-entity-FVK74l1t.mjs";
2
2
 
3
3
  //#region src/opsx-schema-detail.d.ts
4
4
  interface ParsedOpsxSchemaDetail {
@@ -1,4 +1,4 @@
1
- import "./opsx-entity-Cz89hbt3.mjs";
2
- import "./schemas-q7tGvvxx.mjs";
3
- import { n as parseOpsxSchemaDetail, t as ParsedOpsxSchemaDetail } from "./opsx-schema-detail-CuDl2xjZ.mjs";
1
+ import "./opsx-entity-FVK74l1t.mjs";
2
+ import "./schemas-CFIuaIAS.mjs";
3
+ import { n as parseOpsxSchemaDetail, t as ParsedOpsxSchemaDetail } from "./opsx-schema-detail-COXlZ7Gm.mjs";
4
4
  export { ParsedOpsxSchemaDetail, parseOpsxSchemaDetail };