@openspecui/core 9.0.2 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/{active-root-config-DxYz3yKb.d.mts → active-root-config-N3lOotoq.d.mts} +13 -13
  2. package/dist/active-root-config.d.mts +5 -5
  3. package/dist/app-daemon-control.d.mts +8 -8
  4. package/dist/{cli-projection-Bf5KrMN0.d.mts → cli-projection-bB650ru4.d.mts} +9 -9
  5. package/dist/cli-projection.d.mts +5 -5
  6. package/dist/{workflow-CmQ4pFYC.mjs → command-result-DWMmDl6I.mjs} +91 -80
  7. package/dist/{dashboard-summary-transport-BNOPiGUP.d.mts → dashboard-summary-transport-DcyVID8z.d.mts} +3728 -3631
  8. package/dist/dashboard-summary-transport.d.mts +18 -18
  9. package/dist/{document-translation-CBqubtWC.d.mts → document-translation-DM2eydNr.d.mts} +2 -2
  10. package/dist/document-translation.d.mts +1 -1
  11. package/dist/hosted-app.d.mts +18 -18
  12. package/dist/hosted-contract.d.mts +18 -18
  13. package/dist/{index-CajHC-38.d.mts → index-CW5hcqKC.d.mts} +12277 -7316
  14. package/dist/index.d.mts +19 -19
  15. package/dist/index.mjs +513 -184
  16. package/dist/{local-download-profiles-Cu0nXbF1.d.mts → local-download-profiles-DXmw0Zs3.d.mts} +1 -1
  17. package/dist/local-download-profiles.d.mts +2 -2
  18. package/dist/local-download-profiles.mjs +1 -1
  19. package/dist/{notifications-D0M-01SA.d.mts → notifications-BQhnmovr.d.mts} +13 -13
  20. package/dist/notifications.d.mts +2 -2
  21. package/dist/{openspec-compat-B246EQNW.mjs → openspec-compat-DctIDxRM.mjs} +23 -17
  22. package/dist/openspec-compat.d.mts +4 -76
  23. package/dist/openspec-compat.mjs +2 -2
  24. package/dist/{openspec-projection-DKHk3L2e.d.mts → openspec-projection-FKuNsfBp.d.mts} +1 -1
  25. package/dist/openspec-projection.d.mts +2 -2
  26. package/dist/{opsx-entity-eoJAox1u.d.mts → opsx-entity-CulylXeK.d.mts} +2 -2
  27. package/dist/opsx-entity.d.mts +7 -7
  28. package/dist/{opsx-schema-detail-C3xm4DKk.d.mts → opsx-schema-detail-C9kNWQmO.d.mts} +2 -2
  29. package/dist/opsx-schema-detail.d.mts +8 -8
  30. package/dist/{opsx-types-DXBwJP68.d.mts → opsx-types-BeQJ4Le_.d.mts} +81 -81
  31. package/dist/{planning-cli-projection-DV22v3Xl.mjs → planning-cli-projection-pq8vZC1r.mjs} +2 -2
  32. package/dist/planning-cli-projection.d.mts +18 -18
  33. package/dist/planning-cli-projection.mjs +3 -3
  34. package/dist/{schemas-CxBYcq-e.d.mts → schemas-BIaPbul1.d.mts} +66 -66
  35. package/dist/{sounds-X-Wf5v3V.d.mts → sounds-CxSkCgKh.d.mts} +8 -8
  36. package/dist/sounds.d.mts +1 -1
  37. package/dist/{spec-catalog-Ce3uSLSc.mjs → spec-catalog-BkX0tZp9.mjs} +149 -2
  38. package/dist/spec-catalog.d.mts +18 -18
  39. package/dist/spec-catalog.mjs +2 -2
  40. package/dist/{store-mutation-protocol-B0e6UlO3.d.mts → store-mutation-protocol-DXeWtAvN.d.mts} +36 -36
  41. package/dist/store-mutation-protocol.d.mts +1 -1
  42. package/dist/{store-types-DhoV8sV7.d.mts → store-types-TDbmbvPx.d.mts} +1 -1
  43. package/dist/store-types.d.mts +5 -5
  44. package/dist/task-progress.d.mts +6 -6
  45. package/dist/{terminal-audio-D5CfhorV.d.mts → terminal-audio-R-3VBy0x.d.mts} +1 -1
  46. package/dist/terminal-audio.d.mts +2 -2
  47. package/dist/terminal-audio.mjs +1 -1
  48. package/dist/terminal-control.d.mts +2 -2
  49. package/dist/{terminal-invocation-C71aMyAX.d.mts → terminal-invocation-C8mSioBZ.d.mts} +93 -93
  50. package/dist/terminal-invocation.d.mts +1 -1
  51. package/dist/terminal-theme.mjs +1 -1
  52. package/dist/translation-language-pair.mjs +1 -1
  53. package/dist/{translator-BgCkaOkw.d.mts → translator-CVkc7MHh.d.mts} +91 -91
  54. package/dist/translator.d.mts +1 -1
  55. package/package.json +3 -2
  56. /package/dist/{local-download-profiles-BRsR1-kK.mjs → local-download-profiles-3I8AOUJj.mjs} +0 -0
  57. /package/dist/{terminal-audio-ELHVH24M.mjs → terminal-audio-CLEDFFpW.mjs} +0 -0
  58. /package/dist/{terminal-theme-C6BPfQ2G.mjs → terminal-theme-Bse1UdaX.mjs} +0 -0
  59. /package/dist/{translation-language-pair-CWLlH7Ab.mjs → translation-language-pair-BTfLQehX.mjs} +0 -0
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { A as requireCanonicalOpenSpecEntityId, C as CliStoreDoctorSchema, E as CliStoreSchema, M as requireOpenSpecEntityRelativePath, O as CliSchemasSuccessSchema, S as CliStoreDoctorEntrySchema, T as CliStoreMutationSchema, _ as specRoutePath, a as SpecDocumentProjectionSchema, b as CliDoctorSchema, c as createStaticSpecCatalogOwnedProjection, d as getSpecCatalogEntry, f as isReferencedSpecIdentity, g as specIdentityKey, h as specIdentityFromRoute, i as SpecCommandEvidenceSchema, j as requireCanonicalOpenSpecSpecId, k as isCliSchemasFailure, l as createStaticSpecCatalogReferenceProjection, m as specDocumentDisplayPath, n as ReferencedSpecIdentitySchema, o as SpecIdentitySchema, p as mergeSpecCatalog, r as SpecCatalogSchema, s as buildSpecCatalog, t as OwnedSpecIdentitySchema, u as createStaticSpecCatalogReferenceSource, v as OpenSpecCliContractExecutor, w as CliStoreListSchema, x as CliStoreCleanupSchema, y as CliContextSchema } from "./spec-catalog-Ce3uSLSc.mjs";
1
+ import { A as isCliBatchStatusEntryFailure, C as CliStoreDoctorSchema, E as CliStoreSchema, M as requireCanonicalOpenSpecSpecId, N as requireOpenSpecEntityRelativePath, O as CliSchemasSuccessSchema, S as CliStoreDoctorEntrySchema, T as CliStoreMutationSchema, _ as specRoutePath, a as SpecDocumentProjectionSchema, b as CliDoctorSchema, c as createStaticSpecCatalogOwnedProjection, d as getSpecCatalogEntry, f as isReferencedSpecIdentity, g as specIdentityKey, h as specIdentityFromRoute, i as SpecCommandEvidenceSchema, j as requireCanonicalOpenSpecEntityId, k as isCliSchemasFailure, l as createStaticSpecCatalogReferenceProjection, m as specDocumentDisplayPath, n as ReferencedSpecIdentitySchema, o as SpecIdentitySchema, p as mergeSpecCatalog, r as SpecCatalogSchema, s as buildSpecCatalog, t as OwnedSpecIdentitySchema, u as createStaticSpecCatalogReferenceSource, v as OpenSpecCliContractExecutor, w as CliStoreListSchema, x as CliStoreCleanupSchema, y as CliContextSchema } from "./spec-catalog-BkX0tZp9.mjs";
2
2
  import { _ as isTextLikeMime, a as DeltaSpecSchema, c as ScenarioStepSchema, d as TrackedTaskProgressSchema, f as FILE_PREVIEW_KINDS, g as isTextLikeFile, h as isPreviewableFile, i as DeltaSchema, l as SpecSchema, m as inferFilePreviewKind, n as ChangeSchema, o as RequirementSchema, p as inferFileMime, r as DeltaOperationType, s as ScenarioStepKeywordSchema, t as ChangeFileSchema, u as TaskSchema } from "./schemas-CMThmKx1.mjs";
3
3
  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-BnO3k48r.mjs";
4
4
  import { t as parseOpsxSchemaDetail } from "./opsx-schema-detail-zk8ePaKK.mjs";
