node-autotask 0.25.0 → 0.27.0

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 (49) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/MCP_TOOL_CATALOG.json +1063 -30
  3. package/MCP_TOOL_MANIFEST.md +82 -24
  4. package/N8N_MCP_MANIFEST.json +39 -8
  5. package/N8N_MCP_MANIFEST.md +9 -8
  6. package/README.md +11 -9
  7. package/capabilities.json +16956 -10596
  8. package/capabilities.schema.json +125 -0
  9. package/dist/capabilities.cjs +2 -2
  10. package/dist/capabilities.js +1 -1
  11. package/dist/{chunk-VUGZKP33.js → chunk-42ZUISDH.js} +997 -136
  12. package/dist/{chunk-WBMRACCV.cjs → chunk-5CC7LGNM.cjs} +16955 -10595
  13. package/dist/{chunk-Z5L7Q33V.cjs → chunk-5GGCSRT4.cjs} +947 -493
  14. package/dist/{chunk-EFR2XWRX.js → chunk-F7FVOXPQ.js} +16955 -10595
  15. package/dist/{chunk-XUB3S6AM.js → chunk-GURC52J7.js} +26 -2
  16. package/dist/{chunk-FKJ77K6Z.cjs → chunk-UHTZLUDE.cjs} +159 -135
  17. package/dist/{chunk-6PIJ6AZG.js → chunk-ZGTFVZL5.js} +478 -24
  18. package/dist/{chunk-2H7YI54B.cjs → chunk-ZJ4ONAQF.cjs} +1084 -223
  19. package/dist/{index-CZ94y401.d.ts → index-BIWy9m-a.d.ts} +414 -49
  20. package/dist/{index-C0OwQhon.d.cts → index-D4XYtn4s.d.cts} +414 -49
  21. package/dist/{index-BVtycq-6.d.cts → index-DQ9NgraW.d.cts} +322 -1
  22. package/dist/{index-BVtycq-6.d.ts → index-DQ9NgraW.d.ts} +322 -1
  23. package/dist/index.cjs +46 -24
  24. package/dist/index.d.cts +11 -5
  25. package/dist/index.d.ts +11 -5
  26. package/dist/index.js +28 -6
  27. package/dist/operations/index.cjs +147 -120
  28. package/dist/operations/index.d.cts +136 -7
  29. package/dist/operations/index.d.ts +136 -7
  30. package/dist/operations/index.js +33 -6
  31. package/dist/pool.cjs +42 -9
  32. package/dist/pool.d.cts +14 -3
  33. package/dist/pool.d.ts +14 -3
  34. package/dist/pool.js +38 -5
  35. package/dist/resources/index.cjs +21 -5
  36. package/dist/resources/index.d.cts +2 -2
  37. package/dist/resources/index.d.ts +2 -2
  38. package/dist/resources/index.js +20 -4
  39. package/dist/types/index.cjs +1 -1
  40. package/dist/types/index.d.cts +1 -1
  41. package/dist/types/index.d.ts +1 -1
  42. package/dist/types/index.js +1 -1
  43. package/docs/API.md +207 -9
  44. package/examples/mcp/schemas.ts +16 -7
  45. package/package.json +3 -3
  46. /package/dist/{chunk-FLB2X6O5.cjs → chunk-IXF7AKOJ.cjs} +0 -0
  47. /package/dist/{chunk-DMMMWO6A.js → chunk-RMG55JTF.js} +0 -0
  48. /package/dist/{chunk-IDPB4N2Q.cjs → chunk-SDYRQFGL.cjs} +0 -0
  49. /package/dist/{chunk-UPQIUWOS.js → chunk-WLTLB2ND.js} +0 -0
package/README.md CHANGED
@@ -4,7 +4,7 @@ Fully-typed TypeScript SDK for the Autotask (Datto) PSA REST API. Zero runtime
4
4
  dependencies. Built for building MCP servers and integrations.
5
5
 
6
6
  The SDK is also the **deterministic execution layer for agents** (ARCHITECTURE
7
- section 19): a generated capability registry (1214 operations across the 121-entity
7
+ section 19): a generated capability registry (1275 operations across the 121-entity
8
8
  MVP set), a mechanical MCP substrate (registry → manifest → overrides → core tier +
9
9
  catalog meta-tool), and a write governor (dry-run-first, destructive
10
10
  confirmation). The SDK boundary also redacts response field values — the
@@ -288,7 +288,9 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
288
288
  destructive ones; the plan-derived `untrustedFields` read tools additionally
289
289
  carry the untrusted-content sentence + the field list as the `x-untrusted`
290
290
  output-schema extension (issue #1 — externally-sourced free text is
291
- marker-wrapped in the projection; the SDK primitives stay raw).
291
+ marker-wrapped in the projection; the SDK primitives stay raw); the
292
+ cross-resource tools carry `["*"]` rather than the union (the per-resource
293
+ lists are the authority, and the served surface has a hard token budget).
292
294
  3. **Overrides** — [`MCP_TOOL_OVERRIDES.json`](./MCP_TOOL_OVERRIDES.json): the ONLY
293
295
  place a curation delta may live (`{ tool, field, newValue, reason }`); silent
294
296
  divergence between projection and curation is a defect; the delta file is reviewed
@@ -344,10 +346,10 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
344
346
  governor place: `src/operations/invoke.ts`).
345
347
 
