@heznpc/imcp 0.1.0 → 0.6.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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +225 -57
  3. package/README.md +222 -30
  4. package/dist/calendar/prompts.d.ts +2 -0
  5. package/dist/calendar/prompts.js +43 -0
  6. package/dist/calendar/prompts.js.map +1 -0
  7. package/dist/calendar/scripts.d.ts +20 -0
  8. package/dist/calendar/scripts.js +283 -0
  9. package/dist/calendar/scripts.js.map +1 -0
  10. package/dist/calendar/tools.d.ts +3 -0
  11. package/dist/calendar/tools.js +252 -0
  12. package/dist/calendar/tools.js.map +1 -0
  13. package/dist/contacts/scripts.d.ts +22 -0
  14. package/dist/contacts/scripts.js +220 -0
  15. package/dist/contacts/scripts.js.map +1 -0
  16. package/dist/contacts/tools.d.ts +3 -0
  17. package/dist/contacts/tools.js +173 -0
  18. package/dist/contacts/tools.js.map +1 -0
  19. package/dist/cross/prompts.d.ts +2 -0
  20. package/dist/cross/prompts.js +177 -0
  21. package/dist/cross/prompts.js.map +1 -0
  22. package/dist/finder/scripts.d.ts +8 -0
  23. package/dist/finder/scripts.js +127 -0
  24. package/dist/finder/scripts.js.map +1 -0
  25. package/dist/finder/tools.d.ts +3 -0
  26. package/dist/finder/tools.js +134 -0
  27. package/dist/finder/tools.js.map +1 -0
  28. package/dist/index.js +38 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/intelligence/tools.d.ts +3 -0
  31. package/dist/intelligence/tools.js +74 -0
  32. package/dist/intelligence/tools.js.map +1 -0
  33. package/dist/mail/scripts.d.ts +9 -0
  34. package/dist/mail/scripts.js +214 -0
  35. package/dist/mail/scripts.js.map +1 -0
  36. package/dist/mail/tools.d.ts +3 -0
  37. package/dist/mail/tools.js +145 -0
  38. package/dist/mail/tools.js.map +1 -0
  39. package/dist/music/scripts.d.ts +9 -0
  40. package/dist/music/scripts.js +180 -0
  41. package/dist/music/scripts.js.map +1 -0
  42. package/dist/music/tools.d.ts +3 -0
  43. package/dist/music/tools.js +143 -0
  44. package/dist/music/tools.js.map +1 -0
  45. package/dist/notes/prompts.js +1 -6
  46. package/dist/notes/prompts.js.map +1 -1
  47. package/dist/notes/scripts.js +1 -11
  48. package/dist/notes/scripts.js.map +1 -1
  49. package/dist/notes/tools.js +1 -11
  50. package/dist/notes/tools.js.map +1 -1
  51. package/dist/photos/scripts.d.ts +7 -0
  52. package/dist/photos/scripts.js +142 -0
  53. package/dist/photos/scripts.js.map +1 -0
  54. package/dist/photos/tools.d.ts +3 -0
  55. package/dist/photos/tools.js +158 -0
  56. package/dist/photos/tools.js.map +1 -0
  57. package/dist/reminders/prompts.d.ts +2 -0
  58. package/dist/reminders/prompts.js +40 -0
  59. package/dist/reminders/prompts.js.map +1 -0
  60. package/dist/reminders/scripts.d.ts +21 -0
  61. package/dist/reminders/scripts.js +202 -0
  62. package/dist/reminders/scripts.js.map +1 -0
  63. package/dist/reminders/tools.d.ts +3 -0
  64. package/dist/reminders/tools.js +267 -0
  65. package/dist/reminders/tools.js.map +1 -0
  66. package/dist/safari/scripts.d.ts +8 -0
  67. package/dist/safari/scripts.js +120 -0
  68. package/dist/safari/scripts.js.map +1 -0
  69. package/dist/safari/tools.d.ts +3 -0
  70. package/dist/safari/tools.js +129 -0
  71. package/dist/safari/tools.js.map +1 -0
  72. package/dist/shared/esc.d.ts +10 -0
  73. package/dist/shared/esc.js +35 -0
  74. package/dist/shared/esc.js.map +1 -0
  75. package/dist/shared/jxa.js +1 -1
  76. package/dist/shared/jxa.js.map +1 -1
  77. package/dist/shared/prompt.d.ts +11 -0
  78. package/dist/shared/prompt.js +8 -0
  79. package/dist/shared/prompt.js.map +1 -0
  80. package/dist/shared/resources.d.ts +5 -0
  81. package/dist/shared/resources.js +81 -0
  82. package/dist/shared/resources.js.map +1 -0
  83. package/dist/shared/result.d.ts +15 -0
  84. package/dist/shared/result.js +14 -0
  85. package/dist/shared/result.js.map +1 -0
  86. package/dist/shared/setup.d.ts +2 -0
  87. package/dist/shared/setup.js +44 -0
  88. package/dist/shared/setup.js.map +1 -0
  89. package/dist/shared/swift.d.ts +2 -0
  90. package/dist/shared/swift.js +73 -0
  91. package/dist/shared/swift.js.map +1 -0
  92. package/dist/shortcuts/scripts.d.ts +4 -0
  93. package/dist/shortcuts/scripts.js +47 -0
  94. package/dist/shortcuts/scripts.js.map +1 -0
  95. package/dist/shortcuts/tools.d.ts +3 -0
  96. package/dist/shortcuts/tools.js +66 -0
  97. package/dist/shortcuts/tools.js.map +1 -0
  98. package/dist/system/scripts.d.ts +9 -0
  99. package/dist/system/scripts.js +124 -0
  100. package/dist/system/scripts.js.map +1 -0
  101. package/dist/system/tools.d.ts +3 -0
  102. package/dist/system/tools.js +179 -0
  103. package/dist/system/tools.js.map +1 -0
  104. package/package.json +39 -5
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ImcpConfig } from "../shared/config.js";
3
+ export declare function registerMailTools(server: McpServer, _config: ImcpConfig): void;
@@ -0,0 +1,145 @@
1
+ import { z } from "zod";
2
+ import { runJxa } from "../shared/jxa.js";
3
+ import { ok, err } from "../shared/result.js";
4
+ import { listMailboxesScript, listMessagesScript, readMessageScript, searchMessagesScript, markReadScript, flagMessageScript, getUnreadCountScript, moveMessageScript, listAccountsScript, } from "./scripts.js";
5
+ export function registerMailTools(server, _config) {
6
+ server.registerTool("list_mailboxes", {
7
+ title: "List Mailboxes",
8
+ description: "List all mailboxes across accounts with unread counts.",
9
+ inputSchema: {},
10
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
11
+ }, async () => {
12
+ try {
13
+ return ok(await runJxa(listMailboxesScript()));
14
+ }
15
+ catch (e) {
16
+ return err(`Failed to list mailboxes: ${e instanceof Error ? e.message : String(e)}`);
17
+ }
18
+ });
19
+ server.registerTool("list_messages", {
20
+ title: "List Messages",
21
+ description: "List recent messages in a mailbox (e.g. 'INBOX'). Returns subject, sender, date, read status.",
22
+ inputSchema: {
23
+ mailbox: z.string().describe("Mailbox name (e.g. 'INBOX', 'Sent Messages')"),
24
+ account: z.string().optional().describe("Account name. Defaults to first account."),
25
+ limit: z.number().int().min(1).max(200).optional().default(50).describe("Max messages (default: 50)"),
26
+ },
27
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
28
+ }, async ({ mailbox, account, limit }) => {
29
+ try {
30
+ return ok(await runJxa(listMessagesScript(mailbox, limit, account)));
31
+ }
32
+ catch (e) {
33
+ return err(`Failed to list messages: ${e instanceof Error ? e.message : String(e)}`);
34
+ }
35
+ });
36
+ server.registerTool("read_message", {
37
+ title: "Read Message",
38
+ description: "Read full content of an email message by ID. Content length is configurable (default: 5000 chars, max: 100000).",
39
+ inputSchema: {
40
+ id: z.string().describe("Message ID"),
41
+ maxLength: z.number().int().min(100).max(100000).optional().default(5000).describe("Max content length (default: 5000)"),
42
+ },
43
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
44
+ }, async ({ id, maxLength }) => {
45
+ try {
46
+ return ok(await runJxa(readMessageScript(id, maxLength)));
47
+ }
48
+ catch (e) {
49
+ return err(`Failed to read message: ${e instanceof Error ? e.message : String(e)}`);
50
+ }
51
+ });
52
+ server.registerTool("search_messages", {
53
+ title: "Search Messages",
54
+ description: "Search messages by keyword in subject or sender within a mailbox.",
55
+ inputSchema: {
56
+ query: z.string().describe("Search keyword"),
57
+ mailbox: z.string().optional().default("INBOX").describe("Mailbox to search (default: INBOX)"),
58
+ limit: z.number().int().min(1).max(200).optional().default(30).describe("Max results (default: 30)"),
59
+ },
60
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
61
+ }, async ({ query, mailbox, limit }) => {
62
+ try {
63
+ return ok(await runJxa(searchMessagesScript(query, mailbox, limit)));
64
+ }
65
+ catch (e) {
66
+ return err(`Failed to search messages: ${e instanceof Error ? e.message : String(e)}`);
67
+ }
68
+ });
69
+ server.registerTool("mark_message_read", {
70
+ title: "Mark Message Read/Unread",
71
+ description: "Mark an email message as read or unread.",
72
+ inputSchema: {
73
+ id: z.string().describe("Message ID"),
74
+ read: z.boolean().optional().default(true).describe("true=read, false=unread (default: true)"),
75
+ },
76
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
77
+ }, async ({ id, read }) => {
78
+ try {
79
+ return ok(await runJxa(markReadScript(id, read)));
80
+ }
81
+ catch (e) {
82
+ return err(`Failed to mark message: ${e instanceof Error ? e.message : String(e)}`);
83
+ }
84
+ });
85
+ server.registerTool("flag_message", {
86
+ title: "Flag Message",
87
+ description: "Flag or unflag an email message.",
88
+ inputSchema: {
89
+ id: z.string().describe("Message ID"),
90
+ flagged: z.boolean().optional().default(true).describe("true=flag, false=unflag (default: true)"),
91
+ },
92
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
93
+ }, async ({ id, flagged }) => {
94
+ try {
95
+ return ok(await runJxa(flagMessageScript(id, flagged)));
96
+ }
97
+ catch (e) {
98
+ return err(`Failed to flag message: ${e instanceof Error ? e.message : String(e)}`);
99
+ }
100
+ });
101
+ server.registerTool("get_unread_count", {
102
+ title: "Get Unread Count",
103
+ description: "Get unread message count across all mailboxes.",
104
+ inputSchema: {},
105
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
106
+ }, async () => {
107
+ try {
108
+ return ok(await runJxa(getUnreadCountScript()));
109
+ }
110
+ catch (e) {
111
+ return err(`Failed to get unread count: ${e instanceof Error ? e.message : String(e)}`);
112
+ }
113
+ });
114
+ server.registerTool("move_message", {
115
+ title: "Move Message",
116
+ description: "Move a message to another mailbox.",
117
+ inputSchema: {
118
+ id: z.string().describe("Message ID"),
119
+ targetMailbox: z.string().describe("Target mailbox name (e.g. 'Archive', 'Trash')"),
120
+ targetAccount: z.string().optional().describe("Target account name. Searches all accounts if omitted."),
121
+ },
122
+ annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
123
+ }, async ({ id, targetMailbox, targetAccount }) => {
124
+ try {
125
+ return ok(await runJxa(moveMessageScript(id, targetMailbox, targetAccount)));
126
+ }
127
+ catch (e) {
128
+ return err(`Failed to move message: ${e instanceof Error ? e.message : String(e)}`);
129
+ }
130
+ });
131
+ server.registerTool("list_accounts", {
132
+ title: "List Mail Accounts",
133
+ description: "List all mail accounts.",
134
+ inputSchema: {},
135
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
136
+ }, async () => {
137
+ try {
138
+ return ok(await runJxa(listAccountsScript()));
139
+ }
140
+ catch (e) {
141
+ return err(`Failed to list accounts: ${e instanceof Error ? e.message : String(e)}`);
142
+ }
143
+ });
144
+ }
145
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mail/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function listPlaylistsScript(): string;
2
+ export declare function listTracksScript(playlist: string, limit: number): string;
3
+ export declare function nowPlayingScript(): string;
4
+ export declare function playbackControlScript(action: string): string;
5
+ export declare function searchTracksScript(query: string, limit: number): string;
6
+ export declare function playTrackScript(trackName: string, playlist?: string): string;
7
+ export declare function playPlaylistScript(name: string, shuffle?: boolean): string;
8
+ export declare function getTrackInfoScript(trackName: string): string;
9
+ export declare function setShuffleScript(shuffle?: boolean, songRepeat?: string): string;
@@ -0,0 +1,180 @@
1
+ // JXA scripts for Apple Music automation.
2
+ import { esc } from "../shared/esc.js";
3
+ export function listPlaylistsScript() {
4
+ return `
5
+ const Music = Application('Music');
6
+ const names = Music.playlists.name();
7
+ const ids = Music.playlists.id();
8
+ const durations = Music.playlists.duration();
9
+ const result = names.map((name, i) => ({
10
+ id: ids[i],
11
+ name: name,
12
+ duration: durations[i],
13
+ trackCount: Music.playlists[i].tracks.length
14
+ }));
15
+ JSON.stringify(result);
16
+ `;
17
+ }
18
+ export function listTracksScript(playlist, limit) {
19
+ return `
20
+ const Music = Application('Music');
21
+ const playlists = Music.playlists.whose({name: '${esc(playlist)}'})();
22
+ if (playlists.length === 0) throw new Error('Playlist not found: ${esc(playlist)}');
23
+ const pl = playlists[0];
24
+ const tracks = pl.tracks();
25
+ const count = Math.min(tracks.length, ${limit});
26
+ const result = [];
27
+ for (let i = 0; i < count; i++) {
28
+ const t = tracks[i];
29
+ result.push({
30
+ id: t.id(),
31
+ name: t.name(),
32
+ artist: t.artist(),
33
+ album: t.album(),
34
+ duration: t.duration(),
35
+ trackNumber: t.trackNumber(),
36
+ genre: t.genre(),
37
+ year: t.year()
38
+ });
39
+ }
40
+ JSON.stringify({total: tracks.length, returned: count, tracks: result});
41
+ `;
42
+ }
43
+ export function nowPlayingScript() {
44
+ return `
45
+ const Music = Application('Music');
46
+ const state = Music.playerState();
47
+ if (state === 'stopped') {
48
+ JSON.stringify({playerState: 'stopped', track: null});
49
+ } else {
50
+ const t = Music.currentTrack;
51
+ JSON.stringify({
52
+ playerState: state,
53
+ track: {
54
+ name: t.name(),
55
+ artist: t.artist(),
56
+ album: t.album(),
57
+ duration: t.duration(),
58
+ playerPosition: Music.playerPosition()
59
+ }
60
+ });
61
+ }
62
+ `;
63
+ }
64
+ const ALLOWED_ACTIONS = new Set(["play", "pause", "nextTrack", "previousTrack"]);
65
+ export function playbackControlScript(action) {
66
+ if (!ALLOWED_ACTIONS.has(action)) {
67
+ throw new Error(`Invalid playback action: ${action}`);
68
+ }
69
+ return `
70
+ const Music = Application('Music');
71
+ Music.${action}();
72
+ const state = Music.playerState();
73
+ JSON.stringify({action: '${action}', playerState: state});
74
+ `;
75
+ }
76
+ export function searchTracksScript(query, limit) {
77
+ return `
78
+ const Music = Application('Music');
79
+ const lib = Music.playlists.whose({name: 'Library'})();
80
+ if (lib.length === 0) {
81
+ JSON.stringify({returned: 0, tracks: []});
82
+ } else {
83
+ const tracks = lib[0].tracks();
84
+ const q = '${esc(query)}'.toLowerCase();
85
+ const result = [];
86
+ for (let i = 0; i < tracks.length && result.length < ${limit}; i++) {
87
+ const name = tracks[i].name() || '';
88
+ const artist = tracks[i].artist() || '';
89
+ const album = tracks[i].album() || '';
90
+ if (name.toLowerCase().includes(q) || artist.toLowerCase().includes(q) || album.toLowerCase().includes(q)) {
91
+ result.push({
92
+ id: tracks[i].id(),
93
+ name: name,
94
+ artist: artist,
95
+ album: album,
96
+ duration: tracks[i].duration()
97
+ });
98
+ }
99
+ }
100
+ JSON.stringify({returned: result.length, tracks: result});
101
+ }
102
+ `;
103
+ }
104
+ export function playTrackScript(trackName, playlist) {
105
+ if (playlist) {
106
+ return `
107
+ const Music = Application('Music');
108
+ const pls = Music.playlists.whose({name: '${esc(playlist)}'})();
109
+ if (pls.length === 0) throw new Error('Playlist not found: ${esc(playlist)}');
110
+ const tracks = pls[0].tracks.whose({name: '${esc(trackName)}'})();
111
+ if (tracks.length === 0) throw new Error('Track not found: ${esc(trackName)}');
112
+ tracks[0].play();
113
+ JSON.stringify({playing: true, track: tracks[0].name(), artist: tracks[0].artist()});
114
+ `;
115
+ }
116
+ return `
117
+ const Music = Application('Music');
118
+ const lib = Music.playlists.whose({name: 'Library'})();
119
+ if (lib.length === 0) throw new Error('Library not found');
120
+ const tracks = lib[0].tracks.whose({name: '${esc(trackName)}'})();
121
+ if (tracks.length === 0) throw new Error('Track not found: ${esc(trackName)}');
122
+ tracks[0].play();
123
+ JSON.stringify({playing: true, track: tracks[0].name(), artist: tracks[0].artist()});
124
+ `;
125
+ }
126
+ export function playPlaylistScript(name, shuffle) {
127
+ return `
128
+ const Music = Application('Music');
129
+ const pls = Music.playlists.whose({name: '${esc(name)}'})();
130
+ if (pls.length === 0) throw new Error('Playlist not found: ${esc(name)}');
131
+ ${shuffle !== undefined ? `Music.shuffleEnabled = ${shuffle};` : ''}
132
+ pls[0].play();
133
+ JSON.stringify({playing: true, playlist: '${esc(name)}', shuffle: Music.shuffleEnabled()});
134
+ `;
135
+ }
136
+ export function getTrackInfoScript(trackName) {
137
+ return `
138
+ const Music = Application('Music');
139
+ const lib = Music.playlists.whose({name: 'Library'})();
140
+ if (lib.length === 0) throw new Error('Library not found');
141
+ const tracks = lib[0].tracks.whose({name: '${esc(trackName)}'})();
142
+ if (tracks.length === 0) throw new Error('Track not found: ${esc(trackName)}');
143
+ const t = tracks[0];
144
+ JSON.stringify({
145
+ id: t.id(),
146
+ name: t.name(),
147
+ artist: t.artist(),
148
+ album: t.album(),
149
+ albumArtist: t.albumArtist(),
150
+ genre: t.genre(),
151
+ year: t.year(),
152
+ trackNumber: t.trackNumber(),
153
+ discNumber: t.discNumber(),
154
+ duration: t.duration(),
155
+ playedCount: t.playedCount(),
156
+ rating: t.rating(),
157
+ loved: t.loved(),
158
+ dateAdded: t.dateAdded() ? t.dateAdded().toISOString() : null,
159
+ sampleRate: t.sampleRate(),
160
+ bitRate: t.bitRate(),
161
+ size: t.size()
162
+ });
163
+ `;
164
+ }
165
+ export function setShuffleScript(shuffle, songRepeat) {
166
+ const lines = [];
167
+ if (shuffle !== undefined)
168
+ lines.push(`Music.shuffleEnabled = ${shuffle};`);
169
+ if (songRepeat !== undefined)
170
+ lines.push(`Music.songRepeat = '${esc(songRepeat)}';`);
171
+ return `
172
+ const Music = Application('Music');
173
+ ${lines.join('\n ')}
174
+ JSON.stringify({
175
+ shuffleEnabled: Music.shuffleEnabled(),
176
+ songRepeat: Music.songRepeat()
177
+ });
178
+ `;
179
+ }
180
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/music/scripts.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;GAYN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,KAAa;IAC9D,OAAO;;sDAE6C,GAAG,CAAC,QAAQ,CAAC;uEACI,GAAG,CAAC,QAAQ,CAAC;;;4CAGxC,KAAK;;;;;;;;;;;;;;;;GAgB9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;GAkBN,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;AAEjF,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO;;YAEG,MAAM;;+BAEa,MAAM;GAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,KAAa;IAC7D,OAAO;;;;;;;mBAOU,GAAG,CAAC,KAAK,CAAC;;6DAEgC,KAAK;;;;;;;;;;;;;;;;GAgB/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,QAAiB;IAClE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;;kDAEuC,GAAG,CAAC,QAAQ,CAAC;mEACI,GAAG,CAAC,QAAQ,CAAC;mDAC7B,GAAG,CAAC,SAAS,CAAC;mEACE,GAAG,CAAC,SAAS,CAAC;;;KAG5E,CAAC;IACJ,CAAC;IACD,OAAO;;;;iDAIwC,GAAG,CAAC,SAAS,CAAC;iEACE,GAAG,CAAC,SAAS,CAAC;;;GAG5E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAiB;IAChE,OAAO;;gDAEuC,GAAG,CAAC,IAAI,CAAC;iEACQ,GAAG,CAAC,IAAI,CAAC;MACpE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE;;gDAEvB,GAAG,CAAC,IAAI,CAAC;GACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,OAAO;;;;iDAIwC,GAAG,CAAC,SAAS,CAAC;iEACE,GAAG,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;GAqB5E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAiB,EAAE,UAAmB;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,0BAA0B,OAAO,GAAG,CAAC,CAAC;IAC5E,IAAI,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrF,OAAO;;MAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;;GAKvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ImcpConfig } from "../shared/config.js";
3
+ export declare function registerMusicTools(server: McpServer, _config: ImcpConfig): void;
@@ -0,0 +1,143 @@
1
+ import { z } from "zod";
2
+ import { runJxa } from "../shared/jxa.js";
3
+ import { ok, err } from "../shared/result.js";
4
+ import { listPlaylistsScript, listTracksScript, nowPlayingScript, playbackControlScript, searchTracksScript, playTrackScript, playPlaylistScript, getTrackInfoScript, setShuffleScript, } from "./scripts.js";
5
+ export function registerMusicTools(server, _config) {
6
+ server.registerTool("list_playlists", {
7
+ title: "List Playlists",
8
+ description: "List all Music playlists with track counts and duration.",
9
+ inputSchema: {},
10
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
11
+ }, async () => {
12
+ try {
13
+ return ok(await runJxa(listPlaylistsScript()));
14
+ }
15
+ catch (e) {
16
+ return err(`Failed to list playlists: ${e instanceof Error ? e.message : String(e)}`);
17
+ }
18
+ });
19
+ server.registerTool("list_tracks", {
20
+ title: "List Tracks",
21
+ description: "List tracks in a playlist with name, artist, album, and duration.",
22
+ inputSchema: {
23
+ playlist: z.string().describe("Playlist name"),
24
+ limit: z.number().int().min(1).max(500).optional().default(100).describe("Max tracks (default: 100)"),
25
+ },
26
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
27
+ }, async ({ playlist, limit }) => {
28
+ try {
29
+ return ok(await runJxa(listTracksScript(playlist, limit)));
30
+ }
31
+ catch (e) {
32
+ return err(`Failed to list tracks: ${e instanceof Error ? e.message : String(e)}`);
33
+ }
34
+ });
35
+ server.registerTool("now_playing", {
36
+ title: "Now Playing",
37
+ description: "Get the currently playing track and playback state.",
38
+ inputSchema: {},
39
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
40
+ }, async () => {
41
+ try {
42
+ return ok(await runJxa(nowPlayingScript()));
43
+ }
44
+ catch (e) {
45
+ return err(`Failed to get now playing: ${e instanceof Error ? e.message : String(e)}`);
46
+ }
47
+ });
48
+ server.registerTool("playback_control", {
49
+ title: "Playback Control",
50
+ description: "Control Music playback: play, pause, nextTrack, previousTrack.",
51
+ inputSchema: {
52
+ action: z.enum(["play", "pause", "nextTrack", "previousTrack"]).describe("Playback action"),
53
+ },
54
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
55
+ }, async ({ action }) => {
56
+ try {
57
+ return ok(await runJxa(playbackControlScript(action)));
58
+ }
59
+ catch (e) {
60
+ return err(`Failed to control playback: ${e instanceof Error ? e.message : String(e)}`);
61
+ }
62
+ });
63
+ server.registerTool("search_tracks", {
64
+ title: "Search Tracks",
65
+ description: "Search tracks in Music library by name, artist, or album.",
66
+ inputSchema: {
67
+ query: z.string().describe("Search keyword"),
68
+ limit: z.number().int().min(1).max(200).optional().default(30).describe("Max results (default: 30)"),
69
+ },
70
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
71
+ }, async ({ query, limit }) => {
72
+ try {
73
+ return ok(await runJxa(searchTracksScript(query, limit)));
74
+ }
75
+ catch (e) {
76
+ return err(`Failed to search tracks: ${e instanceof Error ? e.message : String(e)}`);
77
+ }
78
+ });
79
+ server.registerTool("play_track", {
80
+ title: "Play Track",
81
+ description: "Play a specific track by name, optionally from a specific playlist.",
82
+ inputSchema: {
83
+ trackName: z.string().describe("Track name to play"),
84
+ playlist: z.string().optional().describe("Playlist to search in (default: Library)"),
85
+ },
86
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
87
+ }, async ({ trackName, playlist }) => {
88
+ try {
89
+ return ok(await runJxa(playTrackScript(trackName, playlist)));
90
+ }
91
+ catch (e) {
92
+ return err(`Failed to play track: ${e instanceof Error ? e.message : String(e)}`);
93
+ }
94
+ });
95
+ server.registerTool("play_playlist", {
96
+ title: "Play Playlist",
97
+ description: "Start playing a playlist by name, with optional shuffle control.",
98
+ inputSchema: {
99
+ name: z.string().describe("Playlist name"),
100
+ shuffle: z.boolean().optional().describe("Enable or disable shuffle"),
101
+ },
102
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
103
+ }, async ({ name, shuffle }) => {
104
+ try {
105
+ return ok(await runJxa(playPlaylistScript(name, shuffle)));
106
+ }
107
+ catch (e) {
108
+ return err(`Failed to play playlist: ${e instanceof Error ? e.message : String(e)}`);
109
+ }
110
+ });
111
+ server.registerTool("get_track_info", {
112
+ title: "Get Track Info",
113
+ description: "Get detailed metadata for a specific track by name.",
114
+ inputSchema: {
115
+ trackName: z.string().describe("Track name to look up"),
116
+ },
117
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
118
+ }, async ({ trackName }) => {
119
+ try {
120
+ return ok(await runJxa(getTrackInfoScript(trackName)));
121
+ }
122
+ catch (e) {
123
+ return err(`Failed to get track info: ${e instanceof Error ? e.message : String(e)}`);
124
+ }
125
+ });
126
+ server.registerTool("set_shuffle", {
127
+ title: "Set Shuffle & Repeat",
128
+ description: "Enable/disable shuffle and set repeat mode (off, one, all).",
129
+ inputSchema: {
130
+ shuffle: z.boolean().optional().describe("Enable or disable shuffle"),
131
+ songRepeat: z.enum(["off", "one", "all"]).optional().describe("Repeat mode"),
132
+ },
133
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
134
+ }, async ({ shuffle, songRepeat }) => {
135
+ try {
136
+ return ok(await runJxa(setShuffleScript(shuffle, songRepeat)));
137
+ }
138
+ catch (e) {
139
+ return err(`Failed to set shuffle/repeat: ${e instanceof Error ? e.message : String(e)}`);
140
+ }
141
+ });
142
+ }
143
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/music/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,OAAmB;IACvE,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,0DAA0D;QACvE,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACxG,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,6BAA6B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,mEAAmE;QAChF,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SACtG;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5B,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,0BAA0B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,qDAAqD;QAClE,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACxG,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,8BAA8B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SAC5F;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1G,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,+BAA+B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SACrG;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,4BAA4B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,qEAAqE;QAClF,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACpD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACrF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1G,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,yBAAyB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,kEAAkE;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SACtE;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1G,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,4BAA4B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,qDAAqD;QAClE,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SACxD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,6BAA6B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YACrE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;SAC7E;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACzG,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,iCAAiC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,10 +1,5 @@
1
1
  import { z } from "zod";
