@wonderwhy-er/desktop-commander 0.2.38 → 0.2.39
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 +53 -2
- package/dist/handlers/filesystem-handlers.d.ts +5 -0
- package/dist/handlers/filesystem-handlers.js +14 -2
- package/dist/remote-device/desktop-commander-integration.js +1 -1
- package/dist/search-manager.js +31 -38
- package/dist/server.js +8 -3
- package/dist/terminal-manager.js +4 -2
- package/dist/tools/edit.js +34 -1
- package/dist/tools/filesystem.js +91 -3
- package/dist/tools/improved-process-tools.js +2 -1
- package/dist/ui/config-editor/app.js +840 -0
- package/dist/ui/config-editor/array-modal.d.ts +19 -0
- package/dist/ui/config-editor/array-modal.js +185 -0
- package/dist/ui/config-editor/config-editor-runtime.js +65 -14096
- package/dist/ui/config-editor/main.js +2 -0
- package/dist/ui/config-editor/src/App.d.ts +43 -0
- package/dist/ui/config-editor/src/components/layout.d.ts +4 -0
- package/dist/ui/config-editor/src/components/layout.js +83 -0
- package/dist/ui/config-editor/src/components/toolbar.d.ts +1 -0
- package/dist/ui/config-editor/src/components/toolbar.js +21 -0
- package/dist/ui/config-editor/src/config-values.d.ts +6 -0
- package/dist/ui/config-editor/src/config-values.js +61 -0
- package/dist/ui/config-editor/src/contracts.d.ts +14 -0
- package/dist/ui/config-editor/src/contracts.js +3 -0
- package/dist/ui/config-editor/src/directory-browser.d.ts +6 -0
- package/dist/ui/config-editor/src/directory-browser.js +71 -0
- package/dist/ui/config-editor/src/layout.d.ts +5 -0
- package/dist/ui/config-editor/src/layout.js +90 -0
- package/dist/ui/config-editor/src/parsing.d.ts +5 -0
- package/dist/ui/config-editor/src/parsing.js +50 -0
- package/dist/ui/config-editor/src/toolbar.d.ts +1 -0
- package/dist/ui/config-editor/src/toolbar.js +18 -0
- package/dist/ui/config-editor/src/types.d.ts +17 -0
- package/dist/ui/config-editor/src/types.js +3 -0
- package/dist/ui/config-editor/src/utils/config-values.d.ts +9 -0
- package/dist/ui/config-editor/src/utils/config-values.js +61 -0
- package/dist/ui/config-editor/src/utils/directory-browser.d.ts +31 -0
- package/dist/ui/config-editor/src/utils/directory-browser.js +201 -0
- package/dist/ui/config-editor/src/utils/parsing.d.ts +8 -0
- package/dist/ui/config-editor/src/utils/parsing.js +50 -0
- package/dist/ui/config-editor/styles.css +2 -1
- package/dist/ui/file-preview/{src/app.d.ts → app.d.ts} +1 -1
- package/dist/ui/file-preview/app.js +2020 -0
- package/dist/ui/file-preview/components/code-viewer.d.ts +6 -0
- package/dist/ui/file-preview/components/code-viewer.js +73 -0
- package/dist/ui/file-preview/components/highlighting.d.ts +2 -0
- package/dist/ui/file-preview/components/highlighting.js +54 -0
- package/dist/ui/file-preview/components/html-renderer.d.ts +5 -0
- package/dist/ui/file-preview/components/html-renderer.js +47 -0
- package/dist/ui/file-preview/components/markdown-renderer.d.ts +1 -0
- package/dist/ui/file-preview/components/markdown-renderer.js +67 -0
- package/dist/ui/file-preview/components/toolbar.d.ts +6 -0
- package/dist/ui/file-preview/components/toolbar.js +75 -0
- package/dist/ui/file-preview/image-preview.d.ts +3 -0
- package/dist/ui/file-preview/image-preview.js +21 -0
- package/dist/ui/file-preview/main.js +5 -0
- package/dist/ui/file-preview/markdown/editor.d.ts +36 -0
- package/dist/ui/file-preview/markdown/editor.js +643 -0
- package/dist/ui/file-preview/markdown/linking.d.ts +9 -0
- package/dist/ui/file-preview/markdown/linking.js +210 -0
- package/dist/ui/file-preview/markdown/outline.d.ts +7 -0
- package/dist/ui/file-preview/markdown/outline.js +40 -0
- package/dist/ui/file-preview/markdown/preview.d.ts +8 -0
- package/dist/ui/file-preview/markdown/preview.js +33 -0
- package/dist/ui/file-preview/markdown/slugify.d.ts +3 -0
- package/dist/ui/file-preview/markdown/slugify.js +31 -0
- package/dist/ui/file-preview/markdown/toc.d.ts +11 -0
- package/dist/ui/file-preview/markdown/toc.js +75 -0
- package/dist/ui/file-preview/markdown/utils.d.ts +1 -0
- package/dist/ui/file-preview/markdown/utils.js +15 -0
- package/dist/ui/file-preview/markdown/workspace-controller.d.ts +25 -0
- package/dist/ui/file-preview/markdown/workspace-controller.js +40 -0
- package/dist/ui/file-preview/preview-runtime.js +384 -26533
- package/dist/ui/file-preview/shared/preview-file-types.d.ts +1 -1
- package/dist/ui/file-preview/src/App.d.ts +4 -0
- package/dist/ui/file-preview/src/App.js +564 -0
- package/dist/ui/file-preview/src/components/CodeViewer.d.ts +6 -0
- package/dist/ui/file-preview/src/components/CodeViewer.js +60 -0
- package/dist/ui/file-preview/src/components/HtmlRenderer.d.ts +8 -0
- package/dist/ui/file-preview/src/components/HtmlRenderer.js +45 -0
- package/dist/ui/file-preview/src/components/MarkdownRenderer.d.ts +1 -0
- package/dist/ui/file-preview/src/components/MarkdownRenderer.js +15 -0
- package/dist/ui/file-preview/src/components/editor-toolbar.d.ts +15 -0
- package/dist/ui/file-preview/src/components/editor-toolbar.js +384 -0
- package/dist/ui/file-preview/src/components/markdown-editor.d.ts +29 -0
- package/dist/ui/file-preview/src/components/markdown-editor.js +535 -0
- package/dist/ui/file-preview/src/components/markdown-renderer.js +47 -9
- package/dist/ui/file-preview/src/directory-controller.d.ts +8 -0
- package/dist/ui/file-preview/src/directory-controller.js +233 -0
- package/dist/ui/file-preview/src/document-layout.d.ts +20 -0
- package/dist/ui/file-preview/src/document-layout.js +109 -0
- package/dist/ui/file-preview/src/document-outline.d.ts +17 -0
- package/dist/ui/file-preview/src/document-outline.js +97 -0
- package/dist/ui/file-preview/src/document-workspace.d.ts +19 -0
- package/dist/ui/file-preview/src/document-workspace.js +33 -0
- package/dist/ui/file-preview/src/file-type-handlers.d.ts +10 -0
- package/dist/ui/file-preview/src/file-type-handlers.js +98 -0
- package/dist/ui/file-preview/src/host/external-actions.d.ts +19 -0
- package/dist/ui/file-preview/src/host/external-actions.js +94 -0
- package/dist/ui/file-preview/src/host/selection-context.d.ts +9 -0
- package/dist/ui/file-preview/src/host/selection-context.js +106 -0
- package/dist/ui/file-preview/src/markdown/block-merge.d.ts +25 -0
- package/dist/ui/file-preview/src/markdown/block-merge.js +86 -0
- package/dist/ui/file-preview/src/markdown/conflict-dialog.d.ts +40 -0
- package/dist/ui/file-preview/src/markdown/conflict-dialog.js +163 -0
- package/dist/ui/file-preview/src/markdown/controller.d.ts +38 -0
- package/dist/ui/file-preview/src/markdown/controller.js +921 -0
- package/dist/ui/file-preview/src/markdown/editor.d.ts +35 -0
- package/dist/ui/file-preview/src/markdown/editor.js +691 -0
- package/dist/ui/file-preview/src/markdown/link-modal.d.ts +13 -0
- package/dist/ui/file-preview/src/markdown/link-modal.js +213 -0
- package/dist/ui/file-preview/src/markdown/linking.d.ts +16 -0
- package/dist/ui/file-preview/src/markdown/linking.js +228 -0
- package/dist/ui/file-preview/src/markdown/outline.d.ts +2 -0
- package/dist/ui/file-preview/src/markdown/outline.js +16 -0
- package/dist/ui/file-preview/src/markdown/parser.d.ts +30 -0
- package/dist/ui/file-preview/src/markdown/parser.js +38 -0
- package/dist/ui/file-preview/src/markdown/preview.d.ts +1 -0
- package/dist/ui/file-preview/src/markdown/preview.js +20 -0
- package/dist/ui/file-preview/src/markdown/raw-editor.d.ts +8 -0
- package/dist/ui/file-preview/src/markdown/raw-editor.js +61 -0
- package/dist/ui/file-preview/src/markdown/selection-toolbar.d.ts +14 -0
- package/dist/ui/file-preview/src/markdown/selection-toolbar.js +128 -0
- package/dist/ui/file-preview/src/markdown/slugify.d.ts +3 -0
- package/dist/ui/file-preview/src/markdown/slugify.js +31 -0
- package/dist/ui/file-preview/src/markdown/toc.d.ts +11 -0
- package/dist/ui/file-preview/src/markdown/toc.js +75 -0
- package/dist/ui/file-preview/src/markdown/utils.d.ts +1 -0
- package/dist/ui/file-preview/src/markdown/utils.js +15 -0
- package/dist/ui/file-preview/src/markdown-workspace/editor.d.ts +36 -0
- package/dist/ui/file-preview/src/markdown-workspace/editor.js +643 -0
- package/dist/ui/file-preview/src/markdown-workspace/linking.d.ts +9 -0
- package/dist/ui/file-preview/src/markdown-workspace/linking.js +210 -0
- package/dist/ui/file-preview/src/markdown-workspace/outline.d.ts +7 -0
- package/dist/ui/file-preview/src/markdown-workspace/outline.js +40 -0
- package/dist/ui/file-preview/src/markdown-workspace/preview.d.ts +8 -0
- package/dist/ui/file-preview/src/markdown-workspace/preview.js +33 -0
- package/dist/ui/file-preview/src/markdown-workspace/slugify.d.ts +3 -0
- package/dist/ui/file-preview/src/markdown-workspace/slugify.js +31 -0
- package/dist/ui/file-preview/src/markdown-workspace/toc.d.ts +11 -0
- package/dist/ui/file-preview/src/markdown-workspace/toc.js +75 -0
- package/dist/ui/file-preview/src/markdown-workspace/utils.d.ts +1 -0
- package/dist/ui/file-preview/src/markdown-workspace/utils.js +15 -0
- package/dist/ui/file-preview/src/markdown-workspace/workspace-controller.d.ts +25 -0
- package/dist/ui/file-preview/src/markdown-workspace/workspace-controller.js +40 -0
- package/dist/ui/file-preview/src/model.d.ts +34 -0
- package/dist/ui/file-preview/src/panel-actions.d.ts +17 -0
- package/dist/ui/file-preview/src/panel-actions.js +182 -0
- package/dist/ui/file-preview/src/path-utils.d.ts +6 -0
- package/dist/ui/file-preview/src/path-utils.js +64 -0
- package/dist/ui/file-preview/src/payload-utils.d.ts +11 -0
- package/dist/ui/file-preview/src/payload-utils.js +94 -0
- package/dist/ui/file-preview/styles.css +1066 -233
- package/dist/ui/file-preview/types.d.ts +1 -0
- package/dist/ui/server-integration.d.ts +13 -0
- package/dist/ui/server-integration.js +31 -0
- package/dist/ui/shared/ToolHeader.d.ts +9 -0
- package/dist/ui/shared/ToolHeader.js +29 -0
- package/dist/ui/shared/app-bootstrap.d.ts +9 -0
- package/dist/ui/shared/app-bootstrap.js +15 -0
- package/dist/ui/shared/guards.d.ts +1 -0
- package/dist/ui/shared/guards.js +3 -0
- package/dist/ui/shared/host-lifecycle.d.ts +1 -0
- package/dist/ui/shared/host-lifecycle.js +8 -2
- package/dist/ui/shared/widget-state.d.ts +6 -1
- package/dist/ui/shared/widget-state.js +102 -4
- package/dist/utils/files/base.d.ts +2 -0
- package/dist/utils/open-browser.js +1 -1
- package/dist/utils/ui-call-context.d.ts +8 -0
- package/dist/utils/ui-call-context.js +72 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -1
- package/dist/data/spec-kit-prompts.json +0 -123
- package/dist/handlers/macos-control-handlers.d.ts +0 -16
- package/dist/handlers/macos-control-handlers.js +0 -81
- package/dist/handlers/node-handlers.d.ts +0 -6
- package/dist/handlers/node-handlers.js +0 -73
- package/dist/handlers/test-crash-handler.d.ts +0 -11
- package/dist/handlers/test-crash-handler.js +0 -26
- package/dist/http-index.d.ts +0 -45
- package/dist/http-index.js +0 -51
- package/dist/http-server-auto-tunnel.js +0 -667
- package/dist/http-server-named-tunnel.d.ts +0 -2
- package/dist/http-server-named-tunnel.js +0 -167
- package/dist/http-server-tunnel.d.ts +0 -2
- package/dist/http-server-tunnel.js +0 -111
- package/dist/http-server.d.ts +0 -2
- package/dist/http-server.js +0 -270
- package/dist/index-oauth.d.ts +0 -2
- package/dist/index-oauth.js +0 -201
- package/dist/lib.d.ts +0 -10
- package/dist/lib.js +0 -10
- package/dist/oauth/auth-middleware.d.ts +0 -20
- package/dist/oauth/auth-middleware.js +0 -62
- package/dist/oauth/index.d.ts +0 -3
- package/dist/oauth/index.js +0 -3
- package/dist/oauth/oauth-manager.d.ts +0 -80
- package/dist/oauth/oauth-manager.js +0 -179
- package/dist/oauth/oauth-routes.d.ts +0 -3
- package/dist/oauth/oauth-routes.js +0 -377
- package/dist/oauth/provider.d.ts +0 -22
- package/dist/oauth/provider.js +0 -124
- package/dist/oauth/server.d.ts +0 -18
- package/dist/oauth/server.js +0 -160
- package/dist/oauth/types.d.ts +0 -54
- package/dist/oauth/types.js +0 -2
- package/dist/remote-device/templates/auth-success.d.ts +0 -1
- package/dist/remote-device/templates/auth-success.js +0 -30
- package/dist/setup.log +0 -275
- package/dist/test-setup.js +0 -14
- package/dist/tools/docx/builders/html-builder.d.ts +0 -17
- package/dist/tools/docx/builders/html-builder.js +0 -92
- package/dist/tools/docx/builders/image.d.ts +0 -14
- package/dist/tools/docx/builders/image.js +0 -84
- package/dist/tools/docx/builders/index.d.ts +0 -11
- package/dist/tools/docx/builders/index.js +0 -11
- package/dist/tools/docx/builders/markdown-builder.d.ts +0 -2
- package/dist/tools/docx/builders/markdown-builder.js +0 -260
- package/dist/tools/docx/builders/paragraph.d.ts +0 -12
- package/dist/tools/docx/builders/paragraph.js +0 -29
- package/dist/tools/docx/builders/table.d.ts +0 -10
- package/dist/tools/docx/builders/table.js +0 -138
- package/dist/tools/docx/builders/utils.d.ts +0 -5
- package/dist/tools/docx/builders/utils.js +0 -18
- package/dist/tools/docx/constants.d.ts +0 -32
- package/dist/tools/docx/constants.js +0 -61
- package/dist/tools/docx/converters/markdown-to-html.d.ts +0 -17
- package/dist/tools/docx/converters/markdown-to-html.js +0 -111
- package/dist/tools/docx/create.d.ts +0 -21
- package/dist/tools/docx/create.js +0 -386
- package/dist/tools/docx/dom.d.ts +0 -139
- package/dist/tools/docx/dom.js +0 -448
- package/dist/tools/docx/errors.d.ts +0 -28
- package/dist/tools/docx/errors.js +0 -48
- package/dist/tools/docx/extractors/images.d.ts +0 -14
- package/dist/tools/docx/extractors/images.js +0 -40
- package/dist/tools/docx/extractors/metadata.d.ts +0 -14
- package/dist/tools/docx/extractors/metadata.js +0 -64
- package/dist/tools/docx/extractors/sections.d.ts +0 -14
- package/dist/tools/docx/extractors/sections.js +0 -61
- package/dist/tools/docx/html.d.ts +0 -17
- package/dist/tools/docx/html.js +0 -111
- package/dist/tools/docx/index.d.ts +0 -10
- package/dist/tools/docx/index.js +0 -10
- package/dist/tools/docx/markdown.d.ts +0 -84
- package/dist/tools/docx/markdown.js +0 -507
- package/dist/tools/docx/modify.d.ts +0 -28
- package/dist/tools/docx/modify.js +0 -271
- package/dist/tools/docx/operations/handlers/index.d.ts +0 -39
- package/dist/tools/docx/operations/handlers/index.js +0 -152
- package/dist/tools/docx/operations/html-manipulator.d.ts +0 -24
- package/dist/tools/docx/operations/html-manipulator.js +0 -352
- package/dist/tools/docx/operations/index.d.ts +0 -14
- package/dist/tools/docx/operations/index.js +0 -61
- package/dist/tools/docx/operations/operation-handlers.d.ts +0 -3
- package/dist/tools/docx/operations/operation-handlers.js +0 -67
- package/dist/tools/docx/operations/preprocessor.d.ts +0 -14
- package/dist/tools/docx/operations/preprocessor.js +0 -44
- package/dist/tools/docx/operations/xml-replacer.d.ts +0 -9
- package/dist/tools/docx/operations/xml-replacer.js +0 -35
- package/dist/tools/docx/operations.d.ts +0 -13
- package/dist/tools/docx/operations.js +0 -13
- package/dist/tools/docx/ops/delete-paragraph-at-body-index.d.ts +0 -11
- package/dist/tools/docx/ops/delete-paragraph-at-body-index.js +0 -23
- package/dist/tools/docx/ops/header-replace-text-exact.d.ts +0 -13
- package/dist/tools/docx/ops/header-replace-text-exact.js +0 -55
- package/dist/tools/docx/ops/index.d.ts +0 -17
- package/dist/tools/docx/ops/index.js +0 -70
- package/dist/tools/docx/ops/insert-image-after-text.d.ts +0 -24
- package/dist/tools/docx/ops/insert-image-after-text.js +0 -128
- package/dist/tools/docx/ops/insert-paragraph-after-text.d.ts +0 -12
- package/dist/tools/docx/ops/insert-paragraph-after-text.js +0 -74
- package/dist/tools/docx/ops/insert-table-after-text.d.ts +0 -19
- package/dist/tools/docx/ops/insert-table-after-text.js +0 -57
- package/dist/tools/docx/ops/replace-hyperlink-url.d.ts +0 -12
- package/dist/tools/docx/ops/replace-hyperlink-url.js +0 -37
- package/dist/tools/docx/ops/replace-paragraph-at-body-index.d.ts +0 -9
- package/dist/tools/docx/ops/replace-paragraph-at-body-index.js +0 -25
- package/dist/tools/docx/ops/replace-paragraph-text-exact.d.ts +0 -21
- package/dist/tools/docx/ops/replace-paragraph-text-exact.js +0 -36
- package/dist/tools/docx/ops/replace-table-cell-text.d.ts +0 -25
- package/dist/tools/docx/ops/replace-table-cell-text.js +0 -85
- package/dist/tools/docx/ops/set-color-for-paragraph-exact.d.ts +0 -9
- package/dist/tools/docx/ops/set-color-for-paragraph-exact.js +0 -24
- package/dist/tools/docx/ops/set-color-for-style.d.ts +0 -13
- package/dist/tools/docx/ops/set-color-for-style.js +0 -31
- package/dist/tools/docx/ops/set-paragraph-style-at-body-index.d.ts +0 -8
- package/dist/tools/docx/ops/set-paragraph-style-at-body-index.js +0 -57
- package/dist/tools/docx/ops/table-set-cell-text.d.ts +0 -9
- package/dist/tools/docx/ops/table-set-cell-text.js +0 -40
- package/dist/tools/docx/parsers/image-extractor.d.ts +0 -18
- package/dist/tools/docx/parsers/image-extractor.js +0 -61
- package/dist/tools/docx/parsers/index.d.ts +0 -9
- package/dist/tools/docx/parsers/index.js +0 -9
- package/dist/tools/docx/parsers/paragraph-parser.d.ts +0 -2
- package/dist/tools/docx/parsers/paragraph-parser.js +0 -88
- package/dist/tools/docx/parsers/table-parser.d.ts +0 -9
- package/dist/tools/docx/parsers/table-parser.js +0 -72
- package/dist/tools/docx/parsers/xml-parser.d.ts +0 -25
- package/dist/tools/docx/parsers/xml-parser.js +0 -71
- package/dist/tools/docx/parsers/zip-reader.d.ts +0 -23
- package/dist/tools/docx/parsers/zip-reader.js +0 -52
- package/dist/tools/docx/read.d.ts +0 -27
- package/dist/tools/docx/read.js +0 -308
- package/dist/tools/docx/relationships.d.ts +0 -22
- package/dist/tools/docx/relationships.js +0 -76
- package/dist/tools/docx/structure.d.ts +0 -25
- package/dist/tools/docx/structure.js +0 -102
- package/dist/tools/docx/styled-html-parser.d.ts +0 -23
- package/dist/tools/docx/styled-html-parser.js +0 -1262
- package/dist/tools/docx/types.d.ts +0 -213
- package/dist/tools/docx/types.js +0 -5
- package/dist/tools/docx/utils/escaping.d.ts +0 -13
- package/dist/tools/docx/utils/escaping.js +0 -26
- package/dist/tools/docx/utils/images.d.ts +0 -9
- package/dist/tools/docx/utils/images.js +0 -26
- package/dist/tools/docx/utils/index.d.ts +0 -12
- package/dist/tools/docx/utils/index.js +0 -17
- package/dist/tools/docx/utils/markdown.d.ts +0 -13
- package/dist/tools/docx/utils/markdown.js +0 -32
- package/dist/tools/docx/utils/paths.d.ts +0 -15
- package/dist/tools/docx/utils/paths.js +0 -27
- package/dist/tools/docx/utils/versioning.d.ts +0 -25
- package/dist/tools/docx/utils/versioning.js +0 -55
- package/dist/tools/docx/utils.d.ts +0 -101
- package/dist/tools/docx/utils.js +0 -299
- package/dist/tools/docx/validate.d.ts +0 -33
- package/dist/tools/docx/validate.js +0 -49
- package/dist/tools/docx/validators.d.ts +0 -13
- package/dist/tools/docx/validators.js +0 -40
- package/dist/tools/docx/write.d.ts +0 -17
- package/dist/tools/docx/write.js +0 -88
- package/dist/tools/docx/xml-view-test.js +0 -63
- package/dist/tools/docx/xml-view.d.ts +0 -56
- package/dist/tools/docx/xml-view.js +0 -169
- package/dist/tools/docx/zip.d.ts +0 -21
- package/dist/tools/docx/zip.js +0 -35
- package/dist/tools/macos-control/ax-adapter.d.ts +0 -55
- package/dist/tools/macos-control/ax-adapter.js +0 -438
- package/dist/tools/macos-control/cdp-adapter.d.ts +0 -23
- package/dist/tools/macos-control/cdp-adapter.js +0 -402
- package/dist/tools/macos-control/orchestrator.d.ts +0 -77
- package/dist/tools/macos-control/orchestrator.js +0 -136
- package/dist/tools/macos-control/role-aliases.d.ts +0 -5
- package/dist/tools/macos-control/role-aliases.js +0 -34
- package/dist/tools/macos-control/types.d.ts +0 -129
- package/dist/tools/pdf-processor.d.ts +0 -1
- package/dist/tools/pdf-processor.js +0 -3
- package/dist/tools/search.d.ts +0 -32
- package/dist/tools/search.js +0 -202
- package/dist/ui/file-preview/src/app.js +0 -714
- package/dist/utils/crash-logger.d.ts +0 -18
- package/dist/utils/crash-logger.js +0 -44
- package/dist/utils/dedent.d.ts +0 -8
- package/dist/utils/dedent.js +0 -38
- /package/dist/ui/config-editor/{src/app.d.ts → app.d.ts} +0 -0
- /package/dist/{http-server-auto-tunnel.d.ts → ui/config-editor/main.d.ts} +0 -0
- /package/dist/ui/config-editor/src/{app.js → App.js} +0 -0
- /package/dist/{test-docx.d.ts → ui/file-preview/main.d.ts} +0 -0
- /package/dist/ui/file-preview/src/components/{toolbar.d.ts → Toolbar.d.ts} +0 -0
- /package/dist/ui/file-preview/src/components/{toolbar.js → Toolbar.js} +0 -0
- /package/dist/{tools/docx/xml-view-test.d.ts → ui/file-preview/src/model.js} +0 -0
- /package/dist/{tools/macos-control → ui/file-preview}/types.js +0 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { parseReadRange, stripReadStatusLine } from './document-workspace.js';
|
|
2
|
+
import { extractToolText } from './payload-utils.js';
|
|
3
|
+
export function attachPanelActions(options) {
|
|
4
|
+
const queryById = (id) => (options.container.querySelector(`#${id}`));
|
|
5
|
+
const fallbackCopy = (text) => {
|
|
6
|
+
const textArea = document.createElement('textarea');
|
|
7
|
+
textArea.value = text;
|
|
8
|
+
textArea.setAttribute('readonly', '');
|
|
9
|
+
textArea.style.position = 'fixed';
|
|
10
|
+
textArea.style.top = '-9999px';
|
|
11
|
+
document.body.appendChild(textArea);
|
|
12
|
+
textArea.select();
|
|
13
|
+
const success = document.execCommand('copy');
|
|
14
|
+
document.body.removeChild(textArea);
|
|
15
|
+
return success;
|
|
16
|
+
};
|
|
17
|
+
const setButtonState = (button, label, fallbackLabel, revertMs) => {
|
|
18
|
+
button.setAttribute('title', label);
|
|
19
|
+
button.setAttribute('aria-label', label);
|
|
20
|
+
button.textContent = label;
|
|
21
|
+
if (revertMs) {
|
|
22
|
+
setTimeout(() => {
|
|
23
|
+
button.textContent = fallbackLabel;
|
|
24
|
+
button.setAttribute('title', fallbackLabel);
|
|
25
|
+
button.setAttribute('aria-label', fallbackLabel);
|
|
26
|
+
}, revertMs);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const setIconButtonState = (button, label, fallbackLabel, revertMs) => {
|
|
30
|
+
button.setAttribute('title', label);
|
|
31
|
+
button.setAttribute('aria-label', label);
|
|
32
|
+
button.dataset.status = label;
|
|
33
|
+
if (revertMs) {
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
button.setAttribute('title', fallbackLabel);
|
|
36
|
+
button.setAttribute('aria-label', fallbackLabel);
|
|
37
|
+
delete button.dataset.status;
|
|
38
|
+
}, revertMs);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const copyTextData = async (text) => {
|
|
42
|
+
try {
|
|
43
|
+
if (navigator.clipboard?.writeText) {
|
|
44
|
+
await navigator.clipboard.writeText(text);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
return fallbackCopy(text);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return fallbackCopy(text);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const fileExtension = options.getFileExtensionForAnalytics(options.payload.filePath);
|
|
54
|
+
const copyButton = queryById('copy-source');
|
|
55
|
+
copyButton?.addEventListener('click', async () => {
|
|
56
|
+
options.trackUiEvent?.('copy_clicked', {
|
|
57
|
+
file_type: options.payload.fileType,
|
|
58
|
+
file_extension: fileExtension,
|
|
59
|
+
});
|
|
60
|
+
const copied = await copyTextData(stripReadStatusLine(options.payload.content));
|
|
61
|
+
setButtonState(copyButton, copied ? 'Copied!' : 'Copy failed', 'Copy', 1500);
|
|
62
|
+
});
|
|
63
|
+
const activeCopyButton = queryById('copy-active-markdown');
|
|
64
|
+
activeCopyButton?.addEventListener('click', async () => {
|
|
65
|
+
const textToCopy = options.markdownController.getCopyText(options.payload);
|
|
66
|
+
if (!textToCopy) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const copied = await copyTextData(textToCopy);
|
|
70
|
+
if (copied) {
|
|
71
|
+
options.updateSaveStatus('Copied', 'saved');
|
|
72
|
+
window.setTimeout(() => options.updateSaveStatus('', ''), 1500);
|
|
73
|
+
}
|
|
74
|
+
setIconButtonState(activeCopyButton, copied ? 'Copied!' : 'Copy failed', 'Copy', 1500);
|
|
75
|
+
});
|
|
76
|
+
const toggleButton = queryById('toggle-html-mode');
|
|
77
|
+
toggleButton?.addEventListener('click', () => {
|
|
78
|
+
const nextMode = options.htmlMode === 'rendered' ? 'source' : 'rendered';
|
|
79
|
+
options.trackUiEvent?.('html_view_toggled', {
|
|
80
|
+
file_type: options.payload.fileType,
|
|
81
|
+
file_extension: fileExtension,
|
|
82
|
+
});
|
|
83
|
+
options.render(options.payload, nextMode, options.getIsExpanded());
|
|
84
|
+
});
|
|
85
|
+
const openFolderButton = queryById('open-in-folder');
|
|
86
|
+
if (openFolderButton) {
|
|
87
|
+
const command = options.buildOpenInFolderCommand(options.payload.filePath);
|
|
88
|
+
if (!command) {
|
|
89
|
+
openFolderButton.disabled = true;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
openFolderButton.addEventListener('click', async () => {
|
|
93
|
+
options.trackUiEvent?.('open_in_folder', {
|
|
94
|
+
file_type: options.payload.fileType,
|
|
95
|
+
file_extension: fileExtension,
|
|
96
|
+
});
|
|
97
|
+
try {
|
|
98
|
+
await options.callTool?.('start_process', { command, timeout_ms: 12000 });
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Keep UI stable if opening folder fails.
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const openEditorButton = queryById('open-in-editor');
|
|
107
|
+
if (openEditorButton) {
|
|
108
|
+
const command = options.buildOpenInEditorCommand(options.payload.filePath);
|
|
109
|
+
if (!command) {
|
|
110
|
+
openEditorButton.disabled = true;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
openEditorButton.addEventListener('click', async () => {
|
|
114
|
+
options.trackUiEvent?.('open_in_editor', {
|
|
115
|
+
file_type: options.payload.fileType,
|
|
116
|
+
file_extension: fileExtension,
|
|
117
|
+
});
|
|
118
|
+
try {
|
|
119
|
+
await options.callTool?.('start_process', { command, timeout_ms: 12000 });
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Keep UI stable if opening editor fails.
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const beforeBtn = queryById('load-before');
|
|
128
|
+
const afterBtn = queryById('load-after');
|
|
129
|
+
if (!beforeBtn && !afterBtn) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const range = parseReadRange(options.payload.content);
|
|
133
|
+
if (!range?.isPartial) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const currentContent = stripReadStatusLine(options.payload.content);
|
|
137
|
+
const loadLines = async (button, direction) => {
|
|
138
|
+
const originalText = button.textContent;
|
|
139
|
+
button.textContent = 'Loading…';
|
|
140
|
+
button.disabled = true;
|
|
141
|
+
options.trackUiEvent?.(direction === 'before' ? 'load_lines_before' : 'load_lines_after', {
|
|
142
|
+
file_type: options.payload.fileType,
|
|
143
|
+
file_extension: fileExtension,
|
|
144
|
+
});
|
|
145
|
+
try {
|
|
146
|
+
const readArgs = direction === 'before'
|
|
147
|
+
? { path: options.payload.filePath, offset: 0, length: range.fromLine - 1 }
|
|
148
|
+
: { path: options.payload.filePath, offset: range.toLine };
|
|
149
|
+
const result = await options.callTool?.('read_file', readArgs);
|
|
150
|
+
const newText = extractToolText(result);
|
|
151
|
+
if (newText && typeof newText === 'string') {
|
|
152
|
+
const cleanNew = stripReadStatusLine(newText);
|
|
153
|
+
const merged = direction === 'before'
|
|
154
|
+
? `${cleanNew}${cleanNew.endsWith('\n') ? '' : '\n'}${currentContent}`
|
|
155
|
+
: `${currentContent}${currentContent.endsWith('\n') ? '' : '\n'}${cleanNew}`;
|
|
156
|
+
const newFrom = direction === 'before' ? 1 : range.fromLine;
|
|
157
|
+
const newTo = direction === 'after' ? range.totalLines : range.toLine;
|
|
158
|
+
const lineCount = newTo - newFrom + 1;
|
|
159
|
+
const remaining = range.totalLines - newTo;
|
|
160
|
+
const isStillPartial = newFrom > 1 || newTo < range.totalLines;
|
|
161
|
+
const statusLine = isStillPartial
|
|
162
|
+
? `[Reading ${lineCount} lines from ${newFrom === 1 ? 'start' : `line ${newFrom}`} (total: ${range.totalLines} lines, ${remaining} remaining)]\n`
|
|
163
|
+
: '';
|
|
164
|
+
options.render({
|
|
165
|
+
...options.payload,
|
|
166
|
+
content: statusLine + merged,
|
|
167
|
+
}, options.htmlMode, options.getIsExpanded());
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// Fall through to button reset.
|
|
173
|
+
}
|
|
174
|
+
button.textContent = 'Failed to load';
|
|
175
|
+
setTimeout(() => {
|
|
176
|
+
button.textContent = originalText;
|
|
177
|
+
button.disabled = false;
|
|
178
|
+
}, 2000);
|
|
179
|
+
};
|
|
180
|
+
beforeBtn?.addEventListener('click', () => void loadLines(beforeBtn, 'before'));
|
|
181
|
+
afterBtn?.addEventListener('click', () => void loadLines(afterBtn, 'after'));
|
|
182
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function isWindowsAbsolutePath(value: string): boolean;
|
|
2
|
+
export declare function normalizePathSeparators(value: string): string;
|
|
3
|
+
export declare function normalizeFilePath(value: string): string;
|
|
4
|
+
export declare function getParentDirectory(filePath: string): string;
|
|
5
|
+
export declare function getAncestorDirectories(filePath: string): string[];
|
|
6
|
+
export declare function toPosixRelativePath(fromDirectory: string, targetPath: string): string;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export function isWindowsAbsolutePath(value) {
|
|
2
|
+
return /^[A-Za-z]:[\\/]/.test(value);
|
|
3
|
+
}
|
|
4
|
+
export function normalizePathSeparators(value) {
|
|
5
|
+
return value.replace(/\\/g, '/');
|
|
6
|
+
}
|
|
7
|
+
export function normalizeFilePath(value) {
|
|
8
|
+
const normalized = normalizePathSeparators(value);
|
|
9
|
+
return normalized.replace(/\/+/g, '/');
|
|
10
|
+
}
|
|
11
|
+
function getPathRoot(value) {
|
|
12
|
+
const normalized = normalizeFilePath(value);
|
|
13
|
+
if (isWindowsAbsolutePath(normalized)) {
|
|
14
|
+
return normalized.slice(0, 3);
|
|
15
|
+
}
|
|
16
|
+
return normalized.startsWith('/') ? '/' : '';
|
|
17
|
+
}
|
|
18
|
+
function getPathSegments(value) {
|
|
19
|
+
const normalized = normalizeFilePath(value);
|
|
20
|
+
const root = getPathRoot(normalized);
|
|
21
|
+
return normalized.slice(root.length).split('/').filter(Boolean);
|
|
22
|
+
}
|
|
23
|
+
export function getParentDirectory(filePath) {
|
|
24
|
+
const root = getPathRoot(filePath);
|
|
25
|
+
const segments = getPathSegments(filePath);
|
|
26
|
+
if (segments.length <= 1) {
|
|
27
|
+
return root || '.';
|
|
28
|
+
}
|
|
29
|
+
return `${root}${segments.slice(0, -1).join('/')}`;
|
|
30
|
+
}
|
|
31
|
+
export function getAncestorDirectories(filePath) {
|
|
32
|
+
const root = getPathRoot(filePath);
|
|
33
|
+
const segments = getPathSegments(filePath);
|
|
34
|
+
const ancestors = [];
|
|
35
|
+
for (let index = segments.length - 1; index >= 1; index -= 1) {
|
|
36
|
+
const ancestor = `${root}${segments.slice(0, index).join('/')}`;
|
|
37
|
+
ancestors.push(ancestor || '.');
|
|
38
|
+
}
|
|
39
|
+
if (root && ancestors[ancestors.length - 1] !== root) {
|
|
40
|
+
ancestors.push(root);
|
|
41
|
+
}
|
|
42
|
+
return ancestors;
|
|
43
|
+
}
|
|
44
|
+
export function toPosixRelativePath(fromDirectory, targetPath) {
|
|
45
|
+
const normalizedFrom = normalizeFilePath(fromDirectory);
|
|
46
|
+
const normalizedTarget = normalizeFilePath(targetPath);
|
|
47
|
+
const fromRoot = getPathRoot(normalizedFrom);
|
|
48
|
+
const targetRoot = getPathRoot(normalizedTarget);
|
|
49
|
+
if (fromRoot !== targetRoot) {
|
|
50
|
+
return normalizedTarget;
|
|
51
|
+
}
|
|
52
|
+
const fromParts = getPathSegments(normalizedFrom);
|
|
53
|
+
const targetParts = getPathSegments(normalizedTarget);
|
|
54
|
+
let shared = 0;
|
|
55
|
+
while (shared < fromParts.length
|
|
56
|
+
&& shared < targetParts.length
|
|
57
|
+
&& fromParts[shared] === targetParts[shared]) {
|
|
58
|
+
shared += 1;
|
|
59
|
+
}
|
|
60
|
+
const up = new Array(Math.max(fromParts.length - shared, 0)).fill('..');
|
|
61
|
+
const down = targetParts.slice(shared);
|
|
62
|
+
const joined = [...up, ...down].join('/');
|
|
63
|
+
return joined.length > 0 ? joined : '.';
|
|
64
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FilePreviewStructuredContent } from '../../../types.js';
|
|
2
|
+
import type { RenderPayload } from './model.js';
|
|
3
|
+
export declare function getFileExtensionForAnalytics(filePath: string): string;
|
|
4
|
+
export declare function isPreviewStructuredContent(value: unknown): value is FilePreviewStructuredContent;
|
|
5
|
+
export declare function buildRenderPayload(meta: FilePreviewStructuredContent, text: string): RenderPayload;
|
|
6
|
+
export declare function extractToolText(value: unknown): string | undefined;
|
|
7
|
+
export declare function extractRenderPayload(value: unknown): RenderPayload | undefined;
|
|
8
|
+
export declare function assertSuccessfulEditBlockResult(result: unknown): void;
|
|
9
|
+
export declare function isLikelyUrl(filePath: string): boolean;
|
|
10
|
+
export declare function buildBreadcrumb(filePath: string): string;
|
|
11
|
+
export declare function countContentLines(content: string): number;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { escapeHtml } from './components/highlighting.js';
|
|
2
|
+
import { stripReadStatusLine } from './document-workspace.js';
|
|
3
|
+
function isObjectRecord(value) {
|
|
4
|
+
return typeof value === 'object' && value !== null;
|
|
5
|
+
}
|
|
6
|
+
export function getFileExtensionForAnalytics(filePath) {
|
|
7
|
+
const normalizedPath = filePath.trim().replace(/\\/g, '/');
|
|
8
|
+
const fileName = normalizedPath.split('/').pop() ?? normalizedPath;
|
|
9
|
+
const dotIndex = fileName.lastIndexOf('.');
|
|
10
|
+
if (dotIndex <= 0 || dotIndex === fileName.length - 1) {
|
|
11
|
+
return 'none';
|
|
12
|
+
}
|
|
13
|
+
return fileName.slice(dotIndex + 1).toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
export function isPreviewStructuredContent(value) {
|
|
16
|
+
if (!isObjectRecord(value)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return (typeof value.fileName === 'string' &&
|
|
20
|
+
typeof value.filePath === 'string' &&
|
|
21
|
+
typeof value.fileType === 'string');
|
|
22
|
+
}
|
|
23
|
+
export function buildRenderPayload(meta, text) {
|
|
24
|
+
return { ...meta, content: text };
|
|
25
|
+
}
|
|
26
|
+
export function extractToolText(value) {
|
|
27
|
+
if (!isObjectRecord(value)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const content = value.content;
|
|
31
|
+
if (!Array.isArray(content)) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
for (const item of content) {
|
|
35
|
+
if (!isObjectRecord(item)) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (item.type === 'text' && typeof item.text === 'string' && item.text.trim().length > 0) {
|
|
39
|
+
return item.text;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
export function extractRenderPayload(value) {
|
|
45
|
+
if (!isObjectRecord(value)) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const meta = isPreviewStructuredContent(value.structuredContent)
|
|
49
|
+
? value.structuredContent
|
|
50
|
+
: isPreviewStructuredContent(value)
|
|
51
|
+
? value
|
|
52
|
+
: null;
|
|
53
|
+
if (!meta)
|
|
54
|
+
return undefined;
|
|
55
|
+
const text = extractToolText(value) ?? extractToolText(value.structuredContent) ?? '';
|
|
56
|
+
return buildRenderPayload(meta, text);
|
|
57
|
+
}
|
|
58
|
+
export function assertSuccessfulEditBlockResult(result) {
|
|
59
|
+
if (!isObjectRecord(result)) {
|
|
60
|
+
throw new Error('edit_block did not return a valid result.');
|
|
61
|
+
}
|
|
62
|
+
if (result.isError === true) {
|
|
63
|
+
const message = extractToolText(result) ?? '';
|
|
64
|
+
throw new Error(message || 'edit_block failed.');
|
|
65
|
+
}
|
|
66
|
+
// edit_block uses soft-failure returns (no isError flag) for cases the LLM
|
|
67
|
+
// is meant to recover from — "Search content not found", "Expected N
|
|
68
|
+
// occurrences but found M", fuzzy-match-too-close-to-ignore, etc. These
|
|
69
|
+
// look like success to a naive client. A real success always carries
|
|
70
|
+
// structuredContent (see src/tools/edit.ts — the write path attaches
|
|
71
|
+
// fileName/filePath/fileType); absence means the edit did not land.
|
|
72
|
+
// Throwing here routes soft failures through saveDocument's catch, which
|
|
73
|
+
// reloads disk, preserves the user's draft, and surfaces the server's
|
|
74
|
+
// message to the user.
|
|
75
|
+
if (!isObjectRecord(result.structuredContent)) {
|
|
76
|
+
const message = extractToolText(result) ?? '';
|
|
77
|
+
throw new Error(message || 'edit_block did not confirm success.');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export function isLikelyUrl(filePath) {
|
|
81
|
+
return /^https?:\/\//i.test(filePath);
|
|
82
|
+
}
|
|
83
|
+
export function buildBreadcrumb(filePath) {
|
|
84
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
85
|
+
const parts = normalized.split('/').filter(Boolean);
|
|
86
|
+
return parts.map((part) => escapeHtml(part)).join(' <span class="breadcrumb-sep">›</span> ');
|
|
87
|
+
}
|
|
88
|
+
export function countContentLines(content) {
|
|
89
|
+
const cleaned = stripReadStatusLine(content);
|
|
90
|
+
if (cleaned === '')
|
|
91
|
+
return 0;
|
|
92
|
+
const lines = cleaned.split('\n');
|
|
93
|
+
return lines[lines.length - 1] === '' ? lines.length - 1 : lines.length;
|
|
94
|
+
}
|