dsh-git-worktree 0.8.0 → 0.9.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 (95) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.en.md +7 -5
  3. package/README.md +7 -5
  4. package/lib/adapters/git.js +86 -13
  5. package/lib/adapters/git.js.map +1 -1
  6. package/lib/adapters/initial-commit.d.ts +16 -0
  7. package/lib/adapters/initial-commit.js +112 -0
  8. package/lib/adapters/initial-commit.js.map +1 -0
  9. package/lib/adapters/lookup.js +21 -0
  10. package/lib/adapters/lookup.js.map +1 -1
  11. package/lib/client/WorktreeCreateRow.js +2 -1
  12. package/lib/client/WorktreeCreateRow.js.map +1 -1
  13. package/lib/client/WorktreeReviewRow.d.ts +1 -1
  14. package/lib/client/WorktreeReviewRow.js +2 -2
  15. package/lib/client/WorktreeReviewRow.js.map +1 -1
  16. package/lib/client/actions.d.ts +1 -5
  17. package/lib/client/actions.js.map +1 -1
  18. package/lib/client/console-remote/adapter.js +2 -0
  19. package/lib/client/console-remote/adapter.js.map +1 -1
  20. package/lib/client/pre-session/PreSessionWorktreeToggle.d.ts +2 -2
  21. package/lib/client/pre-session/PreSessionWorktreeToggle.js +92 -79
  22. package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -1
  23. package/lib/client/pre-session/controller.d.ts +3 -0
  24. package/lib/client/pre-session/controller.js +16 -4
  25. package/lib/client/pre-session/controller.js.map +1 -1
  26. package/lib/client/pre-session/harness-input.d.ts +13 -0
  27. package/lib/client/pre-session/harness-input.js +18 -0
  28. package/lib/client/pre-session/harness-input.js.map +1 -0
  29. package/lib/client/pre-session/index.d.ts +3 -3
  30. package/lib/client/pre-session/index.js +4 -3
  31. package/lib/client/pre-session/index.js.map +1 -1
  32. package/lib/client/review-console/PreflightStatus.js +3 -2
  33. package/lib/client/review-console/PreflightStatus.js.map +1 -1
  34. package/lib/client/review-console/ReviewActions.d.ts +4 -1
  35. package/lib/client/review-console/ReviewActions.js +73 -53
  36. package/lib/client/review-console/ReviewActions.js.map +1 -1
  37. package/lib/client/review-console/ReviewDetailsModal.d.ts +12 -0
  38. package/lib/client/review-console/ReviewDetailsModal.js +56 -0
  39. package/lib/client/review-console/ReviewDetailsModal.js.map +1 -0
  40. package/lib/client/review-console/ReviewIcon.d.ts +35 -0
  41. package/lib/client/review-console/ReviewIcon.js +14 -0
  42. package/lib/client/review-console/ReviewIcon.js.map +1 -0
  43. package/lib/client/review-console/WorktreeReviewPanel.d.ts +3 -7
  44. package/lib/client/review-console/WorktreeReviewPanel.js +8 -73
  45. package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -1
  46. package/lib/client/review-console/review-console.styles.js +101 -23
  47. package/lib/client/review-console/review-console.styles.js.map +1 -1
  48. package/lib/client/styles.js +13 -10
  49. package/lib/client/styles.js.map +1 -1
  50. package/lib/client/target-console/TargetStatusAction.js +65 -46
  51. package/lib/client/target-console/TargetStatusAction.js.map +1 -1
  52. package/lib/client/target-console/WorktreeConsoleView.d.ts +2 -1
  53. package/lib/client/target-console/WorktreeConsoleView.js +5 -4
  54. package/lib/client/target-console/WorktreeConsoleView.js.map +1 -1
  55. package/lib/client/target-console/WorktreeManagerModal.js +1 -1
  56. package/lib/client/target-console/WorktreeManagerModal.js.map +1 -1
  57. package/lib/client/target-console/WorktreeReviewStatus.js +36 -81
  58. package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -1
  59. package/lib/client/target-console/current-polling.d.ts +11 -0
  60. package/lib/client/target-console/current-polling.js +104 -0
  61. package/lib/client/target-console/current-polling.js.map +1 -0
  62. package/lib/client/target-console/target-console.styles.js +8 -0
  63. package/lib/client/target-console/target-console.styles.js.map +1 -1
  64. package/lib/client/workspace-sidebar/index.js +5 -2
  65. package/lib/client/workspace-sidebar/index.js.map +1 -1
  66. package/lib/client/workspace-sidebar/model.d.ts +3 -0
  67. package/lib/client/workspace-sidebar/model.js +83 -10
  68. package/lib/client/workspace-sidebar/model.js.map +1 -1
  69. package/lib/client.js +5608 -4004
  70. package/lib/console-contract.d.ts +20 -0
  71. package/lib/console-contract.js.map +1 -1
  72. package/lib/console-host/control-plane.d.ts +3 -1
  73. package/lib/console-host/control-plane.js +105 -15
  74. package/lib/console-host/control-plane.js.map +1 -1
  75. package/lib/console-host/service.d.ts +3 -1
  76. package/lib/console-host/service.js +12 -0
  77. package/lib/console-host/service.js.map +1 -1
  78. package/lib/console-remote/descriptors.js +3 -1
  79. package/lib/console-remote/descriptors.js.map +1 -1
  80. package/lib/console-remote/remote.d.ts +3 -1
  81. package/lib/console-remote/remote.js.map +1 -1
  82. package/lib/console-remote/schemas.d.ts +10 -2
  83. package/lib/console-remote/schemas.js +7 -0
  84. package/lib/console-remote/schemas.js.map +1 -1
  85. package/lib/i18n/client-messages.d.ts +168 -20
  86. package/lib/i18n/client-messages.js +71 -34
  87. package/lib/i18n/client-messages.js.map +1 -1
  88. package/lib/i18n/host-messages.d.ts +32 -0
  89. package/lib/i18n/host-messages.js +11 -0
  90. package/lib/i18n/host-messages.js.map +1 -1
  91. package/lib/ports.d.ts +15 -0
  92. package/lib/session-checkout-module.js +2 -0
  93. package/lib/session-checkout-module.js.map +1 -1
  94. package/package.json +2 -1
  95. package/scripts/check-publish.mjs +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,41 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.9.0] - 2026-09-11
