@wonderwhy-er/desktop-commander 0.2.34 → 0.2.36

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 (179) hide show
  1. package/README.md +2 -0
  2. package/dist/handlers/filesystem-handlers.js +58 -11
  3. package/dist/handlers/history-handlers.d.ts +7 -0
  4. package/dist/handlers/history-handlers.js +33 -1
  5. package/dist/server.js +30 -4
  6. package/dist/tools/docx/builders/html-builder.d.ts +17 -0
  7. package/dist/tools/docx/builders/html-builder.js +92 -0
  8. package/dist/tools/docx/builders/image.d.ts +14 -0
  9. package/dist/tools/docx/builders/image.js +84 -0
  10. package/dist/tools/docx/builders/index.d.ts +11 -0
  11. package/dist/tools/docx/builders/index.js +11 -0
  12. package/dist/tools/docx/builders/markdown-builder.d.ts +2 -0
  13. package/dist/tools/docx/builders/markdown-builder.js +260 -0
  14. package/dist/tools/docx/builders/paragraph.d.ts +12 -0
  15. package/dist/tools/docx/builders/paragraph.js +29 -0
  16. package/dist/tools/docx/builders/table.d.ts +8 -0
  17. package/dist/tools/docx/builders/table.js +94 -0
  18. package/dist/tools/docx/builders/utils.d.ts +5 -0
  19. package/dist/tools/docx/builders/utils.js +18 -0
  20. package/dist/tools/docx/constants.d.ts +32 -0
  21. package/dist/tools/docx/constants.js +61 -0
  22. package/dist/tools/docx/converters/markdown-to-html.d.ts +17 -0
  23. package/dist/tools/docx/converters/markdown-to-html.js +111 -0
  24. package/dist/tools/docx/create.d.ts +21 -0
  25. package/dist/tools/docx/create.js +386 -0
  26. package/dist/tools/docx/dom.d.ts +66 -0
  27. package/dist/tools/docx/dom.js +228 -0
  28. package/dist/tools/docx/errors.d.ts +28 -0
  29. package/dist/tools/docx/errors.js +48 -0
  30. package/dist/tools/docx/extractors/images.d.ts +14 -0
  31. package/dist/tools/docx/extractors/images.js +40 -0
  32. package/dist/tools/docx/extractors/metadata.d.ts +14 -0
  33. package/dist/tools/docx/extractors/metadata.js +64 -0
  34. package/dist/tools/docx/extractors/sections.d.ts +14 -0
  35. package/dist/tools/docx/extractors/sections.js +61 -0
  36. package/dist/tools/docx/html.d.ts +17 -0
  37. package/dist/tools/docx/html.js +111 -0
  38. package/dist/tools/docx/index.d.ts +10 -0
  39. package/dist/tools/docx/index.js +10 -0
  40. package/dist/tools/docx/markdown.d.ts +84 -0
  41. package/dist/tools/docx/markdown.js +507 -0
  42. package/dist/tools/docx/modify.d.ts +28 -0
  43. package/dist/tools/docx/modify.js +271 -0
  44. package/dist/tools/docx/operations/handlers/index.d.ts +39 -0
  45. package/dist/tools/docx/operations/handlers/index.js +152 -0
  46. package/dist/tools/docx/operations/html-manipulator.d.ts +24 -0
  47. package/dist/tools/docx/operations/html-manipulator.js +352 -0
  48. package/dist/tools/docx/operations/index.d.ts +14 -0
  49. package/dist/tools/docx/operations/index.js +61 -0
  50. package/dist/tools/docx/operations/operation-handlers.d.ts +3 -0
  51. package/dist/tools/docx/operations/operation-handlers.js +67 -0
  52. package/dist/tools/docx/operations/preprocessor.d.ts +14 -0
  53. package/dist/tools/docx/operations/preprocessor.js +44 -0
  54. package/dist/tools/docx/operations/xml-replacer.d.ts +9 -0
  55. package/dist/tools/docx/operations/xml-replacer.js +35 -0
  56. package/dist/tools/docx/operations.d.ts +13 -0
  57. package/dist/tools/docx/operations.js +13 -0
  58. package/dist/tools/docx/ops/delete-paragraph-at-body-index.d.ts +11 -0
  59. package/dist/tools/docx/ops/delete-paragraph-at-body-index.js +23 -0
  60. package/dist/tools/docx/ops/header-replace-text-exact.d.ts +13 -0
  61. package/dist/tools/docx/ops/header-replace-text-exact.js +55 -0
  62. package/dist/tools/docx/ops/index.d.ts +17 -0
  63. package/dist/tools/docx/ops/index.js +67 -0
  64. package/dist/tools/docx/ops/insert-image-after-text.d.ts +24 -0
  65. package/dist/tools/docx/ops/insert-image-after-text.js +128 -0
  66. package/dist/tools/docx/ops/insert-paragraph-after-text.d.ts +12 -0
  67. package/dist/tools/docx/ops/insert-paragraph-after-text.js +74 -0
  68. package/dist/tools/docx/ops/insert-table-after-text.d.ts +19 -0
  69. package/dist/tools/docx/ops/insert-table-after-text.js +57 -0
  70. package/dist/tools/docx/ops/replace-hyperlink-url.d.ts +12 -0
  71. package/dist/tools/docx/ops/replace-hyperlink-url.js +37 -0
  72. package/dist/tools/docx/ops/replace-paragraph-at-body-index.d.ts +9 -0
  73. package/dist/tools/docx/ops/replace-paragraph-at-body-index.js +25 -0
  74. package/dist/tools/docx/ops/replace-paragraph-text-exact.d.ts +9 -0
  75. package/dist/tools/docx/ops/replace-paragraph-text-exact.js +21 -0
  76. package/dist/tools/docx/ops/set-color-for-paragraph-exact.d.ts +8 -0
  77. package/dist/tools/docx/ops/set-color-for-paragraph-exact.js +23 -0
  78. package/dist/tools/docx/ops/set-color-for-style.d.ts +9 -0
  79. package/dist/tools/docx/ops/set-color-for-style.js +27 -0
  80. package/dist/tools/docx/ops/set-paragraph-style-at-body-index.d.ts +8 -0
  81. package/dist/tools/docx/ops/set-paragraph-style-at-body-index.js +57 -0
  82. package/dist/tools/docx/ops/table-set-cell-text.d.ts +9 -0
  83. package/dist/tools/docx/ops/table-set-cell-text.js +72 -0
  84. package/dist/tools/docx/parsers/image-extractor.d.ts +18 -0
  85. package/dist/tools/docx/parsers/image-extractor.js +61 -0
  86. package/dist/tools/docx/parsers/index.d.ts +9 -0
  87. package/dist/tools/docx/parsers/index.js +9 -0
  88. package/dist/tools/docx/parsers/paragraph-parser.d.ts +2 -0
  89. package/dist/tools/docx/parsers/paragraph-parser.js +88 -0
  90. package/dist/tools/docx/parsers/table-parser.d.ts +9 -0
  91. package/dist/tools/docx/parsers/table-parser.js +72 -0
  92. package/dist/tools/docx/parsers/xml-parser.d.ts +25 -0
  93. package/dist/tools/docx/parsers/xml-parser.js +71 -0
  94. package/dist/tools/docx/parsers/zip-reader.d.ts +23 -0
  95. package/dist/tools/docx/parsers/zip-reader.js +52 -0
  96. package/dist/tools/docx/read.d.ts +27 -0
  97. package/dist/tools/docx/read.js +188 -0
  98. package/dist/tools/docx/relationships.d.ts +22 -0
  99. package/dist/tools/docx/relationships.js +76 -0
  100. package/dist/tools/docx/structure.d.ts +25 -0
  101. package/dist/tools/docx/structure.js +102 -0
  102. package/dist/tools/docx/styled-html-parser.d.ts +23 -0
  103. package/dist/tools/docx/styled-html-parser.js +1262 -0
  104. package/dist/tools/docx/types.d.ts +184 -0
  105. package/dist/tools/docx/types.js +5 -0
  106. package/dist/tools/docx/utils/escaping.d.ts +13 -0
  107. package/dist/tools/docx/utils/escaping.js +26 -0
  108. package/dist/tools/docx/utils/images.d.ts +9 -0
  109. package/dist/tools/docx/utils/images.js +26 -0
  110. package/dist/tools/docx/utils/index.d.ts +12 -0
  111. package/dist/tools/docx/utils/index.js +17 -0
  112. package/dist/tools/docx/utils/markdown.d.ts +13 -0
  113. package/dist/tools/docx/utils/markdown.js +32 -0
  114. package/dist/tools/docx/utils/paths.d.ts +15 -0
  115. package/dist/tools/docx/utils/paths.js +27 -0
  116. package/dist/tools/docx/utils/versioning.d.ts +25 -0
  117. package/dist/tools/docx/utils/versioning.js +55 -0
  118. package/dist/tools/docx/utils.d.ts +101 -0
  119. package/dist/tools/docx/utils.js +299 -0
  120. package/dist/tools/docx/validate.d.ts +33 -0
  121. package/dist/tools/docx/validate.js +49 -0
  122. package/dist/tools/docx/validators.d.ts +13 -0
  123. package/dist/tools/docx/validators.js +40 -0
  124. package/dist/tools/docx/write.d.ts +17 -0
  125. package/dist/tools/docx/write.js +88 -0
  126. package/dist/tools/docx/zip.d.ts +21 -0
  127. package/dist/tools/docx/zip.js +35 -0
  128. package/dist/tools/schemas.d.ts +13 -0
  129. package/dist/tools/schemas.js +5 -0
  130. package/dist/types.d.ts +10 -0
  131. package/dist/ui/contracts.d.ts +14 -0
  132. package/dist/ui/contracts.js +18 -0
  133. package/dist/ui/file-preview/index.html +16 -0
  134. package/dist/ui/file-preview/preview-runtime.js +13977 -0
  135. package/dist/ui/file-preview/shared/preview-file-types.d.ts +5 -0
  136. package/dist/ui/file-preview/shared/preview-file-types.js +57 -0
  137. package/dist/ui/file-preview/src/app.d.ts +4 -0
  138. package/dist/ui/file-preview/src/app.js +800 -0
  139. package/dist/ui/file-preview/src/components/code-viewer.d.ts +6 -0
  140. package/dist/ui/file-preview/src/components/code-viewer.js +73 -0
  141. package/dist/ui/file-preview/src/components/highlighting.d.ts +2 -0
  142. package/dist/ui/file-preview/src/components/highlighting.js +54 -0
  143. package/dist/ui/file-preview/src/components/html-renderer.d.ts +9 -0
  144. package/dist/ui/file-preview/src/components/html-renderer.js +63 -0
  145. package/dist/ui/file-preview/src/components/markdown-renderer.d.ts +1 -0
  146. package/dist/ui/file-preview/src/components/markdown-renderer.js +21 -0
  147. package/dist/ui/file-preview/src/components/toolbar.d.ts +6 -0
  148. package/dist/ui/file-preview/src/components/toolbar.js +75 -0
  149. package/dist/ui/file-preview/src/image-preview.d.ts +3 -0
  150. package/dist/ui/file-preview/src/image-preview.js +21 -0
  151. package/dist/ui/file-preview/src/main.d.ts +1 -0
  152. package/dist/ui/file-preview/src/main.js +5 -0
  153. package/dist/ui/file-preview/src/types.d.ts +1 -0
  154. package/dist/ui/file-preview/src/types.js +1 -0
  155. package/dist/ui/file-preview/styles.css +764 -0
  156. package/dist/ui/resources.d.ts +21 -0
  157. package/dist/ui/resources.js +72 -0
  158. package/dist/ui/shared/escape-html.d.ts +4 -0
  159. package/dist/ui/shared/escape-html.js +11 -0
  160. package/dist/ui/shared/host-lifecycle.d.ts +16 -0
  161. package/dist/ui/shared/host-lifecycle.js +35 -0
  162. package/dist/ui/shared/rpc-client.d.ts +14 -0
  163. package/dist/ui/shared/rpc-client.js +72 -0
  164. package/dist/ui/shared/theme-adaptation.d.ts +10 -0
  165. package/dist/ui/shared/theme-adaptation.js +118 -0
  166. package/dist/ui/shared/tool-header.d.ts +9 -0
  167. package/dist/ui/shared/tool-header.js +25 -0
  168. package/dist/ui/shared/tool-shell.d.ts +16 -0
  169. package/dist/ui/shared/tool-shell.js +65 -0
  170. package/dist/ui/shared/widget-state.d.ts +28 -0
  171. package/dist/ui/shared/widget-state.js +60 -0
  172. package/dist/utils/capture.d.ts +1 -0
  173. package/dist/utils/capture.js +10 -4
  174. package/dist/utils/files/docx.d.ts +34 -0
  175. package/dist/utils/files/docx.js +145 -0
  176. package/dist/utils/files/text.js +9 -1
  177. package/dist/version.d.ts +1 -1
  178. package/dist/version.js +1 -1
  179. package/package.json +5 -2
