node-autotask 0.26.0 → 0.28.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.
- package/CHANGELOG.md +83 -0
- package/MCP_TOOL_CATALOG.json +941 -14
- package/MCP_TOOL_MANIFEST.md +71 -16
- package/N8N_MCP_MANIFEST.json +91 -10
- package/N8N_MCP_MANIFEST.md +14 -11
- package/README.md +11 -9
- package/capabilities.json +13623 -7738
- package/capabilities.schema.json +125 -0
- package/dist/capabilities.cjs +2 -2
- package/dist/capabilities.js +1 -1
- package/dist/{chunk-QXWIQ67O.js → chunk-6EQSXYRW.js} +13622 -7737
- package/dist/{chunk-HQGE4WAV.cjs → chunk-D5IVS6GY.cjs} +1054 -235
- package/dist/{chunk-5OGJTS2E.cjs → chunk-GUY2KK7U.cjs} +157 -136
- package/dist/{chunk-SSUECUVN.js → chunk-IRVZGW5K.js} +947 -128
- package/dist/{chunk-7DOSJS6S.js → chunk-O2D7KDDD.js} +23 -2
- package/dist/{chunk-VVQ6NJYZ.js → chunk-SYX6EWMT.js} +694 -76
- package/dist/{chunk-SG4LIVMG.cjs → chunk-WYKGD5UD.cjs} +1189 -571
- package/dist/{chunk-WM6E5O55.cjs → chunk-ZEGMVEF3.cjs} +13622 -7737
- package/dist/{index-CKYr0unq.d.cts → index-CORcZUNm.d.cts} +457 -50
- package/dist/{index-1zBdJIEy.d.cts → index-DQ9NgraW.d.cts} +281 -1
- package/dist/{index-1zBdJIEy.d.ts → index-DQ9NgraW.d.ts} +281 -1
- package/dist/{index-C8QH3BkP.d.ts → index-DXuV04zM.d.ts} +457 -50
- package/dist/index.cjs +44 -24
- package/dist/index.d.cts +11 -5
- package/dist/index.d.ts +11 -5
- package/dist/index.js +26 -6
- package/dist/operations/index.cjs +147 -120
- package/dist/operations/index.d.cts +136 -7
- package/dist/operations/index.d.ts +136 -7
- package/dist/operations/index.js +33 -6
- package/dist/pool.cjs +42 -9
- package/dist/pool.d.cts +14 -3
- package/dist/pool.d.ts +14 -3
- package/dist/pool.js +38 -5
- package/dist/resources/index.cjs +19 -5
- package/dist/resources/index.d.cts +2 -2
- package/dist/resources/index.d.ts +2 -2
- package/dist/resources/index.js +18 -4
- package/dist/types/index.cjs +1 -1
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.js +1 -1
- package/docs/API.md +246 -10
- package/examples/mcp/schemas.ts +16 -7
- package/package.json +1 -1
- /package/dist/{chunk-S643FDOR.cjs → chunk-IXF7AKOJ.cjs} +0 -0
- /package/dist/{chunk-2TWKEB2L.js → chunk-RMG55JTF.js} +0 -0
- /package/dist/{chunk-W3K5BEVY.cjs → chunk-SDYRQFGL.cjs} +0 -0
- /package/dist/{chunk-EBCHCNPK.js → chunk-WLTLB2ND.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,89 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.28.0] - 2026-10-26
|
|
11
|
+
|
|
12
|
+
Minor: two new operations and one plan-recorded fact. The plan hash moves `7318bd56…` -> `ebbd6f31…`, so a consumer
|
|
13
|
+
re-pins once. The pending 0.27.1 schema-text fix rides in this release (0.27.1 was never published).
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **`tickets.forResource(resourceID, opts?)` (#225)** — the tickets one resource is on, as primary assignee, secondary
|
|
18
|
+
resource, or both (`scope`, default `both`), de-duplicated, with `primaryIds` / `secondaryIds` / `bothIds`,
|
|
19
|
+
`counts: { primary, secondary, both, open }`, `capped`, `unresolvedIds` and the `closedStatus` disclosure.
|
|
20
|
+
The vendor exposes no such join: `Tickets.assignedResourceID` is the primary owner only and `TicketSecondaryResources`
|
|
21
|
+
is a five-field link table with no status. Two bounded reads plus chunked `id in` (100 per read) do the join
|
|
22
|
+
client-side, the `time_entries.recentTickets` way — **not** the grouped cross-field `or`, whose live vendor semantics
|
|
23
|
+
are unverified.
|
|
24
|
+
- **`tickets.statusSemantics(opts?)` (#226)** — resolves which status ids mean closed in *this* tenant from the live
|
|
25
|
+
`Tickets` status picklist (through the field-metadata cache, so a warm catalog is zero wire) and reports
|
|
26
|
+
`{ picklist, closedIds, source: 'picklist' | 'assumed', note }`. `excludeStatusIds` lets a caller decide.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **No module-level ticket-status literal remains.** `TICKET_COMPLETE_STATUS = 5` is gone from `move-engine.ts`; the
|
|
31
|
+
`MOVE_TARGET_CLOSED` refusal and `companies.fullProfile`'s `openTickets` part both consume the resolved set and carry
|
|
32
|
+
the disclosure (`closedStatusIds` / `closedStatusSource`, or the part `note`). When the picklist cannot be read, id 5
|
|
33
|
+
still stands in — but `source: 'assumed'` and the note say so in the output.
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
- **`time_entries.approve` described its `id` as "the time-off request id".** The special-op argument map is keyed by
|
|
38
|
+
verb, and `time_off_requests.approve` owns `approve`; a new `SPECIAL_OP_ARG_RESOURCE_OVERRIDES` map (the special-op
|
|
39
|
+
mirror of the per-resource window override) re-keys a shared verb by resource and wins wholesale over the shared entry.
|
|
40
|
+
|
|
41
|
+
### Known
|
|
42
|
+
|
|
43
|
+
- 28 helpers still declare `outputSchema: { type: 'void' }` while returning values; fixing that needs its own plan move
|
|
44
|
+
(issue #224).
|
|
45
|
+
|
|
46
|
+
## [0.27.0] - 2026-10-26
|
|
47
|
+
|
|
48
|
+
Matched release with iit-mcp-autotask 0.27.0. The plan hash moves `930b907e…` -> `7318bd56…`, so this is a minor
|
|
49
|
+
bump. Three batches were batched into one release deliberately: every plan edit costs a consumer one re-pin, one
|
|
50
|
+
`BUILT_AGAINST_PLAN_HASH` re-stamp and one catalog rebuild, so they share a single hash move.
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
|
|
54
|
+
- **Time-entry approval (#221).** `billing_item_approval_levels` (`create`, `query`, `queryAll`, `count`, `get`) —
|
|
55
|
+
the only REST approval write the vendor exposes — plus `timeEntries.approve(id, opts)`, which runs the documented
|
|
56
|
+
two-step in one call (create the approval level, then update the entry's `billingApprovalDateTime` /
|
|
57
|
+
`billingApprovalResourceID`) and reports `status: 'approved' | 'approval_fields_not_persisted'` with the resulting
|
|
58
|
+
`billingApprovalLevelMostRecent`. Non-persistence is a result, not an error: the approval-level row is the durable
|
|
59
|
+
half and has no DELETE. **Posting is not here and cannot be**: `BillingItems` has no create.
|
|
60
|
+
- **Six reference-target resources (#220).** `tax_regions`, `invoice_templates`, `sales_orders`,
|
|
61
|
+
`organizational_level_associations`, `organizational_level1s`, `organizational_level2s`. Vendor asymmetries kept:
|
|
62
|
+
`invoice_templates` is read-only; `sales_orders` has no create; none of the six has a DELETE.
|
|
63
|
+
- **`referenceTargets` plan block (#219 N5).** Eight association-FK targets: four funded by the resources above, four
|
|
64
|
+
declared `resource: null` / `exposedByVendor: false` with the remedy the caller should follow. Clause 19 validates
|
|
65
|
+
the block.
|
|
66
|
+
- **`targetResource` / `targetEnumerable` on field rows (#219 N1).** Derived from the relationship map's `apiEntity`,
|
|
67
|
+
so `contacts.companyLocationID -> "company_locations"` and `tickets.queueID -> null / false`. A size-pinned test
|
|
68
|
+
fails when a plan resource is added that the map does not cover.
|
|
69
|
+
- **`effectiveRequiredFields()` (#219 N4).** One precedence — live-proven prefix > `createRequiredSet` > vendor
|
|
70
|
+
`isRequired` — with the winning source named on the result.
|
|
71
|
+
- **UDF surface (#219 N7).** `udf-marker` as the filter mechanism (the vendor's `isQueryable` is wrong for UDFs),
|
|
72
|
+
`writeShape` on object/array fields (`userDefinedFields: merge`), and UDF definitions with labels and picklist
|
|
73
|
+
values on the existing `udf` include.
|
|
74
|
+
- **Structured create requirements (#219 N3).** `blocker.requires {anyOf|allOf|noneOf}`, `createGuidance.requiresByValue`
|
|
75
|
+
and `rejectedValues`. `ticket_charges.create` and `project_charges.create` declare
|
|
76
|
+
`anyOf: ["productID","billingCodeID"]`; `contracts.create` declares its per-type requirement ladder. Clause 20 fails
|
|
77
|
+
when a row's evidence states a one-of requirement the row does not declare.
|
|
78
|
+
- **Declared derived fields (#219 N8).** `resources.time_entries.derivedFields` with token rules
|
|
79
|
+
(`elapsed(...)`, `parent`, `mirror(...)`, `external` + `writableRoute`), served on the record metadata, on
|
|
80
|
+
`fieldCatalog` rows and in the create guidance. Clause 21 keeps the artifact token-only.
|
|
81
|
+
|
|
82
|
+
### Changed
|
|
83
|
+
|
|
84
|
+
- **Pooled clients share one read cache (#219 N6).** `ClientPoolOptions.sharedReadCache` defaults to `true`, so a
|
|
85
|
+
read-back routed to another pooled client cannot be served a pre-write snapshot. `sharedReadCache: false` restores
|
|
86
|
+
the per-client caches.
|
|
87
|
+
- **Cross-resource tool schemas carry `x-untrusted: ["*"]`.** The five wildcard tools previously inlined the union of
|
|
88
|
+
every resource's untrusted fields, so the served `tools/list` grew with the catalog and had reached 99.6% of the
|
|
89
|
+
10,000-token budget. `["*"]` states the stronger claim and leaves the per-resource lists as the authority; core
|
|
90
|
+
payload 43,107 B -> 34,467 B.
|
|
91
|
+
|
|
92
|
+
|
|
10
93
|
## [0.26.0] - Unreleased
|
|
11
94
|
|
|
12
95
|
Matched release with iit-mcp-autotask 0.26.0.
|