@usejunior/docx-mcp 0.3.1 → 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 (167) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/cli/commands/grep.d.ts +15 -0
  3. package/dist/cli/commands/grep.d.ts.map +1 -0
  4. package/dist/cli/commands/grep.js +128 -0
  5. package/dist/cli/commands/grep.js.map +1 -0
  6. package/dist/cli/flag_parser.js +1 -1
  7. package/dist/cli/flag_parser.js.map +1 -1
  8. package/dist/cli/help.d.ts.map +1 -1
  9. package/dist/cli/help.js +1 -0
  10. package/dist/cli/help.js.map +1 -1
  11. package/dist/cli/index.d.ts.map +1 -1
  12. package/dist/cli/index.js +7 -0
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/conformance/harness.d.ts.map +1 -1
  15. package/dist/conformance/harness.js +10 -11
  16. package/dist/conformance/harness.js.map +1 -1
  17. package/dist/gdocs_loader.d.ts +2 -0
  18. package/dist/gdocs_loader.d.ts.map +1 -0
  19. package/dist/gdocs_loader.js +14 -0
  20. package/dist/gdocs_loader.js.map +1 -0
  21. package/dist/server.d.ts +2 -2
  22. package/dist/server.d.ts.map +1 -1
  23. package/dist/server.js +68 -7
  24. package/dist/server.js.map +1 -1
  25. package/dist/session/manager.d.ts +52 -16
  26. package/dist/session/manager.d.ts.map +1 -1
  27. package/dist/session/manager.js +140 -56
  28. package/dist/session/manager.js.map +1 -1
  29. package/dist/tool_catalog.d.ts +44 -55
  30. package/dist/tool_catalog.d.ts.map +1 -1
  31. package/dist/tool_catalog.js +56 -41
  32. package/dist/tool_catalog.js.map +1 -1
  33. package/dist/tools/accept_changes.d.ts +0 -1
  34. package/dist/tools/accept_changes.d.ts.map +1 -1
  35. package/dist/tools/accept_changes.js +1 -1
  36. package/dist/tools/accept_changes.js.map +1 -1
  37. package/dist/tools/add_comment.d.ts +0 -1
  38. package/dist/tools/add_comment.d.ts.map +1 -1
  39. package/dist/tools/add_comment.js +2 -2
  40. package/dist/tools/add_comment.js.map +1 -1
  41. package/dist/tools/add_footnote.d.ts +0 -1
  42. package/dist/tools/add_footnote.d.ts.map +1 -1
  43. package/dist/tools/add_footnote.js +1 -1
  44. package/dist/tools/add_footnote.js.map +1 -1
  45. package/dist/tools/apply_plan.d.ts +0 -1
  46. package/dist/tools/apply_plan.d.ts.map +1 -1
  47. package/dist/tools/apply_plan.js +6 -6
  48. package/dist/tools/apply_plan.js.map +1 -1
  49. package/dist/tools/clear_formatting.d.ts +0 -1
  50. package/dist/tools/clear_formatting.d.ts.map +1 -1
  51. package/dist/tools/clear_formatting.js +1 -1
  52. package/dist/tools/clear_formatting.js.map +1 -1
  53. package/dist/tools/{clear_session.d.ts → close_file.d.ts} +2 -3
  54. package/dist/tools/close_file.d.ts.map +1 -0
  55. package/dist/tools/close_file.js +46 -0
  56. package/dist/tools/close_file.js.map +1 -0
  57. package/dist/tools/compare_documents.d.ts +0 -1
  58. package/dist/tools/compare_documents.d.ts.map +1 -1
  59. package/dist/tools/compare_documents.js +4 -5
  60. package/dist/tools/compare_documents.js.map +1 -1
  61. package/dist/tools/delete_comment.d.ts +0 -1
  62. package/dist/tools/delete_comment.d.ts.map +1 -1
  63. package/dist/tools/delete_comment.js +1 -1
  64. package/dist/tools/delete_comment.js.map +1 -1
  65. package/dist/tools/delete_footnote.d.ts +0 -1
  66. package/dist/tools/delete_footnote.d.ts.map +1 -1
  67. package/dist/tools/delete_footnote.js +1 -1
  68. package/dist/tools/delete_footnote.js.map +1 -1
  69. package/dist/tools/extract_revisions.d.ts +0 -1
  70. package/dist/tools/extract_revisions.d.ts.map +1 -1
  71. package/dist/tools/extract_revisions.js +1 -1
  72. package/dist/tools/extract_revisions.js.map +1 -1
  73. package/dist/tools/format_layout.d.ts +0 -1
  74. package/dist/tools/format_layout.d.ts.map +1 -1
  75. package/dist/tools/format_layout.js +1 -1
  76. package/dist/tools/format_layout.js.map +1 -1
  77. package/dist/tools/gdocs/close_file.d.ts +4 -0
  78. package/dist/tools/gdocs/close_file.d.ts.map +1 -0
  79. package/dist/tools/gdocs/close_file.js +15 -0
  80. package/dist/tools/gdocs/close_file.js.map +1 -0
  81. package/dist/tools/gdocs/format_layout.d.ts +14 -0
  82. package/dist/tools/gdocs/format_layout.d.ts.map +1 -0
  83. package/dist/tools/gdocs/format_layout.js +88 -0
  84. package/dist/tools/gdocs/format_layout.js.map +1 -0
  85. package/dist/tools/gdocs/get_file_status.d.ts +4 -0
  86. package/dist/tools/gdocs/get_file_status.d.ts.map +1 -0
  87. package/dist/tools/gdocs/get_file_status.js +22 -0
  88. package/dist/tools/gdocs/get_file_status.js.map +1 -0
  89. package/dist/tools/gdocs/grep.d.ts +13 -0
  90. package/dist/tools/gdocs/grep.d.ts.map +1 -0
  91. package/dist/tools/gdocs/grep.js +113 -0
  92. package/dist/tools/gdocs/grep.js.map +1 -0
  93. package/dist/tools/gdocs/insert_paragraph.d.ts +9 -0
  94. package/dist/tools/gdocs/insert_paragraph.d.ts.map +1 -0
  95. package/dist/tools/gdocs/insert_paragraph.js +35 -0
  96. package/dist/tools/gdocs/insert_paragraph.js.map +1 -0
  97. package/dist/tools/gdocs/read_file.d.ts +9 -0
  98. package/dist/tools/gdocs/read_file.d.ts.map +1 -0
  99. package/dist/tools/gdocs/read_file.js +116 -0
  100. package/dist/tools/gdocs/read_file.js.map +1 -0
  101. package/dist/tools/gdocs/replace_text.d.ts +9 -0
  102. package/dist/tools/gdocs/replace_text.d.ts.map +1 -0
  103. package/dist/tools/gdocs/replace_text.js +35 -0
  104. package/dist/tools/gdocs/replace_text.js.map +1 -0
  105. package/dist/tools/gdocs/save.d.ts +7 -0
  106. package/dist/tools/gdocs/save.d.ts.map +1 -0
  107. package/dist/tools/gdocs/save.js +46 -0
  108. package/dist/tools/gdocs/save.js.map +1 -0
  109. package/dist/tools/get_comments.d.ts +0 -1
  110. package/dist/tools/get_comments.d.ts.map +1 -1
  111. package/dist/tools/get_comments.js +1 -1
  112. package/dist/tools/get_comments.js.map +1 -1
  113. package/dist/tools/get_file_status.d.ts +6 -0
  114. package/dist/tools/get_file_status.d.ts.map +1 -0
  115. package/dist/tools/get_file_status.js +40 -0
  116. package/dist/tools/get_file_status.js.map +1 -0
  117. package/dist/tools/get_footnotes.d.ts +0 -1
  118. package/dist/tools/get_footnotes.d.ts.map +1 -1
  119. package/dist/tools/get_footnotes.js +1 -1
  120. package/dist/tools/get_footnotes.js.map +1 -1
  121. package/dist/tools/grep.d.ts +5 -2
  122. package/dist/tools/grep.d.ts.map +1 -1
  123. package/dist/tools/grep.js +236 -90
  124. package/dist/tools/grep.js.map +1 -1
  125. package/dist/tools/has_tracked_changes.d.ts +0 -1
  126. package/dist/tools/has_tracked_changes.d.ts.map +1 -1
  127. package/dist/tools/has_tracked_changes.js +1 -1
  128. package/dist/tools/has_tracked_changes.js.map +1 -1
  129. package/dist/tools/init_plan.d.ts +0 -1
  130. package/dist/tools/init_plan.d.ts.map +1 -1
  131. package/dist/tools/init_plan.js +2 -1
  132. package/dist/tools/init_plan.js.map +1 -1
  133. package/dist/tools/insert_paragraph.d.ts +0 -1
  134. package/dist/tools/insert_paragraph.d.ts.map +1 -1
  135. package/dist/tools/insert_paragraph.js +1 -1
  136. package/dist/tools/insert_paragraph.js.map +1 -1
  137. package/dist/tools/open_document.d.ts.map +1 -1
  138. package/dist/tools/open_document.js +1 -2
  139. package/dist/tools/open_document.js.map +1 -1
  140. package/dist/tools/provider_guard.d.ts +3 -0
  141. package/dist/tools/provider_guard.d.ts.map +1 -0
  142. package/dist/tools/provider_guard.js +12 -0
  143. package/dist/tools/provider_guard.js.map +1 -0
  144. package/dist/tools/read_file.d.ts +0 -1
  145. package/dist/tools/read_file.d.ts.map +1 -1
  146. package/dist/tools/read_file.js +89 -17
  147. package/dist/tools/read_file.js.map +1 -1
  148. package/dist/tools/replace_text.d.ts +0 -1
  149. package/dist/tools/replace_text.d.ts.map +1 -1
  150. package/dist/tools/replace_text.js +1 -1
  151. package/dist/tools/replace_text.js.map +1 -1
  152. package/dist/tools/save.d.ts +0 -1
  153. package/dist/tools/save.d.ts.map +1 -1
  154. package/dist/tools/save.js +3 -4
  155. package/dist/tools/save.js.map +1 -1
  156. package/dist/tools/session_resolution.d.ts +16 -4
  157. package/dist/tools/session_resolution.d.ts.map +1 -1
  158. package/dist/tools/session_resolution.js +132 -67
  159. package/dist/tools/session_resolution.js.map +1 -1
  160. package/dist/tools/update_footnote.d.ts +0 -1
  161. package/dist/tools/update_footnote.d.ts.map +1 -1
  162. package/dist/tools/update_footnote.js +1 -1
  163. package/dist/tools/update_footnote.js.map +1 -1
  164. package/package.json +11 -3
  165. package/dist/tools/clear_session.d.ts.map +0 -1
  166. package/dist/tools/clear_session.js +0 -66
  167. package/dist/tools/clear_session.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import fs from 'node:fs/promises';