@@ -8,7 +8,7 @@ import { a as getOpenSpecAnnotationsForFact, i as getOpenSpecAnnotation, n as an
8
8
  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-Cno7FlwE.mjs";
9
9
  import { a as isMarkdownTaskSourcePath, c as toggleMarkdownTask, i as deriveTrackedTaskPhase, n as createDocumentChecklistSummary, o as parseMarkdownTasks, r as createTrackedTaskProgress, s as projectTaskProjectionsFromMarkdownFiles, t as createApplyInstructionProgress } from "./task-progress-Bvid_Ws8.mjs";
10
10
  import { a as CliRootSchema, i as CliReferenceIndexEntrySchema, n as CliDiagnosticSchema, o as CliRootSourceSchema, r as CliDoctorReferenceEntrySchema, t as CliDiagnosticFailureSchema } from "./common-BRL_34xt.mjs";
11
- import { C as CliWorkflowStatusSuccessSchema, S as CliWorkflowStatusSchema, T as parseCliCommandResult, _ as CliSpecListSchema, a as CliArchiveInstructionsSuccessSchema, b as CliValidateReportSchema, c as CliArtifactInstructionsSuccessSchema, g as CliShowSpecSchema, h as CliShowSpecDocumentSchema, i as CliArchiveInstructionsSchema, n as CliApplyInstructionsSchema, o as CliArchiveSchema, r as CliApplyInstructionsSuccessSchema, s as CliArtifactInstructionsSchema, u as CliChangeListSchema, w as CliCommandTransportSchema, x as CliValidateSchema } from "./workflow-CmQ4pFYC.mjs";
11
+ import { C as CliValidateReportSchema, D as CliWorkflowStatusSuccessSchema, E as CliWorkflowStatusSchema, _ as CliShowSpecDocumentSchema, a as CliApplyInstructionsSuccessSchema, c as CliArchiveSchema, f as CliChangeListSchema, i as CliApplyInstructionsSchema, l as CliArtifactInstructionsSchema, n as parseCliCommandResult, o as CliArchiveInstructionsSchema, s as CliArchiveInstructionsSuccessSchema, t as CliCommandTransportSchema, u as CliArtifactInstructionsSuccessSchema, v as CliShowSpecSchema, w as CliValidateSchema, y as CliSpecListSchema } from "./command-result-DWMmDl6I.mjs";
12
12
  import { a as CliProjectionInvalidationCauseSchema, d as toCliProjectionCommandEvidence, f as toCliProjectionFailure, i as CliProjectionFailureSchema, l as cliProjectionStates, n as CliProjectionCommandError, o as CliProjectionNoticeSchema, p as toCliProjectionNotice, r as CliProjectionCommandEvidenceSchema, s as CliProjectionStateNameSchema, t as CliJsonValueSchema, u as createCliProjectionStateSchema } from "./cli-projection-Bc2WVwGj.mjs";
13
13
  import { $ as shouldShowTranslationEngineInstallGate, A as TranslationEngineIdSchema, B as TranslationLocalLlamaSettingsUpdateSchema, C as TranslationDownloadGroupPlanSchema, D as TranslationEngineDependencyStatusSchema, E as TranslationEngineDependencyStateSchema, F as TranslationEngineRuntimeStateSchema, G as createTranslationEngineLifecycleStatus, H as TranslationLocalSettingsUpdateSchema, I as TranslationEngineRuntimeStatusSchema, J as getTranslationEngineManifest, K as getManagedLocalTranslationEngineManifest, L as TranslationLocalCt2SettingsSchema, M as TranslationEngineInstallLogStreamSchema, N as TranslationEngineLifecycleEventSchema, O as TranslationEngineGlobalSettingsSchema, P as TranslationEngineLifecycleStatusSchema, Q as isTranslationEngineRuntimeReady, R as TranslationLocalCt2SettingsUpdateSchema, S as TranslationDownloadFilePlanSchema, T as TranslationEngineAssetStatusSchema, U as TranslationOpenAISettingsSchema, V as TranslationLocalSettingsSchema, W as TranslationOpenAISettingsUpdateSchema, X as isManagedLocalTranslationEngineId, Y as isDirectionalManagedLocalTranslationEngineId, Z as isTranslationEngineDependencyReady, _ as SERVICE_TRANSLATION_ENGINE_IDS, a as LocalModelAssetLogSchema, b as TRANSLATION_ENGINE_MANIFESTS, c as LocalModelDownloadStatusSchema, d as LocalModelProfileLoadStateSchema, et as isBatchTranslationAbort, f as LocalModelProfileManifestFileSchema, g as ManagedLocalCatalogSourceSchema, h as LocalModelProfileStatusSchema, i as DEFAULT_TRANSLATION_ENGINE_ID, j as TranslationEngineInstallLogEventSchema, k as TranslationEngineGlobalSettingsUpdateSchema, l as LocalModelLifecycleFileStateSchema, m as LocalModelProfileManifestSchema, n as BatchTranslateInputSchema, nt as runControlledTranslationTask, o as LocalModelAssetPlanSnapshotSchema, p as LocalModelProfileManifestGroupSchema, q as getTranslationEngineLifecycleMessage, s as LocalModelAssetStateSchema, t as BatchTranslateEventSchema, tt as normalizeBatchTranslationError, u as LocalModelLifecycleGroupStateSchema, v as ServiceTranslationEngineIdSchema, w as TranslationEngineAssetStateSchema, x as TRANSLATOR_CONTRACT_VERSION, y as TRANSLATION_ENGINE_IDS, z as TranslationLocalLlamaSettingsSchema } from "./translator-BkNACZ9R.mjs";
14
14
  import { a as ActiveRootOfficialConfigSchema, c as MAX_ACTIVE_ROOT_CONTEXT_BYTES, i as ActiveRootMutationSchema, n as patchActiveRootOfficialFields, o as ActiveRootRevisionSchema, r as validateActiveRootRawYaml, s as ActiveRootStructuredUpdateSchema, t as inspectActiveRootOfficialConfig } from "./active-root-config-K_wVeuI3.mjs";
@@ -16,12 +16,12 @@ import { a as DocumentTranslationDisplayModeSchema, c as TRANSLATION_CACHE_POLIC
16
16
  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-cd9lIDxN.mjs";
17
17
  import { n as terminalNotificationEventToPublishInput, t as TerminalControlParser } from "./terminal-control-D893EEN_.mjs";
18
18
  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-D6XlgL9b.mjs";
19
- import { n as TERMINAL_BELL_SOUND_VALUES, r as TerminalBellSoundSchema, t as TERMINAL_BELL_SOUND_OPTIONS } from "./terminal-audio-ELHVH24M.mjs";
20
- 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-C6BPfQ2G.mjs";
21
- import { i as selectLocalDownloadGroup, n as buildLocalDownloadPlanFromRepositoryFiles, r as buildLocalDownloadPlanFromRuntimeProfileFiles, t as LOCAL_MODEL_PROFILE_DEFINITIONS } from "./local-download-profiles-BRsR1-kK.mjs";
22
- import { n as inferLocalDirectionalModelLanguagePair, t as checkLocalDirectionalModelLanguagePair } from "./translation-language-pair-CWLlH7Ab.mjs";
23
- import { C as SchemaResolutionSchema, D as isGlobPattern, E as TemplatesSchema, S as SchemaInfoSchema, T as TemplateContentSchema, _ as OpsxCliEvidenceSchema, a as PlanningCliProjectionDataSchema, b as SchemaArtifactSchema, c as ApplyInstructionsContextFilesSchema, d as ApplyTaskSchema, f as ArchiveInstructionsSchema, g as DependencyInfoSchema, h as ChangeStatusSchema, i as EnvironmentGlobalProjectionStateSchema, l as ApplyInstructionsProjectionSchema, m as ArtifactStatusSchema, n as EnvironmentGlobalFileProjectionStateSchema, o as PlanningCliProjectionSelectorSchema, p as ArtifactInstructionsSchema, r as EnvironmentGlobalProjectionDataSchema, s as PlanningCliProjectionStateSchema, t as EnvironmentGlobalFileProjectionDataSchema, u as ApplyInstructionsSchema, v as OpsxConfigBundleSchema, w as TemplateContentMapSchema, x as SchemaDetailSchema, y as OpsxStatusEvidenceSchema } from "./planning-cli-projection-DV22v3Xl.mjs";
24
- import { h as parseOpenSpecCliVersion, p as deriveOpenSpecCliCapabilities } from "./openspec-compat-B246EQNW.mjs";
19
+ import { h as parseOpenSpecCliVersion, p as deriveOpenSpecCliCapabilities, u as OPENSPEC_CLI_TARGET_SERIES } from "./openspec-compat-DctIDxRM.mjs";
20
+ import { n as TERMINAL_BELL_SOUND_VALUES, r as TerminalBellSoundSchema, t as TERMINAL_BELL_SOUND_OPTIONS } from "./terminal-audio-CLEDFFpW.mjs";
21
+ 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-Bse1UdaX.mjs";
22
+ import { i as selectLocalDownloadGroup, n as buildLocalDownloadPlanFromRepositoryFiles, r as buildLocalDownloadPlanFromRuntimeProfileFiles, t as LOCAL_MODEL_PROFILE_DEFINITIONS } from "./local-download-profiles-3I8AOUJj.mjs";
23
+ import { n as inferLocalDirectionalModelLanguagePair, t as checkLocalDirectionalModelLanguagePair } from "./translation-language-pair-BTfLQehX.mjs";
24
+ import { C as SchemaResolutionSchema, D as isGlobPattern, E as TemplatesSchema, S as SchemaInfoSchema, T as TemplateContentSchema, _ as OpsxCliEvidenceSchema, a as PlanningCliProjectionDataSchema, b as SchemaArtifactSchema, c as ApplyInstructionsContextFilesSchema, d as ApplyTaskSchema, f as ArchiveInstructionsSchema, g as DependencyInfoSchema, h as ChangeStatusSchema, i as EnvironmentGlobalProjectionStateSchema, l as ApplyInstructionsProjectionSchema, m as ArtifactStatusSchema, n as EnvironmentGlobalFileProjectionStateSchema, o as PlanningCliProjectionSelectorSchema, p as ArtifactInstructionsSchema, r as EnvironmentGlobalProjectionDataSchema, s as PlanningCliProjectionStateSchema, t as EnvironmentGlobalFileProjectionDataSchema, u as ApplyInstructionsSchema, v as OpsxConfigBundleSchema, w as TemplateContentMapSchema, x as SchemaDetailSchema, y as OpsxStatusEvidenceSchema } from "./planning-cli-projection-pq8vZC1r.mjs";
25
25
  import { a as OPSX_CORE_PROFILE_WORKFLOWS, c as OPSX_WORKFLOW_TO_SKILL_DIR, i as OPSX_COMMAND_CAPABLE_WORKFLOWS, l as isOpsxCoreWorkflowSelection, n as OPSX_ARTIFACT_INPUT_ACTIONS, o as OPSX_TEXT_INPUT_ACTIONS, r as OPSX_CHANGE_INPUT_ACTIONS, s as OPSX_WORKFLOW_LABELS, t as OPSX_ALL_WORKFLOWS } from "./opsx-workflows-BA-46T7_.mjs";
26
26
  import { a as DASHBOARD_METRIC_KEYS, c as DashboardSummaryProjectionSchema, i as DashboardSummaryProjectionStateSchema, l as DashboardTrendsProjectionSchema, n as DashboardSummaryInvalidationCauseSchema, o as DashboardGitSnapshotSchema, r as DashboardSummaryInvalidationSchema, s as DashboardOverviewSchema, t as DashboardSummaryIdentitySchema } from "./dashboard-summary-transport-Do8pzSES.mjs";
27
27
  import { a as StoreListResultSchema, n as StoreDoctorResultSchema, o as classifyStoreCliResult, s as toStoreFeatureResult } from "./store-types-C87SlrJ3.mjs";
@@ -38,7 +38,7 @@ import { createHash, randomBytes, randomUUID } from "node:crypto";
38
38
  import { access, lstat, mkdir as mkdir$1, open, readFile, readdir, realpath, rename, rm, stat, writeFile as writeFile$1 } from "node:fs/promises";
39
39
  import { basename, dirname as dirname$1, extname, isAbsolute, join as join$1, matchesGlob, posix, relative, resolve, sep, win32 } from "node:path";
40
40
  import { setTimeout as setTimeout$1 } from "node:timers/promises";
41
- import { existsSync, lstatSync, readFileSync, realpathSync } from "node:fs";
41
+ import { existsSync, lstatSync, readFileSync, realpathSync, statSync } from "node:fs";
42
42
  import { AsyncLocalStorage } from "node:async_hooks";
43
43
  import { z } from "zod";
44
44
  import { EventEmitter } from "events";
@@ -2738,6 +2738,11 @@ function sanitizePersistedSettings(value, rules) {
2738
2738
  //#region src/child-process-tree.ts
2739
2739
  const execFileAsync$1 = promisify$1(execFile$1);
2740
2740
  const WINDOWS_PROCESS_TABLE_MAX_BUFFER = 16 * 1024 * 1024;
2741
+ /**
2742
+ * In-flight serialization for Win32_Process reads. Multiple tests reading the full
2743
+ * process table concurrently delays WMI settlement past their bounded timeouts.
2744
+ */
2745
+ let processTableReadInFlight = null;
2741
2746
  function hasChildExited(child) {
2742
2747
  return child.exitCode !== null || child.signalCode !== null;
2743
2748
  }
@@ -2751,21 +2756,29 @@ function isWindowsProcessRecord(value) {
2751
2756
  }
2752
2757
  /** Read the current Windows process table used for exact ancestry and root ownership checks. */
2753
2758
  async function readWindowsProcessTable() {
2754
- const { stdout } = await execFileAsync$1("powershell.exe", [
2755
- "-NoLogo",
2756
- "-NoProfile",
2757
- "-NonInteractive",
2758
- "-Command",
2759
- "[Console]::OutputEncoding = [Text.UTF8Encoding]::new($false); Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,ExecutablePath | ConvertTo-Json -Compress"
2760
- ], {
2761
- encoding: "utf8",
2762
- maxBuffer: WINDOWS_PROCESS_TABLE_MAX_BUFFER,
2763
- windowsHide: true
2764
- });
2765
- const json = stdout.trim();
2766
- if (json.length === 0) return [];
2767
- const parsed = JSON.parse(json);
2768
- return (Array.isArray(parsed) ? parsed : [parsed]).filter(isWindowsProcessRecord);
2759
+ if (processTableReadInFlight) return processTableReadInFlight;
2760
+ processTableReadInFlight = (async () => {
2761
+ const { stdout } = await execFileAsync$1("powershell.exe", [
2762
+ "-NoLogo",
2763
+ "-NoProfile",
2764
+ "-NonInteractive",
2765
+ "-Command",
2766
+ "[Console]::OutputEncoding = [Text.UTF8Encoding]::new($false); Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,ExecutablePath | ConvertTo-Json -Compress"
2767
+ ], {
2768
+ encoding: "utf8",
2769
+ maxBuffer: WINDOWS_PROCESS_TABLE_MAX_BUFFER,
2770
+ windowsHide: true
2771
+ });
2772
+ const json = stdout.trim();
2773
+ if (json.length === 0) return [];
2774
+ const parsed = JSON.parse(json);
2775
+ return (Array.isArray(parsed) ? parsed : [parsed]).filter(isWindowsProcessRecord);
2776
+ })();
2777
+ try {
2778
+ return await processTableReadInFlight;
2779
+ } finally {
2780
+ processTableReadInFlight = null;
2781
+ }
2769
2782
  }
2770
2783
  /** Terminate a Windows tree only when the root PID still owns the expected executable. */
2771
2784
  async function terminateWindowsProcessTreeByIdentity(rootPid, expectedExecutablePath) {
@@ -2808,12 +2821,16 @@ async function terminateChildProcessTree(child, signal = "SIGTERM") {
2808
2821
  //#endregion
2809
2822
  //#region src/command-invocation.ts
2810
2823
  /**
2811
- * Orthogonal intents (created 2026-08-09 Asia/Shanghai):
2824
+ * Orthogonal intents (updated 2026-08-28 Asia/Shanghai):
2812
2825
  * 1. Resolve caller-environment Windows commands to native argv-preserving executable boundaries.
2813
2826
  * 2. Project standard npm-style shims and explicit Node shebang launchers onto their real Node executable.
2814
2827
  * 3. Prefer native executables, route shell-sensitive pnpm through Corepack, and reject opaque command shims.
2828
+ * 4. Extract modern (`%dp0%`) and legacy (`%~dp0`) npm shim entries under hardened containment
2829
+ * that admits only real files inside the shim directory or its `.bin` parent.
2815
2830
  *
2816
2831
  * Original request (2026-08-04): "Make pnpm openspecui start and equivalent package scripts work on Windows."
2832
+ * Original request (2026-08-28, issue #258): "No available OpenSpec CLI runner." — npm ≥7 `cmd-shim`
2833
+ * references its entry through the `%dp0%` variable, which the legacy-only extractor missed.
2817
2834
  */
2818
2835
  const WINDOWS_NATIVE_EXTENSIONS = new Set([".com", ".exe"]);
2819
2836
  function isBareCommand(command$1) {
@@ -2837,7 +2854,7 @@ function findWindowsCommandCandidates(command$1, options) {
2837
2854
  windowsHide: true
2838
2855
  });
2839
2856
  if (result.error) throw result.error;
2840
- if (result.status !== 0) throw new Error(result.stderr.trim() || `Unable to resolve ${command$1} from PATH.`);
2857
+ if (result.status !== 0) throw Object.assign(new Error(result.stderr.trim() || `Unable to resolve ${command$1} from PATH.`), { code: "ENOENT" });
2841
2858
  return result.stdout.split(/\r?\n/).map((candidate) => candidate.trim()).filter(Boolean);
2842
2859
  }
2843
2860
  function tryFindWindowsCommandCandidates(command$1, options) {
@@ -2871,17 +2888,76 @@ function findNodeExecutable(commandShim, options) {
2871
2888
  if (process$1.release.name === "node" && extname(process$1.execPath).toLowerCase() === ".exe") return process$1.execPath;
2872
2889
  throw new Error(`Unable to resolve the Node executable required by ${commandShim}.`);
2873
2890
  }
2891
+ const NODE_COMMAND_SHIM_GUARD_PATTERN = /(?:node(?:\.exe)?|node_exe|npm_node_execpath|_prog)/i;
2892
+ /**
2893
+ * npm shim generations reference their entry relative to the shim directory through two shapes:
2894
+ * the legacy literal `%~dp0\path\entry.js` and the modern (cmd-shim v4+, npm ≥7) variable form
2895
+ * `SET dp0=%~dp0` … `"%dp0%\path\entry.js"`.
2896
+ */
2897
+ const NODE_COMMAND_SHIM_ENTRY_PATTERN = /%(?:~dp0|dp0%)([^"\r\n]*?\.(?:c|m)?js)/gi;
2898
+ /** Raw dp0-relative JavaScript entry references found in one npm-style command shim. */
2899
+ function extractNodeCommandShimEntryTokens(source) {
2900
+ const tokens = [];
2901
+ for (const match of source.matchAll(NODE_COMMAND_SHIM_ENTRY_PATTERN)) {
2902
+ const rawToken = match[1]?.trim() ?? "";
2903
+ if (rawToken.startsWith("\\\\") || rawToken.startsWith("//")) continue;
2904
+ const token = rawToken.replace(/^[/\\]+/, "");
2905
+ if (token) tokens.push(token);
2906
+ }
2907
+ return tokens;
2908
+ }
2909
+ function isContainableShimEntryToken(token, normalizedToken) {
2910
+ if (!token) return false;
2911
+ if (token.includes("\0")) return false;
2912
+ if (/^[a-zA-Z]:/.test(normalizedToken)) return false;
2913
+ if (token.startsWith("\\\\") || normalizedToken.startsWith("//")) return false;
2914
+ return !token.includes("%");
2915
+ }
2916
+ function isWithinDirectory(root, candidate) {
2917
+ const relativePath = relative(root, candidate);
2918
+ return relativePath !== "" && !relativePath.startsWith("..") && !isAbsolute(relativePath);
2919
+ }
2920
+ function resolveExistingShimEntry(commandShim, token) {
2921
+ const normalizedToken = token.replace(/\\/g, "/");
2922
+ if (!isContainableShimEntryToken(token, normalizedToken)) return null;
2923
+ const entry = resolve(dirname$1(commandShim), normalizedToken);
2924
+ let realEntry;
2925
+ let realShimDirectory;
2926
+ try {
2927
+ realEntry = realpathSync.native(entry);
2928
+ realShimDirectory = dirname$1(realpathSync.native(commandShim));
2929
+ } catch {
2930
+ return null;
2931
+ }
2932
+ let stats;
2933
+ try {
2934
+ stats = statSync(realEntry);
2935
+ } catch {
2936
+ return null;
2937
+ }
2938
+ if (!stats.isFile()) return null;
2939
+ const realShimParent = dirname$1(realShimDirectory);
2940
+ const withinShimDirectory = isWithinDirectory(realShimDirectory, realEntry);
2941
+ const withinDotBinParent = basename(realShimDirectory).toLowerCase() === ".bin" && isWithinDirectory(realShimParent, realEntry);
2942
+ if (!withinShimDirectory && !withinDotBinParent) return null;
2943
+ return realEntry;
2944
+ }
2945
+ /**
2946
+ * Resolve the JavaScript entry one standard npm-style Node command shim delegates to, or null
2947
+ * when no dp0-relative entry survives containment validation.
2948
+ */
2949
+ function resolveNodeCommandShimEntry(commandShim, source) {
2950
+ const tokens = extractNodeCommandShimEntryTokens(source);
2951
+ for (let index = tokens.length - 1; index >= 0; index -= 1) {
2952
+ const entry = resolveExistingShimEntry(commandShim, tokens[index] ?? "");
2953
+ if (entry) return entry;
2954
+ }
2955
+ return null;
2956
+ }
2874
2957
  function resolveNodeCommandShim(commandShim, args, options) {
2875
2958
  const source = readFileSync(commandShim, "utf8");
2876
- if (!/(?:node(?:\.exe)?|node_exe|npm_node_execpath|_prog)/i.test(source)) return null;
2877
- const entries = [];
2878
- for (const match of source.matchAll(/%~dp0([^"\r\n]*?\.(?:c|m)?js)/gi)) {
2879
- const relativeEntry = match[1]?.trim().replace(/^[\\/]+/, "");
2880
- if (!relativeEntry) continue;
2881
- const entry$1 = resolve(dirname$1(commandShim), relativeEntry);
2882
- if (existsSync(entry$1)) entries.push(entry$1);
2883
- }
2884
- const entry = entries.at(-1);
2959
+ if (!NODE_COMMAND_SHIM_GUARD_PATTERN.test(source)) return null;
2960
+ const entry = resolveNodeCommandShimEntry(commandShim, source);
2885
2961
  if (!entry) return null;
2886
2962
  return {
2887
2963
  command: findNodeExecutable(commandShim, options),
@@ -3173,7 +3249,7 @@ function runBufferedCommand(options) {
3173
3249
  //#endregion
3174
3250
  //#region src/config.ts
3175
3251
  /**
3176
- * Orthogonal intents (updated 2026-07-30 Asia/Shanghai):
3252
+ * Orthogonal intents (updated 2026-08-28 Asia/Shanghai):
3177
3253
  * 1. Define and persist project-scoped OpenSpecUI settings.
3178
3254
  * 2. Resolve, diagnose, cache, and explicitly invalidate the OpenSpec CLI runner.
3179
3255
  * 3. Prevent retired in-flight runner resolutions from reclaiming cache ownership.
@@ -3182,7 +3258,11 @@ function runBufferedCommand(options) {
3182
3258
  * extension-less script (issue #209 hotfix).
3183
3259
  * 6. Hide runner-probe subprocess console windows (`windowsHide`) so a console-less Windows daemon
3184
3260
  * never flashes a cmd window while resolving or sniffing the CLI runner.
3261
+ * 7. Pin auto-fallback runners to the supported CLI series and probe the global CLI through the
3262
+ * spawn-safe boundary so resolved `.cmd` shims execute instead of failing EINVAL (issue #258).
3185
3263
  *
3264
+ * Original request (2026-08-28, issue #258): "No available OpenSpec CLI runner." on Windows with an
3265
+ * in-range global npm CLI; the npx fallback resolved an out-of-range `@latest`.
3186
3266
  * Original request (2026-08-14): "在Windows平台上,执行命令总是会弹出cmd窗口,这个可否统一隐藏,你先调查一下原因"
3187
3267
  * Original request (2026-07-14): "openspec 1.6.0 已经放出,我们需要开始进行适配。"
3188
3268
  * Independent review correction (2026-07-20): Global CLI installation must retire cached and
@@ -3225,6 +3305,7 @@ const CodeEditorThemeSchema = z.enum(CODE_EDITOR_THEME_VALUES);
3225
3305
  function isTerminalRendererEngine(value) {
3226
3306
  return TERMINAL_RENDERER_ENGINE_VALUES.includes(value);
3227
3307
  }
3308
+ const OPENSPEC_CLI_FALLBACK_SPEC = `@fission-ai/openspec@${OPENSPEC_CLI_TARGET_SERIES}`;
3228
3309
  const BASE_PACKAGE_MANAGER_RUNNERS = [
3229
3310
  {
3230
3311
  id: "npx",
@@ -3232,13 +3313,13 @@ const BASE_PACKAGE_MANAGER_RUNNERS = [
3232
3313
  commandParts: [
3233
3314
  "npx",
3234
3315
  "-y",
3235
- "@fission-ai/openspec"
3316
+ OPENSPEC_CLI_FALLBACK_SPEC
3236
3317
  ]
3237
3318
  },
3238
3319
  {
3239
3320
  id: "bunx",
3240
3321
  source: "bunx",
3241
- commandParts: ["bunx", "@fission-ai/openspec"]
3322
+ commandParts: ["bunx", OPENSPEC_CLI_FALLBACK_SPEC]
3242
3323
  },
3243
3324
  {
3244
3325
  id: "deno",
@@ -3247,7 +3328,7 @@ const BASE_PACKAGE_MANAGER_RUNNERS = [
3247
3328
  "deno",
3248
3329
  "run",
3249
3330
  "-A",
3250
- "npm:@fission-ai/openspec"
3331
+ `npm:${OPENSPEC_CLI_FALLBACK_SPEC}`
3251
3332
  ]
3252
3333
  },
3253
3334
  {
@@ -3256,7 +3337,7 @@ const BASE_PACKAGE_MANAGER_RUNNERS = [
3256
3337
  commandParts: [
3257
3338
  "pnpm",
3258
3339
  "dlx",
3259
- "@fission-ai/openspec"
3340
+ OPENSPEC_CLI_FALLBACK_SPEC
3260
3341
  ]
3261
3342
  },
3262
3343
  {
@@ -3265,7 +3346,7 @@ const BASE_PACKAGE_MANAGER_RUNNERS = [
3265
3346
  commandParts: [
3266
3347
  "yarn",
3267
3348
  "dlx",
3268
- "@fission-ai/openspec"
3349
+ OPENSPEC_CLI_FALLBACK_SPEC
3269
3350
  ]
3270
3351
  }
3271
3352
  ];
@@ -3563,15 +3644,16 @@ async function fetchLatestVersion() {
3563
3644
  async function sniffGlobalCli() {
3564
3645
  const env = createCleanCliEnv();
3565
3646
  const resolvedCommand = await resolveShellExecutablePath("openspec", process.cwd(), env) ?? "openspec";
3566
- const [localResult, latestVersion] = await Promise.all([execFileAsync(resolvedCommand, ["--version"], {
3647
+ const [localResult, latestVersion] = await Promise.all([runBufferedCommand({
3648
+ command: resolvedCommand,
3649
+ args: ["--version"],
3650
+ cwd: process.cwd(),
3567
3651
  env,
3568
- timeout: 1e4,
3569
- encoding: "utf8",
3570
- windowsHide: true
3571
- }).catch((err) => ({ error: err })), fetchLatestVersion()]);
3572
- if ("error" in localResult) {
3573
- const error = localResult.error instanceof Error ? localResult.error.message : String(localResult.error);
3574
- if (error.includes("not found") || error.includes("ENOENT") || error.includes("not recognized")) return {
3652
+ timeoutMs: 1e4
3653
+ }), fetchLatestVersion()]);
3654
+ if (localResult.spawnError || localResult.timedOut || localResult.exitCode !== 0) {
3655
+ const message = localResult.spawnError?.message ?? (localResult.timedOut ? "Global CLI probe timed out." : localResult.stderr.trim() || `Exit code ${localResult.exitCode ?? "null"}`);
3656
+ if (localResult.spawnError?.code === "ENOENT" || /not found|ENOENT|not recognized|unable to resolve/i.test(message)) return {
3575
3657
  hasGlobal: false,
3576
3658
  latestVersion,
3577
3659
  hasUpdate: !!latestVersion
@@ -3580,7 +3662,7 @@ async function sniffGlobalCli() {
3580
3662
  hasGlobal: false,
3581
3663
  latestVersion,
3582
3664
  hasUpdate: !!latestVersion,
3583
- error
3665
+ error: message
3584
3666
  };
3585
3667
  }
3586
3668
  const version = localResult.stdout.trim();
@@ -5033,7 +5115,7 @@ function runOpenSpecCliWorker(options) {
5033
5115
  //#endregion
5034
5116
  //#region src/cli-executor.ts
5035
5117
  /**
5036
- * Orthogonal intents (updated 2026-08-15 Asia/Shanghai):
5118
+ * Orthogonal intents (updated 2026-08-28 Asia/Shanghai):
5037
5119
  * 1. Execute buffered CLI work through process/Worker backends with runner recovery, observer-explicit
5038
5120
  * OTel phase evidence, bounded probes, and owner-scoped disposal.
5039
5121
  * 2. Own streaming CLI process trees through cancellation request, escalation, and confirmed settlement.
@@ -5042,10 +5124,13 @@ function runOpenSpecCliWorker(options) {
5042
5124
  * 4. Expose the physically separated OpenSpec 1.6-1.9 typed command facade with response-Span delivery
5043
5125
  * separate from late child-process settlement evidence.
5044
5126
  * 5. Report eager-resolved exit codes as unknown instead of fabricated zeros.
5127
+ * 6. Pass the OpenSpec 1.10 `init --language` context-block option through init/initStream argv only
5128
+ * for a non-empty value.
5045
5129
  *
5046
5130
  * Original request (2026-07-15): "你先负责后端(内核)的开发。"
5047
5131
  * Original request (2026-07-17): "A stream cancellation request is not child-process settlement."
5048
5132
  * Original request (2026-08-15): "v9的适配需要同时适配 1.8和1.9。"
5133
+ * Original request (2026-08-28): "直接将 0.10.0 和 0.11.0 一起适配,然后发布 v11。"
5049
5134
  */
5050
5135
  /** Failure raised when even forced termination cannot confirm child-process close. */
5051
5136
  var CliStreamTerminationError = class extends Error {
@@ -5459,6 +5544,9 @@ var CliExecutor = class {
5459
5544
  }
5460
5545
  /**
5461
5546
  * 执行 openspec init(非交互式)
5547
+ *
5548
+ * `language`(OpenSpec 1.10+)非空时透传 `--language <value>`;CLI 会在
5549
+ * openspec/config.yaml 写入固定三行 context 块,并拒绝覆盖已有配置。
5462
5550
  */
5463
5551
  async init(options) {
5464
5552
  const args = ["init"];
@@ -5468,6 +5556,7 @@ var CliExecutor = class {
5468
5556
  }
5469
5557
  if (options?.profile) args.push("--profile", options.profile);
5470
5558
  if (options?.force) args.push("--force");
5559
+ if (options?.language) args.push("--language", options.language);
5471
5560
  return this.execute(args);
5472
5561
  }
5473
5562
  /**
@@ -5752,6 +5841,8 @@ var CliExecutor = class {
5752
5841
  }
5753
5842
  /**
5754
5843
  * 流式执行 openspec init
5844
+ *
5845
+ * `language`(OpenSpec 1.10+)非空时透传 `--language <value>`。
5755
5846
  */
5756
5847
  initStream(options, onEvent) {
5757
5848
  const args = ["init"];
@@ -5761,6 +5852,7 @@ var CliExecutor = class {
5761
5852
  }
5762
5853
  if (options.profile) args.push("--profile", options.profile);
5763
5854
  if (options.force) args.push("--force");
5855
+ if (options.language) args.push("--language", options.language);
5764
5856
  return this.executeStream(args, onEvent);
5765
5857
  }
5766
5858
  /** Stream the fixed project bootstrap command without installing Agent integrations. */
@@ -6205,26 +6297,57 @@ var RuntimeRootInvalidationRegistry = class {
6205
6297
  //#endregion
6206
6298
  //#region src/agent-delivery-registry.ts
6207
6299
  /**
6208
- * Orthogonal intents (updated 2026-08-15 Asia/Shanghai):
6209
- * 1. Preserve the complete pinned OpenSpec 1.9 Agent delivery registry in one typed physical owner.
6300
+ * Orthogonal intents (updated 2026-08-28 Asia/Shanghai):
6301
+ * 1. Preserve the complete pinned OpenSpec 1.11 Agent delivery registry in one typed physical owner.
6210
6302
  * 2. Co-locate capability, command artifact, invocation, alias, setup, cleanup, and migration metadata.
6211
6303
  * 3. Model current/legacy project roots, user-global skill roots, detection paths, and IDE restart facts.
6212
- * 4. Provide deterministic path-template helpers without reading runtime filesystem state.
6213
- * 5. Select the official inventory per admitted CLI line (1.8 lacks Command Code and restart facts).
6304
+ * 4. Express the single per-series root divergence (Antigravity `.agent` -> `.agents`, 1.11 only)
6305
+ * as typed series overrides so each admitted line selects a faithful snapshot.
6306
+ * 5. Declare the shared `.agents` skills-root owner candidate set and its arbitration order as
6307
+ * metadata only; physical arbitration stays owned by the official CLI and the Server projection.
6308
+ * 6. Select the official inventory per admitted CLI line (1.10 / 1.11).
6214
6309
  *
6215
6310
  * Original request (2026-08-01): adapt the complete OpenSpec 1.7 Agent delivery protocol for OpenSpecUI 7.
6216
6311
  * Original request (2026-08-15): "v9的适配需要同时适配 1.8和1.9。"
6312
+ * Original request (2026-08-28): "直接将 0.10.0 和 0.11.0 一起适配,然后发布 v11。"
6217
6313
  */
6218
6314
  function agentCliSeriesOrder(series) {
6219
- return series === "1.9" ? 19 : 18;
6315
+ switch (series) {
6316
+ case "1.9": return 9;
6317
+ case "1.10": return 10;
6318
+ case "1.11": return 11;
6319
+ }
6220
6320
  }
6321
+ /** Physical project root shared by Codex, Zed Agent, and the vendor-neutral skills target. */
6322
+ const SHARED_AGENTS_SKILLS_ROOT = ".agents";
6323
+ /** Marker file the official CLI writes inside `<root>/skills/` to pin one shared-root writer. */
6324
+ const SHARED_SKILLS_TARGET_MARKER = ".openspec-target";
6325
+ /**
6326
+ * Candidate owners that may render the shared `.agents` skills root, in pinned upstream
6327
+ * registry order (`codex`, `zed`, `agents` on both admitted lines).
6328
+ *
6329
+ * Arbitration is owned by the official CLI and projected by the Server Agent delivery
6330
+ * service — never by this registry — and follows: the `.openspec-target` marker, then
6331
+ * the owner inferred from generated invocation syntax, then `agents` when current skills
6332
+ * already exist, then the `codex` fallback. Antigravity joins the shared root on 1.11
6333
+ * but is adapter-backed and is excluded from skills-writer candidacy; its own
6334
+ * `.agents/workflows` commands root is unaffected by that exclusion.
6335
+ */
6336
+ const SHARED_AGENTS_SKILLS_OWNER_CANDIDATES = [
6337
+ "codex",
6338
+ "zed",
6339
+ "agents"
6340
+ ];
6221
6341
  /**
6222
6342
  * Select the official Agent delivery inventory for one CLI version string.
6223
6343
  *
6224
- * Only a stable, admitted version — current (1.9.x) or supported non-current (1.8.x) — selects
6225
- * an inventory. Unsupported forms (prereleases, >=1.10, below-range) and unparseable output
6226
- * select none: a page-level version bypass must not manufacture a 1.9 inventory for a CLI the
6227
- * release line refuses to admit.
6344
+ * Only a stable, admitted version — current (1.11.x) or supported non-current
6345
+ * (1.10.x) — selects an inventory. Unsupported forms (prereleases, >=1.12,
6346
+ * below-range lines including 1.8/1.9) and unparseable output select none: a
6347
+ * page-level version bypass must not manufacture an admitted inventory for a
6348
+ * CLI the release line refuses to admit. The returned snapshot carries the
6349
+ * per-series physical reality of the selected line (Antigravity roots differ
6350
+ * between 1.10 and 1.11).
6228
6351
  */
6229
6352
  function selectAgentDeliveryRegistry(cliVersion) {
6230
6353
  const series = parseOpenSpecCliSeries(cliVersion);
@@ -6234,12 +6357,11 @@ function selectAgentDeliveryRegistry(cliVersion) {
6234
6357
  if (tool.minCliSeries && agentCliSeriesOrder(tool.minCliSeries) > running) return false;
6235
6358
  return true;
6236
6359
  }).map((tool) => {
6237
- if (tool.requiresIdeRestart !== void 0 && tool.requiresIdeRestartSince && agentCliSeriesOrder(tool.requiresIdeRestartSince) > running) {
6238
- const { ...rest } = tool;
6239
- delete rest.requiresIdeRestart;
6240
- return rest;
6241
- }
6242
- return { ...tool };
6360
+ const { perSeriesOverrides, ...selected } = tool;
6361
+ if (selected.requiresIdeRestart !== void 0 && selected.requiresIdeRestartSince && agentCliSeriesOrder(selected.requiresIdeRestartSince) > running) delete selected.requiresIdeRestart;
6362
+ const override = perSeriesOverrides?.[series];
6363
+ if (override) Object.assign(selected, override);
6364
+ return selected;
6243
6365
  });
6244
6366
  }
6245
6367
  /**
@@ -6247,14 +6369,15 @@ function selectAgentDeliveryRegistry(cliVersion) {
6247
6369
  *
6248
6370
  * Delegates to the single compat version parser so the same stdout that classifies a session
6249
6371
  * also selects its inventory — two parsers must never disagree at this boundary. Returns
6250
- * '1.9' only for stable 1.9.x, '1.8' only for stable 1.8.x, and null for every non-admitted
6251
- * form: prereleases, >=1.10, below-range, or unparseable output.
6372
+ * '1.11' only for stable 1.11.x, '1.10' only for stable 1.10.x, and null for every
6373
+ * non-admitted form: prereleases, >=1.12, below-range lines (including 1.9.x), or
6374
+ * unparseable output.
6252
6375
  */
6253
6376
  function parseOpenSpecCliSeries(cliVersion) {
6254
6377
  const version = parseOpenSpecCliVersion(cliVersion ?? void 0);
6255
6378
  if (!version || version.prerelease !== null) return null;
6256
- if (version.major === 1 && version.minor === 9) return "1.9";
6257
- if (version.major === 1 && version.minor === 8) return "1.8";
6379
+ if (version.major === 1 && version.minor === 11) return "1.11";
6380
+ if (version.major === 1 && version.minor === 10) return "1.10";
6258
6381
  return null;
6259
6382
  }
6260
6383
  const CODEX_MANAGED_PROMPTS = {
@@ -6311,7 +6434,7 @@ const projectCleanup = (...patterns) => ({
6311
6434
  kind: "project-patterns",
6312
6435
  patterns
6313
6436
  });
6314
- /** Complete OpenSpec 1.9 Agent delivery registry in official order. */
6437
+ /** Complete OpenSpec 1.11 Agent delivery registry in official order (the newest admitted line). */
6315
6438
  const AGENT_DELIVERY_REGISTRY = [
6316
6439
  {
6317
6440
  name: "Amazon Q Developer",
@@ -6330,12 +6453,27 @@ const AGENT_DELIVERY_REGISTRY = [
6330
6453
  value: "antigravity",
6331
6454
  available: true,
6332
6455
  successLabel: "Antigravity",
6333
- skillsDir: ".agent",
6456
+ skillsDir: ".agents",
6457
+ legacySkillsDirs: [".agent"],
6458
+ detectionPaths: [".agent", ".agents/workflows"],
6334
6459
  requiresIdeRestart: true,
6335
6460
  requiresIdeRestartSince: "1.9",
6336
6461
  capability: "adapter-backed",
6337
- command: command(".agent/workflows/opsx-{workflow}.md", yamlMarkdown("description")),
6338
- cleanup: projectCleanup(".agent/workflows/openspec-*.md")
6462
+ command: command(".agents/workflows/opsx-{workflow}.md", yamlMarkdown("description")),
6463
+ cleanup: projectCleanup(".agent/workflows/openspec-*.md"),
6464
+ migrations: [{
6465
+ from: ".agent",
6466
+ to: ".agents",
6467
+ needsConsent: false,
6468
+ timing: "after-generation"
6469
+ }],
6470
+ perSeriesOverrides: { "1.10": {
6471
+ skillsDir: ".agent",
6472
+ legacySkillsDirs: void 0,
6473
+ detectionPaths: void 0,
6474
+ command: command(".agent/workflows/opsx-{workflow}.md", yamlMarkdown("description")),
6475
+ migrations: void 0
6476
+ } }
6339
6477
  },
6340
6478
  {
6341
6479
  name: "Auggie (Augment CLI)",
@@ -6416,7 +6554,8 @@ const AGENT_DELIVERY_REGISTRY = [
6416
6554
  migrations: [{
6417
6555
  from: ".codex",
6418
6556
  to: ".agents",
6419
- needsConsent: false
6557
+ needsConsent: false,
6558
+ timing: "after-generation"
6420
6559
  }]
6421
6560
  },
6422
6561
  {
@@ -6734,6 +6873,17 @@ const AGENT_DELIVERY_REGISTRY = [
6734
6873
  capability: "adapter-backed",
6735
6874
  command: command(".trae/commands/opsx-{workflow}.md", yamlMarkdown("name", "description"))
6736
6875
  },
6876
+ {
6877
+ name: "Zed Agent",
6878
+ value: "zed",
6879
+ available: true,
6880
+ successLabel: "Zed Agent",
6881
+ skillsDir: ".agents",
6882
+ detectionPaths: [".zed", ".agents/skills"],
6883
+ minCliSeries: "1.10",
6884
+ capability: "none",
6885
+ command: null
6886
+ },
6737
6887
  {
6738
6888
  name: "ZCode",
6739
6889
  value: "zcode",
@@ -6765,21 +6915,137 @@ function resolveAgentCommandPathTemplate(pathTemplate, workflow) {
6765
6915
  return pathTemplate.replace("{workflow}", workflow);
6766
6916
  }
6767
6917
 
6918
+ //#endregion
6919
+ //#region src/agent-command-content.ts
6920
+ /**
6921
+ * Orthogonal intents (updated 2026-08-28 Asia/Shanghai):
6922
+ * 1. Resolve the running OpenSpec CLI's private command-generation boundary without bundling copied prompts.
6923
+ * 2. Produce exact per-Agent, per-workflow command contents for physical fingerprint comparison.
6924
+ * 3. Fail closed when the configured runner has no importable OpenSpec module or compatible generator contract.
6925
+ * 4. Isolate per-tool adapter absence as version-scoped unavailability, keeping unrelated evidence.
6926
+ * 5. Own command-content equivalence, tolerating exactly the OpenCode provided-arguments
6927
+ * injection line that 1.10+ adapters append to placeholder-free templates.
6928
+ *
6929
+ * Original request (2026-08-01): adapt the complete OpenSpec 1.7 Agent delivery protocol for OpenSpecUI 7.
6930
+
6931
+ * Original request (2026-08-15): "v9的适配需要同时适配 1.8和1.9。"
6932
+ * Original request (2026-08-28): "直接将 0.10.0 和 0.11.0 一起适配,然后发布 v11。"
6933
+ */
6934
+ /**
6935
+ * Passthrough line the OpenCode adapter injects after the complete `**Input**`
6936
+ * contract when a command template carries no argument placeholder of its own
6937
+ * (see the pinned upstream `command-generation/adapters/opencode.ts`). OpenSpecUI
6938
+ * treats this line as generator-owned, so command files may differ by exactly
6939
+ * this line and still be content-current across the admitted series pair.
6940
+ */
6941
+ const OPENCODE_PROVIDED_ARGUMENTS_LINE = "**Provided arguments**: $ARGUMENTS";
6942
+ /** Normalize checkout artifacts that are not real content drift (UTF-8 BOM, CRLF). */
6943
+ function normalizeContentForEquivalence(content) {
6944
+ return content.replace(/^\uFEFF/u, "").replaceAll("\r\n", "\n");
6945
+ }
6946
+ /**
6947
+ * Line-anchored form of the injected passthrough line: it matches only when the
6948
+ * passthrough text stands as a complete line (a newline before it, a newline or end
6949
+ * of content after it), never as a prefix of a longer genuine body line.
6950
+ */
6951
+ const STANDALONE_PROVIDED_ARGUMENTS_LINE_PATTERN = /* @__PURE__ */ new RegExp(`\\n${OPENCODE_PROVIDED_ARGUMENTS_LINE.replace(/[$*]/g, "\\$&")}(?=\\n|$)`);
6952
+ /** Remove at most one standalone injected passthrough line, wherever it sits. */
6953
+ function stripInjectedProvidedArgumentsLine(content) {
6954
+ const match = STANDALONE_PROVIDED_ARGUMENTS_LINE_PATTERN.exec(content);
6955
+ if (!match) return content;
6956
+ return content.slice(0, match.index) + content.slice(match.index + match[0].length);
6957
+ }
6958
+ /**
6959
+ * Whether an on-disk command file is content-equivalent to the expected generated command.
6960
+ *
6961
+ * Equivalence is exact string equality after BOM/CRLF normalization, plus one
6962
+ * deliberate tolerance: the OpenCode passthrough line above may appear as a
6963
+ * standalone line on either side, because 1.10+ adapters inject it while earlier
6964
+ * admitted runners did not. A longer body line that merely starts with the
6965
+ * passthrough text is genuine content, never generator-owned. No other tool or
6966
+ * difference is tolerated.
6967
+ */
6968
+ function isEquivalentAgentCommandContent(toolId, actual, expected) {
6969
+ const normalizedActual = normalizeContentForEquivalence(actual);
6970
+ const normalizedExpected = normalizeContentForEquivalence(expected);
6971
+ if (normalizedActual === normalizedExpected) return true;
6972
+ if (toolId !== "opencode") return false;
6973
+ return stripInjectedProvidedArgumentsLine(normalizedActual) === stripInjectedProvidedArgumentsLine(normalizedExpected);
6974
+ }
6975
+ const KNOWN_WORKFLOWS = new Set(OPSX_ALL_WORKFLOWS);
6976
+ function isRecord(value) {
6977
+ return typeof value === "object" && value !== null;
6978
+ }
6979
+ function isRuntimeSkillGenerationModule(value) {
6980
+ return isRecord(value) && typeof value.getCommandContents === "function";
6981
+ }
6982
+ function isRuntimeCommandAdapterRegistry(value) {
6983
+ if (typeof value !== "object" && typeof value !== "function" || value === null) return false;
6984
+ return "get" in value && typeof value.get === "function";
6985
+ }
6986
+ function isRuntimeCommandGenerationModule(value) {
6987
+ return isRecord(value) && isRuntimeCommandAdapterRegistry(value.CommandAdapterRegistry) && typeof value.generateCommands === "function";
6988
+ }
6989
+ function isRuntimeCommandContent(value) {
6990
+ return isRecord(value) && typeof value.id === "string" && KNOWN_WORKFLOWS.has(value.id);
6991
+ }
6992
+ function isRuntimeGeneratedCommand(value) {
6993
+ return isRecord(value) && typeof value.fileContent === "string";
6994
+ }
6995
+ /**
6996
+ * Load exact command contents from the configured OpenSpec CLI.
6997
+ *
6998
+ * The private generator is intentionally treated as optional evidence. When the runner is not an
6999
+ * importable local OpenSpec module, callers receive `null` and commands-only installs cannot be
7000
+ * declared current from path existence alone.
7001
+ */
7002
+ async function loadOpenSpecAgentCommandContents(cliCommand, workflows) {
7003
+ try {
7004
+ const cliModuleDir = dirname$1((await resolveOpenSpecWorkerInvocation(cliCommand)).modulePath);
7005
+ const [skillGenerationModule, commandGenerationModule] = await Promise.all([import(pathToFileURL(resolve(cliModuleDir, "../core/shared/skill-generation.js")).href), import(pathToFileURL(resolve(cliModuleDir, "../core/command-generation/index.js")).href)]);
7006
+ if (!isRuntimeSkillGenerationModule(skillGenerationModule) || !isRuntimeCommandGenerationModule(commandGenerationModule)) return null;
7007
+ const commandContents = skillGenerationModule.getCommandContents(workflows);
7008
+ if (!Array.isArray(commandContents) || !commandContents.every(isRuntimeCommandContent)) return null;
7009
+ const catalog = {};
7010
+ const unavailableTools = {};
7011
+ for (const tool of AGENT_DELIVERY_REGISTRY) {
7012
+ if (!tool.command) continue;
7013
+ const adapter = commandGenerationModule.CommandAdapterRegistry.get(tool.value);
7014
+ if (!adapter) {
7015
+ unavailableTools[tool.value] = tool.minCliSeries !== void 0 ? `Command adapter first ships with OpenSpec CLI ${tool.minCliSeries}; this runner does not declare it.` : "This OpenSpec CLI runner does not register the command adapter.";
7016
+ continue;
7017
+ }
7018
+ const generatedCommands = commandGenerationModule.generateCommands(commandContents, adapter);
7019
+ if (!Array.isArray(generatedCommands) || generatedCommands.length !== commandContents.length || !generatedCommands.every(isRuntimeGeneratedCommand)) return null;
7020
+ catalog[tool.value] = Object.fromEntries(commandContents.map((content, index) => [content.id, generatedCommands[index]?.fileContent]));
7021
+ }
7022
+ return {
7023
+ catalog,
7024
+ unavailableTools
7025
+ };
7026
+ } catch {
7027
+ return null;
7028
+ }
7029
+ }
7030
+
6768
7031
  //#endregion
6769
7032
  //#region src/tool-init-state.ts
6770
7033
  /**
6771
- * Orthogonal intents (updated 2026-08-15 Asia/Shanghai):
6772
- * 1. Project the unified OpenSpec 1.9 Agent registry into exact skill and command artifact state.
7034
+ * Orthogonal intents (updated 2026-08-28 Asia/Shanghai):
7035
+ * 1. Project the unified OpenSpec 1.11 Agent registry into exact skill and command artifact state.
6773
7036
  * 2. Report partial, stale-version, cleanup-needed, migration-required, and unavailable states from physical evidence.
6774
7037
  * 3. Observe user-global skill roots (e.g. MiniMax Code) without ever cleaning or migrating them here.
6775
7038
  * 4. Preserve bounded reactive directory observation and fresh one-shot cache invalidation.
6776
7039
  * 5. Expose Codex managed-global-prompt observation without treating those prompts as current commands.
7040
+ * 6. Judge generated-by staleness series-aware: either admitted line (1.10.x/1.11.x) is current
7041
+ * for both admitted sessions; only below-admitted generators are stale.
6777
7042
  *
6778
7043
  * Original request (2026-08-01): adapt the complete OpenSpec 1.7 Agent delivery protocol for OpenSpecUI 7.
6779
7044
  * Original request (2026-08-15): "v9的适配需要同时适配 1.8和1.9。"
7045
+ * Original request (2026-08-28): "直接将 0.10.0 和 0.11.0 一起适配,然后发布 v11。"
6780
7046
  */
6781
7047
  /** Pinned source version used when a runtime CLI version is not supplied by the Server owner. */
6782
- const PINNED_AGENT_GENERATOR_VERSION = "1.9.0";
7048
+ const PINNED_AGENT_GENERATOR_VERSION = "1.11.0";
6783
7049
  /** Resolve the physical skills inventory scope for one registry entry. */
6784
7050
  function resolveToolSkillsScope(tool) {
6785
7051
  if (tool.globalSkillsDir) return {
@@ -6929,9 +7195,6 @@ async function readGeneratedByVersion(entries, existingPaths) {
6929
7195
  }
6930
7196
  return null;
6931
7197
  }
6932
- function normalizeCommandContent(content) {
6933
- return content.replace(/^\uFEFF/u, "").replaceAll("\r\n", "\n");
6934
- }
6935
7198
  async function areExpectedCommandContentsCurrent(toolId, entries, existingPaths, commandContents) {
6936
7199
  if (entries.length === 0) return false;
6937
7200
  const expectedContents = commandContents?.[toolId];
@@ -6941,12 +7204,21 @@ async function areExpectedCommandContentsCurrent(toolId, entries, existingPaths,
6941
7204
  const expectedContent = expectedContents[entry.workflow];
6942
7205
  if (!path || expectedContent === void 0) return false;
6943
7206
  const actualContent = await reactiveReadFile(path);
6944
- if (actualContent === null || normalizeCommandContent(actualContent) !== normalizeCommandContent(expectedContent)) return false;
7207
+ if (actualContent === null || !isEquivalentAgentCommandContent(toolId, actualContent, expectedContent)) return false;
6945
7208
  }
6946
7209
  return true;
6947
7210
  }
6948
- function isCurrentGeneratedByVersion(version, expectedVersion, hasAnyArtifacts) {
6949
- return !hasAnyArtifacts || version === expectedVersion;
7211
+ /**
7212
+ * Series-aware generator currency.
7213
+ *
7214
+ * Artifacts whose `generatedBy` stamp names either admitted line (stable 1.10.x or
7215
+ * 1.11.x) are current for both admitted sessions; only below-admitted generators
7216
+ * (and unparseable or future stamps) are stale. The pinned constant never feeds
7217
+ * this comparison — it is fallback display only and never fabricates a live version.
7218
+ */
7219
+ function isCurrentGeneratedByVersion(version, hasAnyArtifacts) {
7220
+ if (!hasAnyArtifacts) return true;
7221
+ return parseOpenSpecCliSeries(version) !== null;
6950
7222
  }
6951
7223
  async function collectCodexCleanup(cleanup) {
6952
7224
  const promptRoot = getExternalCodexCommandObservationRoot();
@@ -7011,7 +7283,7 @@ async function collectCleanup(projectDir, tool, projectRootEntries) {
7011
7283
  kind: projectCleanup$1.paths.length > 0 && globalCleanup ? "mixed" : globalCleanup ? "managed-global-prompts" : "project-artifacts",
7012
7284
  paths,
7013
7285
  workflows,
7014
- replacementLabel: globalCleanup?.replacementLabel ?? "OpenSpec 1.9 Agent delivery"
7286
+ replacementLabel: globalCleanup?.replacementLabel ?? "OpenSpec 1.11 Agent delivery"
7015
7287
  };
7016
7288
  }
7017
7289
  async function collectMigrationEvidence(projectDir, tool, projectRootEntries) {
@@ -7106,7 +7378,7 @@ async function projectToolInitStates(projectDir, options) {
7106
7378
  const migration = migrationEvidence?.state;
7107
7379
  const readiness = !hasAnyArtifacts ? "uninitialized" : isInitialized ? "initialized" : "partial";
7108
7380
  const issues = [];
7109
- if (!isCurrentGeneratedByVersion(generatedByVersion, options.generatorVersion ?? PINNED_AGENT_GENERATOR_VERSION, hasAnyArtifacts)) issues.push("stale-version");
7381
+ if (!isCurrentGeneratedByVersion(generatedByVersion, hasAnyArtifacts)) issues.push("stale-version");
7110
7382
  if (cleanup) issues.push("cleanup-needed");
7111
7383
  if (migration) issues.push("migration-required");
7112
7384
  return {
@@ -7310,75 +7582,6 @@ function applyAgentDeliveryPolicy(config, update) {
7310
7582
  };
7311
7583
  }
7312
7584
 
7313
- //#endregion
7314
- //#region src/agent-command-content.ts
7315
- /**
7316
- * Orthogonal intents (updated 2026-08-15 Asia/Shanghai):
7317
- * 1. Resolve the running OpenSpec CLI's private command-generation boundary without bundling copied prompts.
7318
- * 2. Produce exact per-Agent, per-workflow command contents for physical fingerprint comparison.
7319
- * 3. Fail closed when the configured runner has no importable OpenSpec module or compatible generator contract.
7320
- * 4. Isolate per-tool adapter absence as version-scoped unavailability, keeping unrelated evidence.
7321
- *
7322
- * Original request (2026-08-01): adapt the complete OpenSpec 1.7 Agent delivery protocol for OpenSpecUI 7.
7323
-
7324
- * Original request (2026-08-15): "v9的适配需要同时适配 1.8和1.9。"
7325
- */
7326
- const KNOWN_WORKFLOWS = new Set(OPSX_ALL_WORKFLOWS);
7327
- function isRecord(value) {
7328
- return typeof value === "object" && value !== null;
7329
- }
7330
- function isRuntimeSkillGenerationModule(value) {
7331
- return isRecord(value) && typeof value.getCommandContents === "function";
7332
- }
7333
- function isRuntimeCommandAdapterRegistry(value) {
7334
- if (typeof value !== "object" && typeof value !== "function" || value === null) return false;
7335
- return "get" in value && typeof value.get === "function";
7336
- }
7337
- function isRuntimeCommandGenerationModule(value) {
7338
- return isRecord(value) && isRuntimeCommandAdapterRegistry(value.CommandAdapterRegistry) && typeof value.generateCommands === "function";
7339
- }
7340
- function isRuntimeCommandContent(value) {
7341
- return isRecord(value) && typeof value.id === "string" && KNOWN_WORKFLOWS.has(value.id);
7342
- }
7343
- function isRuntimeGeneratedCommand(value) {
7344
- return isRecord(value) && typeof value.fileContent === "string";
7345
- }
7346
- /**
7347
- * Load exact command contents from the configured OpenSpec CLI.
7348
- *
7349
- * The private generator is intentionally treated as optional evidence. When the runner is not an
7350
- * importable local OpenSpec module, callers receive `null` and commands-only installs cannot be
7351
- * declared current from path existence alone.
7352
- */
7353
- async function loadOpenSpecAgentCommandContents(cliCommand, workflows) {
7354
- try {
7355
- const cliModuleDir = dirname$1((await resolveOpenSpecWorkerInvocation(cliCommand)).modulePath);
7356
- const [skillGenerationModule, commandGenerationModule] = await Promise.all([import(pathToFileURL(resolve(cliModuleDir, "../core/shared/skill-generation.js")).href), import(pathToFileURL(resolve(cliModuleDir, "../core/command-generation/index.js")).href)]);
7357
- if (!isRuntimeSkillGenerationModule(skillGenerationModule) || !isRuntimeCommandGenerationModule(commandGenerationModule)) return null;
7358
- const commandContents = skillGenerationModule.getCommandContents(workflows);
7359
- if (!Array.isArray(commandContents) || !commandContents.every(isRuntimeCommandContent)) return null;
7360
- const catalog = {};
7361
- const unavailableTools = {};
7362
- for (const tool of AGENT_DELIVERY_REGISTRY) {
7363
- if (!tool.command) continue;
7364
- const adapter = commandGenerationModule.CommandAdapterRegistry.get(tool.value);
7365
- if (!adapter) {
7366
- unavailableTools[tool.value] = tool.minCliSeries !== void 0 ? `Command adapter first ships with OpenSpec CLI ${tool.minCliSeries}; this runner does not declare it.` : "This OpenSpec CLI runner does not register the command adapter.";
7367
- continue;
7368
- }
7369
- const generatedCommands = commandGenerationModule.generateCommands(commandContents, adapter);
7370
- if (!Array.isArray(generatedCommands) || generatedCommands.length !== commandContents.length || !generatedCommands.every(isRuntimeGeneratedCommand)) return null;
7371
- catalog[tool.value] = Object.fromEntries(commandContents.map((content, index) => [content.id, generatedCommands[index]?.fileContent]));
7372
- }
7373
- return {
7374
- catalog,
7375
- unavailableTools
7376
- };
7377
- } catch {
7378
- return null;
7379
- }
7380
- }
7381
-
7382
7585
  //#endregion
7383
7586
  //#region src/hooks.ts
7384
7587
  const OPENSPECUI_DOCUMENT_HOOK_VERSION = 1;
@@ -7515,13 +7718,23 @@ function snapshotHasAbsolutePath(snapshot) {
7515
7718
  //#endregion
7516
7719
  //#region src/cli-projection-sequence.ts
7517
7720
  /**
7518
- * Orthogonal intents (created 2026-07-31 Asia/Shanghai):
7721
+ * Orthogonal intents (updated 2026-08-28 Asia/Shanghai):
7519
7722
  * 1. Submit aggregate CLI projection entities lazily while preserving source order.
7520
7723
  * 2. Prevent one aggregate read from pre-filling the shared buffered CLI admission queue.
7724
+ * 3. Document that the capability-gated OpenSpec 1.11 batch status command satisfies the
7725
+ * same one-admission-slot constraint by construction: it is exactly one spawn, so the
7726
+ * status-list aggregates never need a per-entity series for transport admission.
7521
7727
  *
7522
7728
  * Original request (2026-07-31): "系统性地进行修复,因为List页面也有类似的问题。所有可能其它页面都有类似的问题。"
7729
+ * Original request (2026-08-28): "直接将 0.10.0 和 0.11.0 一起适配,然后发布 v11。"
7730
+ */
7731
+ /**
7732
+ * Map CLI-backed projection entities in order, admitting only the current entity.
7733
+ *
7734
+ * A capability-gated single-spawn batch command (see `OpsxKernel`'s `status --all`
7735
+ * transport) is its own serial admission unit and bypasses this helper legitimately;
7736
+ * every transport that still spawns per entity must keep submitting through it.
7523
7737
  */
7524
- /** Map CLI-backed projection entities in order, admitting only the current entity. */
7525
7738
  async function mapCliProjectionSeries(inputs, project) {
7526
7739
  const outputs = [];
7527
7740
  for (const [index, input] of inputs.entries()) outputs.push(await project(input, index));
@@ -7531,16 +7744,20 @@ async function mapCliProjectionSeries(inputs, project) {
7531
7744
  //#endregion
7532
7745
  //#region src/opsx-kernel.ts
7533
7746
  /**
7534
- * Orthogonal intents (updated 2026-08-15 Asia/Shanghai):
7747
+ * Orthogonal intents (updated 2026-08-28 Asia/Shanghai):
7535
7748
  * 1. Maintain reactive CLI-backed projections and their direct typed Projection Work readers.
7536
7749
  * 2. Share and release per-entity streams through one planning-root kernel lifecycle.
7537
7750
  * 3. Keep OpenSpec configuration ownership outside the workflow cache while tracking both YAML filename variants.
7538
7751
  * 4. Preserve typed Status and Artifact/Apply/Archive Instructions provenance with the resolved root selector.
7539
7752
  * 5. Resolve per-command CLI capabilities once per lifetime and gate version-only selectors behind admission.
7753
+ * 6. Serve the status-list projections through the capability-gated OpenSpec 1.11 batch transport
7754
+ * (one `status --all` spawn) with projections, per-change dependencies, and failure evidence
7755
+ * identical to the per-change serial transport; 1.10 sessions keep the serial path.
7540
7756
  *
7541
7757
  * Original request (2026-07-15): "Planning-root adapters and services consume the CLI-resolved root."
7542
7758
  * Original request (2026-07-31): "系统性地进行修复,因为List页面也有类似的问题。所有可能其它页面都有类似的问题。"
7543
7759
  * Original request (2026-08-15): "v9的适配需要同时适配 1.8和1.9。"
7760
+ * Original request (2026-08-28): "直接将 0.10.0 和 0.11.0 一起适配,然后发布 v11。"
7544
7761
  */
7545
7762
  function toRelativePath(root, absolutePath) {
7546
7763
  return relative(root, absolutePath).split(sep).join("/");
@@ -7688,6 +7905,40 @@ function createOpsxCliEvidence(result, command$1, rootSelector) {
7688
7905
  function createOpsxStatusEvidence(result, rootSelector) {
7689
7906
  return OpsxStatusEvidenceSchema.parse(createOpsxCliEvidence(result, "status", rootSelector));
7690
7907
  }
7908
+ /**
7909
+ * Project one CLI Status success payload into the retained ChangeStatus shape.
7910
+ *
7911
+ * Shared by the per-change serial transport and the OpenSpec 1.11 batch transport so both
7912
+ * publish byte-identical projection semantics; only the command evidence differs because
7913
+ * it honestly records the transport that produced the payload.
7914
+ */
7915
+ function projectWorkflowStatus(data, evidence) {
7916
+ return ChangeStatusSchema.parse({
7917
+ changeName: data.changeName,
7918
+ schemaName: data.schemaName,
7919
+ isPlanningComplete: data.isPlanningComplete,
7920
+ applyRequires: data.applyRequires,
7921
+ artifacts: data.artifacts,
7922
+ provenance: {
7923
+ kind: "cli",
7924
+ planningHome: data.planningHome,
7925
+ changeRoot: data.changeRoot,
7926
+ artifactPaths: data.artifactPaths,
7927
+ nextSteps: data.nextSteps,
7928
+ actionContext: data.actionContext,
7929
+ root: data.root,
7930
+ evidence
7931
+ }
7932
+ });
7933
+ }
7934
+ /** Publish artifact relative paths and register the same reactive deps as the serial transport. */
7935
+ async function settleStatusArtifactDeps(projectDir, changeId, status) {
7936
+ const changeRelDir = `openspec/changes/${changeId}`;
7937
+ for (const artifact of status.artifacts) if (artifact.status !== "skipped") {
7938
+ artifact.relativePath = `${changeRelDir}/${artifact.outputPath}`;
7939
+ await touchArtifactOutputDeps(projectDir, changeId, artifact.outputPath);
7940
+ }
7941
+ }
7691
7942
  var OpsxKernel = class {
7692
7943
  projectDir;
7693
7944
  cliExecutor;
@@ -8066,36 +8317,99 @@ var OpsxKernel = class {
8066
8317
  ...schema ? { schema } : {}
8067
8318
  });
8068
8319
  const evidence = createOpsxStatusEvidence(result, this.rootSelector);
8069
- const data = requireCommandData("openspec status", result, CliWorkflowStatusSuccessSchema);
8070
- const status = ChangeStatusSchema.parse({
8071
- changeName: data.changeName,
8072
- schemaName: data.schemaName,
8073
- isPlanningComplete: data.isPlanningComplete,
8074
- applyRequires: data.applyRequires,
8075
- artifacts: data.artifacts,
8076
- provenance: {
8077
- kind: "cli",
8078
- planningHome: data.planningHome,
8079
- changeRoot: data.changeRoot,
8080
- artifactPaths: data.artifactPaths,
8081
- nextSteps: data.nextSteps,
8082
- actionContext: data.actionContext,
8083
- root: data.root,
8084
- evidence
8085
- }
8320
+ const status = projectWorkflowStatus(requireCommandData("openspec status", result, CliWorkflowStatusSuccessSchema), evidence);
8321
+ await settleStatusArtifactDeps(this.projectDir, changeId, status);
8322
+ return status;
8323
+ }
8324
+ /**
8325
+ * Capability-gated OpenSpec 1.11 batch Status transport for the status-list projections.
8326
+ *
8327
+ * Returns `null` when the admitted session cannot run `status --all` (OpenSpec 1.10, an
8328
+ * unverifiable CLI, or a typed capability refusal) so callers keep the per-change serial
8329
+ * transport. One spawn replaces the per-change spawns; healthy entries reuse the exact
8330
+ * per-change projection (shared decoder plus shared reactive dependency touching), a
8331
+ * per-change failure entry stays that change's own evidence, and only an unparseable
8332
+ * envelope or the root-selection null shape rejects the aggregate. The single spawn
8333
+ * occupies one buffered-admission slot by construction, so the serial aggregate
8334
+ * submission constraint holds without mapCliProjectionSeries.
8335
+ */
8336
+ async fetchBatchStatusListProjection(changeIds) {
8337
+ const capabilities = await this.resolveCliCapabilities();
8338
+ if (!capabilities.batchStatus) return null;
8339
+ await touchOpsxProjectDeps(this.projectDir);
8340
+ for (const changeId of changeIds) await touchOpsxChangeDeps(this.projectDir, changeId);
8341
+ const gated = await this.cliExecutor.contracts.workflowStatusAll({
8342
+ ...this.rootSelector,
8343
+ capabilities: { batchStatus: capabilities.batchStatus }
8086
8344
  });
8087
- const changeRelDir = `openspec/changes/${changeId}`;
8088
- for (const artifact of status.artifacts) if (artifact.status !== "skipped") {
8089
- artifact.relativePath = `${changeRelDir}/${artifact.outputPath}`;
8090
- await touchArtifactOutputDeps(this.projectDir, changeId, artifact.outputPath);
8345
+ if (gated.kind === "unavailable") return null;
8346
+ const result = gated.result;
8347
+ const batch = result.data;
8348
+ if (!batch) throw new CliProjectionCommandError(result.contractError || result.stderr.trim() || result.diagnostics.map((diagnostic) => diagnostic.message).join("\n") || `openspec status --all failed (exit ${result.exitCode ?? "null"})`, result);
8349
+ if (batch.root === null) throw new CliProjectionCommandError((batch.status ?? []).map((diagnostic) => diagnostic.message).join("\n") || "openspec status --all failed to select a Root.", result);
8350
+ const statusEvidence = createOpsxStatusEvidence(result, this.rootSelector);
8351
+ const entries = /* @__PURE__ */ new Map();
8352
+ for (const entry of batch.changes) entries.set(entry.changeName, entry);
8353
+ const resolutions = /* @__PURE__ */ new Map();
8354
+ for (const changeId of changeIds) {
8355
+ const entry = entries.get(changeId);
8356
+ if (!entry) {
8357
+ resolutions.set(changeId, { kind: "missing" });
8358
+ continue;
8359
+ }
8360
+ if (isCliBatchStatusEntryFailure(entry)) {
8361
+ resolutions.set(changeId, { kind: "per-change-failure" });
8362
+ continue;
8363
+ }
8364
+ const parsed = CliWorkflowStatusSuccessSchema.safeParse({
8365
+ ...entry,
8366
+ root: batch.root
8367
+ });
8368
+ if (!parsed.success) throw new CliProjectionCommandError(`openspec status --all entry "${changeId}" drifted from the Status contract: ${parsed.error.issues.map((issue) => `${issue.path.join(".") || "<root>"}: ${issue.message}`).join("; ")}`, result);
8369
+ const status = projectWorkflowStatus(parsed.data, statusEvidence);
8370
+ await settleStatusArtifactDeps(this.projectDir, changeId, status);
8371
+ resolutions.set(changeId, {
8372
+ kind: "status",
8373
+ status
8374
+ });
8091
8375
  }
8092
- return status;
8376
+ return {
8377
+ resolutions,
8378
+ evidence: toCliProjectionCommandEvidence(result)
8379
+ };
8093
8380
  }
8094
8381
  async fetchStatusList() {
8095
8382
  await this.ensureChangeIds();
8096
8383
  const changeIds = this._changeIds.get();
8097
- await mapCliProjectionSeries(changeIds, (id) => this.ensureStatus(id));
8098
- return changeIds.map((id) => this.getStatus(id));
8384
+ const batch = await this.fetchBatchStatusListProjection(changeIds);
8385
+ if (!batch) {
8386
+ await mapCliProjectionSeries(changeIds, (id) => this.ensureStatus(id));
8387
+ return changeIds.map((id) => this.getStatus(id));
8388
+ }
8389
+ const statuses = [];
8390
+ for (const changeId of changeIds) {
8391
+ const resolution = batch.resolutions.get(changeId);
8392
+ if (resolution?.kind === "status") {
8393
+ this.retainStatusState(changeId, resolution.status);
8394
+ statuses.push(resolution.status);
8395
+ continue;
8396
+ }
8397
+ try {
8398
+ await this.ensureStatus(changeId);
8399
+ statuses.push(this.getStatus(changeId));
8400
+ } catch {}
8401
+ }
8402
+ return statuses;
8403
+ }
8404
+ /** Publish one batch-projected Status into the existing per-change status cache. */
8405
+ retainStatusState(changeId, status, schema) {
8406
+ const key = `${requireCanonicalOpenSpecEntityId(changeId, "changeId")}:${schema ?? ""}`;
8407
+ let state = this._statuses.get(key);
8408
+ if (!state) {
8409
+ state = new ReactiveState(null);
8410
+ this._statuses.set(key, state);
8411
+ }
8412
+ state.set(status);
8099
8413
  }
8100
8414
  async fetchInstructions(changeId, artifact, schema) {
8101
8415
  await touchOpsxProjectDeps(this.projectDir);
@@ -8251,10 +8565,25 @@ var OpsxKernel = class {
8251
8565
  /** Execute the current Change Status list without joining the Kernel's retained entity streams. */
8252
8566
  async readStatusListProjection() {
8253
8567
  const changeList = await this.fetchChangeListProjection();
8254
- return {
8568
+ const batch = await this.fetchBatchStatusListProjection(changeList.value);
8569
+ if (!batch) return {
8255
8570
  value: await mapCliProjectionSeries(changeList.value, (changeId) => this.fetchStatus(changeId)),
8256
8571
  evidence: changeList.evidence
8257
8572
  };
8573
+ const value = [];
8574
+ for (const changeId of changeList.value) {
8575
+ const resolution = batch.resolutions.get(changeId);
8576
+ if (resolution?.kind === "status") {
8577
+ value.push(resolution.status);
8578
+ continue;
8579
+ }
8580
+ if (resolution?.kind === "per-change-failure") continue;
8581
+ value.push(await this.fetchStatus(changeId));
8582
+ }
8583
+ return {
8584
+ value,
8585
+ evidence: batch.evidence
8586
+ };
8258
8587
  }
8259
8588
  /** Execute one artifact-instructions projection in the caller-owned Work generation. */
8260
8589
  readInstructionsProjection(changeId, artifact, schema) {
@@ -8596,4 +8925,4 @@ const PtyServerMessageSchema = z.discriminatedUnion("type", [
8596
8925
  ]);
8597
8926
 
8598
8927
  //#endregion
8599
- export { ACCESS_GATE_CREDENTIAL_BYTES, AI_TOOLS, ActiveRootMutationSchema, ActiveRootOfficialConfigSchema, ActiveRootRevisionSchema, ActiveRootStructuredUpdateSchema, AgentDeliveryModeSchema, AgentDeliveryPolicyUpdateSchema, AgentDeliveryProfileSchema, AgentDeliveryWorkflowSchema, ApplyInstructionsContextFilesSchema, ApplyInstructionsProjectionSchema, ApplyInstructionsSchema, ApplyTaskSchema, ArchiveInstructionsSchema, 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, CliApplyInstructionsSchema, CliArchiveInstructionsSchema, CliArchiveSchema, CliArtifactInstructionsSchema, CliChangeListSchema, CliCommandTransportSchema, CliContextSchema, CliDiagnosticFailureSchema, CliDiagnosticSchema, CliDoctorReferenceEntrySchema, CliDoctorSchema, CliExecutor, CliJsonValueSchema, CliProjectionCommandError, CliProjectionCommandEvidenceSchema, CliProjectionFailureSchema, CliProjectionInvalidationCauseSchema, CliProjectionNoticeSchema, CliProjectionStateNameSchema, CliReferenceIndexEntrySchema, CliRootSchema, CliRootSourceSchema, CliShowSpecDocumentSchema, CliShowSpecSchema, CliSpecListSchema, CliStoreCleanupSchema, CliStoreDoctorEntrySchema, CliStoreDoctorSchema, CliStoreListSchema, CliStoreMutationSchema, CliStoreSchema, CliStreamTerminationError, CliValidateReportSchema, CliValidateSchema, CliWorkflowStatusSchema, 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, DashboardGitSnapshotSchema, DashboardOverviewSchema, DashboardSummaryIdentitySchema, DashboardSummaryInvalidationCauseSchema, DashboardSummaryInvalidationSchema, DashboardSummaryProjectionSchema, DashboardSummaryProjectionStateSchema, DashboardTrendsProjectionSchema, DeltaOperationType, DeltaSchema, DeltaSpecSchema, DependencyInfoSchema, DocumentTranslationConfigSchema, DocumentTranslationConfigUpdateSchema, DocumentTranslationDisplayModeSchema, DocumentTranslationGlobalSettingsUpdateSchema, EnvironmentDefaultStoreUpdateSchema, EnvironmentGlobalConfigValueSchema, EnvironmentGlobalFileProjectionDataSchema, EnvironmentGlobalFileProjectionStateSchema, EnvironmentGlobalProjectionDataSchema, EnvironmentGlobalProjectionStateSchema, 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_ACTIVE_ROOT_CONTEXT_BYTES, MAX_TRANSLATION_CACHE_ENTRY_LIMIT, MIN_TRANSLATION_CACHE_ENTRY_LIMIT, ManagedLocalCatalogSourceSchema, MarkdownParser, MarkdownReadingPluginRegistry, NOTIFICATION_SOUND_OPTIONS, NOTIFICATION_SOUND_VALUES, NotificationActionSchema, NotificationGroupKeySchema, NotificationPublishInputSchema, NotificationRecordSchema, NotificationSettingsSchema, NotificationSoundSchema, NotificationSourceSchema, OFFICIAL_APP_BASE_URL, OPENSPECUI_DOCUMENT_HOOK_VERSION, OPENSPECUI_RUNTIME_CAPABILITIES, OPENSPECUI_WORKFLOW_HOOK_VERSION, OPENSPEC_SPAWN_MODE_ENV, OPEN_SPEC_DATA_DIRECTORY_NAME, OPEN_SPEC_DATA_HOME_OBSERVATION_TARGETS, OPEN_SPEC_READING_SECTIONS_PROJECTION_ID, OPEN_SPEC_SPEC_PROJECTION_ID, OPSX_AGENT_INVOCATION_MODE_VALUES, OPSX_ALL_WORKFLOWS, OPSX_ARTIFACT_INPUT_ACTIONS, OPSX_CHANGE_INPUT_ACTIONS, OPSX_COMMAND_CAPABLE_WORKFLOWS, OPSX_CORE_PROFILE_WORKFLOWS, OPSX_TEXT_INPUT_ACTIONS, OPSX_WORKFLOW_LABELS, OPSX_WORKFLOW_TO_SKILL_DIR, OPSX_WORKFLOW_TO_SKILL_DIR as TOOL_WORKFLOW_TO_SKILL_DIR, OpenSpecAdapter, OpenSpecCliContractExecutor, OpenSpecDataHomeObserver, OpenSpecUIConfigSchema, OpenSpecUIGlobalSettingsSchema, OpenSpecUIGlobalSettingsUpdateSchema, OpenSpecWatcher, OpsxAgentInvocationModeSchema, OpsxCliEvidenceSchema, OpsxConfigBundleSchema, OpsxConfigSchema, OpsxKernel, OpsxStatusEvidenceSchema, OwnedSpecIdentitySchema, PINNED_AGENT_GENERATOR_VERSION, PlanningCliProjectionDataSchema, PlanningCliProjectionSelectorSchema, PlanningCliProjectionStateSchema, PlanningConfigJsonValueSchema, PlanningConfigReferenceSchema, ProjectBindingUpdateSchema, ProjectWatcher, PtyAttachMessageSchema, PtyBellResponseSchema, PtyBufferResponseSchema, PtyClientMessageSchema, PtyCloseMessageSchema, PtyCreateMessageSchema, PtyCreatedResponseSchema, PtyErrorCodeSchema, PtyErrorResponseSchema, PtyExitResponseSchema, PtyInputMessageSchema, PtyListMessageSchema, PtyListResponseSchema, PtyOutputResponseSchema, PtyPlatformSchema, PtyProcessTitleResponseSchema, PtyResizeMessageSchema, PtyServerMessageSchema, PtyTitleResponseSchema, RUNTIME_INVALIDATION_FACETS, ReactiveContext, ReactiveObservationEnvironment, ReactiveState, ReferencedSpecIdentitySchema, RequirementSchema, RuntimeInvalidationIndex, RuntimeRootInvalidationRegistry, SERVE_PRESENTATION_MODES, SERVICE_TRANSLATION_ENGINE_IDS, SILENT_SOUND_ID, ScenarioStepKeywordSchema, ScenarioStepSchema, SchemaArtifactSchema, SchemaDetailSchema, SchemaInfoSchema, SchemaResolutionSchema, ServePresentationModeSchema, ServiceTranslationEngineIdSchema, SoundConfigIdSchema, SoundIdSchema, SpecCatalogSchema, SpecCommandEvidenceSchema, SpecDocumentProjectionSchema, SpecIdentitySchema, SpecSchema, StoreDoctorResultSchema, StoreListResultSchema, StoreMutationLifecycleEventSchema, StoreMutationResultSchema, StoreMutationSchema, StoreMutationStartResponseSchema, 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, TRANSLATION_CACHE_POLICY_VERSION, TRANSLATION_ENGINE_IDS, TRANSLATION_ENGINE_MANIFESTS, TRANSLATOR_CONTRACT_VERSION, TaskSchema, TemplateContentMapSchema, TemplateContentSchema, TemplatesSchema, TerminalBellSoundSchema, TerminalCommandFieldSchema, TerminalConfigSchema, TerminalControlParser, TerminalCwdTargetSchema, TerminalInvocationSettingsSchema, TerminalNotificationParser, TerminalRendererEngineSchema, TerminalShellProfileSchema, TerminalShellQuoteStyleSchema, TerminalSpawnCommandSchema, TerminalThemeModeSchema, TerminalThemeSchema, TrackedTaskProgressSchema, TranslationCacheEntrySchema, TranslationCacheReadInputSchema, TranslationCacheSettingsSchema, TranslationCacheSettingsUpdateSchema, TranslationCacheStatsSchema, TranslationCacheWriteInputSchema, TranslationDownloadFilePlanSchema, TranslationDownloadGroupPlanSchema, TranslationEngineAssetStateSchema, TranslationEngineAssetStatusSchema, TranslationEngineDependencyStateSchema, TranslationEngineDependencyStatusSchema, TranslationEngineGlobalSettingsSchema, TranslationEngineGlobalSettingsUpdateSchema, TranslationEngineIdSchema, TranslationEngineInstallLogEventSchema, TranslationEngineInstallLogStreamSchema, TranslationEngineLifecycleEventSchema, TranslationEngineLifecycleStatusSchema, TranslationEngineProjectSettingsSchema, TranslationEngineProjectSettingsUpdateSchema, TranslationEngineRuntimeStateSchema, TranslationEngineRuntimeStatusSchema, TranslationLocalCt2SettingsSchema, TranslationLocalCt2SettingsUpdateSchema, TranslationLocalLlamaSettingsSchema, TranslationLocalLlamaSettingsUpdateSchema, TranslationLocalSettingsSchema, TranslationLocalSettingsUpdateSchema, TranslationOpenAISettingsSchema, TranslationOpenAISettingsUpdateSchema, VIRTUAL_PROJECT_DIRNAME, Validator, accessGateFingerprint, acquireWatcher, acquireWatcherRoot, annotateOpenSpecFacts, annotateOpenSpecMarkdown, applyAgentDeliveryPolicy, asEnvUri, buildBackendHealthPayload, buildCliRunnerCandidates, buildEmbeddedUiLaunchUrl, buildHostedLaunchUrl, buildLocalDownloadPlanFromRepositoryFiles, buildLocalDownloadPlanFromRuntimeProfileFiles, buildMarkdownParentMap, buildOpsxEntityDetail, buildRuntimePackageInstallCommand, buildSpecCatalog, builtinOpenSpecReadingPlugin, checkLocalDirectionalModelLanguagePair, classifyStoreCliResult, clearCache, cliProjectionStates, closeAllProjectWatchers, closeAllWatchers, compareAndWriteAtomicPhysicalReactiveFile, computeEnvUri, constantTimeEqual, contextStorage, createApplyInstructionProgress, createCleanCliEnv, createCliProjectionStateSchema, createDocumentChecklistSummary, createFileChangeObservable, createMarkdownReadingDocument, createMarkdownReadingDocumentFromFacts, createOpenSpecReadingPlugin, createPhysicalReactiveDirectory, createStaticSpecCatalogOwnedProjection, createStaticSpecCatalogReferenceProjection, createStaticSpecCatalogReferenceSource, createToolInitStateProjection, createTrackedTaskProgress, createTranslationEngineLifecycleStatus, customHashFromSoundId, deriveTrackedTaskPhase, detectRuntimePackageManager, generateAccessGateCredential, getActiveWatcherCount, getAllToolIds, getAllTools, getAvailableToolIds, getAvailableTools, getBuiltinSoundUrl, getCacheSize, getConfiguredTools, getDefaultCliCommand, getDefaultCliCommandString, getDefaultGlobalSettingsPath, getDetectedProjectTools, getExternalAgentSkillsObservationRoots, getExternalCodexCommandObservationRoot, getManagedLocalTranslationEngineManifest, getMarkdownAnnotation, getMarkdownAnnotationsForFact, getMarkdownFactSpan, getMarkdownHeadingEnd, getMarkdownHeadingFacts, getNotificationGroupKey, getNotificationGroupLabel, getOpenSpecAnnotation, getOpenSpecAnnotationsForFact, getOpenSpecProjectionAnnotation, getOpenSpecReadingSections, getOpsxEntityMetadataPath, getOpsxEntityRootRelativePath, getProjectWatcher, getRootContextCliSelector, getSpecCatalogEntry, getTerminalCommandDefaultValues, getToolById, getToolInitStates, getTranslationEngineLifecycleMessage, getTranslationEngineManifest, getWatcherRuntimeStatus, groupNotifications, hasCapability, inferFileMime, inferFilePreviewKind, inferLocalDirectionalModelLanguagePair, inspectActiveRootOfficialConfig, inspectEnvironmentDefaultStore, inspectProjectBinding, isBackendHealthRuntimeMetadata, isBatchTranslationAbort, isDirectionalManagedLocalTranslationEngineId, isGlobPattern, isHostedBackendHealthResponse, isManagedLocalTranslationEngineId, isMarkdownTaskSourcePath, isOpsxCoreWorkflowSelection, isOpsxGlobPattern, isPreviewableFile, isReferencedSpecIdentity, isSupportedEmbeddedUiUrl, isTerminalMutationStatus, isTerminalRendererEngine, isTextLikeFile, isTextLikeMime, isToolConfigured, isTranslationEngineDependencyReady, isTranslationEngineRuntimeReady, isWatcherPoolInitialized, loadOpenSpecAgentCommandContents, mergeSpecCatalog, normalizeAccessGatePassword, normalizeAgentDeliveryPolicy, normalizeBatchTranslationError, normalizeEmbeddedUiUrl, normalizeHostedAppBaseUrl, normalizeLegacySoundId, normalizeOpsxEntityPath, openSpecAnnotationRules, opsxGlobToRegex, opsxPathMatchesPattern, parseCliCommand, parseCliCommandResult, parseMarkdownFacts, parseMarkdownTasks, parseOpenSpecMarkdownToSpec, parseOpsxEntityMetadata, parseOpsxSchemaDetail, patchActiveRootOfficialFields, projectAnnotatedOpenSpecToSpec, projectOpenSpecMarkdown, projectTaskProjectionsFromMarkdownFiles, quoteTerminalShellArg, reactiveExists, reactiveReadDir, reactiveReadFile, reactiveStat, redactSnapshotForPublication, removePhysicalReactivePath, renderTerminalCommandArgs, renderTerminalSpawnCommandLine, replaceFileAtomically, requireCanonicalOpenSpecEntityId, requireCanonicalOpenSpecSpecId, requireOpenSpecEntityRelativePath, resolveCommandInvocation, resolveGlobalSkillsInventoryDir, resolveHostedAppBaseUrl, resolveOpenSpecDataScope, resolveOpenSpecSpawnMode, resolveRootContext, resolveRuntimePackageInstallStrategy, resolveTerminalShellDefaults, resolveToolSkillsScope, resolveWindowsCommandInvocation, runControlledTranslationTask, runPhysicalReactivePathMutation, selectAgentDeliveryRegistry, selectLocalDownloadGroup, shouldShowTranslationEngineInstallGate, snapshotHasAbsolutePath, sniffGlobalCli, sortMarkdownReadingPlugins, soundIdFromCustomHash, spawnSafe, specDocumentDisplayPath, specIdentityFromRoute, specIdentityKey, specRoutePath, subscribeWatcherRuntimeStatus, terminalNotificationEventToPublishInput, terminateChildProcessTree, terminateWindowsProcessTreeByIdentity, toCliProjectionCommandEvidence, toCliProjectionFailure, toCliProjectionNotice, toMarkdownFactKind, toOpsxDisplayPath, toPersistedGlobalSettings, toStoreFeatureResult, toggleMarkdownTask, trimMarkdownSlice, updateProjectBindingContent, updateReactiveFileCache, validateActiveRootRawYaml, writeAtomicPhysicalReactiveFile, writePhysicalReactiveFile };
8928
+ export { ACCESS_GATE_CREDENTIAL_BYTES, AI_TOOLS, ActiveRootMutationSchema, ActiveRootOfficialConfigSchema, ActiveRootRevisionSchema, ActiveRootStructuredUpdateSchema, AgentDeliveryModeSchema, AgentDeliveryPolicyUpdateSchema, AgentDeliveryProfileSchema, AgentDeliveryWorkflowSchema, ApplyInstructionsContextFilesSchema, ApplyInstructionsProjectionSchema, ApplyInstructionsSchema, ApplyTaskSchema, ArchiveInstructionsSchema, 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, CliApplyInstructionsSchema, CliArchiveInstructionsSchema, CliArchiveSchema, CliArtifactInstructionsSchema, CliChangeListSchema, CliCommandTransportSchema, CliContextSchema, CliDiagnosticFailureSchema, CliDiagnosticSchema, CliDoctorReferenceEntrySchema, CliDoctorSchema, CliExecutor, CliJsonValueSchema, CliProjectionCommandError, CliProjectionCommandEvidenceSchema, CliProjectionFailureSchema, CliProjectionInvalidationCauseSchema, CliProjectionNoticeSchema, CliProjectionStateNameSchema, CliReferenceIndexEntrySchema, CliRootSchema, CliRootSourceSchema, CliShowSpecDocumentSchema, CliShowSpecSchema, CliSpecListSchema, CliStoreCleanupSchema, CliStoreDoctorEntrySchema, CliStoreDoctorSchema, CliStoreListSchema, CliStoreMutationSchema, CliStoreSchema, CliStreamTerminationError, CliValidateReportSchema, CliValidateSchema, CliWorkflowStatusSchema, 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, DashboardGitSnapshotSchema, DashboardOverviewSchema, DashboardSummaryIdentitySchema, DashboardSummaryInvalidationCauseSchema, DashboardSummaryInvalidationSchema, DashboardSummaryProjectionSchema, DashboardSummaryProjectionStateSchema, DashboardTrendsProjectionSchema, DeltaOperationType, DeltaSchema, DeltaSpecSchema, DependencyInfoSchema, DocumentTranslationConfigSchema, DocumentTranslationConfigUpdateSchema, DocumentTranslationDisplayModeSchema, DocumentTranslationGlobalSettingsUpdateSchema, EnvironmentDefaultStoreUpdateSchema, EnvironmentGlobalConfigValueSchema, EnvironmentGlobalFileProjectionDataSchema, EnvironmentGlobalFileProjectionStateSchema, EnvironmentGlobalProjectionDataSchema, EnvironmentGlobalProjectionStateSchema, 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_ACTIVE_ROOT_CONTEXT_BYTES, MAX_TRANSLATION_CACHE_ENTRY_LIMIT, MIN_TRANSLATION_CACHE_ENTRY_LIMIT, ManagedLocalCatalogSourceSchema, MarkdownParser, MarkdownReadingPluginRegistry, NOTIFICATION_SOUND_OPTIONS, NOTIFICATION_SOUND_VALUES, NotificationActionSchema, NotificationGroupKeySchema, NotificationPublishInputSchema, NotificationRecordSchema, NotificationSettingsSchema, NotificationSoundSchema, NotificationSourceSchema, OFFICIAL_APP_BASE_URL, OPENCODE_PROVIDED_ARGUMENTS_LINE, OPENSPECUI_DOCUMENT_HOOK_VERSION, OPENSPECUI_RUNTIME_CAPABILITIES, OPENSPECUI_WORKFLOW_HOOK_VERSION, OPENSPEC_SPAWN_MODE_ENV, OPEN_SPEC_DATA_DIRECTORY_NAME, OPEN_SPEC_DATA_HOME_OBSERVATION_TARGETS, OPEN_SPEC_READING_SECTIONS_PROJECTION_ID, OPEN_SPEC_SPEC_PROJECTION_ID, OPSX_AGENT_INVOCATION_MODE_VALUES, OPSX_ALL_WORKFLOWS, OPSX_ARTIFACT_INPUT_ACTIONS, OPSX_CHANGE_INPUT_ACTIONS, OPSX_COMMAND_CAPABLE_WORKFLOWS, OPSX_CORE_PROFILE_WORKFLOWS, OPSX_TEXT_INPUT_ACTIONS, OPSX_WORKFLOW_LABELS, OPSX_WORKFLOW_TO_SKILL_DIR, OPSX_WORKFLOW_TO_SKILL_DIR as TOOL_WORKFLOW_TO_SKILL_DIR, OpenSpecAdapter, OpenSpecCliContractExecutor, OpenSpecDataHomeObserver, OpenSpecUIConfigSchema, OpenSpecUIGlobalSettingsSchema, OpenSpecUIGlobalSettingsUpdateSchema, OpenSpecWatcher, OpsxAgentInvocationModeSchema, OpsxCliEvidenceSchema, OpsxConfigBundleSchema, OpsxConfigSchema, OpsxKernel, OpsxStatusEvidenceSchema, OwnedSpecIdentitySchema, PINNED_AGENT_GENERATOR_VERSION, PlanningCliProjectionDataSchema, PlanningCliProjectionSelectorSchema, PlanningCliProjectionStateSchema, PlanningConfigJsonValueSchema, PlanningConfigReferenceSchema, ProjectBindingUpdateSchema, ProjectWatcher, PtyAttachMessageSchema, PtyBellResponseSchema, PtyBufferResponseSchema, PtyClientMessageSchema, PtyCloseMessageSchema, PtyCreateMessageSchema, PtyCreatedResponseSchema, PtyErrorCodeSchema, PtyErrorResponseSchema, PtyExitResponseSchema, PtyInputMessageSchema, PtyListMessageSchema, PtyListResponseSchema, PtyOutputResponseSchema, PtyPlatformSchema, PtyProcessTitleResponseSchema, PtyResizeMessageSchema, PtyServerMessageSchema, PtyTitleResponseSchema, RUNTIME_INVALIDATION_FACETS, ReactiveContext, ReactiveObservationEnvironment, ReactiveState, ReferencedSpecIdentitySchema, RequirementSchema, RuntimeInvalidationIndex, RuntimeRootInvalidationRegistry, SERVE_PRESENTATION_MODES, SERVICE_TRANSLATION_ENGINE_IDS, SHARED_AGENTS_SKILLS_OWNER_CANDIDATES, SHARED_AGENTS_SKILLS_ROOT, SHARED_SKILLS_TARGET_MARKER, SILENT_SOUND_ID, ScenarioStepKeywordSchema, ScenarioStepSchema, SchemaArtifactSchema, SchemaDetailSchema, SchemaInfoSchema, SchemaResolutionSchema, ServePresentationModeSchema, ServiceTranslationEngineIdSchema, SoundConfigIdSchema, SoundIdSchema, SpecCatalogSchema, SpecCommandEvidenceSchema, SpecDocumentProjectionSchema, SpecIdentitySchema, SpecSchema, StoreDoctorResultSchema, StoreListResultSchema, StoreMutationLifecycleEventSchema, StoreMutationResultSchema, StoreMutationSchema, StoreMutationStartResponseSchema, 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, TRANSLATION_CACHE_POLICY_VERSION, TRANSLATION_ENGINE_IDS, TRANSLATION_ENGINE_MANIFESTS, TRANSLATOR_CONTRACT_VERSION, TaskSchema, TemplateContentMapSchema, TemplateContentSchema, TemplatesSchema, TerminalBellSoundSchema, TerminalCommandFieldSchema, TerminalConfigSchema, TerminalControlParser, TerminalCwdTargetSchema, TerminalInvocationSettingsSchema, TerminalNotificationParser, TerminalRendererEngineSchema, TerminalShellProfileSchema, TerminalShellQuoteStyleSchema, TerminalSpawnCommandSchema, TerminalThemeModeSchema, TerminalThemeSchema, TrackedTaskProgressSchema, TranslationCacheEntrySchema, TranslationCacheReadInputSchema, TranslationCacheSettingsSchema, TranslationCacheSettingsUpdateSchema, TranslationCacheStatsSchema, TranslationCacheWriteInputSchema, TranslationDownloadFilePlanSchema, TranslationDownloadGroupPlanSchema, TranslationEngineAssetStateSchema, TranslationEngineAssetStatusSchema, TranslationEngineDependencyStateSchema, TranslationEngineDependencyStatusSchema, TranslationEngineGlobalSettingsSchema, TranslationEngineGlobalSettingsUpdateSchema, TranslationEngineIdSchema, TranslationEngineInstallLogEventSchema, TranslationEngineInstallLogStreamSchema, TranslationEngineLifecycleEventSchema, TranslationEngineLifecycleStatusSchema, TranslationEngineProjectSettingsSchema, TranslationEngineProjectSettingsUpdateSchema, TranslationEngineRuntimeStateSchema, TranslationEngineRuntimeStatusSchema, TranslationLocalCt2SettingsSchema, TranslationLocalCt2SettingsUpdateSchema, TranslationLocalLlamaSettingsSchema, TranslationLocalLlamaSettingsUpdateSchema, TranslationLocalSettingsSchema, TranslationLocalSettingsUpdateSchema, TranslationOpenAISettingsSchema, TranslationOpenAISettingsUpdateSchema, VIRTUAL_PROJECT_DIRNAME, Validator, accessGateFingerprint, acquireWatcher, acquireWatcherRoot, annotateOpenSpecFacts, annotateOpenSpecMarkdown, applyAgentDeliveryPolicy, asEnvUri, buildBackendHealthPayload, buildCliRunnerCandidates, buildEmbeddedUiLaunchUrl, buildHostedLaunchUrl, buildLocalDownloadPlanFromRepositoryFiles, buildLocalDownloadPlanFromRuntimeProfileFiles, buildMarkdownParentMap, buildOpsxEntityDetail, buildRuntimePackageInstallCommand, buildSpecCatalog, builtinOpenSpecReadingPlugin, checkLocalDirectionalModelLanguagePair, classifyStoreCliResult, clearCache, cliProjectionStates, closeAllProjectWatchers, closeAllWatchers, compareAndWriteAtomicPhysicalReactiveFile, computeEnvUri, constantTimeEqual, contextStorage, createApplyInstructionProgress, createCleanCliEnv, createCliProjectionStateSchema, createDocumentChecklistSummary, createFileChangeObservable, createMarkdownReadingDocument, createMarkdownReadingDocumentFromFacts, createOpenSpecReadingPlugin, createPhysicalReactiveDirectory, createStaticSpecCatalogOwnedProjection, createStaticSpecCatalogReferenceProjection, createStaticSpecCatalogReferenceSource, createToolInitStateProjection, createTrackedTaskProgress, createTranslationEngineLifecycleStatus, customHashFromSoundId, deriveTrackedTaskPhase, detectRuntimePackageManager, generateAccessGateCredential, getActiveWatcherCount, getAllToolIds, getAllTools, getAvailableToolIds, getAvailableTools, getBuiltinSoundUrl, getCacheSize, getConfiguredTools, getDefaultCliCommand, getDefaultCliCommandString, getDefaultGlobalSettingsPath, getDetectedProjectTools, getExternalAgentSkillsObservationRoots, getExternalCodexCommandObservationRoot, getManagedLocalTranslationEngineManifest, getMarkdownAnnotation, getMarkdownAnnotationsForFact, getMarkdownFactSpan, getMarkdownHeadingEnd, getMarkdownHeadingFacts, getNotificationGroupKey, getNotificationGroupLabel, getOpenSpecAnnotation, getOpenSpecAnnotationsForFact, getOpenSpecProjectionAnnotation, getOpenSpecReadingSections, getOpsxEntityMetadataPath, getOpsxEntityRootRelativePath, getProjectWatcher, getRootContextCliSelector, getSpecCatalogEntry, getTerminalCommandDefaultValues, getToolById, getToolInitStates, getTranslationEngineLifecycleMessage, getTranslationEngineManifest, getWatcherRuntimeStatus, groupNotifications, hasCapability, inferFileMime, inferFilePreviewKind, inferLocalDirectionalModelLanguagePair, inspectActiveRootOfficialConfig, inspectEnvironmentDefaultStore, inspectProjectBinding, isBackendHealthRuntimeMetadata, isBatchTranslationAbort, isDirectionalManagedLocalTranslationEngineId, isEquivalentAgentCommandContent, isGlobPattern, isHostedBackendHealthResponse, isManagedLocalTranslationEngineId, isMarkdownTaskSourcePath, isOpsxCoreWorkflowSelection, isOpsxGlobPattern, isPreviewableFile, isReferencedSpecIdentity, isSupportedEmbeddedUiUrl, isTerminalMutationStatus, isTerminalRendererEngine, isTextLikeFile, isTextLikeMime, isToolConfigured, isTranslationEngineDependencyReady, isTranslationEngineRuntimeReady, isWatcherPoolInitialized, loadOpenSpecAgentCommandContents, mergeSpecCatalog, normalizeAccessGatePassword, normalizeAgentDeliveryPolicy, normalizeBatchTranslationError, normalizeEmbeddedUiUrl, normalizeHostedAppBaseUrl, normalizeLegacySoundId, normalizeOpsxEntityPath, openSpecAnnotationRules, opsxGlobToRegex, opsxPathMatchesPattern, parseCliCommand, parseCliCommandResult, parseMarkdownFacts, parseMarkdownTasks, parseOpenSpecCliSeries, parseOpenSpecMarkdownToSpec, parseOpsxEntityMetadata, parseOpsxSchemaDetail, patchActiveRootOfficialFields, projectAnnotatedOpenSpecToSpec, projectOpenSpecMarkdown, projectTaskProjectionsFromMarkdownFiles, quoteTerminalShellArg, reactiveExists, reactiveReadDir, reactiveReadFile, reactiveStat, redactSnapshotForPublication, removePhysicalReactivePath, renderTerminalCommandArgs, renderTerminalSpawnCommandLine, replaceFileAtomically, requireCanonicalOpenSpecEntityId, requireCanonicalOpenSpecSpecId, requireOpenSpecEntityRelativePath, resolveCommandInvocation, resolveGlobalSkillsInventoryDir, resolveHostedAppBaseUrl, resolveOpenSpecDataScope, resolveOpenSpecSpawnMode, resolveRootContext, resolveRuntimePackageInstallStrategy, resolveTerminalShellDefaults, resolveToolSkillsScope, resolveWindowsCommandInvocation, runControlledTranslationTask, runPhysicalReactivePathMutation, selectAgentDeliveryRegistry, selectLocalDownloadGroup, shouldShowTranslationEngineInstallGate, snapshotHasAbsolutePath, sniffGlobalCli, sortMarkdownReadingPlugins, soundIdFromCustomHash, spawnSafe, specDocumentDisplayPath, specIdentityFromRoute, specIdentityKey, specRoutePath, subscribeWatcherRuntimeStatus, terminalNotificationEventToPublishInput, terminateChildProcessTree, terminateWindowsProcessTreeByIdentity, toCliProjectionCommandEvidence, toCliProjectionFailure, toCliProjectionNotice, toMarkdownFactKind, toOpsxDisplayPath, toPersistedGlobalSettings, toStoreFeatureResult, toggleMarkdownTask, trimMarkdownSlice, updateProjectBindingContent, updateReactiveFileCache, validateActiveRootRawYaml, writeAtomicPhysicalReactiveFile, writePhysicalReactiveFile };