dodo-mcp 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +11 -1
  2. package/dist/server/aiAdmin.js +1 -1
  3. package/dist/server/aiAdmin.js.map +1 -1
  4. package/dist/server/configUi/index.html +1 -0
  5. package/dist/server/configUi/ui/recovery.js +2 -17
  6. package/dist/server/configUi/ui/recoveryMaintenance.js +61 -0
  7. package/dist/server/ipcDispatch.js +6 -2
  8. package/dist/server/ipcDispatch.js.map +1 -1
  9. package/dist/server/localConfig.js +1 -1
  10. package/dist/server/localConfig.js.map +1 -1
  11. package/dist/services/recovery/contracts.js +1 -0
  12. package/dist/services/recovery/contracts.js.map +1 -1
  13. package/dist/services/recovery/maintenance.js +220 -0
  14. package/dist/services/recovery/maintenance.js.map +1 -0
  15. package/dist/services/recovery/recoveryService.js +18 -5
  16. package/dist/services/recovery/recoveryService.js.map +1 -1
  17. package/dist/services/recovery/storage.js +46 -2
  18. package/dist/services/recovery/storage.js.map +1 -1
  19. package/dist/store/db.js +6 -0
  20. package/dist/store/db.js.map +1 -1
  21. package/dist/tools/recoveryTools.js +24 -3
  22. package/dist/tools/recoveryTools.js.map +1 -1
  23. package/dist/tools/surface.js +2 -2
  24. package/dist/tools/surface.js.map +1 -1
  25. package/docs/ARCHITECTURE.md +18 -2
  26. package/docs/COMPATIBILITY.md +9 -0
  27. package/docs/MANUAL_ACCEPTANCE.md +28 -0
  28. package/docs/RECOVERY.md +73 -8
  29. package/docs/RELEASE_1.3.2.md +50 -0
  30. package/docs/RELEASE_NOTES.md +10 -0
  31. package/docs/SECURITY.md +17 -0
  32. package/docs/TEST_REPORT.md +28 -0
  33. package/package.json +2 -1
  34. package/schemas/tools.compact.json +16 -8
  35. package/schemas/tools.hybrid.json +16 -8
  36. package/schemas/tools.json +682 -2
@@ -261,8 +261,8 @@ gateways Report ผูก revision, dataset, dependency lock, config และ h
261
261
 
262
262
  ## Tool surfaces
263
263
 
264
- - Complete capability catalog 158 individual definitions (Core 104 + Advanced Agent Runtime 17 + Sub-agents 4 + Android ADB 13 + Source Recovery 10 + Deployment 10)
265
- - Full live catalog ค่าเริ่มต้น 154 definitions; owner เปิด Sub-agent MCP exposure แล้วเป็น 158
264
+ - Complete capability catalog 162 individual definitions (Core 104 + Advanced Agent Runtime 17 + Sub-agents 4 + Android ADB 13 + Source Recovery 14 + Deployment 10)
265
+ - Full live catalog ค่าเริ่มต้น 158 definitions; owner เปิด Sub-agent MCP exposure แล้วเป็น 162
266
266
  - Compact catalog 20 definitions: overview, discover และ gateways รวม `dodo_mobile`
267
267
  - Hybrid catalog 49 definitions: compact core ตามด้วย direct tools
268
268
 
@@ -463,3 +463,19 @@ through public HTTP. A WeakMap binds each authenticated Express request to its
463
463
  session; `aiAdmin` resolves that session again for queued actions and event streams.
464
464
  The gateway strips incoming credentials, injects only its own capability on the
465
465
  loopback hop, and revokes it on close/renewal. Local expiry is independent.
466
+
467
+ ### Recovery storage maintenance
468
+
469
+ `RecoveryMaintenance` shares validation between private owner administration and
470
+ MCP invocation. Four new operations use existing read/write compact gateways.
471
+ A durable review binds project, caller/owner role, epoch, root identity, policy and
472
+ selection. Apply runs in the project mutation queue and rechecks protected references
473
+ under the SQLite write lock. AI apply requires a scoped owner approval regardless
474
+ of trust. Review/result state and pending cleanup files have separate durable tables.
475
+
476
+ Logical deletion and pending file tasks commit together before physical cleanup.
477
+ Cleanup removes only private, unreferenced manifests/objects; installation reservations
478
+ protect concurrent publishers. Failures retain tasks and accounting, and explicit
479
+ pending cleanup retries do not repeat logical deletion. CAS reuse skips staging of
480
+ unchanged content but retains fresh source/object verification. Reservation estimation
481
+ and reservation insertion hold one installation write lock against concurrent GC.
@@ -113,3 +113,12 @@ Protocol fixtures ครอบคลุม Responses, Gemini Interactions, Anthr
113
113
  และ Ollama Native ทั้งเจ็ด presets ซึ่งไม่เท่ากับ live API/model compatibility ของแต่ละ
