@toddzheng024/dscode-desktop 0.7.35 → 0.7.38
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 +2 -2
- package/docs/CHANGELOG.md +27 -0
- package/docs/acp.md +31 -0
- package/docs/browser-use.md +1 -1
- package/docs/email.md +73 -0
- package/docs/hub-distribution.md +3 -3
- package/docs/plugin-hub.md +1 -1
- package/docs/releases/0.7.36.md +14 -0
- package/docs/releases/0.7.37.md +17 -0
- package/docs/releases/0.7.38.md +17 -0
- package/package.json +1 -1
- package/plugins/acp/cli.mjs +45 -0
- package/plugins/acp/index.mjs +44 -0
- package/plugins/computer-use/index.mjs +1 -31
- package/plugins/dscode/index.mjs +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
DSCODE adds a coding preset, browser workflows, cross-session collaboration,
|
|
4
4
|
memory and task management to the official DeepSeek Harness Desktop application.
|
|
5
5
|
|
|
6
|
-
**Version:** 0.7.
|
|
6
|
+
**Version:** 0.7.38 · **Harness runtime:** 0.2.0-rc.2
|
|
7
7
|
|
|
8
8
|
Preview release candidate; publication is a separate step.
|
|
9
9
|
|
|
@@ -48,7 +48,7 @@ public release; a candidate build alone does not publish a package.
|
|
|
48
48
|
## Install a published version
|
|
49
49
|
|
|
50
50
|
After this version is available on npm, enter
|
|
51
|
-
`@toddzheng024/dscode-desktop@0.7.
|
|
51
|
+
`@toddzheng024/dscode-desktop@0.7.38` in **Plugins → Add plugin**,
|
|
52
52
|
review the installation, install, then choose **Enable now**. Using the exact
|
|
53
53
|
version keeps the installation tied to these instructions and compatibility
|
|
54
54
|
requirements. The `preview` tag tracks the current Desktop preview release.
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,33 @@ Per-release notes live in [`docs/releases/`](releases/); the entries below summa
|
|
|
6
6
|
|
|
7
7
|
<!-- Add upcoming changes under Unreleased. -->
|
|
8
8
|
|
|
9
|
+
## [0.7.38] - 2026-10-10
|
|
10
|
+
|
|
11
|
+
The 0.7.37 candidate was cancelled before publication after its Node 22.19.0 coverage check failed. This release includes that upgrade and the test-fixture fix below.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Upgrade the terminal Harness runtime and vendored TUI dependencies from `0.1.7-alpha.2` to `0.2.0-rc.2`, matching the existing Desktop release target. Keep exact runtime pins and patch-version guards; this does not move to the `0.2.1` alpha channel.
|
|
16
|
+
- Update the live DeepSeek compaction evaluator and its regression fixture for header-based authentication.
|
|
17
|
+
- Upgrade Computer Use to `0.3.3`, whose declared compatibility includes the new Harness. Remove the retired Settings shim so the provider receives native live configuration updates. Restoring execution tools after a saved skill load still requires reloading the skill.
|
|
18
|
+
- Mount the native session controller and its host dependencies so reminders can resolve live and persisted sessions on Harness 0.2. The optional loopback login server also carries authenticated native Connection routes; no browser frontend is mounted.
|
|
19
|
+
- Read `/schedule` from the native reminder catalog instead of historical session events, refresh it while open, and display daily, weekly and cron rules. Storage failures remain visible instead of appearing as an empty list.
|
|
20
|
+
- Pin newly introduced Harness packages, including the shared DeepSeek account service required by clean bundle installations. Isolate patched app-boot, Goal and subagent provider packages in verification runtimes; check Ink patches in memory and use a deterministic clock for the OpenRouter timeout regression.
|
|
21
|
+
- Remove the stale relative source-map directive from the in-memory Ink test fixture, which Node 22.19.0 cannot resolve against a data URL during coverage collection. The shipped Ink runtime is unaffected.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- Document Atomic Mail as an optional stdio MCP integration with a disabled example entry. Unconfigured or disabled entries add no tools or server instructions to model context; enabling and removing the integration are covered by an offline lifecycle test.
|
|
26
|
+
|
|
27
|
+
## [0.7.36] - 2026-10-09
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- `dscode acp` serves standard ACP stdio clients with the DSCODE agent preset and configured providers. It supports native DSH session controls and forwards approval requests to the client. See [ACP clients](acp.md) for setup and inherited protocol limitations.
|
|
32
|
+
|
|
33
|
+
- The source and npm launchers preserve ACP stdin/stdout, use client tool approvals, and require an installed-protocol probe before Hub publication.
|
|
34
|
+
- Linux CI pulls the official Node image through its ECR Public mirror to avoid Docker Hub anonymous pull limits.
|
|
35
|
+
|
|
9
36
|
## [0.7.35] - 2026-10-08
|
|
10
37
|
|
|
11
38
|
- Promote the verified Desktop package to both `preview` and `latest` so default installations receive this fix instead of 0.7.33. Promotion requires a matching public-install receipt.
|
package/docs/acp.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# ACP clients
|
|
2
|
+
|
|
3
|
+
Run `dscode acp` to expose the DSCODE agent preset through Agent Client Protocol over newline-delimited JSON-RPC on stdin/stdout. The terminal interface is disabled. The ACP client supplies an absolute workspace directory when creating a session; tools run on the computer running DSCODE.
|
|
4
|
+
|
|
5
|
+
## Connect a client
|
|
6
|
+
|
|
7
|
+
Configure your client's custom ACP agent with executable `dscode` and arguments `["acp"]`. If the editor cannot find commands installed through nvm, use the absolute path printed by `command -v dscode`. Keep stdin open for the lifetime of the connection.
|
|
8
|
+
|
|
9
|
+
To select an initial model explicitly, use:
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
dscode acp --model custom-your-provider-id/your-model-id
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Without `--model`, the bridge uses DSCODE's saved default provider and model. Set up credentials and custom services in the normal TUI first with `/login` or `/provider custom`. The stable custom provider ID is recorded in `~/.dscode/providers.yaml`; it is not the service's display name. API keys stay in the existing credential store. Clients supporting ACP configuration options can select an advertised model and reasoning effort after creating a session.
|
|
16
|
+
|
|
17
|
+
For a source checkout, the equivalent executable is `node` with arguments `["/absolute/path/to/dscode/bin/dscode.mjs", "acp"]`. Source and npm installations use their existing, separate state directories. `--patch FILE` adds a trusted composition overlay and can be repeated. `dscode acp --help` prints usage without starting the runtime or installing a profile.
|
|
18
|
+
|
|
19
|
+
## Behavior and limits
|
|
20
|
+
|
|
21
|
+
- New and resumed ACP agents mount the `dscode` preset, including its tools and provider adapters. The bridge reuses DSH's native ACP implementation rather than translating terminal output.
|
|
22
|
+
- ACP sessions use the `ask` permission preset. Tool requests requiring approval are sent to the ACP client; the client can allow once, reject, or cancel. Normal sandbox rules still apply. The terminal's automatic model review is not the approval decision maker for these sessions.
|
|
23
|
+
- Standard session creation, prompts, cancellation, model configuration, listing, resume, close and MCP attachment are inherited from the pinned DSH bridge. Resume reconnects a session without replaying its transcript.
|
|
24
|
+
- The inherited bridge identifies itself as `deepseek-harness-acp`. It does not advertise `session/load`, modes, slash commands, terminal delegation, client filesystem operations or interactive question forms. Clients requiring those features need additional integration; a successful protocol handshake does not establish full editor compatibility.
|
|
25
|
+
- Title generation, session-card generation and memory generation are disabled in this transport. Configured providers, tools and other integrations remain available; ACP is not an offline mode.
|
|
26
|
+
- Stdout is reserved for protocol frames. First-install progress and launcher diagnostics go to stderr. Trusted custom patches must also respect this rule.
|
|
27
|
+
- Closing stdin shuts down the runtime. SIGTERM is forwarded by the launcher. Sessions persist in the same installation's state directory, and a running ACP process holds the normal installation lock against upgrades.
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
|
|
31
|
+
`node scripts/verify-acp.mjs` exercises the source CLI with a fixture model and custom API, without paid model requests. Unit tests cover argument validation, preset composition, source and npm launcher routing, cleanup and signal forwarding. Client-specific UI behavior must be verified in the intended editor.
|
package/docs/browser-use.md
CHANGED
|
@@ -646,7 +646,7 @@ and account settings, browser preview, durable session communication, cross-sess
|
|
|
646
646
|
memory and opt-in task scheduling together. Ordinary builds remain private;
|
|
647
647
|
the separate [release process](hub-distribution.md#desktop-release-candidate-and-publication)
|
|
648
648
|
qualifies a public candidate for 0.2.0-rc.2. The Desktop preview is published on npm as
|
|
649
|
-
`@toddzheng024/dscode-desktop@0.7.
|
|
649
|
+
`@toddzheng024/dscode-desktop@0.7.38`. The package does
|
|
650
650
|
not yet include all DSCODE Host services. Its experimental
|
|
651
651
|
[native Computer Use adapter](computer-use.md) has passed helper and lifecycle
|
|
652
652
|
checks; window observation, screenshots and input await qualification with
|
package/docs/email.md
CHANGED
|
@@ -17,6 +17,79 @@ directory is `~/.dscode/email`; `DSCODE_EMAIL_DIR` overrides it. New directories
|
|
|
17
17
|
use mode 0700 and messages use 0600. Message content enters session history only
|
|
18
18
|
when selected with Enter. Existing composer drafts and attachments are preserved.
|
|
19
19
|
|
|
20
|
+
## Atomic Mail via MCP
|
|
21
|
+
|
|
22
|
+
[Atomic Mail](https://github.com/Atomic-Mail/atomic-mail-agentic) provides a
|
|
23
|
+
separate mailbox for an agent through a local stdio MCP server. This optional
|
|
24
|
+
integration uses DSCODE's existing MCP bridge; it does not populate the built-in
|
|
25
|
+
`/email` inbox or use its `send_email` receipts and contact aliases.
|
|
26
|
+
|
|
27
|
+
Atomic Mail is absent from the default preset and dependencies. Without a local
|
|
28
|
+
MCP entry, no Atomic Mail process, tool schemas or server instructions load.
|
|
29
|
+
The entry in [the example configuration](https://github.com/qiz029/dscode/blob/main/config/mcp.local.example.yml) is
|
|
30
|
+
disabled, so copying that file alone does not enable it. There is no always-on
|
|
31
|
+
Atomic Mail skill or prompt section.
|
|
32
|
+
|
|
33
|
+
### Enable the server
|
|
34
|
+
|
|
35
|
+
For a source checkout or unpacked release, edit `config/mcp.local.yml` in the
|
|
36
|
+
installation directory. For the npm/Hub launcher, edit
|
|
37
|
+
`~/.local/share/dscode-hub/config/mcp.local.yml` (or
|
|
38
|
+
`$DSCODE_HOME/config/mcp.local.yml` when overridden). Create the directory and
|
|
39
|
+
file if needed. Add this row to the existing `insert` list, or use the complete
|
|
40
|
+
patch below for a new file:
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
- insert:
|
|
44
|
+
- id: mcp-atomicmail
|
|
45
|
+
name: '@deepseek-ai/dsh-mcp-client'
|
|
46
|
+
config:
|
|
47
|
+
serverName: atomicmail
|
|
48
|
+
transport: stdio
|
|
49
|
+
command: npx
|
|
50
|
+
args: ['--yes', '@atomicmail/mcp@0.3.31']
|
|
51
|
+
failOnStartupError: true
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Node and `npx` must be available; the first enabled launch downloads the pinned
|
|
55
|
+
package from npm. Restart DSCODE, then run `/mcp` and
|
|
56
|
+
`/mcp tools mcp-atomicmail`. A successful connection exposes
|
|
57
|
+
`mcp__atomicmail__register`, `mcp__atomicmail__jmap_request` and
|
|
58
|
+
`mcp__atomicmail__help`, together with the server's own instructions.
|
|
59
|
+
|
|
60
|
+
### Use and disable the mailbox
|
|
61
|
+
|
|
62
|
+
Ask the agent to call Atomic Mail's `help` before using the mailbox. Registration
|
|
63
|
+
requires your chosen username and a `watch` preference: `on-demand` reads mail
|
|
64
|
+
when requested; `scheduled` requires a separately configured recurring agent
|
|
65
|
+
task. Enabling the MCP entry does not register an account, send mail or create
|
|
66
|
+
a schedule. Follow the installed server's help for registration and JMAP
|
|
67
|
+
operations; the [upstream MCP guide](https://github.com/Atomic-Mail/atomic-mail-agentic/blob/main/docs/mcp.md)
|
|
68
|
+
describes the service.
|
|
69
|
+
|
|
70
|
+
Credentials default to `~/.atomicmail`; set `ATOMIC_MAIL_CREDENTIALS_DIR` in
|
|
71
|
+
the row's `config.env` to use a separate absolute directory. Keep credentials
|
|
72
|
+
out of the configuration and version control. Mail arriving through this MCP
|
|
73
|
+
remains external content, and outgoing actions follow the active MCP tool
|
|
74
|
+
permission policy.
|
|
75
|
+
|
|
76
|
+
With all agents idle, `/mcp disable mcp-atomicmail` removes the connection,
|
|
77
|
+
tools and server prompt contribution for the current process. Set
|
|
78
|
+
`disabled: true` on the row, or remove it, to keep it off after restart.
|
|
79
|
+
Disabling does not erase messages or tool results already in session history;
|
|
80
|
+
start a new session for a conversation without that earlier context. Any
|
|
81
|
+
separately configured schedule must also be disabled separately.
|
|
82
|
+
|
|
83
|
+
The native bridge was checked with `@atomicmail/mcp@0.3.31` for initialization,
|
|
84
|
+
discovery of all three tools, server instructions and a read-only `help` call
|
|
85
|
+
using an isolated credential directory. An offline MCP fixture checks that
|
|
86
|
+
absent and disabled entries contribute no context, enabling adds tools and
|
|
87
|
+
instructions, and disabling or removing the entry removes both.
|
|
88
|
+
|
|
89
|
+
This recipe covers the terminal launcher's local stdio integration. Hosted
|
|
90
|
+
OAuth and integration with the built-in inbox are outside its scope. Mailbox
|
|
91
|
+
registration and real mail delivery were not tested.
|
|
92
|
+
|
|
20
93
|
## Experimental Desktop inbox
|
|
21
94
|
|
|
22
95
|
The combined Desktop package adds **Open right sidebar → Email inbox**. It reads
|
package/docs/hub-distribution.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
- `@toddzheng024/dscode-desktop`: the extension for official Harness Desktop, published under the npm `preview` tag. It has its own exact runtime compatibility and Hub listing, and is not part of the terminal Hub profile.
|
|
8
8
|
- Hub profile `dscode`: the exact versions and integrity hashes of the bundle and the DSH runtime.
|
|
9
9
|
|
|
10
|
-
The complete bundle pins the shared DSH dependencies and the vendored terminal's runtime dependencies explicitly, using the repository lockfile. The terminal's workspace package is compiled into the bundle; its dependencies must still be installed, including `chalk` and `ink`. Do not stack it with another base/TUI bundle in one profile: installing several root bundles in Hub order resolves a wide transitive dependency to the other rc line first. A standalone profile's pnpm hoisted + autoInstallPeers=false is the verified installation path.
|
|
10
|
+
The complete bundle pins the shared DSH dependencies and the vendored terminal's runtime dependencies explicitly, using the repository lockfile. The terminal's workspace package is compiled into the bundle; its dependencies must still be installed, including `chalk` and `ink`. Do not stack it with another base/TUI bundle in one profile: installing several root bundles in Hub order resolves a wide transitive dependency to the other rc line first. A standalone profile's pnpm hoisted + autoInstallPeers=false is the verified installation path. Computer Use 0.3.3 declares compatibility with the pinned Harness runtime. End users install through the launcher, which supplies the verified profile layout and installation settings.
|
|
11
11
|
|
|
12
12
|
## User
|
|
13
13
|
|
|
@@ -37,7 +37,7 @@ A user who already has dsh-hub installed can apply directly, but must use pnpm 1
|
|
|
37
37
|
|
|
38
38
|
Install the official Harness Desktop application with embedded runtime
|
|
39
39
|
0.2.0-rc.2. In **Plugins → Add plugin**, enter
|
|
40
|
-
`@toddzheng024/dscode-desktop@0.7.
|
|
40
|
+
`@toddzheng024/dscode-desktop@0.7.38`, review and install, then choose
|
|
41
41
|
**Enable now**. Fully quit and reopen Desktop, enable **Show coding view** and
|
|
42
42
|
**Agent presets**, then create a DSCODE session and choose an existing model.
|
|
43
43
|
The Desktop preview is qualified on macOS Apple Silicon. See
|
|
@@ -46,7 +46,7 @@ for archive checksums, migration and removal, and [Plugin Hub](plugin-hub.md)
|
|
|
46
46
|
for the separation between DSCODE and Hub.
|
|
47
47
|
|
|
48
48
|
Version 0.7.34 fixes the 0.7.33 activation error “4 entries did not activate”
|
|
49
|
-
when Desktop starts without `DSH_HOME`. Update to the current 0.7.
|
|
49
|
+
when Desktop starts without `DSH_HOME`. Update to the current 0.7.38 package and
|
|
50
50
|
enable it again; exporting a shell variable is unnecessary. Default Desktop
|
|
51
51
|
state uses `~/.dsh`, as resolved by Harness. Publication now verifies installation
|
|
52
52
|
and the affected components with that default environment.
|
package/docs/plugin-hub.md
CHANGED
|
@@ -26,7 +26,7 @@ sessions. Their installation handoff delegates to the official plugin manager;
|
|
|
26
26
|
enabling, configuration and removal stay in **Settings → Plugins**.
|
|
27
27
|
|
|
28
28
|
Installing or reinstalling 0.7.34 will therefore not remove the bundled Hub.
|
|
29
|
-
Update to `@toddzheng024/dscode-desktop@0.7.
|
|
29
|
+
Update to `@toddzheng024/dscode-desktop@0.7.38` using the [Desktop installation guide](browser-use.md#install-the-experimental-combined-desktop-package).
|
|
30
30
|
Fully quit and reopen Desktop after updating; an already running Host may keep
|
|
31
31
|
the old plugin modules loaded.
|
|
32
32
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# DSCODE 0.7.36
|
|
2
|
+
|
|
3
|
+
This release exposes the DSCODE agent preset to ACP clients through the source and npm launchers.
|
|
4
|
+
|
|
5
|
+
- **ACP entry point:** `dscode acp` runs DSH's native stdio bridge with DSCODE tools and provider adapters. It uses the saved model selection or `--model PROVIDER/ID`; configure credentials and custom services in the terminal interface first. Configure clients with executable `dscode` and arguments `["acp"]`. See the [ACP guide](../acp.md) for setup.
|
|
6
|
+
- **Client approvals and session lifecycle:** ACP sessions use the `ask` permission preset and send approval requests to the client. Creation, prompts, cancellation, model configuration, listing, resume, close and MCP attachment inherit the pinned native bridge. Stdout carries protocol frames, terminal-only generation is disabled, and closing stdin exits the runtime while preserving the installation's session state.
|
|
7
|
+
- **Support boundary:** the bridge retains the `deepseek-harness-acp` identity. It does not add transcript replay through `session/load`, modes, slash commands, client filesystem/terminal delegation or interactive question forms. This is a terminal-launcher transport; the Desktop plugin retains its existing support boundary.
|
|
8
|
+
- **Distribution checks:** the npm launcher includes its ACP routing code, the bundle includes the bridge, and Hub publication requires a successful protocol probe against the installed artifacts. Native tool-result regression cases cover all three custom API formats using upstream's serializer. Linux CI uses the official Node image's ECR Public mirror to avoid Docker Hub anonymous pull limits.
|
|
9
|
+
|
|
10
|
+
Update the global launcher with `npm install -g @toddzheng024/dscode@latest`, then run `dscode update` to refresh an existing Hub profile. A fresh installation provisions its matching profile on first use.
|
|
11
|
+
|
|
12
|
+
Verification of the merged feature code passed `npm run check` on Node 22.19.0 and 24.19.0: 1,087 unit/component tests, both TypeScript checks, 80.16% complete source line coverage, integration/package checks and 63 offline evaluation cases. Real Chrome checks and the scripted browser evaluation passed. Linux end-to-end verification passed all seven steps, including installed ACP, Hub installation, agent execution, failed upgrade and rollback; the GitHub macOS and Linux gates also passed. Documentation and lint checks run for this version change, and the release workflow requalifies the exact versioned terminal and Desktop archives before publication.
|
|
13
|
+
|
|
14
|
+
The ACP probe covers initialization, a fixture custom API, DSCODE tool calls, allow/reject approvals, cancellation, list/resume/close and EOF shutdown. Specific editor compatibility and paid model endpoints have no automated case in this release. No live-model quality claim follows from the fixture probes.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# DSCODE 0.7.37
|
|
2
|
+
|
|
3
|
+
Status: unpublished candidate. Its workflow was cancelled before publication after the Node 22.19.0 coverage job exposed a test-fixture source-map error. Superseded by [0.7.38](0.7.38.md).
|
|
4
|
+
|
|
5
|
+
This release upgrades the terminal to Harness 0.2.0-rc.2, restores native reminder integration, and documents optional Atomic Mail MCP support.
|
|
6
|
+
|
|
7
|
+
- **Aligned runtime:** the terminal and vendored TUI now use Harness `0.2.0-rc.2`, matching the existing Desktop target. All installed Harness packages have exact override pins, including the newly introduced shared account service. Existing DSCODE runtime patches retain their exact-version guards. The DeepSeek compaction evaluator uses the new header-based authentication interface; this release does not move to the `0.2.1` alpha channel.
|
|
8
|
+
- **Native reminders:** the terminal mounts the session controller and its host dependencies so the scheduler can deliver to live sessions and resume persisted sessions while the Host runs. `/schedule` reads the current reminder catalog instead of historical session events, refreshes while open, displays daily, weekly and cron rules, and surfaces read failures. The optional loopback login server also carries authenticated native Connection routes; no browser frontend is mounted. The host services also work with that listener disabled.
|
|
9
|
+
- **Computer Use compatibility:** update to `0.3.3`, whose declared compatibility includes the new Harness, and remove the retired Settings shim so the provider handles native configuration updates. The upstream saved-skill restoration limitation remains: after resuming a session, reload the Computer Use skill if its execution tools are absent. The activation tool remains available.
|
|
10
|
+
- **Optional Atomic Mail:** the [email guide](../email.md) and disabled example MCP row show how to opt in. Unconfigured or disabled rows start no Atomic Mail process and add no tools or server instructions to model context. Disabling or removing a configured row removes its current tools and instructions; it does not erase previous conversation history. This is a separate MCP integration and does not replace the existing email tools.
|
|
11
|
+
- **Reliable verification:** isolated test runtimes now carry the app-boot, Goal and subagent provider packages they exercise. Ink patch tests work in memory and OpenRouter timeout tests use a controlled clock. Fresh installs no longer depend on a previously patched developer tree. Installed-bundle probes include native live and cold-session reminder delivery.
|
|
12
|
+
|
|
13
|
+
Update with `npm install -g @toddzheng024/dscode@latest`, then run `dscode update` for an existing Hub profile. Fresh installs provision their matching profile on first launch. The Desktop extension remains qualified separately for official Harness 0.2.0-rc.2 on macOS Apple Silicon; its exact release archive is revalidated by the release workflow.
|
|
14
|
+
|
|
15
|
+
Verification of this change passed a clean `npm ci --ignore-scripts` and `npm run check`: lint, both TypeScript checks, 1,091 unit/component tests, native integration and package checks, and 63 offline evaluation tests. Measured first-party `.mjs` line coverage was 80.37%; the TypeScript terminal is outside that metric. Real Chrome checks passed. The macOS doctor passed preset activation, worktrees, shell persistence, approvals, compaction and session resume; an isolated run with `DSCODE_ACCOUNT_LOGIN=0` also passed live and cold-session reminder delivery. Computer Use helper 0.3.3 passed initialization and its health handshake. Linux arm64 on Node 22.23.3 passed all seven end-to-end stages, including installed bundle execution, failed-upgrade preservation and successful upgrade/rollback. Documentation, lint and tag-version checks are repeated for the version bump, and CI requalifies the exact versioned terminal and Desktop archives before publication.
|
|
16
|
+
|
|
17
|
+
Real provider inference, live OAuth login, interactive desktop actions and real mail delivery have no automated case in this release. Fixture success establishes runtime and transport behavior, not model quality or those external account flows.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# DSCODE 0.7.38
|
|
2
|
+
|
|
3
|
+
This release upgrades the terminal to Harness 0.2.0-rc.2, restores native reminder integration, and documents optional Atomic Mail MCP support.
|
|
4
|
+
|
|
5
|
+
The 0.7.37 candidate was cancelled before npm or Hub publication when its Node 22.19.0 coverage check failed. This version retains the upgrade and removes a stale source-map reference from the in-memory Ink test fixture. The failure was reproduced locally on Node 22.19.0; all 1,091 unit/component tests and coverage checks passed on that exact runtime after the fix. The original tag remains unchanged.
|
|
6
|
+
|
|
7
|
+
- **Aligned runtime:** the terminal and vendored TUI now use Harness `0.2.0-rc.2`, matching the existing Desktop target. All installed Harness packages have exact override pins, including the newly introduced shared account service. Existing DSCODE runtime patches retain their exact-version guards. The DeepSeek compaction evaluator uses the new header-based authentication interface; this release does not move to the `0.2.1` alpha channel.
|
|
8
|
+
- **Native reminders:** the terminal mounts the session controller and its host dependencies so the scheduler can deliver to live sessions and resume persisted sessions while the Host runs. `/schedule` reads the current reminder catalog instead of historical session events, refreshes while open, displays daily, weekly and cron rules, and surfaces read failures. The optional loopback login server also carries authenticated native Connection routes; no browser frontend is mounted. The host services also work with that listener disabled.
|
|
9
|
+
- **Computer Use compatibility:** update to `0.3.3`, whose declared compatibility includes the new Harness, and remove the retired Settings shim so the provider handles native configuration updates. The upstream saved-skill restoration limitation remains: after resuming a session, reload the Computer Use skill if its execution tools are absent. The activation tool remains available.
|
|
10
|
+
- **Optional Atomic Mail:** the [email guide](../email.md) and disabled example MCP row show how to opt in. Unconfigured or disabled rows start no Atomic Mail process and add no tools or server instructions to model context. Disabling or removing a configured row removes its current tools and instructions; it does not erase previous conversation history. This is a separate MCP integration and does not replace the existing email tools.
|
|
11
|
+
- **Reliable verification:** isolated test runtimes now carry the app-boot, Goal and subagent provider packages they exercise. Ink patch tests work in memory and OpenRouter timeout tests use a controlled clock. Fresh installs no longer depend on a previously patched developer tree. Installed-bundle probes include native live and cold-session reminder delivery.
|
|
12
|
+
|
|
13
|
+
Update with `npm install -g @toddzheng024/dscode@latest`, then run `dscode update` for an existing Hub profile. Fresh installs provision their matching profile on first launch. The Desktop extension remains qualified separately for official Harness 0.2.0-rc.2 on macOS Apple Silicon; its exact release archive is revalidated by the release workflow.
|
|
14
|
+
|
|
15
|
+
Verification of this change passed a clean `npm ci --ignore-scripts` and `npm run check`: lint, both TypeScript checks, 1,091 unit/component tests, native integration and package checks, and 63 offline evaluation tests. Measured first-party `.mjs` line coverage was 80.37%; the TypeScript terminal is outside that metric. Real Chrome checks passed. The macOS doctor passed preset activation, worktrees, shell persistence, approvals, compaction and session resume; an isolated run with `DSCODE_ACCOUNT_LOGIN=0` also passed live and cold-session reminder delivery. Computer Use helper 0.3.3 passed initialization and its health handshake. Linux arm64 on Node 22.23.3 passed all seven end-to-end stages, including installed bundle execution, failed-upgrade preservation and successful upgrade/rollback. Documentation, lint and tag-version checks are repeated for the version bump, and CI requalifies the exact versioned terminal and Desktop archives before publication.
|
|
16
|
+
|
|
17
|
+
Real provider inference, live OAuth login, interactive desktop actions and real mail delivery have no automated case in this release. Fixture success establishes runtime and transport behavior, not model quality or those external account flows.
|
package/package.json
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export const USAGE = `Usage: dscode acp [options]
|
|
2
|
+
Serve Agent Client Protocol over stdio using the DSCODE agent preset.
|
|
3
|
+
The client supplies each session's workspace. Stdout contains only ACP frames.
|
|
4
|
+
|
|
5
|
+
Options:
|
|
6
|
+
--model PROVIDER/ID initial model (default: the saved default model)
|
|
7
|
+
--patch FILE additional composition overlay (repeatable)
|
|
8
|
+
-h, --help show this help
|
|
9
|
+
|
|
10
|
+
Configure credentials and custom providers in the TUI before connecting.
|
|
11
|
+
Permission requests are answered by the ACP client. Disconnecting exits.`;
|
|
12
|
+
|
|
13
|
+
export function parseAcpArgs(argv) {
|
|
14
|
+
const options = { patches: [], help: false };
|
|
15
|
+
for (let index = 0; index < argv.length; index++) {
|
|
16
|
+
const arg = argv[index];
|
|
17
|
+
if (arg === '--help' || arg === '-h') { options.help = true; continue; }
|
|
18
|
+
if (!['--model', '--patch'].includes(arg)) throw Error(`Unknown ACP option: ${arg}`);
|
|
19
|
+
const value = argv[++index];
|
|
20
|
+
if (!value || value.startsWith('-')) throw Error(`${arg} requires a value`);
|
|
21
|
+
if (arg === '--patch') options.patches.push(value);
|
|
22
|
+
else {
|
|
23
|
+
if (!/^[^/\s]+\/\S+$/.test(value)) throw Error('--model expects provider/model');
|
|
24
|
+
options.model = value;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return options;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function acpOverlay(entry, options = {}) {
|
|
31
|
+
return `${['tui-startup', 'tui-runner', 'session-title-llm'].map(id => `- id: ${id}\n disabled: true`).join('\n')}
|
|
32
|
+
- id: dscode-session-cards
|
|
33
|
+
config:
|
|
34
|
+
enabled: false
|
|
35
|
+
- id: dscode-memory
|
|
36
|
+
config:
|
|
37
|
+
generate: false
|
|
38
|
+
- insert:
|
|
39
|
+
- id: acp-app-startup
|
|
40
|
+
name: '@deepseek-ai/dsh-acp-app'
|
|
41
|
+
- id: dscode-acp
|
|
42
|
+
name: ${JSON.stringify(entry)}
|
|
43
|
+
config: ${JSON.stringify(options.model ? { model: options.model } : {})}
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { apply as applyAcp } from '@deepseek-ai/dsh-acp';
|
|
2
|
+
import z from '@deepseek-ai/schemastery';
|
|
3
|
+
|
|
4
|
+
export const name = 'dscode-acp';
|
|
5
|
+
export const inject = ['acpAppStartup', 'agents', 'agentPresets', 'agentDefaultModel', 'permissionPresets', 'llm', 'sessionPersistence', 'sessions', 'dscodeCustom'];
|
|
6
|
+
export const Config = z.object({ model: z.string() });
|
|
7
|
+
|
|
8
|
+
// Scope the factory to this bridge: TUI and delegated agents keep their own
|
|
9
|
+
// composition. ACP still owns model selection, MCP attachment and disposal.
|
|
10
|
+
export function presetAgents(ctx) {
|
|
11
|
+
const wrap = method => async (options) => {
|
|
12
|
+
const handle = await ctx.agents[method]({
|
|
13
|
+
...options,
|
|
14
|
+
...(method === 'create' ? { meta: { ...options.meta, agentPreset: 'dscode' } } : {}),
|
|
15
|
+
setup: async (agentCtx, agent) => {
|
|
16
|
+
await ctx.agentPresets.mount(agentCtx, 'dscode');
|
|
17
|
+
await options.setup?.(agentCtx, agent);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
ctx.permissionPresets.set(handle.agent.session, 'ask');
|
|
21
|
+
return handle;
|
|
22
|
+
};
|
|
23
|
+
const overrides = { create: wrap('create'), resume: wrap('resume') };
|
|
24
|
+
return new Proxy(ctx.agents, {
|
|
25
|
+
get(target, key) {
|
|
26
|
+
if (Object.hasOwn(overrides, key)) return overrides[key];
|
|
27
|
+
const value = Reflect.get(target, key, target);
|
|
28
|
+
return typeof value === 'function' ? value.bind(target) : value;
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function startAcp(ctx, config = {}, bridge = applyAcp) {
|
|
34
|
+
const selection = config.model
|
|
35
|
+
? { provider: config.model.slice(0, config.model.indexOf('/')), model: config.model.slice(config.model.indexOf('/') + 1) }
|
|
36
|
+
: ctx.agentDefaultModel.currentSelection();
|
|
37
|
+
const scoped = ctx.extend({ agents: presetAgents(ctx) });
|
|
38
|
+
bridge(scoped, { provider: selection.provider, model: selection.model });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export async function apply(ctx, config) {
|
|
42
|
+
await ctx.get('dscodeCustom').refresh();
|
|
43
|
+
startAcp(ctx, config);
|
|
44
|
+
}
|
|
@@ -1,37 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Computer Use, mounted through DSCODE so a retired settings API still resolves.
|
|
3
|
-
*
|
|
4
|
-
* `@anionex/dsh-computer-use` reads its configuration with `ctx.settings.register`, an API
|
|
5
|
-
* DSH removed in 0.1.7: Settings now projects forms from the profile entry itself, and the
|
|
6
|
-
* missing method made the whole Computer Use bundle fail to activate. The package is
|
|
7
|
-
* pinned at 0.3.2 with no newer release, so this row restores the method — as a read-only
|
|
8
|
-
* view over the composition config, which is where DSCODE configures Computer Use anyway —
|
|
9
|
-
* and then mounts the upstream bundle as its child, which is what makes the order
|
|
10
|
-
* dependable: the shim is installed before the provider's constructor runs.
|
|
11
|
-
*
|
|
12
|
-
* Retire this wrapper when the package reads volatile configuration, and mount
|
|
13
|
-
* `@anionex/dsh-computer-use` directly again.
|
|
14
|
-
*
|
|
15
|
-
* @module dscode-computer-use
|
|
16
|
-
*/
|
|
17
|
-
|
|
1
|
+
/** Mount the compatible upstream provider with DSCODE interaction defaults. */
|
|
18
2
|
import ComputerUseBundle from '@anionex/dsh-computer-use';
|
|
19
3
|
|
|
20
4
|
export const name = 'dscode-computer-use';
|
|
21
|
-
export const inject = ['settings'];
|
|
22
|
-
|
|
23
|
-
/** Section handle the 0.3.x provider expects: one read of the composition config, no live writes. */
|
|
24
|
-
function staticSection(base) {
|
|
25
|
-
return { get: () => base, watch: () => () => {} };
|
|
26
|
-
}
|
|
27
|
-
|
|
28
5
|
export function apply(ctx, config = {}) {
|
|
29
|
-
const settings = ctx.settings;
|
|
30
|
-
// Only ever adds what upstream no longer defines; a Settings service that carries its
|
|
31
|
-
// own `register` again is left untouched, and the shim is dropped with this row.
|
|
32
|
-
if (typeof settings.register !== 'function') {
|
|
33
|
-
settings.register = (_namespace, _schema, options = {}) => staticSection(options.base ?? {});
|
|
34
|
-
ctx.effect(() => () => { delete settings.register; });
|
|
35
|
-
}
|
|
36
6
|
ctx.plugin(ComputerUseBundle, config);
|
|
37
7
|
}
|
package/plugins/dscode/index.mjs
CHANGED
|
@@ -58,7 +58,7 @@ const childLimit = owner => (owner.session.requestHeader?.()?.config ?? owner.op
|
|
|
58
58
|
// repository there instead of pointing at a path that does not exist.
|
|
59
59
|
const DOCS_DIR = fileURLToPath(new URL('../../docs/', import.meta.url));
|
|
60
60
|
const DOCS_REPO = 'https://github.com/qiz029/dscode/blob/main/docs/';
|
|
61
|
-
export const DOCS_SECTION = `To answer questions about DSCODE itself - what it supports, how a feature is configured, what a command does - treat the bundled user guides as the source of truth instead of guessing: ${existsSync(DOCS_DIR) ? `${DOCS_DIR} plus the repository root README.md (session-bridge.md, session-communication.md, session-cards.md, memory.md, exec.md, email.md, browser-use.md, plugin-hub.md, computer-use.md, skills.md, tui-commands.md, session-metrics.md, dscode-ultra.md, auto-review.md, account-login.md, opencode-go.md, custom-providers.md, demo.md, triggers.md)` : `the repository documentation at ${DOCS_REPO} plus the root README.md (session-bridge.md, session-communication.md, session-cards.md, memory.md, exec.md, email.md, browser-use.md, plugin-hub.md, computer-use.md, skills.md, tui-commands.md, session-metrics.md, dscode-ultra.md, auto-review.md, account-login.md, opencode-go.md, custom-providers.md, demo.md, triggers.md)`}. Read the relevant guide before answering rather than relying on memory of an earlier session. docs/CONTEXT-HANDOFF.md, docs/session-messaging-design.md, docs/cloud-webapp-host.md, docs/triggers-design.md, docs/verification.md, docs/maintainability.md and docs/vendored-tui-upgrade.md are internal development records, not user documentation: never quote them to a user or treat them as a specification. When the guides do not cover something, describe only what the running installation actually does and say plainly that it is not documented.`;
|
|
61
|
+
export const DOCS_SECTION = `To answer questions about DSCODE itself - what it supports, how a feature is configured, what a command does - treat the bundled user guides as the source of truth instead of guessing: ${existsSync(DOCS_DIR) ? `${DOCS_DIR} plus the repository root README.md (session-bridge.md, session-communication.md, session-cards.md, memory.md, exec.md, acp.md, email.md, browser-use.md, plugin-hub.md, computer-use.md, skills.md, tui-commands.md, session-metrics.md, dscode-ultra.md, auto-review.md, account-login.md, opencode-go.md, custom-providers.md, demo.md, triggers.md)` : `the repository documentation at ${DOCS_REPO} plus the root README.md (session-bridge.md, session-communication.md, session-cards.md, memory.md, exec.md, acp.md, email.md, browser-use.md, plugin-hub.md, computer-use.md, skills.md, tui-commands.md, session-metrics.md, dscode-ultra.md, auto-review.md, account-login.md, opencode-go.md, custom-providers.md, demo.md, triggers.md)`}. Read the relevant guide before answering rather than relying on memory of an earlier session. docs/CONTEXT-HANDOFF.md, docs/session-messaging-design.md, docs/cloud-webapp-host.md, docs/triggers-design.md, docs/verification.md, docs/maintainability.md and docs/vendored-tui-upgrade.md are internal development records, not user documentation: never quote them to a user or treat them as a specification. When the guides do not cover something, describe only what the running installation actually does and say plainly that it is not documented.`;
|
|
62
62
|
|
|
63
63
|
export function apply(ctx, config = {}) {
|
|
64
64
|
const viewer = config.desktop ? 'Delegation board in the right sidebar' : '/delegate-dashboard';
|