@openspecui/core 1.2.0 → 1.5.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.
package/dist/index.d.mts CHANGED
@@ -17,13 +17,13 @@ declare const ChangeFileSchema: z.ZodObject<{
17
17
  /** Optional byte size for files */
18
18
  size: z.ZodOptional<z.ZodNumber>;
19
19
  }, "strip", z.ZodTypeAny, {
20
- path: string;
21
20
  type: "file" | "directory";
21
+ path: string;
22
22
  content?: string | undefined;
23
23
  size?: number | undefined;
24
24
  }, {
25
- path: string;
26
25
  type: "file" | "directory";
26
+ path: string;
27
27
  content?: string | undefined;
28
28
  size?: number | undefined;
29
29
  }>;
@@ -1022,53 +1022,6 @@ declare function clearCache(path?: string): void;
1022
1022
  */
1023
1023
  declare function getCacheSize(): number;
1024
1024
  //#endregion
1025
- //#region src/reactive-fs/watcher-pool.d.ts
1026
- /**
1027
- * 初始化 watcher pool
1028
- *
1029
- * 必须在使用 acquireWatcher 之前调用。
1030
- * 通常由 server 在启动时调用。
1031
- *
1032
- * @param projectDir 项目根目录
1033
- */
1034
- declare function initWatcherPool(projectDir: string): Promise<void>;
1035
- /**
1036
- * 获取或创建文件/目录监听器
1037
- *
1038
- * 特性:
1039
- * - 使用 @parcel/watcher 监听项目根目录
1040
- * - 自动处理新创建的目录(解决 init 后无法监听的问题)
1041
- * - 同一路径共享订阅
1042
- * - 引用计数管理生命周期
1043
- * - 内置防抖机制
1044
- *
1045
- * @param path 要监听的路径
1046
- * @param onChange 变更回调
1047
- * @param options 监听选项
1048
- * @returns 释放函数,调用后取消订阅
1049
- */
1050
- declare function acquireWatcher(path: string, onChange: () => void, options?: {
1051
- recursive?: boolean;
1052
- debounceMs?: number;
1053
- onError?: () => void;
1054
- }): () => void;
1055
- /**
1056
- * 获取当前活跃的监听器数量(用于调试)
1057
- */
1058
- declare function getActiveWatcherCount(): number;
1059
- /**
1060
- * 关闭所有监听器(用于测试清理)
1061
- */
1062
- declare function closeAllWatchers(): Promise<void>;
1063
- /**
1064
- * 检查 watcher pool 是否已初始化
1065
- */
1066
- declare function isWatcherPoolInitialized(): boolean;
1067
- /**
1068
- * 获取当前监听的项目目录
1069
- */
1070
- declare function getWatchedProjectDir(): string | null;
1071
- //#endregion
1072
1025
  //#region src/reactive-fs/project-watcher.d.ts
1073
1026
  /**
1074
1027
  * 事件类型
@@ -1085,6 +1038,15 @@ interface WatchEvent {
1085
1038
  * 路径订阅回调
1086
1039
  */
1087
1040
  type PathCallback = (events: WatchEvent[]) => void;
1041
+ /** watcher 重建原因 */
1042
+ type ProjectWatcherReinitializeReason = 'drop-events' | 'watcher-error' | 'missing-project-dir' | 'project-dir-replaced' | 'manual';
1043
+ /** watcher 运行时状态(用于调试和运维观测) */
1044
+ interface ProjectWatcherRuntimeStatus {
1045
+ generation: number;
1046
+ reinitializeCount: number;
1047
+ lastReinitializeReason: ProjectWatcherReinitializeReason | null;
1048
+ reinitializeReasonCounts: Readonly<Record<ProjectWatcherReinitializeReason, number>>;
1049
+ }
1088
1050
  /**
1089
1051
  * 项目监听器
1090
1052
  *
@@ -1107,17 +1069,18 @@ declare class ProjectWatcher {
1107
1069
  private ignore;
1108
1070
  private initialized;
1109
1071
  private initPromise;
1110
- private healthCheckTimer;
1111
- private lastEventTime;
1112
- private healthCheckPending;
1113
- private enableHealthCheck;
1114
1072
  private reinitializeTimer;
1115
1073
  private reinitializePending;
1074
+ private reinitializeReasonPending;
1075
+ private pathLivenessTimer;
1076
+ private projectDirFingerprint;
1077
+ private generation;
1078
+ private reinitializeCount;
1079
+ private lastReinitializeReason;
1080
+ private reinitializeReasonCounts;
1116
1081
  constructor(projectDir: string, options?: {
1117
1082
  debounceMs?: number;
1118
1083
  ignore?: string[];
1119
- /** 是否启用健康检查(默认 true) */
1120
- enableHealthCheck?: boolean;
1121
1084
  });
1122
1085
  /**
1123
1086
  * 初始化 watcher
@@ -1127,13 +1090,30 @@ declare class ProjectWatcher {
1127
1090
  private doInit;
1128
1091
  /**
1129
1092
  * 处理 watcher 错误
1130
- * 对于 FSEvents dropped 错误,触发延迟重建
1093
+ * 统一走错误驱动重建流程
1131
1094
  */
1132
1095
  private handleWatcherError;
1133
1096
  /**
1134
1097
  * 延迟重建 watcher(防抖,避免频繁重建)
1135
1098
  */
1136
1099
  private scheduleReinitialize;