114
114
  account Session credentials ใช้ได้โดยไม่ต้อง Keychain; persistent Keychain ตรวจบน macOS
115
115
  Linux Docker และ live providers ต้องดูผลแยกใน TEST_REPORT ไม่ใช้ผล macOS แทน
116
+
117
+ ## 1.3.2 validation scope
118
+
119
+ Recovery maintenance was validated on macOS with the complete core suite, real
120
+ Chromium desktop/narrow fixtures and freshly installed npm tarballs. Native
121
+ Linux/Windows CI for this patch is deferred to the next release by owner decision;
122
+ prior platform results are not evidence for these new maintenance paths.
123
+ No platform/security checks were disabled in code. Compact remains 20 tools;
124
+ Full exposes 158 by default or 162 when sub-agent tools are enabled.
@@ -433,3 +433,31 @@ or disaster-recovery success is implied.
433
433
  - Real external AI accounts, physical eight-hour waiting and real Cloudflare
434
434
  routes are MANUAL_NOT_RUN for this patch unless separately recorded. Automated
435
435
  tests advance the server clock and use isolated HTTP/browser fixtures.
436
+
437
+ ## 1.3.2 Recovery maintenance
438
+
439
+ Use a disposable registered project and separate private state. Never test cleanup
440
+ against production backup history.
441
+
442
+ - Create several checkpoints with an unchanged large fixture under `models/`.
443
+ Compare logical checkpoint totals to unique source objects and separate Git copies.
444
+ - Select an old unprotected checkpoint. Preview, cancel confirmation, and verify
445
+ no deletion. Confirm a fresh preview and verify its manifest/history are removed,
446
+ current source is unchanged, and actual reclaimed bytes match deleted files.
447
+ - Pin a point or prepare a restore after preview: applying the old preview must fail.
448
+ Latest/baseline/named/deployment/database-linked points must remain protected.
449
+ - Set an exclusion `models/` and a project quota through the policy preview. Verify
450
+ old checkpoints remain intact and a new checkpoint omits the directory. Inspect
451
+ project/installation/free-floor limits separately if capture still refuses quota.
452
+ - Simulate a locked backup file in fixture state. Logical cleanup must report pending
453
+ physical cleanup; unlock and explicitly review pending cleanup to reclaim it.
454
+ - From MCP, discover the four `recovery_*` maintenance operations. Read-only tokens
455
+ cannot preview/apply writes, other callers cannot delete each other's checkpoints,
456
+ and write-capable trusted callers still require exact owner approval for apply.
457
+ - Retry the same idempotency key and inspect the plan receipt after reconnect.
458
+ Do not infer success or repeat side effects after an uncertain response.
459
+ - Check desktop/narrow layout, keyboard focus, error and empty states. Verify the
460
+ private UI remains authenticated and no public admin endpoint is introduced.
461
+
462
+ Automated Chromium coverage is distinct from a manual test in an actual AI client.
463
+ Native Windows/Linux and production project cleanup are not certified by macOS tests.
package/docs/RECOVERY.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Recovery: source, deployments and private configuration
2
2
 
3
- This documents the 1.3.0 source candidate. Publication and supported-platform
4
- results are recorded separately in [release notes](RELEASE_1.3.0.md) and
3
+ This documents Recovery including the 1.3.2 storage-maintenance additions.
4
+ Publication and platform results are recorded separately in
5
+ [release notes](RELEASE_NOTES.md) and
5
6
  [the test report](TEST_REPORT.md). Source backup is default-on for registered
6
7
  projects; deployment/database/config adapters require separate owner opt-in.
7
8
 
