@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.
- package/README.md +2 -0
- package/dist/handlers/filesystem-handlers.js +58 -11
- package/dist/handlers/history-handlers.d.ts +7 -0
- package/dist/handlers/history-handlers.js +33 -1
- package/dist/server.js +30 -4
- package/dist/tools/docx/builders/html-builder.d.ts +17 -0
- package/dist/tools/docx/builders/html-builder.js +92 -0
- package/dist/tools/docx/builders/image.d.ts +14 -0
- package/dist/tools/docx/builders/image.js +84 -0
- package/dist/tools/docx/builders/index.d.ts +11 -0
- package/dist/tools/docx/builders/index.js +11 -0
- package/dist/tools/docx/builders/markdown-builder.d.ts +2 -0
- package/dist/tools/docx/builders/markdown-builder.js +260 -0
- package/dist/tools/docx/builders/paragraph.d.ts +12 -0
- package/dist/tools/docx/builders/paragraph.js +29 -0
- package/dist/tools/docx/builders/table.d.ts +8 -0
- package/dist/tools/docx/builders/table.js +94 -0
- package/dist/tools/docx/builders/utils.d.ts +5 -0
- package/dist/tools/docx/builders/utils.js +18 -0
- package/dist/tools/docx/constants.d.ts +32 -0
- package/dist/tools/docx/constants.js +61 -0
- package/dist/tools/docx/converters/markdown-to-html.d.ts +17 -0
- package/dist/tools/docx/converters/markdown-to-html.js +111 -0
- package/dist/tools/docx/create.d.ts +21 -0
- package/dist/tools/docx/create.js +386 -0
- package/dist/tools/docx/dom.d.ts +66 -0
- package/dist/tools/docx/dom.js +228 -0
- package/dist/tools/docx/errors.d.ts +28 -0
- package/dist/tools/docx/errors.js +48 -0
- package/dist/tools/docx/extractors/images.d.ts +14 -0
- package/dist/tools/docx/extractors/images.js +40 -0
- package/dist/tools/docx/extractors/metadata.d.ts +14 -0
- package/dist/tools/docx/extractors/metadata.js +64 -0
- package/dist/tools/docx/extractors/sections.d.ts +14 -0
- package/dist/tools/docx/extractors/sections.js +61 -0
- package/dist/tools/docx/html.d.ts +17 -0
- package/dist/tools/docx/html.js +111 -0
- package/dist/tools/docx/index.d.ts +10 -0
- package/dist/tools/docx/index.js +10 -0
- package/dist/tools/docx/markdown.d.ts +84 -0
- package/dist/tools/docx/markdown.js +507 -0
- package/dist/tools/docx/modify.d.ts +28 -0
- package/dist/tools/docx/modify.js +271 -0
- package/dist/tools/docx/operations/handlers/index.d.ts +39 -0
- package/dist/tools/docx/operations/handlers/index.js +152 -0
- package/dist/tools/docx/operations/html-manipulator.d.ts +24 -0
- package/dist/tools/docx/operations/html-manipulator.js +352 -0
- package/dist/tools/docx/operations/index.d.ts +14 -0
- package/dist/tools/docx/operations/index.js +61 -0
- package/dist/tools/docx/operations/operation-handlers.d.ts +3 -0
- package/dist/tools/docx/operations/operation-handlers.js +67 -0
- package/dist/tools/docx/operations/preprocessor.d.ts +14 -0
- package/dist/tools/docx/operations/preprocessor.js +44 -0
- package/dist/tools/docx/operations/xml-replacer.d.ts +9 -0
- package/dist/tools/docx/operations/xml-replacer.js +35 -0
- package/dist/tools/docx/operations.d.ts +13 -0
- package/dist/tools/docx/operations.js +13 -0
- package/dist/tools/docx/ops/delete-paragraph-at-body-index.d.ts +11 -0
- package/dist/tools/docx/ops/delete-paragraph-at-body-index.js +23 -0
- package/dist/tools/docx/ops/header-replace-text-exact.d.ts +13 -0
- package/dist/tools/docx/ops/header-replace-text-exact.js +55 -0
- package/dist/tools/docx/ops/index.d.ts +17 -0
- package/dist/tools/docx/ops/index.js +67 -0
- package/dist/tools/docx/ops/insert-image-after-text.d.ts +24 -0
- package/dist/tools/docx/ops/insert-image-after-text.js +128 -0
- package/dist/tools/docx/ops/insert-paragraph-after-text.d.ts +12 -0
- package/dist/tools/docx/ops/insert-paragraph-after-text.js +74 -0
- package/dist/tools/docx/ops/insert-table-after-text.d.ts +19 -0
- package/dist/tools/docx/ops/insert-table-after-text.js +57 -0
- package/dist/tools/docx/ops/replace-hyperlink-url.d.ts +12 -0
- package/dist/tools/docx/ops/replace-hyperlink-url.js +37 -0
- package/dist/tools/docx/ops/replace-paragraph-at-body-index.d.ts +9 -0
- package/dist/tools/docx/ops/replace-paragraph-at-body-index.js +25 -0
- package/dist/tools/docx/ops/replace-paragraph-text-exact.d.ts +9 -0
- package/dist/tools/docx/ops/replace-paragraph-text-exact.js +21 -0
- package/dist/tools/docx/ops/set-color-for-paragraph-exact.d.ts +8 -0
- package/dist/tools/docx/ops/set-color-for-paragraph-exact.js +23 -0
- package/dist/tools/docx/ops/set-color-for-style.d.ts +9 -0
- package/dist/tools/docx/ops/set-color-for-style.js +27 -0
- package/dist/tools/docx/ops/set-paragraph-style-at-body-index.d.ts +8 -0
- package/dist/tools/docx/ops/set-paragraph-style-at-body-index.js +57 -0
- package/dist/tools/docx/ops/table-set-cell-text.d.ts +9 -0
- package/dist/tools/docx/ops/table-set-cell-text.js +72 -0
- package/dist/tools/docx/parsers/image-extractor.d.ts +18 -0
- package/dist/tools/docx/parsers/image-extractor.js +61 -0
- package/dist/tools/docx/parsers/index.d.ts +9 -0
- package/dist/tools/docx/parsers/index.js +9 -0
- package/dist/tools/docx/parsers/paragraph-parser.d.ts +2 -0
- package/dist/tools/docx/parsers/paragraph-parser.js +88 -0
- package/dist/tools/docx/parsers/table-parser.d.ts +9 -0
- package/dist/tools/docx/parsers/table-parser.js +72 -0
- package/dist/tools/docx/parsers/xml-parser.d.ts +25 -0
- package/dist/tools/docx/parsers/xml-parser.js +71 -0
- package/dist/tools/docx/parsers/zip-reader.d.ts +23 -0
- package/dist/tools/docx/parsers/zip-reader.js +52 -0
- package/dist/tools/docx/read.d.ts +27 -0
- package/dist/tools/docx/read.js +188 -0
- package/dist/tools/docx/relationships.d.ts +22 -0
- package/dist/tools/docx/relationships.js +76 -0
- package/dist/tools/docx/structure.d.ts +25 -0
- package/dist/tools/docx/structure.js +102 -0
- package/dist/tools/docx/styled-html-parser.d.ts +23 -0
- package/dist/tools/docx/styled-html-parser.js +1262 -0
- package/dist/tools/docx/types.d.ts +184 -0
- package/dist/tools/docx/types.js +5 -0
- package/dist/tools/docx/utils/escaping.d.ts +13 -0
- package/dist/tools/docx/utils/escaping.js +26 -0
- package/dist/tools/docx/utils/images.d.ts +9 -0
- package/dist/tools/docx/utils/images.js +26 -0
- package/dist/tools/docx/utils/index.d.ts +12 -0
- package/dist/tools/docx/utils/index.js +17 -0
- package/dist/tools/docx/utils/markdown.d.ts +13 -0
- package/dist/tools/docx/utils/markdown.js +32 -0
- package/dist/tools/docx/utils/paths.d.ts +15 -0
- package/dist/tools/docx/utils/paths.js +27 -0
- package/dist/tools/docx/utils/versioning.d.ts +25 -0
- package/dist/tools/docx/utils/versioning.js +55 -0
- package/dist/tools/docx/utils.d.ts +101 -0
- package/dist/tools/docx/utils.js +299 -0
- package/dist/tools/docx/validate.d.ts +33 -0
- package/dist/tools/docx/validate.js +49 -0
- package/dist/tools/docx/validators.d.ts +13 -0
- package/dist/tools/docx/validators.js +40 -0
- package/dist/tools/docx/write.d.ts +17 -0
- package/dist/tools/docx/write.js +88 -0
- package/dist/tools/docx/zip.d.ts +21 -0
- package/dist/tools/docx/zip.js +35 -0
- package/dist/tools/schemas.d.ts +13 -0
- package/dist/tools/schemas.js +5 -0
- package/dist/types.d.ts +10 -0
- package/dist/ui/contracts.d.ts +14 -0
- package/dist/ui/contracts.js +18 -0
- package/dist/ui/file-preview/index.html +16 -0
- package/dist/ui/file-preview/preview-runtime.js +13977 -0
- package/dist/ui/file-preview/shared/preview-file-types.d.ts +5 -0
- package/dist/ui/file-preview/shared/preview-file-types.js +57 -0
- package/dist/ui/file-preview/src/app.d.ts +4 -0
- package/dist/ui/file-preview/src/app.js +800 -0
- package/dist/ui/file-preview/src/components/code-viewer.d.ts +6 -0
- package/dist/ui/file-preview/src/components/code-viewer.js +73 -0
- package/dist/ui/file-preview/src/components/highlighting.d.ts +2 -0
- package/dist/ui/file-preview/src/components/highlighting.js +54 -0
- package/dist/ui/file-preview/src/components/html-renderer.d.ts +9 -0
- package/dist/ui/file-preview/src/components/html-renderer.js +63 -0
- package/dist/ui/file-preview/src/components/markdown-renderer.d.ts +1 -0
- package/dist/ui/file-preview/src/components/markdown-renderer.js +21 -0
- package/dist/ui/file-preview/src/components/toolbar.d.ts +6 -0
- package/dist/ui/file-preview/src/components/toolbar.js +75 -0
- package/dist/ui/file-preview/src/image-preview.d.ts +3 -0
- package/dist/ui/file-preview/src/image-preview.js +21 -0
- package/dist/ui/file-preview/src/main.d.ts +1 -0
- package/dist/ui/file-preview/src/main.js +5 -0
- package/dist/ui/file-preview/src/types.d.ts +1 -0
- package/dist/ui/file-preview/src/types.js +1 -0
- package/dist/ui/file-preview/styles.css +764 -0
- package/dist/ui/resources.d.ts +21 -0
- package/dist/ui/resources.js +72 -0
- package/dist/ui/shared/escape-html.d.ts +4 -0
- package/dist/ui/shared/escape-html.js +11 -0
- package/dist/ui/shared/host-lifecycle.d.ts +16 -0
- package/dist/ui/shared/host-lifecycle.js +35 -0
- package/dist/ui/shared/rpc-client.d.ts +14 -0
- package/dist/ui/shared/rpc-client.js +72 -0
- package/dist/ui/shared/theme-adaptation.d.ts +10 -0
- package/dist/ui/shared/theme-adaptation.js +118 -0
- package/dist/ui/shared/tool-header.d.ts +9 -0
- package/dist/ui/shared/tool-header.js +25 -0
- package/dist/ui/shared/tool-shell.d.ts +16 -0
- package/dist/ui/shared/tool-shell.js +65 -0
- package/dist/ui/shared/widget-state.d.ts +28 -0
- package/dist/ui/shared/widget-state.js +60 -0
- package/dist/utils/capture.d.ts +1 -0
- package/dist/utils/capture.js +10 -4
- package/dist/utils/files/docx.d.ts +34 -0
- package/dist/utils/files/docx.js +145 -0
- package/dist/utils/files/text.js +9 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- 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
|
+
}
|
package/dist/utils/files/text.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
1
|
+
export declare const VERSION = "0.2.36";
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.2.
|
|
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.
|
|
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",
|