@openspecui/core 1.2.0 → 1.6.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
@@ -1,3 +1,4 @@
1
+ import { n as toOpsxDisplayPath, t as VIRTUAL_PROJECT_DIRNAME } from "./opsx-display-path-RBULE8_G.mjs";
1
2
  import { AsyncLocalStorage } from "node:async_hooks";
2
3
  import { z } from "zod";
3
4
  import { EventEmitter } from "events";
@@ -17,13 +18,13 @@ declare const ChangeFileSchema: z.ZodObject<{
17
18
  /** Optional byte size for files */
18
19
  size: z.ZodOptional<z.ZodNumber>;
19
20
  }, "strip", z.ZodTypeAny, {
20
- path: string;
21
21
  type: "file" | "directory";
22
+ path: string;
22
23
  content?: string | undefined;
23
24
  size?: number | undefined;
24
25
  }, {
25
- path: string;
26
26
  type: "file" | "directory";
27
+ path: string;
27
28
  content?: string | undefined;
28
29
  size?: number | undefined;
29
30
  }>;
@@ -1022,53 +1023,6 @@ declare function clearCache(path?: string): void;
1022
1023
  */
1023
1024
  declare function getCacheSize(): number;
1024
1025
  //#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
1026
  //#region src/reactive-fs/project-watcher.d.ts
1073
1027
  /**
1074
1028
  * 事件类型
@@ -1085,6 +1039,15 @@ interface WatchEvent {
1085
1039
  * 路径订阅回调
1086
1040
  */
1087
1041
  type PathCallback = (events: WatchEvent[]) => void;
1042
+ /** watcher 重建原因 */
1043
+ type ProjectWatcherReinitializeReason = 'drop-events' | 'watcher-error' | 'missing-project-dir' | 'project-dir-replaced' | 'manual';
1044
+ /** watcher 运行时状态(用于调试和运维观测) */
1045
+ interface ProjectWatcherRuntimeStatus {
1046
+ generation: number;
1047
+ reinitializeCount: number;
1048
+ lastReinitializeReason: ProjectWatcherReinitializeReason | null;
1049
+ reinitializeReasonCounts: Readonly<Record<ProjectWatcherReinitializeReason, number>>;
1050
+ }
1088
1051
  /**
1089
1052
  * 项目监听器
1090
1053
  *
@@ -1107,17 +1070,18 @@ declare class ProjectWatcher {
1107
1070
  private ignore;
1108
1071
  private initialized;
1109
1072
  private initPromise;
1110
- private healthCheckTimer;
1111
- private lastEventTime;
1112
- private healthCheckPending;
1113
- private enableHealthCheck;
1114
1073
  private reinitializeTimer;
1115
1074
  private reinitializePending;
1075
+ private reinitializeReasonPending;
1076
+ private pathLivenessTimer;
1077
+ private projectDirFingerprint;
1078
+ private generation;
1079
+ private reinitializeCount;
1080
+ private lastReinitializeReason;
1081
+ private reinitializeReasonCounts;
1116
1082
  constructor(projectDir: string, options?: {
1117
1083
  debounceMs?: number;
1118
1084
  ignore?: string[];
1119
- /** 是否启用健康检查(默认 true) */
1120
- enableHealthCheck?: boolean;
1121
1085
  });
1122
1086
  /**
1123
1087
  * 初始化 watcher
@@ -1127,13 +1091,30 @@ declare class ProjectWatcher {
1127
1091
  private doInit;
1128
1092
  /**
1129
1093
  * 处理 watcher 错误
1130
- * 对于 FSEvents dropped 错误,触发延迟重建
1094
+ * 统一走错误驱动重建流程
1131
1095
  */
1132
1096
  private handleWatcherError;
1133
1097
  /**
1134
1098
  * 延迟重建 watcher(防抖,避免频繁重建)
1135
1099
  */
1136
1100
  private scheduleReinitialize;
1101
+ /**
1102
+ * 读取项目目录指纹(目录不存在时返回 null)
1103
+ * 用于检测 path 对应实体是否被替换(inode/dev 漂移)
1104
+ */
1105
+ private getProjectDirFingerprint;
1106
+ /**
1107
+ * 启动路径语义监测(避免 watcher 绑定到已失效句柄)
1108
+ */
1109
+ private startPathLivenessMonitor;
1110
+ /**
1111
+ * 停止路径语义监测
1112
+ */
1113
+ private stopPathLivenessMonitor;
1114
+ /**
1115
+ * 只读检查 projectDir 是否仍指向初始化时的目录实体
1116
+ */
1117
+ private checkPathLiveness;
1137
1118
  /**
1138
1119
  * 处理原始事件
1139
1120
  */