2
- function userPrompt(description, text) {
3
- return {
4
- description,
5
- messages: [{ role: "user", content: { type: "text", text } }],
6
- };
7
- }
2
+ import { userPrompt } from "../shared/prompt.js";
8
3
  export function registerNotePrompts(server) {
9
4
  server.prompt("organize-notes", { folder: z.string().optional().describe("Source folder to organize. Defaults to 'Notes'.") }, ({ folder }) => {
10
5
  const target = folder ?? "Notes";
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/notes/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,SAAS,UAAU,CAAC,WAAmB,EAAE,IAAY;IACnD,OAAO;QACL,WAAW;QACX,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,EAAE,CAAC;KAChF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,MAAM,CACX,gBAAgB,EAChB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC,EAAE,EAC7F,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC;QACjC,OAAO,UAAU,CACf,8EAA8E,EAC9E,iBAAiB,MAAM;;;;yBAIN,MAAM;;;;;;2DAM4B,CACpD,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,iBAAiB,EACjB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC,EAAE,EAC7F,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,OAAO,UAAU,CACf,wEAAwE,EACxE,iBAAiB,KAAK;;;;;;;;;;sEAUwC,CAC/D,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,eAAe,EACf,sEAAsE,EACtE,GAAG,EAAE;QACH,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAChF,OAAO,UAAU,CACf,sEAAsE,EACtE;;;;;KAKH,UAAU;;;;;2CAK4B,CACpC,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/notes/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,MAAM,CACX,gBAAgB,EAChB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC,EAAE,EAC7F,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC;QACjC,OAAO,UAAU,CACf,8EAA8E,EAC9E,iBAAiB,MAAM;;;;yBAIN,MAAM;;;;;;2DAM4B,CACpD,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,iBAAiB,EACjB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC,EAAE,EAC7F,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,OAAO,UAAU,CACf,wEAAwE,EACxE,iBAAiB,KAAK;;;;;;;;;;sEAUwC,CAC/D,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,eAAe,EACf,sEAAsE,EACtE,GAAG,EAAE;QACH,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAChF,OAAO,UAAU,CACf,sEAAsE,EACtE;;;;;KAKH,UAAU;;;;;2CAK4B,CACpC,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  // JXA scripts for Apple Notes automation.
2
2
  // Each function returns a JXA script string to be executed via osascript.
3
+ import { esc } from "../shared/esc.js";
3
4
  export function listNotesScript(folder) {
4
5
  if (folder) {
5
6
  return `
@@ -334,15 +335,4 @@ export function bulkMoveNotesScript(ids, targetFolder) {
334
335
  JSON.stringify({targetFolder: '${esc(targetFolder)}', moved: results.filter(r => r.success).length, failed: results.filter(r => !r.success).length, results: results});
335
336
  `;
336
337
  }
337
- function esc(str) {
338
- return str
339
- .replace(/\0/g, "")
340
- .replace(/\\/g, "\\\\")
341
- .replace(/'/g, "\\'")
342
- .replace(/\n/g, "\\n")
343
- .replace(/\r/g, "\\r")
344
- .replace(/\t/g, "\\t")
345
- .replace(/\u2028/g, "\\u2028")
346
- .replace(/\u2029/g, "\\u2029");
347
- }
348
338
  //# sourceMappingURL=scripts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/notes/scripts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/notes/scripts.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { runJxa } from "../shared/jxa.js";
3
+ import { ok, err } from "../shared/result.js";
3
4
  import { listNotesScript, searchNotesScript, readNoteScript, createNoteScript, createNoteSharedScript, updateNoteScript, deleteNoteScript, guardSharedScript, guardSharedBulkScript, listFoldersScript, createFolderScript, scanNotesScript, compareNotesScript, moveNoteScript, bulkMoveNotesScript, } from "./scripts.js";
4
- function ok(data) {
5
- return {
6
- content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
7
- };
8
- }
9
- function err(message) {
10
- return {
11
- content: [{ type: "text", text: message }],
12
- isError: true,
13
- };
14
- }
15
5
  function filterShared(items, includeShared) {
16
6
  if (includeShared)
17
7
  return items;