8
+
9
+ `0.9.0` 完善新会话创建、验收与项目导航体验:空仓库可在明确确认后安全建立首次提交;Worktree 入口恢复为与 DSH 工具栏协调的原生紧凑开关;验收区增加只读详情弹窗,并修复撤回预览、历史 Worktree 分组及慢请求轮询的状态问题。
10
+
11
+ ### Added
12
+
13
+ - 新会话目录入口支持无提交 Git 仓库:Host 先执行只读预检,再经用户明确确认创建空首次提交;不纳入用户文件或暂存内容,不改写 Git 身份,并在状态变化或失败后安全拒绝、允许重试。
14
+ - 验收条新增 Lucide 图标化只读详情弹窗,集中展示文件列表、验证记录和版本信息;操作仍留在验收条,历史卡保持结果导向的精简展示。
15
+ - Host 为历史 Managed Worktree 提供不含路径的导航归属投影,侧边栏可将过滤后的历史分组和未归组会话安全合并回原项目,同时保留歧义项与普通成员。
16
+
17
+ ### Changed
18
+
19
+ - 新建 Session 的目录入口改为 Harness 原生紧凑菜单与 Worktree 开关,跟随真实状态恢复,并与 DSH 工具栏尺寸、主题反馈和图标体系保持一致。
20
+ - cleanup 后的“开始下一轮修改”移至 owner Session 顶部 Worktree 菜单;验收条聚焦当前摘要、文件数、验证状态与交付操作。
21
+ - 统一 Worktree 管理、Preview、详情和更多操作的 Lucide 图标与间距,减少重复标题、常驻外框和开发辅助文案。
22
+
23
+ ### Fixed
24
+
25
+ - 修复新版 Harness 中新会话 Worktree 开关点击后无响应:适配当前 `attachmentIds` 快照和源/目标 Session 输入操作,同时兼容旧版图片接口;草稿与附件可安全迁移到新 Session。
26
+ - 将输入快照创建纳入异常恢复,失败时释放忙碌锁、显示错误并允许重试,避免入口永久停留在准备状态。
27
+ - 撤回 Local Preview 后继续保留同一验收身份,避免旧异步结果覆盖;区分“撤回预览”和“继续修改”,并展示真实文件数、验证状态和 revision 防回退结果。
28
+ - 缓解 #6 的后台状态查询开销:状态按钮与验收栏共享按 Client adapter、会话及语言隔离的展示查询;慢请求完成后再调度,主动刷新合并并丢弃失效结果,避免重复轮询和未完成请求堆积。
29
+ - 展示查询在卸载时停止调度,重挂载不消费旧请求结果;创建、交付和清理的实时安全校验保持独立且不降级。
30
+ - 修正发布门禁的 Remote 方法清单,补入已存在且已有回归覆盖的 `preflightCreate` 与 `createWithInitialCommit`;不改变运行时协议。
31
+
32
+ ### Documentation
33
+
34
+ - 增加新旧 Harness 兼容矩阵,区分开发基线、peer 声明、用户反馈、部分实测与未验证项;记录 `0.8.0` 对 `0.1.5-rc.1` 的隔离验证及端到端限制,不强制升级 Host,不扩大依赖声明。
35
+ - 清理过时 UI Skill 和并行开发交接稿,按当前实现更新 UI 维护指南、Console 模块职责与验证入口。
36
+
37
+ ### Compatibility
38
+
39
+ - 开发与可重复构建基线仍为 DeepSeek Harness `0.1.2-rc.1`;`0.1.5-rc.1` 只有用户反馈和部分隔离验证,不扩大 peer 声明,也不要求现有用户升级 Host。
40
+ - 新增空仓库首次提交能力和历史导航投影,不迁移既有 Worktree registry、Review、Recovery 或 Session 数据。
41
+
7
42
  ## [0.8.0] - 2026-09-09
8
43
 
9
44
  `0.8.0` 为插件增加 Client 与 Host 全链路中英文支持:界面、工具、命令和 Host 用户消息跟随 DSH 语言选择,并通过显式 Console 语言传递与异步上下文隔离保持并发会话正确;同时修复新建 Session 时 Worktree 入口因使用过期状态 seam 而崩溃的问题。
@@ -299,6 +334,7 @@
299
334
 
300
335
  - 发布初版生产级 Worktree 管理、基础 apply/finish/discard 生命周期和安全清理。
301
336
 
337
+ [0.9.0]: https://github.com/wloops/dsh-git-worktree/compare/v0.8.0...v0.9.0
302
338
  [0.8.0]: https://github.com/wloops/dsh-git-worktree/compare/v0.7.5...v0.8.0
303
339
  [0.7.5]: https://github.com/wloops/dsh-git-worktree/compare/v0.7.4...v0.7.5
304
340
  [0.7.4]: https://github.com/wloops/dsh-git-worktree/compare/v0.7.3...v0.7.4
package/README.en.md CHANGED
@@ -31,7 +31,9 @@ When an agent edits the current project directly, its changes can mix with your
31
31
  - **Save only this task**: confirmation commits only the current task instead of pulling unrelated changes into it.
32
32
  - **Preserve progress on long tasks**: save the current stage and keep developing; the stages still become one final delivery.
33
33
  - **Protect the working state**: branch changes, conflicts, and interrupted operations stop safely and leave the state available for recovery.
34
- - **See related tasks together**: tasks from the same project are grouped in the sidebar for status checks and navigation.
34
+ - **See related tasks together**: current and historical Worktrees are grouped under their Host-provided project navigation owner; ambiguous tasks conservatively remain where they are.
35
+ - **Inspect review details in one place**: open a read-only view from the review bar for changed files, validation records, and version details without searching tool messages.
36
+ - **Start safely from an empty repository**: after explicit confirmation, an unborn repository can receive an empty initial commit that excludes user files before the isolated Worktree is created.
35
37
  - **Continue in the same conversation**: after delivery, begin another task without opening a new conversation.
