@vscode/component-explorer-cli 0.1.1-9 → 0.2.1-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 (134) hide show
  1. package/LICENSE +21 -0
  2. package/SECURITY.md +14 -0
  3. package/dist/WorktreePool.d.ts +22 -0
  4. package/dist/WorktreePool.d.ts.map +1 -0
  5. package/dist/WorktreePool.js +58 -0
  6. package/dist/WorktreePool.js.map +1 -0
  7. package/dist/WorktreePool.test.d.ts +2 -0
  8. package/dist/WorktreePool.test.d.ts.map +1 -0
  9. package/dist/_virtual/_build-info.js +4 -0
  10. package/dist/_virtual/_build-info.js.map +1 -0
  11. package/dist/browserPage.d.ts +15 -1
  12. package/dist/browserPage.d.ts.map +1 -1
  13. package/dist/browserPage.js +51 -7
  14. package/dist/browserPage.js.map +1 -1
  15. package/dist/commands/acceptCommand.d.ts.map +1 -1
  16. package/dist/commands/acceptCommand.js +3 -2
  17. package/dist/commands/acceptCommand.js.map +1 -1
  18. package/dist/commands/checkStabilityCommand.d.ts +12 -0
  19. package/dist/commands/checkStabilityCommand.d.ts.map +1 -0
  20. package/dist/commands/checkStabilityCommand.js +84 -0
  21. package/dist/commands/checkStabilityCommand.js.map +1 -0
  22. package/dist/commands/compareCommand.d.ts +1 -0
  23. package/dist/commands/compareCommand.d.ts.map +1 -1
  24. package/dist/commands/compareCommand.js +25 -4
  25. package/dist/commands/compareCommand.js.map +1 -1
  26. package/dist/commands/mcpCommand.d.ts +1 -0
  27. package/dist/commands/mcpCommand.d.ts.map +1 -1
  28. package/dist/commands/mcpCommand.js +23 -10
  29. package/dist/commands/mcpCommand.js.map +1 -1
  30. package/dist/commands/screenshotCommand.d.ts +2 -0
  31. package/dist/commands/screenshotCommand.d.ts.map +1 -1
  32. package/dist/commands/screenshotCommand.js +19 -4
  33. package/dist/commands/screenshotCommand.js.map +1 -1
  34. package/dist/commands/serveCommand.d.ts +4 -0
  35. package/dist/commands/serveCommand.d.ts.map +1 -1
  36. package/dist/commands/serveCommand.js +101 -26
  37. package/dist/commands/serveCommand.js.map +1 -1
  38. package/dist/commands/watchCommand.d.ts +2 -0
  39. package/dist/commands/watchCommand.d.ts.map +1 -1
  40. package/dist/commands/watchCommand.js +18 -66
  41. package/dist/commands/watchCommand.js.map +1 -1
  42. package/dist/comparison.d.ts +11 -1
  43. package/dist/comparison.d.ts.map +1 -1
  44. package/dist/comparison.js +25 -11
  45. package/dist/comparison.js.map +1 -1
  46. package/dist/component-explorer-config.schema.json +260 -55
  47. package/dist/componentExplorer.d.ts +21 -18
  48. package/dist/componentExplorer.d.ts.map +1 -1
  49. package/dist/componentExplorer.js +60 -19
  50. package/dist/componentExplorer.js.map +1 -1
  51. package/dist/daemon/DaemonService.d.ts +100 -11
  52. package/dist/daemon/DaemonService.d.ts.map +1 -1
  53. package/dist/daemon/DaemonService.js +512 -129
  54. package/dist/daemon/DaemonService.js.map +1 -1
  55. package/dist/daemon/dynamicSessions.test.d.ts +2 -0
  56. package/dist/daemon/dynamicSessions.test.d.ts.map +1 -0
  57. package/dist/daemon/lifecycle.d.ts +2 -1
  58. package/dist/daemon/lifecycle.d.ts.map +1 -1
  59. package/dist/daemon/lifecycle.js +52 -30
  60. package/dist/daemon/lifecycle.js.map +1 -1
  61. package/dist/daemon/pipeClient.d.ts.map +1 -1
  62. package/dist/daemon/pipeClient.js +81 -2
  63. package/dist/daemon/pipeClient.js.map +1 -1
  64. package/dist/daemon/pipeServer.d.ts +2 -1
  65. package/dist/daemon/pipeServer.d.ts.map +1 -1
  66. package/dist/daemon/pipeServer.js +59 -2
  67. package/dist/daemon/pipeServer.js.map +1 -1
  68. package/dist/daemon/version.d.ts +10 -0
  69. package/dist/daemon/version.d.ts.map +1 -0
  70. package/dist/daemon/version.js +17 -0
  71. package/dist/daemon/version.js.map +1 -0
  72. package/dist/dependencyInstaller.d.ts +2 -2
  73. package/dist/dependencyInstaller.d.ts.map +1 -1
  74. package/dist/dependencyInstaller.js.map +1 -1
  75. package/dist/explorerSession.d.ts +3 -3
  76. package/dist/explorerSession.d.ts.map +1 -1
  77. package/dist/explorerSession.js +26 -9
  78. package/dist/explorerSession.js.map +1 -1
  79. package/dist/git/gitIndexResolver.d.ts +25 -0
  80. package/dist/git/gitIndexResolver.d.ts.map +1 -0
  81. package/dist/git/gitIndexResolver.js +91 -0
  82. package/dist/git/gitIndexResolver.js.map +1 -0
  83. package/dist/git/gitIndexResolver.test.d.ts +2 -0
  84. package/dist/git/gitIndexResolver.test.d.ts.map +1 -0
  85. package/dist/git/gitService.d.ts +2 -0
  86. package/dist/git/gitService.d.ts.map +1 -1
  87. package/dist/git/gitService.js +6 -0
  88. package/dist/git/gitService.js.map +1 -1
  89. package/dist/git/gitWorktreeManager.d.ts +6 -0
  90. package/dist/git/gitWorktreeManager.d.ts.map +1 -1
  91. package/dist/git/gitWorktreeManager.js +42 -13
  92. package/dist/git/gitWorktreeManager.js.map +1 -1
  93. package/dist/git/gitWorktreeManager.test.d.ts +2 -0
  94. package/dist/git/gitWorktreeManager.test.d.ts.map +1 -0
  95. package/dist/git/testUtils.d.ts +13 -0
  96. package/dist/git/testUtils.d.ts.map +1 -0
  97. package/dist/httpServer.d.ts +18 -7
  98. package/dist/httpServer.d.ts.map +1 -1
  99. package/dist/httpServer.js +117 -18
  100. package/dist/httpServer.js.map +1 -1
  101. package/dist/httpServer.test.d.ts +2 -0
  102. package/dist/httpServer.test.d.ts.map +1 -0
  103. package/dist/index.js +11 -2
  104. package/dist/index.js.map +1 -1
  105. package/dist/logger.d.ts +1 -0
  106. package/dist/logger.d.ts.map +1 -1
  107. package/dist/logger.js +7 -1
  108. package/dist/logger.js.map +1 -1
  109. package/dist/mcp/McpServer.d.ts +18 -0
  110. package/dist/mcp/McpServer.d.ts.map +1 -1
  111. package/dist/mcp/McpServer.js +555 -13
  112. package/dist/mcp/McpServer.js.map +1 -1
  113. package/dist/mcp/TaskManager.d.ts +28 -0
  114. package/dist/mcp/TaskManager.d.ts.map +1 -0
  115. package/dist/mcp/TaskManager.js +54 -0
  116. package/dist/mcp/TaskManager.js.map +1 -0
  117. package/dist/packages/simple-api/dist/{chunk-Q24JOMNK.js → chunk-TAEFVNPN.js} +1 -1
  118. package/dist/packages/simple-api/dist/chunk-TAEFVNPN.js.map +1 -0
  119. package/dist/packages/simple-api/dist/express.js +11 -3
  120. package/dist/packages/simple-api/dist/express.js.map +1 -1
  121. package/dist/utils.d.ts +7 -0
  122. package/dist/utils.d.ts.map +1 -1
  123. package/dist/utils.js +6 -7
  124. package/dist/utils.js.map +1 -1
  125. package/dist/visualCache.d.ts +34 -0
  126. package/dist/visualCache.d.ts.map +1 -0
  127. package/dist/visualCache.js +90 -0
  128. package/dist/visualCache.js.map +1 -0
  129. package/dist/watchConfig.d.ts +68 -15
  130. package/dist/watchConfig.d.ts.map +1 -1
  131. package/dist/watchConfig.js +109 -65
  132. package/dist/watchConfig.js.map +1 -1
  133. package/package.json +21 -4
  134. package/dist/packages/simple-api/dist/chunk-Q24JOMNK.js.map +0 -1