@@ -0,0 +1,145 @@
1
+ /**
2
+ * DOCX File Handler
3
+ * Implements FileHandler interface for DOCX documents
4
+ * Handles reading, writing, and modifying DOCX files while preserving formatting
5
+ */
6
+ import fs from 'fs/promises';
7
+ import { readDocx, getDocxMetadata, modifyDocxContent } from '../../tools/docx/index.js';
8
+ /**
9
+ * File handler for DOCX documents
10
+ * Extracts text and metadata, supports paragraph-based pagination
11
+ */
12
+ export class DocxFileHandler {
13
+ constructor() {
14
+ this.extensions = ['.docx'];
15
+ }
16
+ /**
17
+ * Check if this handler can handle the given file
18
+ */
19
+ canHandle(path) {
20
+ const ext = path.toLowerCase();
21
+ return this.extensions.some(e => ext.endsWith(e));
22
+ }
23
+ /**
24
+ * Read DOCX content - returns body XML for LLM modification
25
+ */
26
+ async read(path, options) {
27
+ const { offset = 0, length } = options ?? {};
28
+ try {
29
+ const result = await readDocx(path, {
30
+ offset,
31
+ length
32
+ });
33
+ // Return body XML as content - LLMs can modify this and write it back
34
+ return {
35
+ content: result.bodyXml,
36
+ mimeType: 'application/xml',
37
+ metadata: {
38
+ isDocx: true,
39
+ author: result.metadata.author,
40
+ title: result.metadata.title,
41
+ subject: result.metadata.subject,
42
+ creator: result.metadata.creator,
43
+ paragraphCount: result.metadata.paragraphCount,
44
+ wordCount: result.metadata.wordCount,
45
+ paragraphs: result.paragraphs,
46
+ // Include extracted text for reference
47
+ extractedText: result.text
48
+ }
49
+ };
50
+ }
51
+ catch (error) {
52
+ const errorMessage = error instanceof Error ? error.message : String(error);
53
+ return {
54
+ content: `Error reading DOCX: ${errorMessage}`,
55
+ mimeType: 'text/plain',
56
+ metadata: {
57
+ error: true,
58
+ errorMessage
59
+ }
60
+ };
61
+ }
62
+ }
63
+ /**
64
+ * Write DOCX - NOT SUPPORTED via write_file
65
+ * Use write_docx tool instead to preserve styles
66
+ */
67
+ async write(path, content, mode) {
68
+ throw new Error('DOCX files cannot be written using write_file tool. ' +
69
+ 'Use write_docx tool instead to create or modify DOCX files while preserving styles and formatting.');
70
+ }
71
+ /**
72
+ * Edit DOCX by applying modifications
73
+ */
74
+ async editRange(path, range, content, options) {
75
+ try {
76
+ // Parse content as modifications
77
+ let modifications = [];
78
+ if (Array.isArray(content)) {
79
+ modifications = content;
80
+ }
81
+ else if (typeof content === 'string') {
82
+ // Try to parse as JSON
83
+ try {
84
+ modifications = JSON.parse(content);
85
+ }
86
+ catch {
87
+ // If not JSON, treat as single replace operation
88
+ modifications = [{
89
+ type: 'replace',
90
+ findText: range,
91
+ replaceText: content
92
+ }];
93
+ }
94
+ }
95
+ const outputPath = options?.outputPath || path;
96
+ await modifyDocxContent(path, outputPath, modifications);
97
+ return {
98
+ success: true,
99
+ editsApplied: modifications.length
100
+ };
101
+ }
102
+ catch (error) {
103
+ const errorMessage = error instanceof Error ? error.message : String(error);
104
+ return {
105
+ success: false,
106
+ editsApplied: 0,
107
+ errors: [{ location: range, error: errorMessage }]
108
+ };
109
+ }
110
+ }
111
+ /**
112
+ * Get DOCX file information
113
+ */
114
+ async getInfo(path) {
115
+ const stats = await fs.stat(path);
116
+ // Get DOCX metadata
117
+ let metadata = { isDocx: true };
118
+ try {
119
+ const docxMetadata = await getDocxMetadata(path);
120
+ metadata = {
121
+ isDocx: true,
122
+ title: docxMetadata.title,
123
+ author: docxMetadata.author,
124
+ subject: docxMetadata.subject,
125
+ creator: docxMetadata.creator,
126
+ paragraphCount: docxMetadata.paragraphCount,
127
+ wordCount: docxMetadata.wordCount
128
+ };
129
+ }
130
+ catch {
131
+ // If we can't parse, just return basic info
132
+ }
133
+ return {
134
+ size: stats.size,
135
+ created: stats.birthtime,
136
+ modified: stats.mtime,
137
+ accessed: stats.atime,
138
+ isDirectory: false,
139
+ isFile: true,
140
+ permissions: (stats.mode & 0o777).toString(8),
141
+ fileType: 'binary',
142
+ metadata
143
+ };
144
+ }
145
+ }
@@ -87,7 +87,15 @@ export class TextFileHandler {
87
87
  * Made static and public for use by other modules (e.g., writeFile telemetry in filesystem.ts)
88
88
  */
89
89
  static countLines(content) {
90
- return content.split('\n').length;
90
+ if (content === '')
91
+ return 0;
92
+ // A file with N lines has N-1 newline characters.
93
+ // If the file ends with a trailing newline, don't count the empty string after it.
94
+ const lines = content.split('\n');
95
+ if (lines[lines.length - 1] === '') {
96
+ return lines.length - 1;
97
+ }
98
+ return lines.length;
91
99
  }
92
100
  /**
93
101
  * Get file line count (for files under size limit)
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "0.2.34";
1
+ export declare const VERSION = "0.2.36";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = '0.2.34';
1
+ export const VERSION = '0.2.36';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wonderwhy-er/desktop-commander",
3
- "version": "0.2.34",
3
+ "version": "0.2.36",
4
4
  "description": "MCP server for terminal operations and file editing",
5
5
  "mcpName": "io.github.wonderwhy-er/desktop-commander",
6
6
  "license": "MIT",
@@ -31,7 +31,7 @@
31
31
  "bump": "node scripts/sync-version.js --bump",
32
32
  "bump:minor": "node scripts/sync-version.js --bump --minor",
33
33
  "bump:major": "node scripts/sync-version.js --bump --major",
34
- "build": "tsc && shx cp setup-claude-server.js uninstall-claude-server.js track-installation.js dist/ && shx chmod +x dist/*.js && shx mkdir -p dist/data && shx cp src/data/onboarding-prompts.json dist/data/ && shx mkdir -p dist/remote-device/scripts && shx cp src/remote-device/scripts/blocking-offline-update.js dist/remote-device/scripts/",
34
+ "build": "tsc && shx cp setup-claude-server.js uninstall-claude-server.js track-installation.js dist/ && shx chmod +x dist/*.js && shx mkdir -p dist/data && shx cp src/data/onboarding-prompts.json dist/data/ && shx mkdir -p dist/remote-device/scripts && shx cp src/remote-device/scripts/blocking-offline-update.js dist/remote-device/scripts/ && node scripts/build-ui-runtime.cjs file-preview",
35
35
  "watch": "tsc --watch",
36
36
  "start": "node dist/index.js",
37
37
  "start:debug": "node --inspect-brk=9229 dist/index.js",
@@ -90,7 +90,9 @@
90
90
  "fastest-levenshtein": "^1.0.16",
91
91
  "file-type": "^21.1.1",
92
92
  "glob": "^10.3.10",
93
+ "highlight.js": "^11.11.1",
93
94
  "isbinaryfile": "^5.0.4",
95
+ "markdown-it": "^14.1.0",
94
96
  "md-to-pdf": "^5.2.5",
95
97
  "open": "^10.2.0",
96
98
  "pdf-lib": "^1.17.1",
@@ -110,6 +112,7 @@
110
112
  "@anthropic-ai/mcpb": "^1.2.0",
111
113
  "@types/node": "^20.17.24",
112
114
  "commander": "^13.1.0",
115
+ "esbuild": "^0.27.2",
113
116
  "nexe": "^5.0.0-beta.4",
114
117
  "nodemon": "^3.0.2",
115
118
  "shx": "^0.3.4",