36
38
 
37
39
  > The current version manages Git Worktrees within one project. It does not yet provide a global cross-project manager.
@@ -69,16 +71,16 @@ See the [full usage guide](docs/USAGE.en.md) for detailed actions, recovery scen
69
71
  ### Requirements
70
72
 
71
73
  - Node.js `^22.19.0 || >=24.0.0`
72
- - DeepSeek Harness `0.1.2-rc.1` package line
74
+ - DeepSeek Harness: `0.1.2-rc.1` is the development validation baseline; `0.1.5-rc.1` is user-reported working and partially verified in isolation. See the [compatibility matrix and limitations](docs/COMPATIBILITY.md#english); the newest Host is not mandatory.
73
75
  - Harness Web Client
74
76
  - A Git Workspace
75
77
 
76
78
  Before upgrading an existing Harness installation, handle Host data migration: `0.1.2-rc.1` removes the optional SQLite Session backend, so use an older Harness version to export that data first. Code Mode is now named PTC mode, while existing conversation records remain readable. Launch applications and install this plugin through a `dsh` Profile.
77
79
 
78
- After upgrading Harness from an earlier release, if the web UI shows **Failed to load plugins**, install version `0.8.0` or later and restart Harness. Releases through `0.7.2` depend on the discontinued `dsh-client-runtime`; `0.7.3` can also form a `conversation` / `uiWorkspace` activation cycle in the rc.1 Web Client.
80
+ After upgrading Harness from an earlier release, if the web UI shows **Failed to load plugins**, choose a fixed version from the [compatibility matrix](docs/COMPATIBILITY.md#english) and restart Harness; the example below uses the current `0.9.0`. Releases through `0.7.2` depend on the discontinued `dsh-client-runtime`; `0.7.3` can also form a `conversation` / `uiWorkspace` activation cycle in the rc.1 Web Client.
79
81
 
80
82
  ```bash
81
- dsh plugin --profile web add dsh-git-worktree@0.8.0
83
+ dsh plugin --profile web add dsh-git-worktree@0.9.0
82
84
  ```
83
85
 
84
86
  ### Install
@@ -90,7 +92,7 @@ dsh plugin --profile web add dsh-git-worktree
90
92
  Or install a specific version:
91
93
 
92
94
  ```bash
93
- dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.8.0
95
+ dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.9.0
94
96
  ```
95
97
 
96
98
  Open a Git Workspace and enable **Worktree** when creating a Session. An existing Local Session can also let the model call `worktree_create`.
package/README.md CHANGED
@@ -31,7 +31,9 @@
31
31
  - **只保存本轮任务**:确认后只提交这个任务的修改,不把无关内容一起带入。
32
32
  - **长任务可分阶段**:先保存当前阶段的进度,再继续开发;最终仍合并为一次交付。
33
33
  - **出错时保护现场**:检测到分支变化、内容冲突或中断时停止操作,保留现场供你处理。
34
- - **集中查看任务**:同一项目的任务会聚合显示在侧边栏中,便于查看状态和切换。
34
+ - **集中查看任务**:同一项目的当前及历史 Worktree 会按 Host 导航归属聚合到侧边栏,归属不明确时保守保留原位置。
35
+ - **验收详情集中查看**:从验收条打开只读详情,查看文件列表、验证记录与版本信息,不必翻找聊天工具记录。
36
+ - **空仓库安全起步**:无提交仓库可在明确确认后创建不包含用户文件的空首次提交,再建立隔离 Worktree。
35
37
  - **原对话继续下一轮**:任务交付后,无需新开对话即可继续下一项修改。
36
38
 
37
39
  > 当前版本管理单个项目中的 Git Worktree,暂不提供跨项目的全局管理界面。
@@ -69,16 +71,16 @@ flowchart LR
69
71
  ### 环境要求
70
72
 
71
73
  - Node.js `^22.19.0 || >=24.0.0`
72
- - DeepSeek Harness `0.1.2-rc.1` 包线
74
+ - DeepSeek Harness:`0.1.2-rc.1` 为开发验证基线;`0.1.5-rc.1` 已有用户可用反馈并通过部分隔离验证,详见[兼容矩阵与限制](docs/COMPATIBILITY.md#中文)。并非只能使用最新版。
73
75
  - Harness Web Client
74
76
  - Git Workspace
75
77
 
76
78
  从旧 Harness 升级时请先处理 Host 数据迁移:`0.1.2-rc.1` 已移除可选 SQLite Session 后端,旧数据需使用旧版 Harness 导出;Code Mode 已更名为 PTC mode,但现有会话记录仍可读取。应用和本插件统一通过 `dsh` Profile 启动与安装。
77
79
 
78
- 从旧版 Harness 升级后,如果 Web 界面提示 **Failed to load plugins**,请安装 `0.8.0` 或更高版本并重启 Harness。`0.7.2` 及更早版本依赖已停止发布的 `dsh-client-runtime`;`0.7.3` 在 rc.1 Web Client 中还可能形成 `conversation` / `uiWorkspace` 循环等待。
80
+ 从旧版 Harness 升级后,如果 Web 界面提示 **Failed to load plugins**,请按[兼容矩阵](docs/COMPATIBILITY.md#中文)选择修复版本并重启 Harness;下方以当前 `0.9.0` 为例。`0.7.2` 及更早版本依赖已停止发布的 `dsh-client-runtime`;`0.7.3` 在 rc.1 Web Client 中还可能形成 `conversation` / `uiWorkspace` 循环等待。
79
81
 
80
82
  ```bash
81
- dsh plugin --profile web add dsh-git-worktree@0.8.0
83
+ dsh plugin --profile web add dsh-git-worktree@0.9.0
82
84
  ```
83
85
 
84
86
  ### 安装
@@ -90,7 +92,7 @@ dsh plugin --profile web add dsh-git-worktree
90
92
  也可以安装指定版本:
91
93
 
92
94
  ```bash
93
- dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.8.0
95
+ dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.9.0
94
96
  ```
95
97
 
96
98
  安装后打开 Git Workspace,在新建 Session 时启用 **Worktree**;已有 Local Session 也可以让模型调用 `worktree_create` 创建隔离 Session。
@@ -1,3 +1,4 @@
1
+ import { initialCommitActions } from './initial-commit.js';
1
2
  import { hostMessage } from '../i18n/host.js';
2
3
  /**
3
4
  * DSH adapter for the session-checkout git port: runs git through
@@ -10,8 +11,8 @@ import { hostMessage } from '../i18n/host.js';
10
11
  * @module dsh-git-worktree/adapters/git
11
12
  */
12
13
  import { createHash } from 'node:crypto';
13
- import { realpath } from 'node:fs/promises';
14
- import { resolve } from 'node:path';
14
+ import { realpath, lstat } from 'node:fs/promises';
15
+ import { resolve, dirname, join } from 'node:path';
15
16
  import { SessionCheckoutError } from '../index.js';
16
17
  /** Ordinary git commands keep a 10s cap; worktree removal gets 5 minutes on Windows. */
17
18
  const GIT_COMMAND_TIMEOUT_MS = 30_000;
@@ -28,7 +29,7 @@ function gitTimeoutMs(args) {
28
29
  * the caller decides whether a non-zero exit is an error. Never
29
30
  * shell-interpreted; argv passes verbatim.
30
31
  */
31
- async function runGit(ctx, cwd, args, options) {
32
+ async function runGit(ctx, cwd, args, options, input) {
32
33
  const graceMs = gitTimeoutMs(args);
33
34
  const controller = new AbortController();
34
35
  const timeout = setTimeout(() => controller.abort(), graceMs);
@@ -46,28 +47,64 @@ async function runGit(ctx, cwd, args, options) {
46
47
  ],
47
48
  cwd,
48
49
  stdio: {
49
- stdin: 'ignore',
50
+ stdin: input === undefined ? 'ignore' : 'pipe',
50
51
  stdout: { maxBytes: GIT_COLLECT_BYTES },
51
52
  stderr: { maxBytes: GIT_COLLECT_BYTES },
52
53
  },
53
54
  graceMs: GIT_COMMAND_TIMEOUT_MS,
54
55
  signal: controller.signal,
55
56
  env: {
57
+ // Repository routing must come from the authorized cwd, never ambient Git
58
+ // overrides. Preserve identity variables and normal user configuration.
59
+ ...Object.fromEntries(Object.keys(process.env).filter(key => /^(GIT_(DIR|WORK_TREE|COMMON_DIR|INDEX_FILE|OBJECT_DIRECTORY|ALTERNATE_OBJECT_DIRECTORIES|NAMESPACE|CEILING_DIRECTORIES|DISCOVERY_ACROSS_FILESYSTEM|CONFIG_PARAMETERS|CONFIG_COUNT|CONFIG_KEY_.*|CONFIG_VALUE_.*))$/i.test(key)).map(key => [key, undefined])),
56
60
  GIT_OPTIONAL_LOCKS: '0',
57
61
  GIT_TERMINAL_PROMPT: '0',
58
62
  LC_ALL: 'C',
59
63
  LANG: 'C',
60
64
  },
61
65
  });
66
+ if (input !== undefined) {
67
+ handle.stdin?.on('error', () => { });
68
+ if (typeof input === 'string')
69
+ handle.stdin?.end(input);
70
+ else {
71
+ handle.stdin?.write(input.prepare);
72
+ let exited = false;
73
+ void handle.done.then(() => { exited = true; });
74
+ while (!exited && !controller.signal.aborted && !handle.collected.stdout?.readFrom(0).text.includes('prepare: ok')) {
75
+ await new Promise(resolve => setTimeout(resolve, 5));
76
+ }
77
+ if (!exited && !controller.signal.aborted) {
78
+ try {
79
+ await input.beforeCommit();
80
+ handle.stdin?.end('commit\n');
81
+ }
82
+ catch (error) {
83
+ handle.stdin?.end('abort\n');
84
+ await handle.done;
85
+ throw error;
86
+ }
87
+ }
88
+ else
89
+ handle.stdin?.end();
90
+ }
91
+ }
62
92
  const outcome = await handle.done;
63
- const stdout = handle.collected.stdout?.readFrom(0).text ?? '';
64
- const stderr = handle.collected.stderr?.readFrom(0).text ?? '';
93
+ const stdoutRead = handle.collected.stdout?.readFrom(0);
94
+ const stderrRead = handle.collected.stderr?.readFrom(0);
95
+ const stdout = stdoutRead?.text ?? '';
96
+ const stderr = stderrRead?.text ?? '';
97
+ if (stdoutRead?.lossy || stderrRead?.lossy) {
98
+ return { code: -1, stdout: '', stderr: hostMessage('repositoryInspectionFailed') };
99
+ }
65
100
  if (outcome.signal === 'SIGTERM' || outcome.signal === 'SIGKILL' || controller.signal.aborted) {
66
101
  return { code: -1, stdout, stderr: hostMessage('gitTimedOutMsAndWasTerminated', { p0: args.join(' '), p1: graceMs }) };
67
102
  }
68
103
  return { code: outcome.exitCode ?? -1, stdout: stdout.trim(), stderr: stderr.trim() };
69
104
  }
70
105
  catch (error) {
106
+ if (error instanceof SessionCheckoutError)
107
+ throw error;
71
108
  // Synchronous spawn failure (git missing from PATH): report as a failed command.
72
109
  return { code: -1, stdout: '', stderr: error instanceof Error ? error.message : String(error) };
73
110
  }
@@ -100,18 +137,50 @@ function internalArtifactRef(checkoutId, artifactName) {
100
137
  function applyBaseRef(checkoutId) {
101
138
  return internalArtifactRef(checkoutId, 'apply-base');
102
139
  }
140
+ async function hasGitMetadata(root) {
141
+ let directory = resolve(root);
142
+ for (;;) {
143
+ try {
144
+ await lstat(join(directory, '.git'));
145
+ return true;
146
+ }
147
+ catch (error) {
148
+ if (error.code !== 'ENOENT')
149
+ return true;
150
+ }
151
+ const parent = dirname(directory);
152
+ if (parent === directory)
153
+ return false;
154
+ directory = parent;
155
+ }
156
+ }
103
157
  /** Build the `ctx.subprocess`-backed git port. */
104
158
  export function createDshGitPort(ctx, options) {
105
- const runSessionGit = (cwd, args) => runGit(ctx, cwd, args, options);
159
+ const runSessionGit = (cwd, args, input) => runGit(ctx, cwd, args, options, input);
106
160
  const runSessionGitChecked = (cwd, args) => runGitChecked(ctx, cwd, args, options);
107
- return {
161
+ const port = {
108
162
  inspect: async (root) => {
109
163
  const topLevel = await runSessionGit(root, ['rev-parse', '--show-toplevel']);
110
- if (topLevel.code !== 0 || !topLevel.stdout)
111
- return null;
164
+ if (topLevel.code !== 0 || !topLevel.stdout) {
165
+ if (topLevel.code === 128 && /^fatal: not a git repository/.test(topLevel.stderr) && !await hasGitMetadata(root))
166
+ return null;
167
+ throw new SessionCheckoutError('git_operation_failed', hostMessage('repositoryInspectionFailed'));
168
+ }
112
169
  const commonDir = await runSessionGitChecked(root, ['rev-parse', '--path-format=absolute', '--git-common-dir']);
113
170
  const gitDir = await runSessionGitChecked(root, ['rev-parse', '--path-format=absolute', '--absolute-git-dir']);
114
- const headOid = await runSessionGitChecked(root, ['rev-parse', 'HEAD']);
171
+ const head = await runSessionGit(root, ['rev-parse', '--verify', '--quiet', 'HEAD^{commit}']);
172
+ let headOid = head.stdout;
173
+ if (head.code !== 0) {
174
+ const symbolicHead = await runSessionGit(root, ['symbolic-ref', '--quiet', 'HEAD']);
175
+ const refs = await runSessionGit(root, ['show-ref']);
176
+ // A missing commit is unborn only with a valid symbolic HEAD and no refs.
177
+ // Broken refs, unreadable metadata, and missing objects remain Git errors.
178
+ if (head.code !== 1 || symbolicHead.code !== 0 || !symbolicHead.stdout.startsWith('refs/heads/')
179
+ || refs.code !== 1 || refs.stdout || refs.stderr) {
180
+ throw new SessionCheckoutError('git_operation_failed', hostMessage('repositoryInspectionFailed'));
181
+ }
182
+ headOid = 'unborn';
183
+ }
115
184
  const symbolic = await runSessionGit(root, ['symbolic-ref', '--quiet', 'HEAD']);
116
185
  const headRef = symbolic.code === 0 && symbolic.stdout ? symbolic.stdout : 'HEAD';
117
186
  const branch = headRef.startsWith('refs/heads/') ? headRef.slice('refs/heads/'.length) : null;
@@ -126,8 +195,11 @@ export function createDshGitPort(ctx, options) {
126
195
  },
127
196
  findContainingWorktreeRoot: async (root) => {
128
197
  const topLevel = await runSessionGit(root, ['rev-parse', '--show-toplevel']);
129
- if (topLevel.code !== 0 || !topLevel.stdout)
130
- return null;
198
+ if (topLevel.code !== 0 || !topLevel.stdout) {
199
+ if (topLevel.code === 128 && /^fatal: not a git repository/.test(topLevel.stderr) && !await hasGitMetadata(root))
200
+ return null;
201
+ throw new SessionCheckoutError('git_operation_failed', hostMessage('repositoryInspectionFailed'));
202
+ }
131
203
  return realpath(resolve(topLevel.stdout));
132
204
  },
133
205
  status: async (root) => {
@@ -177,5 +249,6 @@ export function createDshGitPort(ctx, options) {
177
249
  throw new Error(result.stderr || hostMessage('cannotProveGitCommitAncestry'));
178
250
  },
179
251
  };
252
+ return Object.assign(port, initialCommitActions(port.inspect, runSessionGit));
180
253
  }
181
254
  //# sourceMappingURL=git.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/adapters/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/adapters/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { GitCheckoutSnapshot, InitialCommitPreflight } from '../ports.js';
2
+ export interface GitCommitProtocol {
3
+ prepare: string;
4
+ beforeCommit(): Promise<void>;
5
+ }
6
+ type Run = (root: string, args: string[], input?: string | GitCommitProtocol) => Promise<{
7
+ code: number;
8
+ stdout: string;
9
+ stderr: string;
10
+ }>;
11
+ /** Only the Console's confirmed host action calls initialize; normal Git inspection is read-only. */
12
+ export declare function initialCommitActions(inspect: (root: string) => Promise<GitCheckoutSnapshot | null>, run: Run): {
13
+ preflightInitialCommit: (root: string) => Promise<InitialCommitPreflight>;
14
+ initializeEmptyRepository: (root: string, fingerprint: string, assertAuthorized?: () => Promise<void>) => Promise<string>;
15
+ };
16
+ export {};
@@ -0,0 +1,112 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { lstat, open, readdir, readFile, unlink } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { SessionCheckoutError } from '../index.js';
5
+ import { hostMessage } from '../i18n/host.js';
6
+ /** Only the Console's confirmed host action calls initialize; normal Git inspection is read-only. */
7
+ export function initialCommitActions(inspect, run) {
8
+ const stale = () => new SessionCheckoutError('stale_local', hostMessage('initialStateChanged'));
9
+ async function checked(root, args, input) {
10
+ const result = await run(root, args, input);
11
+ if (result.code !== 0)
12
+ throw new SessionCheckoutError('git_operation_failed', hostMessage('initialCommitFailed'));
13
+ return result.stdout;
14
+ }
15
+ async function identity(path, trackChanges = false) {
16
+ const stat = await lstat(path, { bigint: true });
17
+ if (stat.isSymbolicLink())
18
+ throw stale();
19
+ return `${stat.dev}:${stat.ino}:${stat.birthtimeNs}${trackChanges ? `:${stat.mtimeNs}:${stat.ctimeNs}` : ''}`;
20
+ }
21
+ async function indexBytes(gitDir) {
22
+ try {
23
+ return (await readFile(join(gitDir, 'index'))).toString('base64');
24
+ }
25
+ catch (error) {
26
+ if (error.code === 'ENOENT')
27
+ return '';
28
+ throw error;
29
+ }
30
+ }
31
+ async function preflightInitialCommit(root) {
32
+ const snapshot = await inspect(root);
33
+ if (snapshot === null)
34
+ throw new SessionCheckoutError('not_git_repository', hostMessage('repositoryInspectionFailed'));
35
+ if (snapshot.headOid !== 'unborn')
36
+ return { kind: 'ready', fingerprint: '', snapshot };
37
+ const entries = await readdir(snapshot.root);
38
+ // Filesystem enumeration deliberately ignores no patterns: ignored files, symlinks,
39
+ // nested repositories and empty directories all require an explicit user decision.
40
+ const files = entries.filter(name => name !== '.git');
41
+ const index = await checked(root, ['ls-files', '--stage', '-z']);
42
+ if (files.length || index)
43
+ return { kind: 'files', fingerprint: '', snapshot };
44
+ const fingerprint = createHash('sha256').update(JSON.stringify({
45
+ snapshot, rootIdentity: await identity(root, true), canonicalIdentity: await identity(snapshot.root, true),
46
+ gitIdentity: await identity(snapshot.gitDir), commonIdentity: await identity(snapshot.commonDir),
47
+ head: (await readFile(join(snapshot.gitDir, 'HEAD'))).toString('base64'),
48
+ headIdentity: await identity(join(snapshot.gitDir, 'HEAD'), true),
49
+ index: await indexBytes(snapshot.gitDir), files: files.sort(),
50
+ })).digest('hex');
51
+ return { kind: 'empty', fingerprint, snapshot };
52
+ }
53
+ async function initializeEmptyRepository(root, fingerprint, assertAuthorized) {
54
+ const before = await preflightInitialCommit(root);
55
+ if (before.kind !== 'empty' || before.fingerprint !== fingerprint)
56
+ throw stale();
57
+ const locks = [];
58
+ try {
59
+ // The index lock excludes cooperating index writers and other initializers;
60
+ // the ref transaction below locks HEAD. Never remove a lock we did not create.
61
+ for (const name of ['index.lock']) {
62
+ const path = join(before.snapshot.gitDir, name);
63
+ locks.push({ path, handle: await open(path, 'wx') });
64
+ }
65
+ const current = await preflightInitialCommit(root);
66
+ if (current.kind !== 'empty' || current.fingerprint !== fingerprint)
67
+ throw stale();
68
+ await assertAuthorized?.();
69
+ for (const variable of ['GIT_AUTHOR_IDENT', 'GIT_COMMITTER_IDENT']) {
70
+ const ident = await run(root, ['-c', 'user.useConfigOnly=true', 'var', variable]);
71
+ if (ident.code !== 0)
72
+ throw new SessionCheckoutError('git_operation_failed', hostMessage('initialIdentityMissing'));
73
+ }
74
+ // mktree with an empty stdin creates the empty tree without touching the index.
75
+ const tree = await checked(root, ['mktree']);
76
+ const oid = await checked(root, ['-c', 'user.useConfigOnly=true', 'commit-tree', tree, '-m', 'Initial commit']);
77
+ const latest = await preflightInitialCommit(root);
78
+ if (latest.kind !== 'empty' || latest.fingerprint !== fingerprint)
79
+ throw stale();
80
+ // Compare-and-swap the previously unborn branch; never overwrite a racing commit.
81
+ // Git prepares the HEAD update and locks HEAD plus the resolved branch. Only
82
+ // after rechecking under those locks may the transaction publish the commit.
83
+ await checked(root, ['update-ref', '--stdin'], {
84
+ prepare: `start
85
+ update HEAD ${oid} ${'0'.repeat(oid.length)}
86
+ prepare
87
+ `,
88
+ async beforeCommit() {
89
+ const locked = await preflightInitialCommit(root);
90
+ if (locked.kind !== 'empty' || locked.fingerprint !== fingerprint)
91
+ throw stale();
92
+ await assertAuthorized?.();
93
+ },
94
+ });
95
+ return oid;
96
+ }
97
+ catch (error) {
98
+ if (error.code === 'EEXIST') {
99
+ throw new SessionCheckoutError('operation_not_allowed', hostMessage('initialRepositoryBusy'));
100
+ }
101
+ throw error;
102
+ }
103
+ finally {
104
+ for (const lock of locks.reverse()) {
105
+ await lock.handle.close();
106
+ await unlink(lock.path);
107
+ }
108
+ }
109
+ }
110
+ return { preflightInitialCommit, initializeEmptyRepository };
111
+ }
112
+ //# sourceMappingURL=initial-commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initial-commit.js","sourceRoot":"","sources":["../../src/adapters/initial-commit.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,27 @@ export function createDshLookupPort(ctx) {
40
40
  return isSessionStoreLike(candidate) ? candidate : undefined;
41
41
  };
42
42
  return {
43
+ getSidebarMemberships: async (managedRoots) => {
44
+ if (managedRoots.length === 0)
45
+ return [];
46
+ const workspaces = registry()?.list() ?? [];
47
+ const query = ctx.get('sessionQuery');
48
+ // Query headers, not transcript bodies or cached projection metadata.
49
+ // A missing directory must not erase historical navigation identity.
50
+ const headers = query?.listSessions ? (await query.listSessions()).map(item => item.header) : [];
51
+ return [...new Set(managedRoots)].map(managedRoot => {
52
+ const matches = workspaces.filter(workspace => sameResolvedPath(workspace.path, managedRoot));
53
+ return {
54
+ managedRoot,
55
+ workspaceIds: matches.map(workspace => workspace.id),
56
+ sessionIds: [...new Set([
57
+ ...matches.flatMap(workspace => [...workspace.sessionIds]),
58
+ ...headers.filter(header => typeof header.cwd === 'string' && sameResolvedPath(header.cwd, managedRoot))
59
+ .map(header => header.id),
60
+ ])],
61
+ };
62
+ });
63
+ },
43
64
  getSession: (sessionId) => {
44
65
  const workspaces = registry()?.list() ?? [];
45
66
  for (const workspace of workspaces) {
@@ -1 +1 @@
1
- {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/adapters/lookup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/adapters/lookup.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ReviewIcon } from './review-console/ReviewIcon.js';
2
3
  import { useClientTranslator } from './i18n.js';
3
4
  import { useState } from 'react';
4
5
  import { openIsolatedTarget } from './actions.js';
@@ -23,6 +24,6 @@ export function WorktreeCreateRow({ block, services }) {
23
24
  setOpenError(error instanceof Error ? error.message : String(error));
24
25
  }
25
26
  };
26
- return (_jsxs("section", { className: "dsh-wt-card", "data-tool": "worktree_create", "data-state": state, "aria-label": t("isolated.session.target"), children: [_jsxs("header", { className: "dsh-wt-head", children: [_jsx("span", { className: "dsh-wt-mark", "aria-hidden": true }), _jsx("strong", { className: "dsh-wt-title", children: t("isolated.session.target") }), _jsx("span", { className: "dsh-wt-subtitle", children: model.lifecycle === 'running' ? t("creating.the.unique.worktree") : payload ? t("ready.to.open") : t("creation.failed") })] }), payload ? (_jsxs("div", { className: "dsh-wt-body", children: [_jsxs("div", { className: "dsh-wt-grid", children: [_jsx("span", { className: "dsh-wt-label", children: t("checkout") }), _jsx("span", { className: "dsh-wt-value dsh-wt-code", children: payload.checkoutId }), _jsx("span", { className: "dsh-wt-label", children: t("base") }), _jsx("span", { className: "dsh-wt-value dsh-wt-code", children: payload.currentOid.slice(0, 12) }), _jsx("span", { className: "dsh-wt-label", children: t("workspace") }), _jsx("button", { type: "button", className: "dsh-wt-value dsh-wt-code dsh-wt-path", onClick: () => void services.workspaces.openPath(payload.managedRoot), children: payload.managedRoot })] }), _jsxs("div", { className: "dsh-wt-actions", children: [_jsx("button", { type: "button", className: "dsh-wt-button dsh-wt-primary", disabled: openState === 'opening', onClick: () => void openTarget(), children: openState === 'opening' ? t("opening.2") : openState === 'error' ? t("retry.opening.isolated.session") : t("open.isolated.session") }), _jsx("span", { className: "dsh-wt-status", children: t("the.current.local.session.cwd.will.not.be") })] }), openError ? _jsx("div", { className: "dsh-wt-error", role: "alert", children: openError }) : null] })) : model.error ? (_jsx("div", { className: "dsh-wt-body", children: _jsx("div", { className: "dsh-wt-error", role: "alert", children: model.error }) })) : null] }));
27
+ return (_jsxs("section", { className: "dsh-wt-card", "data-tool": "worktree_create", "data-state": state, "aria-label": t("isolated.session.target"), children: [_jsxs("header", { className: "dsh-wt-head", children: [_jsx("span", { className: "dsh-wt-mark", "aria-hidden": true }), _jsx("strong", { className: "dsh-wt-title", children: t("isolated.session.target") }), _jsx("span", { className: "dsh-wt-subtitle", children: model.lifecycle === 'running' ? t("creating.the.unique.worktree") : payload ? t("ready.to.open") : t("creation.failed") })] }), payload ? (_jsxs("div", { className: "dsh-wt-body", children: [_jsxs("div", { className: "dsh-wt-grid", children: [_jsx("span", { className: "dsh-wt-label", children: t("checkout") }), _jsx("span", { className: "dsh-wt-value dsh-wt-code", children: payload.checkoutId }), _jsx("span", { className: "dsh-wt-label", children: t("base") }), _jsx("span", { className: "dsh-wt-value dsh-wt-code", children: payload.currentOid.slice(0, 12) }), _jsx("span", { className: "dsh-wt-label", children: t("workspace") }), _jsx("button", { type: "button", className: "dsh-wt-value dsh-wt-code dsh-wt-path", onClick: () => void services.workspaces.openPath(payload.managedRoot), children: payload.managedRoot })] }), _jsxs("div", { className: "dsh-wt-actions", children: [_jsxs("button", { type: "button", className: "dsh-wt-button dsh-wt-primary", disabled: openState === 'opening', onClick: () => void openTarget(), children: [_jsx(ReviewIcon, { name: "external" }), openState === 'opening' ? t("opening.2") : openState === 'error' ? t("retry.opening.isolated.session") : t("open.isolated.session")] }), _jsx("span", { className: "dsh-wt-status", children: t("the.current.local.session.cwd.will.not.be") })] }), openError ? _jsx("div", { className: "dsh-wt-error", role: "alert", children: openError }) : null] })) : model.error ? (_jsx("div", { className: "dsh-wt-body", children: _jsx("div", { className: "dsh-wt-error", role: "alert", children: model.error }) })) : null] }));
27
28
  }
28
29
  //# sourceMappingURL=WorktreeCreateRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorktreeCreateRow.js","sourceRoot":"","sources":["../../src/client/WorktreeCreateRow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,kBAAkB,EAA+B,MAAM,cAAc,CAAA;AAC9E,OAAO,EAAE,eAAe,EAA8B,MAAM,YAAY,CAAA;AAQxE,MAAM,UAAU,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAS;IAC1D,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAA;IAE/B,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACvC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAY,MAAM,CAAC,CAAA;IAC7D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC/D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;IAEnG,MAAM,UAAU,GAAG,KAAK,IAAmB,EAAE;QAC3C,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,SAAS;YAAE,OAAM;QAC/C,YAAY,CAAC,SAAS,CAAC,CAAA;QACvB,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,YAAY,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACtE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,mBAAS,SAAS,EAAC,aAAa,eAAW,iBAAiB,gBAAa,KAAK,gBAAc,CAAC,CAAC,yBAAyB,CAAC,aACtH,kBAAQ,SAAS,EAAC,aAAa,aAC7B,eAAM,SAAS,EAAC,aAAa,wBAAe,EAC5C,iBAAQ,SAAS,EAAC,cAAc,YAAE,CAAC,CAAC,yBAAyB,CAAC,GAAU,EACxE,eAAM,SAAS,EAAC,iBAAiB,YAC9B,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,GACnH,IACA,EACR,OAAO,CAAC,CAAC,CAAC,CACT,eAAK,SAAS,EAAC,aAAa,aAC1B,eAAK,SAAS,EAAC,aAAa,aAC1B,eAAM,SAAS,EAAC,cAAc,YAAE,CAAC,CAAC,UAAU,CAAC,GAAQ,EACrD,eAAM,SAAS,EAAC,0BAA0B,YAAE,OAAO,CAAC,UAAU,GAAQ,EACtE,eAAM,SAAS,EAAC,cAAc,YAAE,CAAC,CAAC,MAAM,CAAC,GAAQ,EACjD,eAAM,SAAS,EAAC,0BAA0B,YAAE,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAQ,EACnF,eAAM,SAAS,EAAC,cAAc,YAAE,CAAC,CAAC,WAAW,CAAC,GAAQ,EACtD,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,sCAAsC,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,YACzI,OAAO,CAAC,WAAW,GACb,IACL,EACN,eAAK,SAAS,EAAC,gBAAgB,aAC7B,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,8BAA8B,EAAC,QAAQ,EAAE,SAAS,KAAK,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,EAAE,YAC/H,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAC7H,EACT,eAAM,SAAS,EAAC,eAAe,YAAE,CAAC,CAAC,2CAA2C,CAAC,GAAQ,IACnF,EACL,SAAS,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,cAAc,EAAC,IAAI,EAAC,OAAO,YAAE,SAAS,GAAO,CAAC,CAAC,CAAC,IAAI,IAC5E,CACP,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAChB,cAAK,SAAS,EAAC,aAAa,YAAC,cAAK,SAAS,EAAC,cAAc,EAAC,IAAI,EAAC,OAAO,YAAE,KAAK,CAAC,KAAK,GAAO,GAAM,CAClG,CAAC,CAAC,CAAC,IAAI,IACA,CACX,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"WorktreeCreateRow.js","sourceRoot":"","sources":["../../src/client/WorktreeCreateRow.tsx"],"names":[],"mappings":"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"}
@@ -7,5 +7,5 @@ interface Props extends ToolCallViewPropsLike {
7
7
  /** Optional live Remote seam; logged evidence remains replayable without it. */
8
8
  adapter?: WorktreeConsoleAdapter;
9
9
  }
10
- export declare function WorktreeReviewRow({ block, sessionId, adapter, services }: Props): import("react").JSX.Element | null;
10
+ export declare function WorktreeReviewRow({ block, sessionId, adapter }: Props): import("react").JSX.Element | null;
11
11
  export {};
@@ -10,7 +10,7 @@ function isLocalTargetUnselected(error, t = defaultClientTranslator) {
10
10
  return /(?:^|\b)target_unselected(?:\b|$)/iu.test(error)
11
11
  || error.includes(t("no.session.target.has.been.selected"));
12
12
  }
13
- export function WorktreeReviewRow({ block, sessionId, adapter, services }) {
13
+ export function WorktreeReviewRow({ block, sessionId, adapter }) {
14
14
  const t = useClientTranslator();
15
15
  const model = parseReviewTool(block, t);
16
16
  const payload = model.payload;
@@ -92,6 +92,6 @@ export function WorktreeReviewRow({ block, sessionId, adapter, services }) {
92
92
  : adapter && sessionId
93
93
  ? t("connecting.to.live.worktree.console.historical.review.evidence")
94
94
  : t("live.worktree.console.is.disconnected.review.actions.will");
95
- return (_jsxs("section", { className: "dsh-wt-card", "data-tool": "worktree_ready_for_review", "data-state": state, "aria-label": t("worktree.ready.for.review"), children: [review ? (_jsx(WorktreeReviewPanel, { review: review, adapter: adapter, services: services, identity: identity, target: liveTarget, unavailableMessage: unavailableMessage, onRefresh: () => setRefreshNonce(value => value + 1), onTargetChange: setLiveTarget })) : (_jsxs("header", { className: "dsh-wt-head", children: [_jsx("span", { className: "dsh-wt-mark", "aria-hidden": true }), _jsx("strong", { className: "dsh-wt-title", children: t("worktree.ready.for.review") }), _jsx("span", { className: "dsh-wt-subtitle", children: model.lifecycle === 'running' ? t("freezing.the.review.snapshot") : t("review.information.unavailable") })] })), model.error ? _jsx("div", { className: "dsh-wt-body", children: _jsx("div", { className: "dsh-wt-error", role: "alert", children: model.error }) }) : null] }));
95
+ return (_jsxs("section", { className: "dsh-wt-card", "data-tool": "worktree_ready_for_review", "data-state": state, "aria-label": t("worktree.ready.for.review"), children: [review ? (_jsx(WorktreeReviewPanel, { review: review, identity: identity, target: liveTarget, unavailableMessage: liveError ?? undefined })) : (_jsxs("header", { className: "dsh-wt-head", children: [_jsx("span", { className: "dsh-wt-mark", "aria-hidden": true }), _jsx("strong", { className: "dsh-wt-title", children: t("worktree.ready.for.review") }), _jsx("span", { className: "dsh-wt-subtitle", children: model.lifecycle === 'running' ? t("freezing.the.review.snapshot") : t("review.information.unavailable") })] })), model.error ? _jsx("div", { className: "dsh-wt-body", children: _jsx("div", { className: "dsh-wt-error", role: "alert", children: model.error }) }) : null] }));
96
96
  }
97
97
  //# sourceMappingURL=WorktreeReviewRow.js.map