2
- import { errorMessage } from "../error_utils.js";
3
2
  import path from 'node:path';
4
3
  import { err } from './types.js';
5
4
  import { enforceReadPathPolicy } from './path_policy.js';
6
5
  import { validateDocxArchiveSafety } from './docx_archive_guard.js';
6
+ import { loadGDocsCore } from '../gdocs_loader.js';
7
7
  const MAX_DOCX_BYTES = 50 * 1024 * 1024;
8
8
  // ---------------------------------------------------------------------------
9
9
  // Concurrent auto-open deduplication
@@ -17,18 +17,6 @@ function getPendingMap(manager) {
17
17
  }
18
18
  return map;
19
19
  }
20
- function mapSessionLookupError(message, sessionId) {
21
- if (message.startsWith('INVALID_SESSION_ID:')) {
22
- return err('INVALID_SESSION_ID', message.replace(/^INVALID_SESSION_ID:/, 'Invalid session id: '), 'Session IDs must match format: ses_[12 alphanumeric chars]');
23
- }
24
- if (message.startsWith('SESSION_NOT_FOUND:')) {
25
- return err('SESSION_NOT_FOUND', `Session not found: ${sessionId}`);
26
- }
27
- if (message.startsWith('SESSION_EXPIRED:')) {
28
- return err('SESSION_EXPIRED', `Session expired: ${sessionId}`);
29
- }
30
- return err('SESSION_RESOLUTION_ERROR', `Failed to resolve session: ${message}`);
31
- }
32
20
  export async function validateAndLoadDocxFromPath(manager, filePath) {
33
21
  const normalizedPath = manager.normalizePath(filePath);
34
22
  const stat = await fs.stat(normalizedPath).catch(() => null);
@@ -83,61 +71,43 @@ export async function validateAndLoadDocxFromPath(manager, filePath) {
83
71
  export function mergeSessionResolutionMetadata(extra, metadata) {
84
72
  return { ...extra, ...metadata };
85
73
  }
74
+ /**
75
+ * Check if file has been modified externally since the session was opened.
76
+ */
77
+ async function checkStaleness(session, canonicalPath) {
78
+ try {
79
+ const stat = await fs.stat(canonicalPath);
80
+ if (stat.mtime > session.createdAt) {
81
+ return `File was modified externally at ${stat.mtime.toISOString()} (session opened at ${session.createdAt.toISOString()}). Consider closing and reopening the file.`;
82
+ }
83
+ }
84
+ catch {
85
+ // File may have been deleted — we'll let downstream tool handle that
86
+ }
87
+ return undefined;
88
+ }
86
89
  export async function resolveSessionForTool(manager, params, opts) {
87
- const sessionId = typeof params.session_id === 'string' ? params.session_id.trim() : '';
88
90
  const filePath = typeof params.file_path === 'string' ? params.file_path.trim() : '';
89
- if (!sessionId && !filePath) {
91
+ if (!filePath) {
90
92
  return {
91
93
  ok: false,
92
- response: err('MISSING_SESSION_CONTEXT', `Tool '${opts.toolName}' requires session_id or file_path.`, "Provide an existing session_id, or pass file_path to auto-open/reuse an editing session."),
93
- };
94
- }
95
- if (sessionId) {
96
- let session;
97
- try {
98
- session = manager.getSession(sessionId);
99
- }
100
- catch (e) {
101
- return {
102
- ok: false,
103
- response: mapSessionLookupError(errorMessage(e), sessionId),
104
- };
105
- }
106
- if (filePath) {
107
- const requestedPath = manager.normalizePath(filePath);
108
- const sessionPath = manager.normalizePath(session.originalPath);
109
- if (requestedPath !== sessionPath) {
110
- return {
111
- ok: false,
112
- response: err('SESSION_FILE_CONFLICT', `session_id '${sessionId}' is bound to '${sessionPath}', but file_path resolves to '${requestedPath}'.`, 'Use either session_id alone, or provide a file_path that matches the same session document.'),
113
- };
114
- }
115
- }
116
- manager.touch(session);
117
- return {
118
- ok: true,
119
- session,
120
- metadata: {
121
- session_resolution: 'explicit_session',
122
- resolved_session_id: session.sessionId,
123
- resolved_file_path: manager.normalizePath(session.originalPath),
124
- },
94
+ response: err('MISSING_FILE_PATH', `Tool '${opts.toolName}' requires file_path.`, "Provide the path to a .docx file in ~/Downloads/ or ~/Documents/."),
125
95
  };
126
96
  }
127
- const normalizedPath = manager.normalizePath(filePath);
128
- const existing = manager.getMostRecentlyUsedSessionForPath(normalizedPath);
97
+ const canonicalPath = await manager.canonicalizePath(filePath);
98
+ // Check for existing session (file-path keyed sessions are always DocxSession)
99
+ const existing = manager.getSessionByPath(canonicalPath);
129
100
  if (existing) {
130
101
  const reuseLastUsed = existing.lastAccessedAt.toISOString();
131
102
  manager.touch(existing);
103
+ const staleWarning = await checkStaleness(existing, canonicalPath);
132
104
  return {
133
105
  ok: true,
134
106
  session: existing,
135
107
  metadata: {
136
- session_resolution: 'reused_existing_session',
137
- reused_existing_session: true,
138
- warning: `Using existing editing session ${existing.sessionId} for ${normalizedPath}.`,
139
- resolved_session_id: existing.sessionId,
140
- resolved_file_path: normalizedPath,
108
+ session_resolution: 'reused',
109
+ resolved_file_path: canonicalPath,
110
+ ...(staleWarning ? { stale_warning: staleWarning } : {}),
141
111
  reused_session_context: {
142
112
  edit_revision: existing.editRevision,
143
113
  edit_count: existing.editCount,
@@ -149,7 +119,7 @@ export async function resolveSessionForTool(manager, params, opts) {
149
119
  }
150
120
  // --- Concurrent auto-open deduplication ---
151
121
  const pendingMap = getPendingMap(manager);
152
- const pending = pendingMap.get(normalizedPath);
122
+ const pending = pendingMap.get(canonicalPath);
153
123
  if (pending) {
154
124
  // Waiter: another request is already creating a session for this path
155
125
  const outcome = await pending;
@@ -160,12 +130,9 @@ export async function resolveSessionForTool(manager, params, opts) {
160
130
  session: outcome.session,
161
131
  metadata: {
162
132
  ...outcome.metadata,
163
- session_resolution: 'reused_existing_session',
164
- reused_existing_session: true,
133
+ session_resolution: 'reused',
165
134
  session_resolution_detail: 'awaited_concurrent_open',
166
- warning: `Using existing editing session ${outcome.session.sessionId} for ${normalizedPath}.`,
167
- resolved_session_id: outcome.session.sessionId,
168
- resolved_file_path: normalizedPath,
135
+ resolved_file_path: canonicalPath,
169
136
  },
170
137
  };
171
138
  }
@@ -186,23 +153,121 @@ export async function resolveSessionForTool(manager, params, opts) {
186
153
  ok: true,
187
154
  session,
188
155
  metadata: {
189
- session_resolution: 'opened_new_session',
190
- resolved_session_id: session.sessionId,
191
- resolved_file_path: loaded.normalizedPath,
156
+ session_resolution: 'opened',
157
+ resolved_file_path: canonicalPath,
192
158
  },
193
159
  };
194
160
  }
195
161
  finally {
196
162
  // Identity-guarded cleanup
197
- if (pendingMap.get(normalizedPath) === storedPromise) {
198
- pendingMap.delete(normalizedPath);
163
+ if (pendingMap.get(canonicalPath) === storedPromise) {
164
+ pendingMap.delete(canonicalPath);
199
165
  }
200
166
  }
201
167
  })();
202
168
  storedPromise = outcomePromise;
203
169
  // Prevent unhandled rejection warnings for exceptional throws
204
170
  outcomePromise.catch(() => { });
205
- pendingMap.set(normalizedPath, outcomePromise);
171
+ pendingMap.set(canonicalPath, outcomePromise);
172
+ return await outcomePromise;
173
+ }
174
+ // ---------------------------------------------------------------------------
175
+ // Google Docs session resolution
176
+ // ---------------------------------------------------------------------------
177
+ function extractGoogleDocId(input) {
178
+ const urlMatch = input.match(/\/document\/d\/([a-zA-Z0-9_-]+)/);
179
+ if (urlMatch)
180
+ return urlMatch[1];
181
+ return input.trim();
182
+ }
183
+ const gdocsPendingByManager = new WeakMap();
184
+ function getGDocsPendingMap(manager) {
185
+ let map = gdocsPendingByManager.get(manager);
186
+ if (!map) {
187
+ map = new Map();
188
+ gdocsPendingByManager.set(manager, map);
189
+ }
190
+ return map;
191
+ }
192
+ export async function resolveGDocsSessionForTool(manager, params, opts) {
193
+ const rawId = typeof params.google_doc_id === 'string' ? params.google_doc_id.trim() : '';
194
+ if (!rawId) {
195
+ return {
196
+ ok: false,
197
+ response: err('MISSING_GOOGLE_DOC_ID', `Tool '${opts.toolName}' requires google_doc_id.`, 'Provide a Google Doc ID or URL.'),
198
+ };
199
+ }
200
+ const docId = extractGoogleDocId(rawId);
201
+ const sessionKey = `gdocs:${docId}`;
202
+ // Check existing session
203
+ const existing = manager.getSessionByPath(sessionKey);
204
+ if (existing && existing.provider === 'gdocs') {
205
+ manager.touch(existing);
206
+ return {
207
+ ok: true,
208
+ session: existing,
209
+ metadata: {
210
+ session_resolution: 'reused',
211
+ google_doc_id: docId,
212
+ reused_session_context: {
213
+ edit_revision: existing.editRevision,
214
+ edit_count: existing.editCount,
215
+ created_at: existing.createdAt.toISOString(),
216
+ last_used_at: existing.lastAccessedAt.toISOString(),
217
+ },
218
+ },
219
+ };
220
+ }
221
+ // Concurrent dedup
222
+ const pendingMap = getGDocsPendingMap(manager);
223
+ const pending = pendingMap.get(sessionKey);
224
+ if (pending) {
225
+ const outcome = await pending;
226
+ if (outcome.ok) {
227
+ manager.touch(outcome.session);
228
+ return {
229
+ ok: true,
230
+ session: outcome.session,
231
+ metadata: {
232
+ ...outcome.metadata,
233
+ session_resolution: 'reused',
234
+ session_resolution_detail: 'awaited_concurrent_open',
235
+ },
236
+ };
237
+ }
238
+ return outcome;
239
+ }
240
+ let storedPromise;
241
+ const outcomePromise = (async () => {
242
+ try {
243
+ const gdocsCore = await loadGDocsCore();
244
+ if (!gdocsCore) {
245
+ return {
246
+ ok: false,
247
+ response: err('MISSING_DEPENDENCY', 'Google Docs support requires @usejunior/google-docs-core.', 'Run: npm install @usejunior/google-docs-core'),
248
+ };
249
+ }
250
+ const doc = await gdocsCore.GoogleDocsDocument.load(docId);
251
+ await doc.injectAnchors();
252
+ const session = manager.createGDocsSession(docId, doc);
253
+ return {
254
+ ok: true,
255
+ session,
256
+ metadata: {
257
+ session_resolution: 'opened',
258
+ google_doc_id: docId,
259
+ },
260
+ };
261
+ }
262
+ finally {
263
+ if (pendingMap.get(sessionKey) === storedPromise) {
264
+ pendingMap.delete(sessionKey);
265
+ }
266
+ }
267
+ })();
268
+ storedPromise = outcomePromise;
269
+ outcomePromise.catch(() => { });
270
+ pendingMap.set(sessionKey, outcomePromise);
206
271
  return await outcomePromise;
207
272
  }
208
273
  //# sourceMappingURL=session_resolution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session_resolution.js","sourceRoot":"","sources":["../../src/tools/session_resolution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session_resolution.js","sourceRoot":"","sources":["../../src/tools/session_resolution.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { SessionManager } from '../session/manager.js';
2
2
  import { type ToolResponse } from './types.js';
3
3
  export declare function updateFootnote(manager: SessionManager, params: {
4
- session_id?: string;
5
4
  file_path?: string;
6
5
  note_id?: number;
7
6
  new_text?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"update_footnote.d.ts","sourceRoot":"","sources":["../../src/tools/update_footnote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,YAAY,CAAC,CAoCvB"}
1
+ {"version":3,"file":"update_footnote.d.ts","sourceRoot":"","sources":["../../src/tools/update_footnote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,YAAY,CAAC,CAoCvB"}
@@ -25,7 +25,7 @@ export async function updateFootnote(manager, params) {
25
25
  manager.markEdited(session);
26
26
  return ok(mergeSessionResolutionMetadata({
27
27
  note_id: params.note_id,
28
- session_id: session.sessionId,
28
+ file_path: manager.normalizePath(session.originalPath),
29
29
  }, metadata));
30
30
  }
31
31
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"update_footnote.js","sourceRoot":"","sources":["../../src/tools/update_footnote.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,EAAE,EAAE,GAAG,EAAqB,MAAM,YAAY,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,MAKC;IAED,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC3C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;IAEvC,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,oCAAoC,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,gCAAgC,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,CAAC;QACH,yCAAyC;QACzC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,GAAG,CAAC,gBAAgB,EAAE,eAAe,MAAM,CAAC,OAAO,YAAY,EAAE,gDAAgD,CAAC,CAAC;QAC5H,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACnC,MAAM,EAAE,MAAM,CAAC,OAAO;YACtB,OAAO,EAAE,MAAM,CAAC,QAAQ;SACzB,CAAC,CAAC;QAEH,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,EAAE,CAAC,8BAA8B,CAAC;YACvC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,OAAO,CAAC,SAAS;SAC9B,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChB,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,gBAAgB,EAAE,GAAG,EAAE,gDAAgD,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"update_footnote.js","sourceRoot":"","sources":["../../src/tools/update_footnote.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,EAAE,EAAE,GAAG,EAAqB,MAAM,YAAY,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,MAIC;IAED,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC3C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;IAEvC,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,oCAAoC,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,gCAAgC,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,CAAC;QACH,yCAAyC;QACzC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,GAAG,CAAC,gBAAgB,EAAE,eAAe,MAAM,CAAC,OAAO,YAAY,EAAE,gDAAgD,CAAC,CAAC;QAC5H,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACnC,MAAM,EAAE,MAAM,CAAC,OAAO;YACtB,OAAO,EAAE,MAAM,CAAC,QAAQ;SACzB,CAAC,CAAC;QAEH,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,EAAE,CAAC,8BAA8B,CAAC;YACvC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC;SACvD,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChB,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,gBAAgB,EAAE,GAAG,EAAE,gDAAgD,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usejunior/docx-mcp",
3
- "version": "0.3.1",
3
+ "version": "0.6.0",
4
4
  "description": "Safe Docx MCP server (TypeScript)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "scripts": {
13
13
  "clean:dist": "node -e \"const { rmSync } = require('node:fs'); rmSync('dist', { recursive: true, force: true });\"",
14
- "build": "npm run build -w @usejunior/docx-core &&npm run clean:dist && tsc -p tsconfig.build.json",
14
+ "build": "npm run build -w @usejunior/docx-core && npm run build -w @usejunior/google-docs-core --if-present &&npm run clean:dist && tsc -p tsconfig.build.json",
15
15
  "dev": "tsx watch src/cli.ts",
16
16
  "check:spec-coverage": "node scripts/validate_openspec_coverage.mjs",
17
17
  "conformance:discover": "tsx scripts/discover_docx_fixtures.ts --out conformance/discovery.report.json",
@@ -26,7 +26,7 @@
26
26
  "lint": "tsc -b --pretty false"
27
27
  },
28
28
  "dependencies": {
29
- "@usejunior/docx-core": "^0.3.1",
29
+ "@usejunior/docx-core": "^0.6.0",
30
30
  "@modelcontextprotocol/sdk": "^1.0.0",
31
31
  "zod": "^4.3.6"
32
32
  },
@@ -52,6 +52,14 @@
52
52
  "files": [
53
53
  "dist"
54
54
  ],
55
+ "peerDependencies": {
56
+ "@usejunior/google-docs-core": "^0.6.0"
57
+ },
58
+ "peerDependenciesMeta": {
59
+ "@usejunior/google-docs-core": {
60
+ "optional": true
61
+ }
62
+ },
55
63
  "license": "MIT",
56
64
  "keywords": [
57
65
  "mcp",
@@ -1 +0,0 @@
1
- {"version":3,"file":"clear_session.d.ts","sourceRoot":"","sources":["../../src/tools/clear_session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA,OAAO,CAAC,YAAY,CAAC,CAyFvB"}
@@ -1,66 +0,0 @@
1
- import { errorMessage } from "../error_utils.js";
2
- import { err, ok } from './types.js';
3
- export async function clearSession(manager, params) {
4
- try {
5
- const clearAll = params.clear_all === true;
6
- const sessionId = typeof params.session_id === 'string' ? params.session_id.trim() : '';
7
- const filePath = typeof params.file_path === 'string' ? params.file_path.trim() : '';
8
- const hasSessionId = sessionId.length > 0;
9
- const hasFilePath = filePath.length > 0;
10
- if (clearAll) {
11
- if (params.confirm !== true) {
12
- return err('CONFIRMATION_REQUIRED', 'clear_all=true requires confirm=true.', 'Re-run with confirm=true to clear every active session.');
13
- }
14
- if (hasSessionId || hasFilePath) {
15
- return err('INVALID_CLEAR_TARGET', 'clear_all=true cannot be combined with session_id or file_path.', 'Use clear_all=true, confirm=true by itself, or remove clear_all and target a session_id/file_path.');
16
- }
17
- const clearedIds = await manager.clearAllSessions();
18
- return ok({
19
- clear_mode: 'all',
20
- cleared_session_ids: clearedIds,
21
- cleared_count: clearedIds.length,
22
- });
23
- }
24
- if (hasSessionId && hasFilePath) {
25
- return err('INVALID_CLEAR_TARGET', 'Provide either session_id or file_path, not both.', 'Use session_id to clear one session, or file_path to clear all sessions for one file.');
26
- }
27
- if (!hasSessionId && !hasFilePath) {
28
- return err('INVALID_CLEAR_TARGET', 'clear_session requires session_id, file_path, or clear_all=true.', 'Provide session_id to clear one session, file_path to clear all sessions for a file, or clear_all=true with confirm=true.');
29
- }
30
- if (hasSessionId) {
31
- try {
32
- await manager.clearSessionById(sessionId);
33
- }
34
- catch (e) {
35
- const msg = errorMessage(e);
36
- if (msg.startsWith('INVALID_SESSION_ID:')) {
37
- return err('INVALID_SESSION_ID', msg.replace(/^INVALID_SESSION_ID:/, 'Invalid session id: '), 'Session IDs must match format: ses_[12 alphanumeric chars]');
38
- }
39
- if (msg.startsWith('SESSION_NOT_FOUND:')) {
40
- return err('SESSION_NOT_FOUND', `Session not found: ${sessionId}`);
41
- }
42
- if (msg.startsWith('SESSION_EXPIRED:')) {
43
- return err('SESSION_EXPIRED', `Session expired: ${sessionId}`);
44
- }
45
- return err('CLEAR_SESSION_ERROR', `Failed to clear session: ${msg}`);
46
- }
47
- return ok({
48
- clear_mode: 'session_id',
49
- cleared_session_ids: [sessionId],
50
- cleared_count: 1,
51
- });
52
- }
53
- const normalizedPath = manager.normalizePath(filePath);
54
- const clearedIds = await manager.clearSessionsByPath(normalizedPath);
55
- return ok({
56
- clear_mode: 'file_path',
57
- file_path: normalizedPath,
58
- cleared_session_ids: clearedIds,
59
- cleared_count: clearedIds.length,
60
- });
61
- }
62
- catch (e) {
63
- return err('CLEAR_SESSION_ERROR', `Failed to clear session(s): ${errorMessage(e)}`);
64
- }
65
- }
66
- //# sourceMappingURL=clear_session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clear_session.js","sourceRoot":"","sources":["../../src/tools/clear_session.ts"],"names":[],"mappings":"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"}