1100
+ /**
1101
+ * 读取项目目录指纹(目录不存在时返回 null)
1102
+ * 用于检测 path 对应实体是否被替换(inode/dev 漂移)
1103
+ */
1104
+ private getProjectDirFingerprint;
1105
+ /**
1106
+ * 启动路径语义监测(避免 watcher 绑定到已失效句柄)
1107
+ */
1108
+ private startPathLivenessMonitor;
1109
+ /**
1110
+ * 停止路径语义监测
1111
+ */
1112
+ private stopPathLivenessMonitor;
1113
+ /**
1114
+ * 只读检查 projectDir 是否仍指向初始化时的目录实体
1115
+ */
1116
+ private checkPathLiveness;
1137
1117
  /**
1138
1118
  * 处理原始事件
1139
1119
  */
@@ -1180,26 +1160,13 @@ declare class ProjectWatcher {
1180
1160
  */
1181
1161
  get isInitialized(): boolean;
1182
1162
  /**
1183
- * 启动健康检查定时器
1184
- */
1185
- private startHealthCheck;
1186
- /**
1187
- * 停止健康检查定时器
1188
- */
1189
- private stopHealthCheck;
1190
- /**
1191
- * 执行健康检查
1192
- *
1193
- * 工作流程:
1194
- * 1. 如果最近有事件,无需检查
1195
- * 2. 如果上次探测还在等待中,说明 watcher 可能失效,尝试重建
1196
- * 3. 否则,创建临时文件触发事件,等待下次检查验证
1163
+ * 获取 watcher 运行时状态
1197
1164
  */
1198
- private performHealthCheck;
1165
+ get runtimeStatus(): ProjectWatcherRuntimeStatus;
1199
1166
  /**
1200
- * 发送探测:通过 utimesSync 修改项目目录的时间戳来触发 watcher 事件
1167
+ * 记录重建统计
1201
1168
  */
1202
- private sendProbe;
1169
+ private markReinitialized;
1203
1170
  /**
1204
1171
  * 重新初始化 watcher
1205
1172
  */
@@ -1222,6 +1189,63 @@ declare function getProjectWatcher(projectDir: string, options?: ConstructorPara
1222
1189
  */
1223
1190
  declare function closeAllProjectWatchers(): Promise<void>;
1224
1191
  //#endregion
1192
+ //#region src/reactive-fs/watcher-pool.d.ts
1193
+ /** watcher 运行时状态(供 server 订阅) */
1194
+ interface WatcherRuntimeStatus extends ProjectWatcherRuntimeStatus {
1195
+ projectDir: string | null;
1196
+ initialized: boolean;
1197
+ subscriptionCount: number;
1198
+ }
1199
+ /**
1200
+ * 初始化 watcher pool
1201
+ *
1202
+ * 必须在使用 acquireWatcher 之前调用。
1203
+ * 通常由 server 在启动时调用。
1204
+ *
1205
+ * @param projectDir 项目根目录
1206
+ */
1207
+ declare function initWatcherPool(projectDir: string): Promise<void>;
1208
+ /**
1209
+ * 获取或创建文件/目录监听器
1210
+ *
1211
+ * 特性:
1212
+ * - 使用 @parcel/watcher 监听项目根目录
1213
+ * - 自动处理新创建的目录(解决 init 后无法监听的问题)
1214
+ * - 同一路径共享订阅
1215
+ * - 引用计数管理生命周期
1216
+ * - 内置防抖机制
1217
+ *
1218
+ * @param path 要监听的路径
1219
+ * @param onChange 变更回调
1220
+ * @param options 监听选项
1221
+ * @returns 释放函数,调用后取消订阅
1222
+ */
1223
+ declare function acquireWatcher(path: string, onChange: () => void, options?: {
1224
+ recursive?: boolean;
1225
+ debounceMs?: number;
1226
+ onError?: () => void;
1227
+ }): () => void;
1228
+ /**
1229
+ * 获取当前活跃的监听器数量(用于调试)
1230
+ */
1231
+ declare function getActiveWatcherCount(): number;
1232
+ /**
1233
+ * 关闭所有监听器(用于测试清理)
1234
+ */
1235
+ declare function closeAllWatchers(): Promise<void>;
1236
+ /**
1237
+ * 检查 watcher pool 是否已初始化
1238
+ */
1239
+ declare function isWatcherPoolInitialized(): boolean;
1240
+ /**
1241
+ * 获取当前监听的项目目录
1242
+ */
1243
+ declare function getWatchedProjectDir(): string | null;
1244
+ /**
1245
+ * 获取 watcher 运行时状态
1246
+ */
1247
+ declare function getWatcherRuntimeStatus(): WatcherRuntimeStatus | null;
1248
+ //#endregion
1225
1249
  //#region src/watcher.d.ts
1226
1250
  /**
1227
1251
  * File change event types
@@ -1284,6 +1308,9 @@ declare function createFileChangeObservable(watcher: OpenSpecWatcher): {
1284
1308
  };
1285
1309
  //#endregion
1286
1310
  //#region src/config.d.ts
1311
+ declare const TerminalRendererEngineSchema: z.ZodEnum<["xterm", "ghostty"]>;
1312
+ type TerminalRendererEngine = z.infer<typeof TerminalRendererEngineSchema>;
1313
+ declare function isTerminalRendererEngine(value: string): value is TerminalRendererEngine;
1287
1314
  type RunnerId = 'configured' | 'openspec' | 'npx' | 'bunx' | 'deno' | 'pnpm' | 'yarn';
1288
1315
  interface CliRunnerCandidate {
1289
1316
  id: RunnerId;
@@ -1355,20 +1382,31 @@ declare const TerminalConfigSchema: z.ZodObject<{
1355
1382
  cursorBlink: z.ZodDefault<z.ZodBoolean>;
1356
1383
  cursorStyle: z.ZodDefault<z.ZodEnum<["block", "underline", "bar"]>>;
1357
1384
  scrollback: z.ZodDefault<z.ZodNumber>;
1385
+ rendererEngine: z.ZodDefault<z.ZodString>;
1358
1386
  }, "strip", z.ZodTypeAny, {
1359
1387
  fontSize: number;
1360
1388
  fontFamily: string;
1361
1389
  cursorBlink: boolean;
1362
1390
  cursorStyle: "block" | "underline" | "bar";
1363
1391
  scrollback: number;
1392
+ rendererEngine: string;
1364
1393
  }, {
1365
1394
  fontSize?: number | undefined;
1366
1395
  fontFamily?: string | undefined;
1367
1396
  cursorBlink?: boolean | undefined;
1368
1397
  cursorStyle?: "block" | "underline" | "bar" | undefined;
1369
1398
  scrollback?: number | undefined;
1399
+ rendererEngine?: string | undefined;
1370
1400
  }>;
1371
1401
  type TerminalConfig = z.infer<typeof TerminalConfigSchema>;
1402
+ declare const DashboardConfigSchema: z.ZodObject<{
1403
+ trendPointLimit: z.ZodDefault<z.ZodNumber>;
1404
+ }, "strip", z.ZodTypeAny, {
1405
+ trendPointLimit: number;
1406
+ }, {
1407
+ trendPointLimit?: number | undefined;
1408
+ }>;
1409
+ type DashboardConfig = z.infer<typeof DashboardConfigSchema>;
1372
1410
  /**
1373
1411
  * OpenSpecUI 配置 Schema
1374
1412
  *
@@ -1397,18 +1435,29 @@ declare const OpenSpecUIConfigSchema: z.ZodObject<{
1397
1435
  cursorBlink: z.ZodDefault<z.ZodBoolean>;
1398
1436
  cursorStyle: z.ZodDefault<z.ZodEnum<["block", "underline", "bar"]>>;
1399
1437
  scrollback: z.ZodDefault<z.ZodNumber>;
1438
+ rendererEngine: z.ZodDefault<z.ZodString>;
1400
1439
  }, "strip", z.ZodTypeAny, {
1401
1440
  fontSize: number;
1402
1441
  fontFamily: string;
1403
1442
  cursorBlink: boolean;
1404
1443
  cursorStyle: "block" | "underline" | "bar";
1405
1444
  scrollback: number;
1445
+ rendererEngine: string;
1406
1446
  }, {
1407
1447
  fontSize?: number | undefined;
1408
1448
  fontFamily?: string | undefined;
1409
1449
  cursorBlink?: boolean | undefined;
1410
1450
  cursorStyle?: "block" | "underline" | "bar" | undefined;
1411
1451
  scrollback?: number | undefined;
1452
+ rendererEngine?: string | undefined;
1453
+ }>>;
1454
+ /** Dashboard 配置 */
1455
+ dashboard: z.ZodDefault<z.ZodObject<{
1456
+ trendPointLimit: z.ZodDefault<z.ZodNumber>;
1457
+ }, "strip", z.ZodTypeAny, {
1458
+ trendPointLimit: number;
1459
+ }, {
1460
+ trendPointLimit?: number | undefined;
1412
1461
  }>>;
1413
1462
  }, "strip", z.ZodTypeAny, {
1414
1463
  cli: {
@@ -1422,6 +1471,10 @@ declare const OpenSpecUIConfigSchema: z.ZodObject<{
1422
1471
  cursorBlink: boolean;
1423
1472
  cursorStyle: "block" | "underline" | "bar";
1424
1473
  scrollback: number;
1474
+ rendererEngine: string;
1475
+ };
1476
+ dashboard: {
1477
+ trendPointLimit: number;
1425
1478
  };
1426
1479
  }, {
1427
1480
  cli?: {
@@ -1435,6 +1488,10 @@ declare const OpenSpecUIConfigSchema: z.ZodObject<{
1435
1488
  cursorBlink?: boolean | undefined;
1436
1489
  cursorStyle?: "block" | "underline" | "bar" | undefined;
1437
1490
  scrollback?: number | undefined;
1491
+ rendererEngine?: string | undefined;
1492
+ } | undefined;
1493
+ dashboard?: {
1494
+ trendPointLimit?: number | undefined;
1438
1495
  } | undefined;
1439
1496
  }>;
1440
1497
  type OpenSpecUIConfig = z.infer<typeof OpenSpecUIConfigSchema>;
@@ -1445,6 +1502,7 @@ type OpenSpecUIConfigUpdate = {
1445
1502
  };
1446
1503
  theme?: OpenSpecUIConfig['theme'];
1447
1504
  terminal?: Partial<TerminalConfig>;
1505
+ dashboard?: Partial<DashboardConfig>;
1448
1506
  };
1449
1507
  /** 默认配置(静态,用于测试和类型) */
1450
1508
  declare const DEFAULT_CONFIG: OpenSpecUIConfig;
@@ -1663,6 +1721,99 @@ declare function getConfiguredTools(projectDir: string): Promise<string[]>;
1663
1721
  */
1664
1722
  declare function isToolConfigured(projectDir: string, toolId: string): Promise<boolean>;
1665
1723
  //#endregion
1724
+ //#region src/dashboard-types.d.ts
1725
+ declare const DASHBOARD_METRIC_KEYS: readonly ["specifications", "requirements", "activeChanges", "inProgressChanges", "completedChanges", "taskCompletionPercent"];
1726
+ type DashboardMetricKey = (typeof DASHBOARD_METRIC_KEYS)[number];
1727
+ interface DashboardTrendPoint {
1728
+ ts: number;
1729
+ value: number;
1730
+ }
1731
+ interface DashboardTriColorTrendPoint {
1732
+ ts: number;
1733
+ add: number;
1734
+ modify: number;
1735
+ delete: number;
1736
+ }
1737
+ type DashboardTrendKind = 'monotonic' | 'bidirectional';
1738
+ interface DashboardTrendMeta {
1739
+ pointLimit: number;
1740
+ lastUpdatedAt: number;
1741
+ }
1742
+ type DashboardCardAvailability = {
1743
+ state: 'ok';
1744
+ } | {
1745
+ state: 'invalid';
1746
+ reason: 'semantic-uncomputable' | 'objective-history-unavailable';
1747
+ };
1748
+ interface DashboardSummary {
1749
+ specifications: number;
1750
+ requirements: number;
1751
+ activeChanges: number;
1752
+ inProgressChanges: number;
1753
+ completedChanges: number;
1754
+ archivedTasksCompleted: number;
1755
+ tasksTotal: number;
1756
+ tasksCompleted: number;
1757
+ taskCompletionPercent: number | null;
1758
+ }
1759
+ interface DashboardGitDiffStats {
1760
+ files: number;
1761
+ insertions: number;
1762
+ deletions: number;
1763
+ }
1764
+ interface DashboardGitCommitEntry {
1765
+ type: 'commit';
1766
+ hash: string;
1767
+ title: string;
1768
+ relatedChanges: string[];
1769
+ diff: DashboardGitDiffStats;
1770
+ }
1771
+ interface DashboardGitUncommittedEntry {
1772
+ type: 'uncommitted';
1773
+ title: string;
1774
+ relatedChanges: string[];
1775
+ diff: DashboardGitDiffStats;
1776
+ }
1777
+ type DashboardGitEntry = DashboardGitCommitEntry | DashboardGitUncommittedEntry;
1778
+ interface DashboardGitWorktree {
1779
+ path: string;
1780
+ relativePath: string;
1781
+ branchName: string;
1782
+ isCurrent: boolean;
1783
+ ahead: number;
1784
+ behind: number;
1785
+ diff: DashboardGitDiffStats;
1786
+ entries: DashboardGitEntry[];
1787
+ }
1788
+ interface DashboardGitSnapshot {
1789
+ defaultBranch: string;
1790
+ worktrees: DashboardGitWorktree[];
1791
+ }
1792
+ interface DashboardOverview {
1793
+ summary: DashboardSummary;
1794
+ trends: Record<DashboardMetricKey, DashboardTrendPoint[]>;
1795
+ triColorTrends: Record<DashboardMetricKey, DashboardTriColorTrendPoint[]>;
1796
+ trendKinds: Record<DashboardMetricKey, DashboardTrendKind>;
1797
+ cardAvailability: Record<DashboardMetricKey, DashboardCardAvailability>;
1798
+ trendMeta: DashboardTrendMeta;
1799
+ specifications: Array<{
1800
+ id: string;
1801
+ name: string;
1802
+ requirements: number;
1803
+ updatedAt: number;
1804
+ }>;
1805
+ activeChanges: Array<{
1806
+ id: string;
1807
+ name: string;
1808
+ progress: {
1809
+ total: number;
1810
+ completed: number;
1811
+ };
1812
+ updatedAt: number;
1813
+ }>;
1814
+ git: DashboardGitSnapshot;
1815
+ }
1816
+ //#endregion
1666
1817
  //#region src/opsx-types.d.ts
1667
1818
  /** Check if an outputPath contains glob pattern characters */
1668
1819
  declare function isGlobPattern(pattern: string): boolean;
@@ -1673,14 +1824,14 @@ declare const ArtifactStatusSchema: z.ZodObject<{
1673
1824
  missingDeps: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1674
1825
  relativePath: z.ZodOptional<z.ZodString>;
1675
1826
  }, "strip", z.ZodTypeAny, {
1676
- id: string;
1677
1827
  status: "done" | "ready" | "blocked";
1828
+ id: string;
1678
1829
  outputPath: string;
1679
1830
  missingDeps?: string[] | undefined;
1680
1831
  relativePath?: string | undefined;
1681
1832
  }, {
1682
- id: string;
1683
1833
  status: "done" | "ready" | "blocked";
1834
+ id: string;
1684
1835
  outputPath: string;
1685
1836
  missingDeps?: string[] | undefined;
1686
1837
  relativePath?: string | undefined;
@@ -1698,14 +1849,14 @@ declare const ChangeStatusSchema: z.ZodObject<{
1698
1849
  missingDeps: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1699
1850
  relativePath: z.ZodOptional<z.ZodString>;
1700
1851
  }, "strip", z.ZodTypeAny, {
1701
- id: string;
1702
1852
  status: "done" | "ready" | "blocked";
1853
+ id: string;
1703
1854
  outputPath: string;
1704
1855
  missingDeps?: string[] | undefined;
1705
1856
  relativePath?: string | undefined;
1706
1857
  }, {
1707
- id: string;
1708
1858
  status: "done" | "ready" | "blocked";
1859
+ id: string;
1709
1860
  outputPath: string;
1710
1861
  missingDeps?: string[] | undefined;
1711
1862
  relativePath?: string | undefined;
@@ -1716,8 +1867,8 @@ declare const ChangeStatusSchema: z.ZodObject<{
1716
1867
  isComplete: boolean;
1717
1868
  applyRequires: string[];
1718
1869
  artifacts: {
1719
- id: string;
1720
1870
  status: "done" | "ready" | "blocked";
1871
+ id: string;
1721
1872
  outputPath: string;
1722
1873
  missingDeps?: string[] | undefined;
1723
1874
  relativePath?: string | undefined;
@@ -1728,8 +1879,8 @@ declare const ChangeStatusSchema: z.ZodObject<{
1728
1879
  isComplete: boolean;
1729
1880
  applyRequires: string[];
1730
1881
  artifacts: {
1731
- id: string;
1732
1882
  status: "done" | "ready" | "blocked";
1883
+ id: string;
1733
1884
  outputPath: string;
1734
1885
  missingDeps?: string[] | undefined;
1735
1886
  relativePath?: string | undefined;
@@ -1742,13 +1893,13 @@ declare const DependencyInfoSchema: z.ZodObject<{
1742
1893
  path: z.ZodString;
1743
1894
  description: z.ZodString;
1744
1895
  }, "strip", z.ZodTypeAny, {
1745
- id: string;
1746
1896
  path: string;
1897
+ id: string;
1747
1898
  description: string;
1748
1899
  done: boolean;
1749
1900
  }, {
1750
- id: string;
1751
1901
  path: string;
1902
+ id: string;
1752
1903
  description: string;
1753
1904
  done: boolean;
1754
1905
  }>;
@@ -1856,13 +2007,13 @@ declare const ArtifactInstructionsSchema: z.ZodObject<{
1856
2007
  path: z.ZodString;
1857
2008
  description: z.ZodString;
1858
2009
  }, "strip", z.ZodTypeAny, {
1859
- id: string;
1860
2010
  path: string;
2011
+ id: string;
1861
2012
  description: string;
1862
2013
  done: boolean;
1863
2014
  }, {
1864
- id: string;
1865
2015
  path: string;
2016
+ id: string;
1866
2017
  description: string;
1867
2018
  done: boolean;
1868
2019
  }>, "many">;
@@ -1876,8 +2027,8 @@ declare const ArtifactInstructionsSchema: z.ZodObject<{
1876
2027
  artifactId: string;
1877
2028
  template: string;
1878
2029
  dependencies: {
1879
- id: string;
1880
2030
  path: string;
2031
+ id: string;
1881
2032
  description: string;
1882
2033
  done: boolean;
1883
2034
  }[];
@@ -1894,8 +2045,8 @@ declare const ArtifactInstructionsSchema: z.ZodObject<{
1894
2045
  artifactId: string;
1895
2046
  template: string;
1896
2047
  dependencies: {
1897
- id: string;
1898
2048
  path: string;
2049
+ id: string;
1899
2050
  description: string;
1900
2051
  done: boolean;
1901
2052
  }[];
@@ -1937,16 +2088,16 @@ declare const SchemaResolutionSchema: z.ZodObject<{
1937
2088
  source: "project" | "user" | "package";
1938
2089
  }>, "many">;
1939
2090
  }, "strip", z.ZodTypeAny, {
1940
- name: string;
1941
2091
  path: string;
2092
+ name: string;
1942
2093
  source: "project" | "user" | "package";
1943
2094
  shadows: {
1944
2095
  path: string;
1945
2096
  source: "project" | "user" | "package";
1946
2097
  }[];
1947
2098
  }, {
1948
- name: string;
1949
2099
  path: string;
2100
+ name: string;
1950
2101
  source: "project" | "user" | "package";
1951
2102
  shadows: {
1952
2103
  path: string;
@@ -2067,6 +2218,8 @@ interface ExportSnapshot {
2067
2218
  changesCount: number;
2068
2219
  archivesCount: number;
2069
2220
  };
2221
+ /** OpenSpecUI runtime config captured during export */
2222
+ config?: OpenSpecUIConfig;
2070
2223
  /** All specs with parsed content */
2071
2224
  specs: Array<{
2072
2225
  id: string;
@@ -2254,22 +2407,22 @@ declare const PtySessionInfoSchema: z.ZodObject<{
2254
2407
  closeTip: z.ZodOptional<z.ZodString>;
2255
2408
  closeCallbackUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
2256
2409
  }, "strip", z.ZodTypeAny, {
2257
- id: string;
2258
2410
  command: string;
2259
2411
  args: string[];
2260
2412
  platform: "windows" | "macos" | "common";
2261
2413
  exitCode: number | null;
2262
2414
  title: string;
2415
+ id: string;
2263
2416
  isExited: boolean;
2264
2417
  closeTip?: string | undefined;
2265
2418
  closeCallbackUrl?: string | Record<string, string> | undefined;
2266
2419
  }, {
2267
- id: string;
2268
2420
  command: string;
2269
2421
  args: string[];
2270
2422
  platform: "windows" | "macos" | "common";
2271
2423
  exitCode: number | null;
2272
2424
  title: string;
2425
+ id: string;
2273
2426
  isExited: boolean;
2274
2427
  closeTip?: string | undefined;
2275
2428
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2286,19 +2439,19 @@ declare const PtyCreateMessageSchema: z.ZodObject<{
2286
2439
  }, "strip", z.ZodTypeAny, {
2287
2440
  type: "create";
2288
2441
  requestId: string;
2289
- command?: string | undefined;
2290
- args?: string[] | undefined;
2291
2442
  cols?: number | undefined;
2292
2443
  rows?: number | undefined;
2444
+ command?: string | undefined;
2445
+ args?: string[] | undefined;
2293
2446
  closeTip?: string | undefined;
2294
2447
  closeCallbackUrl?: string | Record<string, string> | undefined;
2295
2448
  }, {
2296
2449
  type: "create";
2297
2450
  requestId: string;
2298
- command?: string | undefined;
2299
- args?: string[] | undefined;
2300
2451
  cols?: number | undefined;
2301
2452
  rows?: number | undefined;
2453
+ command?: string | undefined;
2454
+ args?: string[] | undefined;
2302
2455
  closeTip?: string | undefined;
2303
2456
  closeCallbackUrl?: string | Record<string, string> | undefined;
2304
2457
  }>;
@@ -2376,19 +2529,19 @@ declare const PtyClientMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2376
2529
  }, "strip", z.ZodTypeAny, {
2377
2530
  type: "create";
2378
2531
  requestId: string;
2379
- command?: string | undefined;
2380
- args?: string[] | undefined;
2381
2532
  cols?: number | undefined;
2382
2533
  rows?: number | undefined;
2534
+ command?: string | undefined;
2535
+ args?: string[] | undefined;
2383
2536
  closeTip?: string | undefined;
2384
2537
  closeCallbackUrl?: string | Record<string, string> | undefined;
2385
2538
  }, {
2386
2539
  type: "create";
2387
2540
  requestId: string;
2388
- command?: string | undefined;
2389
- args?: string[] | undefined;
2390
2541
  cols?: number | undefined;
2391
2542
  rows?: number | undefined;
2543
+ command?: string | undefined;
2544
+ args?: string[] | undefined;
2392
2545
  closeTip?: string | undefined;
2393
2546
  closeCallbackUrl?: string | Record<string, string> | undefined;
2394
2547
  }>, z.ZodObject<{
@@ -2530,22 +2683,22 @@ declare const PtyListResponseSchema: z.ZodObject<{
2530
2683
  closeTip: z.ZodOptional<z.ZodString>;
2531
2684
  closeCallbackUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
2532
2685
  }, "strip", z.ZodTypeAny, {
2533
- id: string;
2534
2686
  command: string;
2535
2687
  args: string[];
2536
2688
  platform: "windows" | "macos" | "common";
2537
2689
  exitCode: number | null;
2538
2690
  title: string;
2691
+ id: string;
2539
2692
  isExited: boolean;
2540
2693
  closeTip?: string | undefined;
2541
2694
  closeCallbackUrl?: string | Record<string, string> | undefined;
2542
2695
  }, {
2543
- id: string;
2544
2696
  command: string;
2545
2697
  args: string[];
2546
2698
  platform: "windows" | "macos" | "common";
2547
2699
  exitCode: number | null;
2548
2700
  title: string;
2701
+ id: string;
2549
2702
  isExited: boolean;
2550
2703
  closeTip?: string | undefined;
2551
2704
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2553,12 +2706,12 @@ declare const PtyListResponseSchema: z.ZodObject<{
2553
2706
  }, "strip", z.ZodTypeAny, {
2554
2707
  type: "list";
2555
2708
  sessions: {
2556
- id: string;
2557
2709
  command: string;
2558
2710
  args: string[];
2559
2711
  platform: "windows" | "macos" | "common";
2560
2712
  exitCode: number | null;
2561
2713
  title: string;
2714
+ id: string;
2562
2715
  isExited: boolean;
2563
2716
  closeTip?: string | undefined;
2564
2717
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2566,12 +2719,12 @@ declare const PtyListResponseSchema: z.ZodObject<{
2566
2719
  }, {
2567
2720
  type: "list";
2568
2721
  sessions: {
2569
- id: string;
2570
2722
  command: string;
2571
2723
  args: string[];
2572
2724
  platform: "windows" | "macos" | "common";
2573
2725
  exitCode: number | null;
2574
2726
  title: string;
2727
+ id: string;
2575
2728
  isExited: boolean;
2576
2729
  closeTip?: string | undefined;
2577
2730
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2584,14 +2737,14 @@ declare const PtyErrorResponseSchema: z.ZodObject<{
2584
2737
  message: z.ZodString;
2585
2738
  sessionId: z.ZodOptional<z.ZodString>;
2586
2739
  }, "strip", z.ZodTypeAny, {
2740
+ type: "error";
2587
2741
  code: "INVALID_JSON" | "INVALID_MESSAGE" | "SESSION_NOT_FOUND" | "PTY_CREATE_FAILED";
2588
2742
  message: string;
2589
- type: "error";
2590
2743
  sessionId?: string | undefined;
2591
2744
  }, {
2745
+ type: "error";
2592
2746
  code: "INVALID_JSON" | "INVALID_MESSAGE" | "SESSION_NOT_FOUND" | "PTY_CREATE_FAILED";
2593
2747
  message: string;
2594
- type: "error";
2595
2748
  sessionId?: string | undefined;
2596
2749
  }>;
2597
2750
  declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
@@ -2670,22 +2823,22 @@ declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2670
2823
  closeTip: z.ZodOptional<z.ZodString>;
2671
2824
  closeCallbackUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
2672
2825
  }, "strip", z.ZodTypeAny, {
2673
- id: string;
2674
2826
  command: string;
2675
2827
  args: string[];
2676
2828
  platform: "windows" | "macos" | "common";
2677
2829
  exitCode: number | null;
2678
2830
  title: string;
2831
+ id: string;
2679
2832
  isExited: boolean;
2680
2833
  closeTip?: string | undefined;
2681
2834
  closeCallbackUrl?: string | Record<string, string> | undefined;
2682
2835
  }, {
2683
- id: string;
2684
2836
  command: string;
2685
2837
  args: string[];
2686
2838
  platform: "windows" | "macos" | "common";
2687
2839
  exitCode: number | null;
2688
2840
  title: string;
2841
+ id: string;
2689
2842
  isExited: boolean;
2690
2843
  closeTip?: string | undefined;
2691
2844
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2693,12 +2846,12 @@ declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2693
2846
  }, "strip", z.ZodTypeAny, {
2694
2847
  type: "list";
2695
2848
  sessions: {
2696
- id: string;
2697
2849
  command: string;
2698
2850
  args: string[];
2699
2851
  platform: "windows" | "macos" | "common";
2700
2852
  exitCode: number | null;
2701
2853
  title: string;
2854
+ id: string;
2702
2855
  isExited: boolean;
2703
2856
  closeTip?: string | undefined;
2704
2857
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2706,12 +2859,12 @@ declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2706
2859
  }, {
2707
2860
  type: "list";
2708
2861
  sessions: {
2709
- id: string;
2710
2862
  command: string;
2711
2863
  args: string[];
2712
2864
  platform: "windows" | "macos" | "common";
2713
2865
  exitCode: number | null;
2714
2866
  title: string;
2867
+ id: string;
2715
2868
  isExited: boolean;
2716
2869
  closeTip?: string | undefined;
2717
2870
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2722,14 +2875,14 @@ declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2722
2875
  message: z.ZodString;
2723
2876
  sessionId: z.ZodOptional<z.ZodString>;
2724
2877
  }, "strip", z.ZodTypeAny, {
2878
+ type: "error";
2725
2879
  code: "INVALID_JSON" | "INVALID_MESSAGE" | "SESSION_NOT_FOUND" | "PTY_CREATE_FAILED";
2726
2880
  message: string;
2727
- type: "error";
2728
2881
  sessionId?: string | undefined;
2729
2882
  }, {
2883
+ type: "error";
2730
2884
  code: "INVALID_JSON" | "INVALID_MESSAGE" | "SESSION_NOT_FOUND" | "PTY_CREATE_FAILED";
2731
2885
  message: string;
2732
- type: "error";
2733
2886
  sessionId?: string | undefined;
2734
2887
  }>]>;
2735
2888
  type PtyClientMessage = z.infer<typeof PtyClientMessageSchema>;
@@ -2737,4 +2890,4 @@ type PtyServerMessage = z.infer<typeof PtyServerMessageSchema>;
2737
2890
  type PtySessionInfo = z.infer<typeof PtySessionInfoSchema>;
2738
2891
  type PtyPlatform = z.infer<typeof PtyPlatformSchema>;
2739
2892
  //#endregion
2740
- export { type AIToolOption, AI_TOOLS, type ApplyInstructions, ApplyInstructionsSchema, type ApplyTask, ApplyTaskSchema, type ArchiveMeta, type ArtifactInstructions, ArtifactInstructionsSchema, type ArtifactStatus, ArtifactStatusSchema, type Change, type ChangeFile, ChangeFileSchema, type ChangeMeta, ChangeSchema, type ChangeStatus, ChangeStatusSchema, CliExecutor, type CliResult, type CliRunnerAttempt, type CliSniffResult, type CliStreamEvent, ConfigManager, DEFAULT_CONFIG, type Delta, type DeltaOperation, DeltaOperationType, DeltaSchema, type DeltaSpec, DeltaSpecSchema, type DependencyInfo, DependencyInfoSchema, type ExportSnapshot, type FileChangeEvent, type FileChangeType, MarkdownParser, OpenSpecAdapter, type OpenSpecUIConfig, OpenSpecUIConfigSchema, type OpenSpecUIConfigUpdate, OpenSpecWatcher, OpsxKernel, type PathCallback, ProjectWatcher, PtyAttachMessageSchema, PtyBufferResponseSchema, type PtyClientMessage, PtyClientMessageSchema, PtyCloseMessageSchema, PtyCreateMessageSchema, PtyCreatedResponseSchema, PtyErrorCodeSchema, PtyErrorResponseSchema, PtyExitResponseSchema, PtyInputMessageSchema, PtyListMessageSchema, PtyListResponseSchema, PtyOutputResponseSchema, type PtyPlatform, PtyPlatformSchema, PtyResizeMessageSchema, type PtyServerMessage, PtyServerMessageSchema, type PtySessionInfo, PtyTitleResponseSchema, ReactiveContext, ReactiveState, type ReactiveStateOptions, type Requirement, RequirementSchema, type ResolvedCliRunner, type SchemaArtifact, SchemaArtifactSchema, type SchemaDetail, SchemaDetailSchema, type SchemaInfo, SchemaInfoSchema, type SchemaResolution, SchemaResolutionSchema, type Spec, type SpecMeta, SpecSchema, type Task, TaskSchema, type TemplateContentMap, type TemplatesMap, TemplatesSchema, type TerminalConfig, TerminalConfigSchema, type ToolConfig, type ValidationIssue, type ValidationResult, Validator, type WatchEvent, type WatchEventType, acquireWatcher, buildCliRunnerCandidates, clearCache, closeAllProjectWatchers, closeAllWatchers, contextStorage, createCleanCliEnv, createFileChangeObservable, getActiveWatcherCount, getAllToolIds, getAllTools, getAvailableToolIds, getAvailableTools, getCacheSize, getConfiguredTools, getDefaultCliCommand, getDefaultCliCommandString, getProjectWatcher, getToolById, getWatchedProjectDir, initWatcherPool, isGlobPattern, isToolConfigured, isWatcherPoolInitialized, parseCliCommand, reactiveExists, reactiveReadDir, reactiveReadFile, reactiveStat, sniffGlobalCli };
2893
+ export { type AIToolOption, AI_TOOLS, type ApplyInstructions, ApplyInstructionsSchema, type ApplyTask, ApplyTaskSchema, type ArchiveMeta, type ArtifactInstructions, ArtifactInstructionsSchema, type ArtifactStatus, ArtifactStatusSchema, type Change, type ChangeFile, ChangeFileSchema, type ChangeMeta, ChangeSchema, type ChangeStatus, ChangeStatusSchema, CliExecutor, type CliResult, type CliRunnerAttempt, type CliSniffResult, type CliStreamEvent, ConfigManager, DASHBOARD_METRIC_KEYS, DEFAULT_CONFIG, type DashboardCardAvailability, type DashboardConfig, DashboardConfigSchema, type DashboardGitCommitEntry, type DashboardGitDiffStats, type DashboardGitEntry, type DashboardGitSnapshot, type DashboardGitUncommittedEntry, type DashboardGitWorktree, type DashboardMetricKey, type DashboardOverview, type DashboardSummary, type DashboardTrendKind, type DashboardTrendMeta, type DashboardTrendPoint, type DashboardTriColorTrendPoint, type Delta, type DeltaOperation, DeltaOperationType, DeltaSchema, type DeltaSpec, DeltaSpecSchema, type DependencyInfo, DependencyInfoSchema, type ExportSnapshot, type FileChangeEvent, type FileChangeType, MarkdownParser, OpenSpecAdapter, type OpenSpecUIConfig, OpenSpecUIConfigSchema, type OpenSpecUIConfigUpdate, OpenSpecWatcher, OpsxKernel, type PathCallback, ProjectWatcher, type ProjectWatcherReinitializeReason, type ProjectWatcherRuntimeStatus, PtyAttachMessageSchema, PtyBufferResponseSchema, type PtyClientMessage, PtyClientMessageSchema, PtyCloseMessageSchema, PtyCreateMessageSchema, PtyCreatedResponseSchema, PtyErrorCodeSchema, PtyErrorResponseSchema, PtyExitResponseSchema, PtyInputMessageSchema, PtyListMessageSchema, PtyListResponseSchema, PtyOutputResponseSchema, type PtyPlatform, PtyPlatformSchema, PtyResizeMessageSchema, type PtyServerMessage, PtyServerMessageSchema, type PtySessionInfo, PtyTitleResponseSchema, ReactiveContext, ReactiveState, type ReactiveStateOptions, type Requirement, RequirementSchema, type ResolvedCliRunner, type SchemaArtifact, SchemaArtifactSchema, type SchemaDetail, SchemaDetailSchema, type SchemaInfo, SchemaInfoSchema, type SchemaResolution, SchemaResolutionSchema, type Spec, type SpecMeta, SpecSchema, type Task, TaskSchema, type TemplateContentMap, type TemplatesMap, TemplatesSchema, type TerminalConfig, TerminalConfigSchema, type TerminalRendererEngine, TerminalRendererEngineSchema, type ToolConfig, type ValidationIssue, type ValidationResult, Validator, type WatchEvent, type WatchEventType, type WatcherRuntimeStatus, acquireWatcher, buildCliRunnerCandidates, clearCache, closeAllProjectWatchers, closeAllWatchers, contextStorage, createCleanCliEnv, createFileChangeObservable, getActiveWatcherCount, getAllToolIds, getAllTools, getAvailableToolIds, getAvailableTools, getCacheSize, getConfiguredTools, getDefaultCliCommand, getDefaultCliCommandString, getProjectWatcher, getToolById, getWatchedProjectDir, getWatcherRuntimeStatus, initWatcherPool, isGlobPattern, isTerminalRendererEngine, isToolConfigured, isWatcherPoolInitialized, parseCliCommand, reactiveExists, reactiveReadDir, reactiveReadFile, reactiveStat, sniffGlobalCli };