dodo-mcp 1.4.1 → 1.4.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 +10 -1
- package/dist/server/bootstrap.js +11 -3
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/configUi/ui/recovery.js +32 -46
- package/dist/services/multimodal/images.js +13 -0
- package/dist/services/multimodal/images.js.map +1 -1
- package/dist/services/recovery/contracts.js +2 -0
- package/dist/services/recovery/contracts.js.map +1 -1
- package/dist/services/recovery/drift.js +13 -3
- package/dist/services/recovery/drift.js.map +1 -1
- package/dist/services/recovery/history.js +48 -23
- package/dist/services/recovery/history.js.map +1 -1
- package/dist/services/recovery/recoveryService.js +114 -67
- package/dist/services/recovery/recoveryService.js.map +1 -1
- package/dist/services/recovery/storage.js +21 -7
- package/dist/services/recovery/storage.js.map +1 -1
- package/dist/services/resources/providers.js +17 -0
- package/dist/services/resources/providers.js.map +1 -1
- package/docs/RECOVERY.md +57 -18
- package/docs/RELEASE_1.4.2.md +66 -0
- package/docs/RELEASE_1.4.3.md +22 -0
- package/docs/RELEASE_NOTES.md +23 -0
- package/docs/TEST_REPORT.md +45 -0
- package/package.json +23 -11
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# DODO MCP 1.4.2 — Recovery best effort across restart
|
|
2
|
+
|
|
3
|
+
Automatic source backups no longer make ordinary editing or
|
|
4
|
+
commands depend on Recovery availability. A project with an old strict policy,
|
|
5
|
+
a missing backup volume, or a credential-like example file can continue normal
|
|
6
|
+
work while Recovery reports its failure.
|
|
7
|
+
|
|
8
|
+
## Changes
|
|
9
|
+
|
|
10
|
+
- Automatic activation, before-write and before-exec captures are best effort,
|
|
11
|
+
including stored `strictEnforcement`, `gitRequired` and `gitDirectory` settings.
|
|
12
|
+
Backup failure no longer turns a permitted `echo ok` or source edit into
|
|
13
|
+
`RECOVERY_REQUIRED`.
|
|
14
|
+
- The per-project `skipSecretContentFiles` preference persists across restart.
|
|
15
|
+
Capture reports credential-like files it skips without storing their contents
|
|
16
|
+
as a completed backup. The Recovery quick action changes this project preference
|
|
17
|
+
rather than disabling global file permissions or secret screening.
|
|
18
|
+
- `project_overview` includes `blockedPath`, `skippedSecretFiles`, `lastWarning`
|
|
19
|
+
and `operationsBlocked:false`. `blockedPath` is a relative source path when
|
|
20
|
+
known, or `null` for a failure without a specific source file. A later global
|
|
21
|
+
failure clears a previous path instead of pointing at an unrelated file.
|
|
22
|
+
- Recovery storage initializes on first disk access. A broken Recovery directory
|
|
23
|
+
can no longer prevent the server from booting, while canonical directory
|
|
24
|
+
identity and private-path checks still reject replacement storage.
|
|
25
|
+
- History, drift and agent bookkeeping failures report diagnostics without
|
|
26
|
+
hiding a completed operation or repeating its effects. Corrupt Recovery
|
|
27
|
+
metadata remains visible from the overview.
|
|
28
|
+
- The Recovery dashboard replaces the Strict Blocking switch with the best-effort
|
|
29
|
+
behavior and describes `BLOCKED` as backup unavailable, not a lock on normal work.
|
|
30
|
+
|
|
31
|
+
Explicit owner/verified checkpoints and reviewed restores still require their
|
|
32
|
+
backup and integrity checks to succeed. Authorization, secret/path policy,
|
|
33
|
+
expected hashes, and recovery guards for an actual partial file journal remain
|
|
34
|
+
authoritative. A warning means the operation may have no new Recovery checkpoint.
|
|
35
|
+
|
|
36
|
+
## Upgrade
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
npm install -g dodo-mcp@1.4.2
|
|
40
|
+
dodo --version
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Restart the DODO process using the service or launcher that normally runs it.
|
|
44
|
+
Installing the package does not replace code already loaded by a running process.
|
|
45
|
+
Refresh the MCP connection and call `project_overview` again for its current
|
|
46
|
+
workspace epoch. The updated overview exposes `operationsBlocked:false` alongside
|
|
47
|
+
the backup diagnostics. For Docker installations, update the package in the DODO
|
|
48
|
+
image and recreate that service with its existing persistent state.
|
|
49
|
+
|
|
50
|
+
No live production instance was updated during the patch validation. Installation
|
|
51
|
+
and a real server restart are separate from the fixture restart tests.
|
|
52
|
+
|
|
53
|
+
## Validation
|
|
54
|
+
|
|
55
|
+
Windows / Node 24.22.1 patch checks: build, typecheck and lint passed; the main
|
|
56
|
+
Recovery regression group passed 69 tests with 2 platform/dependency skips.
|
|
57
|
+
Storage boot/identity checks passed 2 tests, the owner UI passed 1 test in system
|
|
58
|
+
Chrome, and fresh-install packaging passed 17 tests: 89 passed in total across
|
|
59
|
+
these focused checks. See [the test report](TEST_REPORT.md).
|
|
60
|
+
|
|
61
|
+
This is focused patch evidence, not a completed full native release gate.
|
|
62
|
+
Native Linux/macOS and live production acceptance were not run for this patch.
|
|
63
|
+
The existing production dependency advisories are not remediated by this change.
|
|
64
|
+
|
|
65
|
+
See [Recovery usage and limits](RECOVERY.md) for checkpoint, restore and storage
|
|
66
|
+
behavior.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# DODO MCP 1.4.3 — Dependency security updates & raster image signature hardening
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
- **Direct & Runtime Dependency Security Updates:**
|
|
6
|
+
- `@modelcontextprotocol/server` `2.0.0` → `2.4.0` (`GHSA-jm63-cq47-j5jp`, `GHSA-46jr-4wx8-v453`, `GHSA-rvq5-wwqv-78pq`, `GHSA-f897-62hf-6gxq`)
|
|
7
|
+
- `@modelcontextprotocol/node` `2.0.0` → `2.1.2` (`GHSA-f897-62hf-6gxq`, plus transitive `hono` / `@hono/node-server` updates)
|
|
8
|
+
- `@modelcontextprotocol/express` `2.0.0` → `2.0.2` (`GHSA-rvq5-wwqv-78pq`)
|
|
9
|
+
- `express` `5.2.1` → `5.3.0` (resolving transitive `proxy-addr` `GHSA-jqcg-44mw-7w3h`, `body-parser` `GHSA-27r3-jxmh-p828`, and `qs` `GHSA-6pq8-jhm2-2vcw`)
|
|
10
|
+
- `sharp` & `@img/sharp-wasm32` `0.35.4` → `0.35.5` (`GHSA-wq5f-xc86-pv6w` / `CVE-2026-96889`)
|
|
11
|
+
- `zod` `^4.2.0` → `^4.6.7` (`GHSA-mrhx-c7xc-m3w5`)
|
|
12
|
+
- **Defense-in-Depth Raster Image Header Verification:**
|
|
13
|
+
- `imageView`, `inspectResourceFile`, and `imagePreview` now verify PNG/JPEG/GIF/WebP magic-byte signatures before invoking `sharp` / `libvips`, preventing disguised SVG/XML payloads from reaching native vector decoders.
|
|
14
|
+
- **Development Toolchain Audit Hygiene:**
|
|
15
|
+
- Updated `@modelcontextprotocol/client` (`2.4.0`), `vitest` (`5.1.0`), `typescript-eslint` (`^8.72.2`), and transitive `minimatch` / `brace-expansion` resolutions (`npm audit` reports `0 vulnerabilities` across both production and development trees).
|
|
16
|
+
|
|
17
|
+
## Upgrade
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
npm install -g dodo-mcp@1.4.3
|
|
21
|
+
dodo --version
|
|
22
|
+
```
|
package/docs/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# DODO MCP — Release Notes
|
|
2
2
|
|
|
3
|
+
## 1.4.3 — Dependency security updates & raster image signature hardening
|
|
4
|
+
|
|
5
|
+
- Upgraded runtime dependencies `@modelcontextprotocol/server` (`2.4.0`), `@modelcontextprotocol/node` (`2.1.2`), `@modelcontextprotocol/express` (`2.0.2`), `express` (`5.3.0`), `sharp` / `@img/sharp-wasm32` (`0.35.5`), and `zod` (`^4.6.7`), clearing all advisories reported on `npm.io` and `npm audit --omit=dev`.
|
|
6
|
+
- Added strict PNG/JPEG/GIF/WebP magic-byte header validation before passing image buffers or files to `sharp`, ensuring disguised SVG/XML payloads are rejected before native decoding.
|
|
7
|
+
- Updated development test/lint dependencies (`@modelcontextprotocol/client@2.4.0`, `vitest@5.1.0`, `typescript-eslint@^8.72.2`, and transitive glob dependencies) to `0 vulnerabilities` across the full `npm audit` tree.
|
|
8
|
+
- See [upgrade details](RELEASE_1.4.3.md).
|
|
9
|
+
|
|
10
|
+
## 1.4.2 — Recovery best effort across restart
|
|
11
|
+
|
|
12
|
+
- Automatic source backup failures no longer block normal commands or edits,
|
|
13
|
+
including after restart with legacy strict or Git-required settings.
|
|
14
|
+
- Persist the per-project secret-skip preference; show relative `blockedPath`,
|
|
15
|
+
`skippedSecretFiles`, warnings and `operationsBlocked:false` in the overview.
|
|
16
|
+
- Initialize Recovery disk storage lazily, and keep optional history/drift/agent
|
|
17
|
+
bookkeeping failures from masking successful work. Explicit checkpoints,
|
|
18
|
+
reviewed restores, authorization, path/hash and actual journal guards remain.
|
|
19
|
+
- Replace Recovery's Strict Blocking and global permission quick actions with
|
|
20
|
+
project-scoped backup controls and truthful unavailable-backup diagnostics.
|
|
21
|
+
- Focused Windows patch validation: 89 passed / 2 skipped across Recovery,
|
|
22
|
+
storage, Chrome UI and fresh-install packaging checks. Full native platform
|
|
23
|
+
gates and live production acceptance remain separate; see [validation](TEST_REPORT.md).
|
|
24
|
+
- See [upgrade details](RELEASE_1.4.2.md) and [Recovery usage](RECOVERY.md).
|
|
25
|
+
|
|
3
26
|
## 1.4.1 — Immediate Upgrade Unblock, Full Edit Defaults & Concurrent Multi-Project UI
|
|
4
27
|
|
|
5
28
|
- Automatically clears pre-existing write blocks (`recovery_required` changesets, `PREPARING` snapshots, `recovery_drift`, strict `recovery_policies`, `read`/`inspect` defaults, and read-only OAuth grants/tokens) immediately upon upgrading and opening `state.db`.
|
package/docs/TEST_REPORT.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# DODO MCP — Test Report
|
|
2
2
|
|
|
3
|
+
## 1.4.2 Recovery best-effort patch — Windows, 2026-11-11
|
|
4
|
+
|
|
5
|
+
Focused checks on Windows / Node 24.22.1: **build, typecheck and lint passed**.
|
|
6
|
+
These results cover the Recovery patch and are not a full native release gate.
|
|
7
|
+
|
|
8
|
+
| Check | Passed | Failed | Skipped |
|
|
9
|
+
|---|---:|---:|---:|
|
|
10
|
+
| Main Recovery regressions (7 files) | 69 | 0 | 2 |
|
|
11
|
+
| Recovery-only storage failure at boot and pinned directory identity | 2 | 0 | 0 |
|
|
12
|
+
| Owner UI in installed system Chrome | 1 | 0 | 0 |
|
|
13
|
+
| Fresh tarball install and packaging | 17 | 0 | 0 |
|
|
14
|
+
| Total focused checks | 89 | 0 | 2 |
|
|
15
|
+
|
|
16
|
+
The main group's skips were the Windows directory-fsync case and the existing
|
|
17
|
+
owner UI case whose bundled Chromium was unavailable. A separate UI regression
|
|
18
|
+
used installed system Chrome and exercised the actual Recovery dashboard code.
|
|
19
|
+
|
|
20
|
+
Real isolated SQLite/workspace/process fixtures verify persisted secret skipping
|
|
21
|
+
with an AWS-like test key after restart; actual `echo ok` and edits despite
|
|
22
|
+
legacy strict/Git settings or unavailable storage; corrupt prior snapshots and
|
|
23
|
+
policy/drift metadata; relative failure paths and stale-path clearing; live
|
|
24
|
+
authority revocation; and failed required backups before a reviewed restore.
|
|
25
|
+
Bookkeeping trigger failures preserve the operation's result and do not repeat
|
|
26
|
+
effects. Existing regressions retain stale-hash, secret/path, backup integrity
|
|
27
|
+
and actual partial-journal recovery checks.
|
|
28
|
+
|
|
29
|
+
The storage restart test replaces only a disposable Recovery directory with a
|
|
30
|
+
plain file, confirms the server boots and performs normal work, and verifies that
|
|
31
|
+
the occupied file and old backup bytes stay intact. A separate identity test
|
|
32
|
+
rejects a replacement directory after successful lazy initialization.
|
|
33
|
+
|
|
34
|
+
The Chrome case checks legacy `BLOCKED` diagnostics, secret-skip settings in both
|
|
35
|
+
states, project-only skip actions and an unsuccessful retry notice. Packaging
|
|
36
|
+
checks install a fresh tarball and verify its Compact MCP backup/restore flow and
|
|
37
|
+
the new overview fields.
|
|
38
|
+
|
|
39
|
+
**Not completed:** the full Windows suite/native gate (the host lacks enabled
|
|
40
|
+
Administrator and symlink prerequisites), native Linux/macOS validation, and live
|
|
41
|
+
gufile/production acceptance. The earlier production-only npm audit reported
|
|
42
|
+
10 affected packages (1 critical, 5 high, 4 moderate); this Recovery patch does not
|
|
43
|
+
remediate those advisories or claim a clean dependency audit. Publication is
|
|
44
|
+
verified separately from these tests.
|
|
45
|
+
|
|
46
|
+
See [release scope and upgrade steps](RELEASE_1.4.2.md).
|
|
47
|
+
|
|
3
48
|
## 1.3.2 Recovery maintenance — macOS release gate, 2026-09-25
|
|
4
49
|
|
|
5
50
|
`AUTOMATED_PASS` on macOS: build, typecheck and lint; full core suite **926 passed,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dodo-mcp",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3",
|
|
4
4
|
"author": "Arthittakun",
|
|
5
5
|
"description": "DODO — local-first MCP server with multi-project coding, AI providers, sub-agents, context, memory, media and workflow tools; embedded OAuth and workspace permissions.",
|
|
6
6
|
"type": "module",
|
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"docs/RELEASE_1.3.2.md",
|
|
57
57
|
"docs/RELEASE_1.4.0.md",
|
|
58
58
|
"docs/RELEASE_1.4.1.md",
|
|
59
|
+
"docs/RELEASE_1.4.2.md",
|
|
60
|
+
"docs/RELEASE_1.4.3.md",
|
|
59
61
|
"docs/RELEASE_NOTES.md",
|
|
60
62
|
"docs/SCHEDULES.md",
|
|
61
63
|
"docs/SECURITY.md",
|
|
@@ -96,26 +98,26 @@
|
|
|
96
98
|
"test:desktop:native": "npm run build && node scripts/test-desktop-native.mjs"
|
|
97
99
|
},
|
|
98
100
|
"dependencies": {
|
|
99
|
-
"@modelcontextprotocol/express": "2.0.
|
|
100
|
-
"@modelcontextprotocol/node": "2.
|
|
101
|
-
"@modelcontextprotocol/server": "2.
|
|
101
|
+
"@modelcontextprotocol/express": "2.0.2",
|
|
102
|
+
"@modelcontextprotocol/node": "2.1.2",
|
|
103
|
+
"@modelcontextprotocol/server": "2.4.0",
|
|
102
104
|
"better-sqlite3": "13.0.3",
|
|
103
105
|
"commander": "15.0.0",
|
|
104
106
|
"cron-parser": "5.10.0",
|
|
105
107
|
"diff": "^9.0.0",
|
|
106
|
-
"express": "5.
|
|
108
|
+
"express": "5.3.0",
|
|
107
109
|
"ignore": "^7.0.9",
|
|
108
110
|
"jose": "6.2.12",
|
|
109
111
|
"oidc-provider": "9.12.2",
|
|
110
112
|
"picomatch": "^4.0.7",
|
|
111
113
|
"playwright": "1.63.0",
|
|
112
|
-
"sharp": "0.35.
|
|
114
|
+
"sharp": "0.35.5",
|
|
113
115
|
"tar-stream": "3.2.1",
|
|
114
116
|
"typescript": "5.9.3",
|
|
115
|
-
"zod": "^4.
|
|
117
|
+
"zod": "^4.6.7"
|
|
116
118
|
},
|
|
117
119
|
"devDependencies": {
|
|
118
|
-
"@modelcontextprotocol/client": "2.
|
|
120
|
+
"@modelcontextprotocol/client": "2.4.0",
|
|
119
121
|
"@types/better-sqlite3": "^7.6.13",
|
|
120
122
|
"@types/diff": "^7.0.2",
|
|
121
123
|
"@types/express": "^5.0.0",
|
|
@@ -125,8 +127,8 @@
|
|
|
125
127
|
"eslint": "^9.39.0",
|
|
126
128
|
"pyright": "^1.1.413",
|
|
127
129
|
"sweetalert2": "11.26.25",
|
|
128
|
-
"typescript-eslint": "^8.
|
|
129
|
-
"vitest": "5.
|
|
130
|
+
"typescript-eslint": "^8.72.2",
|
|
131
|
+
"vitest": "5.1.0"
|
|
130
132
|
},
|
|
131
133
|
"keywords": [
|
|
132
134
|
"dodo",
|
|
@@ -166,6 +168,16 @@
|
|
|
166
168
|
"url": "https://github.com/arthittakun/dodo-mcp/issues"
|
|
167
169
|
},
|
|
168
170
|
"optionalDependencies": {
|
|
169
|
-
"@img/sharp-wasm32": "0.35.
|
|
171
|
+
"@img/sharp-wasm32": "0.35.5"
|
|
172
|
+
},
|
|
173
|
+
"overrides": {
|
|
174
|
+
"@typescript-eslint/typescript-estree": {
|
|
175
|
+
"minimatch": "^11.0.7"
|
|
176
|
+
},
|
|
177
|
+
"eslint": {
|
|
178
|
+
"minimatch": {
|
|
179
|
+
"brace-expansion": "^1.1.21"
|
|
180
|
+
}
|
|
181
|
+
}
|
|
170
182
|
}
|
|
171
183
|
}
|