@cerbur/clutch-dsh-worktree 0.1.17 → 0.1.19
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/README.md +207 -42
- package/README.zh.md +174 -38
- package/assets/screenshots/screenshots-agent-steer.jpg +0 -0
- package/assets/screenshots/screenshots-baseline-sync.png +0 -0
- package/lib/client/WorktreeSurface.d.ts.map +1 -1
- package/lib/client/WorktreeSurface.js +55 -12
- package/lib/client/WorktreeSurface.js.map +1 -1
- package/lib/client/branch/GitBranchSelector.d.ts +23 -0
- package/lib/client/branch/GitBranchSelector.d.ts.map +1 -0
- package/lib/client/branch/GitBranchSelector.js +142 -0
- package/lib/client/branch/GitBranchSelector.js.map +1 -0
- package/lib/client/context/worktree-context-store.d.ts +3 -1
- package/lib/client/context/worktree-context-store.d.ts.map +1 -1
- package/lib/client/context/worktree-context-store.js +4 -2
- package/lib/client/context/worktree-context-store.js.map +1 -1
- package/lib/client/context/worktree-context.d.ts +3 -2
- package/lib/client/context/worktree-context.d.ts.map +1 -1
- package/lib/client/context/worktree-context.js +5 -3
- package/lib/client/context/worktree-context.js.map +1 -1
- package/lib/client/dashboard/WorktreeDashboard.d.ts +11 -3
- package/lib/client/dashboard/WorktreeDashboard.d.ts.map +1 -1
- package/lib/client/dashboard/WorktreeDashboard.js +181 -75
- package/lib/client/dashboard/WorktreeDashboard.js.map +1 -1
- package/lib/client/dashboard/dashboard-selection.d.ts +8 -3
- package/lib/client/dashboard/dashboard-selection.d.ts.map +1 -1
- package/lib/client/dashboard/dashboard-selection.js +29 -4
- package/lib/client/dashboard/dashboard-selection.js.map +1 -1
- package/lib/client/dashboard/git/GitChangedFiles.d.ts +2 -1
- package/lib/client/dashboard/git/GitChangedFiles.d.ts.map +1 -1
- package/lib/client/dashboard/git/GitChangedFiles.js +8 -6
- package/lib/client/dashboard/git/GitChangedFiles.js.map +1 -1
- package/lib/client/dashboard/git/GitCommitList.d.ts +6 -1
- package/lib/client/dashboard/git/GitCommitList.d.ts.map +1 -1
- package/lib/client/dashboard/git/GitCommitList.js +34 -29
- package/lib/client/dashboard/git/GitCommitList.js.map +1 -1
- package/lib/client/dashboard/git/GitCommitStats.d.ts +8 -0
- package/lib/client/dashboard/git/GitCommitStats.d.ts.map +1 -0
- package/lib/client/dashboard/git/GitCommitStats.js +7 -0
- package/lib/client/dashboard/git/GitCommitStats.js.map +1 -0
- package/lib/client/dashboard/git/WorktreeGitOverview.d.ts.map +1 -1
- package/lib/client/dashboard/git/WorktreeGitOverview.js +2 -1
- package/lib/client/dashboard/git/WorktreeGitOverview.js.map +1 -1
- package/lib/client/dashboard/git/WorktreeGitPanel.d.ts +1 -1
- package/lib/client/dashboard/git/WorktreeGitPanel.d.ts.map +1 -1
- package/lib/client/dashboard/git/WorktreeGitPanel.js +28 -9
- package/lib/client/dashboard/git/WorktreeGitPanel.js.map +1 -1
- package/lib/client/dashboard/git/file-address.d.ts +5 -2
- package/lib/client/dashboard/git/file-address.d.ts.map +1 -1
- package/lib/client/dashboard/git/file-address.js +50 -7
- package/lib/client/dashboard/git/file-address.js.map +1 -1
- package/lib/client/dashboard/git/git-facts.js +1 -1
- package/lib/client/dashboard/git/git-facts.js.map +1 -1
- package/lib/client/dashboard/git/useWorktreeGitState.d.ts +7 -2
- package/lib/client/dashboard/git/useWorktreeGitState.d.ts.map +1 -1
- package/lib/client/dashboard/git/useWorktreeGitState.js +84 -21
- package/lib/client/dashboard/git/useWorktreeGitState.js.map +1 -1
- package/lib/client/dsh-icons.d.ts +2 -0
- package/lib/client/dsh-icons.d.ts.map +1 -1
- package/lib/client/dsh-icons.js +2 -0
- package/lib/client/dsh-icons.js.map +1 -1
- package/lib/client/dsh-slot-contract.d.ts +8 -1
- package/lib/client/dsh-slot-contract.d.ts.map +1 -1
- package/lib/client/entry.d.ts.map +1 -1
- package/lib/client/entry.js +22 -4
- package/lib/client/entry.js.map +1 -1
- package/lib/client/locales.d.ts +86 -2
- package/lib/client/locales.d.ts.map +1 -1
- package/lib/client/locales.js +100 -16
- package/lib/client/locales.js.map +1 -1
- package/lib/client/permission/worktree-permission.d.ts.map +1 -1
- package/lib/client/permission/worktree-permission.js +14 -6
- package/lib/client/permission/worktree-permission.js.map +1 -1
- package/lib/client/select/SearchableSingleSelect.d.ts +44 -0
- package/lib/client/select/SearchableSingleSelect.d.ts.map +1 -0
- package/lib/client/select/SearchableSingleSelect.js +180 -0
- package/lib/client/select/SearchableSingleSelect.js.map +1 -0
- package/lib/client/select/WorktreeSelector.d.ts +14 -0
- package/lib/client/select/WorktreeSelector.d.ts.map +1 -0
- package/lib/client/select/WorktreeSelector.js +11 -0
- package/lib/client/select/WorktreeSelector.js.map +1 -0
- package/lib/client/settings/diagnostics.d.ts +4 -0
- package/lib/client/settings/diagnostics.d.ts.map +1 -1
- package/lib/client/settings/diagnostics.js +12 -0
- package/lib/client/settings/diagnostics.js.map +1 -1
- package/lib/client/steer/SteerDock.d.ts +8 -0
- package/lib/client/steer/SteerDock.d.ts.map +1 -0
- package/lib/client/steer/SteerDock.js +12 -0
- package/lib/client/steer/SteerDock.js.map +1 -0
- package/lib/client/steer/steer-activity.d.ts +18 -0
- package/lib/client/steer/steer-activity.d.ts.map +1 -0
- package/lib/client/steer/steer-activity.js +37 -0
- package/lib/client/steer/steer-activity.js.map +1 -0
- package/lib/client/steer/steer-state.d.ts +24 -0
- package/lib/client/steer/steer-state.d.ts.map +1 -0
- package/lib/client/steer/steer-state.js +102 -0
- package/lib/client/steer/steer-state.js.map +1 -0
- package/lib/client/surface/actions/useLifecycleActions.js +1 -1
- package/lib/client/surface/actions/useLifecycleActions.js.map +1 -1
- package/lib/client/surface/actions/useWorktreeRegistration.d.ts +1 -1
- package/lib/client/surface/actions/useWorktreeRegistration.d.ts.map +1 -1
- package/lib/client/surface/actions/useWorktreeRegistration.js +32 -11
- package/lib/client/surface/actions/useWorktreeRegistration.js.map +1 -1
- package/lib/client/surface/components/RegistrationDialog.d.ts +3 -3
- package/lib/client/surface/components/RegistrationDialog.d.ts.map +1 -1
- package/lib/client/surface/components/RegistrationDialog.js +70 -5
- package/lib/client/surface/components/RegistrationDialog.js.map +1 -1
- package/lib/client/surface/components/WorkspaceTree.d.ts.map +1 -1
- package/lib/client/surface/components/WorkspaceTree.js +11 -8
- package/lib/client/surface/components/WorkspaceTree.js.map +1 -1
- package/lib/client/surface/components/dialogs.d.ts +1 -1
- package/lib/client/surface/components/dialogs.d.ts.map +1 -1
- package/lib/client/surface/components/dialogs.js +24 -15
- package/lib/client/surface/components/dialogs.js.map +1 -1
- package/lib/client/surface/state/useRegistrationState.d.ts +6 -1
- package/lib/client/surface/state/useRegistrationState.d.ts.map +1 -1
- package/lib/client/surface/state/useRegistrationState.js +7 -0
- package/lib/client/surface/state/useRegistrationState.js.map +1 -1
- package/lib/client/surface/state/useSurfaceRefresh.d.ts.map +1 -1
- package/lib/client/surface/state/useSurfaceRefresh.js +6 -3
- package/lib/client/surface/state/useSurfaceRefresh.js.map +1 -1
- package/lib/client/surface/types.d.ts +10 -2
- package/lib/client/surface/types.d.ts.map +1 -1
- package/lib/client/view/worktree-error-copy.d.ts.map +1 -1
- package/lib/client/view/worktree-error-copy.js +4 -0
- package/lib/client/view/worktree-error-copy.js.map +1 -1
- package/lib/client/view/worktree-view-read.d.ts +7 -2
- package/lib/client/view/worktree-view-read.d.ts.map +1 -1
- package/lib/client/view/worktree-view-read.js +57 -18
- package/lib/client/view/worktree-view-read.js.map +1 -1
- package/lib/client/worktree-connection.d.ts +4 -0
- package/lib/client/worktree-connection.d.ts.map +1 -1
- package/lib/client/worktree-connection.js +20 -1
- package/lib/client/worktree-connection.js.map +1 -1
- package/lib/client.js +2361 -834
- package/lib/client.js.map +1 -1
- package/lib/contract/baseline-sync.d.ts +27 -0
- package/lib/contract/baseline-sync.d.ts.map +1 -0
- package/lib/contract/baseline-sync.js +2 -0
- package/lib/contract/baseline-sync.js.map +1 -0
- package/lib/contract/index.contract.js +16 -0
- package/lib/contract/index.contract.js.map +1 -1
- package/lib/contract/index.d.ts +73 -12
- package/lib/contract/index.d.ts.map +1 -1
- package/lib/contract/index.js +4 -0
- package/lib/contract/index.js.map +1 -1
- package/lib/contract/worktree-permission.d.ts +2 -0
- package/lib/contract/worktree-permission.d.ts.map +1 -1
- package/lib/contract/worktree-permission.js +1 -1
- package/lib/contract/worktree-permission.js.map +1 -1
- package/lib/contract/worktree-tool-changes.d.ts +2 -0
- package/lib/contract/worktree-tool-changes.d.ts.map +1 -1
- package/lib/host/baseline-sync.d.ts +15 -0
- package/lib/host/baseline-sync.d.ts.map +1 -0
- package/lib/host/baseline-sync.js +93 -0
- package/lib/host/baseline-sync.js.map +1 -0
- package/lib/host/remote.d.ts +2 -1
- package/lib/host/remote.d.ts.map +1 -1
- package/lib/host/remote.js +8 -1
- package/lib/host/remote.js.map +1 -1
- package/lib/host/service.d.ts +18 -6
- package/lib/host/service.d.ts.map +1 -1
- package/lib/host/service.js +45 -2
- package/lib/host/service.js.map +1 -1
- package/lib/host/worktree-permission.d.ts +12 -0
- package/lib/host/worktree-permission.d.ts.map +1 -1
- package/lib/host/worktree-permission.js +87 -16
- package/lib/host/worktree-permission.js.map +1 -1
- package/lib/host/worktree-tool-changes.d.ts +1 -1
- package/lib/host/worktree-tool-changes.d.ts.map +1 -1
- package/lib/host/worktree-tool-changes.js +5 -2
- package/lib/host/worktree-tool-changes.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/manage/manager-git-history.d.ts +5 -7
- package/lib/manage/manager-git-history.d.ts.map +1 -1
- package/lib/manage/manager-git-history.js +158 -65
- package/lib/manage/manager-git-history.js.map +1 -1
- package/lib/manage/manager-git-paths.d.ts +7 -0
- package/lib/manage/manager-git-paths.d.ts.map +1 -0
- package/lib/manage/manager-git-paths.js +62 -0
- package/lib/manage/manager-git-paths.js.map +1 -0
- package/lib/manage/manager-worktrees.d.ts +9 -1
- package/lib/manage/manager-worktrees.d.ts.map +1 -1
- package/lib/manage/manager-worktrees.js +69 -14
- package/lib/manage/manager-worktrees.js.map +1 -1
- package/lib/manage/manager.d.ts +17 -5
- package/lib/manage/manager.d.ts.map +1 -1
- package/lib/manage/manager.js +81 -4
- package/lib/manage/manager.js.map +1 -1
- package/lib/manage/types.d.ts +5 -0
- package/lib/manage/types.d.ts.map +1 -1
- package/lib/provider/git/adapter.d.ts +13 -12
- package/lib/provider/git/adapter.d.ts.map +1 -1
- package/lib/provider/git/adapter.js +152 -29
- package/lib/provider/git/adapter.js.map +1 -1
- package/lib/provider/git/branch-name.d.ts +5 -0
- package/lib/provider/git/branch-name.d.ts.map +1 -0
- package/lib/provider/git/branch-name.js +16 -0
- package/lib/provider/git/branch-name.js.map +1 -0
- package/lib/provider/git/branches.d.ts +11 -0
- package/lib/provider/git/branches.d.ts.map +1 -0
- package/lib/provider/git/branches.js +37 -0
- package/lib/provider/git/branches.js.map +1 -0
- package/lib/provider/sidecar/repository.d.ts.map +1 -1
- package/lib/provider/sidecar/repository.js +2 -1
- package/lib/provider/sidecar/repository.js.map +1 -1
- package/lib/provider/sidecar/sidecar-schema.d.ts.map +1 -1
- package/lib/provider/sidecar/sidecar-schema.js +2 -0
- package/lib/provider/sidecar/sidecar-schema.js.map +1 -1
- package/lib/provider/transaction/operations/create.d.ts.map +1 -1
- package/lib/provider/transaction/operations/create.js +18 -6
- package/lib/provider/transaction/operations/create.js.map +1 -1
- package/lib/provider/transaction/recovery/failure-recovery.d.ts.map +1 -1
- package/lib/provider/transaction/recovery/failure-recovery.js +3 -2
- package/lib/provider/transaction/recovery/failure-recovery.js.map +1 -1
- package/lib/provider/transaction/recovery/recover.d.ts.map +1 -1
- package/lib/provider/transaction/recovery/recover.js +8 -5
- package/lib/provider/transaction/recovery/recover.js.map +1 -1
- package/lib/provider/transaction/support/journal.d.ts.map +1 -1
- package/lib/provider/transaction/support/journal.js +1 -0
- package/lib/provider/transaction/support/journal.js.map +1 -1
- package/lib/provider/types.d.ts +24 -4
- package/lib/provider/types.d.ts.map +1 -1
- package/lib/provider/types.js.map +1 -1
- package/lib/tool/agent-relay.d.ts +55 -0
- package/lib/tool/agent-relay.d.ts.map +1 -0
- package/lib/tool/agent-relay.js +159 -0
- package/lib/tool/agent-relay.js.map +1 -0
- package/lib/tool/delegation.d.ts +1 -0
- package/lib/tool/delegation.d.ts.map +1 -1
- package/lib/tool/delegation.js +32 -6
- package/lib/tool/delegation.js.map +1 -1
- package/lib/tool/dispatch-session.d.ts +18 -0
- package/lib/tool/dispatch-session.d.ts.map +1 -0
- package/lib/tool/dispatch-session.js +41 -0
- package/lib/tool/dispatch-session.js.map +1 -0
- package/lib/tool/errors.d.ts +6 -0
- package/lib/tool/errors.d.ts.map +1 -1
- package/lib/tool/errors.js +16 -2
- package/lib/tool/errors.js.map +1 -1
- package/lib/tool/guidance.d.ts +1 -0
- package/lib/tool/guidance.d.ts.map +1 -1
- package/lib/tool/guidance.js +2 -0
- package/lib/tool/guidance.js.map +1 -1
- package/lib/tool/index.d.ts.map +1 -1
- package/lib/tool/index.js +38 -4
- package/lib/tool/index.js.map +1 -1
- package/lib/tool/inputs.d.ts.map +1 -1
- package/lib/tool/inputs.js +6 -6
- package/lib/tool/inputs.js.map +1 -1
- package/lib/tool/list-models.js +2 -2
- package/lib/tool/list-models.js.map +1 -1
- package/lib/tool/list-sessions.js +2 -2
- package/lib/tool/list-sessions.js.map +1 -1
- package/lib/tool/list-worktrees.d.ts.map +1 -1
- package/lib/tool/list-worktrees.js +9 -2
- package/lib/tool/list-worktrees.js.map +1 -1
- package/lib/tool/native-session.d.ts +4 -0
- package/lib/tool/native-session.d.ts.map +1 -1
- package/lib/tool/native-session.js +17 -0
- package/lib/tool/native-session.js.map +1 -1
- package/lib/tool/new-worktree.js +4 -4
- package/lib/tool/new-worktree.js.map +1 -1
- package/lib/tool/report-result.d.ts.map +1 -1
- package/lib/tool/report-result.js +9 -7
- package/lib/tool/report-result.js.map +1 -1
- package/lib/tool/schema.d.ts +8 -0
- package/lib/tool/schema.d.ts.map +1 -1
- package/lib/tool/schema.js +31 -2
- package/lib/tool/schema.js.map +1 -1
- package/lib/tool/send-message.d.ts.map +1 -1
- package/lib/tool/send-message.js +8 -7
- package/lib/tool/send-message.js.map +1 -1
- package/lib/tool/span-worktree.d.ts.map +1 -1
- package/lib/tool/span-worktree.js +33 -59
- package/lib/tool/span-worktree.js.map +1 -1
- package/lib/tool/types.d.ts +2 -0
- package/lib/tool/types.d.ts.map +1 -1
- package/lib/tool/wire-schema.d.ts +4 -0
- package/lib/tool/wire-schema.d.ts.map +1 -0
- package/lib/tool/wire-schema.js +24 -0
- package/lib/tool/wire-schema.js.map +1 -0
- package/lib/typert.host.js +283 -52
- package/lib/typert.remote-client.d.ts +13 -5
- package/lib/typert.remote-client.d.ts.map +1 -1
- package/lib/typert.remote-client.js +283 -52
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -8,18 +8,17 @@ Workspace identity, Session metadata, native lists, messages, and conversation h
|
|
|
8
8
|
|
|
9
9
|
Tool preferences are stored in separate Host-owned files, outside relationship indexes and native
|
|
10
10
|
Session metadata. The plugin stores Worktree relationships, acquisition facts, shared Worktree instructions, and Workspace-root
|
|
11
|
-
Main instructions in its own sidecar. Managed Worktrees expose a read-only baseline-relative Git & Changes dashboard, while Main exposes
|
|
12
|
-
its Workspace-root HEAD history; the plugin does not copy transcripts or rewrite DSH Sessions.
|
|
11
|
+
Main instructions in its own sidecar. Managed Worktrees expose a read-only baseline-relative Git & Changes dashboard, while Local/Main exposes
|
|
12
|
+
its Workspace-root HEAD history with an optional comparison branch; the plugin does not copy transcripts or rewrite DSH Sessions.
|
|
13
13
|
|
|
14
14
|
> **Preview:** Worktree Dashboard is an early, plugin-only MVP preview. Worktree navigation, lifecycle actions,
|
|
15
|
-
> Session actions, Worktree/Main instructions, and the managed Worktree or Main Git & Changes view are connected.
|
|
16
|
-
>
|
|
17
|
-
> **Coming soon**.
|
|
15
|
+
> Session actions, Worktree/Main instructions, Derived Worktrees, and the managed Worktree or Main Git & Changes view are connected.
|
|
16
|
+
> Baseline synchronization creates an Agent task Session with your selected Rebase or Merge strategy.
|
|
18
17
|
|
|
19
18
|
## Installation
|
|
20
19
|
|
|
21
20
|
After installing into a running DSH instance, restart DSH Desktop, or restart the DSH Web
|
|
22
|
-
server and refresh the page,
|
|
21
|
+
server and refresh the page, if the plugin Host has not loaded. Finish
|
|
23
22
|
active tasks before restarting. If the Client loads while the Host is still unavailable, a
|
|
24
23
|
native toast reminds you once per Client load. If a Worktree Session permission check reports
|
|
25
24
|
that **Worktree Full Access** is unavailable and falls back to `workspace-write`, a separate
|
|
@@ -29,6 +28,13 @@ Workspace errors, unverified permissions, and explicit user restrictions do not
|
|
|
29
28
|
missing-preset reminder. The reminder does not reload services or grant Full Access; if the
|
|
30
29
|
preset remains unavailable after restarting, check the DSH plugin and permission configuration.
|
|
31
30
|
|
|
31
|
+
Once the Host is available, a missing named preset alone no longer requires a restart on
|
|
32
|
+
supported DSH profiles. The existing Full Access confirmation still requires acknowledgement;
|
|
33
|
+
after confirmation, Worktree applies and verifies native per-Session file access and `ask`
|
|
34
|
+
approval. The native menu may display **Custom** until the named preset loads. This changes
|
|
35
|
+
neither the native preset catalog nor its defaults or Auto review integration. Unsupported
|
|
36
|
+
profiles retain the fallback/recovery guidance above.
|
|
37
|
+
|
|
32
38
|
### Install from npm
|
|
33
39
|
|
|
34
40
|
With an installed DSH CLI:
|
|
@@ -60,6 +66,17 @@ pnpm dsh web
|
|
|
60
66
|
The DSH Web profile must be able to start before this plugin is added. Re-run the absolute-path
|
|
61
67
|
install command after changing `package.json` or `cordis.patch.yml`.
|
|
62
68
|
|
|
69
|
+
For Desktop, fully quit DeepSeek Harness after active tasks finish, then use the installed DSH CLI:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
dsh plugin --profile desktop add /absolute/path/to/clutch-dsh/packages/clutch-dsh-worktree
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Reopen Desktop after installation. Keep the local checkout and its installed `node_modules`
|
|
76
|
+
available while it is linked; copying only `lib/` or removing the checkout's dependencies can
|
|
77
|
+
cause the Host and permission-preset entries to fail to import. Client implementation dependencies
|
|
78
|
+
are bundled during the build, so Desktop does not need separate Zustand or Immer modules.
|
|
79
|
+
|
|
63
80
|
### Install from GitHub source (optional)
|
|
64
81
|
|
|
65
82
|
The package also supports the source dependency form used by the DSH plugin market:
|
|
@@ -76,8 +93,10 @@ development details, see [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md).
|
|
|
76
93
|
| Feature | Preview | What it does |
|
|
77
94
|
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
78
95
|
| **Worktree navigation** | <img src="assets/screenshots/screenshots-en.png" width="420" alt="DSH Worktree navigation with Workspace, Main, Worktree, and Session rows"> | Adds a Worktree mode to the native DSH Sidebar. On macOS desktop, the panel shares DSH's native glass material without a second background layer or duplicate navigation showing through. Other platforms retain the theme fill; reduced transparency uses a stronger fill. Workspace expansion and new Session rows use native-style fades and movement. Browse each Workspace through Local/Main and Git Worktree rows, then open the Sessions bound to each row. |
|
|
79
|
-
| **Create and import Worktrees** | <img src="assets/screenshots/screenshots-import.png" width="420" alt="Worktree create and import dialog"> | Create a Worktree from a local branch, or register an existing branch-attached Worktree in place. Import does not move, copy, or edit the existing directory. |
|
|
80
|
-
| **Worktree Dashboard** | <img src="assets/screenshots/screenshots-dashboard.png" width="420" alt="Worktree Dashboard preview with Sessions and Worktree actions"> | The preview Dashboard shows Worktree identity, path, Sessions, Worktree/Main instructions, connected actions, the host-provided Open In action, and the read-only Git & Changes view for managed Worktrees or Main. Derived Worktrees and
|
|
96
|
+
| **Create and import Worktrees** | <img src="assets/screenshots/screenshots-import.png" width="420" alt="Worktree create and import dialog"> | Create a Worktree from a local or fetched remote branch, or register an existing branch-attached Worktree in place. Import does not move, copy, or edit the existing directory. |
|
|
97
|
+
| **Worktree Dashboard** | <img src="assets/screenshots/screenshots-dashboard.png" width="420" alt="Worktree Dashboard preview with Sessions and Worktree actions"> | The preview Dashboard shows Worktree identity, path, Sessions, Worktree/Main instructions, connected actions, the host-provided Open In action, and the read-only Git & Changes view for managed Worktrees or Main. Derived Worktrees lists direct saved-baseline matches with paths, availability, and Dashboard navigation. Sync with Base creates an Agent task Session using Rebase or Merge baseline. |
|
|
98
|
+
| **Baseline synchronization** | <img src="assets/screenshots/screenshots-baseline-sync.png" width="420" alt="Sync with Base dialog with Rebase and Merge baseline choices"> | Choose Rebase or Merge baseline and create a native Agent task Session in the current Worktree. |
|
|
99
|
+
| **Agent steer feedback** | <img src="assets/screenshots/screenshots-agent-steer.jpg" width="420" alt="Agent steer receipt above the input box, with sender and content"> | Inspect pending and received steer messages in the recipient Session without treating receipt as task completion. |
|
|
81
100
|
| **Agent tool settings (Experimental)** | <img src="assets/screenshots/screenshots-worktree-tool.png" width="420" alt="Worktree tool settings preview"> | Choose capabilities for `/cluworktree` in General, and independently configure automatic injection in Local/Main and managed Worktree Dashboards. Delegated Sessions receive result reporting only by default. |
|
|
82
101
|
|
|
83
102
|
## Usage
|
|
@@ -117,11 +136,51 @@ New Worktree actions use the same branch icon as Worktree rows. The Workspace ro
|
|
|
117
136
|
on hover, keyboard focus, or while its options menu is open, matching the menu button.
|
|
118
137
|
|
|
119
138
|
1. Open the options menu for Local/Main or an active Worktree and choose **Create Worktree**.
|
|
120
|
-
2. Choose
|
|
139
|
+
2. Choose a local or fetched remote base branch and a new local branch name. The dialog suggests an available name.
|
|
121
140
|
3. Confirm the dialog. The plugin creates the Git Worktree, records its acquisition facts, and
|
|
122
141
|
continues through the normal Session and binding flow when you open a Session from that Worktree.
|
|
123
142
|
|
|
124
|
-
|
|
143
|
+
The Create and Import tabs share aligned, full-width controls and consistent spacing between fields.
|
|
144
|
+
|
|
145
|
+
Creation, saved baselines, and Git comparison use the same searchable selector, grouped into **Local branches**
|
|
146
|
+
and **Remote branches**, with current/checked-out markers and filters for all, local, or remote branches.
|
|
147
|
+
Dropdowns use DSH’s native menu material in light and dark themes.
|
|
148
|
+
Dropdown lists are compact and prefer opening below the field, shrinking to available space with internal scrolling;
|
|
149
|
+
they open above only when there is too little useful space below.
|
|
150
|
+
Search ignores case; use Arrow Up/Down to move, Enter to choose, and Escape to close. Clicking within the dropdown keeps it open, including headings,
|
|
151
|
+
empty space, search, filters, and fetch controls; selecting an option or clicking outside closes it.
|
|
152
|
+
Branch and import selectors open immediately while candidates load, show a loading indicator inside,
|
|
153
|
+
and update in place when data arrives. Search and filters stay intact; refreshes keep existing rows visible.
|
|
154
|
+
Closing and reopening the baseline editor discards pending results from the previous dialog.
|
|
155
|
+
Only the latest branch read or Fetch can update its candidates and loading state.
|
|
156
|
+
Even with cached candidates, the dropdown paints its compact loading shell before preparing the list.
|
|
157
|
+
The initial shell and loading state keep the same height; ready results size to their content within the scrolling limit.
|
|
158
|
+
Large lists render only rows near the viewport; search, filters, and keyboard selection still cover every candidate.
|
|
159
|
+
Switching between **Create** and **Import** replaces the form content in the same dialog without replaying its opening animation.
|
|
160
|
+
Opening any branch selector rereads local Git refs, including changes made in a terminal. Returning to
|
|
161
|
+
the browser does not reload candidates. Fetch reads the updated list once and supplies it directly to the selector.
|
|
162
|
+
Opening the New Worktree dialog does not preload branches; its default comes from the current branch or HEAD.
|
|
163
|
+
The full branch list is loaded only when a picker opens or Fetch completes. Workspace navigation
|
|
164
|
+
reads Git readiness and the current root-checkout branch separately; entering Git & Changes loads history without preloading branches.
|
|
165
|
+
The current local branch is preferred by default. Remote refs are read
|
|
166
|
+
from the local repository. Use the download-arrow button beside **Remote branches** to fetch all configured
|
|
167
|
+
remotes, including when the remote list is empty. Fetch updates remote branch refs and refreshes this Workspace;
|
|
168
|
+
it preserves your current selection, local branches, tags and working files, and does not prune deleted refs.
|
|
169
|
+
The button shows a loading icon during fetch, then displays **Remote branches updated** in place for two
|
|
170
|
+
seconds before restoring the download icon. Failures retain the list and show a retry on the same button;
|
|
171
|
+
the button details retain the error code, message, and diagnostics, also available in **Errors & Repair**.
|
|
172
|
+
no extra status row is added beneath the list.
|
|
173
|
+
Listing branches never contacts a remote automatically.
|
|
174
|
+
Remote baselines require a new local branch when creating a Worktree; its short name may match the remote baseline
|
|
175
|
+
when that local branch does not exist. Symbolic remote HEAD entries are excluded.
|
|
176
|
+
|
|
177
|
+
Git must have a usable repository and initial commit. Choose a local branch, or choose **HEAD** to
|
|
178
|
+
create a new branch from Main's current checkout, including an exact Tag or detached Commit.
|
|
179
|
+
The localized HEAD option includes the current reference name, for example **HEAD (v1.0.0)**.
|
|
180
|
+
Creation uses the commit shown when selected. If HEAD changes before submission, creation is rejected
|
|
181
|
+
with `WORKTREE_STATE_CONFLICT`; refresh the dialog and select the source again.
|
|
182
|
+
Main displays the current branch, exact Tag, or short Commit and retains its creation action when detached.
|
|
183
|
+
If setup is incomplete, DSH
|
|
125
184
|
shows the relevant readiness message and copyable setup guidance.
|
|
126
185
|
|
|
127
186
|
When the Workspace is a repository subdirectory, its Worktrees preserve that relative directory.
|
|
@@ -134,8 +193,8 @@ Already-bound Sessions with a legacy Git-root cwd remain usable after a subdirec
|
|
|
134
193
|
including automatic tool injection, Session discovery, follow-ups, result reports and default
|
|
135
194
|
Worktree creation from their own checkout's HEAD. Their original cwd and history remain unchanged;
|
|
136
195
|
new Session bindings still require the Workspace directory inside the checkout. Git file previews use
|
|
137
|
-
relative addresses inside the
|
|
138
|
-
|
|
196
|
+
relative addresses inside the target Session cwd. Files outside that cwd show a prompt to use an IDE
|
|
197
|
+
or a Session at the repository root; already-bound Git-root Sessions keep their original preview scope.
|
|
139
198
|
|
|
140
199
|
### Enable Agent Worktree tools
|
|
141
200
|
|
|
@@ -175,8 +234,8 @@ The six selectable capabilities correspond to these tools:
|
|
|
175
234
|
|
|
176
235
|
| Tool | Parameters | Behavior |
|
|
177
236
|
| ----------------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
178
|
-
| `clutch_new_worktree` | `name`, optional `baseBranch`, `instructions` | Creates a new branch
|
|
179
|
-
| `clutch_list_worktrees` | optional `workspaceId` | Lists managed Worktree ids, branches, paths, lifecycle and health, plus available local base branches. Defaults to the calling Workspace. |
|
|
237
|
+
| `clutch_new_worktree` | `name`, optional `baseBranch`, `instructions` | Creates a new branch at the calling Session's committed Worktree HEAD; Local/Main captures root HEAD, including detached HEAD. An explicit local or fetched remote `baseBranch` overrides this. Returns the acquisition `baseBranch` and `baseCommit`. |
|
|
238
|
+
| `clutch_list_worktrees` | optional `workspaceId` | Lists managed Worktree ids, branches, paths, lifecycle and health, plus available local and fetched remote base branches. Defaults to the calling Workspace. |
|
|
180
239
|
| `clutch_span_worktree` | `worktreeId` or legacy `name`, `prompt`, optional `model`, `title` | Creates a fresh native Session, binds it, configures its initial model and submits the prompt. Returns its `sessionId` and admission status. |
|
|
181
240
|
| `clutch_list_models` | optional `provider` | Lists native provider/model routes, reasoning efforts and provider failures, alongside the current Session model and deployment default. |
|
|
182
241
|
| `clutch_list_sessions` | optional `workspaceId`, `worktreeId` | Finds existing Sessions, binding state, status and title. Unavailable relations return a diagnostic without reading their history. |
|
|
@@ -189,16 +248,33 @@ within the calling Workspace; prefer stable `worktreeId` for dispatch. Creating
|
|
|
189
248
|
Only committed state is inherited; staged, unstaged and untracked files are not copied.
|
|
190
249
|
An unhealthy binding never silently falls back to Main. The default captures the calling checkout's
|
|
191
250
|
committed HEAD, including a detached root HEAD. Detached sources return `baseCommit` without inventing
|
|
192
|
-
a `baseBranch`; an explicit local `baseBranch` remains available as an override.
|
|
251
|
+
a `baseBranch`; an explicit local or fetched remote `baseBranch` remains available as an override.
|
|
193
252
|
|
|
194
253
|
Newly delegated Sessions automatically receive only
|
|
195
254
|
`clutch_report_result({ status, summary, evidence?, requestId? })`. The Host fixes the destination
|
|
196
255
|
to the delegating Session. `status` is `completed`, `blocked`, or `failed`; `summary` and `evidence`
|
|
197
256
|
are each limited to 2,000 characters. The other six capabilities require `/cluworktree` or the
|
|
198
|
-
Worktree's explicit automatic-injection selection. Reports arrive as
|
|
257
|
+
Worktree's explicit automatic-injection selection. Reports arrive as queued native Agent relays, not human messages;
|
|
199
258
|
verify their claims and evidence before accepting completion. Reports are model-driven:
|
|
200
259
|
a crash, stopped Agent or unanswered human approval may prevent reporting. `idle` is not success.
|
|
201
260
|
|
|
261
|
+
Agent-originated task dispatch, continuation and reporting record native `agent-message` /
|
|
262
|
+
`relay` provenance with the actual sending Session. The Host derives that identity; tool inputs
|
|
263
|
+
cannot impersonate another sender. Model-visible content includes an Agent-source envelope while
|
|
264
|
+
preserving the supplied prompt body. Supported native Chat renders a relay/context disclosure with
|
|
265
|
+
the sending Session, or an Agent turn trigger when it wakes the recipient, rather than a human
|
|
266
|
+
message bubble. Protocol-level `user` role does not make it human input or elevate its authority.
|
|
267
|
+
Human prompts and user-originated Dashboard synchronization keep their existing native user route.
|
|
268
|
+
Old history is not rewritten or reclassified by guessing from text.
|
|
269
|
+
|
|
270
|
+
Agent steer messages sent by this plugin also appear in an **Agent steer** strip above the
|
|
271
|
+
recipient's input box. Expand an entry to see its sender and content. The strip distinguishes
|
|
272
|
+
waiting, preparation, entry into conversation context, cancellation, and unconfirmed status;
|
|
273
|
+
receipt does not mean task completion. Up to eight recent received/canceled entries remain
|
|
274
|
+
after the turn ends and clear when a new turn starts; pending entries remain visible.
|
|
275
|
+
Ordinary queued messages stay in the native queue. History outside the loaded window may
|
|
276
|
+
not have enough evidence to reconstruct a steer receipt.
|
|
277
|
+
|
|
202
278
|
Reporting is limited to the active delegated task. One successfully admitted `completed`, `blocked`,
|
|
203
279
|
or `failed` report consumes and clears its in-memory token. The reporting tool, SDK and guidance
|
|
204
280
|
stay stable; calls without a token are rejected. Later user input clears any remaining token;
|
|
@@ -228,7 +304,34 @@ history returns one `unavailable` diagnostic while keeping healthy list entries
|
|
|
228
304
|
|
|
229
305
|
In PTC mode, the generated SDK exposes concrete argument types, including required report
|
|
230
306
|
`status` and `summary`. Length limits remain in field descriptions and are enforced at execution;
|
|
231
|
-
|
|
307
|
+
all tool inputs use closed object roots without unions, including the nested model object.
|
|
308
|
+
Dispatch keeps legacy exact branch names, but requires exactly one nonempty target at runtime;
|
|
309
|
+
invalid targets or unknown fields fail before Session creation. Optional fields accept omission or
|
|
310
|
+
`null` as omission, including model.reasoningEffort and mode (default queue); required fields still
|
|
311
|
+
reject null. Blank identities/title/evidence are not defaults; empty instructions mean no save.
|
|
312
|
+
For defaults, omit optional keys or use JSON `null`; neither `""`, `"null"`, nor a model
|
|
313
|
+
object with empty provider/model fields means inheritance. New messages and first reports
|
|
314
|
+
must omit `requestId` or use JSON `null`: the Host generates it. A rejected first report
|
|
315
|
+
with an invented id explains how to correct it without consuming the report token.
|
|
316
|
+
After uncertain admission, preserve the returned id and identical content for retry.
|
|
317
|
+
|
|
318
|
+
Native schemas keep genuinely optional fields. For routes that otherwise generate empty optional
|
|
319
|
+
values, opt in by exact provider id in the Host configuration:
|
|
320
|
+
|
|
321
|
+
```yaml
|
|
322
|
+
- id: clutch-dsh-worktree-host
|
|
323
|
+
config:
|
|
324
|
+
dshHome: !!js dshHomePath()
|
|
325
|
+
nullableToolProviders: [ocx]
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
This defaults to an empty list. For these providers, plugin tools in native model requests use
|
|
329
|
+
required properties with nullable optional values and closed nested objects, retaining length bounds.
|
|
330
|
+
A first report accepts only null for its wire requestId; an uncertain attempt restores the retry id
|
|
331
|
+
field. The native catalog, PTC SDK, other plugins and execution validation keep their existing contracts.
|
|
332
|
+
This does not enable a provider's strict mode or promise support across gateways. The local DSH pi-ai
|
|
333
|
+
adapter and a real ocx/Luna route have been checked; other routes need their own verification. See the
|
|
334
|
+
[tool schema standard](docs/TOOL-SCHEMA-STANDARD.md) for official sources, tested layers and limits.
|
|
232
335
|
|
|
233
336
|
`model` is `{ provider, model, reasoningEffort? }`. Omission inherits the calling Session's
|
|
234
337
|
effective selection, including reasoning effort; no catalog lookup is required for that default.
|
|
@@ -264,13 +367,13 @@ a resumed Session can enable `/cluworktree` and use `clutch_send_message` with a
|
|
|
264
367
|
### Import an existing Worktree
|
|
265
368
|
|
|
266
369
|
1. Select a Workspace, open its branch-icon **New Worktree** action, and switch to **Import**.
|
|
267
|
-
2.
|
|
370
|
+
2. Open the searchable Worktree selector and filter by branch name or path. Each candidate shows its branch and directory; choose the Worktree to import.
|
|
268
371
|
3. Select **Import Worktree**. The plugin registers the existing directory without moving,
|
|
269
372
|
copying, or changing its files, then uses the same Session flow as a created Worktree.
|
|
270
373
|
|
|
271
374
|
The first version lists only ready, branch-attached, non-root Git Worktrees that are not already
|
|
272
375
|
managed by the plugin. Detached, bare, prunable, missing, and invalid entries are omitted. Imported
|
|
273
|
-
Worktrees can still use Git & Changes after you choose a local baseline branch.
|
|
376
|
+
Worktrees can still use Git & Changes after you choose a local or fetched remote baseline branch.
|
|
274
377
|
|
|
275
378
|
Import uses the same Workspace-relative directory rule and offers only candidates where that
|
|
276
379
|
directory is available. Existing records are projected with the corrected path when the original
|
|
@@ -314,10 +417,46 @@ Use **Back to session**, Escape, a Sidebar Session, or Worktree mode exit to clo
|
|
|
314
417
|
Sessions, the top-right action becomes **New Session** and starts one in that Worktree. The connected MVP surface
|
|
315
418
|
can show Overview and Sessions, create a Session or Worktree, archive a Worktree, edit instructions, copy a
|
|
316
419
|
path, open the recorded directory in VS Code, and inspect Git & Changes.
|
|
317
|
-
|
|
420
|
+
Quick Actions offers baseline synchronization and archive. VS Code must be
|
|
318
421
|
installed on the browser's machine and able to access the recorded path; the link does not verify
|
|
319
422
|
launch success.
|
|
320
423
|
|
|
424
|
+
**Derived Worktrees** shows managed Worktrees in the same Workspace whose saved baseline matches
|
|
425
|
+
this checkout's current local branch. Overview previews five entries; the tab shows all matches,
|
|
426
|
+
including archived entries with their availability and paths. Click an entry to open its Dashboard.
|
|
427
|
+
Changing a saved baseline updates the relationship; this view represents direct baseline matches,
|
|
428
|
+
not Git ancestry or delegated Session history. Local branch names and `refs/heads/` refs match;
|
|
429
|
+
explicit remote refs do not. Detached HEAD or an unknown Main branch has no matches. When a
|
|
430
|
+
managed checkout's current branch is unavailable, its recorded branch is used.
|
|
431
|
+
In a derived Worktree's Dashboard header, click the **Base** branch to open the matching
|
|
432
|
+
Worktree or Local/Main Dashboard. The edit button remains separate. A link appears only
|
|
433
|
+
when exactly one checkout in this Workspace matches; remote, missing, and ambiguous bases
|
|
434
|
+
remain plain text. The link follows the saved baseline when you edit it.
|
|
435
|
+
|
|
436
|
+
**Sync with Base** opens a dialog with **Rebase** and **Merge baseline**. Confirming creates and
|
|
437
|
+
opens a fresh native task Session in the current managed Worktree. Escape closes only this dialog;
|
|
438
|
+
while task admission is pending, Escape closes neither the dialog nor the Dashboard. The Session uses
|
|
439
|
+
the configured default model and normal native permissions. The saved local or fetched remote baseline is used, and the
|
|
440
|
+
Host rejects stale, missing, ambiguous or unhealthy targets before creating a Session. A baseline saved
|
|
441
|
+
while branch enumeration is pending invalidates the old request with `WORKTREE_STATE_CONFLICT`;
|
|
442
|
+
reopen the dialog to use the new baseline. Baseline saves wait for any final task admission already
|
|
443
|
+
in progress for that Worktree. Local/Main
|
|
444
|
+
has no synchronization task. The Agent checks for a clean working tree and stops on conflicts;
|
|
445
|
+
Rebase rewrites the current branch's commits. Admission means the task started, not that Git finished.
|
|
446
|
+
Inspect the Session's result before starting further work. Partial creation preserves the Session
|
|
447
|
+
and offers **Open created Session**; retrying a failed transport request reuses its admission identity
|
|
448
|
+
within the current Host lifetime. Binding, model, title, reporting, and task-submission failures also
|
|
449
|
+
show a toast and a localized problem and recovery entry in **Errors & recovery**, including the
|
|
450
|
+
created Session identity. Recovery opens that Session without creating or dispatching another task.
|
|
451
|
+
Closing the Dashboard preserves diagnostic history and revokes its recovery callbacks.
|
|
452
|
+
Partial failures arriving after closing the Dashboard or changing its target or baseline also
|
|
453
|
+
retain the created Session identity in inactive history, without navigating away from the current view.
|
|
454
|
+
Task creation supports plain-HTTP LAN browser access as well as localhost and HTTPS.
|
|
455
|
+
Plugin restart clears admission memory. No automatic push or publish
|
|
456
|
+
is performed. Terminal, Git Diff, Pull Request and Run Tests placeholders have been removed.
|
|
457
|
+
After reconnecting, replayed synchronization notifications refresh the affected Workspace and
|
|
458
|
+
current context while keeping ready content visible; unrelated Workspaces retain their views.
|
|
459
|
+
|
|
321
460
|
### Open the recorded directory in an app
|
|
322
461
|
|
|
323
462
|
The Dashboard **Open in ...** split button is plugin UI backed by DSH's official Host routes:
|
|
@@ -336,18 +475,22 @@ existing VS Code protocol-link fallback.
|
|
|
336
475
|
|
|
337
476
|
Open the **Git & Changes** tab from a managed Worktree or Main Dashboard. Main reads the current Workspace-root
|
|
338
477
|
commit history directly and prepends an **Uncommitted changes** entry when the root has tracked, staged, unstaged, or
|
|
339
|
-
untracked changes.
|
|
478
|
+
untracked changes. Its baseline selector defaults to **None**, showing HEAD history without a total commit count.
|
|
479
|
+
Choose a local or fetched remote comparison branch to show Baseline summary, the full comparison commit count,
|
|
480
|
+
and ahead/behind facts. Selecting **None** returns to direct history. These choices stay in page memory.
|
|
481
|
+
Direct history selects the first visible target and uses the same
|
|
340
482
|
changed-file and diff panes for either a live working-tree target or a committed history entry. For a managed Worktree with a
|
|
341
483
|
persisted `baseBranch` that differs from the current branch, or with a captured acquisition commit that
|
|
342
484
|
supplies the implicit baseline, the Overview performs one compact, on-demand Git status read through the
|
|
343
485
|
existing `/api` Connection. It shows ahead/behind commit counts plus separate
|
|
344
486
|
committed (baseline-to-HEAD) and uncommitted (live working-tree) line totals; this is an ephemeral
|
|
345
|
-
projection, not a watcher or a Worktree-record field. Main
|
|
487
|
+
projection, not a watcher or a Worktree-record field. Local/Main's comparison is a transient Git-tab choice, so Overview remains
|
|
346
488
|
**Not connected** for ahead/behind facts while its Git tab still exposes Main history. Unavailable or baseline-unselected
|
|
347
|
-
managed views honestly remain **Not connected**. Opening Overview does not load the branch list; the
|
|
348
|
-
|
|
489
|
+
managed views honestly remain **Not connected**. Opening Overview does not load the branch list; mounting the Git tab
|
|
490
|
+
reads history against the saved branch or captured acquisition commit. Branch candidates load only when a
|
|
491
|
+
selector opens; Fetch supplies its returned candidates directly. To replace that baseline, click the pencil icon beside the Base fact to open the branch
|
|
349
492
|
picker: its search field sits permanently above a bounded branch list that shows roughly seven rows and
|
|
350
|
-
scrolls internally, so the dialog keeps one size while you filter. Choose any local branch except the
|
|
493
|
+
scrolls internally, so the dialog keeps one size while you filter. Choose any local or fetched remote branch except the
|
|
351
494
|
current Worktree branch and save.
|
|
352
495
|
The save replaces the persisted `baseBranch` in the plugin sidecar; the saved value becomes the default for
|
|
353
496
|
the Git selector. Once the Git tab is open, changing its selector remains a transient view choice and reloads
|
|
@@ -356,19 +499,22 @@ history, changed files, and diffs without another Worktree-record write. If no u
|
|
|
356
499
|
immutable captured acquisition commit and show that resolved commit as the Base fact; only a Worktree with
|
|
357
500
|
neither a usable saved baseline nor a captured commit stays baseline-unselected and prompts you to choose
|
|
358
501
|
one. When the selected branch has diverged, Git resolves the two heads' common ancestor. The
|
|
359
|
-
Git & Changes view reports Worktree commits after that ancestor as
|
|
360
|
-
as
|
|
502
|
+
Git & Changes view reports Worktree commits after that ancestor as `↑ N` ahead and base-branch commits after it
|
|
503
|
+
as `↓ N` behind; history and file reads remain available. If the two heads have no common ancestor, the
|
|
361
504
|
committed summary falls back to the full tree diff between the base branch tip and Worktree `HEAD`, while
|
|
362
505
|
history uses the Worktree commits not reachable from that base tip.
|
|
363
506
|
With a valid managed Worktree baseline loaded, the Git & Changes tab initially selects **Baseline summary** rather than the
|
|
364
507
|
first commit; changing the baseline branch also returns to that summary. Choose a commit or **Uncommitted
|
|
365
|
-
changes** when you need a narrower target. Main skips this comparison-only summary but presents the same committed history and multi-commit selection behavior, plus a live working-tree target when the
|
|
508
|
+
changes** when you need a narrower target. Local/Main with **None** skips this comparison-only summary but presents the same committed history and multi-commit selection behavior, plus a live working-tree target when the
|
|
366
509
|
Workspace root has changes. Selecting **Uncommitted changes** compares the current Workspace root with `HEAD`; it does not
|
|
367
510
|
create a baseline or write any Git state.
|
|
368
511
|
|
|
369
|
-
The selected local branch is resolved again for each read.
|
|
370
|
-
|
|
371
|
-
|
|
512
|
+
The selected local or fetched remote branch is resolved again for each read. Selectors display short names and
|
|
513
|
+
use the enumerated `refs/heads/...` or `refs/remotes/...` as stable identities. New remote baseline saves retain
|
|
514
|
+
the exact remote ref, so adding or removing a same-named local branch cannot change the baseline.
|
|
515
|
+
Legacy short names are accepted only when unambiguous; an ambiguous saved value reports
|
|
516
|
+
`WORKTREE_STATE_CONFLICT` and requires selecting the intended branch again. Raw commit SHAs, tags, and
|
|
517
|
+
arbitrary revision expressions remain rejected. A selected exact branch that no longer exists shows the honest unavailable state instead of a
|
|
372
518
|
generic Git failure. `baseCommit` is immutable acquisition metadata, is never user-selectable directly, and
|
|
373
519
|
is the implicit baseline whenever no saved branch baseline is usable; creation recovery never overwrites
|
|
374
520
|
it. When a managed Worktree or Main Workspace root has staged, unstaged, or untracked files, the list prepends an
|
|
@@ -382,18 +528,32 @@ one net diff from the same comparison boundary to the current working tree, incl
|
|
|
382
528
|
unstaged, untracked, deleted, and renamed changes. This is a
|
|
383
529
|
fresh on-demand projection rather than a concatenation of two diffs. Clicking a commit shows that
|
|
384
530
|
commit's own diff. For managed Worktrees and Main, turn on **Multi-select commits** in the commits header to pick several committed rows
|
|
385
|
-
and view the exact union of their first-parent deltas; Main has no baseline-summary or working-tree-inclusion controls, and the switch is off by default; turning it off
|
|
531
|
+
and view the exact union of their first-parent deltas; Local/Main with **None** has no baseline-summary or working-tree-inclusion controls, and the switch is off by default; turning it off
|
|
386
532
|
collapses the selection back to the focused commit. The changed-file list
|
|
387
533
|
records the contributing commits, and each selected commit is rendered as its own diff segment; this is
|
|
388
534
|
not an implicit range and does not include unselected commits. The changed-files column header shows the
|
|
389
535
|
aggregate green `+N` and red `-N` totals for the current target, including the Baseline summary, selected
|
|
390
536
|
commits, or Uncommitted changes; binary-only totals show Unknown. The working-tree entry remains mutually
|
|
391
|
-
exclusive with committed multi-selection.
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
537
|
+
exclusive with committed multi-selection. **Open in Sidebar** is available in the diff toolbar and on
|
|
538
|
+
existing changed-file rows. It uses the current Session when it belongs to the Dashboard group,
|
|
539
|
+
otherwise the group's first visible Session, and explicitly expands the native right sidebar.
|
|
540
|
+
With no target Session it prompts you to create one; the Overview's empty Session card includes **New Session**.
|
|
541
|
+
File-tree paths, Diff titles and file requests are relative to the Workspace directory, for both Main and
|
|
542
|
+
managed Worktrees. At `/repo/packages/app`, `src/index.ts` names `/repo/packages/app/src/index.ts`;
|
|
543
|
+
repository-root `README.md` appears as `../../README.md`. The view retains changes across the checkout.
|
|
544
|
+
Files outside the target Session cwd show a prompt instead of an invalid resource address.
|
|
545
|
+
|
|
546
|
+
Main shows a local checkout status and omits derived Worktree creation-time and baseline facts.
|
|
547
|
+
Ahead/Behind uses neutral commit counts (`↑ N` / `↓ N`), while added/deleted code lines keep their green/red counts.
|
|
548
|
+
The sticky top bar truncates long references on one line, and only the reference text copies to the clipboard.
|
|
549
|
+
|
|
550
|
+
Managed Worktree and Local/Main history load the newest 50 commits first. Scrolling to the bottom appends
|
|
551
|
+
the next 50 without replacing the current selection or diff; the load-more button also supports keyboard use.
|
|
552
|
+
Comparison views show the full committed total from ahead counts, independent of loaded pages.
|
|
553
|
+
If HEAD or the baseline moves between pages, refresh before continuing; existing rows remain visible.
|
|
554
|
+
The load-more button becomes **Refresh** after this conflict. Commit file and Diff reads also require
|
|
555
|
+
a stable HEAD throughout authorization and reading.
|
|
556
|
+
Multi-selection supports up to 200 selected commits. A changed-file list larger
|
|
397
557
|
than the Git adapter's output bound reports an explicit truncated state instead of a generic error.
|
|
398
558
|
Commit details use
|
|
399
559
|
first-parent comparisons; root commits compare against the empty tree; rename and copy rows retain
|
|
@@ -419,7 +579,7 @@ and refresh behavior remains unchanged.
|
|
|
419
579
|
|
|
420
580
|
The view is read-only and does not provide commit or staging controls. For managed Worktrees, the plugin validates committed
|
|
421
581
|
entries against the selected branch-to-`HEAD` projection and re-reads working-tree paths against a fresh status projection;
|
|
422
|
-
Main validates committed entries against
|
|
582
|
+
Local/Main validates committed entries against HEAD reachability, excluding baseline ancestors when comparing. These endpoints are not generic Git object or file readers. Refresh keeps ready
|
|
423
583
|
content visible while replacement data loads, and late responses for an older commit or file selection
|
|
424
584
|
are ignored.
|
|
425
585
|
|
|
@@ -480,7 +640,7 @@ text, actions and diagnostic details follow the font size selected in **Settings
|
|
|
480
640
|
messages, prompts, transcripts, and history. The plugin never copies or rewrites those values.
|
|
481
641
|
- The plugin's external index stores Worktree paths, branches, sources, lifecycle state, bindings,
|
|
482
642
|
ordering, instructions, acquisition facts, and related metadata. For managed Worktrees, the
|
|
483
|
-
Dashboard Base fact is the persisted `baseBranch`; users can replace it with a local branch other
|
|
643
|
+
Dashboard Base fact is the persisted `baseBranch`; users can replace it with a local or fetched remote branch other
|
|
484
644
|
than the current Worktree branch, and the saved value becomes the Git-tab selector default. The
|
|
485
645
|
immutable acquisition `baseCommit` remains separate and is not rewritten by that edit. The index is
|
|
486
646
|
kept in the DSH host plugin data directory, not in a project directory or DSH's raw data store. It
|
|
@@ -507,7 +667,7 @@ text, actions and diagnostic details follow the font size selected in **Settings
|
|
|
507
667
|
(optionally including one fresh baseline-to-working-tree projection), one **Uncommitted changes**
|
|
508
668
|
snapshot, changed files, and one unified diff at a time. These projections combine staged, unstaged,
|
|
509
669
|
and untracked files when requested but are never written back to Git. The Dashboard does not provide
|
|
510
|
-
commit, staging, reset, revert, cherry-pick,
|
|
670
|
+
commit, staging, reset, revert, cherry-pick, push, pull, pull requests, graph lanes,
|
|
511
671
|
or syntax highlighting.
|
|
512
672
|
- Session rows and Dashboard cards use DSH's native status and relative-time presentation. The green
|
|
513
673
|
completion dot is DSH's unread reminder for a Session that stops outside the current main view;
|
|
@@ -523,11 +683,16 @@ text, actions and diagnostic details follow the font size selected in **Settings
|
|
|
523
683
|
- Active Worktree Sessions may request the named `worktree-full-access` preset after an explicit
|
|
524
684
|
confirmation. The plugin appends this preset while preserving DSH's existing presets, default
|
|
525
685
|
selection, and official Auto review integration. It combines DSH `danger-full-access` with `ask`,
|
|
526
|
-
keeps approval prompts enabled, and does not change network or process policy. If
|
|
686
|
+
keeps approval prompts enabled, and does not change network or process policy. If neither the preset nor native Session policy writes are available, the plugin falls back to
|
|
527
687
|
`workspace-write + ask` when possible or reports an unverified, retryable state. Permission
|
|
528
688
|
services may mount late or be replaced: retry uses the currently available capabilities without
|
|
529
689
|
restarting the Worktree Host. A temporarily missing service never grants Full Access, and an
|
|
530
690
|
explicit user restriction is preserved. It cannot exceed the sandbox imposed by the host running DSH.
|
|
691
|
+
- If the named preset is missing but native Session policy services are available, the same
|
|
692
|
+
confirmation applies `danger-full-access + ask` through native permission events instead.
|
|
693
|
+
Both effective values are verified before success is reported; the native menu may show
|
|
694
|
+
**Custom**. No synthetic preset identity is stored. Duplicate pending confirmations for the
|
|
695
|
+
same Workspace, Worktree, Session and path share one dialog; different targets remain separate.
|
|
531
696
|
- Session-to-Worktree bindings and permission checks compare physical filesystem identity on the Host (`stat`/`realpath`) rather than relying on lexical path equality. This ensures robust compatibility across Windows and macOS path variations (including drive-letter casing, forward/backward slashes, UNC paths, and extended-length prefixes like `\\?\\`). On Windows, sidecar atomic persistence uses file-handle synchronization with best-effort directory sync, and Git CLI integration cleanly handles `NUL` null-device paths and CRLF line endings.
|
|
532
697
|
- Git must be installed and available on `PATH`. A missing Git executable shows install guidance
|
|
533
698
|
and no command block; the plugin does not run setup or installation commands.
|