@@ -1180,26 +1161,13 @@ declare class ProjectWatcher {
1180
1161
  */
1181
1162
  get isInitialized(): boolean;
1182
1163
  /**
1183
- * 启动健康检查定时器
1184
- */
1185
- private startHealthCheck;
1186
- /**
1187
- * 停止健康检查定时器
1188
- */
1189
- private stopHealthCheck;
1190
- /**
1191
- * 执行健康检查
1192
- *
1193
- * 工作流程:
1194
- * 1. 如果最近有事件,无需检查
1195
- * 2. 如果上次探测还在等待中,说明 watcher 可能失效,尝试重建
1196
- * 3. 否则,创建临时文件触发事件,等待下次检查验证
1164
+ * 获取 watcher 运行时状态
1197
1165
  */
1198
- private performHealthCheck;
1166
+ get runtimeStatus(): ProjectWatcherRuntimeStatus;
1199
1167
  /**
1200
- * 发送探测:通过 utimesSync 修改项目目录的时间戳来触发 watcher 事件
1168
+ * 记录重建统计
1201
1169
  */
1202
- private sendProbe;
1170
+ private markReinitialized;
1203
1171
  /**
1204
1172
  * 重新初始化 watcher
1205
1173
  */
@@ -1222,6 +1190,63 @@ declare function getProjectWatcher(projectDir: string, options?: ConstructorPara
1222
1190
  */
1223
1191
  declare function closeAllProjectWatchers(): Promise<void>;
1224
1192
  //#endregion
1193
+ //#region src/reactive-fs/watcher-pool.d.ts
1194
+ /** watcher 运行时状态(供 server 订阅) */
1195
+ interface WatcherRuntimeStatus extends ProjectWatcherRuntimeStatus {
1196
+ projectDir: string | null;
1197
+ initialized: boolean;
1198
+ subscriptionCount: number;
1199
+ }
1200
+ /**
1201
+ * 初始化 watcher pool
1202
+ *
1203
+ * 必须在使用 acquireWatcher 之前调用。
1204
+ * 通常由 server 在启动时调用。
1205
+ *
1206
+ * @param projectDir 项目根目录
1207
+ */
1208
+ declare function initWatcherPool(projectDir: string): Promise<void>;
1209
+ /**
1210
+ * 获取或创建文件/目录监听器
1211
+ *
1212
+ * 特性:
1213
+ * - 使用 @parcel/watcher 监听项目根目录
1214
+ * - 自动处理新创建的目录(解决 init 后无法监听的问题)
1215
+ * - 同一路径共享订阅
1216
+ * - 引用计数管理生命周期
1217
+ * - 内置防抖机制
1218
+ *
1219
+ * @param path 要监听的路径
1220
+ * @param onChange 变更回调
1221
+ * @param options 监听选项
1222
+ * @returns 释放函数,调用后取消订阅
1223
+ */
1224
+ declare function acquireWatcher(path: string, onChange: () => void, options?: {
1225
+ recursive?: boolean;
1226
+ debounceMs?: number;
1227
+ onError?: () => void;
1228
+ }): () => void;
1229
+ /**
1230
+ * 获取当前活跃的监听器数量(用于调试)
1231
+ */
1232
+ declare function getActiveWatcherCount(): number;
1233
+ /**
1234
+ * 关闭所有监听器(用于测试清理)
1235
+ */
1236
+ declare function closeAllWatchers(): Promise<void>;
1237
+ /**
1238
+ * 检查 watcher pool 是否已初始化
1239
+ */
1240
+ declare function isWatcherPoolInitialized(): boolean;
1241
+ /**
1242
+ * 获取当前监听的项目目录
1243
+ */
1244
+ declare function getWatchedProjectDir(): string | null;
1245
+ /**
1246
+ * 获取 watcher 运行时状态
1247
+ */
1248
+ declare function getWatcherRuntimeStatus(): WatcherRuntimeStatus | null;
1249
+ //#endregion
1225
1250
  //#region src/watcher.d.ts
1226
1251
  /**
1227
1252
  * File change event types
@@ -1284,6 +1309,9 @@ declare function createFileChangeObservable(watcher: OpenSpecWatcher): {
1284
1309
  };
1285
1310
  //#endregion
1286
1311
  //#region src/config.d.ts
1312
+ declare const TerminalRendererEngineSchema: z.ZodEnum<["xterm", "ghostty"]>;
1313
+ type TerminalRendererEngine = z.infer<typeof TerminalRendererEngineSchema>;
1314
+ declare function isTerminalRendererEngine(value: string): value is TerminalRendererEngine;
1287
1315
  type RunnerId = 'configured' | 'openspec' | 'npx' | 'bunx' | 'deno' | 'pnpm' | 'yarn';
1288
1316
  interface CliRunnerCandidate {
1289
1317
  id: RunnerId;
@@ -1355,20 +1383,31 @@ declare const TerminalConfigSchema: z.ZodObject<{
1355
1383
  cursorBlink: z.ZodDefault<z.ZodBoolean>;
1356
1384
  cursorStyle: z.ZodDefault<z.ZodEnum<["block", "underline", "bar"]>>;
1357
1385
  scrollback: z.ZodDefault<z.ZodNumber>;
1386
+ rendererEngine: z.ZodDefault<z.ZodString>;
1358
1387
  }, "strip", z.ZodTypeAny, {
1359
1388
  fontSize: number;
1360
1389
  fontFamily: string;
1361
1390
  cursorBlink: boolean;
1362
1391
  cursorStyle: "block" | "underline" | "bar";
1363
1392
  scrollback: number;
1393
+ rendererEngine: string;
1364
1394
  }, {
1365
1395
  fontSize?: number | undefined;
1366
1396
  fontFamily?: string | undefined;
1367
1397
  cursorBlink?: boolean | undefined;
1368
1398
  cursorStyle?: "block" | "underline" | "bar" | undefined;
1369
1399
  scrollback?: number | undefined;
1400
+ rendererEngine?: string | undefined;
1370
1401
  }>;
1371
1402
  type TerminalConfig = z.infer<typeof TerminalConfigSchema>;
1403
+ declare const DashboardConfigSchema: z.ZodObject<{
1404
+ trendPointLimit: z.ZodDefault<z.ZodNumber>;
1405
+ }, "strip", z.ZodTypeAny, {
1406
+ trendPointLimit: number;
1407
+ }, {
1408
+ trendPointLimit?: number | undefined;
1409
+ }>;
1410
+ type DashboardConfig = z.infer<typeof DashboardConfigSchema>;
1372
1411
  /**
1373
1412
  * OpenSpecUI 配置 Schema
1374
1413
  *
@@ -1397,18 +1436,29 @@ declare const OpenSpecUIConfigSchema: z.ZodObject<{
1397
1436
  cursorBlink: z.ZodDefault<z.ZodBoolean>;
1398
1437
  cursorStyle: z.ZodDefault<z.ZodEnum<["block", "underline", "bar"]>>;
1399
1438
  scrollback: z.ZodDefault<z.ZodNumber>;
1439
+ rendererEngine: z.ZodDefault<z.ZodString>;
1400
1440
  }, "strip", z.ZodTypeAny, {
1401
1441
  fontSize: number;
1402
1442
  fontFamily: string;
1403
1443
  cursorBlink: boolean;
1404
1444
  cursorStyle: "block" | "underline" | "bar";
1405
1445
  scrollback: number;
1446
+ rendererEngine: string;
1406
1447
  }, {
1407
1448
  fontSize?: number | undefined;
1408
1449
  fontFamily?: string | undefined;
1409
1450
  cursorBlink?: boolean | undefined;
1410
1451
  cursorStyle?: "block" | "underline" | "bar" | undefined;
1411
1452
  scrollback?: number | undefined;
1453
+ rendererEngine?: string | undefined;
1454
+ }>>;
1455
+ /** Dashboard 配置 */
1456
+ dashboard: z.ZodDefault<z.ZodObject<{
1457
+ trendPointLimit: z.ZodDefault<z.ZodNumber>;
1458
+ }, "strip", z.ZodTypeAny, {
1459
+ trendPointLimit: number;
1460
+ }, {
1461
+ trendPointLimit?: number | undefined;
1412
1462
  }>>;
1413
1463
  }, "strip", z.ZodTypeAny, {
1414
1464
  cli: {
@@ -1422,6 +1472,10 @@ declare const OpenSpecUIConfigSchema: z.ZodObject<{
1422
1472
  cursorBlink: boolean;
1423
1473
  cursorStyle: "block" | "underline" | "bar";
1424
1474
  scrollback: number;
1475
+ rendererEngine: string;
1476
+ };
1477
+ dashboard: {
1478
+ trendPointLimit: number;
1425
1479
  };
1426
1480
  }, {
1427
1481
  cli?: {
@@ -1435,6 +1489,10 @@ declare const OpenSpecUIConfigSchema: z.ZodObject<{
1435
1489
  cursorBlink?: boolean | undefined;
1436
1490
  cursorStyle?: "block" | "underline" | "bar" | undefined;
1437
1491
  scrollback?: number | undefined;
1492
+ rendererEngine?: string | undefined;
1493
+ } | undefined;
1494
+ dashboard?: {
1495
+ trendPointLimit?: number | undefined;
1438
1496
  } | undefined;
1439
1497
  }>;
1440
1498
  type OpenSpecUIConfig = z.infer<typeof OpenSpecUIConfigSchema>;
@@ -1445,6 +1503,7 @@ type OpenSpecUIConfigUpdate = {
1445
1503
  };
1446
1504
  theme?: OpenSpecUIConfig['theme'];
1447
1505
  terminal?: Partial<TerminalConfig>;
1506
+ dashboard?: Partial<DashboardConfig>;
1448
1507
  };
1449
1508
  /** 默认配置(静态,用于测试和类型) */
1450
1509
  declare const DEFAULT_CONFIG: OpenSpecUIConfig;
@@ -1663,6 +1722,99 @@ declare function getConfiguredTools(projectDir: string): Promise<string[]>;
1663
1722
  */
1664
1723
  declare function isToolConfigured(projectDir: string, toolId: string): Promise<boolean>;
1665
1724
  //#endregion
1725
+ //#region src/dashboard-types.d.ts
1726
+ declare const DASHBOARD_METRIC_KEYS: readonly ["specifications", "requirements", "activeChanges", "inProgressChanges", "completedChanges", "taskCompletionPercent"];
1727
+ type DashboardMetricKey = (typeof DASHBOARD_METRIC_KEYS)[number];
1728
+ interface DashboardTrendPoint {
1729
+ ts: number;
1730
+ value: number;
1731
+ }
1732
+ interface DashboardTriColorTrendPoint {
1733
+ ts: number;
1734
+ add: number;
1735
+ modify: number;
1736
+ delete: number;
1737
+ }
1738
+ type DashboardTrendKind = 'monotonic' | 'bidirectional';
1739
+ interface DashboardTrendMeta {
1740
+ pointLimit: number;
1741
+ lastUpdatedAt: number;
1742
+ }
1743
+ type DashboardCardAvailability = {
1744
+ state: 'ok';
1745
+ } | {
1746
+ state: 'invalid';
1747
+ reason: 'semantic-uncomputable' | 'objective-history-unavailable';
1748
+ };
1749
+ interface DashboardSummary {
1750
+ specifications: number;
1751
+ requirements: number;
1752
+ activeChanges: number;
1753
+ inProgressChanges: number;
1754
+ completedChanges: number;
1755
+ archivedTasksCompleted: number;
1756
+ tasksTotal: number;
1757
+ tasksCompleted: number;
1758
+ taskCompletionPercent: number | null;
1759
+ }
1760
+ interface DashboardGitDiffStats {
1761
+ files: number;
1762
+ insertions: number;
1763
+ deletions: number;
1764
+ }
1765
+ interface DashboardGitCommitEntry {
1766
+ type: 'commit';
1767
+ hash: string;
1768
+ title: string;
1769
+ relatedChanges: string[];
1770
+ diff: DashboardGitDiffStats;
1771
+ }
1772
+ interface DashboardGitUncommittedEntry {
1773
+ type: 'uncommitted';
1774
+ title: string;
1775
+ relatedChanges: string[];
1776
+ diff: DashboardGitDiffStats;
1777
+ }
1778
+ type DashboardGitEntry = DashboardGitCommitEntry | DashboardGitUncommittedEntry;
1779
+ interface DashboardGitWorktree {
1780
+ path: string;
1781
+ relativePath: string;
1782
+ branchName: string;
1783
+ isCurrent: boolean;
1784
+ ahead: number;
1785
+ behind: number;
1786
+ diff: DashboardGitDiffStats;
1787
+ entries: DashboardGitEntry[];
1788
+ }
1789
+ interface DashboardGitSnapshot {
1790
+ defaultBranch: string;
1791
+ worktrees: DashboardGitWorktree[];
1792
+ }
1793
+ interface DashboardOverview {
1794
+ summary: DashboardSummary;
1795
+ trends: Record<DashboardMetricKey, DashboardTrendPoint[]>;
1796
+ triColorTrends: Record<DashboardMetricKey, DashboardTriColorTrendPoint[]>;
1797
+ trendKinds: Record<DashboardMetricKey, DashboardTrendKind>;
1798
+ cardAvailability: Record<DashboardMetricKey, DashboardCardAvailability>;
1799
+ trendMeta: DashboardTrendMeta;
1800
+ specifications: Array<{
1801
+ id: string;
1802
+ name: string;
1803
+ requirements: number;
1804
+ updatedAt: number;
1805
+ }>;
1806
+ activeChanges: Array<{
1807
+ id: string;
1808
+ name: string;
1809
+ progress: {
1810
+ total: number;
1811
+ completed: number;
1812
+ };
1813
+ updatedAt: number;
1814
+ }>;
1815
+ git: DashboardGitSnapshot;
1816
+ }
1817
+ //#endregion
1666
1818
  //#region src/opsx-types.d.ts
1667
1819
  /** Check if an outputPath contains glob pattern characters */
1668
1820
  declare function isGlobPattern(pattern: string): boolean;
@@ -1673,14 +1825,14 @@ declare const ArtifactStatusSchema: z.ZodObject<{
1673
1825
  missingDeps: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1674
1826
  relativePath: z.ZodOptional<z.ZodString>;
1675
1827
  }, "strip", z.ZodTypeAny, {
1676
- id: string;
1677
1828
  status: "done" | "ready" | "blocked";
1829
+ id: string;
1678
1830
  outputPath: string;
1679
1831
  missingDeps?: string[] | undefined;
1680
1832
  relativePath?: string | undefined;
1681
1833
  }, {
1682
- id: string;
1683
1834
  status: "done" | "ready" | "blocked";
1835
+ id: string;
1684
1836
  outputPath: string;
1685
1837
  missingDeps?: string[] | undefined;
1686
1838
  relativePath?: string | undefined;
@@ -1698,14 +1850,14 @@ declare const ChangeStatusSchema: z.ZodObject<{
1698
1850
  missingDeps: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1699
1851
  relativePath: z.ZodOptional<z.ZodString>;
1700
1852
  }, "strip", z.ZodTypeAny, {
1701
- id: string;
1702
1853
  status: "done" | "ready" | "blocked";
1854
+ id: string;
1703
1855
  outputPath: string;
1704
1856
  missingDeps?: string[] | undefined;
1705
1857
  relativePath?: string | undefined;
1706
1858
  }, {
1707
- id: string;
1708
1859
  status: "done" | "ready" | "blocked";
1860
+ id: string;
1709
1861
  outputPath: string;
1710
1862
  missingDeps?: string[] | undefined;
1711
1863
  relativePath?: string | undefined;
@@ -1716,8 +1868,8 @@ declare const ChangeStatusSchema: z.ZodObject<{
1716
1868
  isComplete: boolean;
1717
1869
  applyRequires: string[];
1718
1870
  artifacts: {
1719
- id: string;
1720
1871
  status: "done" | "ready" | "blocked";
1872
+ id: string;
1721
1873
  outputPath: string;
1722
1874
  missingDeps?: string[] | undefined;
1723
1875
  relativePath?: string | undefined;
@@ -1728,8 +1880,8 @@ declare const ChangeStatusSchema: z.ZodObject<{
1728
1880
  isComplete: boolean;
1729
1881
  applyRequires: string[];
1730
1882
  artifacts: {
1731
- id: string;
1732
1883
  status: "done" | "ready" | "blocked";
1884
+ id: string;
1733
1885
  outputPath: string;
1734
1886
  missingDeps?: string[] | undefined;
1735
1887
  relativePath?: string | undefined;
@@ -1742,13 +1894,13 @@ declare const DependencyInfoSchema: z.ZodObject<{
1742
1894
  path: z.ZodString;
1743
1895
  description: z.ZodString;
1744
1896
  }, "strip", z.ZodTypeAny, {
1745
- id: string;
1746
1897
  path: string;
1898
+ id: string;
1747
1899
  description: string;
1748
1900
  done: boolean;
1749
1901
  }, {
1750
- id: string;
1751
1902
  path: string;
1903
+ id: string;
1752
1904
  description: string;
1753
1905
  done: boolean;
1754
1906
  }>;
@@ -1856,13 +2008,13 @@ declare const ArtifactInstructionsSchema: z.ZodObject<{
1856
2008
  path: z.ZodString;
1857
2009
  description: z.ZodString;
1858
2010
  }, "strip", z.ZodTypeAny, {
1859
- id: string;
1860
2011
  path: string;
2012
+ id: string;
1861
2013
  description: string;
1862
2014
  done: boolean;
1863
2015
  }, {
1864
- id: string;
1865
2016
  path: string;
2017
+ id: string;
1866
2018
  description: string;
1867
2019
  done: boolean;
1868
2020
  }>, "many">;
@@ -1876,8 +2028,8 @@ declare const ArtifactInstructionsSchema: z.ZodObject<{
1876
2028
  artifactId: string;
1877
2029
  template: string;
1878
2030
  dependencies: {
1879
- id: string;
1880
2031
  path: string;
2032
+ id: string;
1881
2033
  description: string;
1882
2034
  done: boolean;
1883
2035
  }[];
@@ -1894,8 +2046,8 @@ declare const ArtifactInstructionsSchema: z.ZodObject<{
1894
2046
  artifactId: string;
1895
2047
  template: string;
1896
2048
  dependencies: {
1897
- id: string;
1898
2049
  path: string;
2050
+ id: string;
1899
2051
  description: string;
1900
2052
  done: boolean;
1901
2053
  }[];
@@ -1926,43 +2078,54 @@ declare const SchemaResolutionSchema: z.ZodObject<{
1926
2078
  name: z.ZodString;
1927
2079
  source: z.ZodEnum<["project", "user", "package"]>;
1928
2080
  path: z.ZodString;
2081
+ displayPath: z.ZodOptional<z.ZodString>;
1929
2082
  shadows: z.ZodArray<z.ZodObject<{
1930
2083
  source: z.ZodEnum<["project", "user", "package"]>;
1931
2084
  path: z.ZodString;
2085
+ displayPath: z.ZodOptional<z.ZodString>;
1932
2086
  }, "strip", z.ZodTypeAny, {
1933
2087
  path: string;
1934
2088
  source: "project" | "user" | "package";
2089
+ displayPath?: string | undefined;
1935
2090
  }, {
1936
2091
  path: string;
1937
2092
  source: "project" | "user" | "package";
2093
+ displayPath?: string | undefined;
1938
2094
  }>, "many">;
1939
2095
  }, "strip", z.ZodTypeAny, {
1940
- name: string;
1941
2096
  path: string;
2097
+ name: string;
1942
2098
  source: "project" | "user" | "package";
1943
2099
  shadows: {
1944
2100
  path: string;
1945
2101
  source: "project" | "user" | "package";
2102
+ displayPath?: string | undefined;
1946
2103
  }[];
2104
+ displayPath?: string | undefined;
1947
2105
  }, {
1948
- name: string;
1949
2106
  path: string;
2107
+ name: string;
1950
2108
  source: "project" | "user" | "package";
1951
2109
  shadows: {
1952
2110
  path: string;
1953
2111
  source: "project" | "user" | "package";
2112
+ displayPath?: string | undefined;
1954
2113
  }[];
2114
+ displayPath?: string | undefined;
1955
2115
  }>;
1956
2116
  type SchemaResolution = z.infer<typeof SchemaResolutionSchema>;
1957
2117
  declare const TemplatesSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
1958
2118
  path: z.ZodString;
2119
+ displayPath: z.ZodOptional<z.ZodString>;
1959
2120
  source: z.ZodEnum<["project", "user", "package"]>;
1960
2121
  }, "strip", z.ZodTypeAny, {
1961
2122
  path: string;
1962
2123
  source: "project" | "user" | "package";
2124
+ displayPath?: string | undefined;
1963
2125
  }, {
1964
2126
  path: string;
1965
2127
  source: "project" | "user" | "package";
2128
+ displayPath?: string | undefined;
1966
2129
  }>>;
1967
2130
  type TemplatesMap = z.infer<typeof TemplatesSchema>;
1968
2131
  declare const SchemaArtifactSchema: z.ZodObject<{
@@ -2067,6 +2230,25 @@ interface ExportSnapshot {
2067
2230
  changesCount: number;
2068
2231
  archivesCount: number;
2069
2232
  };
2233
+ /** Git snapshot used by static dashboard */
2234
+ git?: {
2235
+ defaultBranch: string;
2236
+ repositoryUrl: string | null;
2237
+ latestCommitTs: number | null;
2238
+ recentCommits: Array<{
2239
+ hash: string;
2240
+ title: string;
2241
+ committedAt: number;
2242
+ relatedChanges: string[];
2243
+ diff: {
2244
+ files: number;
2245
+ insertions: number;
2246
+ deletions: number;
2247
+ };
2248
+ }>;
2249
+ };
2250
+ /** OpenSpecUI runtime config captured during export */
2251
+ config?: OpenSpecUIConfig;
2070
2252
  /** All specs with parsed content */
2071
2253
  specs: Array<{
2072
2254
  id: string;
@@ -2136,8 +2318,15 @@ interface ExportSnapshot {
2136
2318
  configYaml?: string;
2137
2319
  schemas: SchemaInfo[];
2138
2320
  schemaDetails: Record<string, SchemaDetail>;
2321
+ schemaYamls?: Record<string, string>;
2139
2322
  schemaResolutions: Record<string, SchemaResolution>;
2140
2323
  templates: Record<string, TemplatesMap>;
2324
+ templateContents?: Record<string, Record<string, {
2325
+ content: string | null;
2326
+ path: string;
2327
+ displayPath?: string;
2328
+ source: 'project' | 'user' | 'package';
2329
+ }>>;
2141
2330
  changeMetadata: Record<string, string | null>;
2142
2331
  };
2143
2332
  }
@@ -2146,6 +2335,7 @@ interface ExportSnapshot {
2146
2335
  type TemplateContentMap = Record<string, {
2147
2336
  content: string | null;
2148
2337
  path: string;
2338
+ displayPath?: string;
2149
2339
  source: TemplatesMap[string]['source'];
2150
2340
  }>;
2151
2341
  interface GlobArtifactFile {
@@ -2254,22 +2444,22 @@ declare const PtySessionInfoSchema: z.ZodObject<{
2254
2444
  closeTip: z.ZodOptional<z.ZodString>;
2255
2445
  closeCallbackUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
2256
2446
  }, "strip", z.ZodTypeAny, {
2257
- id: string;
2258
2447
  command: string;
2259
2448
  args: string[];
2260
2449
  platform: "windows" | "macos" | "common";
2261
2450
  exitCode: number | null;
2262
2451
  title: string;
2452
+ id: string;
2263
2453
  isExited: boolean;
2264
2454
  closeTip?: string | undefined;
2265
2455
  closeCallbackUrl?: string | Record<string, string> | undefined;
2266
2456
  }, {
2267
- id: string;
2268
2457
  command: string;
2269
2458
  args: string[];
2270
2459
  platform: "windows" | "macos" | "common";
2271
2460
  exitCode: number | null;
2272
2461
  title: string;
2462
+ id: string;
2273
2463
  isExited: boolean;
2274
2464
  closeTip?: string | undefined;
2275
2465
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2286,19 +2476,19 @@ declare const PtyCreateMessageSchema: z.ZodObject<{
2286
2476
  }, "strip", z.ZodTypeAny, {
2287
2477
  type: "create";
2288
2478
  requestId: string;
2289
- command?: string | undefined;
2290
- args?: string[] | undefined;
2291
2479
  cols?: number | undefined;
2292
2480
  rows?: number | undefined;
2481
+ command?: string | undefined;
2482
+ args?: string[] | undefined;
2293
2483
  closeTip?: string | undefined;
2294
2484
  closeCallbackUrl?: string | Record<string, string> | undefined;
2295
2485
  }, {
2296
2486
  type: "create";
2297
2487
  requestId: string;
2298
- command?: string | undefined;
2299
- args?: string[] | undefined;
2300
2488
  cols?: number | undefined;
2301
2489
  rows?: number | undefined;
2490
+ command?: string | undefined;
2491
+ args?: string[] | undefined;
2302
2492
  closeTip?: string | undefined;
2303
2493
  closeCallbackUrl?: string | Record<string, string> | undefined;
2304
2494
  }>;
@@ -2376,19 +2566,19 @@ declare const PtyClientMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2376
2566
  }, "strip", z.ZodTypeAny, {
2377
2567
  type: "create";
2378
2568
  requestId: string;
2379
- command?: string | undefined;
2380
- args?: string[] | undefined;
2381
2569
  cols?: number | undefined;
2382
2570
  rows?: number | undefined;
2571
+ command?: string | undefined;
2572
+ args?: string[] | undefined;
2383
2573
  closeTip?: string | undefined;
2384
2574
  closeCallbackUrl?: string | Record<string, string> | undefined;
2385
2575
  }, {
2386
2576
  type: "create";
2387
2577
  requestId: string;
2388
- command?: string | undefined;
2389
- args?: string[] | undefined;
2390
2578
  cols?: number | undefined;
2391
2579
  rows?: number | undefined;
2580
+ command?: string | undefined;
2581
+ args?: string[] | undefined;
2392
2582
  closeTip?: string | undefined;
2393
2583
  closeCallbackUrl?: string | Record<string, string> | undefined;
2394
2584
  }>, z.ZodObject<{
@@ -2530,22 +2720,22 @@ declare const PtyListResponseSchema: z.ZodObject<{
2530
2720
  closeTip: z.ZodOptional<z.ZodString>;
2531
2721
  closeCallbackUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
2532
2722
  }, "strip", z.ZodTypeAny, {
2533
- id: string;
2534
2723
  command: string;
2535
2724
  args: string[];
2536
2725
  platform: "windows" | "macos" | "common";
2537
2726
  exitCode: number | null;
2538
2727
  title: string;
2728
+ id: string;
2539
2729
  isExited: boolean;
2540
2730
  closeTip?: string | undefined;
2541
2731
  closeCallbackUrl?: string | Record<string, string> | undefined;
2542
2732
  }, {
2543
- id: string;
2544
2733
  command: string;
2545
2734
  args: string[];
2546
2735
  platform: "windows" | "macos" | "common";
2547
2736
  exitCode: number | null;
2548
2737
  title: string;
2738
+ id: string;
2549
2739
  isExited: boolean;
2550
2740
  closeTip?: string | undefined;
2551
2741
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2553,12 +2743,12 @@ declare const PtyListResponseSchema: z.ZodObject<{
2553
2743
  }, "strip", z.ZodTypeAny, {
2554
2744
  type: "list";
2555
2745
  sessions: {
2556
- id: string;
2557
2746
  command: string;
2558
2747
  args: string[];
2559
2748
  platform: "windows" | "macos" | "common";
2560
2749
  exitCode: number | null;
2561
2750
  title: string;
2751
+ id: string;
2562
2752
  isExited: boolean;
2563
2753
  closeTip?: string | undefined;
2564
2754
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2566,12 +2756,12 @@ declare const PtyListResponseSchema: z.ZodObject<{
2566
2756
  }, {
2567
2757
  type: "list";
2568
2758
  sessions: {
2569
- id: string;
2570
2759
  command: string;
2571
2760
  args: string[];
2572
2761
  platform: "windows" | "macos" | "common";
2573
2762
  exitCode: number | null;
2574
2763
  title: string;
2764
+ id: string;
2575
2765
  isExited: boolean;
2576
2766
  closeTip?: string | undefined;
2577
2767
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2584,14 +2774,14 @@ declare const PtyErrorResponseSchema: z.ZodObject<{
2584
2774
  message: z.ZodString;
2585
2775
  sessionId: z.ZodOptional<z.ZodString>;
2586
2776
  }, "strip", z.ZodTypeAny, {
2777
+ type: "error";
2587
2778
  code: "INVALID_JSON" | "INVALID_MESSAGE" | "SESSION_NOT_FOUND" | "PTY_CREATE_FAILED";
2588
2779
  message: string;
2589
- type: "error";
2590
2780
  sessionId?: string | undefined;
2591
2781
  }, {
2782
+ type: "error";
2592
2783
  code: "INVALID_JSON" | "INVALID_MESSAGE" | "SESSION_NOT_FOUND" | "PTY_CREATE_FAILED";
2593
2784
  message: string;
2594
- type: "error";
2595
2785
  sessionId?: string | undefined;
2596
2786
  }>;
2597
2787
  declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
@@ -2670,22 +2860,22 @@ declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2670
2860
  closeTip: z.ZodOptional<z.ZodString>;
2671
2861
  closeCallbackUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
2672
2862
  }, "strip", z.ZodTypeAny, {
2673
- id: string;
2674
2863
  command: string;
2675
2864
  args: string[];
2676
2865
  platform: "windows" | "macos" | "common";
2677
2866
  exitCode: number | null;
2678
2867
  title: string;
2868
+ id: string;
2679
2869
  isExited: boolean;
2680
2870
  closeTip?: string | undefined;
2681
2871
  closeCallbackUrl?: string | Record<string, string> | undefined;
2682
2872
  }, {
2683
- id: string;
2684
2873
  command: string;
2685
2874
  args: string[];
2686
2875
  platform: "windows" | "macos" | "common";
2687
2876
  exitCode: number | null;
2688
2877
  title: string;
2878
+ id: string;
2689
2879
  isExited: boolean;
2690
2880
  closeTip?: string | undefined;
2691
2881
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2693,12 +2883,12 @@ declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2693
2883
  }, "strip", z.ZodTypeAny, {
2694
2884
  type: "list";
2695
2885
  sessions: {
2696
- id: string;
2697
2886
  command: string;
2698
2887
  args: string[];
2699
2888
  platform: "windows" | "macos" | "common";
2700
2889
  exitCode: number | null;
2701
2890
  title: string;
2891
+ id: string;
2702
2892
  isExited: boolean;
2703
2893
  closeTip?: string | undefined;
2704
2894
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2706,12 +2896,12 @@ declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2706
2896
  }, {
2707
2897
  type: "list";
2708
2898
  sessions: {
2709
- id: string;
2710
2899
  command: string;
2711
2900
  args: string[];
2712
2901
  platform: "windows" | "macos" | "common";
2713
2902
  exitCode: number | null;
2714
2903
  title: string;
2904
+ id: string;
2715
2905
  isExited: boolean;
2716
2906
  closeTip?: string | undefined;
2717
2907
  closeCallbackUrl?: string | Record<string, string> | undefined;
@@ -2722,14 +2912,14 @@ declare const PtyServerMessageSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
2722
2912
  message: z.ZodString;
2723
2913
  sessionId: z.ZodOptional<z.ZodString>;
2724
2914
  }, "strip", z.ZodTypeAny, {
2915
+ type: "error";
2725
2916
  code: "INVALID_JSON" | "INVALID_MESSAGE" | "SESSION_NOT_FOUND" | "PTY_CREATE_FAILED";
2726
2917
  message: string;
2727
- type: "error";
2728
2918
  sessionId?: string | undefined;
2729
2919
  }, {
2920
+ type: "error";
2730
2921
  code: "INVALID_JSON" | "INVALID_MESSAGE" | "SESSION_NOT_FOUND" | "PTY_CREATE_FAILED";
2731
2922
  message: string;
2732
- type: "error";
2733
2923
  sessionId?: string | undefined;
2734
2924
  }>]>;
2735
2925
  type PtyClientMessage = z.infer<typeof PtyClientMessageSchema>;
@@ -2737,4 +2927,4 @@ type PtyServerMessage = z.infer<typeof PtyServerMessageSchema>;
2737
2927
  type PtySessionInfo = z.infer<typeof PtySessionInfoSchema>;
2738
2928
  type PtyPlatform = z.infer<typeof PtyPlatformSchema>;
2739
2929
  //#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 };
2930
+ 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, VIRTUAL_PROJECT_DIRNAME, 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, toOpsxDisplayPath };