@laylzj777/my-apple-apple-eventkit 1.1.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 (123) hide show
  1. package/CHANGELOG.md +575 -0
  2. package/LICENSE +21 -0
  3. package/README.md +304 -0
  4. package/README.zh-CN.md +270 -0
  5. package/bin/event +0 -0
  6. package/bin/event-disclaim +0 -0
  7. package/dist/bin/apple-calendar.d.ts +6 -0
  8. package/dist/bin/apple-calendar.js +8 -0
  9. package/dist/bin/apple-calendar.js.map +1 -0
  10. package/dist/bin/apple-reminders.d.ts +7 -0
  11. package/dist/bin/apple-reminders.js +9 -0
  12. package/dist/bin/apple-reminders.js.map +1 -0
  13. package/dist/bootstrap.d.ts +11 -0
  14. package/dist/bootstrap.js +44 -0
  15. package/dist/bootstrap.js.map +1 -0
  16. package/dist/index.d.ts +10 -0
  17. package/dist/index.js +12 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/server/handlers.d.ts +12 -0
  20. package/dist/server/handlers.js +58 -0
  21. package/dist/server/handlers.js.map +1 -0
  22. package/dist/server/mode.d.ts +19 -0
  23. package/dist/server/mode.js +47 -0
  24. package/dist/server/mode.js.map +1 -0
  25. package/dist/server/promptAbstractions.d.ts +61 -0
  26. package/dist/server/promptAbstractions.js +140 -0
  27. package/dist/server/promptAbstractions.js.map +1 -0
  28. package/dist/server/prompts.d.ts +13 -0
  29. package/dist/server/prompts.js +461 -0
  30. package/dist/server/prompts.js.map +1 -0
  31. package/dist/server/server.d.ts +61 -0
  32. package/dist/server/server.js +112 -0
  33. package/dist/server/server.js.map +1 -0
  34. package/dist/tools/definitions.d.ts +9 -0
  35. package/dist/tools/definitions.js +272 -0
  36. package/dist/tools/definitions.js.map +1 -0
  37. package/dist/tools/handlers/calendarHandlers.d.ts +11 -0
  38. package/dist/tools/handlers/calendarHandlers.js +151 -0
  39. package/dist/tools/handlers/calendarHandlers.js.map +1 -0
  40. package/dist/tools/handlers/formatters.d.ts +24 -0
  41. package/dist/tools/handlers/formatters.js +105 -0
  42. package/dist/tools/handlers/formatters.js.map +1 -0
  43. package/dist/tools/handlers/index.d.ts +8 -0
  44. package/dist/tools/handlers/index.js +9 -0
  45. package/dist/tools/handlers/index.js.map +1 -0
  46. package/dist/tools/handlers/listHandlers.d.ts +10 -0
  47. package/dist/tools/handlers/listHandlers.js +47 -0
  48. package/dist/tools/handlers/listHandlers.js.map +1 -0
  49. package/dist/tools/handlers/reminderHandlers.d.ts +10 -0
  50. package/dist/tools/handlers/reminderHandlers.js +219 -0
  51. package/dist/tools/handlers/reminderHandlers.js.map +1 -0
  52. package/dist/tools/handlers/shared.d.ts +28 -0
  53. package/dist/tools/handlers/shared.js +57 -0
  54. package/dist/tools/handlers/shared.js.map +1 -0
  55. package/dist/tools/handlers/subtaskHandlers.d.ts +12 -0
  56. package/dist/tools/handlers/subtaskHandlers.js +113 -0
  57. package/dist/tools/handlers/subtaskHandlers.js.map +1 -0
  58. package/dist/tools/index.d.ts +10 -0
  59. package/dist/tools/index.js +74 -0
  60. package/dist/tools/index.js.map +1 -0
  61. package/dist/types/index.d.ts +263 -0
  62. package/dist/types/index.js +42 -0
  63. package/dist/types/index.js.map +1 -0
  64. package/dist/types/prompts.d.ts +88 -0
  65. package/dist/types/prompts.js +6 -0
  66. package/dist/types/prompts.js.map +1 -0
  67. package/dist/types/repository.d.ts +197 -0
  68. package/dist/types/repository.js +14 -0
  69. package/dist/types/repository.js.map +1 -0
  70. package/dist/utils/binaryValidator.d.ts +52 -0
  71. package/dist/utils/binaryValidator.js +185 -0
  72. package/dist/utils/binaryValidator.js.map +1 -0
  73. package/dist/utils/calendarRepository.d.ts +49 -0
  74. package/dist/utils/calendarRepository.js +226 -0
  75. package/dist/utils/calendarRepository.js.map +1 -0
  76. package/dist/utils/constants.d.ts +79 -0
  77. package/dist/utils/constants.js +80 -0
  78. package/dist/utils/constants.js.map +1 -0
  79. package/dist/utils/dateFiltering.d.ts +41 -0
  80. package/dist/utils/dateFiltering.js +129 -0
  81. package/dist/utils/dateFiltering.js.map +1 -0
  82. package/dist/utils/dateUtils.d.ts +27 -0
  83. package/dist/utils/dateUtils.js +71 -0
  84. package/dist/utils/dateUtils.js.map +1 -0
  85. package/dist/utils/errorHandling.d.ts +27 -0
  86. package/dist/utils/errorHandling.js +88 -0
  87. package/dist/utils/errorHandling.js.map +1 -0
  88. package/dist/utils/eventCli.d.ts +40 -0
  89. package/dist/utils/eventCli.js +294 -0
  90. package/dist/utils/eventCli.js.map +1 -0
  91. package/dist/utils/helpers.d.ts +35 -0
  92. package/dist/utils/helpers.js +61 -0
  93. package/dist/utils/helpers.js.map +1 -0
  94. package/dist/utils/looseDateParser.d.ts +19 -0
  95. package/dist/utils/looseDateParser.js +149 -0
  96. package/dist/utils/looseDateParser.js.map +1 -0
  97. package/dist/utils/projectUtils.d.ts +13 -0
  98. package/dist/utils/projectUtils.js +92 -0
  99. package/dist/utils/projectUtils.js.map +1 -0
  100. package/dist/utils/reminderDateParser.d.ts +8 -0
  101. package/dist/utils/reminderDateParser.js +89 -0
  102. package/dist/utils/reminderDateParser.js.map +1 -0
  103. package/dist/utils/reminderRepository.d.ts +33 -0
  104. package/dist/utils/reminderRepository.js +262 -0
  105. package/dist/utils/reminderRepository.js.map +1 -0
  106. package/dist/utils/subtaskUtils.d.ts +103 -0
  107. package/dist/utils/subtaskUtils.js +253 -0
  108. package/dist/utils/subtaskUtils.js.map +1 -0
  109. package/dist/utils/tagUtils.d.ts +58 -0
  110. package/dist/utils/tagUtils.js +177 -0
  111. package/dist/utils/tagUtils.js.map +1 -0
  112. package/dist/utils/timeHelpers.d.ts +40 -0
  113. package/dist/utils/timeHelpers.js +136 -0
  114. package/dist/utils/timeHelpers.js.map +1 -0
  115. package/dist/validation/schemas.d.ts +385 -0
  116. package/dist/validation/schemas.js +579 -0
  117. package/dist/validation/schemas.js.map +1 -0
  118. package/package.json +96 -0
  119. package/scripts/build-event.mjs +513 -0
  120. package/scripts/disclaim.c +69 -0
  121. package/scripts/event-Info.plist +29 -0
  122. package/scripts/event.entitlements +10 -0
  123. package/scripts/postinstall.mjs +91 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,575 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.1.0] - 2026-07-10