@@ -3,13 +3,13 @@ import type { BrowserPageFactory } from './browserPage.js';
3
3
  import { type ComponentExplorerHttpServerFactory, type ViteServerOptions } from './httpServer.js';
4
4
  import type { IObservable } from '@vscode/observables';
5
5
  import type { SourceTreeId } from './sourceTreeId.js';
6
- import type { ViteProjectRef } from './viteProjectRef.js';
6
+ import type { ResolvedServerConfig } from './watchConfig.js';
7
7
  export declare class ExplorerSession {
8
8
  readonly name: string;
9
- readonly explorer: ComponentExplorer;
10
9
  private readonly _server;
10
+ readonly explorer: ComponentExplorer;
11
+ static create(name: string, serverConfig: ResolvedServerConfig, serverFactory: ComponentExplorerHttpServerFactory, browserFactory: BrowserPageFactory, options?: ViteServerOptions): Promise<ExplorerSession>;
11
12
  private constructor();
12
- static create(name: string, project: ViteProjectRef, serverFactory: ComponentExplorerHttpServerFactory, browserFactory: BrowserPageFactory, options?: ViteServerOptions): Promise<ExplorerSession>;
13
13
  get serverUrl(): string;
14
14
  get sourceTreeId(): IObservable<SourceTreeId>;
15
15
  dispose(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"explorerSession.d.ts","sourceRoot":"","sources":["../src/explorerSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAoC,KAAK,kCAAkC,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,qBAAa,eAAe;IAE1B,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHzB,OAAO;WAMM,MAAM,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,kCAAkC,EACjD,cAAc,EAAE,kBAAkB,EAClC,OAAO,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,eAAe,CAAC;IAM3B,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,YAAY,IAAI,WAAW,CAAC,YAAY,CAAC,CAE5C;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI9B"}
1
+ {"version":3,"file":"explorerSession.d.ts","sourceRoot":"","sources":["../src/explorerSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAoC,KAAK,kCAAkC,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,qBAAa,eAAe;IA6B1B,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB;WA9BxB,MAAM,CAClB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,oBAAoB,EAClC,aAAa,EAAE,kCAAkC,EACjD,cAAc,EAAE,kBAAkB,EAClC,OAAO,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,eAAe,CAAC;IAqB3B,OAAO;IAMP,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,YAAY,IAAI,WAAW,CAAC,YAAY,CAAC,CAE5C;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI9B"}
@@ -2,23 +2,40 @@ import { BrowserComponentExplorer } from './componentExplorer.js';
2
2
 
3
3
  class ExplorerSession {
4
4
  name;
5
- explorer;
6
5
  _server;
7
- constructor(name, explorer, _server) {
6
+ explorer;
7
+ static async create(name, serverConfig, serverFactory, browserFactory, options) {
8
+ let server;
9
+ if (serverConfig.kind === 'vite') {
10
+ server = await serverFactory.createViteServer(serverConfig.viteProject, {
11
+ ...options,
12
+ hmrAllowedPaths: serverConfig.hmr?.allowedPaths ?? options?.hmrAllowedPaths,
13
+ });
14
+ }
15
+ else if (serverConfig.kind === 'http') {
16
+ server = await serverFactory.createHttpServer(serverConfig.url, {
17
+ cmd: serverConfig.cmd,
18
+ cwd: serverConfig.cwd,
19
+ wait: serverConfig.wait,
20
+ logger: options?.logger,
21
+ });
22
+ }
23
+ else {
24
+ throw new Error(`Unsupported server config kind: ${serverConfig.kind}`);
25
+ }
26
+ const explorer = new BrowserComponentExplorer(browserFactory, server, options?.logger);
27
+ return new ExplorerSession(name, server, explorer);
28
+ }
29
+ constructor(name, _server, explorer) {
8
30
  this.name = name;
9
- this.explorer = explorer;
10
31
  this._server = _server;
11
- }
12
- static async create(name, project, serverFactory, browserFactory, options) {
13
- const server = await serverFactory.createViteServer(project, options);
14
- const explorer = new BrowserComponentExplorer(browserFactory, server, options?.logger);
15
- return new ExplorerSession(name, explorer, server);
32
+ this.explorer = explorer;
16
33
  }
17
34
  get serverUrl() {
18
35
  return this._server.url;
19
36
  }
20
37
  get sourceTreeId() {
21
- return this._server.sourceTreeId;
38
+ return this.explorer.sourceTreeId;
22
39
  }
23
40
  async dispose() {
24
41
  await this.explorer.dispose();
@@ -1 +1 @@
1
- {"version":3,"file":"explorerSession.js","sources":["../src/explorerSession.ts"],"sourcesContent":[null],"names":[],"mappings":";;MAOa,eAAe,CAAA;AAEjB,IAAA,IAAA;AACA,IAAA,QAAA;AACQ,IAAA,OAAA;AAHlB,IAAA,WAAA,CACU,IAAY,EACZ,QAA2B,EACnB,OAAoC,EAAA;QAF5C,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACA,IAAA,CAAA,OAAO,GAAP,OAAO;IACtB;AAEH,IAAA,aAAa,MAAM,CAClB,IAAY,EACZ,OAAuB,EACvB,aAAiD,EACjD,cAAkC,EAClC,OAA2B,EAAA;QAE3B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AACrE,QAAA,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;QACtF,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;IACnD;AAEA,IAAA,IAAI,SAAS,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG;IACxB;AAEA,IAAA,IAAI,YAAY,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY;IACjC;AAEA,IAAA,MAAM,OAAO,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC7B,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IAC7B;AACA;;;;"}
1
+ {"version":3,"file":"explorerSession.js","sources":["../src/explorerSession.ts"],"sourcesContent":[null],"names":[],"mappings":";;MAOa,eAAe,CAAA;AA6BjB,IAAA,IAAA;AACQ,IAAA,OAAA;AACR,IAAA,QAAA;AA9BV,IAAA,aAAa,MAAM,CAClB,IAAY,EACZ,YAAkC,EAClC,aAAiD,EACjD,cAAkC,EAClC,OAA2B,EAAA;AAE3B,QAAA,IAAI,MAAmC;AACvC,QAAA,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE;YACjC,MAAM,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,WAAW,EAAE;AACvE,gBAAA,GAAG,OAAO;gBACV,eAAe,EAAE,YAAY,CAAC,GAAG,EAAE,YAAY,IAAI,OAAO,EAAE,eAAe;AAC3E,aAAA,CAAC;QACH;AAAO,aAAA,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE;YACxC,MAAM,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,EAAE;gBAC/D,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,MAAM,EAAE,OAAO,EAAE,MAAM;AACvB,aAAA,CAAC;QACH;aAAO;YACN,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAoC,YAAoB,CAAC,IAAI,CAAA,CAAE,CAAC;QACjF;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;QACtF,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;IACnD;AAEA,IAAA,WAAA,CACU,IAAY,EACJ,OAAoC,EAC5C,QAA2B,EAAA;QAF3B,IAAA,CAAA,IAAI,GAAJ,IAAI;QACI,IAAA,CAAA,OAAO,GAAP,OAAO;QACf,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACf;AAEH,IAAA,IAAI,SAAS,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG;IACxB;AAEA,IAAA,IAAI,YAAY,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;IAClC;AAEA,IAAA,MAAM,OAAO,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC7B,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IAC7B;AACA;;;;"}
@@ -0,0 +1,25 @@
1
+ import type { IDisposable } from '@vscode/observables';
2
+ import { type IObservable } from '@vscode/observables';
3
+ import { GitCommitId } from './gitCommitId.js';
4
+ /**
5
+ * Watches the git index and creates temporary commits representing the staged state.
6
+ * This enables worktree sessions checked out at "INDEX" — a snapshot of what's staged.
7
+ */
8
+ export declare class GitIndexResolver implements IDisposable {
9
+ private readonly _gitRoot;
10
+ static readonly INDEX_REF = "INDEX";
11
+ private readonly _resolvedCommit;
12
+ private _watcher;
13
+ private _debounceTimer;
14
+ private _disposed;
15
+ get ref(): string;
16
+ get resolvedCommit(): IObservable<GitCommitId>;
17
+ private constructor();
18
+ static create(gitRoot: string): Promise<GitIndexResolver>;
19
+ private static _createIndexCommit;
20
+ private _startWatching;
21
+ private _scheduleResolve;
22
+ private _resolve;
23
+ dispose(): void;
24
+ }
25
+ //# sourceMappingURL=gitIndexResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitIndexResolver.d.ts","sourceRoot":"","sources":["../../src/git/gitIndexResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAYlD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX1B,MAAM,CAAC,QAAQ,CAAC,SAAS,WAAW;IAEpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,SAAS,CAAS;IAE1B,IAAI,GAAG,IAAI,MAAM,CAAuC;IACxD,IAAI,cAAc,IAAI,WAAW,CAAC,WAAW,CAAC,CAAiC;IAE/E,OAAO;WAOM,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;mBAO1C,kBAAkB;IAWvC,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;YAMV,QAAQ;IAYtB,OAAO,IAAI,IAAI;CAMf"}
@@ -0,0 +1,91 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import '../external/vscode-observables/observables/dist/observableInternal/index.js';
4
+ import { observableValue } from '../external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js';
5
+ import '../external/vscode-observables/observables/dist/observableInternal/debugLocation.js';
6
+ import '../external/vscode-observables/observables/dist/observableInternal/observables/derived.js';
7
+ import '../external/vscode-observables/observables/dist/observableInternal/utils/utils.js';
8
+ import '../external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
9
+ import { GitCommitId } from './gitCommitId.js';
10
+ import { execGit } from './gitUtils.js';
11
+
12
+ /**
13
+ * Watches the git index and creates temporary commits representing the staged state.
14
+ * This enables worktree sessions checked out at "INDEX" — a snapshot of what's staged.
15
+ */
16
+ class GitIndexResolver {
17
+ _gitRoot;
18
+ static INDEX_REF = 'INDEX';
19
+ _resolvedCommit;
20
+ _watcher;
21
+ _debounceTimer;
22
+ _disposed = false;
23
+ get ref() { return GitIndexResolver.INDEX_REF; }
24
+ get resolvedCommit() { return this._resolvedCommit; }
25
+ constructor(_gitRoot, initialCommit) {
26
+ this._gitRoot = _gitRoot;
27
+ this._resolvedCommit = observableValue('commitResolver(INDEX)', initialCommit);
28
+ }
29
+ static async create(gitRoot) {
30
+ const commit = await GitIndexResolver._createIndexCommit(gitRoot);
31
+ const resolver = new GitIndexResolver(gitRoot, commit);
32
+ resolver._startWatching();
33
+ return resolver;
34
+ }
35
+ static async _createIndexCommit(gitRoot) {
36
+ const treeHash = (await execGit(gitRoot, ['write-tree'])).trim();
37
+ const headHash = (await execGit(gitRoot, ['rev-parse', 'HEAD'])).trim();
38
+ const commitHash = (await execGit(gitRoot, [
39
+ 'commit-tree', treeHash,
40
+ '-p', headHash,
41
+ '-m', 'index snapshot',
42
+ ])).trim();
43
+ return new GitCommitId(commitHash);
44
+ }
45
+ _startWatching() {
46
+ const indexPath = path.join(this._gitRoot, '.git', 'index');
47
+ try {
48
+ this._watcher = fs.watch(indexPath, { persistent: false }, () => {
49
+ this._scheduleResolve();
50
+ });
51
+ this._watcher.on('error', () => { });
52
+ }
53
+ catch {
54
+ // If we can't watch, the resolver still works — just won't auto-update
55
+ }
56
+ }
57
+ _scheduleResolve() {
58
+ if (this._disposed) {
59
+ return;
60
+ }
61
+ if (this._debounceTimer) {
62
+ clearTimeout(this._debounceTimer);
63
+ }
64
+ this._debounceTimer = setTimeout(() => { this._resolve(); }, 300);
65
+ }
66
+ async _resolve() {
67
+ if (this._disposed) {
68
+ return;
69
+ }
70
+ try {
71
+ const newCommit = await GitIndexResolver._createIndexCommit(this._gitRoot);
72
+ if (!this._resolvedCommit.get().equals(newCommit)) {
73
+ this._resolvedCommit.set(newCommit, undefined);
74
+ }
75
+ }
76
+ catch {
77
+ // index may be temporarily in a bad state during staging, ignore
78
+ }
79
+ }
80
+ dispose() {
81
+ this._disposed = true;
82
+ if (this._debounceTimer) {
83
+ clearTimeout(this._debounceTimer);
84
+ }
85
+ this._watcher?.close();
86
+ this._watcher = undefined;
87
+ }
88
+ }
89
+
90
+ export { GitIndexResolver };
91
+ //# sourceMappingURL=gitIndexResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitIndexResolver.js","sources":["../../src/git/gitIndexResolver.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gitIndexResolver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitIndexResolver.test.d.ts","sourceRoot":"","sources":["../../src/git/gitIndexResolver.test.ts"],"names":[],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  import type { IDisposable } from '@vscode/observables';
2
2
  import type { IGitCommitResolver } from './gitCommitResolver.js';
3
+ import { GitIndexResolver } from './gitIndexResolver.js';
3
4
  import { type GitWorktreeManager } from './gitWorktreeManager.js';
4
5
  import { GitCommitId } from './gitCommitId.js';
5
6
  export interface IGitService {
@@ -9,6 +10,7 @@ export interface IGitRepo extends IDisposable {
9
10
  readonly gitRoot: string;
10
11
  readonly worktrees: GitWorktreeManager;
11
12
  createCommitResolver(ref: string): Promise<IGitCommitResolver>;
13
+ createIndexResolver(): Promise<GitIndexResolver>;
12
14
  resolveRef(ref: string): Promise<GitCommitId>;
13
15
  worktreeRootPath(): string;
14
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gitService.d.ts","sourceRoot":"","sources":["../../src/git/gitService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAA6B,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC3B,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,QAAS,SAAQ,WAAW;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9C,gBAAgB,IAAI,MAAM,CAAC;CAC3B;AAED,qBAAa,UAAW,YAAW,WAAW;IACvC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAI5D"}
1
+ {"version":3,"file":"gitService.d.ts","sourceRoot":"","sources":["../../src/git/gitService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,kBAAkB,EAA6B,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC3B,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,QAAS,SAAQ,WAAW;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/D,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9C,gBAAgB,IAAI,MAAM,CAAC;CAC3B;AAED,qBAAa,UAAW,YAAW,WAAW;IACvC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAI5D"}
@@ -1,4 +1,5 @@
1
1
  import { GitCommitResolver } from './gitCommitResolver.js';
2
+ import { GitIndexResolver } from './gitIndexResolver.js';
2
3
  import { DefaultGitWorktreeManager } from './gitWorktreeManager.js';
3
4
  import { getGitRoot, resolveRef, worktreeRootPath } from './gitUtils.js';
4
5
  import { GitCommitId } from './gitCommitId.js';
@@ -22,6 +23,11 @@ class GitRepo {
22
23
  this._resolvers.add(resolver);
23
24
  return resolver;
24
25
  }
26
+ async createIndexResolver() {
27
+ const resolver = await GitIndexResolver.create(this.gitRoot);
28
+ this._resolvers.add(resolver);
29
+ return resolver;
30
+ }
25
31
  async resolveRef(ref) {
26
32
  const hash = await resolveRef(this.gitRoot, ref);
27
33
  return new GitCommitId(hash);
@@ -1 +1 @@
1
- {"version":3,"file":"gitService.js","sources":["../../src/git/gitService.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;MAmBa,UAAU,CAAA;IACtB,MAAM,kBAAkB,CAAC,OAAe,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;AACzC,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAC5B;AACA;AAED,MAAM,OAAO,CAAA;AAIS,IAAA,OAAA;AAHZ,IAAA,SAAS;AACD,IAAA,UAAU,GAAG,IAAI,GAAG,EAAsB;AAE3D,IAAA,WAAA,CAAqB,OAAe,EAAA;QAAf,IAAA,CAAA,OAAO,GAAP,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAyB,CAAC,OAAO,CAAC;IACxD;IAEA,MAAM,oBAAoB,CAAC,GAAW,EAAA;AACrC,QAAA,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AAClE,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,QAAQ;IAChB;IAEA,MAAM,UAAU,CAAC,GAAW,EAAA;QAC3B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AAChD,QAAA,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC;IAC7B;IAEA,gBAAgB,GAAA;AACf,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;IACtC;IAEA,OAAO,GAAA;AACN,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;YACvC,QAAQ,CAAC,OAAO,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACxB;AACA;;;;"}
1
+ {"version":3,"file":"gitService.js","sources":["../../src/git/gitService.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;MAqBa,UAAU,CAAA;IACtB,MAAM,kBAAkB,CAAC,OAAe,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;AACzC,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAC5B;AACA;AAED,MAAM,OAAO,CAAA;AAIS,IAAA,OAAA;AAHZ,IAAA,SAAS;AACD,IAAA,UAAU,GAAG,IAAI,GAAG,EAAsB;AAE3D,IAAA,WAAA,CAAqB,OAAe,EAAA;QAAf,IAAA,CAAA,OAAO,GAAP,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAyB,CAAC,OAAO,CAAC;IACxD;IAEA,MAAM,oBAAoB,CAAC,GAAW,EAAA;AACrC,QAAA,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AAClE,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,QAAQ;IAChB;AAEA,IAAA,MAAM,mBAAmB,GAAA;QACxB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5D,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,QAAQ;IAChB;IAEA,MAAM,UAAU,CAAC,GAAW,EAAA;QAC3B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AAChD,QAAA,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC;IAC7B;IAEA,gBAAgB,GAAA;AACf,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;IACtC;IAEA,OAAO,GAAA;AACN,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;YACvC,QAAQ,CAAC,OAAO,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACxB;AACA;;;;"}
@@ -3,6 +3,12 @@ export interface GitWorktreeInfo {
3
3
  readonly path: string;
4
4
  readonly checkedOutCommit: GitCommitId;
5
5
  readonly isDirty: boolean;
6
+ readonly dirtyFiles: readonly string[];
7
+ }
8
+ export declare class DirtyWorktreeError extends Error {
9
+ readonly worktreePath: string;
10
+ readonly dirtyFiles: readonly string[];
11
+ constructor(worktreePath: string, dirtyFiles: readonly string[], operation: string);
6
12
  }
7
13
  export interface GitWorktreeManager {
8
14
  create(worktreePath: string, commit: GitCommitId): Promise<GitWorktreeInfo>;
@@ -1 +1 @@
1
- {"version":3,"file":"gitWorktreeManager.d.ts","sourceRoot":"","sources":["../../src/git/gitWorktreeManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5E,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9E,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC;CAChE;AAED,qBAAa,yBAA0B,YAAW,kBAAkB;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEvC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAS3E,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3C,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAe7E,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAchE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;CAsCrE"}
1
+ {"version":3,"file":"gitWorktreeManager.d.ts","sourceRoot":"","sources":["../../src/git/gitWorktreeManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE;gBAD7B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,SAAS,MAAM,EAAE,EACtC,SAAS,EAAE,MAAM;CAQlB;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5E,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9E,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC;CAChE;AAED,qBAAa,yBAA0B,YAAW,kBAAkB;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEvC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAS3E,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3C,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAe7E,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAehE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;CAqCrE"}
@@ -1,6 +1,18 @@
1
+ import * as path from 'node:path';
1
2
  import { GitCommitId } from './gitCommitId.js';
2
3
  import { execGit } from './gitUtils.js';
3
4
 
5
+ class DirtyWorktreeError extends Error {
6
+ worktreePath;
7
+ dirtyFiles;
8
+ constructor(worktreePath, dirtyFiles, operation) {
9
+ super(`Worktree is dirty, refusing ${operation}: ${worktreePath}\n` +
10
+ dirtyFiles.map(f => ` ${f}`).join('\n'));
11
+ this.worktreePath = worktreePath;
12
+ this.dirtyFiles = dirtyFiles;
13
+ this.name = 'DirtyWorktreeError';
14
+ }
15
+ }
4
16
  class DefaultGitWorktreeManager {
5
17
  _gitRoot;
6
18
  constructor(_gitRoot) {
@@ -20,7 +32,7 @@ class DefaultGitWorktreeManager {
20
32
  throw new Error(`Worktree does not exist: ${worktreePath}`);
21
33
  }
22
34
  if (current.isDirty) {
23
- throw new Error(`Worktree is dirty, refusing remove: ${worktreePath}`);
35
+ throw new DirtyWorktreeError(worktreePath, current.dirtyFiles, 'remove');
24
36
  }
25
37
  await execGit(this._gitRoot, ['worktree', 'remove', worktreePath]);
26
38
  }
@@ -30,7 +42,7 @@ class DefaultGitWorktreeManager {
30
42
  throw new Error(`Worktree does not exist: ${worktreePath}`);
31
43
  }
32
44
  if (current.isDirty) {
33
- throw new Error(`Worktree is dirty, refusing checkout: ${worktreePath}`);
45
+ throw new DirtyWorktreeError(worktreePath, current.dirtyFiles, 'checkout');
34
46
  }
35
47
  if (current.checkedOutCommit.equals(commit)) {
36
48
  return current;
@@ -41,11 +53,12 @@ class DefaultGitWorktreeManager {
41
53
  async info(worktreePath) {
42
54
  try {
43
55
  const head = (await execGit(worktreePath, ['rev-parse', 'HEAD'])).trim();
44
- const status = (await execGit(worktreePath, ['status', '--porcelain'])).trim();
56
+ const dirtyFiles = parsePorcelainStatus(worktreePath, await execGit(worktreePath, ['status', '--porcelain']));
45
57
  return {
46
58
  path: worktreePath,
47
59
  checkedOutCommit: new GitCommitId(head),
48
- isDirty: status.length > 0,
60
+ isDirty: dirtyFiles.length > 0,
61
+ dirtyFiles,
49
62
  };
50
63
  }
51
64
  catch {
@@ -60,7 +73,6 @@ class DefaultGitWorktreeManager {
60
73
  const lines = block.split('\n');
61
74
  let entryPath;
62
75
  let head;
63
- let isDirty = false;
64
76
  for (const line of lines) {
65
77
  if (line.startsWith('worktree ')) {
66
78
  entryPath = line.slice('worktree '.length);
@@ -72,23 +84,40 @@ class DefaultGitWorktreeManager {
72
84
  if (entryPath && head && entryPath.startsWith(worktreeRoot)) {
73
85
  // Check dirty status via git status
74
86
  try {
75
- const status = (await execGit(entryPath, ['status', '--porcelain'])).trim();
76
- isDirty = status.length > 0;
87
+ const dirtyFiles = parsePorcelainStatus(entryPath, await execGit(entryPath, ['status', '--porcelain']));
88
+ entries.push({
89
+ path: entryPath,
90
+ checkedOutCommit: new GitCommitId(head),
91
+ isDirty: dirtyFiles.length > 0,
92
+ dirtyFiles,
93
+ });
77
94
  }
78
95
  catch {
79
96
  // If we can't check, skip this entry
80
97
  continue;
81
98
  }
82
- entries.push({
83
- path: entryPath,
84
- checkedOutCommit: new GitCommitId(head),
85
- isDirty,
86
- });
87
99
  }
88
100
  }
89
101
  return entries;
90
102
  }
91
103
  }
104
+ function parsePorcelainStatus(worktreePath, output) {
105
+ // git status --porcelain format: "XY filename" where X=index status, Y=worktree status, then a space.
106
+ const results = [];
107
+ for (const raw of output.split('\n')) {
108
+ const line = raw.replace(/\r$/, '');
109
+ if (line === '') {
110
+ continue;
111
+ }
112
+ // Expect exactly: 2 status chars + space + filename
113
+ const match = line.match(/^(.)(.) (.+)$/);
114
+ if (!match) {
115
+ throw new Error(`Unexpected git status --porcelain line: ${JSON.stringify(line)}`);
116
+ }
117
+ results.push(path.resolve(worktreePath, match[3]));
118
+ }
119
+ return results;
120
+ }
92
121
 
93
- export { DefaultGitWorktreeManager };
122
+ export { DefaultGitWorktreeManager, DirtyWorktreeError };
94
123
  //# sourceMappingURL=gitWorktreeManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gitWorktreeManager.js","sources":["../../src/git/gitWorktreeManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gitWorktreeManager.js","sources":["../../src/git/gitWorktreeManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gitWorktreeManager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitWorktreeManager.test.d.ts","sourceRoot":"","sources":["../../src/git/gitWorktreeManager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { GitCommitId } from './gitCommitId.js';
2
+ export declare class TempGitRepo {
3
+ readonly root: string;
4
+ private constructor();
5
+ static create(): Promise<TempGitRepo>;
6
+ writeFile(relativePath: string, content: string): Promise<string>;
7
+ readFile(relativePath: string): Promise<string>;
8
+ addAndCommit(message: string): Promise<GitCommitId>;
9
+ stageFile(relativePath: string): Promise<void>;
10
+ resolveRef(ref: string): Promise<GitCommitId>;
11
+ dispose(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=testUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../src/git/testUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,WAAW;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAzC,OAAO;WAEM,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAQrC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOjE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOnD,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAK7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAO9B"}
@@ -1,25 +1,36 @@
1
- import type { IObservable } from '@vscode/observables';
2
1
  import { type ILogger } from './logger.js';
3
- import { SourceTreeId } from './sourceTreeId.js';
4
2
  import { ViteProjectRef } from './viteProjectRef.js';
5
3
  export interface ViteServerOptions {
6
4
  readonly resolveViteFrom?: string;
7
5
  readonly logger?: ILogger;
8
- /** Glob patterns for files that keep HMR. Everything else triggers a full reload. */
9
6
  readonly hmrAllowedPaths?: readonly string[];
7
+ readonly daemonConfig?: {
8
+ readonly pipeName: string;
9
+ readonly sessionName: string;
10
+ readonly daemonApiVersion: string;
11
+ readonly pluginProtocolVersion: string;
12
+ };
13
+ }
14
+ export interface HttpServerOptions {
15
+ readonly cmd?: string;
16
+ readonly cwd?: string;
17
+ readonly logger?: ILogger;
18
+ readonly wait?: {
19
+ readonly stdout?: RegExp;
20
+ readonly stderr?: RegExp;
21
+ };
10
22
  }
11
23
  export interface ComponentExplorerHttpServerFactory {
12
24
  createViteServer(project: ViteProjectRef, options?: ViteServerOptions): Promise<ComponentExplorerHttpServer>;
13
- createStaticServer(distDir: string): Promise<ComponentExplorerHttpServer>;
25
+ createHttpServer(url: string, options?: HttpServerOptions): Promise<ComponentExplorerHttpServer>;
14
26
  }
15
27
  export interface ComponentExplorerHttpServer {
16
28
  readonly url: string;
17
- readonly isStatic: boolean;
18
- readonly sourceTreeId: IObservable<SourceTreeId>;
29
+ readonly onSourceChange?: (callback: () => void) => void;
19
30
  dispose(): Promise<void>;
20
31
  }
21
32
  export declare class DefaultComponentExplorerHttpServerFactory implements ComponentExplorerHttpServerFactory {
22
33
  createViteServer(project: ViteProjectRef, options?: ViteServerOptions): Promise<ComponentExplorerHttpServer>;
23
- createStaticServer(_distDir: string): Promise<ComponentExplorerHttpServer>;
34
+ createHttpServer(url: string, options?: HttpServerOptions): Promise<ComponentExplorerHttpServer>;
24
35
  }
25
36
  //# sourceMappingURL=httpServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"httpServer.d.ts","sourceRoot":"","sources":["../src/httpServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,kCAAkC;IAClD,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC7G,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,qBAAa,yCAA0C,YAAW,kCAAkC;IAC7F,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAI5G,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAGhF"}
1
+ {"version":3,"file":"httpServer.d.ts","sourceRoot":"","sources":["../src/httpServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;KACvC,CAAC;CACF;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE;QACf,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACF;AAED,MAAM,WAAW,kCAAkC;IAClD,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC7G,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACjG;AAED,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,qBAAa,yCAA0C,YAAW,kCAAkC;IAC7F,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAI5G,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAGtG"}