@wirecat/cli-core 0.488.0 → 0.490.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 +112 -0
- package/dist/calendar/cli/index.js +48 -13
- package/dist/calendar/index.d.ts +1 -1
- package/dist/calendar/mcp/index.d.ts +390 -0
- package/dist/calendar/mcp/index.js +50 -12
- package/dist/calendar/reads.d.ts +9 -2
- package/dist/calendar/reads.js +60 -5
- package/dist/calendar/recurrence.d.ts +20 -0
- package/dist/calendar/recurrence.js +74 -0
- package/dist/calendar/sync.d.ts +6 -0
- package/dist/calendar/sync.js +123 -41
- package/dist/calendar/testing/memory.js +90 -7
- package/dist/calendar/testing/sync-contract.js +90 -0
- package/dist/calendar/testing/writer-contract.d.ts +2 -6
- package/dist/calendar/testing/writer-contract.js +157 -29
- package/dist/calendar/testing/writer.d.ts +3 -1
- package/dist/calendar/testing/writer.js +11 -0
- package/dist/calendar/writer.d.ts +20 -3
- package/dist/calendar/writer.js +8 -4
- package/dist/calendar/writes.d.ts +21 -12
- package/dist/calendar/writes.js +259 -20
- package/dist/errors/reasons.d.ts +1 -1
- package/dist/errors/reasons.js +5 -0
- package/dist/meetings/event-store.d.ts +80 -2
- package/dist/meetings/event-store.js +65 -1
- package/dist/meetings/index.d.ts +2 -1
- package/dist/meetings/index.js +1 -0
- package/dist/meetings/testing/event-store-contract.d.ts +1 -1
- package/dist/meetings/testing/event-store-contract.js +114 -0
- package/dist/store/drivers/node-sqlite.d.ts +9 -1
- package/dist/store/drivers/node-sqlite.js +30 -8
- package/dist/store/sqlite/calendar-events.d.ts +4 -0
- package/dist/store/sqlite/calendar-events.js +89 -0
- package/dist/store/sqlite/calendar.js +126 -94
- package/dist/store/sqlite/identities.d.ts +1 -1
- package/dist/store/sqlite/identities.js +4 -1
- package/dist/store/sqlite/knowledge.js +4 -2
- package/dist/store/sqlite/manifest.js +1 -0
- package/dist/store/sqlite/migrations.generated.js +10 -0
- package/dist/store/sqlite/note-index.d.ts +16 -1
- package/dist/store/sqlite/note-index.js +68 -3
- package/dist/store/sqlite/notes.js +7 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,118 @@ shape of this file.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## 0.490.0 — 31.10.2026
|
|
11
|
+
|
|
12
|
+
### Changed — may break callers
|
|
13
|
+
|
|
14
|
+
- **Notes, documents, knowledge annotations and contacts `--notes` are found by any part of a word, in any letter
|
|
15
|
+
case (store version 40).** `notes` with a search, `knowledge.annotations` with a search and `contacts` with
|
|
16
|
+
`notes` used `instr(lower(...))`, which folds only Latin letters and reads every row: a mixed-case Cyrillic word
|
|
17
|
+
was missed, and a search took 1.5–4 s on a store five times today's size. They now match `note_trigrams` and
|
|
18
|
+
`document_trigrams`, trigram indexes over the normalized title and text (`ё` as `е`, accents dropped) that the
|
|
19
|
+
notes drain keeps, and answer in milliseconds. A query of one or two characters is refused with "search needs at
|
|
20
|
+
least three characters", as message search is; an empty one still filters nothing. The title is searched too,
|
|
21
|
+
not only the text. The notes and documents stored before version 40 get their trigrams in batches from the
|
|
22
|
+
notes drain (`search notes`, `store migrate`); until then they are matched as before.
|
|
23
|
+
|
|
24
|
+
## 0.489.0 — 31.10.2026
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **`events list changed:<date>`: what changed since a date.** It keeps the events first stored, moved, or cancelled
|
|
29
|
+
or removed since then, from the local copy, each with `change` (`new`, `moved`, `cancelled`), `changed_at` and, for
|
|
30
|
+
a moved one, `was` (`starts_at`, `ends_at`). A move counts when a copy's time now differs from its time at the date,
|
|
31
|
+
so a meeting moved and moved back is no change. MCP `events_list` takes the same word. New `EventFilter.changedSince`,
|
|
32
|
+
`EventStore.historyOf` and `eventChange`, from `@wirecat/cli-core/meetings`.
|
|
33
|
+
- **`events list overlapping`: meetings that clash.** It keeps timed events that overlap another one, each with
|
|
34
|
+
`overlaps` (`event:<id>` of the others). An event counts only when it takes the owner's time: not cancelled, not
|
|
35
|
+
all-day, with a copy the owner did not decline or mark free. New `EventFilter.overlapping`.
|
|
36
|
+
- **Changing or deleting "this and all following" occurrences.** `events update <occurrence> --following` (MCP
|
|
37
|
+
`following: true`) ends the series with UNTIL just before the occurrence and starts a new series there with the
|
|
38
|
+
change. The new series keeps the attendees, and the EXDATE and RDATE dates from the split on. It is built from the
|
|
39
|
+
writer's `create` and `update`, so no adapter needs code for it. The new series is made first, under an id
|
|
40
|
+
journaled before the call; if ending the old series then fails, the error names that id, and a retry with `--id`
|
|
41
|
+
finds the series instead of making a second one. A COUNT series needs `--repeat` for the new part
|
|
42
|
+
(`event.repeat-count`). `events delete <occurrence> --following` only ends the series. `WriteScope` stays
|
|
43
|
+
`this | series` for writers; `FollowingScope` adds `following`.
|
|
44
|
+
- **Moving an event to another calendar of the same account.** `CalendarWriter` gains an optional
|
|
45
|
+
`move(calendar, externalId, target, { etag, notify })`. With it, `events move <event> --to-calendar <id>` (MCP
|
|
46
|
+
`event_move`, `to_calendar`) moves the event with its id. Its key is `events.move`, plus `extraKeys("move")`;
|
|
47
|
+
`CalendarWrite` gains `move`. It refuses a calendar of another account, the same calendar, a read-only calendar
|
|
48
|
+
(`calendar.read-only`), an event type other than `default` (`event.unmovable`), and an occurrence without
|
|
49
|
+
`--series`. The store cancels the old copy and saves the new one under the same UID.
|
|
50
|
+
- **The contract kits cover both.** `calendarWriterContract` runs the "following" split over `memoryEventStore`
|
|
51
|
+
(earlier slots kept, the new series from the occurrence, no second series on a retry after a lost answer). With
|
|
52
|
+
`CalendarWriterFixture.target` and a writer that has `move`, it also checks a move: id kept, old etag a conflict,
|
|
53
|
+
retry finds the event. `fakeCalendarWriter` moves.
|
|
54
|
+
|
|
55
|
+
### Changed — may break callers
|
|
56
|
+
|
|
57
|
+
- **Calendar writes that are easy to undo go ahead by default, as tg's and drive's writes do.** In
|
|
58
|
+
`CALENDAR_WRITE_DEFAULTS`, `events.create`, `events.update`, `events.respond` and the new `events.move` are
|
|
59
|
+
`allow` (were `ask`). `events.delete` stays `ask`, and it also covers `--following`. `events.delete.series` and
|
|
60
|
+
`events.notify` stay `deny`, so mailing attendees still needs the owner's yes. A profile that wants a question
|
|
61
|
+
first sets the key to `ask`.
|
|
62
|
+
- **A calendar series update whose new rule ends it sooner also needs `events.delete.series`,** which is `deny` by
|
|
63
|
+
default. `events update --series --repeat` with a COUNT or UNTIL that drops slots the series had (a bound added, an
|
|
64
|
+
earlier UNTIL, a smaller COUNT, or a bound of the other kind) deleted the later slots under `events.update` alone; it
|
|
65
|
+
now takes the same key as deleting the series. A rule with no end, or a later one, still needs only
|
|
66
|
+
`events.update`.
|
|
67
|
+
- **A calendar `sync` with a failed calendar prints nothing on stdout, and `sync.partial` carries the whole result.**
|
|
68
|
+
It printed the report and then failed, so stdout held an answer and the run was a failure (WC-OUT-14). Now the
|
|
69
|
+
error's message lists each failed calendar as `calendar <id> (<title>): <error>`, `details.calendars` holds every
|
|
70
|
+
synced calendar's `calendar_id`, `external_id`, `title`, `round`, `state`, `saved`, `removed`, `occurrences` and, on a
|
|
71
|
+
failed one, `error`, and the error says `retry.safe: true` (`retryable: true`, `sent: false`: a sync sends the
|
|
72
|
+
provider no write). A host that queues the report and prints it before the error must stop doing so.
|
|
73
|
+
- **`EventStore` gains `slotsOf`, and `LinkReview` gains `calendarId`** (the calendar of a `calendar_entry` review's
|
|
74
|
+
copy). `resolveAnswer` takes the account id after the store.
|
|
75
|
+
- **`EventStore` gains `saveSlots`**, which saves several series' slots and the sync cursor in one transaction.
|
|
76
|
+
|
|
77
|
+
- **`EventStore` gains `participantsOf(eventIds, calendarIds)`**: the participants of those events' copies on those
|
|
78
|
+
calendars, in one read.
|
|
79
|
+
|
|
80
|
+
- **`StoredEntry` gains `createdAt` and `transparency`, and `EventStore` gains `historyOf`.**
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
|
|
84
|
+
- **A calendar sync commits a few times per calendar, not twice per repeating event.** The slots of up to 50 series
|
|
85
|
+
(250 slots) and the cursor go in one transaction. On a 20,000-event store with 819 weekly series (engine and SQLite
|
|
86
|
+
store, fake provider): 123 write transactions instead of 1,663 for a full round.
|
|
87
|
+
- **The daily full round asks only the series that changed for their slots.** A series with the stored etag and slots
|
|
88
|
+
stored in the window keeps them; every series is asked again once a week, and on `--rescan`. On the same store the
|
|
89
|
+
next day's full round made 0 `instances` requests instead of 819 and took 6.7 s instead of 15.1 s. A series that does
|
|
90
|
+
not change lacks at most 7 days of slots at the window's far end, three months ahead.
|
|
91
|
+
|
|
92
|
+
- **The daily full calendar sync no longer marks events outside its window as deleted.** A full list returns only
|
|
93
|
+
what falls in the window (a year back, three months ahead), but `markUnseen` limited only plain occurrences to it,
|
|
94
|
+
so every older or later single event, moved occurrence and ended series was marked deleted, and its event cancelled
|
|
95
|
+
or marked gone at the source. It now marks only what `entryInWindow` (new, from `@wirecat/cli-core/meetings`) puts
|
|
96
|
+
in the window. Stores already damaged heal on their next sync: each calendar runs the new
|
|
97
|
+
`EventStore.restoreUnseen` once, which brings back the entries marked outside the window of the list that marked
|
|
98
|
+
them, with their events. A rescan cannot do this, since it never lists them again. Implementations of `EventStore`
|
|
99
|
+
outside cli-core need `restoreUnseen`.
|
|
100
|
+
- **A repeating event moved to another time no longer keeps its slots at the old time.** An incremental sync saved the
|
|
101
|
+
slots the provider gave for the series and left the old ones scheduled. Now the series' stored plain slots in the
|
|
102
|
+
window that the provider no longer gives are cancelled.
|
|
103
|
+
- **A `sync --rescan` its budget stopped no longer leaves calendars it did not reach on incremental rounds.** The rescan
|
|
104
|
+
is saved as each calendar's round before the first request, so the next plain `sync` lists those in full.
|
|
105
|
+
- **A create the provider made but the store failed to save names the event's id.** The error carries
|
|
106
|
+
`operation_id` and `id` and says to sync, or to repeat with `--id`, which finds the event instead of making it again.
|
|
107
|
+
The same for the new series of `events update --following`.
|
|
108
|
+
- **`links resolve` no longer changes a link choice of another account's calendar.** It refuses with
|
|
109
|
+
`permission_error`; `links review` still lists every account's choices.
|
|
110
|
+
- **`events list` by time seeks the time index, and `people list` reads attendees in one query.** The list query put
|
|
111
|
+
both time bounds inside `CASE WHEN all_day`, so SQLite scanned the events from the start of the window; plain bounds
|
|
112
|
+
on `starts_at`, wider than the exact ones (back by the longest stored event plus a day, forward by a day), now let it
|
|
113
|
+
seek. `people list` read each of up to 1,000 events with five queries. On a 20,000-event store: `events list` today
|
|
114
|
+
12.5 → 2 ms, `people list` for a week 83 → 15 ms, same answers.
|
|
115
|
+
|
|
116
|
+
- **The store's `node:sqlite` driver prepares each SQL text once per connection.** It prepared every statement again
|
|
117
|
+
on every call, which was a quarter of a gcal sync's time. Each connection now keeps up to 1,000 prepared
|
|
118
|
+
statements (least recently used out first) and finalizes them on `close()`. gcal 0.1.1's first sync of a synthetic
|
|
119
|
+
calendar ran 2.5–2.7 times faster (5,000 events: 6.7 → 2.5 s; 50,000: 68 → 28 s). `prepare()` with the same SQL
|
|
120
|
+
now returns the same statement. Bun's driver already cached through `db.query()`.
|
|
121
|
+
|
|
10
122
|
## 0.488.0 — 30.10.2026
|
|
11
123
|
|
|
12
124
|
### Added
|
|
@@ -12,7 +12,7 @@ import { BUSY_QUERY_HELP, busyAnswer, busyQuery, workingHoursOf } from "../busy.
|
|
|
12
12
|
import { CALENDAR_UNTRUSTED_FIELDS, calendarIn, calendarItem, EVENTS_QUERY_HELP, eventAnswer, eventIdOf, eventOf, eventsAnswer, eventsFilter, peopleAnswer, resolveAnswer, reviewsAnswer, } from "../reads.js";
|
|
13
13
|
import { REPEAT_HELP } from "../recurrence.js";
|
|
14
14
|
import { calendarStatus, syncCalendars } from "../sync.js";
|
|
15
|
-
import { createEvent, deleteEvent, EVENT_RESPONSES, respondToEvent, updateEvent, } from "../writes.js";
|
|
15
|
+
import { createEvent, deleteEvent, EVENT_RESPONSES, moveEvent, respondToEvent, updateEvent, } from "../writes.js";
|
|
16
16
|
const LOCAL_READ = { remote: "none", local: "read" };
|
|
17
17
|
const LOCAL_WRITE = { remote: "none", local: "write" };
|
|
18
18
|
const FETCH = { remote: "read", local: "write" };
|
|
@@ -168,11 +168,28 @@ const addCalendarCommandsDefinition = (program, deps) => {
|
|
|
168
168
|
: report.hint;
|
|
169
169
|
if (report.hint === undefined)
|
|
170
170
|
delete report.hint;
|
|
171
|
-
|
|
172
|
-
if (
|
|
173
|
-
|
|
171
|
+
const failed = report.synced.filter((one) => one.error !== undefined);
|
|
172
|
+
if (failed.length)
|
|
173
|
+
// A failure prints nothing on stdout (WC-OUT-14), so the error carries every calendar's result.
|
|
174
|
+
throw new CliError("provider_error", `${failed.map((one) => `calendar ${one.calendarId} (${one.title ?? one.externalId}): ${one.error}`).join("; ")}` +
|
|
175
|
+
" — run sync again to retry", {
|
|
174
176
|
reason: "sync.partial",
|
|
177
|
+
calendars: report.synced.map((one) => ({
|
|
178
|
+
calendar_id: String(one.calendarId),
|
|
179
|
+
external_id: one.externalId,
|
|
180
|
+
title: one.title,
|
|
181
|
+
round: one.round,
|
|
182
|
+
state: one.state,
|
|
183
|
+
saved: one.saved,
|
|
184
|
+
removed: one.removed,
|
|
185
|
+
occurrences: one.occurrences,
|
|
186
|
+
...(one.error === undefined ? {} : { error: one.error }),
|
|
187
|
+
})),
|
|
188
|
+
retryable: true,
|
|
189
|
+
// A sync sends the provider no write, so running it again changes nothing there.
|
|
190
|
+
sent: false,
|
|
175
191
|
});
|
|
192
|
+
print({ ...report, ...(embeddings === undefined ? {} : { embeddings }), ...(next ? { next } : {}) }, command);
|
|
176
193
|
});
|
|
177
194
|
output(example(annotate(program.command("status"), { effects: LOCAL_READ }).description("how far each synced calendar's sync is: entries done, partial or complete, and when it last moved"), "status --json")).action(async (_opts, command) => {
|
|
178
195
|
print(await calendarStatus(deps.store, deps.accountId, {
|
|
@@ -261,7 +278,7 @@ const addCalendarCommandsDefinition = (program, deps) => {
|
|
|
261
278
|
.description("join a copy to the event you choose, or keep it apart")
|
|
262
279
|
.argument("<review>", "the review's id from links review")
|
|
263
280
|
.argument("<choice>", "one of its candidates, as event:<id>, or apart"), "links resolve 7 event:42")).action(async (review, choice, _opts, command) => {
|
|
264
|
-
print(await resolveAnswer(deps.store, review, choice, now()), command);
|
|
281
|
+
print(await resolveAnswer(deps.store, deps.accountId, review, choice, now()), command);
|
|
265
282
|
});
|
|
266
283
|
};
|
|
267
284
|
const collect = (value, previous = []) => [...previous, value];
|
|
@@ -278,6 +295,7 @@ const addEventWrites = (events, writes, { deps, now, zone, output, print, exampl
|
|
|
278
295
|
id: "--id",
|
|
279
296
|
calendar: "--calendar",
|
|
280
297
|
series: "--series",
|
|
298
|
+
following: "--following",
|
|
281
299
|
repeat: "--repeat",
|
|
282
300
|
},
|
|
283
301
|
});
|
|
@@ -302,9 +320,10 @@ const addEventWrites = (events, writes, { deps, now, zone, output, print, exampl
|
|
|
302
320
|
...Object.fromEntries(Object.entries(given).filter(([, value]) => value !== undefined)),
|
|
303
321
|
...(attendee === undefined || attendee.length === 0 ? {} : { attendees: attendee }),
|
|
304
322
|
});
|
|
305
|
-
const choicesOf = ({ calendar, series, notify }) => ({
|
|
323
|
+
const choicesOf = ({ calendar, series, following, notify }) => ({
|
|
306
324
|
...(calendar === undefined ? {} : { calendar }),
|
|
307
325
|
...(series ? { series: true } : {}),
|
|
326
|
+
...(following ? { following: true } : {}),
|
|
308
327
|
...(notify === undefined ? {} : { notify }),
|
|
309
328
|
});
|
|
310
329
|
const write = (name) => annotate(events.command(name), { effects: REMOTE_WRITE, offline: false });
|
|
@@ -323,17 +342,33 @@ const addEventWrites = (events, writes, { deps, now, zone, output, print, exampl
|
|
|
323
342
|
}), command);
|
|
324
343
|
});
|
|
325
344
|
output(example(notify(target(fields(write("update"), true))
|
|
326
|
-
.description("change an event; with --series every occurrence of the repeating event
|
|
327
|
-
"between timed and all-day")
|
|
328
|
-
.option("--series", "change the whole repeating event, not only this occurrence")
|
|
329
|
-
|
|
330
|
-
|
|
345
|
+
.description("change an event; with --series every occurrence of the repeating event, with --following this " +
|
|
346
|
+
"occurrence and every later one; new times or dates switch it between timed and all-day")
|
|
347
|
+
.option("--series", "change the whole repeating event, not only this occurrence")
|
|
348
|
+
.option("--following", "change this occurrence and every later one: the repeating event ends before it and a new one starts " +
|
|
349
|
+
"with the change")
|
|
350
|
+
.option("--id <id>", "with --following, the id an outcome_unknown named: a retry finds that new series")), "events update event:42 --start-time 2026-11-02T14:00 --end-time 2026-11-02T15:00 --notify", "events update event:42 --series --repeat 'FREQ=WEEKLY;BYDAY=TU;UNTIL=20261231T230000Z' --no-notify", "events update event:42 --following --start-time 2026-11-09T10:00 --end-time 2026-11-09T10:30 --no-notify")).action(async (reference, opts, command) => {
|
|
351
|
+
const { calendar: _calendar, series: _series, following: _following, notify: _notify, id, ...rest } = opts;
|
|
352
|
+
printWritten(await updateEvent(context(command), reference, fieldsOf(rest), {
|
|
353
|
+
...choicesOf(opts),
|
|
354
|
+
...(id === undefined ? {} : { id }),
|
|
355
|
+
}), command);
|
|
331
356
|
});
|
|
332
357
|
output(example(notify(target(write("delete"))
|
|
333
|
-
.description("delete an event; a whole repeating event needs events.delete.series
|
|
334
|
-
|
|
358
|
+
.description("delete an event; a whole repeating event, or every later occurrence, needs events.delete.series " +
|
|
359
|
+
"allowed first")
|
|
360
|
+
.option("--series", "delete the whole repeating event, not only this occurrence")
|
|
361
|
+
.option("--following", "delete this occurrence and every later one: the repeating event ends before it")), "events delete event:42 --no-notify", "events delete event:42 --following --no-notify")).action(async (reference, opts, command) => {
|
|
335
362
|
printWritten(await deleteEvent(context(command), reference, choicesOf(opts)), command);
|
|
336
363
|
});
|
|
364
|
+
if (writes.writer.move)
|
|
365
|
+
output(example(notify(target(write("move"))
|
|
366
|
+
.description("move an event, with its id, to another calendar of the account; a repeating one moves whole")
|
|
367
|
+
.requiredOption("--to-calendar <id>", "the calendar to move it to: its id, or the provider's id")
|
|
368
|
+
.option("--series", "move the whole repeating event an occurrence belongs to")), "events move event:42 --to-calendar 4 --no-notify")).action(async (reference, opts, command) => {
|
|
369
|
+
const { series, calendar, notify } = opts;
|
|
370
|
+
printWritten(await moveEvent(context(command), reference, opts.toCalendar, choicesOf({ series, calendar, notify })), command);
|
|
371
|
+
});
|
|
337
372
|
output(example(notify(target(write("respond"))
|
|
338
373
|
.description("answer an invitation; the organiser is told only with --notify")
|
|
339
374
|
.addArgument(new Argument("<response>", "the answer").choices(EVENT_RESPONSES))), "events respond event:42 accepted --notify")).action(async (reference, response, opts, command) => {
|
package/dist/calendar/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export type { CalendarAccessRole, CalendarInput, EntryAttachment, EntryAttachmen
|
|
|
2
2
|
export { repeatRule } from "./recurrence.js";
|
|
3
3
|
export type { BusyTimes, CalendarExpander, CalendarSource, CalendarSourceTraits, ChangePage, ChangeResult, FreeBusyRequest, SyncWindow, } from "./source.js";
|
|
4
4
|
export { type CalendarCursor, type CalendarSyncOptions, type CalendarSyncReport, type CalendarSyncResult, calendarStatus, calendarSyncWindow, type PendingRound, parseCalendarCursor, syncCalendars, } from "./sync.js";
|
|
5
|
-
export { CALENDAR_WRITE_DEFAULTS, CALENDAR_WRITE_KEYS, type CalendarWrite, type CalendarWriter, calendarConflict, EVENTS_DELETE_SERIES_KEY, EVENTS_NOTIFY_KEY, type EventDraft, type EventPatch, type EventResponse, type WriteScope, } from "./writer.js";
|
|
5
|
+
export { CALENDAR_WRITE_DEFAULTS, CALENDAR_WRITE_KEYS, type CalendarWrite, type CalendarWriter, calendarConflict, EVENTS_DELETE_SERIES_KEY, EVENTS_NOTIFY_KEY, type EventDraft, type EventPatch, type EventResponse, type FollowingScope, type WriteScope, } from "./writer.js";
|
|
6
6
|
export type { CalendarWrites } from "./writes.js";
|
|
@@ -391,10 +391,19 @@ export declare const calendarWriteTools: ({
|
|
|
391
391
|
series: {
|
|
392
392
|
type: string;
|
|
393
393
|
};
|
|
394
|
+
following: {
|
|
395
|
+
type: string;
|
|
396
|
+
description: string;
|
|
397
|
+
};
|
|
394
398
|
notify: {
|
|
395
399
|
type: string;
|
|
396
400
|
description: string;
|
|
397
401
|
};
|
|
402
|
+
id: {
|
|
403
|
+
type: string;
|
|
404
|
+
minLength: number;
|
|
405
|
+
description: string;
|
|
406
|
+
};
|
|
398
407
|
} | {
|
|
399
408
|
account_id: {
|
|
400
409
|
type: string;
|
|
@@ -412,6 +421,36 @@ export declare const calendarWriteTools: ({
|
|
|
412
421
|
series: {
|
|
413
422
|
type: string;
|
|
414
423
|
};
|
|
424
|
+
following: {
|
|
425
|
+
type: string;
|
|
426
|
+
description: string;
|
|
427
|
+
};
|
|
428
|
+
notify: {
|
|
429
|
+
type: string;
|
|
430
|
+
description: string;
|
|
431
|
+
};
|
|
432
|
+
} | {
|
|
433
|
+
account_id: {
|
|
434
|
+
type: string;
|
|
435
|
+
minimum: number;
|
|
436
|
+
};
|
|
437
|
+
event: {
|
|
438
|
+
type: string;
|
|
439
|
+
minLength: number;
|
|
440
|
+
};
|
|
441
|
+
calendar: {
|
|
442
|
+
type: string;
|
|
443
|
+
minLength: number;
|
|
444
|
+
description: string;
|
|
445
|
+
};
|
|
446
|
+
to_calendar: {
|
|
447
|
+
type: string;
|
|
448
|
+
minLength: number;
|
|
449
|
+
description: string;
|
|
450
|
+
};
|
|
451
|
+
series: {
|
|
452
|
+
type: string;
|
|
453
|
+
};
|
|
415
454
|
notify: {
|
|
416
455
|
type: string;
|
|
417
456
|
description: string;
|
|
@@ -586,6 +625,40 @@ export declare const calendarWriteTools: ({
|
|
|
586
625
|
series: {
|
|
587
626
|
type: string;
|
|
588
627
|
};
|
|
628
|
+
following: {
|
|
629
|
+
type: string;
|
|
630
|
+
description: string;
|
|
631
|
+
};
|
|
632
|
+
notify: {
|
|
633
|
+
type: string;
|
|
634
|
+
description: string;
|
|
635
|
+
};
|
|
636
|
+
id: {
|
|
637
|
+
type: string;
|
|
638
|
+
minLength: number;
|
|
639
|
+
description: string;
|
|
640
|
+
};
|
|
641
|
+
} | {
|
|
642
|
+
account_id: {
|
|
643
|
+
type: string;
|
|
644
|
+
minimum: number;
|
|
645
|
+
};
|
|
646
|
+
event: {
|
|
647
|
+
type: string;
|
|
648
|
+
minLength: number;
|
|
649
|
+
};
|
|
650
|
+
calendar: {
|
|
651
|
+
type: string;
|
|
652
|
+
minLength: number;
|
|
653
|
+
description: string;
|
|
654
|
+
};
|
|
655
|
+
series: {
|
|
656
|
+
type: string;
|
|
657
|
+
};
|
|
658
|
+
following: {
|
|
659
|
+
type: string;
|
|
660
|
+
description: string;
|
|
661
|
+
};
|
|
589
662
|
notify: {
|
|
590
663
|
type: string;
|
|
591
664
|
description: string;
|
|
@@ -604,6 +677,11 @@ export declare const calendarWriteTools: ({
|
|
|
604
677
|
minLength: number;
|
|
605
678
|
description: string;
|
|
606
679
|
};
|
|
680
|
+
to_calendar: {
|
|
681
|
+
type: string;
|
|
682
|
+
minLength: number;
|
|
683
|
+
description: string;
|
|
684
|
+
};
|
|
607
685
|
series: {
|
|
608
686
|
type: string;
|
|
609
687
|
};
|
|
@@ -781,6 +859,40 @@ export declare const calendarWriteTools: ({
|
|
|
781
859
|
series: {
|
|
782
860
|
type: string;
|
|
783
861
|
};
|
|
862
|
+
following: {
|
|
863
|
+
type: string;
|
|
864
|
+
description: string;
|
|
865
|
+
};
|
|
866
|
+
notify: {
|
|
867
|
+
type: string;
|
|
868
|
+
description: string;
|
|
869
|
+
};
|
|
870
|
+
id: {
|
|
871
|
+
type: string;
|
|
872
|
+
minLength: number;
|
|
873
|
+
description: string;
|
|
874
|
+
};
|
|
875
|
+
} | {
|
|
876
|
+
account_id: {
|
|
877
|
+
type: string;
|
|
878
|
+
minimum: number;
|
|
879
|
+
};
|
|
880
|
+
event: {
|
|
881
|
+
type: string;
|
|
882
|
+
minLength: number;
|
|
883
|
+
};
|
|
884
|
+
calendar: {
|
|
885
|
+
type: string;
|
|
886
|
+
minLength: number;
|
|
887
|
+
description: string;
|
|
888
|
+
};
|
|
889
|
+
series: {
|
|
890
|
+
type: string;
|
|
891
|
+
};
|
|
892
|
+
following: {
|
|
893
|
+
type: string;
|
|
894
|
+
description: string;
|
|
895
|
+
};
|
|
784
896
|
notify: {
|
|
785
897
|
type: string;
|
|
786
898
|
description: string;
|
|
@@ -799,6 +911,11 @@ export declare const calendarWriteTools: ({
|
|
|
799
911
|
minLength: number;
|
|
800
912
|
description: string;
|
|
801
913
|
};
|
|
914
|
+
to_calendar: {
|
|
915
|
+
type: string;
|
|
916
|
+
minLength: number;
|
|
917
|
+
description: string;
|
|
918
|
+
};
|
|
802
919
|
series: {
|
|
803
920
|
type: string;
|
|
804
921
|
};
|
|
@@ -976,6 +1093,66 @@ export declare const calendarWriteTools: ({
|
|
|
976
1093
|
series: {
|
|
977
1094
|
type: string;
|
|
978
1095
|
};
|
|
1096
|
+
following: {
|
|
1097
|
+
type: string;
|
|
1098
|
+
description: string;
|
|
1099
|
+
};
|
|
1100
|
+
notify: {
|
|
1101
|
+
type: string;
|
|
1102
|
+
description: string;
|
|
1103
|
+
};
|
|
1104
|
+
id: {
|
|
1105
|
+
type: string;
|
|
1106
|
+
minLength: number;
|
|
1107
|
+
description: string;
|
|
1108
|
+
};
|
|
1109
|
+
} | {
|
|
1110
|
+
account_id: {
|
|
1111
|
+
type: string;
|
|
1112
|
+
minimum: number;
|
|
1113
|
+
};
|
|
1114
|
+
event: {
|
|
1115
|
+
type: string;
|
|
1116
|
+
minLength: number;
|
|
1117
|
+
};
|
|
1118
|
+
calendar: {
|
|
1119
|
+
type: string;
|
|
1120
|
+
minLength: number;
|
|
1121
|
+
description: string;
|
|
1122
|
+
};
|
|
1123
|
+
series: {
|
|
1124
|
+
type: string;
|
|
1125
|
+
};
|
|
1126
|
+
following: {
|
|
1127
|
+
type: string;
|
|
1128
|
+
description: string;
|
|
1129
|
+
};
|
|
1130
|
+
notify: {
|
|
1131
|
+
type: string;
|
|
1132
|
+
description: string;
|
|
1133
|
+
};
|
|
1134
|
+
} | {
|
|
1135
|
+
account_id: {
|
|
1136
|
+
type: string;
|
|
1137
|
+
minimum: number;
|
|
1138
|
+
};
|
|
1139
|
+
event: {
|
|
1140
|
+
type: string;
|
|
1141
|
+
minLength: number;
|
|
1142
|
+
};
|
|
1143
|
+
calendar: {
|
|
1144
|
+
type: string;
|
|
1145
|
+
minLength: number;
|
|
1146
|
+
description: string;
|
|
1147
|
+
};
|
|
1148
|
+
to_calendar: {
|
|
1149
|
+
type: string;
|
|
1150
|
+
minLength: number;
|
|
1151
|
+
description: string;
|
|
1152
|
+
};
|
|
1153
|
+
series: {
|
|
1154
|
+
type: string;
|
|
1155
|
+
};
|
|
979
1156
|
notify: {
|
|
980
1157
|
type: string;
|
|
981
1158
|
description: string;
|
|
@@ -994,6 +1171,219 @@ export declare const calendarWriteTools: ({
|
|
|
994
1171
|
minLength: number;
|
|
995
1172
|
description: string;
|
|
996
1173
|
};
|
|
1174
|
+
response: {
|
|
1175
|
+
type: string;
|
|
1176
|
+
enum: readonly EventResponse[];
|
|
1177
|
+
};
|
|
1178
|
+
notify: {
|
|
1179
|
+
type: string;
|
|
1180
|
+
description: string;
|
|
1181
|
+
};
|
|
1182
|
+
};
|
|
1183
|
+
required: string[];
|
|
1184
|
+
additionalProperties: boolean;
|
|
1185
|
+
};
|
|
1186
|
+
annotations: {
|
|
1187
|
+
readOnlyHint: boolean;
|
|
1188
|
+
destructiveHint: boolean;
|
|
1189
|
+
idempotentHint: boolean;
|
|
1190
|
+
openWorldHint: boolean;
|
|
1191
|
+
};
|
|
1192
|
+
} | {
|
|
1193
|
+
name: string;
|
|
1194
|
+
description: string;
|
|
1195
|
+
inputSchema: {
|
|
1196
|
+
type: string;
|
|
1197
|
+
properties: {
|
|
1198
|
+
title: {
|
|
1199
|
+
type: string;
|
|
1200
|
+
minLength: number;
|
|
1201
|
+
};
|
|
1202
|
+
start_time: {
|
|
1203
|
+
type: string;
|
|
1204
|
+
minLength: number;
|
|
1205
|
+
description: string;
|
|
1206
|
+
};
|
|
1207
|
+
end_time: {
|
|
1208
|
+
type: string;
|
|
1209
|
+
minLength: number;
|
|
1210
|
+
description: string;
|
|
1211
|
+
};
|
|
1212
|
+
start_date: {
|
|
1213
|
+
type: string;
|
|
1214
|
+
minLength: number;
|
|
1215
|
+
description: string;
|
|
1216
|
+
};
|
|
1217
|
+
end_date: {
|
|
1218
|
+
type: string;
|
|
1219
|
+
minLength: number;
|
|
1220
|
+
description: string;
|
|
1221
|
+
};
|
|
1222
|
+
timezone: {
|
|
1223
|
+
type: string;
|
|
1224
|
+
minLength: number;
|
|
1225
|
+
};
|
|
1226
|
+
location: {
|
|
1227
|
+
type: string;
|
|
1228
|
+
description: string;
|
|
1229
|
+
};
|
|
1230
|
+
description: {
|
|
1231
|
+
type: string;
|
|
1232
|
+
description: string;
|
|
1233
|
+
};
|
|
1234
|
+
attendees: {
|
|
1235
|
+
type: string;
|
|
1236
|
+
items: {
|
|
1237
|
+
type: string;
|
|
1238
|
+
minLength: number;
|
|
1239
|
+
};
|
|
1240
|
+
description: string;
|
|
1241
|
+
};
|
|
1242
|
+
repeat: {
|
|
1243
|
+
type: string;
|
|
1244
|
+
minLength: number;
|
|
1245
|
+
description: string;
|
|
1246
|
+
};
|
|
1247
|
+
account_id: {
|
|
1248
|
+
type: string;
|
|
1249
|
+
minimum: number;
|
|
1250
|
+
};
|
|
1251
|
+
calendar: {
|
|
1252
|
+
type: string;
|
|
1253
|
+
minLength: number;
|
|
1254
|
+
};
|
|
1255
|
+
notify: {
|
|
1256
|
+
type: string;
|
|
1257
|
+
description: string;
|
|
1258
|
+
};
|
|
1259
|
+
id: {
|
|
1260
|
+
type: string;
|
|
1261
|
+
minLength: number;
|
|
1262
|
+
description: string;
|
|
1263
|
+
};
|
|
1264
|
+
} | {
|
|
1265
|
+
title: {
|
|
1266
|
+
type: string;
|
|
1267
|
+
minLength: number;
|
|
1268
|
+
};
|
|
1269
|
+
start_time: {
|
|
1270
|
+
type: string;
|
|
1271
|
+
minLength: number;
|
|
1272
|
+
description: string;
|
|
1273
|
+
};
|
|
1274
|
+
end_time: {
|
|
1275
|
+
type: string;
|
|
1276
|
+
minLength: number;
|
|
1277
|
+
description: string;
|
|
1278
|
+
};
|
|
1279
|
+
start_date: {
|
|
1280
|
+
type: string;
|
|
1281
|
+
minLength: number;
|
|
1282
|
+
description: string;
|
|
1283
|
+
};
|
|
1284
|
+
end_date: {
|
|
1285
|
+
type: string;
|
|
1286
|
+
minLength: number;
|
|
1287
|
+
description: string;
|
|
1288
|
+
};
|
|
1289
|
+
timezone: {
|
|
1290
|
+
type: string;
|
|
1291
|
+
minLength: number;
|
|
1292
|
+
};
|
|
1293
|
+
location: {
|
|
1294
|
+
type: string;
|
|
1295
|
+
description: string;
|
|
1296
|
+
};
|
|
1297
|
+
description: {
|
|
1298
|
+
type: string;
|
|
1299
|
+
description: string;
|
|
1300
|
+
};
|
|
1301
|
+
attendees: {
|
|
1302
|
+
type: string;
|
|
1303
|
+
items: {
|
|
1304
|
+
type: string;
|
|
1305
|
+
minLength: number;
|
|
1306
|
+
};
|
|
1307
|
+
description: string;
|
|
1308
|
+
};
|
|
1309
|
+
repeat: {
|
|
1310
|
+
type: string;
|
|
1311
|
+
minLength: number;
|
|
1312
|
+
description: string;
|
|
1313
|
+
};
|
|
1314
|
+
account_id: {
|
|
1315
|
+
type: string;
|
|
1316
|
+
minimum: number;
|
|
1317
|
+
};
|
|
1318
|
+
event: {
|
|
1319
|
+
type: string;
|
|
1320
|
+
minLength: number;
|
|
1321
|
+
};
|
|
1322
|
+
calendar: {
|
|
1323
|
+
type: string;
|
|
1324
|
+
minLength: number;
|
|
1325
|
+
description: string;
|
|
1326
|
+
};
|
|
1327
|
+
series: {
|
|
1328
|
+
type: string;
|
|
1329
|
+
};
|
|
1330
|
+
following: {
|
|
1331
|
+
type: string;
|
|
1332
|
+
description: string;
|
|
1333
|
+
};
|
|
1334
|
+
notify: {
|
|
1335
|
+
type: string;
|
|
1336
|
+
description: string;
|
|
1337
|
+
};
|
|
1338
|
+
id: {
|
|
1339
|
+
type: string;
|
|
1340
|
+
minLength: number;
|
|
1341
|
+
description: string;
|
|
1342
|
+
};
|
|
1343
|
+
} | {
|
|
1344
|
+
account_id: {
|
|
1345
|
+
type: string;
|
|
1346
|
+
minimum: number;
|
|
1347
|
+
};
|
|
1348
|
+
event: {
|
|
1349
|
+
type: string;
|
|
1350
|
+
minLength: number;
|
|
1351
|
+
};
|
|
1352
|
+
calendar: {
|
|
1353
|
+
type: string;
|
|
1354
|
+
minLength: number;
|
|
1355
|
+
description: string;
|
|
1356
|
+
};
|
|
1357
|
+
series: {
|
|
1358
|
+
type: string;
|
|
1359
|
+
};
|
|
1360
|
+
following: {
|
|
1361
|
+
type: string;
|
|
1362
|
+
description: string;
|
|
1363
|
+
};
|
|
1364
|
+
notify: {
|
|
1365
|
+
type: string;
|
|
1366
|
+
description: string;
|
|
1367
|
+
};
|
|
1368
|
+
} | {
|
|
1369
|
+
account_id: {
|
|
1370
|
+
type: string;
|
|
1371
|
+
minimum: number;
|
|
1372
|
+
};
|
|
1373
|
+
event: {
|
|
1374
|
+
type: string;
|
|
1375
|
+
minLength: number;
|
|
1376
|
+
};
|
|
1377
|
+
calendar: {
|
|
1378
|
+
type: string;
|
|
1379
|
+
minLength: number;
|
|
1380
|
+
description: string;
|
|
1381
|
+
};
|
|
1382
|
+
to_calendar: {
|
|
1383
|
+
type: string;
|
|
1384
|
+
minLength: number;
|
|
1385
|
+
description: string;
|
|
1386
|
+
};
|
|
997
1387
|
series: {
|
|
998
1388
|
type: string;
|
|
999
1389
|
};
|