dsh-git-worktree 0.8.0 → 0.9.2
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/CHANGELOG.md +69 -0
- package/README.en.md +8 -5
- package/README.md +8 -5
- package/lib/adapters/git-options.d.ts +9 -0
- package/lib/adapters/git-options.js +19 -0
- package/lib/adapters/git-options.js.map +1 -0
- package/lib/adapters/git.d.ts +4 -1
- package/lib/adapters/git.js +171 -32
- package/lib/adapters/git.js.map +1 -1
- package/lib/adapters/initial-commit.d.ts +16 -0
- package/lib/adapters/initial-commit.js +112 -0
- package/lib/adapters/initial-commit.js.map +1 -0
- package/lib/adapters/lookup.js +21 -0
- package/lib/adapters/lookup.js.map +1 -1
- package/lib/adapters/project-skill-io.d.ts +12 -0
- package/lib/adapters/project-skill-io.js +96 -0
- package/lib/adapters/project-skill-io.js.map +1 -0
- package/lib/adapters/project-skill-provider.d.ts +25 -0
- package/lib/adapters/project-skill-provider.js +137 -0
- package/lib/adapters/project-skill-provider.js.map +1 -0
- package/lib/adapters/project-skills.d.ts +40 -0
- package/lib/adapters/project-skills.js +285 -0
- package/lib/adapters/project-skills.js.map +1 -0
- package/lib/adapters/registry.js +13 -2
- package/lib/adapters/registry.js.map +1 -1
- package/lib/adapters/worktree-creation.d.ts +11 -0
- package/lib/adapters/worktree-creation.js +321 -0
- package/lib/adapters/worktree-creation.js.map +1 -0
- package/lib/client/WorktreeCreateRow.js +2 -1
- package/lib/client/WorktreeCreateRow.js.map +1 -1
- package/lib/client/WorktreeReviewRow.d.ts +1 -1
- package/lib/client/WorktreeReviewRow.js +2 -2
- package/lib/client/WorktreeReviewRow.js.map +1 -1
- package/lib/client/actions.d.ts +1 -5
- package/lib/client/actions.js.map +1 -1
- package/lib/client/console-remote/adapter.js +2 -0
- package/lib/client/console-remote/adapter.js.map +1 -1
- package/lib/client/pre-session/PreSessionWorktreeToggle.d.ts +2 -2
- package/lib/client/pre-session/PreSessionWorktreeToggle.js +92 -79
- package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -1
- package/lib/client/pre-session/controller.d.ts +3 -0
- package/lib/client/pre-session/controller.js +16 -4
- package/lib/client/pre-session/controller.js.map +1 -1
- package/lib/client/pre-session/harness-input.d.ts +13 -0
- package/lib/client/pre-session/harness-input.js +18 -0
- package/lib/client/pre-session/harness-input.js.map +1 -0
- package/lib/client/pre-session/index.d.ts +3 -3
- package/lib/client/pre-session/index.js +4 -3
- package/lib/client/pre-session/index.js.map +1 -1
- package/lib/client/review-console/PreflightStatus.js +3 -2
- package/lib/client/review-console/PreflightStatus.js.map +1 -1
- package/lib/client/review-console/ReviewActions.d.ts +4 -1
- package/lib/client/review-console/ReviewActions.js +73 -53
- package/lib/client/review-console/ReviewActions.js.map +1 -1
- package/lib/client/review-console/ReviewDetailsModal.d.ts +12 -0
- package/lib/client/review-console/ReviewDetailsModal.js +56 -0
- package/lib/client/review-console/ReviewDetailsModal.js.map +1 -0
- package/lib/client/review-console/ReviewIcon.d.ts +35 -0
- package/lib/client/review-console/ReviewIcon.js +14 -0
- package/lib/client/review-console/ReviewIcon.js.map +1 -0
- package/lib/client/review-console/WorktreeReviewPanel.d.ts +3 -7
- package/lib/client/review-console/WorktreeReviewPanel.js +8 -73
- package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -1
- package/lib/client/review-console/review-console.styles.js +101 -23
- package/lib/client/review-console/review-console.styles.js.map +1 -1
- package/lib/client/styles.js +13 -10
- package/lib/client/styles.js.map +1 -1
- package/lib/client/target-console/TargetStatusAction.js +65 -46
- package/lib/client/target-console/TargetStatusAction.js.map +1 -1
- package/lib/client/target-console/WorktreeConsoleView.d.ts +2 -1
- package/lib/client/target-console/WorktreeConsoleView.js +5 -4
- package/lib/client/target-console/WorktreeConsoleView.js.map +1 -1
- package/lib/client/target-console/WorktreeManagerModal.js +1 -1
- package/lib/client/target-console/WorktreeManagerModal.js.map +1 -1
- package/lib/client/target-console/WorktreeReviewStatus.js +36 -81
- package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -1
- package/lib/client/target-console/current-polling.d.ts +11 -0
- package/lib/client/target-console/current-polling.js +104 -0
- package/lib/client/target-console/current-polling.js.map +1 -0
- package/lib/client/target-console/target-console.styles.js +8 -0
- package/lib/client/target-console/target-console.styles.js.map +1 -1
- package/lib/client/workspace-sidebar/index.js +5 -2
- package/lib/client/workspace-sidebar/index.js.map +1 -1
- package/lib/client/workspace-sidebar/model.d.ts +3 -0
- package/lib/client/workspace-sidebar/model.js +83 -10
- package/lib/client/workspace-sidebar/model.js.map +1 -1
- package/lib/client.js +5608 -4004
- package/lib/console-contract.d.ts +20 -0
- package/lib/console-contract.js.map +1 -1
- package/lib/console-host/control-plane.d.ts +3 -1
- package/lib/console-host/control-plane.js +117 -23
- package/lib/console-host/control-plane.js.map +1 -1
- package/lib/console-host/review-diff.d.ts +2 -1
- package/lib/console-host/review-diff.js +23 -2
- package/lib/console-host/review-diff.js.map +1 -1
- package/lib/console-host/service.d.ts +3 -1
- package/lib/console-host/service.js +12 -0
- package/lib/console-host/service.js.map +1 -1
- package/lib/console-remote/descriptors.js +3 -1
- package/lib/console-remote/descriptors.js.map +1 -1
- package/lib/console-remote/remote.d.ts +3 -1
- package/lib/console-remote/remote.js.map +1 -1
- package/lib/console-remote/schemas.d.ts +10 -2
- package/lib/console-remote/schemas.js +7 -0
- package/lib/console-remote/schemas.js.map +1 -1
- package/lib/creation-failure.d.ts +5 -0
- package/lib/creation-failure.js +10 -0
- package/lib/creation-failure.js.map +1 -0
- package/lib/i18n/client-messages.d.ts +168 -20
- package/lib/i18n/client-messages.js +71 -34
- package/lib/i18n/client-messages.js.map +1 -1
- package/lib/i18n/host-messages.d.ts +32 -0
- package/lib/i18n/host-messages.js +11 -0
- package/lib/i18n/host-messages.js.map +1 -1
- package/lib/index.d.ts +31 -2
- package/lib/index.js +12 -12
- package/lib/index.js.map +1 -1
- package/lib/ports.d.ts +30 -1
- package/lib/session-checkout-apply.d.ts +2 -0
- package/lib/session-checkout-apply.js +52 -36
- package/lib/session-checkout-apply.js.map +1 -1
- package/lib/session-checkout-module.js +60 -4
- package/lib/session-checkout-module.js.map +1 -1
- package/package.json +9 -2
- package/scripts/check-publish.mjs +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,72 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.2] - 2026-09-20
|
|
8
|
+
|
|
9
|
+
`0.9.2` 修复 Managed Worktree 未携带项目级 Skill 及其资源的问题:首次创建和交付后的下一轮创建都会获取一次 Local 快照,并让 `.claude/skills` 与既有 `.dsh/skills`、`.agents/skills` 一起在隔离 Session 中可用,同时保持辅助文件与正常 Git 交付隔离。
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- 创建首次及下一轮 Managed Worktree 时一次性携带项目 `.dsh/skills`、`.agents/skills` 和 `.claude/skills` 的本地文件与资源,并接入 `.claude` Skill 加载;携带的辅助文件不自动混入交付,已跟踪改动与显式暂存保留正常 Git 语义。
|
|
14
|
+
- Local 中已跟踪 Skill 存在未提交修改、删除或基线冲突时保守拒绝,不静默覆盖;复制中断、不同内容、未知资源或链接会保留现场,不反向同步 Local,也不自动清理可能有价值的内容。
|
|
15
|
+
- Skill 快照复制改用 Node 文件 API,拒绝符号链接、junction 与项目外链接,并限制文件数、总大小、目录项和目录深度;无需增加原生复制工具依赖。
|
|
16
|
+
|
|
17
|
+
### Compatibility
|
|
18
|
+
|
|
19
|
+
- 新增 `@deepseek-ai/dsh-fs` peer,并使用与现有开发基线一致的 `0.1.2-rc.1`;`.claude` Skill 通过上游 filesystem Skill provider 加载。
|
|
20
|
+
- 现有 Managed Worktree 不自动补拷 Skill;在首次创建或完成交付后的下一轮创建时获取新快照。无需迁移 Worktree registry、Review、Recovery 或 Session 数据。
|
|
21
|
+
|
|
22
|
+
## [0.9.1] - 2026-09-15
|
|
23
|
+
|
|
24
|
+
`0.9.1` 修复 Windows 长路径和慢速仓库中 Worktree 创建失败或超时的问题,并减少状态与预览流程的重复 Git 查询;失败清理继续以可证明归属为前提,不修改用户 Git 配置、不全局 prune,也不删除未知锁或残留。
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- Windows 下为创建、检出、状态与验收交付的 Git 调用启用命令级长路径支持,修复 Worktree 路径前缀增长导致的 Filename too long;不修改用户 Git 配置或跳过 LFS。
|
|
29
|
+
- Worktree 创建使用独立可配置的 5 分钟共享时限,普通 Git 默认从 30 秒提高至 2 分钟;失败后等待进程树退出,验证本次目录、元数据和残留内容后回滚并恢复原会话绑定,允许手动重试。无法证明安全的残留继续保留,不全局 prune、不删除未知锁;稀疏检出保持原生语义。
|
|
30
|
+
- 减少状态读取与 Worktree 管理列表的重复 Git 查询:复用同次只读请求的调用者检查及同次目录验证结果,保留预览、交付、清理的实时安全校验与锁。
|
|
31
|
+
- 合并 Git common directory 与 worktree Git directory 的身份路径查询,减少进程启动开销;对包含换行的路径保留单值查询回退。
|
|
32
|
+
|
|
33
|
+
### Compatibility
|
|
34
|
+
|
|
35
|
+
- 继续使用既有 DeepSeek Harness peer 范围和 Worktree registry;无需迁移数据或修改 Git 配置。
|
|
36
|
+
- 新增 `gitTimeoutMs`(默认 2 分钟)与 `worktreeAddTimeoutMs`(默认 5 分钟)配置,现有配置不需要补写。
|
|
37
|
+
|
|
38
|
+
## [0.9.0] - 2026-09-11
|
|
39
|
+
|
|
40
|
+
`0.9.0` 完善新会话创建、验收与项目导航体验:空仓库可在明确确认后安全建立首次提交;Worktree 入口恢复为与 DSH 工具栏协调的原生紧凑开关;验收区增加只读详情弹窗,并修复撤回预览、历史 Worktree 分组及慢请求轮询的状态问题。
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
|
|
44
|
+
- 新会话目录入口支持无提交 Git 仓库:Host 先执行只读预检,再经用户明确确认创建空首次提交;不纳入用户文件或暂存内容,不改写 Git 身份,并在状态变化或失败后安全拒绝、允许重试。
|
|
45
|
+
- 验收条新增 Lucide 图标化只读详情弹窗,集中展示文件列表、验证记录和版本信息;操作仍留在验收条,历史卡保持结果导向的精简展示。
|
|
46
|
+
- Host 为历史 Managed Worktree 提供不含路径的导航归属投影,侧边栏可将过滤后的历史分组和未归组会话安全合并回原项目,同时保留歧义项与普通成员。
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
|
|
50
|
+
- 新建 Session 的目录入口改为 Harness 原生紧凑菜单与 Worktree 开关,跟随真实状态恢复,并与 DSH 工具栏尺寸、主题反馈和图标体系保持一致。
|
|
51
|
+
- cleanup 后的“开始下一轮修改”移至 owner Session 顶部 Worktree 菜单;验收条聚焦当前摘要、文件数、验证状态与交付操作。
|
|
52
|
+
- 统一 Worktree 管理、Preview、详情和更多操作的 Lucide 图标与间距,减少重复标题、常驻外框和开发辅助文案。
|
|
53
|
+
|
|
54
|
+
### Fixed
|
|
55
|
+
|
|
56
|
+
- 修复新版 Harness 中新会话 Worktree 开关点击后无响应:适配当前 `attachmentIds` 快照和源/目标 Session 输入操作,同时兼容旧版图片接口;草稿与附件可安全迁移到新 Session。
|
|
57
|
+
- 将输入快照创建纳入异常恢复,失败时释放忙碌锁、显示错误并允许重试,避免入口永久停留在准备状态。
|
|
58
|
+
- 撤回 Local Preview 后继续保留同一验收身份,避免旧异步结果覆盖;区分“撤回预览”和“继续修改”,并展示真实文件数、验证状态和 revision 防回退结果。
|
|
59
|
+
- 缓解 #6 的后台状态查询开销:状态按钮与验收栏共享按 Client adapter、会话及语言隔离的展示查询;慢请求完成后再调度,主动刷新合并并丢弃失效结果,避免重复轮询和未完成请求堆积。
|
|
60
|
+
- 展示查询在卸载时停止调度,重挂载不消费旧请求结果;创建、交付和清理的实时安全校验保持独立且不降级。
|
|
61
|
+
- 修正发布门禁的 Remote 方法清单,补入已存在且已有回归覆盖的 `preflightCreate` 与 `createWithInitialCommit`;不改变运行时协议。
|
|
62
|
+
|
|
63
|
+
### Documentation
|
|
64
|
+
|
|
65
|
+
- 增加新旧 Harness 兼容矩阵,区分开发基线、peer 声明、用户反馈、部分实测与未验证项;记录 `0.8.0` 对 `0.1.5-rc.1` 的隔离验证及端到端限制,不强制升级 Host,不扩大依赖声明。
|
|
66
|
+
- 清理过时 UI Skill 和并行开发交接稿,按当前实现更新 UI 维护指南、Console 模块职责与验证入口。
|
|
67
|
+
|
|
68
|
+
### Compatibility
|
|
69
|
+
|
|
70
|
+
- 开发与可重复构建基线仍为 DeepSeek Harness `0.1.2-rc.1`;`0.1.5-rc.1` 只有用户反馈和部分隔离验证,不扩大 peer 声明,也不要求现有用户升级 Host。
|
|
71
|
+
- 新增空仓库首次提交能力和历史导航投影,不迁移既有 Worktree registry、Review、Recovery 或 Session 数据。
|
|
72
|
+
|
|
7
73
|
## [0.8.0] - 2026-09-09
|
|
8
74
|
|
|
9
75
|
`0.8.0` 为插件增加 Client 与 Host 全链路中英文支持:界面、工具、命令和 Host 用户消息跟随 DSH 语言选择,并通过显式 Console 语言传递与异步上下文隔离保持并发会话正确;同时修复新建 Session 时 Worktree 入口因使用过期状态 seam 而崩溃的问题。
|
|
@@ -299,6 +365,9 @@
|
|
|
299
365
|
|
|
300
366
|
- 发布初版生产级 Worktree 管理、基础 apply/finish/discard 生命周期和安全清理。
|
|
301
367
|
|
|
368
|
+
[0.9.2]: https://github.com/wloops/dsh-git-worktree/compare/v0.9.1...v0.9.2
|
|
369
|
+
[0.9.1]: https://github.com/wloops/dsh-git-worktree/compare/v0.9.0...v0.9.1
|
|
370
|
+
[0.9.0]: https://github.com/wloops/dsh-git-worktree/compare/v0.8.0...v0.9.0
|
|
302
371
|
[0.8.0]: https://github.com/wloops/dsh-git-worktree/compare/v0.7.5...v0.8.0
|
|
303
372
|
[0.7.5]: https://github.com/wloops/dsh-git-worktree/compare/v0.7.4...v0.7.5
|
|
304
373
|
[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,10 @@ 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**:
|
|
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.
|
|
37
|
+
- **Carry project Skills**: the first Worktree and each next iteration receive one snapshot of `.dsh/skills`, `.agents/skills`, and `.claude/skills`, while auxiliary files stay separate from Git delivery.
|
|
35
38
|
- **Continue in the same conversation**: after delivery, begin another task without opening a new conversation.
|
|
36
39
|
|
|
37
40
|
> The current version manages Git Worktrees within one project. It does not yet provide a global cross-project manager.
|
|
@@ -69,16 +72,16 @@ See the [full usage guide](docs/USAGE.en.md) for detailed actions, recovery scen
|
|
|
69
72
|
### Requirements
|
|
70
73
|
|
|
71
74
|
- Node.js `^22.19.0 || >=24.0.0`
|
|
72
|
-
- DeepSeek Harness `0.1.2-rc.1`
|
|
75
|
+
- 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
76
|
- Harness Web Client
|
|
74
77
|
- A Git Workspace
|
|
75
78
|
|
|
76
79
|
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
80
|
|
|
78
|
-
After upgrading Harness from an earlier release, if the web UI shows **Failed to load plugins**,
|
|
81
|
+
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.2`. 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
82
|
|
|
80
83
|
```bash
|
|
81
|
-
dsh plugin --profile web add dsh-git-worktree@0.
|
|
84
|
+
dsh plugin --profile web add dsh-git-worktree@0.9.2
|
|
82
85
|
```
|
|
83
86
|
|
|
84
87
|
### Install
|
|
@@ -90,7 +93,7 @@ dsh plugin --profile web add dsh-git-worktree
|
|
|
90
93
|
Or install a specific version:
|
|
91
94
|
|
|
92
95
|
```bash
|
|
93
|
-
dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.
|
|
96
|
+
dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.9.2
|
|
94
97
|
```
|
|
95
98
|
|
|
96
99
|
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,10 @@
|
|
|
31
31
|
- **只保存本轮任务**:确认后只提交这个任务的修改,不把无关内容一起带入。
|
|
32
32
|
- **长任务可分阶段**:先保存当前阶段的进度,再继续开发;最终仍合并为一次交付。
|
|
33
33
|
- **出错时保护现场**:检测到分支变化、内容冲突或中断时停止操作,保留现场供你处理。
|
|
34
|
-
-
|
|
34
|
+
- **集中查看任务**:同一项目的当前及历史 Worktree 会按 Host 导航归属聚合到侧边栏,归属不明确时保守保留原位置。
|
|
35
|
+
- **验收详情集中查看**:从验收条打开只读详情,查看文件列表、验证记录与版本信息,不必翻找聊天工具记录。
|
|
36
|
+
- **空仓库安全起步**:无提交仓库可在明确确认后创建不包含用户文件的空首次提交,再建立隔离 Worktree。
|
|
37
|
+
- **携带项目 Skills**:首次及下一轮 Worktree 创建时一次性携带 `.dsh/skills`、`.agents/skills` 和 `.claude/skills`,辅助文件与 Git 交付隔离。
|
|
35
38
|
- **原对话继续下一轮**:任务交付后,无需新开对话即可继续下一项修改。
|
|
36
39
|
|
|
37
40
|
> 当前版本管理单个项目中的 Git Worktree,暂不提供跨项目的全局管理界面。
|
|
@@ -69,16 +72,16 @@ flowchart LR
|
|
|
69
72
|
### 环境要求
|
|
70
73
|
|
|
71
74
|
- Node.js `^22.19.0 || >=24.0.0`
|
|
72
|
-
- DeepSeek Harness
|
|
75
|
+
- DeepSeek Harness:`0.1.2-rc.1` 为开发验证基线;`0.1.5-rc.1` 已有用户可用反馈并通过部分隔离验证,详见[兼容矩阵与限制](docs/COMPATIBILITY.md#中文)。并非只能使用最新版。
|
|
73
76
|
- Harness Web Client
|
|
74
77
|
- Git Workspace
|
|
75
78
|
|
|
76
79
|
从旧 Harness 升级时请先处理 Host 数据迁移:`0.1.2-rc.1` 已移除可选 SQLite Session 后端,旧数据需使用旧版 Harness 导出;Code Mode 已更名为 PTC mode,但现有会话记录仍可读取。应用和本插件统一通过 `dsh` Profile 启动与安装。
|
|
77
80
|
|
|
78
|
-
从旧版 Harness 升级后,如果 Web 界面提示 **Failed to load plugins
|
|
81
|
+
从旧版 Harness 升级后,如果 Web 界面提示 **Failed to load plugins**,请按[兼容矩阵](docs/COMPATIBILITY.md#中文)选择修复版本并重启 Harness;下方以当前 `0.9.2` 为例。`0.7.2` 及更早版本依赖已停止发布的 `dsh-client-runtime`;`0.7.3` 在 rc.1 Web Client 中还可能形成 `conversation` / `uiWorkspace` 循环等待。
|
|
79
82
|
|
|
80
83
|
```bash
|
|
81
|
-
dsh plugin --profile web add dsh-git-worktree@0.
|
|
84
|
+
dsh plugin --profile web add dsh-git-worktree@0.9.2
|
|
82
85
|
```
|
|
83
86
|
|
|
84
87
|
### 安装
|
|
@@ -90,7 +93,7 @@ dsh plugin --profile web add dsh-git-worktree
|
|
|
90
93
|
也可以安装指定版本:
|
|
91
94
|
|
|
92
95
|
```bash
|
|
93
|
-
dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.
|
|
96
|
+
dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.9.2
|
|
94
97
|
```
|
|
95
98
|
|
|
96
99
|
安装后打开 Git Workspace,在新建 Session 时启用 **Worktree**;已有 Local Session 也可以让模型调用 `worktree_create` 创建隔离 Session。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface GitTimeoutOptions {
|
|
2
|
+
gitTimeoutMs?: number;
|
|
3
|
+
worktreeAddTimeoutMs?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare const DEFAULT_GIT_TIMEOUT_MS = 120000;
|
|
6
|
+
export declare const DEFAULT_WORKTREE_ADD_TIMEOUT_MS: number;
|
|
7
|
+
export declare const MAX_GIT_TIMEOUT_MS: number;
|
|
8
|
+
export declare function validateGitTimeouts(options: GitTimeoutOptions): void;
|
|
9
|
+
export declare function gitTimeoutMs(args: readonly string[], options: GitTimeoutOptions): number;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const DEFAULT_GIT_TIMEOUT_MS = 120_000;
|
|
2
|
+
export const DEFAULT_WORKTREE_ADD_TIMEOUT_MS = 5 * 60_000;
|
|
3
|
+
export const MAX_GIT_TIMEOUT_MS = 60 * 60_000;
|
|
4
|
+
export function validateGitTimeouts(options) {
|
|
5
|
+
for (const key of ['gitTimeoutMs', 'worktreeAddTimeoutMs']) {
|
|
6
|
+
const value = options[key];
|
|
7
|
+
if (value !== undefined && (!Number.isSafeInteger(value) || value < 1_000 || value > MAX_GIT_TIMEOUT_MS)) {
|
|
8
|
+
throw new RangeError(`${key} must be an integer between 1000 and ${MAX_GIT_TIMEOUT_MS} ms`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function gitTimeoutMs(args, options) {
|
|
13
|
+
if (args[0] === 'worktree' && args[1] === 'add')
|
|
14
|
+
return options.worktreeAddTimeoutMs ?? DEFAULT_WORKTREE_ADD_TIMEOUT_MS;
|
|
15
|
+
if (args[0] === 'worktree' && args[1] === 'remove')
|
|
16
|
+
return 5 * 60_000;
|
|
17
|
+
return options.gitTimeoutMs ?? DEFAULT_GIT_TIMEOUT_MS;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=git-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-options.js","sourceRoot":"","sources":["../../src/adapters/git-options.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAA;AAC7C,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,GAAG,MAAM,CAAA;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,MAAM,CAAA;AAE7C,MAAM,UAAU,mBAAmB,CAAC,OAA0B;IAC5D,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAU,EAAE,CAAC;QACpE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC;YACzG,MAAM,IAAI,UAAU,CAAC,GAAG,GAAG,wCAAwC,kBAAkB,KAAK,CAAC,CAAA;QAC7F,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAuB,EAAE,OAA0B;IAC9E,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,OAAO,CAAC,oBAAoB,IAAI,+BAA+B,CAAA;IACvH,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,MAAM,CAAA;IACrE,OAAO,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAA;AACvD,CAAC"}
|
package/lib/adapters/git.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { ProjectSkillStore } from './project-skills.js';
|
|
2
|
+
import { type GitTimeoutOptions } from './git-options.js';
|
|
1
3
|
import type { Context } from '@deepseek-ai/cordis';
|
|
2
4
|
import type { SessionCheckoutGitPort } from '../ports.js';
|
|
3
|
-
export interface GitPortOptions {
|
|
5
|
+
export interface GitPortOptions extends GitTimeoutOptions {
|
|
4
6
|
/** Directory holding the empty `core.hooksPath` target; created by the caller. */
|
|
5
7
|
hooksPath: string;
|
|
8
|
+
projectSkills?: ProjectSkillStore;
|
|
6
9
|
}
|
|
7
10
|
/** Build the `ctx.subprocess`-backed git port. */
|
|
8
11
|
export declare function createDshGitPort(ctx: Context, options: GitPortOptions): SessionCheckoutGitPort;
|
package/lib/adapters/git.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { ProjectSkillStore, PROJECT_SKILL_ROOTS, hasDeliverableStatus, trackedSkillPaths } from './project-skills.js';
|
|
2
|
+
import { createWorktree } from './worktree-creation.js';
|
|
3
|
+
import { gitTimeoutMs, validateGitTimeouts } from './git-options.js';
|
|
4
|
+
import { initialCommitActions } from './initial-commit.js';
|
|
1
5
|
import { hostMessage } from '../i18n/host.js';
|
|
2
6
|
/**
|
|
3
7
|
* DSH adapter for the session-checkout git port: runs git through
|
|
@@ -10,35 +14,51 @@ import { hostMessage } from '../i18n/host.js';
|
|
|
10
14
|
* @module dsh-git-worktree/adapters/git
|
|
11
15
|
*/
|
|
12
16
|
import { createHash } from 'node:crypto';
|
|
13
|
-
import { realpath } from 'node:fs/promises';
|
|
14
|
-
import { resolve } from 'node:path';
|
|
17
|
+
import { realpath, lstat } from 'node:fs/promises';
|
|
18
|
+
import { resolve, dirname, join } from 'node:path';
|
|
15
19
|
import { SessionCheckoutError } from '../index.js';
|
|
16
|
-
/**
|
|
17
|
-
const
|
|
18
|
-
const WORKTREE_REMOVE_TIMEOUT_MS = 5 * 60_000;
|
|
20
|
+
/** Termination grace is separate from the command deadline. */
|
|
21
|
+
const GIT_TERMINATION_GRACE_MS = 1_000;
|
|
19
22
|
/** Collected-output cap per stream; git output is small but removals can warn. */
|
|
20
23
|
const GIT_COLLECT_BYTES = 1 << 20;
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
async function settleCreationTree(handle) {
|
|
25
|
+
if (typeof handle.waitForExit !== 'function' || typeof handle.terminate !== 'function')
|
|
26
|
+
return false;
|
|
27
|
+
const controller = new AbortController();
|
|
28
|
+
const timeout = setTimeout(() => controller.abort(), 10_000);
|
|
29
|
+
timeout.unref?.();
|
|
30
|
+
try {
|
|
31
|
+
handle.terminate();
|
|
32
|
+
return await handle.waitForExit(controller.signal);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
clearTimeout(timeout);
|
|
39
|
+
}
|
|
25
40
|
}
|
|
26
41
|
/**
|
|
27
42
|
* Run one git command through `ctx.subprocess`. Returns an outcome object —
|
|
28
43
|
* the caller decides whether a non-zero exit is an error. Never
|
|
29
44
|
* shell-interpreted; argv passes verbatim.
|
|
30
45
|
*/
|
|
31
|
-
async function runGit(ctx, cwd, args, options) {
|
|
32
|
-
const graceMs = gitTimeoutMs(args);
|
|
46
|
+
async function runGit(ctx, cwd, args, options, input, creation) {
|
|
47
|
+
const graceMs = creation ? creation.deadline - Date.now() : gitTimeoutMs(args, options);
|
|
48
|
+
if (creation && graceMs <= 0)
|
|
49
|
+
return { code: -1, stdout: '', stderr: hostMessage('gitTimedOutMsAndWasTerminated', { p0: args.join(' '), p1: 0 }), quiescent: true };
|
|
33
50
|
const controller = new AbortController();
|
|
34
51
|
const timeout = setTimeout(() => controller.abort(), graceMs);
|
|
35
52
|
timeout.unref?.();
|
|
53
|
+
let handle;
|
|
36
54
|
try {
|
|
37
|
-
|
|
55
|
+
handle = ctx.subprocess.spawn({
|
|
38
56
|
argv: [
|
|
39
57
|
'git',
|
|
40
58
|
'--no-pager',
|
|
41
59
|
'--no-optional-locks',
|
|
60
|
+
// Worktree prefixes can exceed MAX_PATH even when the source checkout fits.
|
|
61
|
+
...(process.platform === 'win32' ? ['-c', 'core.longpaths=true'] : []),
|
|
42
62
|
'-c', 'core.quotePath=false',
|
|
43
63
|
'-c', 'core.fsmonitor=false',
|
|
44
64
|
'-c', `core.hooksPath=${options.hooksPath}`,
|
|
@@ -46,30 +66,86 @@ async function runGit(ctx, cwd, args, options) {
|
|
|
46
66
|
],
|
|
47
67
|
cwd,
|
|
48
68
|
stdio: {
|
|
49
|
-
stdin: 'ignore',
|
|
69
|
+
stdin: input === undefined ? 'ignore' : 'pipe',
|
|
50
70
|
stdout: { maxBytes: GIT_COLLECT_BYTES },
|
|
51
71
|
stderr: { maxBytes: GIT_COLLECT_BYTES },
|
|
52
72
|
},
|
|
53
|
-
graceMs:
|
|
73
|
+
graceMs: GIT_TERMINATION_GRACE_MS,
|
|
54
74
|
signal: controller.signal,
|
|
55
75
|
env: {
|
|
76
|
+
// Repository routing must come from the authorized cwd, never ambient Git
|
|
77
|
+
// overrides. Preserve identity variables and normal user configuration.
|
|
78
|
+
...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
79
|
GIT_OPTIONAL_LOCKS: '0',
|
|
57
80
|
GIT_TERMINAL_PROMPT: '0',
|
|
58
81
|
LC_ALL: 'C',
|
|
59
82
|
LANG: 'C',
|
|
60
83
|
},
|
|
61
84
|
});
|
|
85
|
+
if (input !== undefined) {
|
|
86
|
+
handle.stdin?.on('error', () => { });
|
|
87
|
+
if (typeof input === 'string')
|
|
88
|
+
handle.stdin?.end(input);
|
|
89
|
+
else {
|
|
90
|
+
handle.stdin?.write(input.prepare);
|
|
91
|
+
let exited = false;
|
|
92
|
+
void handle.done.then(() => { exited = true; });
|
|
93
|
+
while (!exited && !controller.signal.aborted && !handle.collected.stdout?.readFrom(0).text.includes('prepare: ok')) {
|
|
94
|
+
await new Promise(resolve => setTimeout(resolve, 5));
|
|
95
|
+
}
|
|
96
|
+
if (!exited && !controller.signal.aborted) {
|
|
97
|
+
try {
|
|
98
|
+
await input.beforeCommit();
|
|
99
|
+
handle.stdin?.end('commit\n');
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
handle.stdin?.end('abort\n');
|
|
103
|
+
await handle.done;
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else
|
|
108
|
+
handle.stdin?.end();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
62
111
|
const outcome = await handle.done;
|
|
63
|
-
|
|
64
|
-
|
|
112
|
+
let quiescent;
|
|
113
|
+
if (creation) {
|
|
114
|
+
let completed = false;
|
|
115
|
+
if (outcome.exitCode === 0 && !outcome.signal && !controller.signal.aborted && typeof handle.waitForExit === 'function') {
|
|
116
|
+
try {
|
|
117
|
+
completed = await handle.waitForExit(controller.signal);
|
|
118
|
+
}
|
|
119
|
+
catch { /* Preserve unless termination is confirmed below. */ }
|
|
120
|
+
}
|
|
121
|
+
if (completed && !controller.signal.aborted)
|
|
122
|
+
quiescent = true;
|
|
123
|
+
else {
|
|
124
|
+
quiescent = await settleCreationTree(handle);
|
|
125
|
+
if (outcome.exitCode === 0)
|
|
126
|
+
return { code: -1, stdout: '', stderr: hostMessage('repositoryInspectionFailed'), quiescent };
|
|
127
|
+
}
|
|
128
|
+
if (!quiescent)
|
|
129
|
+
return { code: -1, stdout: '', stderr: hostMessage('repositoryInspectionFailed'), quiescent: false };
|
|
130
|
+
}
|
|
131
|
+
clearTimeout(timeout);
|
|
132
|
+
const stdoutRead = handle.collected.stdout?.readFrom(0);
|
|
133
|
+
const stderrRead = handle.collected.stderr?.readFrom(0);
|
|
134
|
+
const stdout = stdoutRead?.text ?? '';
|
|
135
|
+
const stderr = stderrRead?.text ?? '';
|
|
136
|
+
if (stdoutRead?.lossy || stderrRead?.lossy) {
|
|
137
|
+
return { code: -1, stdout: '', stderr: hostMessage('repositoryInspectionFailed'), quiescent };
|
|
138
|
+
}
|
|
65
139
|
if (outcome.signal === 'SIGTERM' || outcome.signal === 'SIGKILL' || controller.signal.aborted) {
|
|
66
|
-
return { code: -1, stdout, stderr: hostMessage('gitTimedOutMsAndWasTerminated', { p0: args.join(' '), p1: graceMs }) };
|
|
140
|
+
return { code: -1, stdout, stderr: hostMessage('gitTimedOutMsAndWasTerminated', { p0: args.join(' '), p1: graceMs }), quiescent };
|
|
67
141
|
}
|
|
68
|
-
return { code: outcome.exitCode ?? -1, stdout: stdout.trim(), stderr: stderr.trim() };
|
|
142
|
+
return { code: outcome.exitCode ?? -1, stdout: stdout.trim(), stderr: stderr.trim(), quiescent };
|
|
69
143
|
}
|
|
70
144
|
catch (error) {
|
|
71
|
-
|
|
72
|
-
|
|
145
|
+
if (error instanceof SessionCheckoutError)
|
|
146
|
+
throw error;
|
|
147
|
+
const quiescent = creation && handle ? await settleCreationTree(handle) : false;
|
|
148
|
+
return { code: -1, stdout: '', stderr: error instanceof Error ? error.message : String(error), quiescent };
|
|
73
149
|
}
|
|
74
150
|
finally {
|
|
75
151
|
clearTimeout(timeout);
|
|
@@ -100,18 +176,61 @@ function internalArtifactRef(checkoutId, artifactName) {
|
|
|
100
176
|
function applyBaseRef(checkoutId) {
|
|
101
177
|
return internalArtifactRef(checkoutId, 'apply-base');
|
|
102
178
|
}
|
|
179
|
+
async function hasGitMetadata(root) {
|
|
180
|
+
let directory = resolve(root);
|
|
181
|
+
for (;;) {
|
|
182
|
+
try {
|
|
183
|
+
await lstat(join(directory, '.git'));
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
if (error.code !== 'ENOENT')
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
const parent = dirname(directory);
|
|
191
|
+
if (parent === directory)
|
|
192
|
+
return false;
|
|
193
|
+
directory = parent;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
103
196
|
/** Build the `ctx.subprocess`-backed git port. */
|
|
104
197
|
export function createDshGitPort(ctx, options) {
|
|
105
|
-
|
|
198
|
+
validateGitTimeouts(options);
|
|
199
|
+
const projectSkills = options.projectSkills ?? new ProjectSkillStore(join(dirname(options.hooksPath), 'project-skills'));
|
|
200
|
+
const runSessionGit = (cwd, args, input) => runGit(ctx, cwd, args, options, input);
|
|
106
201
|
const runSessionGitChecked = (cwd, args) => runGitChecked(ctx, cwd, args, options);
|
|
107
|
-
|
|
202
|
+
const port = {
|
|
108
203
|
inspect: async (root) => {
|
|
109
204
|
const topLevel = await runSessionGit(root, ['rev-parse', '--show-toplevel']);
|
|
110
|
-
if (topLevel.code !== 0 || !topLevel.stdout)
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
205
|
+
if (topLevel.code !== 0 || !topLevel.stdout) {
|
|
206
|
+
if (topLevel.code === 128 && /^fatal: not a git repository/.test(topLevel.stderr) && !await hasGitMetadata(root))
|
|
207
|
+
return null;
|
|
208
|
+
throw new SessionCheckoutError('git_operation_failed', hostMessage('repositoryInspectionFailed'));
|
|
209
|
+
}
|
|
210
|
+
// Both paths come from the same fresh Git invocation. Do not cache across
|
|
211
|
+
// operations: the worktree/common-directory identity is a safety boundary.
|
|
212
|
+
const paths = (await runSessionGitChecked(root, [
|
|
213
|
+
'rev-parse', '--path-format=absolute', '--git-common-dir', '--absolute-git-dir',
|
|
214
|
+
])).split('\n');
|
|
215
|
+
// Newlines are legal in POSIX paths; retain the unambiguous single-value
|
|
216
|
+
// reads when the multi-value output cannot be parsed safely.
|
|
217
|
+
const commonDir = paths.length === 2 ? paths[0]
|
|
218
|
+
: await runSessionGitChecked(root, ['rev-parse', '--path-format=absolute', '--git-common-dir']);
|
|
219
|
+
const gitDir = paths.length === 2 ? paths[1]
|
|
220
|
+
: await runSessionGitChecked(root, ['rev-parse', '--path-format=absolute', '--absolute-git-dir']);
|
|
221
|
+
const head = await runSessionGit(root, ['rev-parse', '--verify', '--quiet', 'HEAD^{commit}']);
|
|
222
|
+
let headOid = head.stdout;
|
|
223
|
+
if (head.code !== 0) {
|
|
224
|
+
const symbolicHead = await runSessionGit(root, ['symbolic-ref', '--quiet', 'HEAD']);
|
|
225
|
+
const refs = await runSessionGit(root, ['show-ref']);
|
|
226
|
+
// A missing commit is unborn only with a valid symbolic HEAD and no refs.
|
|
227
|
+
// Broken refs, unreadable metadata, and missing objects remain Git errors.
|
|
228
|
+
if (head.code !== 1 || symbolicHead.code !== 0 || !symbolicHead.stdout.startsWith('refs/heads/')
|
|
229
|
+
|| refs.code !== 1 || refs.stdout || refs.stderr) {
|
|
230
|
+
throw new SessionCheckoutError('git_operation_failed', hostMessage('repositoryInspectionFailed'));
|
|
231
|
+
}
|
|
232
|
+
headOid = 'unborn';
|
|
233
|
+
}
|
|
115
234
|
const symbolic = await runSessionGit(root, ['symbolic-ref', '--quiet', 'HEAD']);
|
|
116
235
|
const headRef = symbolic.code === 0 && symbolic.stdout ? symbolic.stdout : 'HEAD';
|
|
117
236
|
const branch = headRef.startsWith('refs/heads/') ? headRef.slice('refs/heads/'.length) : null;
|
|
@@ -126,21 +245,40 @@ export function createDshGitPort(ctx, options) {
|
|
|
126
245
|
},
|
|
127
246
|
findContainingWorktreeRoot: async (root) => {
|
|
128
247
|
const topLevel = await runSessionGit(root, ['rev-parse', '--show-toplevel']);
|
|
129
|
-
if (topLevel.code !== 0 || !topLevel.stdout)
|
|
130
|
-
|
|
248
|
+
if (topLevel.code !== 0 || !topLevel.stdout) {
|
|
249
|
+
if (topLevel.code === 128 && /^fatal: not a git repository/.test(topLevel.stderr) && !await hasGitMetadata(root))
|
|
250
|
+
return null;
|
|
251
|
+
throw new SessionCheckoutError('git_operation_failed', hostMessage('repositoryInspectionFailed'));
|
|
252
|
+
}
|
|
131
253
|
return realpath(resolve(topLevel.stdout));
|
|
132
254
|
},
|
|
133
255
|
status: async (root) => {
|
|
134
256
|
const output = await runSessionGitChecked(root, ['status', '--porcelain=v1', '-z', '--untracked-files=all']);
|
|
135
|
-
|
|
257
|
+
const carried = await projectSkills.scope(root);
|
|
258
|
+
return { dirty: hasDeliverableStatus(output, new Set(carried?.paths ?? []), carried?.directories) };
|
|
136
259
|
},
|
|
137
|
-
createDetachedWorktree: async (localRoot, managedRoot, baseOid) => {
|
|
138
|
-
await
|
|
260
|
+
createDetachedWorktree: async (localRoot, managedRoot, baseOid, saveEvidence) => {
|
|
261
|
+
const skills = await projectSkills.snapshot(localRoot);
|
|
262
|
+
const changed = await runSessionGitChecked(localRoot, ['diff', '--name-only', '-z', baseOid, '--', ...PROJECT_SKILL_ROOTS])
|
|
263
|
+
+ await runSessionGitChecked(localRoot, ['diff', '--cached', '--name-only', '-z', baseOid, '--', ...PROJECT_SKILL_ROOTS]);
|
|
264
|
+
if (changed)
|
|
265
|
+
throw new SessionCheckoutError('git_operation_failed', `Project Skills: commit or resolve local tracked Skill changes before creating a Worktree (${changed.split('\0').filter(Boolean).join(', ')})`);
|
|
266
|
+
const deadline = Date.now() + gitTimeoutMs(['worktree', 'add'], options);
|
|
267
|
+
await createWorktree(localRoot, managedRoot, baseOid, (cwd, args, creating) => runGit(ctx, cwd, args, options, undefined, creating ? { deadline }
|
|
268
|
+
: args[0] === 'worktree' && ['move', 'remove'].includes(args[1] ?? '')
|
|
269
|
+
? { deadline: Date.now() + gitTimeoutMs(args, options) } : undefined), saveEvidence);
|
|
270
|
+
await projectSkills.carry(skills, managedRoot);
|
|
139
271
|
},
|
|
140
272
|
removeWorktree: async (localRoot, managedRoot) => {
|
|
141
273
|
// Git treats a reviewed-but-uncommitted final snapshot as modified/untracked;
|
|
142
274
|
// the caller has already verified checkout identity and the full fingerprint.
|
|
275
|
+
if (await projectSkills.paths(managedRoot)) {
|
|
276
|
+
const index = await runSessionGitChecked(managedRoot, ['ls-files', '--stage', '-z']);
|
|
277
|
+
const head = await runSessionGitChecked(managedRoot, ['ls-tree', '-r', '--name-only', '-z', 'HEAD']);
|
|
278
|
+
await projectSkills.assertRemovable(managedRoot, trackedSkillPaths(index, head));
|
|
279
|
+
}
|
|
143
280
|
await runSessionGitChecked(localRoot, ['worktree', 'remove', '--force', managedRoot]);
|
|
281
|
+
await projectSkills.forget(managedRoot);
|
|
144
282
|
},
|
|
145
283
|
retainApplyBase: async (localRoot, checkoutId, oid) => {
|
|
146
284
|
await runSessionGitChecked(localRoot, ['update-ref', applyBaseRef(checkoutId), oid]);
|
|
@@ -177,5 +315,6 @@ export function createDshGitPort(ctx, options) {
|
|
|
177
315
|
throw new Error(result.stderr || hostMessage('cannotProveGitCommitAncestry'));
|
|
178
316
|
},
|
|
179
317
|
};
|
|
318
|
+
return Object.assign(port, initialCommitActions(port.inspect, runSessionGit));
|
|
180
319
|
}
|
|
181
320
|
//# sourceMappingURL=git.js.map
|
package/lib/adapters/git.js.map
CHANGED
|
@@ -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 {};
|