@@ -111,7 +112,7 @@ MCP full operations: `checkpoint_list`, `checkpoint_inspect`, `checkpoint_create
111
112
  `recovery_session_list`, `recovery_session_inspect`, `recovery_session_begin`,
112
113
  `recovery_session_end`, `restore_preview`, `restore_apply`, `restore_status`.
113
114
  Use the existing `dodo_read` and `dodo_write` compact gateways and discover schemas.
114
- Full catalog: 158 capabilities (154 with sub-agents hidden); Compact remains 20.
115
+ Full catalog: 162 capabilities (158 with sub-agents hidden); Compact remains 20.
115
116
  Gateway arguments cannot override top-level workspace/project/recovery context.
116
117
 
117
118
  For several edits belonging to one task, call `recovery_session_begin`, then pass
@@ -200,10 +201,74 @@ refused rather than overwritten. Pins and active names both protect retention.
200
201
  Unpinning a named point alone will not delete it. Old/new name changes appear in
201
202
  owner history. Naming never rewrites source or the snapshot manifest.
202
203
 
203
- Advanced settings include **ดู preview การล้างตาม retention**. It shows eligible
204
- points and why others are retained without deleting anything. Shared objects,
205
- Git copies and orphan grace periods mean the logical byte total is not immediate
206
- free disk space. This version does not expose a manual destructive purge.
204
+ The **จัดการพื้นที่ Recovery** panel provides reviewed manual cleanup, retention
205
+ cleanup and retry of pending physical cleanup. It reports unique source object
206
+ bytes separately from Git copies and the logical checkpoint total. Checkpoints
207
+ with unchanged content share objects; adding their logical sizes does not measure
208
+ actual disk use. Unchanged objects are freshly verified and reused without writing
209
+ another staging copy. Git copies are separate and can consume additional space.
210
+
211
+ To manage a project such as `my-project`:
212
+
213
+ 1. Open the private Config link, select the registered project, then Recovery.
214
+ 2. Inspect actual source/Git usage and project/installation quotas. A quota refusal
215
+ can also mean the installation limit or minimum free disk space was reached.
216
+ 3. Select old checkpoints, click **ตรวจแผนลบสำเนาที่เลือก**, review the exact IDs
217
+ and closed sessions, then confirm. This permanently removes those backups and
218
+ their closed session history, never the current project files.
219
+ 4. For future backups, expand **โควตา ระยะเก็บ และโฟลเดอร์ที่ไม่สำรอง**. Increase
220
+ the project quota or put `models/` on its own exclusion line, review and confirm.
221
+ Exclusions are literal relative file/directory prefixes, not glob patterns.
222
+ 5. Create a checkpoint and inspect its coverage. Old backups still contain the
223
+ previously included files until separately deleted. Changing settings alone
224
+ does not certify readiness, acknowledge drift or repair a corrupt backup.
225
+
226
+ Excluded files are not restorable from future checkpoints. When an operation
227
+ requires a before-image of an excluded file, DODO refuses it rather than silently
228
+ editing without protection. Shell commands can still change excluded data; a
229
+ source checkpoint is not a full machine/data backup or an OS sandbox.
230
+
231
+ Current/latest source checkpoints, drift baselines, pins, names, active captures,
232
+ open sessions, unfinished work, live restore plans, deployment provenance and
233
+ DB compatibility bindings remain protected. Deleting a closed session requires
234
+ selecting all its checkpoints. Retention cleanup remains subject to the same
235
+ protections. Lowering retention can remove older eligible history at a later
236
+ capture; it is not a guarantee to keep exactly N points.
237
+
238
+ Cleanup previews expire after 15 minutes and are bound to project, epoch, caller,
239
+ policy and the reviewed selection. Changes to protection/history require a fresh
240
+ preview. File deletion failures retain durable cleanup tasks. **เก็บกวาดไฟล์ค้าง**
241
+ retries those tasks explicitly; shared objects are never removed while referenced
242
+ or while an installation capture is active. Results separate logical deletion,
243
+ source bytes freed, Git bytes freed and pending files. Accounting excludes filesystem
244
+ overhead and temporary staging; it is not a claim about total disk free space.
245
+
246
+ ### AI-assisted storage maintenance
247
+
248
+ Four Full operations are also available through existing Compact gateways:
249
+
250
+ | Operation | Gateway | Scope / authority |
251
+ | --- | --- | --- |
252
+ | `recovery_storage_status` | `dodo_read` | Read; caller-owned checkpoint metadata, quota/storage totals, or a plan receipt |
253
+ | `recovery_cleanup_preview` | `dodo_write` | Write; selected IDs, retention, or pending-file cleanup; no deletion |
254
+ | `recovery_settings_preview` | `dodo_write` | Write; project quota, retention and exclusions only; no policy change |
255
+ | `recovery_maintenance_apply` | `dodo_write` | Write plus exact owner approval, including in trusted mode |
256
+
257
+ Use `project_overview` and `dodo_discover` to obtain current context and schemas.
258
+ For example, `dodo_write` with `operation: "recovery_settings_preview"` and
259
+ `args: {"changes":{"excludePaths":["models/"],"projectBytes":8589934592}}` proposes
260
+ an 8 GiB quota and exclusion. It grants no permission. Review the returned plan,
261
+ then apply with its exact `planId`, `planHash` and an `idempotencyKey` after owner
262
+ approval. Keep project/workspace context at the gateway top level.
263
+
264
+ An MCP caller can delete only its own checkpoint history; the authenticated owner
265
+ web UI can manage all checkpoints in the selected project. AI cannot unpin points,
266
+ remove names, disable Recovery, change storage destinations, approve its own action,
267
+ relax secret/path guards or accept corruption as a new baseline. Approved plan
268
+ retries return a durable receipt. Query `recovery_storage_status` with `planId`
269
+ after an uncertain response; never silently repeat destructive operations.
270
+ A crash after logical deletion may leave physical cleanup pending; review pending
271
+ cleanup explicitly. Recovery maintenance never reruns a failed source command.
207
272
 
208
273
  Owner CLI, in the registered project's directory:
209
274
 
@@ -218,7 +283,7 @@ dodo recovery mark stable SNAPSHOT_ID --revision REVIEWED_REVISION --workspace W
218
283
 
219
284
  After browser reconnect, refresh evidence and query the existing restore receipt.
220
285
  Do not repeat uncertain effects. These are private owner controls; MCP/public
221
- HTTP has no mark/pin/purge endpoint. Without an owner-registered deployment target its state is **NOT_CONFIGURED**;
286
+ HTTP has no public owner mark/pin/admin endpoint; reviewed MCP maintenance remains caller-bound and owner-approved. Without an owner-registered deployment target its state is **NOT_CONFIGURED**;
222
287
  database row rollback remains **NOT_SUPPORTED**. Optional adapters are described below. Windows/Android and live
223
288
  production recovery require their own acceptance; results from macOS/Linux
224
289
  fixtures are not substitutes.
@@ -0,0 +1,50 @@
1
+ # DODO MCP 1.3.2
2
+
3
+ ## Recovery storage management
4
+
5
+ The project Recovery dashboard can now preview and confirm deletion of old
6
+ checkpoints, retry pending file cleanup, change project quotas/retention, and exclude
7
+ relative paths such as `models/` from future backups. It distinguishes logical
8
+ checkpoint totals from unique source objects and separate Git copies. Verified
9
+ unchanged objects are reused without another staging copy.
10
+
11
+ Protected/current baselines, pinned/named points and referenced recovery history
12
+ remain protected. Cleanup never edits project source. Unlink failures remain pending,
13
+ and live capture reservations prevent deletion of objects another project is using.
14
+ Changing exclusions does not delete older backups or acknowledge source drift.
15
+
16
+ Four operations are available through existing Compact read/write gateways:
17
+ `recovery_storage_status`, `recovery_cleanup_preview`, `recovery_settings_preview`
18
+ and `recovery_maintenance_apply`. AI apply requires exact owner approval even in
19
+ trusted mode. OAuth, ACL, caller ownership, workspace/epoch, path guards and
20
+ idempotency remain authoritative. Full has 162 definitions (158 by default);
21
+ Compact stays at 20.
22
+
23
+ ## Upgrade
24
+
25
+ ```sh
26
+ npm install -g dodo-mcp@1.3.2
27
+ dodo --version
28
+ ```
29
+
30
+ Restart your foreground DODO process once to load the update, reopen Config, and
31
+ select the project → Recovery → จัดการพื้นที่ Recovery. Refresh/rescan the MCP
32
+ connection so its gateway operation schemas include the new capabilities.
33
+
34
+ Private state gains maintenance review and cleanup-task tables on first open;
35
+ existing backup data and access scopes are preserved. Keep CLI/server versions
36
+ aligned: older DODO versions refuse a state database with newer migrations.
37
+ See the [Recovery guide](RECOVERY.md) for the review/confirmation flow and
38
+ limits on excluded files, retention and shared storage.
39
+
40
+ ## Verification
41
+
42
+ AUTOMATED_PASS on macOS: build, typecheck, lint, core 926 passed / 40 skipped /
43
+ 0 failed; packaging 17 passed, including an installed CLI approval and Compact
44
+ maintenance flow. Real Chromium exercised desktop and 390px screens. Production
45
+ dependency audit reported zero vulnerabilities.
46
+
47
+ Native Linux/Windows CI, live AI clients and production checkpoint cleanup are
48
+ MANUAL_NOT_RUN for this patch. The owner explicitly chose publication with the
49
+ completed macOS checks and deferred the remaining platform tests to the next release.
50
+ No production process, tunnel or backup history was changed by release validation.
@@ -1,5 +1,15 @@
1
1
  # DODO MCP — Release Notes
2
2
 
3
+ ## 1.3.2 — Recovery storage management
4
+
5
+ Adds owner-reviewed checkpoint cleanup, pending-file retry, project quotas and
6
+ explicit exclusions in the web dashboard. Four caller-bound MCP maintenance
7
+ operations use existing Compact gateways; destructive/settings apply still needs
8
+ owner approval. Shows unique source objects separately from Git copies and logical
9
+ checkpoint sizes. Reuses verified unchanged CAS objects without restaging them.
10
+ See [Recovery usage](RECOVERY.md), [upgrade details](RELEASE_1.3.2.md) and [validation results](TEST_REPORT.md).
11
+ This patch uses the completed macOS gate; native Linux/Windows CI is explicitly deferred to the next release.
12
+
3
13
  ## 1.3.1 — Independent Remote Config sessions
4
14
 
5
15
  `dodo --web` now creates an independent one-hour owner session even after the local
package/docs/SECURITY.md CHANGED
@@ -464,3 +464,20 @@ in a remote URL or returned by state APIs. AI owner principals, streaming reques
464
464
  and queued owner revalidation use the authenticated request session, not the
465
465
  server start time. Loopback, Host/Origin, proxy-header rejection, rate limits,
466
466
  workspace/epoch checks and public MCP OAuth remain enforced.
467
+
468
+ ### Reviewed Recovery maintenance
469
+
470
+ Storage status and previews are bounded and reveal no credentials or private backup
471
+ paths. MCP checkpoint access remains caller-owned and workspace-bound. Cleanup/settings
472
+ apply requires `dodo:write`, live ACL/context and a separate exact owner approval even
473
+ in trusted mode. A review or discover result does not authorize apply. Settings are
474
+ limited to project quota, retention and canonical relative exclusions; they cannot
475
+ turn off Recovery, acknowledge drift or change private storage/installation authority.
476
+
477
+ The private owner dashboard requires its authenticated, expiring session and current
478
+ workspace context for confirmed apply. Public MCP has no administration endpoints.
479
+ Cleanup protects current baselines, pins, names and active references, and never edits
480
+ source files. Pending cleanup only processes stored private references, not paths
481
+ supplied by callers. Shared objects and active installation captures block reclamation;
482
+ I/O failure is reported as pending rather than successful deletion. No integrity
483
+ failure is silently repaired by accepting the current source.
@@ -1,5 +1,33 @@
1
1
  # DODO MCP — Test Report
2
2
 
3
+ ## 1.3.2 Recovery maintenance — macOS release gate, 2026-09-25
4
+
5
+ `AUTOMATED_PASS` on macOS: build, typecheck and lint; full core suite **926 passed,
6
+ 40 skipped, 0 failed** across 145 files (140 passed, 5 skipped). Packaging **17
7
+ passed**, including fresh tarball install and real Compact MCP calls that request
8
+ owner approval, approve via the installed CLI, clean a checkpoint, set an exclusion
9
+ and read the resulting policy. `npm run test:all` exited 0; the extended packaging
10
+ smoke, typecheck and lint were rerun successfully afterward.
11
+
12
+ The 13 new security/integration cases cover CAS reuse with integrity checking,
13
+ logical versus unique storage, actual reclamation including independent Git copies,
14
+ protected/current checkpoints, caller ownership, partial closed sessions, read-only
15
+ OAuth refusal, stale context, nested override, live ACL revocation, exact approvals,
16
+ receipt replay, explicit exclusions, pending unlink retry, cross-project sharing,
17
+ active reservations, unsafe hardlinks and queued authority changes. Existing migration
18
+ fixtures retain assertions for scope/revocation preservation across old schemas.
19
+
20
+ Real Chromium exercised the owner UI on desktop and 390px screens with private
21
+ fixtures, confirming checkpoint deletion and `models/` policy persistence. CSP was
22
+ kept unchanged. Tarball checks include the new UI/service and exclude private state,
23
+ credentials, development documents and release evidence. Complete Full capability
24
+ count is **162**, default Full **158**, Compact **20**, Hybrid **49**.
25
+
26
+ `MANUAL_NOT_RUN`: production checkpoint cleanup, actual AI-client interaction, and
27
+ native Linux/Windows CI for this change. The owner explicitly accepted the completed
28
+ macOS gate and deferred the remaining platform tests to the next release. No production
29
+ server was restarted. Automated fixture approval is not approval for production.
30
+
3
31
  ## 1.3.1 Config regression coverage
4
32
 
5
33
  `tests/security/remoteConfig.test.ts` reproduces the previous HTTP 401 after advancing
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dodo-mcp",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
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",
@@ -53,6 +53,7 @@
53
53
  "docs/RELEASE_1.2.1.md",
54
54
  "docs/RELEASE_1.3.0.md",
55
55
  "docs/RELEASE_1.3.1.md",
56
+ "docs/RELEASE_1.3.2.md",
56
57
  "docs/RELEASE_NOTES.md",
57
58
  "docs/SCHEDULES.md",
58
59
  "docs/SECURITY.md",
@@ -3,8 +3,8 @@
3
3
  "version": 1,
4
4
  "toolCount": 20,
5
5
  "defaultLiveToolCount": 20,
6
- "fullToolCount": 158,
7
- "defaultLiveFullToolCount": 154,
6
+ "fullToolCount": 162,
7
+ "defaultLiveFullToolCount": 158,
8
8
  "optionalMcpFeatures": {
9
9
  "subagents": {
10
10
  "configKey": "exposeSubagentsToMcp",
@@ -21,15 +21,15 @@
21
21
  "stats": {
22
22
  "compact": {
23
23
  "toolCount": 20,
24
- "schemaBytes": 63349
24
+ "schemaBytes": 63565
25
25
  },
26
26
  "hybrid": {
27
27
  "toolCount": 49,
28
- "schemaBytes": 144231
28
+ "schemaBytes": 144447
29
29
  },
30
30
  "full": {
31
- "toolCount": 158,
32
- "schemaBytes": 572388
31
+ "toolCount": 162,
32
+ "schemaBytes": 582689
33
33
  }
34
34
  },
35
35
  "tools": [
@@ -360,7 +360,7 @@
360
360
  {
361
361
  "name": "dodo_read",
362
362
  "title": "Read workspace state",
363
- "description": "Gateway: read-only workspace access: files, search, symbols, jobs, history and agent notes. Set operation to one of: list_files, read_files, read_image, read_instructions, search_code, glob_files, symbols, references, diagnostics, change_history, approval_status, environment_info, todo_read, handoff_read, job_status, job_output, job_wait, list_jobs, restore_status, checkpoint_list, checkpoint_inspect, recovery_session_list, recovery_session_inspect, deployment_targets, deployment_list, deployment_inspect, deployment_compare. Put that operation's own arguments in args (never workspaceId/workspaceEpoch — they come from the top level only). Identical authorization to calling the operation directly: its own OAuth scope, workspace access, trust policy, local approvals, path/secret guards, hash checks and audit all apply. Call dodo_discover with operation=\"<name>\" for the exact input schema.",
363
+ "description": "Gateway: read-only workspace access: files, search, symbols, jobs, history and agent notes. Set operation to one of: list_files, read_files, read_image, read_instructions, search_code, glob_files, symbols, references, diagnostics, change_history, approval_status, environment_info, todo_read, handoff_read, job_status, job_output, job_wait, list_jobs, recovery_storage_status, restore_status, checkpoint_list, checkpoint_inspect, recovery_session_list, recovery_session_inspect, deployment_targets, deployment_list, deployment_inspect, deployment_compare. Put that operation's own arguments in args (never workspaceId/workspaceEpoch — they come from the top level only). Identical authorization to calling the operation directly: its own OAuth scope, workspace access, trust policy, local approvals, path/secret guards, hash checks and audit all apply. Call dodo_discover with operation=\"<name>\" for the exact input schema.",
364
364
  "requiredScope": "dodo:read",
365
365
  "annotations": {
366
366
  "readOnlyHint": true,
@@ -388,6 +388,7 @@
388
388
  "job_output",
389
389
  "job_wait",
390
390
  "list_jobs",
391
+ "recovery_storage_status",
391
392
  "restore_status",
392
393
  "checkpoint_list",
393
394
  "checkpoint_inspect",
@@ -452,6 +453,7 @@
452
453
  "job_output",
453
454
  "job_wait",
454
455
  "list_jobs",
456
+ "recovery_storage_status",
455
457
  "restore_status",
456
458
  "checkpoint_list",
457
459
  "checkpoint_inspect",
@@ -582,7 +584,7 @@
582
584
  {
583
585
  "name": "dodo_write",
584
586
  "title": "Change workspace files",
585
- "description": "Gateway: hash-verified, journaled file changes: write/edit/patch, preview→apply→rollback, todos and handoff. Set operation to one of: write_file, edit_file, apply_patch, replace_in_files, delete_path, move_path, make_directory, preview_changes, apply_changes, rollback_changes, preview_rename, todo_write, handoff_write, agent_write, agent_snapshot_rollback, checkpoint_create, recovery_session_begin, recovery_session_end, restore_preview, restore_apply. Put that operation's own arguments in args (never workspaceId/workspaceEpoch — they come from the top level only). Identical authorization to calling the operation directly: its own OAuth scope, workspace access, trust policy, local approvals, path/secret guards, hash checks and audit all apply. Call dodo_discover with operation=\"<name>\" for the exact input schema.",
587
+ "description": "Gateway: hash-verified, journaled file changes: write/edit/patch, preview→apply→rollback, todos and handoff. Set operation to one of: write_file, edit_file, apply_patch, replace_in_files, delete_path, move_path, make_directory, preview_changes, apply_changes, rollback_changes, preview_rename, todo_write, handoff_write, agent_write, agent_snapshot_rollback, recovery_cleanup_preview, recovery_settings_preview, recovery_maintenance_apply, checkpoint_create, recovery_session_begin, recovery_session_end, restore_preview, restore_apply. Put that operation's own arguments in args (never workspaceId/workspaceEpoch — they come from the top level only). Identical authorization to calling the operation directly: its own OAuth scope, workspace access, trust policy, local approvals, path/secret guards, hash checks and audit all apply. Call dodo_discover with operation=\"<name>\" for the exact input schema.",
586
588
  "requiredScope": "dodo:write",
587
589
  "annotations": {
588
590
  "readOnlyHint": false,
@@ -607,6 +609,9 @@
607
609
  "handoff_write",
608
610
  "agent_write",
609
611
  "agent_snapshot_rollback",
612
+ "recovery_cleanup_preview",
613
+ "recovery_settings_preview",
614
+ "recovery_maintenance_apply",
610
615
  "checkpoint_create",
611
616
  "recovery_session_begin",
612
617
  "recovery_session_end",
@@ -664,6 +669,9 @@
664
669
  "handoff_write",
665
670
  "agent_write",
666
671
  "agent_snapshot_rollback",
672
+ "recovery_cleanup_preview",
673
+ "recovery_settings_preview",
674
+ "recovery_maintenance_apply",
667
675
  "checkpoint_create",
668
676
  "recovery_session_begin",
669
677
  "recovery_session_end",
@@ -34,8 +34,8 @@
34
34
  "job_wait",
35
35
  "job_cancel"
36
36
  ],
37
- "fullToolCount": 158,
38
- "defaultLiveFullToolCount": 154,
37
+ "fullToolCount": 162,
38
+ "defaultLiveFullToolCount": 158,
39
39
  "optionalMcpFeatures": {
40
40
  "subagents": {
41
41
  "configKey": "exposeSubagentsToMcp",
@@ -52,15 +52,15 @@
52
52
  "stats": {
53
53
  "compact": {
54
54
  "toolCount": 20,
55
- "schemaBytes": 63349
55
+ "schemaBytes": 63565
56
56
  },
57
57
  "hybrid": {
58
58
  "toolCount": 49,
59
- "schemaBytes": 144231
59
+ "schemaBytes": 144447
60
60
  },
61
61
  "full": {
62
- "toolCount": 158,
63
- "schemaBytes": 572388
62
+ "toolCount": 162,
63
+ "schemaBytes": 582689
64
64
  }
65
65
  },
66
66
  "tools": [
@@ -391,7 +391,7 @@
391
391
  {
392
392
  "name": "dodo_read",
393
393
  "title": "Read workspace state",
394
- "description": "Gateway: read-only workspace access: files, search, symbols, jobs, history and agent notes. Set operation to one of: list_files, read_files, read_image, read_instructions, search_code, glob_files, symbols, references, diagnostics, change_history, approval_status, environment_info, todo_read, handoff_read, job_status, job_output, job_wait, list_jobs, restore_status, checkpoint_list, checkpoint_inspect, recovery_session_list, recovery_session_inspect, deployment_targets, deployment_list, deployment_inspect, deployment_compare. Put that operation's own arguments in args (never workspaceId/workspaceEpoch — they come from the top level only). Identical authorization to calling the operation directly: its own OAuth scope, workspace access, trust policy, local approvals, path/secret guards, hash checks and audit all apply. Call dodo_discover with operation=\"<name>\" for the exact input schema.",
394
+ "description": "Gateway: read-only workspace access: files, search, symbols, jobs, history and agent notes. Set operation to one of: list_files, read_files, read_image, read_instructions, search_code, glob_files, symbols, references, diagnostics, change_history, approval_status, environment_info, todo_read, handoff_read, job_status, job_output, job_wait, list_jobs, recovery_storage_status, restore_status, checkpoint_list, checkpoint_inspect, recovery_session_list, recovery_session_inspect, deployment_targets, deployment_list, deployment_inspect, deployment_compare. Put that operation's own arguments in args (never workspaceId/workspaceEpoch — they come from the top level only). Identical authorization to calling the operation directly: its own OAuth scope, workspace access, trust policy, local approvals, path/secret guards, hash checks and audit all apply. Call dodo_discover with operation=\"<name>\" for the exact input schema.",
395
395
  "requiredScope": "dodo:read",
396
396
  "annotations": {
397
397
  "readOnlyHint": true,
@@ -419,6 +419,7 @@
419
419
  "job_output",
420
420
  "job_wait",
421
421
  "list_jobs",
422
+ "recovery_storage_status",
422
423
  "restore_status",
423
424
  "checkpoint_list",
424
425
  "checkpoint_inspect",
@@ -483,6 +484,7 @@
483
484
  "job_output",
484
485
  "job_wait",
485
486
  "list_jobs",
487
+ "recovery_storage_status",
486
488
  "restore_status",
487
489
  "checkpoint_list",
488
490
  "checkpoint_inspect",
@@ -613,7 +615,7 @@
613
615
  {
614
616
  "name": "dodo_write",
615
617
  "title": "Change workspace files",
616
- "description": "Gateway: hash-verified, journaled file changes: write/edit/patch, preview→apply→rollback, todos and handoff. Set operation to one of: write_file, edit_file, apply_patch, replace_in_files, delete_path, move_path, make_directory, preview_changes, apply_changes, rollback_changes, preview_rename, todo_write, handoff_write, agent_write, agent_snapshot_rollback, checkpoint_create, recovery_session_begin, recovery_session_end, restore_preview, restore_apply. Put that operation's own arguments in args (never workspaceId/workspaceEpoch — they come from the top level only). Identical authorization to calling the operation directly: its own OAuth scope, workspace access, trust policy, local approvals, path/secret guards, hash checks and audit all apply. Call dodo_discover with operation=\"<name>\" for the exact input schema.",
618
+ "description": "Gateway: hash-verified, journaled file changes: write/edit/patch, preview→apply→rollback, todos and handoff. Set operation to one of: write_file, edit_file, apply_patch, replace_in_files, delete_path, move_path, make_directory, preview_changes, apply_changes, rollback_changes, preview_rename, todo_write, handoff_write, agent_write, agent_snapshot_rollback, recovery_cleanup_preview, recovery_settings_preview, recovery_maintenance_apply, checkpoint_create, recovery_session_begin, recovery_session_end, restore_preview, restore_apply. Put that operation's own arguments in args (never workspaceId/workspaceEpoch — they come from the top level only). Identical authorization to calling the operation directly: its own OAuth scope, workspace access, trust policy, local approvals, path/secret guards, hash checks and audit all apply. Call dodo_discover with operation=\"<name>\" for the exact input schema.",
617
619
  "requiredScope": "dodo:write",
618
620
  "annotations": {
619
621
  "readOnlyHint": false,
@@ -638,6 +640,9 @@
638
640
  "handoff_write",
639
641
  "agent_write",
640
642
  "agent_snapshot_rollback",
643
+ "recovery_cleanup_preview",
644
+ "recovery_settings_preview",
645
+ "recovery_maintenance_apply",
641
646
  "checkpoint_create",
642
647
  "recovery_session_begin",
643
648
  "recovery_session_end",
@@ -695,6 +700,9 @@
695
700
  "handoff_write",
696
701
  "agent_write",
697
702
  "agent_snapshot_rollback",
703
+ "recovery_cleanup_preview",
704
+ "recovery_settings_preview",
705
+ "recovery_maintenance_apply",
698
706
  "checkpoint_create",
699
707
  "recovery_session_begin",
700
708
  "recovery_session_end",