dsh-acp-replay 0.1.2 → 0.1.3
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 +36 -9
- package/cordis.patch.yml +15 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A community ACP bridge for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) that answers `session/load`, so a client can rebuild a session transcript after its own restart.
|
|
4
4
|
|
|
5
|
-
**Status: prototype.** It works end to end on `dsh 0.1.5-rc.1
|
|
5
|
+
**Status: prototype.** It works end to end on `dsh 0.1.5-rc.1`, `0.1.5-rc.3`, and `0.1.7-rc.2`, but it is a vendored fork of `@deepseek-ai/dsh-acp` and needs a rebase whenever that package changes. No harness version probed here advertises `loadSession` itself, so the bridge is still the only path to a rebuilt transcript; a field report of `0.1.6-alpha.1` answering nothing did not reproduce on the `0.1.7` release candidate.
|
|
6
6
|
|
|
7
7
|
Published on npm as `dsh-acp-replay`. Its version is independent of the harness version it targets, which `peerDependencies` states. `0.1.2` ships `test/*.mjs` and exposes the self-check and the pin check as bins, so both run from an installed copy. (`0.1.5-rc.1` was published with an incomplete file list, so it fails to load; it is deprecated.)
|
|
8
8
|
|
|
@@ -69,19 +69,36 @@ PIN: bridge — upgrade the harness and move the pin; this bridge answers sessio
|
|
|
69
69
|
|
|
70
70
|
## Use it
|
|
71
71
|
|
|
72
|
-
The bridge replaces the shipped `acp` row in a profile.
|
|
72
|
+
The bridge replaces the shipped `acp` row in a profile. Either way you install it, the bridge row needs a `provider` and a `model`.
|
|
73
73
|
|
|
74
|
-
**
|
|
74
|
+
**From npm.** The package declares `dsh.bundle.patch`, so installing it composes the rows: the shipped `acp` row is disabled and the bridge is inserted.
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
```bash
|
|
77
|
+
dsh plugin --profile acp-replay add dsh-acp-replay
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Then set the model on the inserted row, because the bundle carries none (the model id changes between harness releases) — that is an id-targeted override in the profile's own patch layer, not a second `insert`:
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
# $DSH_HOME/profiles/acp-replay/cordis.patch.yml
|
|
84
|
+
- id: acp-replay
|
|
85
|
+
config:
|
|
86
|
+
provider: deepseek-official
|
|
87
|
+
model: deepseek-v4-flash
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Read the values off the shipped row rather than guessing, since the id differs per release (`deepseek-flash` on 0.1.5, `deepseek-v4-flash` on 0.1.7):
|
|
77
91
|
|
|
78
92
|
```bash
|
|
79
|
-
dsh
|
|
93
|
+
DSH_HOME=~/.dsh dsh --profile acp --dump-config | sed -n '/- id: acp$/,/^$/p'
|
|
80
94
|
```
|
|
81
95
|
|
|
82
|
-
|
|
96
|
+
Skip that step and prompts answer with `Internal error: prompt variable "{{model}}" has no value for this assembly`. Add a second `insert` entry for `acp-replay` while the bundle is active and the mount fails with `duplicate loader entry id: acp-replay`.
|
|
97
|
+
|
|
98
|
+
**From a checkout (no bundle).** Install globally (`npm install -g dsh-acp-replay`) or copy `lib/`, `package.json`, and `cordis.patch.yml` into `$DSH_HOME/profiles/node_modules/dsh-acp-replay/`, then spell out both rows:
|
|
83
99
|
|
|
84
100
|
```yaml
|
|
101
|
+
# $DSH_HOME/profiles/acp-replay/cordis.patch.yml
|
|
85
102
|
- id: acp
|
|
86
103
|
disabled: true
|
|
87
104
|
|
|
@@ -91,7 +108,7 @@ The same package also works installed globally (`npm install -g dsh-acp-replay`)
|
|
|
91
108
|
inject: [acpAppStartup]
|
|
92
109
|
config:
|
|
93
110
|
provider: deepseek-official
|
|
94
|
-
model: deepseek-flash
|
|
111
|
+
model: deepseek-v4-flash
|
|
95
112
|
```
|
|
96
113
|
|
|
97
114
|
Then point the client at `dsh --profile acp-replay` instead of `dsh --profile acp`. In Paseo that is the provider's `command`:
|
|
@@ -110,7 +127,7 @@ Then point the client at `dsh --profile acp-replay` instead of `dsh --profile ac
|
|
|
110
127
|
}
|
|
111
128
|
```
|
|
112
129
|
|
|
113
|
-
|
|
130
|
+
The rows the bundle composes are the same two above, so a profile can point at either path without changing the client config.
|
|
114
131
|
|
|
115
132
|
## Build
|
|
116
133
|
|
|
@@ -145,6 +162,16 @@ Against `dsh 0.1.5-rc.1`, a scratch `DSH_HOME`, and a real API key:
|
|
|
145
162
|
|
|
146
163
|
`test/replay-check.mjs` runs both phases (`record` then `load <session-id>`); `test/selfcheck.mjs` only performs `initialize` and reports whether `loadSession` is advertised.
|
|
147
164
|
|
|
165
|
+
**Harness versions.** Each candidate installed with `dsh plugin --profile acp-replay add dsh-acp-replay` into a profile created by that same harness:
|
|
166
|
+
|
|
167
|
+
| Harness | Shipped `acp` profile | Bridged profile | Note |
|
|
168
|
+
| --- | --- | --- | --- |
|
|
169
|
+
| `0.1.5-rc.1` | answers, no `loadSession` | `loadSession: true` | original target; replay verified |
|
|
170
|
+
| `0.1.5-rc.3` (npm `latest`) | answers, no `loadSession` | `loadSession: true` | guard passes, so the pin can move |
|
|
171
|
+
| `0.1.7-rc.2` (npm `next`) | answers, no `loadSession` | `loadSession: true` | record + replay verified |
|
|
172
|
+
|
|
173
|
+
The shipped profile answering every time is the part a bare `initialize` probe can misread: no harness version probed here advertises `loadSession` itself, so the bridge stays necessary.
|
|
174
|
+
|
|
148
175
|
**End to end through a client** (Paseo 0.7.2 daemon, `dsh 0.1.5-rc.1`, two DSH providers on one daemon so only the bridge differs). Each agent ran one prompt, then the daemon was restarted — the event that used to erase the visible conversation:
|
|
149
176
|
|
|
150
177
|
| Provider | Before restart | After restart |
|
|
@@ -178,7 +205,7 @@ FAIL: the bridge answered but does not advertise loadSession # exit 1
|
|
|
178
205
|
## Not verified / known limits
|
|
179
206
|
|
|
180
207
|
- Tool-call replay is mapped but not exercised by the test above.
|
|
181
|
-
- The `0.1.6-alpha.1` no-response finding
|
|
208
|
+
- The `0.1.6-alpha.1` no-response finding was a field report and does not generalize: `0.1.5-rc.3` and `0.1.7-rc.2` both answer and both mount this bridge. No alpha harness has been probed here.
|
|
182
209
|
- An older host (`dsh 0.1.2-rc.1`) exposes a different persistence API (`load`/`inspect` instead of `open`/`read`), so this fork targets `0.1.5-rc.1` and newer only.
|
|
183
210
|
- Replayed history is delivered before `session/load` returns, one notification at a time; a very long session makes that call proportionally long.
|
|
184
211
|
- The profile's own help text still reads `--profile acp` (it comes from the bundled `dsh-acp-app` command provider, not from this package).
|
package/cordis.patch.yml
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Replace the shipped automation bridge with this one, which also answers
|
|
2
2
|
# `session/load` so a client can rebuild a transcript after its own restart.
|
|
3
|
+
#
|
|
4
|
+
# This row carries no `provider`/`model`: the shipped `acp` row sets them, and its
|
|
5
|
+
# model id changes between releases (`deepseek-flash` on 0.1.5, `deepseek-v4-flash`
|
|
6
|
+
# on 0.1.7). Copy that config into the profile's own patch layer, as an id-targeted
|
|
7
|
+
# override — a second `insert` for this id fails the mount:
|
|
8
|
+
#
|
|
9
|
+
# DSH_HOME=~/.dsh dsh --profile acp --dump-config | sed -n '/- id: acp$/,/^$/p'
|
|
10
|
+
#
|
|
11
|
+
# # $DSH_HOME/profiles/<profile>/cordis.patch.yml
|
|
12
|
+
# - id: acp-replay
|
|
13
|
+
# config:
|
|
14
|
+
# provider: deepseek-official
|
|
15
|
+
# model: deepseek-v4-flash
|
|
16
|
+
#
|
|
17
|
+
# Without it, prompts fail with `prompt variable "{{model}}" has no value`.
|
|
3
18
|
|
|
4
19
|
- id: acp
|
|
5
20
|
disabled: true
|
package/package.json
CHANGED