346
348
  **Harness approval policy (recommended).** Require approval on every tool
347
- whose MCP annotation is `readOnlyHint !== true` — today exactly **256
348
- tools**: the 254 dedicated write/delete tools (198 `effect=write` + 56
349
+ whose MCP annotation is `readOnlyHint !== true` — today exactly **267
350
+ tools**: the 265 dedicated write/delete tools (209 `effect=write` + 56
349
351
  `effect=destructive`, every one of them has a dedicated tool) +
350
- `autotask_write` + `autotask_delete`. The remaining **603 tools** (the 590
352
+ `autotask_write` + `autotask_delete`. The remaining **629 tools** (the 616
351
353
  dedicated read tools + the 10 core read tools + `autotask_read` +
352
354
  `autotask_catalog` + `autotask_describe`) all carry `readOnlyHint: true`
353
355
  and are safe ungated: every op they can route is `effect=read` (zero
@@ -359,7 +361,7 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
359
361
  `contacts.moveToCompany`, `resources.transferOwnership`) require the same
360
362
  confirm inside `autotask_write`. Migration: `autotask_invoke` is REPLACED
361
363
  by `autotask_read`/`autotask_write`/`autotask_delete` — update harness
362
- config (approve the 256 above) and remove any `autotask_invoke` entry. The
364
+ config (approve the 267 above) and remove any `autotask_invoke` entry. The
363
365
  rule is derivable from the registry `effect` column (and the mode tools'
364
366
  fixed annotations) — it never needs a hand-maintained name list.
365
367
 
@@ -413,7 +415,7 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
413
415
  source.
414
416
 
415
417
  7. **Agent QoL surface (the stage-12 issue wave, live-verified on ww29)** —
416
- the zero-wire planning reads `operations.blindSurfaces` (the 116-surface
418
+ the zero-wire planning reads `operations.blindSurfaces` (the 124-surface
417
419
  blind/data inventory) and `operations.createGuidance` (per-child zone
418
420
  facts with verbatim vendor evidence), the bounded live
419
421
  `operations.probeReachability` sweep (confirm-gated, over-cap refuses),
@@ -453,7 +455,7 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
453
455
  ## Partial-update merge (collectionUpdate resources)
454
456
 
455
457
  The vendor's top-level **collection PUT** validates the **FULL model**: a partial body is
456
- rejected with a 500 `Missing Required Field`. This applies to the **40 top-level update ops**
458
+ rejected with a 500 `Missing Required Field`. This applies to the **45 top-level update ops**
457
459
  whose spec defines no item-path write (the `collectionUpdate` class — the flag is derived from
458
460
  `api-docs.json` by the shared `scripts/lib/collection-update.mjs`, stamped into both the
459
461
  generated resource config and the registry record's `metadata.collectionUpdate`, and pinned by
@@ -519,7 +521,7 @@ node-parity paths the vendored swagger lacks, all UNVERIFIED-live this run), and
519
521
  | `npm run capabilities:check` | `scripts/check-capabilities.mjs` — the batch gate (missing/incomplete/stale records → exit 1) |
520
522
  | `npm run public-surface` | `scripts/public-surface.mjs` — capture (`--write`) / verify the public API surface baseline; default mode fails on unannounced removals, **and** checks the BUILT surface: every tsup entry has a matching `exports` key (and vice versa), every declared target was emitted and loads (ESM+CJS), and no runtime dependency leaks into `dist` |
521
523
  | `npm run live-smoke` | `scripts/live-smoke.mjs` — read-only live smoke: 5 vendor probes (5-6 wire calls worst case: 4 GET + 1 bounded query that may walk a 2nd, empty page) + a zero-network shape guard; `--dry` prints the plan with no calls (DRY-RUN-ONLY verdict, exit 0); live via `AUTOTASK_*` env — missing/partial credentials hard-fail exit 2 |
522
- | `npm run live-coverage` | `scripts/live-coverage.mjs` — the live coverage sweep over all 1217 registry ops (`--dry`: full call plan, no calls; live: bounded reads for real, mutations `dryRun: true` only — zero mutating requests, every governor-gated row (the 54 delete dry-runs included) routed through invoke with `confirm`; budget <= 1161 plan-honest / <= 1315 wire-honest worst case) |
524
+ | `npm run live-coverage` | `scripts/live-coverage.mjs` — the live coverage sweep over all 1275 registry ops (`--dry`: full call plan, no calls; live: bounded reads for real, mutations `dryRun: true` only — zero mutating requests, every governor-gated row (the 54 delete dry-runs included) routed through invoke with `confirm`; budget <= 1161 plan-honest / <= 1315 wire-honest worst case) |
523
525
  | `npm run mcp:project` | `scripts/project-mcp-tools.mjs` — mechanical MCP projection → `MCP_TOOL_MANIFEST.md` (`:check` verifies) |
524
526
  | `npm run n8n:project` / `n8n:project:check` | `scripts/project-n8n-mcp.mjs` — the n8n consumer projection from the SAME registry → `N8N_MCP_MANIFEST.json`/`.md` (`--check` rebuilds and diffs; the gate is wired into `verify`) |
525
527
  | `npm run catalog:build` / `catalog:check` | `scripts/build-tool-catalog.mjs` — the catalog meta-tool row data → `MCP_TOOL_CATALOG.json` + mechanical CORE profile (`--check` verifies drift) |