9
+
10
+ ### Changed
11
+
12
+ - Split into dual bins: `apple-calendar-mcp` (`calendar_*` tools) and `apple-reminders-mcp` (`reminders_*` tools + prompts), each authorized independently by domain.
13
+ - Package renamed to `@laylzj777/my-apple-apple-eventkit`; a single package exposes both bins.
14
+ - TCC prompt display name is now neutral and build-time configurable via the `APP_EVENT_DISPLAY_NAME` environment variable.
15
+ - Merged upstream changes: lenient date normalization (`looseDateParser`), start-date support in reminder updates, and a shared bootstrap module.
16
+
17
+ ## [Unreleased]
18
+
19
+ ### Added
20
+
21
+ - **`EVENT_TCC_ATTRIBUTION` environment variable** to control how the EventKit
22
+ permission prompt is attributed. `self` (default) preserves the current
23
+ behavior — spawn through the `event-disclaim` shim so the prompt shows
24
+ `event`'s embedded name. `host` bypasses the shim and spawns `event`
25
+ directly, so macOS attributes the prompt to the launching host app and the
26
+ dialog dynamically shows that app's own name (the host must declare the
27
+ relevant EventKit usage strings). Set it per host in the MCP client config's
28
+ `env`.
29
+
30
+ ### Fixed
31
+
32
+ - **EventKit permission prompts now appear from any desktop MCP client**
33
+ (Codex Desktop, Claude Desktop, Cursor, …) — fixes
34
+ [#93](https://github.com/FradSer/mcp-server-apple-events/issues/93).
35
+ Previously macOS TCC attributed the Reminders/Calendar request to the
36
+ desktop app that launched the server; when that app lacked the EventKit
37
+ usage strings (Codex Desktop ships none), TCC refused the request before
38
+ EventKit was reached and no prompt ever appeared. The server now spawns
39
+ `bin/event` through a new `bin/event-disclaim` shim (compiled from
40
+ `scripts/disclaim.c`) that disclaims TCC responsibility at spawn time —
41
+ the same mechanism Chromium and LLDB use — making `event` its own
42
+ responsible process. `event` now embeds an Info.plist
43
+ (`scripts/event-Info.plist`, bundle id `me.frad.event`) with all six
44
+ Reminders/Calendar usage strings and is signed with the
45
+ `com.apple.security.personal-information.{calendars,reminders}`
46
+ entitlements (`scripts/event.entitlements`).
47
+
48
+ **Upgrade note:** the permission prompt and the entry in
49
+ `System Settings > Privacy & Security` now belong to `event`, not to the
50
+ host app — approve the new prompt once. Grants previously given to
51
+ Terminal / Claude Desktop no longer cover the MCP server.
52
+
53
+ ## [1.5.0] - 2026-05-14
54
+
55
+ ### Changed (BREAKING)
56
+
57
+ - **EventKit backend swapped to the `event` CLI.** The bundled `bin/EventKitCLI`
58
+ Swift binary is gone; the server now shells out to the vendored
59
+ [FradSer/event](https://github.com/FradSer/event) CLI (`bin/event`, built
60
+ during `pnpm install` from the `vendor/event` git submodule). Two
61
+ EventKit-backed projects now share one Swift codebase.
62
+ - **Dropped MCP tool fields** that the underlying CLI cannot set today
63
+ (writes only; read-side still returns these fields verbatim when they were
64
+ configured in Reminders.app / Calendar.app):
65
+ - `reminders_tasks`: `alarms`, `clearAlarms`, `recurrence`, `recurrenceRules`,
66
+ `clearRecurrence`, `locationTrigger`, `clearLocationTrigger`, reminder
67
+ `location`, `completionDate`, `startDate` on create (still available on
68
+ update), `completed` on create
69
+ - `reminders_lists`: `color`
70
+ - `calendar_events`: `alarms`, `clearAlarms`, `recurrenceRules`,
71
+ `clearRecurrence`, `structuredLocation`, `url`, `isAllDay` (inferred from
72
+ date format), `availability` on write (still supported as a read filter),
73
+ `targetCalendar` on update (cross-calendar moves require delete+recreate),
74
+ `filterAccount`
75
+ - `calendar_calendars`: `filterAccount` (`event` has no EventKit account
76
+ info to filter by); date-scoped listing and per-calendar `eventCount`
77
+ are still supported, grouped by calendar title instead of an EventKit
78
+ identifier
79
+ - **Reminder list update/delete now resolve `name → id` internally** before
80
+ calling `event reminders lists update|delete --id <id>`. Behavior unchanged
81
+ from the host's perspective.
82
+ - **Cross-list move and `isCompleted: false` on `reminders_tasks` update**
83
+ surface a clear `CliUserError` instead of silently dropping the change —
84
+ neither is supported by the `event` CLI today.
85
+
86
+ ### Added
87
+
88
+ - `vendor/event/` git submodule pinning `FradSer/event` (initial pin: tag
89
+ `v0.5.0`).
90
+ - `scripts/build-event.mjs` builds a universal (arm64 + x86_64) `vendor/event`
91
+ binary via `swift build -c release` (one build per architecture, merged
92
+ with `lipo`) and code-signs the result with a Developer ID Application
93
+ certificate when available (ad-hoc fallback otherwise), hardened runtime.
94
+ - `src/utils/eventCli.ts` — new wrapper for the `event` binary. Parses raw
95
+ JSON (no envelope), maps `Error: Permission denied: …` stderr to
96
+ `CliPermissionError`, and maps other `Error: …` stderr to `CliUserError`.
97
+ - `docs/migration-to-event-cli.md` — migration notes for downstream users,
98
+ including the dropped-field table.
99
+
100
+ ### Removed
101
+
102
+ - `src/swift/` (all of it): `EventKitCLI.swift`, `Info.plist`,
103
+ `EventKitCLI.entitlements`, plus their tests.
104
+ - `scripts/build-swift.mjs` and its corresponding test.
105
+ - `src/utils/cliExecutor.ts` and its test, replaced by `eventCli.ts`.
106
+
107
+ ## [1.4.0] - 2026-03-10
108
+
109
+ ### Added
110
+
111
+ - **List Colors & Emojis**: Set reminder list color and emoji/emblem via native EventKit API
112
+ - **Alarm Types**: Support for different alarm types on reminders (date, time, location-based)
113
+ - **Account/Source Filtering**: Filter calendar events by account and source
114
+ - **CliUserError**: New error type for clear user-facing CLI error messages
115
+ - E2E tests using MCP client protocol
116
+ - Local build configuration documentation
117
+
118
+ ### Changed
119
+
120
+ - Bumped @modelcontextprotocol/sdk from 1.25.1 to 1.26.0
121
+
122
+ ### Fixed
123
+
124
+ - Safe emblem batch parsing for reminder lists
125
+ - Full access permission errors for calendar operations
126
+ - Correct priority values for reminders using EventKit standard
127
+ - Support for completed status on reminder creation
128
+ - Source setting for new reminder lists
129
+ - Secure AppleScript execution with improved types
130
+ - Error handling for missing Swift binary
131
+ - Documented default end time for calendar events
132
+
133
+ ## [1.3.0] - 2026-02-04
134
+
135
+ ### Added
136
+
137
+ - **Priority Support**: Set reminder priority levels (high/medium/low/none) via native EventKit API
138
+ - **Recurring Reminders**: Support for daily, weekly, monthly, yearly recurrence with flexible rules
139
+ - **Location Triggers**: Geofence-based reminders that trigger on arrival or departure
140
+ - **Tags/Labels**: Cross-list categorization with `[#tag]` format stored in notes
141
+ - **Subtasks/Checklists**: Checklist items with progress tracking stored in notes
142
+ - **New Tool**: `reminders_subtasks` for managing checklist items within reminders
143
+ - **Enhanced Filtering**: Filter by priority, recurring, location-based, and tags
144
+ - **Visual Indicators**: 🔄 (recurring), 📍 (location), 🏷️ (tags), 📋 (subtasks) in output
145
+ - Reminder link utilities for note management
146
+ - Explicit timezone offset to `buildTimeFormat` prompt helper
147
+ - `reminderDateParser` for safe timezone-aware date parsing
148
+
149
+ ### Changed
150
+
151
+ - Enhanced `reminders_tasks` with new parameters: `priority`, `recurrence`, `locationTrigger`, `tags`, `subtasks`
152
+ - Added new read filters: `filterPriority`, `filterRecurring`, `filterLocationBased`, `filterTags`
153
+ - Added tag management options: `addTags`, `removeTags` for update action
154
+ - Added recurrence/location clearing: `clearRecurrence`, `clearLocationTrigger`
155
+ - Updated documentation with comprehensive usage examples for all new features
156
+
157
+ ### Fixed
158
+
159
+ - Documented EventKit limitation: reminder flag status not available in public API
160
+ - Timeout management for permission prompt AppleScripts
161
+ - Permission prompt race conditions and reliability issues
162
+ - Proactive AppleScript trigger for permission prompts
163
+ - Quotation marks in daily task prompt date format
164
+ - Timezone setting when creating/updating events
165
+ - Type narrowing for calendar calendars router
166
+ - TypeScript compilation and linting errors in tests and binary validator
167
+
168
+ ## [1.2.0] - 2025-11-15
169
+
170
+ ### Added
171
+
172
+ - Calendar events complete CRUD support (create, read, update, delete operations)
173
+ - Calendar permissions management integrated into EventKit CLI
174
+ - Extended JSON Schema support for enhanced MCP tool definitions
175
+ - Comprehensive timezone integration tests with DST handling
176
+ - Automatic permission handling in handlers layer with retry mechanism
177
+ - Shared prompt abstractions for consistent behavior across templates
178
+ - Work categorization for intelligent time blocking
179
+ - Permission helper utilities and troubleshooting scripts
180
+ - Time consistency and helper utilities for improved date handling
181
+ - Notes formatting and reminder links utilities
182
+
183
+ ### Changed
184
+
185
+ - **BREAKING**: Project renamed from `mcp-server-apple-reminders` to `mcp-server-apple-events`
186
+ - **BREAKING**: MCP tools renamed to underscore notation (e.g., `reminders_tasks`, `calendar_events`)
187
+ - **BREAKING**: RemindersCLI renamed to EventKitCLI for unified Apple services support
188
+ - Simplified prompt constraints and abstractions (reduced from ~70 to ~60 constraints)
189
+ - Unified confidence policy across all prompt templates
190
+ - Removed TypeScript timezone normalization (Swift CLI is single source of truth)
191
+ - Moved permission handling entirely to Swift CLI layer
192
+ - Enhanced daily task organizer with calendar integration
193
+ - Optimized time blocking with research-backed deep work constraints
194
+ - Upgraded dependencies and updated lockfile
195
+ - Simplified dev server startup process
196
+ - Enhanced tool handlers with better error handling and validation
197
+
198
+ ### Fixed
199
+
200
+ - Timezone handling for bare date strings (e.g., "2025-11-15")
201
+ - Auto-trigger permission prompts with AppleScript fallback
202
+ - Secure binary path validation with allowed paths constraints
203
+ - Support for colonless timezone offsets (e.g., "+0800")
204
+ - Persist reminder timezone metadata in EventKit
205
+ - Local timezone usage for date parsing instead of UTC
206
+ - Support for legacy tool aliases during migration
207
+ - Calendar events prompt reference accuracy
208
+ - Non-null assertion safety in permission prompt memoization
209
+
210
+ ### Removed
211
+
212
+ - Permissions tool from MCP interface (handled automatically by Swift CLI)
213
+ - Swift permission status checking from TypeScript layer
214
+ - Obsolete permission repository and manual helpers
215
+ - Unused time consistency and reminder links modules (consolidated)
216
+ - Unsupported deep link format from reminders
217
+
218
+ ## [1.1.0] - 2025-10-30
219
+
220
+ ### Added
221
+
222
+ - Simplified prompts API with improved structure
223
+
224
+ ### Changed
225
+
226
+ - Refactored prompts module for better type safety
227
+ - Removed legacy code and duplicate tests
228
+ - Improved validation and formatting for list actions
229
+
230
+ ## [1.0.1] - 2025-10-30
231
+
232
+ ### Changed
233
+
234
+ - Refactored to remove duplicate list action from reminders tool for improved API clarity
235
+
236
+ ## [1.0.0] - 2025-10-30
237
+
238
+ ### Added
239
+
240
+ - Complete Swift CLI integration with native EventKit operations
241
+ - Dual URL storage strategy (EventKit field + structured notes format)
242
+ - Comprehensive input validation and security patterns
243
+ - Structured prompt templates for task management workflows
244
+ - Enhanced error handling with consistent response formatting
245
+ - MCP protocol compliance with standardized tool definitions
246
+
247
+ ### Fixed
248
+
249
+ - Swift binary compilation and permission handling improvements
250
+ - Unicode character support for international reminders
251
+ - Binary path resolution with enhanced fallback mechanisms
252
+ - Date parsing consistency across different formats
253
+
254
+ ## [0.10.0] - 2025-10-28
255
+
256
+ ### Added
257
+
258
+ - Move reminder functionality to transfer reminders between lists
259
+ - Swift CLI implementation for EventKit integration with dual URL storage
260
+ - Support for multiple date formats including ISO 8601
261
+ - ID parameter support for reading single reminder details
262
+ - Enhanced npx execution without build requirements
263
+ - Structured prompt coverage and comprehensive testing
264
+
265
+ ### Fixed
266
+
267
+ - Due date and URL parameter support for reminder creation
268
+ - Jest configuration for better TypeScript support
269
+ - Reminder type safety enforcement
270
+ - Project root fallback restoration
271
+
272
+ ## [0.9.0] - 2025-10-10
273
+
274
+ ### Added
275
+
276
+ - Structured prompt registry that consolidates Apple Reminders workflows with shared mission, process, constraint, and quality bar scaffolding.
277
+ - Strongly typed prompt metadata and argument parsing for six guided productivity flows surfaced through MCP `ListPrompts` and `GetPrompt` endpoints.
278
+
279
+ ### Changed
280
+
281
+ - Refined prompt builder utilities to favor constraint-driven message assembly and consistent output formatting across prompts.
282
+ - Hardened project root detection helpers with fallback traversal support for launches from nested directories.
283
+
284
+ ### Fixed
285
+
286
+ - Restored project root fallback traversal so CLI startup resolves the bundled Swift bridge reliably during editor integrations.
287
+
288
+ ## [0.8.1] - 2025-10-09
289
+
290
+ ### Changed
291
+
292
+ - Updated English and Chinese READMEs so integrators discover the 0.8.0 bulk operations and list CRUD workflows without reverse-engineering the API surface.
293
+
294
+ ### Fixed
295
+
296
+ - Removed redundant apostrophe escaping in the AppleScript string sanitizer to stop single-quote reminder titles from triggering syntax errors while preserving double-quote safety guarantees.
297
+
298
+ ## [0.8.0] - 2025-09-10
299
+
300
+ ### Added
301
+
302
+ - Complete CRUD operations for reminder lists with unified interface
303
+ - Enhanced URL support with structured format for consistent parsing
304
+ - Comprehensive input validation and security enhancements
305
+ - Advanced test coverage with integration tests for URL handling
306
+
307
+ ### Changed
308
+
309
+ - **Enhanced**: URL handling with structured format supporting multiple URL sections
310
+ - **Improved**: Error handling and code quality across all modules
311
+ - **Optimized**: MCP tools with simplified pure CRUD operations architecture
312
+ - **Enhanced**: Reminder functionality with better URL integration
313
+ - **Updated**: Test suite with improved mocking and expectations
314
+
315
+ ### Fixed
316
+
317
+ - URL validation pattern to allow URLs without explicit paths (e.g., https://google.com)
318
+ - Multiple URL sections parsing in structured format
319
+ - Project root detection with enhanced fallback mechanisms
320
+ - Critical test mocking issues and expectations alignment
321
+ - Input validation edge cases and security vulnerabilities
322
+ - Package.json validation for proper project root identification
323
+
324
+ ## [0.7.3] - 2025-09-03
325
+
326
+ ### Added
327
+
328
+ - Biome linting for consistent code formatting and quality checks
329
+ - Enhanced development workflow with unified cursor rules and standards
330
+ - Consolidated development guide for improved onboarding
331
+
332
+ ### Changed
333
+
334
+ - **Refactored**: Enhanced utility classes and improved code organization
335
+ - **Refactored**: Improved server architecture and request handling
336
+ - **Enhanced**: Tool handlers with better error handling and validation
337
+ - **Updated**: TypeScript configuration for better development experience
338
+ - **Improved**: Type definitions and validation schemas for enhanced type safety
339
+ - **Enhanced**: Test suites for improved coverage and reliability
340
+ - **Updated**: Documentation with improved examples and comprehensive guides
341
+
342
+ ### Fixed
343
+
344
+ - Improved unicode handling in AppleScript execution
345
+ - Removed unnecessary permission checks from MCP handlers
346
+ - Enhanced deployment process and resolved build issues
347
+ - Extracted common patterns to reduce code duplication
348
+
349
+ ## [0.7.2] - 2025-01-13
350
+
351
+ ### Changed
352
+
353
+ - **MAJOR REFACTORING**: Restructured entire codebase following SOLID principles and design patterns
354
+ - All functions reduced to <20 lines (previously 100+ lines in some cases)
355
+ - Eliminated 800+ lines of duplicated code across the application
356
+ - Reduced cyclomatic complexity from 15+ to 3-5 in most functions
357
+ - Consolidated permissions management from 4 separate files into 1 unified module
358
+ - Enhanced tool validation with action-specific parameter requirements
359
+ - Improved error messages with detailed validation feedback
360
+ - **Optimization**: Removed unnecessary `@jest/globals` dependency, reducing package size and installation time
361
+ - **Refactor**: Simplified test file imports by using global Jest functions
362
+ - **Performance**: Reduced development dependencies count, improving project build efficiency
363
+
364
+ ### Fixed
365
+
366
+ - Swift permission checking deadlock by removing `exit()` calls before dispatch group cleanup
367
+ - ES module import consistency by replacing `require()` with proper `import` statements
368
+ - TypeScript compilation errors with proper null handling for optional parameters
369
+ - Validation schema conflicts with intelligent list selection feature
370
+ - Binary path resolution with enhanced fallback mechanisms
371
+ - Fixed TypeScript compilation errors in build process, ensuring all test files work properly
372
+
373
+ ## [0.7.1] - 2025-08-20
374
+
375
+ ### Added
376
+
377
+ - Comprehensive permissions management system with proactive EventKit and AppleScript permission validation
378
+ - Conditional subschemas for precise action-specific parameter validation using JSON Schema `allOf/if/then` constructs
379
+ - 9 new utility modules following separation of concerns and SOLID principles
380
+ - Repository pattern implementation for clean data access abstraction
381
+ - Strategy pattern for pluggable reminder organization algorithms (priority, due date, category, completion status)
382
+ - Builder pattern for reusable AppleScript generation
383
+ - Centralized error handling with consistent response patterns
384
+ - User-friendly permission guidance with system-specific troubleshooting instructions
385
+
386
+ ## [0.7.0] - 2025-08-15
387
+
388
+ ### Added
389
+
390
+ - Comprehensive binary validation and security module for enhanced system protection
391
+ - Unicode validation and handling for international character support
392
+ - Enhanced security checks for binary path validation
393
+
394
+ ### Changed
395
+
396
+ - **BREAKING**: Unified tool architecture from 6 tools to 2 action-based tools for improved usability
397
+ - Streamlined API structure reduces complexity while maintaining full functionality
398
+ - Enhanced async handling for system preferences
399
+ - Optimized date-only implementation with improved architecture
400
+
401
+ ### Fixed
402
+
403
+ - Resolved merge conflicts and build errors after refactor merge
404
+ - Corrected AppleScript date format consistency issues
405
+ - Fixed binary path discovery fallbacks
406
+
407
+ ## [0.6.0] - 2025-08-05
408
+
409
+ ### Added
410
+
411
+ - Batch operations for organizing multiple reminders with `update_reminder` tool
412
+ - Organization strategies: priority, due date, category, and completion status
413
+ - Dynamic list creation through `list_reminder_lists` tool with `createNew` parameter
414
+ - Flexible filtering for batch operations (completion status, search terms, due dates)
415
+ - Auto-list creation during batch organization operations
416
+
417
+ ### Changed
418
+
419
+ - Enhanced `update_reminder` tool to support batch mode for organizing multiple reminders
420
+ - Updated `list_reminder_lists` tool to support creating new reminder lists
421
+ - Improved documentation in CLAUDE.md for new batch operation features
422
+
423
+ ### Fixed
424
+
425
+ - Resolved merge conflicts and build errors after refactor merge
426
+ - Corrected AppleScript date format to use proper English month names (MMMM D, YYYY)
427
+
428
+ ## [0.5.2] - 2025-07-15
429
+
430
+ ### Changed
431
+
432
+ - Comprehensive date handling optimization and enhancement
433
+ - Optimized date utility test structure and fixed TypeScript issues
434
+
435
+ ### Fixed
436
+
437
+ - Updated date format for AppleScript compatibility
438
+ - Force English locale for AppleScript compatibility to ensure consistent date parsing
439
+ - Locale-independent date format implementation for Apple Reminders
440
+
441
+ ## [0.5.1] - 2025-07-01
442
+
443
+ ### Added
444
+
445
+ - Date-only reminder support with locale-independent parsing
446
+ - Enhanced date parsing with improved architecture
447
+
448
+ ### Changed
449
+
450
+ - Optimized date-only implementation with better error handling
451
+
452
+ ## [0.5.0] - 2025-06-25
453
+
454
+ ### Added
455
+
456
+ - URL support for reminders with seamless note integration
457
+ - Advanced MCP server features and enhanced functionality
458
+ - Comprehensive documentation updates
459
+
460
+ ### Changed
461
+
462
+ - Enhanced reminder handling with improved note and URL integration
463
+ - Updated Jest configuration for better ES modules support
464
+ - Removed 'URL:' prefix from reminder notes for cleaner integration
465
+
466
+ ### Fixed
467
+
468
+ - Improved handling of empty notes with URLs in update reminder functionality
469
+
470
+ ## [0.4.0] - 2025-05-20
471
+
472
+ ### Added
473
+
474
+ - Update, delete, and move operations for reminders
475
+ - Enhanced filtering capabilities for `list_reminders` tool
476
+ - Comprehensive test coverage for enhanced list functionality
477
+ - MseeP.ai security assessment badge
478
+
479
+ ### Removed
480
+
481
+ - Priority and recurrence features that weren't implemented
482
+
483
+ ## [0.3.2] - 2025-05-10
484
+
485
+ ### Added
486
+
487
+ - Caching for system 24-hour time preference detection
488
+ - Support for both 12-hour and 24-hour formats based on system settings
489
+
490
+ ### Changed
491
+
492
+ - Refactored AM/PM logic using built-in formatting capabilities
493
+ - Enhanced date parsing to dynamically support system time format preferences
494
+
495
+ ## [0.3.1] - 2025-04-30
496
+
497
+ ### Added
498
+
499
+ - Enhanced project metadata and comprehensive documentation
500
+
501
+ ### Fixed
502
+
503
+ - Improved date parsing error handling in parseDate function
504
+
505
+ ## [0.3.0] - 2025-04-15
506
+
507
+ ### Added
508
+
509
+ - Migration to npm package management
510
+ - Updated dependencies for better compatibility
511
+
512
+ ### Changed
513
+
514
+ - Moved from previous package manager to npm
515
+ - Updated project structure for npm distribution
516
+
517
+ ## [0.2.0] - 2025-03-20
518
+
519
+ ### Added
520
+
521
+ - Native Swift integration for reminder management using EventKit
522
+ - Enhanced project documentation and structure
523
+ - Improved reminder creation date format specification
524
+
525
+ ### Changed
526
+
527
+ - Refactored reminder list handling for better performance
528
+ - Updated documentation with comprehensive usage examples
529
+
530
+ ## [0.1.0] - 2025-02-15
531
+
532
+ ### Added
533
+
534
+ - Enhanced reminder creation and listing with note support
535
+ - Modular code organization into src/ directory structure
536
+
537
+ ### Changed
538
+
539
+ - Reorganized codebase into proper module structure
540
+ - Improved reminder creation workflow
541
+
542
+ ## [0.0.1] - 2025-01-30
543
+
544
+ ### Added
545
+
546
+ - Initial project setup for MCP server
547
+ - Basic Apple Reminders integration
548
+ - Foundation for macOS native reminder management
549
+
550
+ [unreleased]: https://github.com/FradSer/mcp-server-apple-events/compare/v1.4.0...HEAD
551
+ [1.4.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v1.3.0...v1.4.0
552
+ [1.3.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v1.2.0...v1.3.0
553
+ [1.2.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v1.1.0...v1.2.0
554
+ [1.1.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v1.0.1...v1.1.0
555
+ [1.0.1]: https://github.com/FradSer/mcp-server-apple-events/compare/v1.0.0...v1.0.1
556
+ [1.0.0]: https://github.com/FradSer/mcp-server-apple-events/releases/tag/v1.0.0
557
+ [0.10.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.9.0...v0.10.0
558
+ [0.9.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.8.1...v0.9.0
559
+ [0.8.1]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.8.0...v0.8.1
560
+ [0.8.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.7.3...v0.8.0
561
+ [0.7.3]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.7.2...v0.7.3
562
+ [0.7.2]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.7.1...v0.7.2
563
+ [0.7.1]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.7.0...v0.7.1
564
+ [0.7.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.6.0...v0.7.0
565
+ [0.6.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.5.2...v0.6.0
566
+ [0.5.2]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.5.1...v0.5.2
567
+ [0.5.1]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.5.0...v0.5.1
568
+ [0.5.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.4.0...v0.5.0
569
+ [0.4.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.3.2...v0.4.0
570
+ [0.3.2]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.3.1...v0.3.2
571
+ [0.3.1]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.3.0...v0.3.1
572
+ [0.3.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.2.0...v0.3.0
573
+ [0.2.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.1.0...v0.2.0
574
+ [0.1.0]: https://github.com/FradSer/mcp-server-apple-events/compare/v0.0.1...v0.1.0
575
+ [0.0.1]: https://github.com/FradSer/mcp-server-apple-events/releases/tag/v0.0.1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Frad LEE
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.